From 4f3d3596b24b5bd86a4fd92801d0ffb68711d06a Mon Sep 17 00:00:00 2001 From: euronion Date: Tue, 1 Jul 2025 11:40:25 +0200 Subject: [PATCH 01/43] dev: Use cases, design and context --- docs/class-diagram.puml | 232 +++++++++++++++++++++++++ docs/copilot-context.md | 22 +++ docs/design.md | 374 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 628 insertions(+) create mode 100644 docs/class-diagram.puml create mode 100644 docs/copilot-context.md create mode 100644 docs/design.md diff --git a/docs/class-diagram.puml b/docs/class-diagram.puml new file mode 100644 index 00000000..0bbdbdf1 --- /dev/null +++ b/docs/class-diagram.puml @@ -0,0 +1,232 @@ +@startuml Class Diagram +class UnitValue { + - value: float + - unit: str +} + +note left of UnitValue::unit + Unit should be able to accomodate any unit of measurement, + currencies+years, LHVs and different energy carriers. + e.g. EUR_2020, kWh_electricity, kWh_hydrogen_LHV +end note + +class Source { + - name: str + - authors: str + - url: str + - url_archive: str + - urldate: str + - urldate_archive: str + + + store_in_wayback() + + retrieve_from_wayback() +} + +note right of Source::store_in_wayback + Stores the source in the Internet Archive's Wayback Machine, + to keep it accessible in the future. +end note + +note right of Source::retrieve_from_wayback + Retrieves the archive of the source, e.g., from a URL. +end note + +class Parameter { + - quantity: UnitValue + - provenance: str + - note: str + - sources: SourceContainer +} + +Parameter --> UnitValue : quantity + +note right of Parameter + Encapsulates a value, its unit (via UnitValue, as quantity), + data provenance (via sources). +end note + +class Technology { + - region: str + - case: str + - year: int + - technology: str + - detailed_technology: str + - capacity: Parameter + - investment: Parameter + - specific_investment: Parameter + - lifetime: Parameter + - wacc: Parameter + // Parameters are examples + // The user should be able to freely add more parameters + - ...: Parameter + // To distinguish different inputs/outputs, use prefixes like + - input-hydrogen: Parameter + - input-electricity: Parameter + - ... + - output-hydrogen: Parameter + - output-electricity: Parameter + + + adjust_currency(): Technology // or inplace + + adjust_region(): Technology // or inplace + + adjust_scale(): Technology // or inplace + + calculate_EAC(): Parameter // or inplace + + calculate_efficiency(): Parameter // or inplace + + calculate_specific_investment(): Parameter // or inplace +} + +note right of Technology::inputs + A technology generally represents a conversion between + an input and an output. These are all the inputs, e.g. + quantity of water and electricity. +end note + +note right of Technology::outputs + A technology generally represents a conversion between + an input and an output. These are all the outputs, e.g. + quantity hydrogen, oxygen and heat. +end note + +note right of Technology::adjust_currency + Changes the currency used by all attributes using currencies. +end note + +note right of Technology::adjust_region + Based on yet-to-be-determined logic and inputs, change the + attributes of the Technology to match a different region. +end note + +note right of Technology::adjust_scale + Scales some members values (e.g., capacity, investment) to a + different capacity based on a scaling factor. +end note + +note right of Technology::calculate_EAC + The `calculate_XXX` methods use attributes from the + Technology object to calculate the values of missing attributes + (or potentially calculate and then compare with current values + to check for consistency). +end note + +class Container { + - schema_name: str + - schema_path: Path + + get(**criteria): object | Container | None + + to_csv() + + to_excel() + + to_dataframe() +} + +note top of Container + Consider 'Container' as abstract base class for all containers + for unifying the common export and schema-related functionality + required by all data-holding classes. +end note + +note left of Container::schema_name + The name of the schema used for this container, e.g. currently "technologies" or "sources". + This is used to identify the type of data contained in the container. +end note + +note left of Container::get + Provides a generic get(**criteria) + method to retrieve contained objects matching selection criteria: + - If exactly one object matches, returns that object or a Container with this one object. + - If multiple objects match, returns a Container of the same type with the matches. + - If no matches, returns None or an empty Container. +end note + +note left of Container::to_csv + Export the data to a csv file for sharing / usage in e.g. Excel, ... . + Aligned with datapackage schema. + e.g. all {technology} or {source} objects. + Like the current Technologies(...).to_csv() method. +end note + +note left of Container::to_excel + Export all the data to a excel file for usage in Excel and similar tools, ... . + Aligned with datapackage schema. +end note + +note left of Container::to_dataframe + Flatten the Container and its members into a pandas DataFrame, that can be manipulated. + Dataframe should be compatible with the datapackage schema, such that it can be used for e.g. the to_csv() method. +end note + + +class TechnologyContainer { + - technologies: Iterable + + get(**criteria): Technology | TechnologyContainer | None + + create_projection(): TechnologyContainer + ' TODO: Think about more methods here +} + +note right of TechnologyContainer::get + Implements the generic get method from "Container" for "TechnologyContainer". + Filters contained Technology objects by the attributes and returns matches: + region, case, year, technology, detailed_technology. + - If exactly one Technology matches, returns that Technology. + - If multiple Technologies match, returns a TechnologyContainer with the matches. + - If no matches, returns None or an empty TechnologyContainer. +end note + +note right of TechnologyContainer::create_projection + e.g. learning curve, interpolation, extrapolation; + based on the Technology objects in the container. + Either returns a new TechnologyContainer or adds the + Technology objects to the current container. +end note + +class SourceContainer { + - sources: Iterable + + retrieve_all_archives() +} + +note left of SourceContainer::retrieve_all_archives + Triggers the retrieve_from_wayback method for all sources + and stores the files locally. +end note + +class Datapackage { + - name: str + - path: Path + - technologies: TechnologyContainer + - sources: SourceContainer + - // potentially other Containers in the future + + to_datapackage() +} + +note top of Datapackage + Represents a datapackage, which is a collection of data files + and metadata that describes the data. + Our package includes pre-packaged data in this format and allows + enables to read and write data in this standardised way. + Currently implemented through frictionless with .csv and schema.json files. +end note + +note right of Datapackage::name + Currently we use "source" as a reference to pre-packaged data and for a column in "technologies.csv". + The Datapackage.name would substitute for referencing to pre-packaged data, e.g. "example01" would be + a packaged data included with `technologydata`. +end note + +note right of Datapackage::technologies + Derived from the TechnologyContainer. +end note + +note right of Datapackage::sources + Derived from all Source objects that are related to the TechnologyContainer (i.e., all sources referenced by technologies and their parameters). +end note + +note right of Datapackage::to_datapackage + Exports all member Source and TechnologyContainer to a folder following the datapackage + specification, including the schema .json files and the .csv files. +end note + +Container <|-- TechnologyContainer +Container <|-- SourceContainer +Parameter --> SourceContainer : sources +Technology --> "*" Parameter : uses for its members +TechnologyContainer --> "*" Technology : consists of +SourceContainer --> "*" Source : consists of +Datapackage --> "1" TechnologyContainer : contains +@enduml \ No newline at end of file diff --git a/docs/copilot-context.md b/docs/copilot-context.md new file mode 100644 index 00000000..48efa9d9 --- /dev/null +++ b/docs/copilot-context.md @@ -0,0 +1,22 @@ +## General + +* Description of use cases in `docs/design.md` +* Class diagramm in `docs/class-diagram.puml` + +## Tools + +* `ruff` for formatting and linting +* `uv` for package management with `pyproject.toml` for configuration and package metadata +* `pytest` for testing all classes and methods + * a `tests/conftest.py` for all the fixtures + * a `tests//input` and `tests//output` for input and output files +* `mypy` for type checking +* `pre-commit` for setting up linting, formatting and checking hooks, configured via `.pre-commit-config.yaml` +* `pydantic` for data validation +* `mkdocs` for documentation generation, configured via `docs/mkdocs.yaml` + +## Packages to depend on + +* `pydeflate` for currency conversions and inflation adjustments +* `pint` for unit conversions +* `savepagenow` for archiving web pages using the Wayback Machine \ No newline at end of file diff --git a/docs/design.md b/docs/design.md new file mode 100644 index 00000000..31064d38 --- /dev/null +++ b/docs/design.md @@ -0,0 +1,374 @@ +# Design + +1. [Design](#design) + 1. [Target audience](#target-audience) + 2. [Use Cases](#use-cases) + 1. [🧾 UC-001: Screen techno-economic inputs for validity and completeness](#uc-001-screen-techno-economic-inputs-for-validity-and-completeness) + 2. [🧾 UC-002: Harmonize multiple input datasets](#uc-002-harmonize-multiple-input-datasets) + 3. [🧾 UC-003: Transform assumptions into model-ready formats](#uc-003-transform-assumptions-into-model-ready-formats) + 4. [🧾 UC-004: Compare techno-economic indicators across datasets](#uc-004-compare-techno-economic-indicators-across-datasets) + 5. [🧾 UC-005: Audit data provenance and transformation trace](#uc-005-audit-data-provenance-and-transformation-trace) + + +`technologydata` is designed for energy system modellers in mind. +It intendeds to serve common use cases encountered during the design, development and execution of energy system model experiments, such as: + +* Screening techno-economic inputs for energy systems +* Comparing techno-economics indicators +* Harmonizing inputs +* Modelling of input assumptions for gap filling +* Transformation of assumptions into model-ready input formats + +The project was started for PyPSA-Eur and has since then been expanded to serve more models and purposes. +As such it has been leaning towards serving the purposes of PyPSA-Eur and related models. +We hope to expand it to serve the wider energy system modeling community and a such welcome suggestions and contributions. + +## Target audience + +The users we target are Energy System Modellers and Analysts. +We assume they are all: + +* Familiar with the concept of techno-economics on how to describe technical and economic parameters of technologies for energy system models +* Familiar with the methodology of transforming techno-economic parameters for alignment and harmonization + +The users differ in their experience in these fields, but are generally aware of the methodological background behind +the transformations that we make available, like inflation adjustments, currency conversions or unit conversions. + +* They prefer simplicity and robustness in use over being able to customize the transformations. +* They would like to be offered a range of options to choose from, but not too many. +* They would like to be able to use the package without having to read too much documentation, but require clear documentation on the transformations that are applied. +* Data provenance and reproducibility are important to them, so they need to be able to trace data back to its source and understand all individual steps that were applied in the transformation process to the data. + +The users differ in their experience with Python and programming in general, we aim to serve three main user types: + +1. Programmers and Data Engineers: + * Well familiar with using Python and object-oriented programming languages, data processing and exchange formats. + * Interacts with the package through Python scripts, Python modules and Jupyter notebooks. +2. Energy System Modeller: + * Only basic Python programming skills. + * Interacts with the package through a Jupyter notebook or a Python script; may want to simply access and inspect the data without writing and executing code. +3. Energy Analyst: + * No programming skills or only very basic Python skills like using pandas or DataFrames. + * Interacts with the package either through a Jupyter notebook or wants to be able to use csv / Spreadsheet files for inspection and use of the data. + +## Use Cases + +Below follow central use cases that we want to serve with `technologydata`. + +### 🧾 UC-001: Screen techno-economic inputs for validity and completeness + +#### πŸ§‘β€πŸ’» Actor(s) +- **Primary**: Energy System Modeller, Programmer +- **Secondary**: Energy Analyst (if reviewing pre-screened data) + +#### 🎯 Goal +Detect and correct inconsistencies or omissions in techno-economic input data, ensuring it adheres to the package's schema and parameter constraints. + +#### πŸ“š Pre-conditions +- Python environment with `technologydata` installed +- Input data provided as: + - JSON (conforming to data schema) + - package-provided JSON files (conforming to schema) + - user-provided e.g. through the `technologydata` class-interface or through a special pandas DataFrame +- Users are familiar with the structure of `Technology`, `Parameter`, and `Source` classes + +#### 🚦 Trigger +- Instantiation of one or more `Technology` object with user-provided or pre-compiled data +- Manual invocation of validation or consistency-check method + +#### 🧡 Main Flow + +1. User gets/loads or defines technology input (via JSON, DataFrame, or the packaged data). +2. `Technology` object is instantiated, triggering automatic validation. +3. Schema checks enforce: + - Presence of required fields (e.g., name, parameter value, unit, source) + - Consistency between parameters (e.g., energy unit alignment) +4. User manually runs `.check_consistency()` or similar method to detect conflicting or incomplete parameters. +5. User manually runs `.calculate_parameters()` to derive + - specific missing parameters based on known rules (e.g., specific investment, EAC), or + - all missing parameters that can be derived from the existing parameters +6. The User can manually update parameters, either overwriting existing or adding missing ones. +7. Validated and completed `Technology` object is now ready for transformation or analysis. + +#### πŸ” Alternate Flows + +- **Invalid schema**: + - System raises a validation exception and rejects the data. +- **Inconsistent parameters**: + - Warnings are logged; object remains instantiable but marked as incomplete. +- **Partial data**: + - User is able to complete missing fields to the `Technology` object + +#### βœ… Post-conditions +- One or more `Technology` objects validated and completed with all parameters that can be derived, or +- Errors on schema-violations and Warning about inconsistencies are logged. + +#### πŸ§ͺ Sample Input/Output + +```python +from technologydata import DataPackage, Parameter, Technology, Source +dp = DataPackage.from_json("path/to/data_package") # triggers validation +techs = dp.technologies # Access the TechnologyContainer + +techs.check_consistency() # Checks all technologies for consistency +techs = techs.calculate_parameters(parameters=["specific-investment", "eac"]) + +tech = techs[0] # Access a specific Technology object + +tech.check_consistency() # Check consistency of a single Technology object +tech = tech.calculate_parameters(parameters="") # Calculate missing parameters + +# Manually created Technology object +src = Source(name="A source", url="http://example.com/source") +src2 = Source(name="Another source", url="http://example.com/source2") +tech = Technology( + name="Example Technology", + parameters={ + "specific-investment": Parameter(value=1000, unit="EUR_2020/kW", sources=src), + "investment": Parameter(value=9000, unit="EUR_2020", sources=src2), + "lifetime": Parameter(value=20, unit="years", sources=[src,src2]) + }, +) + +print(tech["lifetime"]) # Access and show a specific parameter (value, unit, sources) +tech["lifetime"].value = 50 # Update a parameter value +``` + +#### πŸ“Š Importance & Frequency + +* Importance: High +* Usage Frequency: Frequent, core workflow entry point + +#### πŸ“Œ Notes + +* Consistency logic includes checks for units, and dependency constraints between parameters (e.g. one parameter may be derived from one or more other parameters). +* Schema-based validation is extensible to new parameter types and sources. + +### 🧾 UC-002: Harmonize multiple input datasets + +#### πŸ§‘β€πŸ’» Actor(s) +- **Primary**: Energy System Modeller, Energy Analyst +- **Secondary**: Data Engineer + +#### 🎯 Goal +Enable the user to bring multiple techno-economic datasets to a common basis (currency, year, units) using explicit, user-invoked transformation methods, so that they can be compared or combined. + +#### πŸ“š Pre-conditions +- Python environment with `technologydata` installed +- One or more Technology objects loaded as `DataPackage` or `TechnologyContainer` objects +- User is familiar with available transformation methods (e.g., `adjust_currency`, `adjust_scale`, `adjust_region`) + +#### 🚦 Trigger +- User loads multiple datasets and wishes to harmonize them for comparison or integration + +#### 🧡 Main Flow + +1. User loads datasets (e.g., from JSON, CSV, or DataFrame) into separate `DataPackage` or `TechnologyContainer` objects or creates them programmatically through the package's class interface. +2. User inspects the datasets to identify differences in currency, year, units, or other conventions. +3. User applies transformation methods as needed: + - `.adjust_currency(target_currency)` + - `.adjust_scale(target_capacity, scaling_exponent)` + - `.adjust_region(target_region)` + - Unit conversions per parameter via Technology or TechnologyContainer level methods +4. User repeats or chains transformations as required or desired for each dataset. +5. User verifies harmonization by inspecting key parameters and units. +6. Harmonized datasets are now ready for comparison, merging, or further analysis. + +#### πŸ” Alternate Flows + +- **Unsupported transformation**: System raises an error if a requested transformation is not supported due to missing parameters in one or more of the Technology objects. +- **Partial harmonization**: User can harmonize only a subset of parameters. + +#### βœ… Post-conditions +- All datasets are harmonized to the user-specified conventions, e.g. currency, currency year, units. + +#### πŸ§ͺ Sample Input/Output + +```python +from technologydata import DataPackage + +dp1 = DataPackage.from_json("dataset1.json") +dp2 = DataPackage.from_json("dataset2.json") + +dp1.technologies = dp1.technologies.adjust_currency(to_currency="EUR_2020") +dp2.technologies = dp2.technologies.adjust_currency(to_currency="EUR_2020") +dp1.technologies = dp1.technologies.adjust_scale(to_capacity=100, scaling_exponent=0.5) +dp2.technologies = dp2.technologies.adjust_scale(to_capacity=100, scaling_exponent=0.5) + +dp1.technologies = dp1.technologies.adjust_region(to_region="EUR") +dp2.technologies = dp2.technologies.adjust_region(to_region="EUR") + +dp1.technologies = dp1.technologies.adjust_units(parameter="specific-investment", to_unit="EUR/kW") +# ... further harmonization as needed +``` + +#### πŸ“Š Importance & Frequency + +* Importance: High +* Usage Frequency: Frequent, especially when integrating or comparing datasets + +#### πŸ“Œ Notes + +* All harmonization steps are explicit and user-driven; no automatic harmonization is performed. +* The user is responsible for the order and combination of transformations. +* Optionally, each transformation could be logged as data provenance, allowing users to trace back the steps taken and record them in e.g. a output file for documentation. + +### 🧾 UC-003: Transform assumptions into model-ready formats + +#### πŸ§‘β€πŸ’» Actor(s) +- **Primary**: Energy System Modeller, Programmer + +#### 🎯 Goal +Allow the user to derive and access all model-relevant parameters (e.g., EAC, specific investment) from harmonized data, ready for direct use in energy system models such as PyPSA-Eur. + +#### πŸ“š Pre-conditions +- One `Technology` object or multiple in a `TechnologyContainer` or `DataPackage` available +- User knows which parameters are required for the target model + +#### 🚦 Trigger +- User wants to prepare data for model input, e.g., for PyPSA-Eur + +#### 🧡 Main Flow + +1. User ensures all required base parameters (e.g., WACC, lifetime, investment) are present and harmonized. +2. User invokes calculation methods to derive model-ready parameters: + - `.calculate_parameters(parameters="EAC")` + - `.calculate_parameters(parameters="specific-investment")` +3. System computes and adds the derived parameters to the relevant `Technology` objects. +4. User accesses the parameters directly from the `Technology` objects for export or further use. + +#### πŸ” Alternate Flows + +- **Missing base parameters**: System raises an error if parameters required for the calculation are missing. +- **Calculation error**: System logs the error and aborts the calculation. + +#### βœ… Post-conditions +- All required model parameters are present and accessible in the `Technology` objects, ready for export or direct use. + +#### πŸ§ͺ Sample Input/Output + +```python +techs = dp.technologies +techs = techs.calculate_parameters(parameters=["specific-investment"]) + +tech = techs[0] # Access a specific Technology object +tech.calculate_parameters(parameters="EAC") +tech["EAC"].value # Access the calculated EAC parameter value +``` + +#### πŸ“Š Importance & Frequency + +* Importance: High +* Usage Frequency: Frequent, especially before running model scenarios + +#### πŸ“Œ Notes + +- + +### 🧾 UC-004: Compare techno-economic indicators across datasets + +#### πŸ§‘β€πŸ’» Actor(s) +- **Primary**: Energy Analyst, Energy System Modeller + +#### 🎯 Goal +Enable the user to systematically compare key techno-economic parameters (e.g., CAPEX, OPEX, efficiency) across multiple harmonized datasets in a tabular format. + +#### πŸ“š Pre-conditions +- Two or more `Technology` objects available as `TechnologyContainer` or `DataPackage` objects +- User knows which parameters and technologies to compare + +#### 🚦 Trigger +- User wants to compare indicators across datasets for quality control, reporting, or analysis + +#### 🧡 Main Flow + +1. User selects datasets for comparison and technologies based on similar features, e.g. the same technology name. +2. User aligns datasets on specified parameters. +3. User generates a comparison table (e.g., pandas DataFrame) showing values from each dataset side by side. +4. User reviews the DataFrame, exports it for further analysis and optionally creates visualizations using external tools. + +#### πŸ” Alternate Flows + +- **Manually created comparison**: User can manually create a comparison table by selecting specific parameters and technologies individually through their `.values` attributes. + +#### βœ… Post-conditions +- Tabular comparison of selected parameters across datasets is available for review and export. + +#### πŸ§ͺ Sample Input/Output + +```python +from technologydata import DataPackage + +dp = DataPackage([dp1, dp2]) + +techs = dp.technologies + +techs = techs.get(technology="Solar PV", region="EUR") +comparison_df.to_dataframe() + +techs["lifetime"].values # Access lifetime values across technologies +``` + +#### πŸ“Š Importance & Frequency + +* Importance: Medium +* Usage Frequency: Regular, especially for data quality checks and exploring values to be included into a model + +#### πŸ“Œ Notes + +* Tabular comparison is the core feature; visualizations can be build on top of the DataFrame by the user themselves. +* Optional: Outlier detection and summary statistics could be a nice feature, but are also part of `pandas` already, so we can put this into the documentation as a suggestion for the user to explore themselves. + +### 🧾 UC-005: Audit data provenance and transformation trace + +#### πŸ§‘β€πŸ’» Actor(s) +- **Primary**: Energy System Modeller +- **Secondary**: Energy Analyst + +#### 🎯 Goal +Allow the user to trace the origin and transformation history of each data point, enabling transparency and reproducibility. + +#### πŸ“š Pre-conditions +- Data loaded and/or transformed using `technologydata` + +#### 🚦 Trigger +- User requests provenance or transformation history for a specific parameter, object or Container. + +#### 🧡 Main Flow + +1. User selects a `parameter` of a `Technology` object. +2. The user requests the provenance information for that parameter. +3. System provides the information about: + - Original source(s) of the data (from `Source` and `SourceContainer`) of the parameter + - All transformations applied by our package (e.g., currency adjustment, scaling, calculations, including the values that were used for these transformations) +4. User can export or document the provenance trace for reporting or documentation. + +#### πŸ” Alternate Flows + +- **Manually changed information**: If the user made manual changes at some point, then the system only notifies and provides trace over what was done by the package; User changes are not tracked. +- **Requesting provenance for a Technology or TechnologyContainer**: The user can access the provenance information for all parameters of a Technology or TechnologyContainer by exporting it to a DataFrame or JSON. + +#### βœ… Post-conditions +- User has access to a detailed provenance and transformation trace for any data point. +- Reports or logs can be exported for documentation. + +#### πŸ§ͺ Sample Input/Output + +```python +print(tech["EAC].provenance) + +techs = dp.technologies +techs.to_dataframe() # Includes provenance information in the DataFrame as a dedicated column + +dp.to_json("") # Includes provenance information in the JSON output +``` + +#### πŸ“Š Importance & Frequency + +* Importance: Medium (for transparency and reproducibility) +* Usage Frequency: Occasional, but critical for future-us, report writing and rapport + +#### πŸ“Œ Notes + +* Only transformations performed by the package are tracked; user-made changes must be recorded manually. +* Provenance tracking should be automatic and cover all package-driven transformations. From b099964e63c66263f882d022b5cf05798fea39a2 Mon Sep 17 00:00:00 2001 From: Fabrizio Finozzi <167071962+finozzifa@users.noreply.github.com> Date: Mon, 21 Jul 2025 11:02:46 +0200 Subject: [PATCH 02/43] code: initial new package structure (#13) * code: initial new package structure * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * code: add licensing with reuse * code: update .gitignore * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * code: changes to datapackage.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * update class diagram * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * code: implementation * code: new additions * code: modify puml file * code: add test_commons.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * code: new changes * new changes to source * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * code: add test_source.py * code: implement SourceCollection * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * code: source_collection * update puml * code: doc changes * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * pre-commit * doc: update design.md * code: modify example in parameter.py * doc: remove Collection class * code: export json schema * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * doc: remove Collection * pre-commit changes * doc: Container -> Collection * code: expand Source Collection * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update .github/workflows/ci.yaml remove pydeflate from CI Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * Update .gitignore remove pydeflate from .gitignore Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * Update .pre-commit-config.yaml quarterly updates Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * Update REUSE.toml remove pydeflate from REUSE.toml Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * Update REUSE.toml Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * Update technologydata/technology.py Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * new changes * Update technologydata/unit_value.py Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * code: update __init__.py description * Update REUSE.toml Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * Update REUSE.toml Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * Update REUSE.toml Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * Update REUSE.toml Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * Update pyproject.toml Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * code: remove params check in conftest.py * Update pyproject.toml Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * add author * Update technologydata/parameter.py Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * Update technologydata/datapackage.py Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * Update technologydata/source_collection.py Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * code: rework imports * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * code: fix imports * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update technologydata/source_collection.py Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * code: modify method name * Update technologydata/source_collection.py Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * code: update source_collection * code: kwargs source_collection * code: update to_json * code: modify from_json * code: add get method for SourceCollection * code: unit test get method for source_collection * Update technologydata/source_collection.py --------- Co-authored-by: Fabrizio Finozzi Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> --- .codespell.ignore | 3 + .github/workflows/ci.yaml | 41 + .gitignore | 74 + .pre-commit-config.yaml | 68 + LICENSES/CC-BY-4.0.txt | 156 + LICENSES/MIT.txt | 18 + REUSE.toml | 15 + docs/{copilot-context.md => CLAUDE.md} | 8 +- docs/class-diagram.puml | 127 +- docs/design.md | 49 +- pyproject.toml | 127 + technologydata/__init__.py | 24 + technologydata/datapackage.py | 86 + technologydata/parameter.py | 84 + technologydata/source.py | 375 +++ technologydata/source_collection.py | 199 ++ technologydata/technology.py | 182 ++ technologydata/unit_value.py | 71 + technologydata/utils/__init__.py | 13 + technologydata/utils/commons.py | 269 ++ test/conftest.py | 97 + test/test_commons.py | 141 + .../sources.json | 20 + .../technologies.json | 276 ++ .../technologies.json | 166 ++ test/test_source.py | 124 + test/test_source_collection.py | 219 ++ uv.lock | 2583 +++++++++++++++++ 28 files changed, 5516 insertions(+), 99 deletions(-) create mode 100644 .codespell.ignore create mode 100644 .github/workflows/ci.yaml create mode 100644 .gitignore create mode 100644 .pre-commit-config.yaml create mode 100644 LICENSES/CC-BY-4.0.txt create mode 100644 LICENSES/MIT.txt create mode 100644 REUSE.toml rename docs/{copilot-context.md => CLAUDE.md} (85%) create mode 100644 pyproject.toml create mode 100644 technologydata/__init__.py create mode 100644 technologydata/datapackage.py create mode 100644 technologydata/parameter.py create mode 100644 technologydata/source.py create mode 100644 technologydata/source_collection.py create mode 100644 technologydata/technology.py create mode 100644 technologydata/unit_value.py create mode 100644 technologydata/utils/__init__.py create mode 100644 technologydata/utils/commons.py create mode 100644 test/conftest.py create mode 100644 test/test_commons.py create mode 100644 test/test_data/solar_photovoltaics_example_03/sources.json create mode 100644 test/test_data/solar_photovoltaics_example_03/technologies.json create mode 100644 test/test_data/solar_photovoltaics_example_04/technologies.json create mode 100644 test/test_source.py create mode 100644 test/test_source_collection.py create mode 100644 uv.lock diff --git a/.codespell.ignore b/.codespell.ignore new file mode 100644 index 00000000..cf2749ba --- /dev/null +++ b/.codespell.ignore @@ -0,0 +1,3 @@ +# SPDX-FileCopyrightText: The technology-data authors +# +# SPDX-License-Identifier: MIT diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml new file mode 100644 index 00000000..e5c703bb --- /dev/null +++ b/.github/workflows/ci.yaml @@ -0,0 +1,41 @@ +# SPDX-FileCopyrightText: The technology-data authors +# +# SPDX-License-Identifier: MIT +name: Technologydata prototype CI + +on: + push: + branches: [prototype] + pull_request: + branches: [prototype] + +jobs: + test: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.13" + + - name: Cache Python dependencies + uses: actions/cache@v3 + with: + path: ~/.cache/pip + key: ${{ runner.os }}-pip-${{ hashFiles('**/uv.lock') }} + restore-keys: | + ${{ runner.os }}-pip- + - name: Install package and dependencies + run: | + python -m pip install uv + uv lock + uv sync + + - name: Run unit tests + run: | + uv run pytest diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..3ce78b52 --- /dev/null +++ b/.gitignore @@ -0,0 +1,74 @@ +# SPDX-FileCopyrightText: The technology-data authors +# +# SPDX-License-Identifier: MIT + +# Byte-compiled / optimized / DLL files +*__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +*.egg-info/ +.installed.cfg +*.egg + +# Virtual environments +.env/ +.venv/ +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# PyInstaller +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +.hypothesis/ +.pytest_cache/ + +# PyCharm +.idea/ + +# VS Code +.vscode/ + +# macOS +.DS_Store + +# Jupyter Notebook +.ipynb_checkpoints/ + +# mypy +.mypy_cache/ +.dmypy.json diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 00000000..60665819 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,68 @@ +# SPDX-FileCopyrightText: The technology-data authors +# +# SPDX-License-Identifier: MIT + +ci: + autoupdate_schedule: quarterly + +repos: + # Basic pre-commit hooks for whitespace, merge conflicts, etc. +- repo: https://github.com/pre-commit/pre-commit-hooks + rev: v5.0.0 + hooks: + - id: check-merge-conflict + - id: check-added-large-files + args: ['--maxkb=1000'] + - id: trailing-whitespace + - id: end-of-file-fixer + + # Ruff: Python linter and formatter +- repo: https://github.com/astral-sh/ruff-pre-commit + rev: v0.11.8 + hooks: + - id: ruff + args: [--fix] + - id: ruff-format + + # Codespell: Checks for common misspellings +- repo: https://github.com/codespell-project/codespell + rev: v2.4.1 + hooks: + - id: codespell + args: ['--ignore-regex="(\b[A-Z]+\b)"', '--ignore-words=.codespell.ignore'] + types_or: [python, rst, markdown] + + # Jupyter notebook cleanup +- repo: https://github.com/aflc/pre-commit-jupyter + rev: v1.2.1 + hooks: + - id: jupyter-notebook-cleanup + args: ['--remove-kernel-metadata'] + + # Pretty-format-yaml: YAML formatter +- repo: https://github.com/macisamuele/language-formatters-pre-commit-hooks + rev: v2.14.0 + hooks: + - id: pretty-format-yaml + args: [--autofix, --indent, '2', --preserve-quotes] + + # Mypy: Static type checker for Python +- repo: https://github.com/pre-commit/mirrors-mypy + rev: 'v1.15.0' + hooks: + - id: mypy + args: [--strict, --ignore-missing-imports, --config-file=pyproject.toml] + additional_dependencies: [tokenize-rt==3.2.0] + + # Pyupgrade: Automatically upgrades Python syntax +- repo: https://github.com/asottile/pyupgrade + rev: v3.16.0 + hooks: + - id: pyupgrade + args: ["--py311-plus"] + + # REUSE: Checks for REUSE license compliance +- repo: https://github.com/fsfe/reuse-tool + rev: v5.0.2 + hooks: + - id: reuse diff --git a/LICENSES/CC-BY-4.0.txt b/LICENSES/CC-BY-4.0.txt new file mode 100644 index 00000000..13ca539f --- /dev/null +++ b/LICENSES/CC-BY-4.0.txt @@ -0,0 +1,156 @@ +Creative Commons Attribution 4.0 International + + Creative Commons Corporation (β€œCreative Commons”) is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an β€œas-is” basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses. + +Considerations for licensors: Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC-licensed material, or material used under an exception or limitation to copyright. More considerations for licensors. + +Considerations for the public: By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensor’s permission is not necessary for any reason–for example, because of any applicable exception or limitation to copyright–then that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described. Although not required by our licenses, you are encouraged to respect those requests where reasonable. More considerations for the public. + +Creative Commons Attribution 4.0 International Public License + +By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions. + +Section 1 – Definitions. + + a. Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image. + + b. Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License. + + c. Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights. + + d. Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements. + + e. Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material. + + f. Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License. + + g. Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license. + + h. Licensor means the individual(s) or entity(ies) granting rights under this Public License. + + i. Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them. + + j. Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world. + + k. You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning. + +Section 2 – Scope. + + a. License grant. + + 1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to: + + A. reproduce and Share the Licensed Material, in whole or in part; and + + B. produce, reproduce, and Share Adapted Material. + + 2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions. + + 3. Term. The term of this Public License is specified in Section 6(a). + + 4. Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material. + + 5. Downstream recipients. + + A. Offer from the Licensor – Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License. + + B. No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material. + + 6. No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i). + +b. Other rights. + + 1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this Public License. + + 3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties. + +Section 3 – License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the following conditions. + + a. Attribution. + + 1. If You Share the Licensed Material (including in modified form), You must: + + A. retain the following if it is supplied by the Licensor with the Licensed Material: + + i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of warranties; + + v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable; + + B. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and + + C. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License. + + 2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information. + + 3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable. + + 4. If You Share Adapted Material You produce, the Adapter's License You apply must not prevent recipients of the Adapted Material from complying with this Public License. + +Section 4 – Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material: + + a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database; + + b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material; and + + c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database. +For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights. + +Section 5 – Disclaimer of Warranties and Limitation of Liability. + + a. Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You. + + b. To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You. + + c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability. + +Section 6 – Term and Termination. + + a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically. + + b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or + + 2. upon express reinstatement by the Licensor. + + c. For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License. + + d. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License. + + e. Sections 1, 5, 6, 7, and 8 survive termination of this Public License. + +Section 7 – Other Terms and Conditions. + + a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed. + + b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License. + +Section 8 – Interpretation. + + a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License. + + b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions. + + c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor. + + d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority. + +Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the β€œLicensor.” Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at creativecommons.org/policies, Creative Commons does not authorize the use of the trademark β€œCreative Commons” or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses. + +Creative Commons may be contacted at creativecommons.org. diff --git a/LICENSES/MIT.txt b/LICENSES/MIT.txt new file mode 100644 index 00000000..d817195d --- /dev/null +++ b/LICENSES/MIT.txt @@ -0,0 +1,18 @@ +MIT License + +Copyright (c) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and +associated documentation files (the "Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial +portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT +LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO +EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/REUSE.toml b/REUSE.toml new file mode 100644 index 00000000..a6ee5e76 --- /dev/null +++ b/REUSE.toml @@ -0,0 +1,15 @@ +version = 1 +SPDX-PackageName = "technologydata" +SPDX-PackageSupplier = "The technology-data authors" +SPDX-PackageDownloadLocation = "https://github.com/pypsa/technology-data" + +[[annotations]] +path = ["uv.lock"] +SPDX-FileCopyrightText = "The technology-data authors" +SPDX-License-Identifier = "MIT" + + +[[annotations]] +path = ["test/test_data/*/*"] +SPDX-FileCopyrightText = "The technology-data authors" +SPDX-License-Identifier = "CC-BY-4.0" diff --git a/docs/copilot-context.md b/docs/CLAUDE.md similarity index 85% rename from docs/copilot-context.md rename to docs/CLAUDE.md index 48efa9d9..1713f9f3 100644 --- a/docs/copilot-context.md +++ b/docs/CLAUDE.md @@ -1,7 +1,11 @@ + ## General * Description of use cases in `docs/design.md` -* Class diagramm in `docs/class-diagram.puml` +* Class diagram in `docs/class-diagram.puml` ## Tools @@ -19,4 +23,4 @@ * `pydeflate` for currency conversions and inflation adjustments * `pint` for unit conversions -* `savepagenow` for archiving web pages using the Wayback Machine \ No newline at end of file +* `savepagenow` for archiving web pages using the Wayback Machine diff --git a/docs/class-diagram.puml b/docs/class-diagram.puml index 0bbdbdf1..15db0fff 100644 --- a/docs/class-diagram.puml +++ b/docs/class-diagram.puml @@ -1,3 +1,8 @@ +/' +SPDX-FileCopyrightText: The technology-data authors +SPDX-License-Identifier: MIT +'/ + @startuml Class Diagram class UnitValue { - value: float @@ -18,6 +23,7 @@ class Source { - urldate: str - urldate_archive: str + + ensure_in_wayback() + store_in_wayback() + retrieve_from_wayback() } @@ -35,7 +41,7 @@ class Parameter { - quantity: UnitValue - provenance: str - note: str - - sources: SourceContainer + - sources: SourceCollection } Parameter --> UnitValue : quantity @@ -107,92 +113,64 @@ note right of Technology::calculate_EAC to check for consistency). end note -class Container { - - schema_name: str - - schema_path: Path - + get(**criteria): object | Container | None - + to_csv() - + to_excel() - + to_dataframe() -} - -note top of Container - Consider 'Container' as abstract base class for all containers - for unifying the common export and schema-related functionality - required by all data-holding classes. -end note - -note left of Container::schema_name - The name of the schema used for this container, e.g. currently "technologies" or "sources". - This is used to identify the type of data contained in the container. -end note - -note left of Container::get - Provides a generic get(**criteria) - method to retrieve contained objects matching selection criteria: - - If exactly one object matches, returns that object or a Container with this one object. - - If multiple objects match, returns a Container of the same type with the matches. - - If no matches, returns None or an empty Container. -end note - -note left of Container::to_csv - Export the data to a csv file for sharing / usage in e.g. Excel, ... . - Aligned with datapackage schema. - e.g. all {technology} or {source} objects. - Like the current Technologies(...).to_csv() method. -end note - -note left of Container::to_excel - Export all the data to a excel file for usage in Excel and similar tools, ... . - Aligned with datapackage schema. -end note - -note left of Container::to_dataframe - Flatten the Container and its members into a pandas DataFrame, that can be manipulated. - Dataframe should be compatible with the datapackage schema, such that it can be used for e.g. the to_csv() method. -end note - - -class TechnologyContainer { +class TechnologyCollection { - technologies: Iterable - + get(**criteria): Technology | TechnologyContainer | None - + create_projection(): TechnologyContainer + + get(**criteria): Technology | TechnologyCollection | None + + create_projection(): TechnologyCollection ' TODO: Think about more methods here } -note right of TechnologyContainer::get - Implements the generic get method from "Container" for "TechnologyContainer". +note right of TechnologyCollection::get Filters contained Technology objects by the attributes and returns matches: region, case, year, technology, detailed_technology. - If exactly one Technology matches, returns that Technology. - - If multiple Technologies match, returns a TechnologyContainer with the matches. - - If no matches, returns None or an empty TechnologyContainer. + - If multiple Technologies match, returns a TechnologyCollection with the matches. + - If no matches, returns None or an empty TechnologyCollection. end note -note right of TechnologyContainer::create_projection +note right of TechnologyCollection::create_projection e.g. learning curve, interpolation, extrapolation; - based on the Technology objects in the container. - Either returns a new TechnologyContainer or adds the - Technology objects to the current container. + based on the Technology objects in the collection. + Either returns a new TechnologyCollection or adds the + Technology objects to the current collection. end note -class SourceContainer { +class SourceCollection { - sources: Iterable - + retrieve_all_archives() + + retrieve_all_from_wayback() + + to_json() + + to_csv() + + to_dataframe() + + from_json() } -note left of SourceContainer::retrieve_all_archives +note left of SourceCollection::retrieve_all_from_wayback Triggers the retrieve_from_wayback method for all sources and stores the files locally. end note +note left of SourceCollection::to_csv + Export the source collection into a csv file. +end note + +note left of SourceCollection::to_json + Export the source collection into a json file. +end note + +note left of SourceCollection::to_dataframe + Export the source collection into a Pandas dataframe. +end note + class Datapackage { - name: str - path: Path - - technologies: TechnologyContainer - - sources: SourceContainer - - // potentially other Containers in the future + - technologies: TechnologyCollection + - sources: SourceCollection + - // potentially other Collections in the future + to_datapackage() + + from_json() + + to_json() + + get_source_collection() } note top of Datapackage @@ -201,32 +179,31 @@ note top of Datapackage Our package includes pre-packaged data in this format and allows enables to read and write data in this standardised way. Currently implemented through frictionless with .csv and schema.json files. + Please note that the "sources" field is built in the background from "technologies" end note note right of Datapackage::name Currently we use "source" as a reference to pre-packaged data and for a column in "technologies.csv". The Datapackage.name would substitute for referencing to pre-packaged data, e.g. "example01" would be - a packaged data included with `technologydata`. + a packaged data included with `technologydata`. It is meant to be independent of the "TechnologyCollection" or its members. end note note right of Datapackage::technologies - Derived from the TechnologyContainer. + Derived from the TechnologyCollection. end note note right of Datapackage::sources - Derived from all Source objects that are related to the TechnologyContainer (i.e., all sources referenced by technologies and their parameters). + Built in the background with the get_source_collection() method, which derives it from all Source objects that are related to the TechnologyCollection (i.e., all sources referenced by technologies and their parameters). end note note right of Datapackage::to_datapackage - Exports all member Source and TechnologyContainer to a folder following the datapackage + Exports all member Source and TechnologyCollection to a folder following the datapackage specification, including the schema .json files and the .csv files. end note -Container <|-- TechnologyContainer -Container <|-- SourceContainer -Parameter --> SourceContainer : sources +Parameter --> SourceCollection : sources Technology --> "*" Parameter : uses for its members -TechnologyContainer --> "*" Technology : consists of -SourceContainer --> "*" Source : consists of -Datapackage --> "1" TechnologyContainer : contains -@enduml \ No newline at end of file +TechnologyCollection --> "*" Technology : consists of +SourceCollection --> "*" Source : consists of +Datapackage --> "1" TechnologyCollection : contains +@enduml diff --git a/docs/design.md b/docs/design.md index 31064d38..ffcc09fd 100644 --- a/docs/design.md +++ b/docs/design.md @@ -1,3 +1,7 @@ + # Design 1. [Design](#design) @@ -108,7 +112,7 @@ Detect and correct inconsistencies or omissions in techno-economic input data, e ```python from technologydata import DataPackage, Parameter, Technology, Source dp = DataPackage.from_json("path/to/data_package") # triggers validation -techs = dp.technologies # Access the TechnologyContainer +techs = dp.technologies # Access the TechnologyCollection techs.check_consistency() # Checks all technologies for consistency techs = techs.calculate_parameters(parameters=["specific-investment", "eac"]) @@ -119,19 +123,20 @@ tech.check_consistency() # Check consistency of a single Technology object tech = tech.calculate_parameters(parameters="") # Calculate missing parameters # Manually created Technology object -src = Source(name="A source", url="http://example.com/source") -src2 = Source(name="Another source", url="http://example.com/source2") +src = Source(title="A source", authors="example authors", url="http://example.com/source") +src2 = Source(title="Another source", authors="example authors", url="http://example.com/source2") +params: dict[str, Parameter] = { + "efficiency": Parameter(value=0.85, unit="fraction"), + "cost": Parameter(value=1500.0, unit="USD/kW"), +} tech = Technology( - name="Example Technology", - parameters={ - "specific-investment": Parameter(value=1000, unit="EUR_2020/kW", sources=src), - "investment": Parameter(value=9000, unit="EUR_2020", sources=src2), - "lifetime": Parameter(value=20, unit="years", sources=[src,src2]) - }, + name="Solar Photovoltaic", + region="North America", + year=2023, + parameters=params, + case="Best Case", + detailed_technology="Monocrystalline Solar Panels" ) - -print(tech["lifetime"]) # Access and show a specific parameter (value, unit, sources) -tech["lifetime"].value = 50 # Update a parameter value ``` #### πŸ“Š Importance & Frequency @@ -144,7 +149,7 @@ tech["lifetime"].value = 50 # Update a parameter value * Consistency logic includes checks for units, and dependency constraints between parameters (e.g. one parameter may be derived from one or more other parameters). * Schema-based validation is extensible to new parameter types and sources. -### 🧾 UC-002: Harmonize multiple input datasets +### 🧾 UC-002: Harmonize multiple input datasets #### πŸ§‘β€πŸ’» Actor(s) - **Primary**: Energy System Modeller, Energy Analyst @@ -155,7 +160,7 @@ Enable the user to bring multiple techno-economic datasets to a common basis (cu #### πŸ“š Pre-conditions - Python environment with `technologydata` installed -- One or more Technology objects loaded as `DataPackage` or `TechnologyContainer` objects +- One or more Technology objects loaded as `DataPackage` or `TechnologyCollection` objects - User is familiar with available transformation methods (e.g., `adjust_currency`, `adjust_scale`, `adjust_region`) #### 🚦 Trigger @@ -163,13 +168,13 @@ Enable the user to bring multiple techno-economic datasets to a common basis (cu #### 🧡 Main Flow -1. User loads datasets (e.g., from JSON, CSV, or DataFrame) into separate `DataPackage` or `TechnologyContainer` objects or creates them programmatically through the package's class interface. +1. User loads datasets (e.g., from JSON, CSV, or DataFrame) into separate `DataPackage` or `TechnologyCollection` objects or creates them programmatically through the package's class interface. 2. User inspects the datasets to identify differences in currency, year, units, or other conventions. 3. User applies transformation methods as needed: - `.adjust_currency(target_currency)` - `.adjust_scale(target_capacity, scaling_exponent)` - `.adjust_region(target_region)` - - Unit conversions per parameter via Technology or TechnologyContainer level methods + - Unit conversions per parameter via Technology or TechnologyCollection level methods 4. User repeats or chains transformations as required or desired for each dataset. 5. User verifies harmonization by inspecting key parameters and units. 6. Harmonized datasets are now ready for comparison, merging, or further analysis. @@ -222,7 +227,7 @@ dp1.technologies = dp1.technologies.adjust_units(parameter="specific-investment" Allow the user to derive and access all model-relevant parameters (e.g., EAC, specific investment) from harmonized data, ready for direct use in energy system models such as PyPSA-Eur. #### πŸ“š Pre-conditions -- One `Technology` object or multiple in a `TechnologyContainer` or `DataPackage` available +- One `Technology` object or multiple in a `TechnologyCollection` or `DataPackage` available - User knows which parameters are required for the target model #### 🚦 Trigger @@ -274,7 +279,7 @@ tech["EAC"].value # Access the calculated EAC parameter value Enable the user to systematically compare key techno-economic parameters (e.g., CAPEX, OPEX, efficiency) across multiple harmonized datasets in a tabular format. #### πŸ“š Pre-conditions -- Two or more `Technology` objects available as `TechnologyContainer` or `DataPackage` objects +- Two or more `Technology` objects available as `TechnologyCollection` or `DataPackage` objects - User knows which parameters and technologies to compare #### 🚦 Trigger @@ -332,21 +337,21 @@ Allow the user to trace the origin and transformation history of each data point - Data loaded and/or transformed using `technologydata` #### 🚦 Trigger -- User requests provenance or transformation history for a specific parameter, object or Container. +- User requests provenance or transformation history for a specific parameter, object or Collection. #### 🧡 Main Flow 1. User selects a `parameter` of a `Technology` object. 2. The user requests the provenance information for that parameter. 3. System provides the information about: - - Original source(s) of the data (from `Source` and `SourceContainer`) of the parameter + - Original source(s) of the data (from `Source` and `SourceCollection`) of the parameter - All transformations applied by our package (e.g., currency adjustment, scaling, calculations, including the values that were used for these transformations) 4. User can export or document the provenance trace for reporting or documentation. #### πŸ” Alternate Flows - **Manually changed information**: If the user made manual changes at some point, then the system only notifies and provides trace over what was done by the package; User changes are not tracked. -- **Requesting provenance for a Technology or TechnologyContainer**: The user can access the provenance information for all parameters of a Technology or TechnologyContainer by exporting it to a DataFrame or JSON. +- **Requesting provenance for a Technology or TechnologyCollection**: The user can access the provenance information for all parameters of a Technology or TechnologyCollection by exporting it to a DataFrame or JSON. #### βœ… Post-conditions - User has access to a detailed provenance and transformation trace for any data point. @@ -355,7 +360,7 @@ Allow the user to trace the origin and transformation history of each data point #### πŸ§ͺ Sample Input/Output ```python -print(tech["EAC].provenance) +print(tech["EAC"].provenance) techs = dp.technologies techs.to_dataframe() # Includes provenance information in the DataFrame as a dedicated column diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 00000000..535a6247 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,127 @@ +# SPDX-FileCopyrightText: The technology-data authors +# +# SPDX-License-Identifier: MIT + +[build-system] +requires = ["setuptools>=64", "setuptools_scm>=8"] +build-backend = "setuptools.build_meta" + +[project] +name = "technologydata" +dynamic = ["version"] +keywords = ["energy", "modelling", "techno-economics", "macroeconomics"] # TODO update +description = "Package for providing common data assumptions for energy system modelling on techno-economics and macro-economics." +readme = "README.md" +authors = [ + { name = "Contributors to technologydata", email = "johannes.hampp@openenergytransition.org" }, + { name = "Contributors to technologydata", email = "fabrizio.finozzi.business@gmail.com" }, +] +classifiers=[ + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Development Status :: 3 - Alpha", + "Environment :: Console", + "Intended Audience :: Science/Research", + "Natural Language :: English", + "Operating System :: OS Independent", +] +requires-python = ">=3.12" +dependencies = [ + "ipykernel>=6.29.5", # this one can go into optional as "dev" + "mypy>=1.15.0", + "pandas>=2.2.3", + "pre-commit>=4.2.0", # this one can go into optional as "dev" + "pytest>=8.3.5", # this one can go into optional as "dev" + "requests>=2.32.3", + "savepagenow>=1.3.0", +] + +[project.urls] +Homepage = "https://github.com/PyPSA/technology-data" +Source = "https://github.com/PyPSA/technology-data" +BugTracker = "https://github.com/PyPSA/technology-data/issues" +Changelog = "https://github.com/PyPSA/technology-data/releases" + +[project.optional-dependencies] +docs = [ + "mkdocs-autolinks-plugin>=0.7.1", + "mkdocs-git-revision-date-localized-plugin>=1.4.7", + "mkdocs-material>=9.6.14", + "mkdocs-minify-plugin>=0.8.0", + "mkdocs-open-in-new-tab>=1.0.8", + "mkdocstrings>=0.29.1", + "mkdocstrings-python>=1.16.11", +] + + +# Setuptools_scm settings + +[tool.uv] +package = true + +[tool.setuptools_scm] +version_scheme = "no-guess-dev" + +[tool.setuptools.packages.find] +include = ["technologydata"] + +# Static type checker settings + +[tool.mypy] +exclude = ['dev/*', 'examples/*', 'doc/*', 'test/*'] +ignore_missing_imports = true +no_implicit_optional = true +warn_unused_ignores = true +show_error_code_links = true +disallow_any_generics = true +warn_return_any = true + +[[tool.mypy.overrides]] +module = "technologydata" +disallow_untyped_defs = true +check_untyped_defs = true + +[[tool.mypy.overrides]] +module = "requests" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "dateutil" +ignore_missing_imports = true + +# Formatter and linter settings + +[tool.ruff] +extend-include = ['*.ipynb'] + +[tool.ruff.lint] +select = [ + 'F', # pyflakes + 'E', # pycodestyle: Error + 'W', # pycodestyle: Warning + 'I', # isort + 'D', # pydocstyle + 'UP', # pyupgrade + 'ANN', # flake-8 annotations + 'TID', # flake8-tidy-imports + 'NPY', # numpy + 'PD', # pandas + 'RUF013', # ruff +] + +ignore = [ + 'ANN401', # Dynamically typed expressions are forbidden + 'E501', # line too long + 'D203', # 1 blank line required before class docstring + 'D212', # Multi-line docstring summary should start at the second line + ] + + +[tool.ruff.lint.per-file-ignores] +"{test}/**"=[ + 'ANN' # flake8-annotations +] + +[tool.ruff.lint.flake8-tidy-imports] +# Disallow all relative imports. +ban-relative-imports = "all" diff --git a/technologydata/__init__.py b/technologydata/__init__.py new file mode 100644 index 00000000..d3380162 --- /dev/null +++ b/technologydata/__init__.py @@ -0,0 +1,24 @@ +# SPDX-FileCopyrightText: The technology-data authors +# SPDX-License-Identifier: MIT + +"""technologydata: A package for managing and analyzing technology data used for energy system models.""" + +from technologydata.datapackage import DataPackage +from technologydata.parameter import Parameter +from technologydata.source import Source +from technologydata.source_collection import SourceCollection +from technologydata.technology import Technology +from technologydata.unit_value import UnitValue +from technologydata.utils.commons import Commons, DateFormatEnum, FileExtensionEnum + +__all__ = [ + "Commons", + "DateFormatEnum", + "FileExtensionEnum", + "UnitValue", + "Technology", + "Parameter", + "Source", + "SourceCollection", + "DataPackage", +] diff --git a/technologydata/datapackage.py b/technologydata/datapackage.py new file mode 100644 index 00000000..27ed5182 --- /dev/null +++ b/technologydata/datapackage.py @@ -0,0 +1,86 @@ +# SPDX-FileCopyrightText: The technology-data authors +# +# SPDX-License-Identifier: MIT + +""" +DataPackage class for managing collections of Technology objects and batch operations. + +Examples +-------- +>>> dp = DataPackage.from_json("path/to/data_package.json") + +""" + +import pathlib + +import pydantic + +from technologydata.source_collection import SourceCollection + +# from technologydata.technology_collection import TechnologyCollection + + +# TODO complete class +class DataPackage(pydantic.BaseModel): # type: ignore + """ + Container for a collection of Technology objects and/or Source objects, with batch operations and loading utilities. + + Parameters + ---------- + name : str + The short-name code of the source + technologies : List[Technology] + List of Technology objects. + + Attributes + ---------- + technologies : List[Technology] + List of Technology objects. + + """ + + name: str + path: pathlib.Path + # technologies: TechnologyCollection + sources: SourceCollection + + # @classmethod + # def from_json(cls, path: pathlib.Path) -> technologydata.DataPackage: + # """ + # Load a DataPackage from a JSON file. + # + # Parameters + # ---------- + # path : Path + # Path to the JSON file. + # + # Returns + # ------- + # DataPackage + # The loaded DataPackage instance. + # + # """ + # with open(path) as f: + # data = json.load(f) + # techs = technologydata.TechnologyCollection( + # [technologydata.Technology(**t) for t in data.get("technologies", [])] + # ) + # # TODO: redo this part once an example JSON is available + # techs = technologydata.TechnologyCollection( + # [technologydata.Technology(**t) for t in data.get("technologies", [])] + # ) + # # You should also handle 'name', 'sources', etc. as needed + # return cls( + # name=data.get("name", ""), + # path=path, + # technologies=techs, + # sources=technologydata.SourceCollection(data.get("sources", [])), + # ) + # + # @classmethod + # def to_json(cls, path: pathlib.Path) -> None: + # pass + # + # @classmethod + # def to_datapackage(cls, path: pathlib.Path) -> None: + # pass diff --git a/technologydata/parameter.py b/technologydata/parameter.py new file mode 100644 index 00000000..10f94bc6 --- /dev/null +++ b/technologydata/parameter.py @@ -0,0 +1,84 @@ +# SPDX-FileCopyrightText: The technology-data authors +# +# SPDX-License-Identifier: MIT + +""" +Parameter class for encapsulating a value, its unit, provenance, notes, and sources. + +Examples +-------- +>>> from technologydata.unit_value import UnitValue +>>> from technologydata.source import Source +>>> uv = UnitValue(value=1000, unit="EUR_2020/kW") +>>> src = Source(name="Example Source", authors="some authors", url="http://example.com") +>>> param = Parameter(quantity=uv, provenance="literature", note="Estimated", sources=[src]) + +""" + +import pydantic + +from technologydata.source_collection import SourceCollection +from technologydata.unit_value import UnitValue + + +# TODO rework class logic +class Parameter(pydantic.BaseModel): # type: ignore + """ + Encapsulate a value with its unit, provenance, notes, and sources. + + Parameters + ---------- + quantity : UnitValue + The value and its unit. + provenance : Optional[str] + Description of the data's provenance. + note : Optional[str] + Additional notes about the parameter. + sources : SourceCollection + One or more sources for the parameter. + + Attributes + ---------- + quantity : UnitValue + The value and its unit. + provenance : Optional[str] + Description of the data's provenance. + note : Optional[str] + Additional notes about the parameter. + sources : SourceCollection + List of sources for the parameter. + + """ + + quantity: UnitValue = pydantic.Field(..., description="The value and its unit.") + provenance: str | None = pydantic.Field(None, description="Data provenance.") + note: str | None = pydantic.Field(None, description="Additional notes.") + sources: SourceCollection = pydantic.Field( + ..., description="Collection of Sources." + ) + + @property + def value(self) -> float: + """ + The numerical value of the parameter. + + Returns + ------- + float + The value. + + """ + return self.quantity.value + + @property + def unit(self) -> str: + """ + The unit of the parameter. + + Returns + ------- + str + The unit. + + """ + return self.quantity.unit diff --git a/technologydata/source.py b/technologydata/source.py new file mode 100644 index 00000000..3b1fd1f7 --- /dev/null +++ b/technologydata/source.py @@ -0,0 +1,375 @@ +# SPDX-FileCopyrightText: The technology-data authors +# +# SPDX-License-Identifier: MIT + +""" +Source class for representing bibliographic and web sources, with archiving support. + +Examples +-------- +>>> src = Source(title="Example Source", authors="The Authors") +>>> src.store_in_wayback() +>>> src.retrieve_from_wayback() + +""" + +import logging +import pathlib +import typing + +import pydantic +import requests +import savepagenow + +import technologydata + +logger = logging.getLogger(__name__) + + +class Source(pydantic.BaseModel): # type: ignore + """ + Represent a data source, including bibliographic and web information. + + Parameters + ---------- + title : str + Title of the source. + authors : str + Authors of the source. + url : Optional[str] + URL of the source. + url_archive : Optional[str] + Archived URL (e.g., from the Wayback Machine). + url_date : Optional[str] + Date the URL was accessed. + url_date_archive : Optional[str] + Date the URL was archived. + + Attributes + ---------- + title : str + Title of the source. + authors : str + Authors of the source. + url : Optional[str] + URL of the source. + url_archive : Optional[str] + Archived URL. + url_date : Optional[str] + Date the URL was accessed. + url_date_archive : Optional[str] + Date the URL was archived. + + """ + + title: str = pydantic.Field(..., description="Title of the source.") + authors: str = pydantic.Field(..., description="Authors of the source.") + url: str | None = pydantic.Field(None, description="URL of the source.") + url_archive: str | None = pydantic.Field(None, description="Archived URL.") + url_date: str | None = pydantic.Field( + None, description="Date the URL was accessed." + ) + url_date_archive: str | None = pydantic.Field( + None, description="Date the URL was archived." + ) + + def ensure_in_wayback(self) -> None: + """ + Ensure that the source URL is archived in the Wayback Machine. + + This method checks if the source's `url` attribute is set and whether + an archived URL or archive date is already present. If neither is available, it attempts to archive the + URL using the Wayback Machine and updates the corresponding attributes. + + Parameters + ---------- + None + + Returns + ------- + None + This method updates the Source object's `url_archive` and `url_date_archive` attributes in place. + + Raises + ------ + ValueError + If the `url` attribute is not set (None or NaN). + + Examples + -------- + >>> from technologydata import Source + >>> source = Source(url="http://example.com", title="Example Site", authors="The Authors") + >>> source.ensure_in_wayback() + A new snapshot has been stored for the url http://example.com with timestamp 2023-10-01T12:00:00Z and Archive.org url http://web.archive.org/web/20231001120000/http://example.com. + >>> source.url_archive + 'http://web.archive.org/web/20231001120000/http://example.com' + >>> source.url_date_archive + '2023-10-01T12:00:00Z' + + """ + if self.url is None: + raise ValueError( + f"The url attribute of the source {self.title} is not set or contains a NaN value." + ) + + if self.url_archive is None and self.url_date_archive is None: + archived_info = self.store_in_wayback(self.url) + if archived_info is not None: + archived_url, new_capture_flag, timestamp = archived_info + if new_capture_flag: + logger.info( + f"A new snapshot has been stored for the url {self.url} with timestamp {timestamp} and Archive.org url {archived_url}." + ) + else: + logger.info( + f"There is already a snapshot for the url {self.url} with timestamp {timestamp} and Archive.org url {archived_url}." + ) + self.url_date_archive = timestamp + self.url_archive = archived_url + + @staticmethod + def store_in_wayback( + url_to_archive: str, + ) -> tuple[typing.Any, bool | None, str | None] | None: + """ + Store a snapshot of the given URL on the Wayback Machine and extract the timestamp. + + The method captures the specified URL using the Wayback Machine and retrieves the + corresponding archive URL along with a formatted timestamp. The timestamp is extracted + from the archive URL and converted to a more readable format. + + Parameters + ---------- + url_to_archive : str + The URL that you want to archive on the Wayback Machine. + + Returns + ------- + tuple[str, bool, str] | None + A tuple containing the archive URL, a boolean indicating if a new capture was conducted (if the boolean is + True, archive.org conducted a new capture. If it is False, archive.org has returned a recently cached capture + instead, likely taken in the previous minutes) and the formatted timestamp (with format YYYY-MM-DD hh:mm:ss) + if the operation is successful. Returns None if the timestamp cannot be extracted due to a ValueError (e.g., + if the expected substrings are not found in the archive URL). + + Examples + -------- + >>> from technologydata import Source + >>> some_url = "some_url" + >>> archived_info = Source.store_in_wayback(some_url) + + """ + archive_url = savepagenow.capture_or_cache(url_to_archive) + try: + # The timestamp is between "web/" and the next "/" afterward + # Find the starting index of "web/" + start_index = archive_url[0].index("web/") + len("web/") + # Find the ending index of the timestamp by locating the next "/" after the start_index + end_index = archive_url[0].index("/", start_index) + # Extract the timestamp substring + timestamp = archive_url[0][start_index:end_index] + output_timestamp = technologydata.Commons.change_datetime_format( + timestamp, + technologydata.DateFormatEnum.SOURCES_CSV, + ) + return archive_url[0], archive_url[1], output_timestamp + except ValueError: + # If "web/" or next "/" not found, return empty string + return None + + def retrieve_from_wayback( + self, download_directory: pathlib.Path + ) -> pathlib.Path | None: + """ + Download a file from the Wayback Machine and save it to a specified path. + + The method retrieves an archived file from the Wayback Machine using the URL + from the url_archive attribute of the instance. The file is saved in the + specified format based on its Content-Type field in the Response Header or the extension + that can be extracted from the URL. + + Parameters + ---------- + download_directory : pathlib.Path + The base path where the file will be saved. + + + Returns + ------- + pathlib.Path | None + The specified path where the file is stored, or None if an error occurs. + + Raises + ------ + requests.exceptions.RequestException + If there is an issue with the HTTP request. + + Notes + ----- + - The attribute "url_archived" should contain a valid URL. + + Examples + -------- + >>> from technologydata import Source + >>> source = Source(title="example01", authors="The Authors") + >>> output_path = source.retrieve_from_wayback(pathlib.Path("base_path")) + + """ + if self.url_archive is None: + logger.error( + f"The url_archive attribute of source {self.title} is not set." + ) + return None + if download_directory is None: + logger.error(f"The base path of the source {self.title} is not set.") + return None + + source_title = technologydata.Commons.replace_special_characters(self.title) + save_path = self._get_save_path( + self.url_archive, download_directory, source_title + ) + + if save_path is None: + logger.warning( + f"It was not possible to determine a file path for the source {source_title}." + ) + return None + + if save_path.is_file(): + logger.warning( + f"There is already a file stored at the path {save_path}. Not downloading or overwriting this file." + ) + return None + + storage_path = self._download_file(self.url_archive, save_path) + return storage_path + + @staticmethod + def _get_save_path( + url_archived: str, source_path: pathlib.Path, source_title: str + ) -> pathlib.Path | None: + """ + Determine the save path based on the content type or archived URL. + + The method retrieves the content type of the archived URL and determines the appropriate + file extension based on the content type or based on the archived URL. It constructs the full save path using + the provided source path and source title. + + Parameters + ---------- + url_archived : str + The URL of the archived file from which the content type will be determined. + source_path : pathlib.Path + The base path where the file will be saved. + source_title : str + The title of the given source from sources.csv, used as the filename. + + Returns + ------- + pathlib.Path | None + The full path where the file should be saved, including the appropriate file extension, + or None if the content type is unsupported or an error occurs. + + Raises + ------ + ValueError + If the extension is not among the supported ones. + + """ + content_type = Source._get_content_type(url_archived) + if content_type is None: + return None + + extension = technologydata.FileExtensionEnum.get_extension( + content_type + ) or technologydata.FileExtensionEnum.search_file_extension_in_url(url_archived) + if extension is None: + raise ValueError( + f"Unable to infer file extension from content type: {content_type} or URL: {url_archived}" + ) + + if source_path is not None and source_title is not None: + return pathlib.Path(source_path, source_title + extension) + else: + return None + + @staticmethod + def _get_content_type(url_archived: str) -> typing.Any: + """ + Fetch the content type of the archived URL. + + The method sends a HEAD request to the specified archived URL to retrieve the + Content-Type from the response headers. It returns the content type as a string + if the request is successful; otherwise, it logs an error and returns None. + + Parameters + ---------- + url_archived : str + The URL of the archived resource for which the content type is to be fetched. + + Returns + ------- + str | None + The Content-Type of the archived URL if the request is successful, or None + if an error occurs during the request. + + Raises + ------ + requests.exceptions.RequestException + If there is an issue with the HTTP request, an error is logged, and None is returned. + + """ + try: + response = requests.head(url_archived) + response.raise_for_status() + return response.headers.get("Content-Type") + except requests.exceptions.RequestException as e: + raise requests.exceptions.RequestException( + f"Failed to retrieve content type: {e}" + ) + + @staticmethod + def _download_file( + url_archived: str, save_path: pathlib.Path + ) -> pathlib.Path | None: + """ + Download the file and save it to the specified path. + + The method retrieves the content from the specified archived URL and saves it + to the provided file path. It handles HTTP errors and logs appropriate messages + based on the outcome of the download operation. + + Parameters + ---------- + url_archived : str + The URL of the archived file to be downloaded. + + save_path : pathlib.Path + The path where the downloaded file will be saved, including the file name. + + Returns + ------- + pathlib.Path | None + The path where the file has been saved if the download is successful, or None + if an error occurs during the download process. + + Raises + ------ + requests.exceptions.RequestException + If there is an issue with the HTTP request, an error is logged, and None is returned. + + """ + try: + response = requests.get(url_archived) + response.raise_for_status() # Check for HTTP errors + + with open(save_path, "wb") as file: + file.write(response.content) + + logger.info(f"File downloaded successfully and saved to {save_path}") + return save_path + except requests.exceptions.RequestException as e: + requests.exceptions.RequestException( + f"An error occurred during file download: {e}" + ) + return None diff --git a/technologydata/source_collection.py b/technologydata/source_collection.py new file mode 100644 index 00000000..8dfd1714 --- /dev/null +++ b/technologydata/source_collection.py @@ -0,0 +1,199 @@ +# SPDX-FileCopyrightText: The technology-data authors +# +# SPDX-License-Identifier: MIT + +"""SourceCollection class for representing an iterable of Source Objects.""" + +import csv +import json +import pathlib +import re + +import pandas +import pydantic + +from technologydata.source import Source + + +class SourceCollection(pydantic.BaseModel): # type: ignore + """ + Represent a collection of sources. + + Parameters + ---------- + sources : List[Source] + List of Source objects. + + Attributes + ---------- + sources : List[Source] + List of Source objects. + + """ + + sources: list[Source] = pydantic.Field(..., description="List of Source objects.") + + def get(self, title: str, authors: str) -> "SourceCollection": + """ + Filter sources based on regex patterns for non-optional attributes. + + Parameters + ---------- + title : str + Regex pattern to filter titles. + authors : str + Regex pattern to filter authors. + + Returns + ------- + SourceCollection + A new SourceCollection with filtered sources. + + """ + filtered_sources = self.sources + + if title is not None: + pattern_title = re.compile(title, re.IGNORECASE) + filtered_sources = [ + s for s in filtered_sources if pattern_title.search(s.title) + ] + + if authors is not None: + pattern_authors = re.compile(authors, re.IGNORECASE) + filtered_sources = [ + s for s in filtered_sources if pattern_authors.search(s.authors) + ] + + return SourceCollection(sources=filtered_sources) + + def __len__(self) -> int: + """ + Return the number of sources in this collection. + + Returns + ------- + int + The number of Source objects in the sources list. + + """ + return len(self.sources) + + def retrieve_all_from_wayback( + self, download_directory: pathlib.Path + ) -> list[pathlib.Path | None]: + """ + Download archived files for all sources in the collection using retrieve_from_wayback. + + Parameters + ---------- + download_directory : pathlib.Path + The base directory where all files will be saved. + + Returns + ------- + list[pathlib.Path | None] + List of paths where each file was stored, or None if download failed for a source. + + """ + return [ + source.retrieve_from_wayback(download_directory) for source in self.sources + ] + + def to_dataframe(self) -> pandas.DataFrame: + """ + Convert the SourceCollection to a pandas DataFrame. + + Returns + ------- + pd.DataFrame + A DataFrame containing the source data. + + """ + return pandas.DataFrame([source.model_dump() for source in self.sources]) + + def to_csv(self, **kwargs: pathlib.Path | str | bool) -> None: + """ + Export the SourceCollection to a CSV file. + + Parameters + ---------- + **kwargs : dict + Additional keyword arguments passed to pandas.DataFrame.to_csv(). + Common options include: + - path_or_buf : str or pathlib.Path or file-like object, optional + File path or object, if None, the result is returned as a string. + Default is None. + - sep : str + String of length 1. Field delimiter for the output file. + Default is ','. + - index : bool + Write row names (index). Default is True. + - encoding : str + String representing the encoding to use in the output file. + Default is 'utf-8'. + + Notes + ----- + The method converts the collection to a pandas DataFrame using + `self.to_dataframe()` and then writes it to a CSV file using the provided + kwargs. + + """ + default_kwargs = { + "sep": ",", + "index": False, + "encoding": "utf-8", + "quoting": csv.QUOTE_ALL, + } + + # Merge default_kwargs with user-provided kwargs, giving precedence to user kwargs + merged_kwargs = {**default_kwargs, **kwargs} + output_dataframe = self.to_dataframe() + output_dataframe.to_csv(**merged_kwargs) + + def to_json( + self, file_path: pathlib.Path, schema_path: pathlib.Path | None = None + ) -> None: + """ + Export the SourceCollection to a JSON file, together with a data schema. + + Parameters + ---------- + file_path : pathlib.Path + The path to the JSON file to be created. + schema_path : pathlib.Path + The path to the JSON schema file to be created. By default created with a `schema` suffix next to `file_path`. + + """ + if schema_path is None: + schema_path = file_path.with_suffix(".schema.json") + + # Export the model's schema with descriptions to a dict + schema = self.model_json_schema() + + # Save the schema (which includes descriptions) to a JSON file + with open(schema_path, "w") as f: + json.dump(schema, f, indent=4) + + with open(file_path, mode="w", encoding="utf-8") as jsonfile: + json_data = self.model_dump_json(indent=4) # Convert to JSON string + jsonfile.write(json_data) + + @classmethod + def from_json(cls, file_path: pathlib.Path | str) -> "SourceCollection": + """ + Import the SourceCollection from a JSON file. + + Parameters + ---------- + file_path : pathlib.Path + The path to the JSON file to be imported. + + """ + if isinstance(file_path, pathlib.Path | str): + file_path = pathlib.Path(file_path) + else: + raise TypeError("file_path must be a pathlib.Path or str") + with open(file_path, encoding="utf-8") as jsonfile: + json_data = json.load(jsonfile) + return cls(**json_data) diff --git a/technologydata/technology.py b/technologydata/technology.py new file mode 100644 index 00000000..ca09967e --- /dev/null +++ b/technologydata/technology.py @@ -0,0 +1,182 @@ +# SPDX-FileCopyrightText: The technology-data authors +# +# SPDX-License-Identifier: MIT + + +# TODO replaceholder + +"""Technology class for representing a technology with parameters and transformation methods.""" + +import typing + +import pydantic + +import technologydata + + +class Technology(pydantic.BaseModel): # type: ignore + """ + Represent a technology with region, year, and a flexible set of parameters. + + Parameters + ---------- + name : str + Name of the technology. + region : str + Region identifier. + year : Optional[int] + Year of the data. + parameters : Dict[str, Parameter] + Dictionary of parameter names to Parameter objects. + case : Optional[str] + Case or scenario identifier. + detailed_technology : Optional[str] + More detailed technology name. + + Attributes + ---------- + name : str + Name of the technology. + region : str + Region identifier. + year : Optional[int] + Year of the data. + parameters : Dict[str, Parameter] + Dictionary of parameter names to Parameter objects. + case : Optional[str] + Case or scenario identifier. + detailed_technology : Optional[str] + More detailed technology name. + + """ + + name: str = pydantic.Field(..., description="Name of the technology.") + region: str = pydantic.Field(..., description="Region identifier.") + year: int | None = pydantic.Field(None, description="Year of the data.") + parameters: dict[str, technologydata.Parameter] = pydantic.Field( + default_factory=dict, description="Parameters." + ) + case: str | None = pydantic.Field(None, description="Case or scenario identifier.") + detailed_technology: str | None = pydantic.Field( + None, description="Detailed technology name." + ) + + def __getitem__(self, key: str) -> technologydata.Parameter: + """ + Access a parameter by name. + + Parameters + ---------- + key : str + Parameter name. + + Returns + ------- + Parameter + The requested parameter. + + """ + return self.parameters[key] + + def __setitem__(self, key: str, value: technologydata.Parameter) -> None: + """ + Set a parameter by name. + + Parameters + ---------- + key : str + Parameter name. + value : Parameter + The parameter to set. + + """ + self.parameters[key] = value + + def check_consistency(self) -> bool: + """ + Check for consistency and completeness of parameters. + + Returns + ------- + bool + True if consistent, False otherwise. + + """ + # Example: check required parameters + required = ["specific_investment", "investment", "lifetime"] + missing = [p for p in required if p not in self.parameters] + return len(missing) == 0 + + def calculate_parameters( + self, parameters: typing.Any | None = None + ) -> "Technology": + """ + Calculate missing or derived parameters. + + Parameters + ---------- + parameters : Optional[Any] + List of parameter names to calculate, or "" for all missing. + + Returns + ------- + Technology + A new Technology object with calculated parameters. + + """ + # Placeholder: implement calculation logic as needed + return self + + def adjust_currency(self, target_currency: str) -> "Technology": + """ + Adjust all currency parameters to a target currency. + + Parameters + ---------- + target_currency : str + The target currency (e.g., 'EUR_2020'). + + Returns + ------- + Technology + A new Technology object with adjusted currency. + + """ + # Placeholder: implement currency adjustment logic + return self + + def adjust_region(self, target_region: str) -> "Technology": + """ + Adjust technology parameters to match a different region. + + Parameters + ---------- + target_region : str + The target region. + + Returns + ------- + Technology + A new Technology object with adjusted region. + + """ + # Placeholder: implement region adjustment logic + return self + + def adjust_scale(self, scaling_factor: float) -> "Technology": + """ + Scale parameter values by a scaling factor. + + Parameters + ---------- + scaling_factor : float + The scaling factor to apply. + + Returns + ------- + Technology + A new Technology object with scaled parameters. + + """ + # Placeholder: implement scaling logic + return self diff --git a/technologydata/unit_value.py b/technologydata/unit_value.py new file mode 100644 index 00000000..0b42cddb --- /dev/null +++ b/technologydata/unit_value.py @@ -0,0 +1,71 @@ +# SPDX-FileCopyrightText: The technology-data authors +# +# SPDX-License-Identifier: MIT +# TODO implement (Johannes) +""" +UnitValue class for representing a value with an associated unit. + +This class is designed to support flexible units, including energy carriers, currencies with years, and more. + +Examples +-------- +>>> uv = UnitValue(value=100, unit="EUR_2020") +>>> uv.value +100 +>>> uv.unit +"EUR_2020" + +""" + +import pint +import pydantic + +ureg = pint.UnitRegistry() + + +class UnitValue(pydantic.BaseModel): # type: ignore + """ + Represent a numerical value with an associated unit of measurement. + + Parameters + ---------- + value : float + The numerical value. + unit : str + The unit of measurement (e.g., 'EUR_2020', 'kWh_electricity', 'kWh_hydrogen_LHV'). + + Attributes + ---------- + value : float + The numerical value. + unit : str + The unit of measurement. + + """ + + value: float = pydantic.Field(..., description="The numerical value.") + unit: str = pydantic.Field(..., description="The unit of measurement.") + + def to(self, new_unit: str) -> "UnitValue": + """ + Convert the value to a new unit using pint. + + Parameters + ---------- + new_unit : str + The unit to convert to. + + Returns + ------- + UnitValue + A new UnitValue instance with the converted value and unit. + + Raises + ------ + pint.errors.DimensionalityError + If the units are not compatible. + + """ + q = self.value * ureg(self.unit) + q_converted = q.to(new_unit) + return UnitValue(value=q_converted.magnitude, unit=str(q_converted.units)) diff --git a/technologydata/utils/__init__.py b/technologydata/utils/__init__.py new file mode 100644 index 00000000..d7f45354 --- /dev/null +++ b/technologydata/utils/__init__.py @@ -0,0 +1,13 @@ +# SPDX-FileCopyrightText: The technology-data authors +# +# SPDX-License-Identifier: MIT + +"""Provide classes and utilities for handling techno-economic data for energy system modeling.""" + +from technologydata.utils.commons import Commons, DateFormatEnum, FileExtensionEnum + +__all__ = [ + "Commons", + "DateFormatEnum", + "FileExtensionEnum", +] diff --git a/technologydata/utils/commons.py b/technologydata/utils/commons.py new file mode 100644 index 00000000..cb9b2cf1 --- /dev/null +++ b/technologydata/utils/commons.py @@ -0,0 +1,269 @@ +# SPDX-FileCopyrightText: The technology-data authors +# +# SPDX-License-Identifier: MIT + +"""Classes for Commons methods.""" + +import enum +import logging +import re +import typing + +import dateutil + +logger = logging.getLogger(__name__) + + +class DateFormatEnum(str, enum.Enum): + """ + Enum for date formats used in different sources. + + Attributes + ---------- + SOURCES_CSV : str + Date format for CSV sources, e.g., "2023-10-01 12:00:00". + WAYBACK : str + Date format for Wayback Machine, e.g., "20231001120000". + NONE : str + Represents an empty date format. + + """ + + SOURCES_CSV = "%Y-%m-%d %H:%M:%S" + WAYBACK = "%Y%m%d%H%M%S" + NONE = "" + + +class FileExtensionEnum(enum.Enum): + """ + An enumeration that maps various file extensions to their corresponding MIME types. + + This Enum provides a structured way to associate common file extensions with their respective + MIME types, facilitating easy retrieval of file extensions based on content types. Each member + of the enumeration is a tuple containing the file extension and its associated MIME type. + + Members + -------- + TEXT_PLAIN : tuple + Represents the MIME type "text/plain" with the file extension ".txt". + TEXT_HTML : tuple + Represents the MIME type "text/html" with the file extension ".html". + TEXT_CSV : tuple + Represents the MIME type "text/csv" with the file extension ".csv". + TEXT_XML : tuple + Represents the MIME type "text/xml" with the file extension ".xml". + APPLICATION_MS_EXCEL : tuple + Represents the MIME type "application/vnd.ms-excel" with the file extension ".xls". + APPLICATION_ODS : tuple + Represents the MIME type "application/vnd.oasis.opendocument.spreadsheet" with the file extension ".ods". + APPLICATION_OPENXML_EXCEL : tuple + Represents the MIME type "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" + with the file extension ".xlsx". + APPLICATION_JSON : tuple + Represents the MIME type "application/json" with the file extension ".json". + APPLICATION_XML : tuple + Represents the MIME type "application/xml" with the file extension ".xml". + APPLICATION_PDF : tuple + Represents the MIME type "application/pdf" with the file extension ".pdf". + APPLICATION_PARQUET : tuple + Represents the MIME type "application/parquet" with the file extension ".parquet". + APPLICATION_VDN_PARQUET : tuple + Represents the MIME type "application/vdn.apache.parquet" with the file extension ".parquet". + APPLICATION_RAR_WINDOWS : tuple + Represents the MIME type "application/x-rar-compressed" with the file extension ".rar". + APPLICATION_RAR : tuple + Represents the MIME type "application/vnd.rar" with the file extension ".rar". + APPLICATION_ZIP : tuple + Represents the MIME type "application/zip" with the file extension ".zip". + APPLICATION_ZIP_WINDOWS : tuple + Represents the MIME type "application/x-zip-compressed" with the file extension ".zip". + """ + + TEXT_PLAIN = (".txt", "text/plain") + TEXT_HTML = (".html", "text/html") + TEXT_CSV = (".csv", "text/csv") + TEXT_XML = (".xml", "text/xml") + APPLICATION_MS_EXCEL = (".xls", "application/vnd.ms-excel") + APPLICATION_ODS = (".ods", "application/vnd.oasis.opendocument.spreadsheet") + APPLICATION_OPENXML_EXCEL = ( + ".xlsx", + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", + ) + APPLICATION_JSON = (".json", "application/json") + APPLICATION_XML = (".xml", "application/xml") + APPLICATION_PDF = (".pdf", "application/pdf") + APPLICATION_PARQUET = (".parquet", "application/parquet") + APPLICATION_VDN_PARQUET = (".parquet", "application/vdn.apache.parquet") + APPLICATION_RAR_WINDOWS = (".rar", "application/x-rar-compressed") + APPLICATION_RAR = (".rar", "application/vnd.rar") + APPLICATION_ZIP = (".zip", "application/zip") + APPLICATION_ZIP_WINDOWS = (".zip", "application/x-zip-compressed") + + @classmethod + def get_extension(cls, content_type: str) -> str | None: + """ + Retrieve the file extension associated with a given MIME type. + + Parameters + ---------- + content_type : str + The MIME type for which the corresponding file extension is to be retrieved. + + Returns + ------- + str | None + The file extension associated with the given MIME type, or None if the + MIME type is not supported. + + Examples + -------- + >>> FileExtensionEnum.get_extension("application/pdf") + >>> '.pdf' + + >>> FileExtensionEnum.get_extension("application/unknown") + >>> None + + """ + for member in cls: + if member.value[1] == content_type: + return member.value[0] + return None + + @classmethod + def search_file_extension_in_url(cls, url: str) -> str | None: + """ + Search for the file extension in a given URL. + + Parameters + ---------- + url : str + The URL to search for the file extension. + + Returns + ------- + str | None + The file extension, or None if no match is found. + + Examples + -------- + >>> FileExtensionEnum.search_file_extension_in_url("https://example.com/file.pdf") + '.pdf' + + >>> FileExtensionEnum.search_file_extension_in_url("https://example.com/file.unknown") + None + + """ + for member in cls: + if re.search(r"\b" + re.escape(member.value[0]) + r"\b", url): + return member.value[0] + return None + + +class Commons: + """ + A utility class for various helper functions. + + This class provides static methods for common tasks, such as changing the format of datetime strings and replacing + special characters in strings. The methods are stateless and can be called without instantiating the class. + + Methods + ------- + change_datetime_format(input_datetime_string: str, output_datetime_format: DateFormatEnum) -> str | None: + Change the format of a given datetime string to a specified output format. + replace_special_characters(input_string: str) -> str: + Replace special characters and spaces in a string with underscores. + + Examples + -------- + >>> Commons.change_datetime_format("20250520144500", DateFormatEnum.SOURCES_CSV) + '2025-05-20 14:45:00' + >>> Commons.replace_special_characters("Hello, World! Welcome to Python @ 2023.") + 'hello_world_welcome_to_python_2023' + + """ + + @staticmethod + def change_datetime_format( + input_datetime_string: str, + output_datetime_format: DateFormatEnum, + ) -> str | typing.Any: + """ + Change the format of a given datetime string to a specified output format. + + The method takes a datetime string and automatically detects its format, then converts it to the specified output format. + If the input string cannot be parsed, it logs an error and returns None. + + Parameters + ---------- + input_datetime_string : str + datetime string that needs to be reformatted + + output_datetime_format : DateFormatEnum + desired format for the output datetime string, following the strftime format codes. + + Returns + ------- + str | None + reformatted datetime string if successful, otherwise None + + Raises + ------ + ValueError + If the input datetime string cannot be parsed. + + Examples + -------- + >>> Commons.change_datetime_format("20250520144500", DateFormatEnum.SOURCES_CSV) + >>> "2025-05-20 14:45:00" + + """ + try: + # Automatically detect the format of the input datetime string + dt = dateutil.parser.parse(input_datetime_string) + logger.debug(f"The datetime string has been parsed successfully: {dt}") + output_datetime_string = dt.strftime(output_datetime_format.value) + logger.debug(f"The format is now changed to {output_datetime_format.value}") + return output_datetime_string + except ValueError as e: + raise ValueError(f"Error during datetime formatting: {e}") + + @staticmethod + def replace_special_characters(input_string: str) -> str: + """ + Replace special characters and spaces in a string. + + The method replaces special characters and spaces in a string with underscores, + collapsing multiple consecutive underscores into a single underscore. Finally, it lowercases all characters of the string and removes leading or + trailing underscores. + + Parameters + ---------- + input_string : str + The input string from which special characters and spaces will be replaced. + + Returns + ------- + str + A new string with all special characters and spaces replaced by a single underscore + where consecutive underscores occur. + + Examples + -------- + >>> replace_special_characters("Hello, World! Welcome to Python @ 2023.") + 'hello_world_welcome_to_python_2023' + + >>> replace_special_characters("Special#Characters$Are%Fun!") + 'special_characters_are_fun' + + """ + # Replace any character that is not a word character or whitespace with underscore + replaced = re.sub(r"[^\w\s]", "_", input_string) + # Replace whitespace with underscore + replaced = replaced.replace(" ", "_") + # Collapse multiple consecutive underscores into a single underscore + replaced = re.sub(r"_+", "_", replaced) + # Remove leading and trailing underscores + replaced = replaced.strip("_") + # Lower case the string + replaced = replaced.casefold() + return replaced diff --git a/test/conftest.py b/test/conftest.py new file mode 100644 index 00000000..a0d1fc81 --- /dev/null +++ b/test/conftest.py @@ -0,0 +1,97 @@ +# SPDX-FileCopyrightText: The technology-data authors +# +# SPDX-License-Identifier: MIT + +""" +The module is used to define sharable pytest fixtures. + +Fixtures are a way to provide a fixed baseline upon which tests can +rely. They allow for setup code to be reused and can help manage +resources needed for tests, such as database connections, test data, +or configuration settings. +By placing fixtures in this file, they become accessible to all test +modules in the same directory and subdirectories, promoting code +reusability and organization. +""" + +import pathlib +import sys + +import pytest + +import technologydata + +sys.path.append("./technology-data") +path_cwd = pathlib.Path.cwd() + + +def create_source_from_params(params: dict[str, str]) -> technologydata.Source: + """ + Create a Source object from a parameter dictionary with validation. + + This function takes a dictionary of parameters and validates that the required fields are present. + If any required fields are missing, a ValueError is raised. If all required fields are present, + a new Source object is created and returned. + + Parameters + ---------- + params : dict[str, str] + A dictionary containing the parameters for creating a Source object. + Must include the keys "source_title" and "source_authors". + Other keys are optional. + + Returns + ------- + td.Source + A Source object initialized with the provided parameters. + + Raises + ------ + ValueError + If any of the required fields ("source_title", "source_authors") are missing from the params. + + Examples + -------- + >>> params_dict = { + ... "source_title": "Example Title", + ... "source_authors": "John Doe", + ... "source_url": "http://example.com", + ... "source_url_archive": "http://web.archive.org/web/20231001120000/http://example.com", + ... "source_url_date": "2023-10-01", + ... "source_url_date_archive": "2023-10-01T12:00:00Z" + ... } + >>> source = create_source_from_params(params_dict) + + """ + return technologydata.Source( + title=params["source_title"], + authors=params["source_authors"], + url=params.get("source_url"), + url_archive=params.get("source_url_archive"), + url_date=params.get("source_url_date"), + url_date_archive=params.get("source_url_date_archive"), + ) + + +@pytest.fixture(scope="function") # type: ignore +def example_source(request: pytest.FixtureRequest) -> technologydata.Source: + """Fixture to create an example source.""" + return create_source_from_params(request.param) + + +@pytest.fixture(scope="function") # type: ignore +def example_source_collection( + request: pytest.FixtureRequest, +) -> technologydata.SourceCollection: + """ + Fixture to create an example SourceCollection from a list of parameter dicts. + + Each dict in the list must contain the following keys: + - source_title + - source_authors + + This fixture is compatible with pytest parametrize. + """ + sources_params: list[dict[str, str]] = request.param + sources = [create_source_from_params(params) for params in sources_params] + return technologydata.SourceCollection(sources=sources) diff --git a/test/test_commons.py b/test/test_commons.py new file mode 100644 index 00000000..95bf5ad8 --- /dev/null +++ b/test/test_commons.py @@ -0,0 +1,141 @@ +# SPDX-FileCopyrightText: The technology-data authors +# +# SPDX-License-Identifier: MIT + +"""Test the utility methods.""" + +import typing + +import pytest + +import technologydata + + +@pytest.mark.parametrize( + "input_datetime_string, date_format, expected_date", + [ + ( + "2025-05-20 14:45:00", + technologydata.DateFormatEnum.SOURCES_CSV, + "2025-05-20 14:45:00", + ), + ( + "20250520144500", + technologydata.DateFormatEnum.SOURCES_CSV, + "2025-05-20 14:45:00", + ), + ( + "2025-05-20 14:45:00", + technologydata.DateFormatEnum.WAYBACK, + "20250520144500", + ), + ("20250520144500", technologydata.DateFormatEnum.WAYBACK, "20250520144500"), + ("2025-05-20 14:45:00", technologydata.DateFormatEnum.NONE, ""), + ("invalid-date-string", technologydata.DateFormatEnum.SOURCES_CSV, ValueError), + ("2025/13/01", technologydata.DateFormatEnum.SOURCES_CSV, ValueError), + ], +) # type: ignore +def test_change_datetime_format( + input_datetime_string: str, + date_format: technologydata.DateFormatEnum, + expected_date: str | typing.Any, +) -> None: + """Check if the datetime is correctly transformed to a new format.""" + if expected_date is ValueError: + with pytest.raises(ValueError, match="Error during datetime formatting"): + technologydata.Commons.change_datetime_format( + input_datetime_string, date_format + ) + else: + result = technologydata.Commons.change_datetime_format( + input_datetime_string, date_format + ) + assert result == expected_date + + +@pytest.mark.parametrize( + "input_string, expected_string", + [ + ( + "Hello, World! Welcome to Python @ 2023.", + "hello_world_welcome_to_python_2023", + ), + ( + " Special#Characters$Are%Fun! ", + "special_characters_are_fun", + ), + ( + "!!!LeadingAndTrailing!!!", + "leadingandtrailing", + ), + ], +) # type: ignore +def test_replace_special_characters( + input_string: str, + expected_string: str, +) -> None: + """Check if the special characters are removed from a string and the string is lowercased.""" + assert ( + technologydata.Commons.replace_special_characters(input_string) + == expected_string + ) + + +@pytest.mark.parametrize( + "input_string, expected_string", + [ + ("text/plain", ".txt"), + ("text/html", ".html"), + ("text/csv", ".csv"), + ("text/xml", ".xml"), + ("application/vnd.ms-excel", ".xls"), + ("application/vnd.oasis.opendocument.spreadsheet", ".ods"), + ("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", ".xlsx"), + ("application/json", ".json"), + ("application/xml", ".xml"), + ("application/pdf", ".pdf"), + ("application/parquet", ".parquet"), + ("application/vdn.apache.parquet", ".parquet"), + ("application/x-rar-compressed", ".rar"), + ("application/vnd.rar", ".rar"), + ("application/zip", ".zip"), + ("application/x-zip-compressed", ".zip"), + ], +) # type: ignore +def test_get_extension( + input_string: str, + expected_string: str, +) -> None: + """Check if the correct file extension is associated to a given MIME type.""" + assert ( + technologydata.FileExtensionEnum.get_extension(input_string) == expected_string + ) + + +@pytest.mark.parametrize( + "input_string, expected_string", + [ + ("https://example.com/file.txt", ".txt"), + ("https://example.com/file.html", ".html"), + ("https://example.com/file.csv", ".csv"), + ("https://example.com/file.xml", ".xml"), + ("https://example.com/file.xls", ".xls"), + ("https://example.com/file.ods", ".ods"), + ("https://example.com/file.xlsx", ".xlsx"), + ("https://example.com/file.json", ".json"), + ("https://example.com/file.pdf", ".pdf"), + ("https://example.com/file.parquet", ".parquet"), + ("https://example.com/file.rar", ".rar"), + ("https://example.com/file.zip", ".zip"), + ("https://example.com/file.unknown", None), + ], +) # type: ignore +def test_search_file_extension_in_url( + input_string: str, + expected_string: str, +) -> None: + """Check if the correct file extension is found in a given url.""" + assert ( + technologydata.FileExtensionEnum.search_file_extension_in_url(input_string) + == expected_string + ) diff --git a/test/test_data/solar_photovoltaics_example_03/sources.json b/test/test_data/solar_photovoltaics_example_03/sources.json new file mode 100644 index 00000000..770b0e69 --- /dev/null +++ b/test/test_data/solar_photovoltaics_example_03/sources.json @@ -0,0 +1,20 @@ +{ + "sources": [ + { + "title": "atb_nrel", + "authors": "NREL/ATB", + "url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_date": "2025-05-22 15:08:02", + "url_date_archive": "2025-05-22 15:08:02" + }, + { + "title": "tech_data_generation", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/3273/download", + "url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", + "url_date": "2025-05-06 16:02:04", + "url_date_archive": "2025-05-06 16:02:04" + } + ] +} diff --git a/test/test_data/solar_photovoltaics_example_03/technologies.json b/test/test_data/solar_photovoltaics_example_03/technologies.json new file mode 100644 index 00000000..02712257 --- /dev/null +++ b/test/test_data/solar_photovoltaics_example_03/technologies.json @@ -0,0 +1,276 @@ +[ + { + "region": "DEU", + "case": "example-scenario", + "year": 2022, + "technology": "Solar photovoltaics", + "detailed_technology": "Si-HC", + "capacity": { + "quantity": { + "value": 1, + "unit": "MW" + }, + "provenance": "Model calculation", + "note": "Average capacity factor of 22% assumed", + "sources": [ + { + "title": "atb_nrel", + "authors": "NREL/ATB", + "url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_date": "2025-05-22 15:08:02", + "url_date_archive": "2025-05-22 15:08:02" + }, + { + "title": "tech_data_generation", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/3273/download", + "url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", + "url_date": "2025-05-06 16:02:04", + "url_date_archive": "2025-05-06 16:02:04" + } + ] + }, + "investment": { + "quantity": { + "value": 500, + "unit": "EUR_2022/KW_el" + }, + "provenance": "Industry report", + "note": "Average overnight cost", + "sources": [ + { + "title": "atb_nrel", + "authors": "NREL/ATB", + "url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_date": "2025-05-22 15:08:02", + "url_date_archive": "2025-05-22 15:08:02" + }, + { + "title": "tech_data_generation", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/3273/download", + "url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", + "url_date": "2025-05-06 16:02:04", + "url_date_archive": "2025-05-06 16:02:04" + } + ] + }, + "specific_investment": { + "quantity": { + "value": 0.95, + "unit": "USD/W" + }, + "provenance": "Derived", + "note": "Calculated from investment/capacity", + "sources": [ + { + "title": "atb_nrel", + "authors": "NREL/ATB", + "url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_date": "2025-05-22 15:08:02", + "url_date_archive": "2025-05-22 15:08:02" + }, + { + "title": "tech_data_generation", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/3273/download", + "url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", + "url_date": "2025-05-06 16:02:04", + "url_date_archive": "2025-05-06 16:02:04" + } + ] + }, + "lifetime": { + "quantity": { + "value": 30, + "unit": "years" + }, + "provenance": "Manufacturer specification", + "note": "With performance degradation guarantee", + "sources": [ + { + "title": "atb_nrel", + "authors": "NREL/ATB", + "url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_date": "2025-05-22 15:08:02", + "url_date_archive": "2025-05-22 15:08:02" + }, + { + "title": "tech_data_generation", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/3273/download", + "url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", + "url_date": "2025-05-06 16:02:04", + "url_date_archive": "2025-05-06 16:02:04" + } + ] + }, + "wacc": { + "quantity": { + "value": 0.05, + "unit": "fraction" + }, + "provenance": "Financial analysis", + "note": "Nominal weighted average cost of capital", + "sources": [ + { + "title": "atb_nrel", + "authors": "NREL/ATB", + "url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_date": "2025-05-22 15:08:02", + "url_date_archive": "2025-05-22 15:08:02" + }, + { + "title": "tech_data_generation", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/3273/download", + "url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", + "url_date": "2025-05-06 16:02:04", + "url_date_archive": "2025-05-06 16:02:04" + } + ] + } + }, + { + "region": "DEU", + "case": "example-project", + "year": 2022, + "technology": "Solar photovoltaics", + "detailed_technology": "Si-HC", + "capacity": { + "quantity": { + "value": 1.0, + "unit": "MW" + }, + "provenance": "Model calculation", + "note": "Average capacity factor of 25% assumed", + "sources": [ + { + "title": "atb_nrel", + "authors": "NREL/ATB", + "url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_date": "2025-05-22 15:08:02", + "url_date_archive": "2025-05-22 15:08:02" + }, + { + "title": "tech_data_generation", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/3273/download", + "url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", + "url_date": "2025-05-06 16:02:04", + "url_date_archive": "2025-05-06 16:02:04" + } + ] + }, + "investment": { + "quantity": { + "value": 350, + "unit": "EUR_2022/KW_el" + }, + "provenance": "Industry report", + "note": "Average overnight cost for another tech", + "sources": [ + { + "title": "atb_nrel", + "authors": "NREL/ATB", + "url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_date": "2025-05-22 15:08:02", + "url_date_archive": "2025-05-22 15:08:02" + }, + { + "title": "tech_data_generation", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/3273/download", + "url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", + "url_date": "2025-05-06 16:02:04", + "url_date_archive": "2025-05-06 16:02:04" + } + ] + }, + "specific_investment": { + "quantity": { + "value": 0.95, + "unit": "USD/W" + }, + "provenance": "Derived", + "note": "Calculated from investment/capacity", + "sources": [ + { + "title": "atb_nrel", + "authors": "NREL/ATB", + "url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_date": "2025-05-22 15:08:02", + "url_date_archive": "2025-05-22 15:08:02" + }, + { + "title": "tech_data_generation", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/3273/download", + "url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", + "url_date": "2025-05-06 16:02:04", + "url_date_archive": "2025-05-06 16:02:04" + } + ] + }, + "lifetime": { + "quantity": { + "value": 30, + "unit": "years" + }, + "provenance": "Manufacturer specification", + "note": "With performance degradation guarantee", + "sources": [ + { + "title": "atb_nrel", + "authors": "NREL/ATB", + "url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_date": "2025-05-22 15:08:02", + "url_date_archive": "2025-05-22 15:08:02" + }, + { + "title": "tech_data_generation", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/3273/download", + "url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", + "url_date": "2025-05-06 16:02:04", + "url_date_archive": "2025-05-06 16:02:04" + } + ] + }, + "wacc": { + "quantity": { + "value": 0.05, + "unit": "fraction" + }, + "provenance": "Financial analysis", + "note": "Nominal weighted average cost of capital", + "sources": [ + { + "title": "atb_nrel", + "authors": "NREL/ATB", + "url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_date": "2025-05-22 15:08:02", + "url_date_archive": "2025-05-22 15:08:02" + }, + { + "title": "tech_data_generation", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/3273/download", + "url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", + "url_date": "2025-05-06 16:02:04", + "url_date_archive": "2025-05-06 16:02:04" + } + ] + } + } +] diff --git a/test/test_data/solar_photovoltaics_example_04/technologies.json b/test/test_data/solar_photovoltaics_example_04/technologies.json new file mode 100644 index 00000000..964b37ae --- /dev/null +++ b/test/test_data/solar_photovoltaics_example_04/technologies.json @@ -0,0 +1,166 @@ +[ + { + "region": "DEU", + "case": "example-scenario", + "year": 2022, + "technology": "Solar photovoltaics", + "detailed_technology": "Si-HC", + "capacity": { + "quantity": { + "value": 1, + "unit": "MW" + }, + "provenance": "Model calculation", + "note": "Average capacity factor of 22% assumed", + "sources": [ + { + "title": "example04", + "authors": "Open Energy Transition gGmbH", + "url": "https://openenergytransition.org/outputs.html" + } + ] + }, + "investment": { + "quantity": { + "value": 500, + "unit": "EUR_2022/KW_el" + }, + "provenance": "Industry report", + "note": "Average overnight cost", + "sources": [ + { + "title": "example04", + "authors": "Open Energy Transition gGmbH", + "url": "https://openenergytransition.org/outputs.html" + } + ] + }, + "specific_investment": { + "quantity": { + "value": 0.95, + "unit": "USD/W" + }, + "provenance": "Derived", + "note": "Calculated from investment/capacity", + "sources": [ + { + "title": "example04", + "authors": "Open Energy Transition gGmbH", + "url": "https://openenergytransition.org/outputs.html" + } + ] + }, + "lifetime": { + "quantity": { + "value": 30, + "unit": "years" + }, + "provenance": "Manufacturer specification", + "note": "With performance degradation guarantee", + "sources": [ + { + "title": "example04", + "authors": "Open Energy Transition gGmbH", + "url": "https://openenergytransition.org/outputs.html" + } + ] + }, + "wacc": { + "quantity": { + "value": 0.05, + "unit": "fraction" + }, + "provenance": "Financial analysis", + "note": "Nominal weighted average cost of capital", + "sources": [ + { + "title": "example04", + "authors": "Open Energy Transition gGmbH", + "url": "https://openenergytransition.org/outputs.html" + } + ] + } + }, + { + "region": "DEU", + "case": "example-project", + "year": 2022, + "technology": "Solar photovoltaics", + "detailed_technology": "Si-HC", + "capacity": { + "quantity": { + "value": 1.0, + "unit": "MW" + }, + "provenance": "Model calculation", + "note": "Average capacity factor of 25% assumed", + "sources": [ + { + "title": "example04", + "authors": "Open Energy Transition gGmbH", + "url": "https://openenergytransition.org/outputs.html" + } + ] + }, + "investment": { + "quantity": { + "value": 350, + "unit": "EUR_2022/KW_el" + }, + "provenance": "Industry report", + "note": "Average overnight cost for another tech", + "sources": [ + { + "title": "example04", + "authors": "Open Energy Transition gGmbH", + "url": "https://openenergytransition.org/outputs.html" + } + ] + }, + "specific_investment": { + "quantity": { + "value": 0.95, + "unit": "USD/W" + }, + "provenance": "Derived", + "note": "Calculated from investment/capacity", + "sources": [ + { + "title": "example04", + "authors": "Open Energy Transition gGmbH", + "url": "https://openenergytransition.org/outputs.html" + } + ] + }, + "lifetime": { + "quantity": { + "value": 30, + "unit": "years" + }, + "provenance": "Manufacturer specification", + "note": "With performance degradation guarantee", + "sources": [ + { + "title": "example04", + "authors": "Open Energy Transition gGmbH", + "url": "https://openenergytransition.org/outputs.html" + } + ] + }, + "wacc": { + "quantity": { + "value": 0.05, + "unit": "fraction" + }, + "provenance": "Financial analysis", + "note": "Nominal weighted average cost of capital", + "sources": [ + { + "title": "example04", + "authors": "Open Energy Transition gGmbH", + "url": "https://openenergytransition.org/outputs.html" + } + ] + } + } +] diff --git a/test/test_source.py b/test/test_source.py new file mode 100644 index 00000000..f2a521fc --- /dev/null +++ b/test/test_source.py @@ -0,0 +1,124 @@ +# SPDX-FileCopyrightText: The technology-data authors +# +# SPDX-License-Identifier: MIT + +"""Test the initialization and methods of the Source class.""" + +import datetime +import pathlib + +import pytest + +import technologydata + +path_cwd = pathlib.Path.cwd() + + +@pytest.mark.parametrize( + "example_source", + [ + { + "source_title": "atb_nrel", + "source_authors": "NREL/ATB", + "source_url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "source_url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "source_url_date": "2025-05-22 15:08:02", + "source_url_date_archive": "2025-05-22 15:08:02", + }, + { + "source_title": "tech_data_generation", + "source_authors": "Danish Energy Agency", + "source_url": "https://ens.dk/media/3273/download", + "source_url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", + "source_url_date": "2025-05-06 16:02:04", + "source_url_date_archive": "2025-05-06 16:02:04", + }, + ], + indirect=True, +) # type: ignore +def test_retrieve_from_wayback(example_source: technologydata.Source) -> None: + """Check if the example source is downloaded from the Internet Archive Wayback Machine.""" + storage_path = example_source.retrieve_from_wayback(path_cwd) + # Check if storage_paths is not None and is a list + assert storage_path is not None, "Expected a valid storage path, but got None." + assert isinstance(storage_path, pathlib.Path), ( + "Expected storage_path to be a pathlib.Path." + ) + assert storage_path is not None, "Expected a valid storage path, but got None." + assert storage_path.is_file(), ( + f"Expected {storage_path} to be a file, but it does not exist." + ) + # Delete the downloaded file + storage_path.unlink(missing_ok=True) + + +def test_store_in_wayback() -> None: + """Check if a given url is correctly stored as a snapshot on Internet Archive Wayback Machine.""" + url_to_archive = "https://openenergytransition.org/outputs.html" + archived_info = technologydata.Source.store_in_wayback(url_to_archive) + + # Check if archived_info is None + assert archived_info is not None, "archived_info should not be None" + + archived_url, new_capture, output_timestamp = archived_info + + assert "https://web.archive.org/web/" in archived_url + assert url_to_archive in archived_url + assert isinstance(new_capture, bool) + + assert output_timestamp is not None, "output_timestamp should not be None" + try: + datetime.datetime.strptime( + output_timestamp, technologydata.DateFormatEnum.SOURCES_CSV + ) + except ValueError: + pytest.fail("Valid date-time string did not match the format") + + +@pytest.mark.parametrize( + "example_source", + [ + { + "source_title": "OET project page", + "source_authors": "Open Energy Transition gGmbH", + "source_url": "https://openenergytransition.org/outputs.html", + }, + ], + indirect=["example_source"], +) # type: ignore +def test_ensure_in_wayback(example_source: technologydata.Source) -> None: + """Check if the snapshot URL is created correctly.""" + # Ensure the snapshot is created + example_source.ensure_in_wayback() + assert example_source.url_date_archive is not None + assert example_source.url_archive is not None + + +@pytest.mark.parametrize( + "url_archived, source_path, source_title, expected_path", + [ + ( + "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", + path_cwd, + "title", + pathlib.Path(path_cwd, "title.pdf"), + ), + ( + "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + path_cwd, + "title", + pathlib.Path(path_cwd, "title.parquet"), + ), + ], +) # type: ignore +def test_get_save_path( + url_archived: str, + source_path: pathlib.Path, + source_title: str, + expected_path: pathlib.Path, +) -> None: + """Check if the path where to store the file to download follows the requested pattern.""" + assert ( + technologydata.Source._get_save_path(url_archived, source_path, source_title) + == expected_path + ) diff --git a/test/test_source_collection.py b/test/test_source_collection.py new file mode 100644 index 00000000..41d65f68 --- /dev/null +++ b/test/test_source_collection.py @@ -0,0 +1,219 @@ +# SPDX-FileCopyrightText: The technology-data authors +# +# SPDX-License-Identifier: MIT + +"""Test the initialization and methods of the SourceCollection class.""" + +import pathlib + +import pandas +import pytest + +import technologydata + +path_cwd = pathlib.Path.cwd() + + +@pytest.mark.parametrize( + "example_source_collection", + [ + [ + { + "source_title": "Source 1", + "source_authors": "Author 1", + }, + { + "source_title": "Source 2", + "source_authors": "Author 2", + }, + ] + ], + indirect=True, +) # type: ignore +def test_example_source_collection( + example_source_collection: technologydata.SourceCollection, +) -> None: + """Check if the example source collection is instantiated correctly.""" + # Check that the returned object is a SourceCollection + assert isinstance(example_source_collection, technologydata.SourceCollection) + + # Check the number of sources + assert len(example_source_collection.sources) == 2 + + # Check the titles of the sources + assert example_source_collection.sources[0].title == "Source 1" + assert example_source_collection.sources[1].title == "Source 2" + assert example_source_collection.sources[0].authors == "Author 1" + assert example_source_collection.sources[1].authors == "Author 2" + + +@pytest.mark.parametrize( + "example_source_collection", + [ + [ + { + "source_title": "atb_nrel", + "source_authors": "NREL/ATB", + "source_url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "source_url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "source_url_date": "2025-05-22 15:08:02", + "source_url_date_archive": "2025-05-22 15:08:02", + }, + { + "source_title": "tech_data_generation", + "source_authors": "Danish Energy Agency", + "source_url": "https://ens.dk/media/3273/download", + "source_url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", + "source_url_date": "2025-05-06 16:02:04", + "source_url_date_archive": "2025-05-06 16:02:04", + }, + ], + ], + indirect=True, +) # type: ignore +def test_retrieve_all_from_wayback( + example_source_collection: technologydata.SourceCollection, +) -> None: + """Check if the example source collection is downloaded from the Internet Archive Wayback Machine.""" + storage_paths = example_source_collection.retrieve_all_from_wayback(path_cwd) + + # Check if storage_paths is not None and is a list + assert storage_paths is not None, "Expected storage_paths to be not None." + assert isinstance(storage_paths, list), "Expected storage_paths to be a list." + + # Filter out None values and check the remaining paths + valid_paths = [path for path in storage_paths if path is not None] + + assert all(isinstance(path, pathlib.Path) for path in valid_paths), ( + f"Expected all elements in {valid_paths} to be instances of pathlib.Path." + ) + assert all(path.is_file() for path in valid_paths), ( + f"Expected all elements in {valid_paths} to be a file, but it does not exist." + ) + + # Delete the downloaded files + for path in valid_paths: + path.unlink(missing_ok=True) + + +@pytest.mark.parametrize( + "example_source_collection", + [ + [ + { + "source_title": "atb_nrel", + "source_authors": "NREL/ATB", + "source_url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "source_url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "source_url_date": "2025-05-22 15:08:02", + "source_url_date_archive": "2025-05-22 15:08:02", + }, + { + "source_title": "tech_data_generation", + "source_authors": "Danish Energy Agency", + "source_url": "https://ens.dk/media/3273/download", + "source_url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", + "source_url_date": "2025-05-06 16:02:04", + "source_url_date_archive": "2025-05-06 16:02:04", + }, + ], + ], + indirect=True, +) # type: ignore +def test_to_csv(example_source_collection: technologydata.SourceCollection) -> None: + """Check if the example source collection is exported to CSV.""" + output_file = pathlib.Path(path_cwd, "export.csv") + example_source_collection.to_csv(path_or_buf=output_file) + assert output_file.is_file() + output_file.unlink(missing_ok=True) + + +@pytest.mark.parametrize( + "example_source_collection", + [ + [ + { + "source_title": "atb_nrel", + "source_authors": "NREL/ATB", + "source_url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "source_url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "source_url_date": "2025-05-22 15:08:02", + "source_url_date_archive": "2025-05-22 15:08:02", + }, + { + "source_title": "tech_data_generation", + "source_authors": "Danish Energy Agency", + "source_url": "https://ens.dk/media/3273/download", + "source_url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", + "source_url_date": "2025-05-06 16:02:04", + "source_url_date_archive": "2025-05-06 16:02:04", + }, + ], + ], + indirect=True, +) # type: ignore +def test_to_json(example_source_collection: technologydata.SourceCollection) -> None: + """Check if the example source collection is exported to JSON.""" + output_file = pathlib.Path(path_cwd, "sources.json") + schema_file = pathlib.Path(path_cwd, "source_collection_schema.json") + example_source_collection.to_json(pathlib.Path(output_file)) + assert output_file.is_file() + assert schema_file.is_file() + output_file.unlink(missing_ok=True) + schema_file.unlink(missing_ok=True) + + +@pytest.mark.parametrize( + "example_source_collection", + [ + [ + { + "source_title": "atb_nrel", + "source_authors": "NREL/ATB", + "source_url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "source_url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "source_url_date": "2025-05-22 15:08:02", + "source_url_date_archive": "2025-05-22 15:08:02", + }, + { + "source_title": "tech_data_generation", + "source_authors": "Danish Energy Agency", + "source_url": "https://ens.dk/media/3273/download", + "source_url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", + "source_url_date": "2025-05-06 16:02:04", + "source_url_date_archive": "2025-05-06 16:02:04", + }, + ], + ], + indirect=True, +) # type: ignore +def test_to_dataframe( + example_source_collection: technologydata.SourceCollection, +) -> None: + """Check if the example source collection is exported to pandas dataframe.""" + assert isinstance(example_source_collection.to_dataframe(), pandas.DataFrame) + + +def test_from_json() -> None: + """Check if the example source collection is exported to JSON.""" + input_file = pathlib.Path( + path_cwd, "test", "test_data", "solar_photovoltaics_example_03", "sources.json" + ) + source_collection = technologydata.SourceCollection.from_json(input_file) + assert isinstance(source_collection, technologydata.SourceCollection) + assert len(source_collection) == 2 + + +@pytest.mark.parametrize( + "title_pattern, authors_pattern", + [["ATB", "nrel"], ["TECH_DATA", "danish"]], +) # type: ignore +def test_get(title_pattern: str, authors_pattern: str) -> None: + """Check if the example source collection is filtered as requested.""" + input_file = pathlib.Path( + path_cwd, "test", "test_data", "solar_photovoltaics_example_03", "sources.json" + ) + + source_collection = technologydata.SourceCollection.from_json(input_file) + result = source_collection.get(title=title_pattern, authors=authors_pattern) + assert len(result.sources) == 1 diff --git a/uv.lock b/uv.lock new file mode 100644 index 00000000..9a3db3d3 --- /dev/null +++ b/uv.lock @@ -0,0 +1,2583 @@ +version = 1 +revision = 2 +requires-python = ">=3.12" + +[[package]] +name = "annotated-types" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081, upload_time = "2024-05-20T21:33:25.928Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload_time = "2024-05-20T21:33:24.1Z" }, +] + +[[package]] +name = "appnope" +version = "0.1.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/35/5d/752690df9ef5b76e169e68d6a129fa6d08a7100ca7f754c89495db3c6019/appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee", size = 4170, upload_time = "2024-02-06T09:43:11.258Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/29/5ecc3a15d5a33e31b26c11426c45c501e439cb865d0bff96315d86443b78/appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c", size = 4321, upload_time = "2024-02-06T09:43:09.663Z" }, +] + +[[package]] +name = "asttokens" +version = "3.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4a/e7/82da0a03e7ba5141f05cce0d302e6eed121ae055e0456ca228bf693984bc/asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7", size = 61978, upload_time = "2024-11-30T04:30:14.439Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/25/8a/c46dcc25341b5bce5472c718902eb3d38600a903b14fa6aeecef3f21a46f/asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2", size = 26918, upload_time = "2024-11-30T04:30:10.946Z" }, +] + +[[package]] +name = "attrs" +version = "25.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5a/b0/1367933a8532ee6ff8d63537de4f1177af4bff9f3e829baf7331f595bb24/attrs-25.3.0.tar.gz", hash = "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b", size = 812032, upload_time = "2025-03-13T11:10:22.779Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/77/06/bb80f5f86020c4551da315d78b3ab75e8228f89f0162f2c3a819e407941a/attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3", size = 63815, upload_time = "2025-03-13T11:10:21.14Z" }, +] + +[[package]] +name = "babel" +version = "2.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/6b/d52e42361e1aa00709585ecc30b3f9684b3ab62530771402248b1b1d6240/babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d", size = 9951852, upload_time = "2025-02-01T15:17:41.026Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2", size = 10182537, upload_time = "2025-02-01T15:17:37.39Z" }, +] + +[[package]] +name = "backrefs" +version = "5.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/eb/a7/312f673df6a79003279e1f55619abbe7daebbb87c17c976ddc0345c04c7b/backrefs-5.9.tar.gz", hash = "sha256:808548cb708d66b82ee231f962cb36faaf4f2baab032f2fbb783e9c2fdddaa59", size = 5765857, upload_time = "2025-06-22T19:34:13.97Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/19/4d/798dc1f30468134906575156c089c492cf79b5a5fd373f07fe26c4d046bf/backrefs-5.9-py310-none-any.whl", hash = "sha256:db8e8ba0e9de81fcd635f440deab5ae5f2591b54ac1ebe0550a2ca063488cd9f", size = 380267, upload_time = "2025-06-22T19:34:05.252Z" }, + { url = "https://files.pythonhosted.org/packages/55/07/f0b3375bf0d06014e9787797e6b7cc02b38ac9ff9726ccfe834d94e9991e/backrefs-5.9-py311-none-any.whl", hash = "sha256:6907635edebbe9b2dc3de3a2befff44d74f30a4562adbb8b36f21252ea19c5cf", size = 392072, upload_time = "2025-06-22T19:34:06.743Z" }, + { url = "https://files.pythonhosted.org/packages/9d/12/4f345407259dd60a0997107758ba3f221cf89a9b5a0f8ed5b961aef97253/backrefs-5.9-py312-none-any.whl", hash = "sha256:7fdf9771f63e6028d7fee7e0c497c81abda597ea45d6b8f89e8ad76994f5befa", size = 397947, upload_time = "2025-06-22T19:34:08.172Z" }, + { url = "https://files.pythonhosted.org/packages/10/bf/fa31834dc27a7f05e5290eae47c82690edc3a7b37d58f7fb35a1bdbf355b/backrefs-5.9-py313-none-any.whl", hash = "sha256:cc37b19fa219e93ff825ed1fed8879e47b4d89aa7a1884860e2db64ccd7c676b", size = 399843, upload_time = "2025-06-22T19:34:09.68Z" }, + { url = "https://files.pythonhosted.org/packages/fc/24/b29af34b2c9c41645a9f4ff117bae860291780d73880f449e0b5d948c070/backrefs-5.9-py314-none-any.whl", hash = "sha256:df5e169836cc8acb5e440ebae9aad4bf9d15e226d3bad049cf3f6a5c20cc8dc9", size = 411762, upload_time = "2025-06-22T19:34:11.037Z" }, + { url = "https://files.pythonhosted.org/packages/41/ff/392bff89415399a979be4a65357a41d92729ae8580a66073d8ec8d810f98/backrefs-5.9-py39-none-any.whl", hash = "sha256:f48ee18f6252b8f5777a22a00a09a85de0ca931658f1dd96d4406a34f3748c60", size = 380265, upload_time = "2025-06-22T19:34:12.405Z" }, +] + +[[package]] +name = "beautifulsoup4" +version = "4.13.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "soupsieve" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d8/e4/0c4c39e18fd76d6a628d4dd8da40543d136ce2d1752bd6eeeab0791f4d6b/beautifulsoup4-4.13.4.tar.gz", hash = "sha256:dbb3c4e1ceae6aefebdaf2423247260cd062430a410e38c66f2baa50a8437195", size = 621067, upload_time = "2025-04-15T17:05:13.836Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/50/cd/30110dc0ffcf3b131156077b90e9f60ed75711223f306da4db08eff8403b/beautifulsoup4-4.13.4-py3-none-any.whl", hash = "sha256:9bbbb14bfde9d79f38b8cd5f8c7c85f4b8f2523190ebed90e950a8dea4cb1c4b", size = 187285, upload_time = "2025-04-15T17:05:12.221Z" }, +] + +[[package]] +name = "certifi" +version = "2025.7.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/de/8a/c729b6b60c66a38f590c4e774decc4b2ec7b0576be8f1aa984a53ffa812a/certifi-2025.7.9.tar.gz", hash = "sha256:c1d2ec05395148ee10cf672ffc28cd37ea0ab0d99f9cc74c43e588cbd111b079", size = 160386, upload_time = "2025-07-09T02:13:58.874Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/66/f3/80a3f974c8b535d394ff960a11ac20368e06b736da395b551a49ce950cce/certifi-2025.7.9-py3-none-any.whl", hash = "sha256:d842783a14f8fdd646895ac26f719a061408834473cfc10203f6a575beb15d39", size = 159230, upload_time = "2025-07-09T02:13:57.007Z" }, +] + +[[package]] +name = "cffi" +version = "1.17.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", size = 516621, upload_time = "2024-09-04T20:45:21.852Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5a/84/e94227139ee5fb4d600a7a4927f322e1d4aea6fdc50bd3fca8493caba23f/cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4", size = 183178, upload_time = "2024-09-04T20:44:12.232Z" }, + { url = "https://files.pythonhosted.org/packages/da/ee/fb72c2b48656111c4ef27f0f91da355e130a923473bf5ee75c5643d00cca/cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c", size = 178840, upload_time = "2024-09-04T20:44:13.739Z" }, + { url = "https://files.pythonhosted.org/packages/cc/b6/db007700f67d151abadf508cbfd6a1884f57eab90b1bb985c4c8c02b0f28/cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36", size = 454803, upload_time = "2024-09-04T20:44:15.231Z" }, + { url = "https://files.pythonhosted.org/packages/1a/df/f8d151540d8c200eb1c6fba8cd0dfd40904f1b0682ea705c36e6c2e97ab3/cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5", size = 478850, upload_time = "2024-09-04T20:44:17.188Z" }, + { url = "https://files.pythonhosted.org/packages/28/c0/b31116332a547fd2677ae5b78a2ef662dfc8023d67f41b2a83f7c2aa78b1/cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff", size = 485729, upload_time = "2024-09-04T20:44:18.688Z" }, + { url = "https://files.pythonhosted.org/packages/91/2b/9a1ddfa5c7f13cab007a2c9cc295b70fbbda7cb10a286aa6810338e60ea1/cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99", size = 471256, upload_time = "2024-09-04T20:44:20.248Z" }, + { url = "https://files.pythonhosted.org/packages/b2/d5/da47df7004cb17e4955df6a43d14b3b4ae77737dff8bf7f8f333196717bf/cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93", size = 479424, upload_time = "2024-09-04T20:44:21.673Z" }, + { url = "https://files.pythonhosted.org/packages/0b/ac/2a28bcf513e93a219c8a4e8e125534f4f6db03e3179ba1c45e949b76212c/cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3", size = 484568, upload_time = "2024-09-04T20:44:23.245Z" }, + { url = "https://files.pythonhosted.org/packages/d4/38/ca8a4f639065f14ae0f1d9751e70447a261f1a30fa7547a828ae08142465/cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8", size = 488736, upload_time = "2024-09-04T20:44:24.757Z" }, + { url = "https://files.pythonhosted.org/packages/86/c5/28b2d6f799ec0bdecf44dced2ec5ed43e0eb63097b0f58c293583b406582/cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65", size = 172448, upload_time = "2024-09-04T20:44:26.208Z" }, + { url = "https://files.pythonhosted.org/packages/50/b9/db34c4755a7bd1cb2d1603ac3863f22bcecbd1ba29e5ee841a4bc510b294/cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903", size = 181976, upload_time = "2024-09-04T20:44:27.578Z" }, + { url = "https://files.pythonhosted.org/packages/8d/f8/dd6c246b148639254dad4d6803eb6a54e8c85c6e11ec9df2cffa87571dbe/cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", size = 182989, upload_time = "2024-09-04T20:44:28.956Z" }, + { url = "https://files.pythonhosted.org/packages/8b/f1/672d303ddf17c24fc83afd712316fda78dc6fce1cd53011b839483e1ecc8/cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", size = 178802, upload_time = "2024-09-04T20:44:30.289Z" }, + { url = "https://files.pythonhosted.org/packages/0e/2d/eab2e858a91fdff70533cab61dcff4a1f55ec60425832ddfdc9cd36bc8af/cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", size = 454792, upload_time = "2024-09-04T20:44:32.01Z" }, + { url = "https://files.pythonhosted.org/packages/75/b2/fbaec7c4455c604e29388d55599b99ebcc250a60050610fadde58932b7ee/cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", size = 478893, upload_time = "2024-09-04T20:44:33.606Z" }, + { url = "https://files.pythonhosted.org/packages/4f/b7/6e4a2162178bf1935c336d4da8a9352cccab4d3a5d7914065490f08c0690/cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", size = 485810, upload_time = "2024-09-04T20:44:35.191Z" }, + { url = "https://files.pythonhosted.org/packages/c7/8a/1d0e4a9c26e54746dc08c2c6c037889124d4f59dffd853a659fa545f1b40/cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4", size = 471200, upload_time = "2024-09-04T20:44:36.743Z" }, + { url = "https://files.pythonhosted.org/packages/26/9f/1aab65a6c0db35f43c4d1b4f580e8df53914310afc10ae0397d29d697af4/cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", size = 479447, upload_time = "2024-09-04T20:44:38.492Z" }, + { url = "https://files.pythonhosted.org/packages/5f/e4/fb8b3dd8dc0e98edf1135ff067ae070bb32ef9d509d6cb0f538cd6f7483f/cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", size = 484358, upload_time = "2024-09-04T20:44:40.046Z" }, + { url = "https://files.pythonhosted.org/packages/f1/47/d7145bf2dc04684935d57d67dff9d6d795b2ba2796806bb109864be3a151/cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", size = 488469, upload_time = "2024-09-04T20:44:41.616Z" }, + { url = "https://files.pythonhosted.org/packages/bf/ee/f94057fa6426481d663b88637a9a10e859e492c73d0384514a17d78ee205/cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", size = 172475, upload_time = "2024-09-04T20:44:43.733Z" }, + { url = "https://files.pythonhosted.org/packages/7c/fc/6a8cb64e5f0324877d503c854da15d76c1e50eb722e320b15345c4d0c6de/cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", size = 182009, upload_time = "2024-09-04T20:44:45.309Z" }, +] + +[[package]] +name = "cfgv" +version = "3.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/11/74/539e56497d9bd1d484fd863dd69cbbfa653cd2aa27abfe35653494d85e94/cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560", size = 7114, upload_time = "2023-08-12T20:38:17.776Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c5/55/51844dd50c4fc7a33b653bfaba4c2456f06955289ca770a5dbd5fd267374/cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9", size = 7249, upload_time = "2023-08-12T20:38:16.269Z" }, +] + +[[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" }, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e4/33/89c2ced2b67d1c2a61c19c6751aa8902d46ce3dacb23600a283619f5a12d/charset_normalizer-3.4.2.tar.gz", hash = "sha256:5baececa9ecba31eff645232d59845c07aa030f0c81ee70184a90d35099a0e63", size = 126367, upload_time = "2025-05-02T08:34:42.01Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d7/a4/37f4d6035c89cac7930395a35cc0f1b872e652eaafb76a6075943754f095/charset_normalizer-3.4.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0c29de6a1a95f24b9a1aa7aefd27d2487263f00dfd55a77719b530788f75cff7", size = 199936, upload_time = "2025-05-02T08:32:33.712Z" }, + { url = "https://files.pythonhosted.org/packages/ee/8a/1a5e33b73e0d9287274f899d967907cd0bf9c343e651755d9307e0dbf2b3/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cddf7bd982eaa998934a91f69d182aec997c6c468898efe6679af88283b498d3", size = 143790, upload_time = "2025-05-02T08:32:35.768Z" }, + { url = "https://files.pythonhosted.org/packages/66/52/59521f1d8e6ab1482164fa21409c5ef44da3e9f653c13ba71becdd98dec3/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcbe676a55d7445b22c10967bceaaf0ee69407fbe0ece4d032b6eb8d4565982a", size = 153924, upload_time = "2025-05-02T08:32:37.284Z" }, + { url = "https://files.pythonhosted.org/packages/86/2d/fb55fdf41964ec782febbf33cb64be480a6b8f16ded2dbe8db27a405c09f/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d41c4d287cfc69060fa91cae9683eacffad989f1a10811995fa309df656ec214", size = 146626, upload_time = "2025-05-02T08:32:38.803Z" }, + { url = "https://files.pythonhosted.org/packages/8c/73/6ede2ec59bce19b3edf4209d70004253ec5f4e319f9a2e3f2f15601ed5f7/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e594135de17ab3866138f496755f302b72157d115086d100c3f19370839dd3a", size = 148567, upload_time = "2025-05-02T08:32:40.251Z" }, + { url = "https://files.pythonhosted.org/packages/09/14/957d03c6dc343c04904530b6bef4e5efae5ec7d7990a7cbb868e4595ee30/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cf713fe9a71ef6fd5adf7a79670135081cd4431c2943864757f0fa3a65b1fafd", size = 150957, upload_time = "2025-05-02T08:32:41.705Z" }, + { url = "https://files.pythonhosted.org/packages/0d/c8/8174d0e5c10ccebdcb1b53cc959591c4c722a3ad92461a273e86b9f5a302/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a370b3e078e418187da8c3674eddb9d983ec09445c99a3a263c2011993522981", size = 145408, upload_time = "2025-05-02T08:32:43.709Z" }, + { url = "https://files.pythonhosted.org/packages/58/aa/8904b84bc8084ac19dc52feb4f5952c6df03ffb460a887b42615ee1382e8/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a955b438e62efdf7e0b7b52a64dc5c3396e2634baa62471768a64bc2adb73d5c", size = 153399, upload_time = "2025-05-02T08:32:46.197Z" }, + { url = "https://files.pythonhosted.org/packages/c2/26/89ee1f0e264d201cb65cf054aca6038c03b1a0c6b4ae998070392a3ce605/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:7222ffd5e4de8e57e03ce2cef95a4c43c98fcb72ad86909abdfc2c17d227fc1b", size = 156815, upload_time = "2025-05-02T08:32:48.105Z" }, + { url = "https://files.pythonhosted.org/packages/fd/07/68e95b4b345bad3dbbd3a8681737b4338ff2c9df29856a6d6d23ac4c73cb/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:bee093bf902e1d8fc0ac143c88902c3dfc8941f7ea1d6a8dd2bcb786d33db03d", size = 154537, upload_time = "2025-05-02T08:32:49.719Z" }, + { url = "https://files.pythonhosted.org/packages/77/1a/5eefc0ce04affb98af07bc05f3bac9094513c0e23b0562d64af46a06aae4/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dedb8adb91d11846ee08bec4c8236c8549ac721c245678282dcb06b221aab59f", size = 149565, upload_time = "2025-05-02T08:32:51.404Z" }, + { url = "https://files.pythonhosted.org/packages/37/a0/2410e5e6032a174c95e0806b1a6585eb21e12f445ebe239fac441995226a/charset_normalizer-3.4.2-cp312-cp312-win32.whl", hash = "sha256:db4c7bf0e07fc3b7d89ac2a5880a6a8062056801b83ff56d8464b70f65482b6c", size = 98357, upload_time = "2025-05-02T08:32:53.079Z" }, + { url = "https://files.pythonhosted.org/packages/6c/4f/c02d5c493967af3eda9c771ad4d2bbc8df6f99ddbeb37ceea6e8716a32bc/charset_normalizer-3.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:5a9979887252a82fefd3d3ed2a8e3b937a7a809f65dcb1e068b090e165bbe99e", size = 105776, upload_time = "2025-05-02T08:32:54.573Z" }, + { url = "https://files.pythonhosted.org/packages/ea/12/a93df3366ed32db1d907d7593a94f1fe6293903e3e92967bebd6950ed12c/charset_normalizer-3.4.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:926ca93accd5d36ccdabd803392ddc3e03e6d4cd1cf17deff3b989ab8e9dbcf0", size = 199622, upload_time = "2025-05-02T08:32:56.363Z" }, + { url = "https://files.pythonhosted.org/packages/04/93/bf204e6f344c39d9937d3c13c8cd5bbfc266472e51fc8c07cb7f64fcd2de/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eba9904b0f38a143592d9fc0e19e2df0fa2e41c3c3745554761c5f6447eedabf", size = 143435, upload_time = "2025-05-02T08:32:58.551Z" }, + { url = "https://files.pythonhosted.org/packages/22/2a/ea8a2095b0bafa6c5b5a55ffdc2f924455233ee7b91c69b7edfcc9e02284/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3fddb7e2c84ac87ac3a947cb4e66d143ca5863ef48e4a5ecb83bd48619e4634e", size = 153653, upload_time = "2025-05-02T08:33:00.342Z" }, + { url = "https://files.pythonhosted.org/packages/b6/57/1b090ff183d13cef485dfbe272e2fe57622a76694061353c59da52c9a659/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98f862da73774290f251b9df8d11161b6cf25b599a66baf087c1ffe340e9bfd1", size = 146231, upload_time = "2025-05-02T08:33:02.081Z" }, + { url = "https://files.pythonhosted.org/packages/e2/28/ffc026b26f441fc67bd21ab7f03b313ab3fe46714a14b516f931abe1a2d8/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c9379d65defcab82d07b2a9dfbfc2e95bc8fe0ebb1b176a3190230a3ef0e07c", size = 148243, upload_time = "2025-05-02T08:33:04.063Z" }, + { url = "https://files.pythonhosted.org/packages/c0/0f/9abe9bd191629c33e69e47c6ef45ef99773320e9ad8e9cb08b8ab4a8d4cb/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e635b87f01ebc977342e2697d05b56632f5f879a4f15955dfe8cef2448b51691", size = 150442, upload_time = "2025-05-02T08:33:06.418Z" }, + { url = "https://files.pythonhosted.org/packages/67/7c/a123bbcedca91d5916c056407f89a7f5e8fdfce12ba825d7d6b9954a1a3c/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1c95a1e2902a8b722868587c0e1184ad5c55631de5afc0eb96bc4b0d738092c0", size = 145147, upload_time = "2025-05-02T08:33:08.183Z" }, + { url = "https://files.pythonhosted.org/packages/ec/fe/1ac556fa4899d967b83e9893788e86b6af4d83e4726511eaaad035e36595/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ef8de666d6179b009dce7bcb2ad4c4a779f113f12caf8dc77f0162c29d20490b", size = 153057, upload_time = "2025-05-02T08:33:09.986Z" }, + { url = "https://files.pythonhosted.org/packages/2b/ff/acfc0b0a70b19e3e54febdd5301a98b72fa07635e56f24f60502e954c461/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:32fc0341d72e0f73f80acb0a2c94216bd704f4f0bce10aedea38f30502b271ff", size = 156454, upload_time = "2025-05-02T08:33:11.814Z" }, + { url = "https://files.pythonhosted.org/packages/92/08/95b458ce9c740d0645feb0e96cea1f5ec946ea9c580a94adfe0b617f3573/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:289200a18fa698949d2b39c671c2cc7a24d44096784e76614899a7ccf2574b7b", size = 154174, upload_time = "2025-05-02T08:33:13.707Z" }, + { url = "https://files.pythonhosted.org/packages/78/be/8392efc43487ac051eee6c36d5fbd63032d78f7728cb37aebcc98191f1ff/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4a476b06fbcf359ad25d34a057b7219281286ae2477cc5ff5e3f70a246971148", size = 149166, upload_time = "2025-05-02T08:33:15.458Z" }, + { url = "https://files.pythonhosted.org/packages/44/96/392abd49b094d30b91d9fbda6a69519e95802250b777841cf3bda8fe136c/charset_normalizer-3.4.2-cp313-cp313-win32.whl", hash = "sha256:aaeeb6a479c7667fbe1099af9617c83aaca22182d6cf8c53966491a0f1b7ffb7", size = 98064, upload_time = "2025-05-02T08:33:17.06Z" }, + { url = "https://files.pythonhosted.org/packages/e9/b0/0200da600134e001d91851ddc797809e2fe0ea72de90e09bec5a2fbdaccb/charset_normalizer-3.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980", size = 105641, upload_time = "2025-05-02T08:33:18.753Z" }, + { url = "https://files.pythonhosted.org/packages/20/94/c5790835a017658cbfabd07f3bfb549140c3ac458cfc196323996b10095a/charset_normalizer-3.4.2-py3-none-any.whl", hash = "sha256:7f56930ab0abd1c45cd15be65cc741c28b1c9a34876ce8c17a2fa107810c0af0", size = 52626, upload_time = "2025-05-02T08:34:40.053Z" }, +] + +[[package]] +name = "click" +version = "8.2.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/60/6c/8ca2efa64cf75a977a0d7fac081354553ebe483345c734fb6b6515d96bbc/click-8.2.1.tar.gz", hash = "sha256:27c491cc05d968d271d5a1db13e3b5a184636d9d930f148c50b038f0d0646202", size = 286342, upload_time = "2025-05-20T23:19:49.832Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/85/32/10bb5764d90a8eee674e9dc6f4db6a0ab47c8c4d0d83c27f7c39ac415a4d/click-8.2.1-py3-none-any.whl", hash = "sha256:61a3265b914e850b85317d0b3109c7f8cd35a670f963866005d6ef1d5175a12b", size = 102215, upload_time = "2025-05-20T23:19:47.796Z" }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload_time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload_time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "comm" +version = "0.2.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e9/a8/fb783cb0abe2b5fded9f55e5703015cdf1c9c85b3669087c538dd15a6a86/comm-0.2.2.tar.gz", hash = "sha256:3fd7a84065306e07bea1773df6eb8282de51ba82f77c72f9c85716ab11fe980e", size = 6210, upload_time = "2024-03-12T16:53:41.133Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e6/75/49e5bfe642f71f272236b5b2d2691cf915a7283cc0ceda56357b61daa538/comm-0.2.2-py3-none-any.whl", hash = "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3", size = 7180, upload_time = "2024-03-12T16:53:39.226Z" }, +] + +[[package]] +name = "contourpy" +version = "1.3.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/54/eb9bfc647b19f2009dd5c7f5ec51c4e6ca831725f1aea7a993034f483147/contourpy-1.3.2.tar.gz", hash = "sha256:b6945942715a034c671b7fc54f9588126b0b8bf23db2696e3ca8328f3ff0ab54", size = 13466130, upload_time = "2025-04-15T17:47:53.79Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/34/f7/44785876384eff370c251d58fd65f6ad7f39adce4a093c934d4a67a7c6b6/contourpy-1.3.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4caf2bcd2969402bf77edc4cb6034c7dd7c0803213b3523f111eb7460a51b8d2", size = 271580, upload_time = "2025-04-15T17:37:03.105Z" }, + { url = "https://files.pythonhosted.org/packages/93/3b/0004767622a9826ea3d95f0e9d98cd8729015768075d61f9fea8eeca42a8/contourpy-1.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:82199cb78276249796419fe36b7386bd8d2cc3f28b3bc19fe2454fe2e26c4c15", size = 255530, upload_time = "2025-04-15T17:37:07.026Z" }, + { url = "https://files.pythonhosted.org/packages/e7/bb/7bd49e1f4fa805772d9fd130e0d375554ebc771ed7172f48dfcd4ca61549/contourpy-1.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:106fab697af11456fcba3e352ad50effe493a90f893fca6c2ca5c033820cea92", size = 307688, upload_time = "2025-04-15T17:37:11.481Z" }, + { url = "https://files.pythonhosted.org/packages/fc/97/e1d5dbbfa170725ef78357a9a0edc996b09ae4af170927ba8ce977e60a5f/contourpy-1.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d14f12932a8d620e307f715857107b1d1845cc44fdb5da2bc8e850f5ceba9f87", size = 347331, upload_time = "2025-04-15T17:37:18.212Z" }, + { url = "https://files.pythonhosted.org/packages/6f/66/e69e6e904f5ecf6901be3dd16e7e54d41b6ec6ae3405a535286d4418ffb4/contourpy-1.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:532fd26e715560721bb0d5fc7610fce279b3699b018600ab999d1be895b09415", size = 318963, upload_time = "2025-04-15T17:37:22.76Z" }, + { url = "https://files.pythonhosted.org/packages/a8/32/b8a1c8965e4f72482ff2d1ac2cd670ce0b542f203c8e1d34e7c3e6925da7/contourpy-1.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26b383144cf2d2c29f01a1e8170f50dacf0eac02d64139dcd709a8ac4eb3cfe", size = 323681, upload_time = "2025-04-15T17:37:33.001Z" }, + { url = "https://files.pythonhosted.org/packages/30/c6/12a7e6811d08757c7162a541ca4c5c6a34c0f4e98ef2b338791093518e40/contourpy-1.3.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c49f73e61f1f774650a55d221803b101d966ca0c5a2d6d5e4320ec3997489441", size = 1308674, upload_time = "2025-04-15T17:37:48.64Z" }, + { url = "https://files.pythonhosted.org/packages/2a/8a/bebe5a3f68b484d3a2b8ffaf84704b3e343ef1addea528132ef148e22b3b/contourpy-1.3.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3d80b2c0300583228ac98d0a927a1ba6a2ba6b8a742463c564f1d419ee5b211e", size = 1380480, upload_time = "2025-04-15T17:38:06.7Z" }, + { url = "https://files.pythonhosted.org/packages/34/db/fcd325f19b5978fb509a7d55e06d99f5f856294c1991097534360b307cf1/contourpy-1.3.2-cp312-cp312-win32.whl", hash = "sha256:90df94c89a91b7362e1142cbee7568f86514412ab8a2c0d0fca72d7e91b62912", size = 178489, upload_time = "2025-04-15T17:38:10.338Z" }, + { url = "https://files.pythonhosted.org/packages/01/c8/fadd0b92ffa7b5eb5949bf340a63a4a496a6930a6c37a7ba0f12acb076d6/contourpy-1.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:8c942a01d9163e2e5cfb05cb66110121b8d07ad438a17f9e766317bcb62abf73", size = 223042, upload_time = "2025-04-15T17:38:14.239Z" }, + { url = "https://files.pythonhosted.org/packages/2e/61/5673f7e364b31e4e7ef6f61a4b5121c5f170f941895912f773d95270f3a2/contourpy-1.3.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:de39db2604ae755316cb5967728f4bea92685884b1e767b7c24e983ef5f771cb", size = 271630, upload_time = "2025-04-15T17:38:19.142Z" }, + { url = "https://files.pythonhosted.org/packages/ff/66/a40badddd1223822c95798c55292844b7e871e50f6bfd9f158cb25e0bd39/contourpy-1.3.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3f9e896f447c5c8618f1edb2bafa9a4030f22a575ec418ad70611450720b5b08", size = 255670, upload_time = "2025-04-15T17:38:23.688Z" }, + { url = "https://files.pythonhosted.org/packages/1e/c7/cf9fdee8200805c9bc3b148f49cb9482a4e3ea2719e772602a425c9b09f8/contourpy-1.3.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71e2bd4a1c4188f5c2b8d274da78faab884b59df20df63c34f74aa1813c4427c", size = 306694, upload_time = "2025-04-15T17:38:28.238Z" }, + { url = "https://files.pythonhosted.org/packages/dd/e7/ccb9bec80e1ba121efbffad7f38021021cda5be87532ec16fd96533bb2e0/contourpy-1.3.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de425af81b6cea33101ae95ece1f696af39446db9682a0b56daaa48cfc29f38f", size = 345986, upload_time = "2025-04-15T17:38:33.502Z" }, + { url = "https://files.pythonhosted.org/packages/dc/49/ca13bb2da90391fa4219fdb23b078d6065ada886658ac7818e5441448b78/contourpy-1.3.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:977e98a0e0480d3fe292246417239d2d45435904afd6d7332d8455981c408b85", size = 318060, upload_time = "2025-04-15T17:38:38.672Z" }, + { url = "https://files.pythonhosted.org/packages/c8/65/5245ce8c548a8422236c13ffcdcdada6a2a812c361e9e0c70548bb40b661/contourpy-1.3.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:434f0adf84911c924519d2b08fc10491dd282b20bdd3fa8f60fd816ea0b48841", size = 322747, upload_time = "2025-04-15T17:38:43.712Z" }, + { url = "https://files.pythonhosted.org/packages/72/30/669b8eb48e0a01c660ead3752a25b44fdb2e5ebc13a55782f639170772f9/contourpy-1.3.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c66c4906cdbc50e9cba65978823e6e00b45682eb09adbb78c9775b74eb222422", size = 1308895, upload_time = "2025-04-15T17:39:00.224Z" }, + { url = "https://files.pythonhosted.org/packages/05/5a/b569f4250decee6e8d54498be7bdf29021a4c256e77fe8138c8319ef8eb3/contourpy-1.3.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8b7fc0cd78ba2f4695fd0a6ad81a19e7e3ab825c31b577f384aa9d7817dc3bef", size = 1379098, upload_time = "2025-04-15T17:43:29.649Z" }, + { url = "https://files.pythonhosted.org/packages/19/ba/b227c3886d120e60e41b28740ac3617b2f2b971b9f601c835661194579f1/contourpy-1.3.2-cp313-cp313-win32.whl", hash = "sha256:15ce6ab60957ca74cff444fe66d9045c1fd3e92c8936894ebd1f3eef2fff075f", size = 178535, upload_time = "2025-04-15T17:44:44.532Z" }, + { url = "https://files.pythonhosted.org/packages/12/6e/2fed56cd47ca739b43e892707ae9a13790a486a3173be063681ca67d2262/contourpy-1.3.2-cp313-cp313-win_amd64.whl", hash = "sha256:e1578f7eafce927b168752ed7e22646dad6cd9bca673c60bff55889fa236ebf9", size = 223096, upload_time = "2025-04-15T17:44:48.194Z" }, + { url = "https://files.pythonhosted.org/packages/54/4c/e76fe2a03014a7c767d79ea35c86a747e9325537a8b7627e0e5b3ba266b4/contourpy-1.3.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0475b1f6604896bc7c53bb070e355e9321e1bc0d381735421a2d2068ec56531f", size = 285090, upload_time = "2025-04-15T17:43:34.084Z" }, + { url = "https://files.pythonhosted.org/packages/7b/e2/5aba47debd55d668e00baf9651b721e7733975dc9fc27264a62b0dd26eb8/contourpy-1.3.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:c85bb486e9be652314bb5b9e2e3b0d1b2e643d5eec4992c0fbe8ac71775da739", size = 268643, upload_time = "2025-04-15T17:43:38.626Z" }, + { url = "https://files.pythonhosted.org/packages/a1/37/cd45f1f051fe6230f751cc5cdd2728bb3a203f5619510ef11e732109593c/contourpy-1.3.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:745b57db7758f3ffc05a10254edd3182a2a83402a89c00957a8e8a22f5582823", size = 310443, upload_time = "2025-04-15T17:43:44.522Z" }, + { url = "https://files.pythonhosted.org/packages/8b/a2/36ea6140c306c9ff6dd38e3bcec80b3b018474ef4d17eb68ceecd26675f4/contourpy-1.3.2-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:970e9173dbd7eba9b4e01aab19215a48ee5dd3f43cef736eebde064a171f89a5", size = 349865, upload_time = "2025-04-15T17:43:49.545Z" }, + { url = "https://files.pythonhosted.org/packages/95/b7/2fc76bc539693180488f7b6cc518da7acbbb9e3b931fd9280504128bf956/contourpy-1.3.2-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6c4639a9c22230276b7bffb6a850dfc8258a2521305e1faefe804d006b2e532", size = 321162, upload_time = "2025-04-15T17:43:54.203Z" }, + { url = "https://files.pythonhosted.org/packages/f4/10/76d4f778458b0aa83f96e59d65ece72a060bacb20cfbee46cf6cd5ceba41/contourpy-1.3.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc829960f34ba36aad4302e78eabf3ef16a3a100863f0d4eeddf30e8a485a03b", size = 327355, upload_time = "2025-04-15T17:44:01.025Z" }, + { url = "https://files.pythonhosted.org/packages/43/a3/10cf483ea683f9f8ab096c24bad3cce20e0d1dd9a4baa0e2093c1c962d9d/contourpy-1.3.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d32530b534e986374fc19eaa77fcb87e8a99e5431499949b828312bdcd20ac52", size = 1307935, upload_time = "2025-04-15T17:44:17.322Z" }, + { url = "https://files.pythonhosted.org/packages/78/73/69dd9a024444489e22d86108e7b913f3528f56cfc312b5c5727a44188471/contourpy-1.3.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e298e7e70cf4eb179cc1077be1c725b5fd131ebc81181bf0c03525c8abc297fd", size = 1372168, upload_time = "2025-04-15T17:44:33.43Z" }, + { url = "https://files.pythonhosted.org/packages/0f/1b/96d586ccf1b1a9d2004dd519b25fbf104a11589abfd05484ff12199cca21/contourpy-1.3.2-cp313-cp313t-win32.whl", hash = "sha256:d0e589ae0d55204991450bb5c23f571c64fe43adaa53f93fc902a84c96f52fe1", size = 189550, upload_time = "2025-04-15T17:44:37.092Z" }, + { url = "https://files.pythonhosted.org/packages/b0/e6/6000d0094e8a5e32ad62591c8609e269febb6e4db83a1c75ff8868b42731/contourpy-1.3.2-cp313-cp313t-win_amd64.whl", hash = "sha256:78e9253c3de756b3f6a5174d024c4835acd59eb3f8e2ca13e775dbffe1558f69", size = 238214, upload_time = "2025-04-15T17:44:40.827Z" }, +] + +[[package]] +name = "csscompressor" +version = "0.9.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f1/2a/8c3ac3d8bc94e6de8d7ae270bb5bc437b210bb9d6d9e46630c98f4abd20c/csscompressor-0.9.5.tar.gz", hash = "sha256:afa22badbcf3120a4f392e4d22f9fff485c044a1feda4a950ecc5eba9dd31a05", size = 237808, upload_time = "2017-11-26T21:13:08.238Z" } + +[[package]] +name = "cycler" +version = "0.12.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a9/95/a3dbbb5028f35eafb79008e7522a75244477d2838f38cbb722248dabc2a8/cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c", size = 7615, upload_time = "2023-10-07T05:32:18.335Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321, upload_time = "2023-10-07T05:32:16.783Z" }, +] + +[[package]] +name = "debugpy" +version = "1.8.14" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bd/75/087fe07d40f490a78782ff3b0a30e3968936854105487decdb33446d4b0e/debugpy-1.8.14.tar.gz", hash = "sha256:7cd287184318416850aa8b60ac90105837bb1e59531898c07569d197d2ed5322", size = 1641444, upload_time = "2025-04-10T19:46:10.981Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d9/2a/ac2df0eda4898f29c46eb6713a5148e6f8b2b389c8ec9e425a4a1d67bf07/debugpy-1.8.14-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:8899c17920d089cfa23e6005ad9f22582fd86f144b23acb9feeda59e84405b84", size = 2501268, upload_time = "2025-04-10T19:46:26.044Z" }, + { url = "https://files.pythonhosted.org/packages/10/53/0a0cb5d79dd9f7039169f8bf94a144ad3efa52cc519940b3b7dde23bcb89/debugpy-1.8.14-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6bb5c0dcf80ad5dbc7b7d6eac484e2af34bdacdf81df09b6a3e62792b722826", size = 4221077, upload_time = "2025-04-10T19:46:27.464Z" }, + { url = "https://files.pythonhosted.org/packages/f8/d5/84e01821f362327bf4828728aa31e907a2eca7c78cd7c6ec062780d249f8/debugpy-1.8.14-cp312-cp312-win32.whl", hash = "sha256:281d44d248a0e1791ad0eafdbbd2912ff0de9eec48022a5bfbc332957487ed3f", size = 5255127, upload_time = "2025-04-10T19:46:29.467Z" }, + { url = "https://files.pythonhosted.org/packages/33/16/1ed929d812c758295cac7f9cf3dab5c73439c83d9091f2d91871e648093e/debugpy-1.8.14-cp312-cp312-win_amd64.whl", hash = "sha256:5aa56ef8538893e4502a7d79047fe39b1dae08d9ae257074c6464a7b290b806f", size = 5297249, upload_time = "2025-04-10T19:46:31.538Z" }, + { url = "https://files.pythonhosted.org/packages/4d/e4/395c792b243f2367d84202dc33689aa3d910fb9826a7491ba20fc9e261f5/debugpy-1.8.14-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:329a15d0660ee09fec6786acdb6e0443d595f64f5d096fc3e3ccf09a4259033f", size = 2485676, upload_time = "2025-04-10T19:46:32.96Z" }, + { url = "https://files.pythonhosted.org/packages/ba/f1/6f2ee3f991327ad9e4c2f8b82611a467052a0fb0e247390192580e89f7ff/debugpy-1.8.14-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f920c7f9af409d90f5fd26e313e119d908b0dd2952c2393cd3247a462331f15", size = 4217514, upload_time = "2025-04-10T19:46:34.336Z" }, + { url = "https://files.pythonhosted.org/packages/79/28/b9d146f8f2dc535c236ee09ad3e5ac899adb39d7a19b49f03ac95d216beb/debugpy-1.8.14-cp313-cp313-win32.whl", hash = "sha256:3784ec6e8600c66cbdd4ca2726c72d8ca781e94bce2f396cc606d458146f8f4e", size = 5254756, upload_time = "2025-04-10T19:46:36.199Z" }, + { url = "https://files.pythonhosted.org/packages/e0/62/a7b4a57013eac4ccaef6977966e6bec5c63906dd25a86e35f155952e29a1/debugpy-1.8.14-cp313-cp313-win_amd64.whl", hash = "sha256:684eaf43c95a3ec39a96f1f5195a7ff3d4144e4a18d69bb66beeb1a6de605d6e", size = 5297119, upload_time = "2025-04-10T19:46:38.141Z" }, + { url = "https://files.pythonhosted.org/packages/97/1a/481f33c37ee3ac8040d3d51fc4c4e4e7e61cb08b8bc8971d6032acc2279f/debugpy-1.8.14-py2.py3-none-any.whl", hash = "sha256:5cd9a579d553b6cb9759a7908a41988ee6280b961f24f63336835d9418216a20", size = 5256230, upload_time = "2025-04-10T19:46:54.077Z" }, +] + +[[package]] +name = "decorator" +version = "5.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/43/fa/6d96a0978d19e17b68d634497769987b16c8f4cd0a7a05048bec693caa6b/decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360", size = 56711, upload_time = "2025-02-24T04:41:34.073Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a", size = 9190, upload_time = "2025-02-24T04:41:32.565Z" }, +] + +[[package]] +name = "distlib" +version = "0.3.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0d/dd/1bec4c5ddb504ca60fc29472f3d27e8d4da1257a854e1d96742f15c1d02d/distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403", size = 613923, upload_time = "2024-10-09T18:35:47.551Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/91/a1/cf2472db20f7ce4a6be1253a81cfdf85ad9c7885ffbed7047fb72c24cf87/distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87", size = 468973, upload_time = "2024-10-09T18:35:44.272Z" }, +] + +[[package]] +name = "et-xmlfile" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d3/38/af70d7ab1ae9d4da450eeec1fa3918940a5fafb9055e934af8d6eb0c2313/et_xmlfile-2.0.0.tar.gz", hash = "sha256:dab3f4764309081ce75662649be815c4c9081e88f0837825f90fd28317d4da54", size = 17234, upload_time = "2024-10-25T17:25:40.039Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl", hash = "sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa", size = 18059, upload_time = "2024-10-25T17:25:39.051Z" }, +] + +[[package]] +name = "executing" +version = "2.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/91/50/a9d80c47ff289c611ff12e63f7c5d13942c65d68125160cefd768c73e6e4/executing-2.2.0.tar.gz", hash = "sha256:5d108c028108fe2551d1a7b2e8b713341e2cb4fc0aa7dcf966fa4327a5226755", size = 978693, upload_time = "2025-01-22T15:41:29.403Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7b/8f/c4d9bafc34ad7ad5d8dc16dd1347ee0e507a52c3adb6bfa8887e1c6a26ba/executing-2.2.0-py2.py3-none-any.whl", hash = "sha256:11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa", size = 26702, upload_time = "2025-01-22T15:41:25.929Z" }, +] + +[[package]] +name = "filelock" +version = "3.18.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0a/10/c23352565a6544bdc5353e0b15fc1c563352101f30e24bf500207a54df9a/filelock-3.18.0.tar.gz", hash = "sha256:adbc88eabb99d2fec8c9c1b229b171f18afa655400173ddc653d5d01501fb9f2", size = 18075, upload_time = "2025-03-14T07:11:40.47Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4d/36/2a115987e2d8c300a974597416d9de88f2444426de9571f4b59b2cca3acc/filelock-3.18.0-py3-none-any.whl", hash = "sha256:c401f4f8377c4464e6db25fff06205fd89bdd83b65eb0488ed1b160f780e21de", size = 16215, upload_time = "2025-03-14T07:11:39.145Z" }, +] + +[[package]] +name = "flexcache" +version = "0.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/55/b0/8a21e330561c65653d010ef112bf38f60890051d244ede197ddaa08e50c1/flexcache-0.3.tar.gz", hash = "sha256:18743bd5a0621bfe2cf8d519e4c3bfdf57a269c15d1ced3fb4b64e0ff4600656", size = 15816, upload_time = "2024-03-09T03:21:07.555Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/27/cd/c883e1a7c447479d6e13985565080e3fea88ab5a107c21684c813dba1875/flexcache-0.3-py3-none-any.whl", hash = "sha256:d43c9fea82336af6e0115e308d9d33a185390b8346a017564611f1466dcd2e32", size = 13263, upload_time = "2024-03-09T03:21:05.635Z" }, +] + +[[package]] +name = "flexparser" +version = "0.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/82/99/b4de7e39e8eaf8207ba1a8fa2241dd98b2ba72ae6e16960d8351736d8702/flexparser-0.4.tar.gz", hash = "sha256:266d98905595be2ccc5da964fe0a2c3526fbbffdc45b65b3146d75db992ef6b2", size = 31799, upload_time = "2024-11-07T02:00:56.249Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fe/5e/3be305568fe5f34448807976dc82fc151d76c3e0e03958f34770286278c1/flexparser-0.4-py3-none-any.whl", hash = "sha256:3738b456192dcb3e15620f324c447721023c0293f6af9955b481e91d00179846", size = 27625, upload_time = "2024-11-07T02:00:54.523Z" }, +] + +[[package]] +name = "fonttools" +version = "4.58.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/52/97/5735503e58d3816b0989955ef9b2df07e4c99b246469bd8b3823a14095da/fonttools-4.58.5.tar.gz", hash = "sha256:b2a35b0a19f1837284b3a23dd64fd7761b8911d50911ecd2bdbaf5b2d1b5df9c", size = 3526243, upload_time = "2025-07-03T14:04:47.736Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d6/68/66b498ee66f3e7e92fd68476c2509508082b7f57d68c0cdb4b8573f44331/fonttools-4.58.5-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:c3af3fefaafb570a03051a0d6899b8374dcf8e6a4560e42575843aef33bdbad6", size = 2754751, upload_time = "2025-07-03T14:03:52.976Z" }, + { url = "https://files.pythonhosted.org/packages/f1/1e/edbc14b79290980c3944a1f43098624bc8965f534964aa03d52041f24cb4/fonttools-4.58.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:688137789dbd44e8757ad77b49a771539d8069195ffa9a8bcf18176e90bbd86d", size = 2322342, upload_time = "2025-07-03T14:03:54.957Z" }, + { url = "https://files.pythonhosted.org/packages/c1/d7/3c87cf147185d91c2e946460a5cf68c236427b4a23ab96793ccb7d8017c9/fonttools-4.58.5-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2af65836cf84cd7cb882d0b353bdc73643a497ce23b7414c26499bb8128ca1af", size = 4897011, upload_time = "2025-07-03T14:03:56.829Z" }, + { url = "https://files.pythonhosted.org/packages/a0/d6/fbb44cc85d4195fe54356658bd9f934328b4f74ae14addd90b4b5558b5c9/fonttools-4.58.5-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d2d79cfeb456bf438cb9fb87437634d4d6f228f27572ca5c5355e58472d5519d", size = 4942291, upload_time = "2025-07-03T14:03:59.204Z" }, + { url = "https://files.pythonhosted.org/packages/4d/c8/453f82e21aedf25cdc2ae619c03a73512398cec9bd8b6c3b1c571e0b6632/fonttools-4.58.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0feac9dda9a48a7a342a593f35d50a5cee2dbd27a03a4c4a5192834a4853b204", size = 4886824, upload_time = "2025-07-03T14:04:01.517Z" }, + { url = "https://files.pythonhosted.org/packages/40/54/e9190001b8e22d123f78925b2f508c866d9d18531694b979277ad45d59b0/fonttools-4.58.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:36555230e168511e83ad8637232268649634b8dfff6ef58f46e1ebc057a041ad", size = 5038510, upload_time = "2025-07-03T14:04:03.917Z" }, + { url = "https://files.pythonhosted.org/packages/cf/9c/07cdad4774841a6304aabae939f8cbb9538cb1d8e97f5016b334da98e73a/fonttools-4.58.5-cp312-cp312-win32.whl", hash = "sha256:26ec05319353842d127bd02516eacb25b97ca83966e40e9ad6fab85cab0576f4", size = 2188459, upload_time = "2025-07-03T14:04:06.103Z" }, + { url = "https://files.pythonhosted.org/packages/0e/4d/1eaaad22781d55f49d1b184563842172aeb6a4fe53c029e503be81114314/fonttools-4.58.5-cp312-cp312-win_amd64.whl", hash = "sha256:778a632e538f82c1920579c0c01566a8f83dc24470c96efbf2fbac698907f569", size = 2236565, upload_time = "2025-07-03T14:04:08.27Z" }, + { url = "https://files.pythonhosted.org/packages/3a/ee/764dd8b99891f815241f449345863cfed9e546923d9cef463f37fd1d7168/fonttools-4.58.5-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f4b6f1360da13cecc88c0d60716145b31e1015fbe6a59e32f73a4404e2ea92cf", size = 2745867, upload_time = "2025-07-03T14:04:10.586Z" }, + { url = "https://files.pythonhosted.org/packages/e2/23/8fef484c02fef55e226dfeac4339a015c5480b6a496064058491759ac71e/fonttools-4.58.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4a036822e915692aa2c03e2decc60f49a8190f8111b639c947a4f4e5774d0d7a", size = 2317933, upload_time = "2025-07-03T14:04:12.335Z" }, + { url = "https://files.pythonhosted.org/packages/ab/47/f92b135864fa777e11ad68420bf89446c91a572fe2782745586f8e6aac0c/fonttools-4.58.5-cp313-cp313-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a6d7709fcf4577b0f294ee6327088884ca95046e1eccde87c53bbba4d5008541", size = 4877844, upload_time = "2025-07-03T14:04:14.58Z" }, + { url = "https://files.pythonhosted.org/packages/3e/65/6c1a83511d8ac32411930495645edb3f8dfabebcb78f08cf6009ba2585ec/fonttools-4.58.5-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b9b5099ca99b79d6d67162778b1b1616fc0e1de02c1a178248a0da8d78a33852", size = 4940106, upload_time = "2025-07-03T14:04:16.563Z" }, + { url = "https://files.pythonhosted.org/packages/fa/90/df8eb77d6cf266cbbba01866a1349a3e9121e0a63002cf8d6754e994f755/fonttools-4.58.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3f2c05a8d82a4d15aebfdb3506e90793aea16e0302cec385134dd960647a36c0", size = 4879458, upload_time = "2025-07-03T14:04:19.584Z" }, + { url = "https://files.pythonhosted.org/packages/26/b1/e32f8de51b7afcfea6ad62780da2fa73212c43a32cd8cafcc852189d7949/fonttools-4.58.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:79f0c4b1cc63839b61deeac646d8dba46f8ed40332c2ac1b9997281462c2e4ba", size = 5021917, upload_time = "2025-07-03T14:04:21.736Z" }, + { url = "https://files.pythonhosted.org/packages/89/72/578aa7fe32918dd763c62f447aaed672d665ee10e3eeb1725f4d6493fe96/fonttools-4.58.5-cp313-cp313-win32.whl", hash = "sha256:a1a9a2c462760976882131cbab7d63407813413a2d32cd699e86a1ff22bf7aa5", size = 2186827, upload_time = "2025-07-03T14:04:24.237Z" }, + { url = "https://files.pythonhosted.org/packages/71/a3/21e921b16cb9c029d3308e0cb79c9a937e9ff1fc1ee28c2419f0957b9e7c/fonttools-4.58.5-cp313-cp313-win_amd64.whl", hash = "sha256:bca61b14031a4b7dc87e14bf6ca34c275f8e4b9f7a37bc2fe746b532a924cf30", size = 2235706, upload_time = "2025-07-03T14:04:26.082Z" }, + { url = "https://files.pythonhosted.org/packages/d7/d4/1d85a1996b6188cd2713230e002d79a6f3a289bb17cef600cba385848b72/fonttools-4.58.5-py3-none-any.whl", hash = "sha256:e48a487ed24d9b611c5c4b25db1e50e69e9854ca2670e39a3486ffcd98863ec4", size = 1115318, upload_time = "2025-07-03T14:04:45.378Z" }, +] + +[[package]] +name = "frictionless" +version = "5.18.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "chardet" }, + { name = "humanize" }, + { name = "isodate" }, + { name = "jinja2" }, + { name = "jsonschema" }, + { name = "marko" }, + { name = "petl" }, + { name = "pydantic" }, + { name = "python-dateutil" }, + { name = "python-slugify" }, + { name = "pyyaml" }, + { name = "requests" }, + { name = "rfc3986" }, + { name = "simpleeval" }, + { name = "tabulate" }, + { name = "typer" }, + { name = "typing-extensions" }, + { name = "validators" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/11/d0/c94675a1c1b8c12fd68489e2b4a924f80a2b122199cd986c58a5136197d2/frictionless-5.18.1.tar.gz", hash = "sha256:daeaf55f896eeb52b43e62600466af9528fe0aeeebd28b1b917e13322f370a8b", size = 74372478, upload_time = "2025-03-25T21:32:50.081Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a9/7a/dac76d31584bb4f874ae860490c9465f5b59bd8c110f68fbbb07aba48845/frictionless-5.18.1-py3-none-any.whl", hash = "sha256:3f4c87469a89bdb88e9cc318088553a26f3d14839098f95c183ea01fc89628dd", size = 531615, upload_time = "2025-03-25T21:32:45.534Z" }, +] + +[package.optional-dependencies] +pandas = [ + { name = "pandas" }, + { name = "pyarrow" }, +] + +[[package]] +name = "ghp-import" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "python-dateutil" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d9/29/d40217cbe2f6b1359e00c6c307bb3fc876ba74068cbab3dde77f03ca0dc4/ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343", size = 10943, upload_time = "2022-05-02T15:47:16.11Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619", size = 11034, upload_time = "2022-05-02T15:47:14.552Z" }, +] + +[[package]] +name = "gitdb" +version = "4.0.12" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "smmap" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/72/94/63b0fc47eb32792c7ba1fe1b694daec9a63620db1e313033d18140c2320a/gitdb-4.0.12.tar.gz", hash = "sha256:5ef71f855d191a3326fcfbc0d5da835f26b13fbcba60c32c21091c349ffdb571", size = 394684, upload_time = "2025-01-02T07:20:46.413Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl", hash = "sha256:67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf", size = 62794, upload_time = "2025-01-02T07:20:43.624Z" }, +] + +[[package]] +name = "gitpython" +version = "3.1.44" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "gitdb" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c0/89/37df0b71473153574a5cdef8f242de422a0f5d26d7a9e231e6f169b4ad14/gitpython-3.1.44.tar.gz", hash = "sha256:c87e30b26253bf5418b01b0660f818967f3c503193838337fe5e573331249269", size = 214196, upload_time = "2025-01-02T07:32:43.59Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1d/9a/4114a9057db2f1462d5c8f8390ab7383925fe1ac012eaa42402ad65c2963/GitPython-3.1.44-py3-none-any.whl", hash = "sha256:9e0e10cda9bed1ee64bc9a6de50e7e38a9c9943241cd7f585f6df3ed28011110", size = 207599, upload_time = "2025-01-02T07:32:40.731Z" }, +] + +[[package]] +name = "griffe" +version = "1.7.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a9/3e/5aa9a61f7c3c47b0b52a1d930302992229d191bf4bc76447b324b731510a/griffe-1.7.3.tar.gz", hash = "sha256:52ee893c6a3a968b639ace8015bec9d36594961e156e23315c8e8e51401fa50b", size = 395137, upload_time = "2025-04-23T11:29:09.147Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/58/c6/5c20af38c2a57c15d87f7f38bee77d63c1d2a3689f74fefaf35915dd12b2/griffe-1.7.3-py3-none-any.whl", hash = "sha256:c6b3ee30c2f0f17f30bcdef5068d6ab7a2a4f1b8bf1a3e74b56fffd21e1c5f75", size = 129303, upload_time = "2025-04-23T11:29:07.145Z" }, +] + +[[package]] +name = "hdx-python-country" +version = "3.9.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "hdx-python-utilities" }, + { name = "libhxl" }, + { name = "tenacity" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1d/6b/424edb0f0834cd645a9ea97e2741046d42dbc54407eaef17bcd160f8e58d/hdx_python_country-3.9.5.tar.gz", hash = "sha256:1db9872a083c8bd0632ae13247b48011ab4655265b7967f73eeac88123168879", size = 529170, upload_time = "2025-06-24T22:28:08.996Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/45/9a/19b60f18d26bc674cc5c5e6a55ea0ec1da3713df6a307dfe6881486464f3/hdx_python_country-3.9.5-py3-none-any.whl", hash = "sha256:6e21b3f904564c8ef61835f063d2bcefff11393967bbe261b42ea87fe82f9b7c", size = 55537, upload_time = "2025-06-24T22:28:06.824Z" }, +] + +[[package]] +name = "hdx-python-utilities" +version = "3.8.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "frictionless" }, + { name = "ijson" }, + { name = "jsonlines" }, + { name = "loguru" }, + { name = "openpyxl" }, + { name = "pyphonetics" }, + { name = "python-dateutil" }, + { name = "ratelimit" }, + { name = "requests-file" }, + { name = "ruamel-yaml" }, + { name = "tableschema-to-template" }, + { name = "xlrd" }, + { name = "xlsx2csv" }, + { name = "xlwt" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/de/b812b6b242f47db98ed043b7f3211c81443f0e59959377e97a93915331c0/hdx_python_utilities-3.8.7.tar.gz", hash = "sha256:41212cd5b682777d393ee991b546f1b4326665d981714a829e5483101fd15a60", size = 656009, upload_time = "2025-05-14T02:31:28.578Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/db/38/44f2a0b83e103bb3d47dbc66dfaa4aaa65c34c60fd26d5445fb2bbd3c09a/hdx_python_utilities-3.8.7-py3-none-any.whl", hash = "sha256:47e67810e81a481504b8653c429b31b8c237da594dc27604075c8e79077c8640", size = 60787, upload_time = "2025-05-14T02:31:26.794Z" }, +] + +[[package]] +name = "htmlmin2" +version = "0.1.13" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/be/31/a76f4bfa885f93b8167cb4c85cf32b54d1f64384d0b897d45bc6d19b7b45/htmlmin2-0.1.13-py3-none-any.whl", hash = "sha256:75609f2a42e64f7ce57dbff28a39890363bde9e7e5885db633317efbdf8c79a2", size = 34486, upload_time = "2023-03-14T21:28:30.388Z" }, +] + +[[package]] +name = "humanize" +version = "4.12.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/22/d1/bbc4d251187a43f69844f7fd8941426549bbe4723e8ff0a7441796b0789f/humanize-4.12.3.tar.gz", hash = "sha256:8430be3a615106fdfceb0b2c1b41c4c98c6b0fc5cc59663a5539b111dd325fb0", size = 80514, upload_time = "2025-04-30T11:51:07.98Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/1e/62a2ec3104394a2975a2629eec89276ede9dbe717092f6966fcf963e1bf0/humanize-4.12.3-py3-none-any.whl", hash = "sha256:2cbf6370af06568fa6d2da77c86edb7886f3160ecd19ee1ffef07979efc597f6", size = 128487, upload_time = "2025-04-30T11:51:06.468Z" }, +] + +[[package]] +name = "identify" +version = "2.6.12" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/88/d193a27416618628a5eea64e3223acd800b40749a96ffb322a9b55a49ed1/identify-2.6.12.tar.gz", hash = "sha256:d8de45749f1efb108badef65ee8386f0f7bb19a7f26185f74de6367bffbaf0e6", size = 99254, upload_time = "2025-05-23T20:37:53.3Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7a/cd/18f8da995b658420625f7ef13f037be53ae04ec5ad33f9b718240dcfd48c/identify-2.6.12-py2.py3-none-any.whl", hash = "sha256:ad9672d5a72e0d2ff7c5c8809b62dfa60458626352fb0eb7b55e69bdc45334a2", size = 99145, upload_time = "2025-05-23T20:37:51.495Z" }, +] + +[[package]] +name = "idna" +version = "3.10" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490, upload_time = "2024-09-15T18:07:39.745Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442, upload_time = "2024-09-15T18:07:37.964Z" }, +] + +[[package]] +name = "ijson" +version = "3.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a3/4f/1cfeada63f5fce87536651268ddf5cca79b8b4bbb457aee4e45777964a0a/ijson-3.4.0.tar.gz", hash = "sha256:5f74dcbad9d592c428d3ca3957f7115a42689ee7ee941458860900236ae9bb13", size = 65782, upload_time = "2025-05-08T02:37:20.135Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f8/ec/317ee5b2d13e50448833ead3aa906659a32b376191f6abc2a7c6112d2b27/ijson-3.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:956b148f88259a80a9027ffbe2d91705fae0c004fbfba3e5a24028fbe72311a9", size = 87212, upload_time = "2025-05-08T02:35:51.835Z" }, + { url = "https://files.pythonhosted.org/packages/f8/43/b06c96ced30cacecc5d518f89b0fd1c98c294a30ff88848b70ed7b7f72a1/ijson-3.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:06b89960f5c721106394c7fba5760b3f67c515b8eb7d80f612388f5eca2f4621", size = 59175, upload_time = "2025-05-08T02:35:52.988Z" }, + { url = "https://files.pythonhosted.org/packages/e9/df/b4aeafb7ecde463130840ee9be36130823ec94a00525049bf700883378b8/ijson-3.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9a0bb591cf250dd7e9dfab69d634745a7f3272d31cfe879f9156e0a081fd97ee", size = 59011, upload_time = "2025-05-08T02:35:54.394Z" }, + { url = "https://files.pythonhosted.org/packages/e3/7c/a80b8e361641609507f62022089626d4b8067f0826f51e1c09e4ba86eba8/ijson-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:72e92de999977f4c6b660ffcf2b8d59604ccd531edcbfde05b642baf283e0de8", size = 146094, upload_time = "2025-05-08T02:35:55.601Z" }, + { url = "https://files.pythonhosted.org/packages/01/44/fa416347b9a802e3646c6ff377fc3278bd7d6106e17beb339514b6a3184e/ijson-3.4.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e9602157a5b869d44b6896e64f502c712a312fcde044c2e586fccb85d3e316e", size = 137903, upload_time = "2025-05-08T02:35:56.814Z" }, + { url = "https://files.pythonhosted.org/packages/24/c6/41a9ad4d42df50ff6e70fdce79b034f09b914802737ebbdc141153d8d791/ijson-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e83660edb931a425b7ff662eb49db1f10d30ca6d4d350e5630edbed098bc01", size = 148339, upload_time = "2025-05-08T02:35:58.595Z" }, + { url = "https://files.pythonhosted.org/packages/5f/6f/7d01efda415b8502dce67e067ed9e8a124f53e763002c02207e542e1a2f1/ijson-3.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:49bf8eac1c7b7913073865a859c215488461f7591b4fa6a33c14b51cb73659d0", size = 149383, upload_time = "2025-05-08T02:36:00.197Z" }, + { url = "https://files.pythonhosted.org/packages/95/6c/0d67024b9ecb57916c5e5ab0350251c9fe2f86dc9c8ca2b605c194bdad6a/ijson-3.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:160b09273cb42019f1811469508b0a057d19f26434d44752bde6f281da6d3f32", size = 141580, upload_time = "2025-05-08T02:36:01.998Z" }, + { url = "https://files.pythonhosted.org/packages/06/43/e10edcc1c6a3b619294de835e7678bfb3a1b8a75955f3689fd66a1e9e7b4/ijson-3.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2019ff4e6f354aa00c76c8591bd450899111c61f2354ad55cc127e2ce2492c44", size = 150280, upload_time = "2025-05-08T02:36:03.926Z" }, + { url = "https://files.pythonhosted.org/packages/07/84/1cbeee8e8190a1ebe6926569a92cf1fa80ddb380c129beb6f86559e1bb24/ijson-3.4.0-cp312-cp312-win32.whl", hash = "sha256:931c007bf6bb8330705429989b2deed6838c22b63358a330bf362b6e458ba0bf", size = 51512, upload_time = "2025-05-08T02:36:05.595Z" }, + { url = "https://files.pythonhosted.org/packages/66/13/530802bc391c95be6fe9f96e9aa427d94067e7c0b7da7a9092344dc44c4b/ijson-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:71523f2b64cb856a820223e94d23e88369f193017ecc789bb4de198cc9d349eb", size = 54081, upload_time = "2025-05-08T02:36:07.099Z" }, + { url = "https://files.pythonhosted.org/packages/77/b3/b1d2eb2745e5204ec7a25365a6deb7868576214feb5e109bce368fb692c9/ijson-3.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e8d96f88d75196a61c9d9443de2b72c2d4a7ba9456ff117b57ae3bba23a54256", size = 87216, upload_time = "2025-05-08T02:36:08.414Z" }, + { url = "https://files.pythonhosted.org/packages/b1/cd/cd6d340087617f8cc9bedbb21d974542fe2f160ed0126b8288d3499a469b/ijson-3.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c45906ce2c1d3b62f15645476fc3a6ca279549127f01662a39ca5ed334a00cf9", size = 59170, upload_time = "2025-05-08T02:36:09.604Z" }, + { url = "https://files.pythonhosted.org/packages/3e/4d/32d3a9903b488d3306e3c8288f6ee4217d2eea82728261db03a1045eb5d1/ijson-3.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4ab4bc2119b35c4363ea49f29563612237cae9413d2fbe54b223be098b97bc9e", size = 59013, upload_time = "2025-05-08T02:36:10.696Z" }, + { url = "https://files.pythonhosted.org/packages/d5/c8/db15465ab4b0b477cee5964c8bfc94bf8c45af8e27a23e1ad78d1926e587/ijson-3.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97b0a9b5a15e61dfb1f14921ea4e0dba39f3a650df6d8f444ddbc2b19b479ff1", size = 146564, upload_time = "2025-05-08T02:36:11.916Z" }, + { url = "https://files.pythonhosted.org/packages/c4/d8/0755545bc122473a9a434ab90e0f378780e603d75495b1ca3872de757873/ijson-3.4.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e3047bb994dabedf11de11076ed1147a307924b6e5e2df6784fb2599c4ad8c60", size = 137917, upload_time = "2025-05-08T02:36:13.532Z" }, + { url = "https://files.pythonhosted.org/packages/d0/c6/aeb89c8939ebe3f534af26c8c88000c5e870dbb6ae33644c21a4531f87d2/ijson-3.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68c83161b052e9f5dc8191acbc862bb1e63f8a35344cb5cd0db1afd3afd487a6", size = 148897, upload_time = "2025-05-08T02:36:14.813Z" }, + { url = "https://files.pythonhosted.org/packages/be/0e/7ef6e9b372106f2682a4a32b3c65bf86bb471a1670e4dac242faee4a7d3f/ijson-3.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1eebd9b6c20eb1dffde0ae1f0fbb4aeacec2eb7b89adb5c7c0449fc9fd742760", size = 149711, upload_time = "2025-05-08T02:36:16.476Z" }, + { url = "https://files.pythonhosted.org/packages/d1/5d/9841c3ed75bcdabf19b3202de5f862a9c9c86ce5c7c9d95fa32347fdbf5f/ijson-3.4.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:13fb6d5c35192c541421f3ee81239d91fc15a8d8f26c869250f941f4b346a86c", size = 141691, upload_time = "2025-05-08T02:36:18.044Z" }, + { url = "https://files.pythonhosted.org/packages/d5/d2/ce74e17218dba292e9be10a44ed0c75439f7958cdd263adb0b5b92d012d5/ijson-3.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:28b7196ff7b37c4897c547a28fa4876919696739fc91c1f347651c9736877c69", size = 150738, upload_time = "2025-05-08T02:36:19.483Z" }, + { url = "https://files.pythonhosted.org/packages/4e/43/dcc480f94453b1075c9911d4755b823f3ace275761bb37b40139f22109ca/ijson-3.4.0-cp313-cp313-win32.whl", hash = "sha256:3c2691d2da42629522140f77b99587d6f5010440d58d36616f33bc7bdc830cc3", size = 51512, upload_time = "2025-05-08T02:36:20.99Z" }, + { url = "https://files.pythonhosted.org/packages/35/dd/d8c5f15efd85ba51e6e11451ebe23d779361a9ec0d192064c2a8c3cdfcb8/ijson-3.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:c4554718c275a044c47eb3874f78f2c939f300215d9031e785a6711cc51b83fc", size = 54074, upload_time = "2025-05-08T02:36:22.075Z" }, + { url = "https://files.pythonhosted.org/packages/79/73/24ad8cd106203419c4d22bed627e02e281d66b83e91bc206a371893d0486/ijson-3.4.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:915a65e3f3c0eee2ea937bc62aaedb6c14cc1e8f0bb9f3f4fb5a9e2bbfa4b480", size = 91694, upload_time = "2025-05-08T02:36:23.289Z" }, + { url = "https://files.pythonhosted.org/packages/17/2d/f7f680984bcb7324a46a4c2df3bd73cf70faef0acfeb85a3f811abdfd590/ijson-3.4.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:afbe9748707684b6c5adc295c4fdcf27765b300aec4d484e14a13dca4e5c0afa", size = 61390, upload_time = "2025-05-08T02:36:24.42Z" }, + { url = "https://files.pythonhosted.org/packages/09/a1/f3ca7bab86f95bdb82494739e71d271410dfefce4590785d511669127145/ijson-3.4.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:d823f8f321b4d8d5fa020d0a84f089fec5d52b7c0762430476d9f8bf95bbc1a9", size = 61140, upload_time = "2025-05-08T02:36:26.708Z" }, + { url = "https://files.pythonhosted.org/packages/51/79/dd340df3d4fc7771c95df29997956b92ed0570fe7b616d1792fea9ad93f2/ijson-3.4.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8a0a2c54f3becf76881188beefd98b484b1d3bd005769a740d5b433b089fa23", size = 214739, upload_time = "2025-05-08T02:36:27.973Z" }, + { url = "https://files.pythonhosted.org/packages/59/f0/85380b7f51d1f5fb7065d76a7b623e02feca920cc678d329b2eccc0011e0/ijson-3.4.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ced19a83ab09afa16257a0b15bc1aa888dbc555cb754be09d375c7f8d41051f2", size = 198338, upload_time = "2025-05-08T02:36:29.496Z" }, + { url = "https://files.pythonhosted.org/packages/a5/cd/313264cf2ec42e0f01d198c49deb7b6fadeb793b3685e20e738eb6b3fa13/ijson-3.4.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8100f9885eff1f38d35cef80ef759a1bbf5fc946349afa681bd7d0e681b7f1a0", size = 207515, upload_time = "2025-05-08T02:36:30.981Z" }, + { url = "https://files.pythonhosted.org/packages/12/94/bf14457aa87ea32641f2db577c9188ef4e4ae373478afef422b31fc7f309/ijson-3.4.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d7bcc3f7f21b0f703031ecd15209b1284ea51b2a329d66074b5261de3916c1eb", size = 210081, upload_time = "2025-05-08T02:36:32.403Z" }, + { url = "https://files.pythonhosted.org/packages/7d/b4/eaee39e290e40e52d665db9bd1492cfdce86bd1e47948e0440db209c6023/ijson-3.4.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:2dcb190227b09dd171bdcbfe4720fddd574933c66314818dfb3960c8a6246a77", size = 199253, upload_time = "2025-05-08T02:36:33.861Z" }, + { url = "https://files.pythonhosted.org/packages/c5/9c/e09c7b9ac720a703ab115b221b819f149ed54c974edfff623c1e925e57da/ijson-3.4.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:eda4cfb1d49c6073a901735aaa62e39cb7ab47f3ad7bb184862562f776f1fa8a", size = 203816, upload_time = "2025-05-08T02:36:35.348Z" }, + { url = "https://files.pythonhosted.org/packages/7c/14/acd304f412e32d16a2c12182b9d78206bb0ae35354d35664f45db05c1b3b/ijson-3.4.0-cp313-cp313t-win32.whl", hash = "sha256:0772638efa1f3b72b51736833404f1cbd2f5beeb9c1a3d392e7d385b9160cba7", size = 53760, upload_time = "2025-05-08T02:36:36.608Z" }, + { url = "https://files.pythonhosted.org/packages/2f/24/93dd0a467191590a5ed1fc2b35842bca9d09900d001e00b0b497c0208ef6/ijson-3.4.0-cp313-cp313t-win_amd64.whl", hash = "sha256:3d8a0d67f36e4fb97c61a724456ef0791504b16ce6f74917a31c2e92309bbeb9", size = 56948, upload_time = "2025-05-08T02:36:37.849Z" }, +] + +[[package]] +name = "imf-reader" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "beautifulsoup4" }, + { name = "chardet" }, + { name = "pandas" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/af/45/24521d229aec5c058d998510794567788bc7b1b764dfaa02fb8e0aeda4b7/imf_reader-1.3.0.tar.gz", hash = "sha256:3f3130dd793a112fdd5913a7c7b733847a5a07fd70dee14d57624ae4e021a141", size = 12990, upload_time = "2025-02-06T09:16:10.723Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fd/5b/3a063116950f2aa2b450120e78162bb5b87098dde3b75ae90210c6f2c099/imf_reader-1.3.0-py3-none-any.whl", hash = "sha256:3515c6644dfef44d5fda89f5bb3786b4f83da20f49184911f0df2386782106f1", size = 16520, upload_time = "2025-02-06T09:16:09.042Z" }, +] + +[[package]] +name = "iniconfig" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f2/97/ebf4da567aa6827c909642694d71c9fcf53e5b504f2d96afea02718862f3/iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", size = 4793, upload_time = "2025-03-19T20:09:59.721Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050, upload_time = "2025-03-19T20:10:01.071Z" }, +] + +[[package]] +name = "ipykernel" +version = "6.29.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "appnope", marker = "sys_platform == 'darwin'" }, + { name = "comm" }, + { name = "debugpy" }, + { name = "ipython" }, + { name = "jupyter-client" }, + { name = "jupyter-core" }, + { name = "matplotlib-inline" }, + { name = "nest-asyncio" }, + { name = "packaging" }, + { name = "psutil" }, + { name = "pyzmq" }, + { name = "tornado" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e9/5c/67594cb0c7055dc50814b21731c22a601101ea3b1b50a9a1b090e11f5d0f/ipykernel-6.29.5.tar.gz", hash = "sha256:f093a22c4a40f8828f8e330a9c297cb93dcab13bd9678ded6de8e5cf81c56215", size = 163367, upload_time = "2024-07-01T14:07:22.543Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/94/5c/368ae6c01c7628438358e6d337c19b05425727fbb221d2a3c4303c372f42/ipykernel-6.29.5-py3-none-any.whl", hash = "sha256:afdb66ba5aa354b09b91379bac28ae4afebbb30e8b39510c9690afb7a10421b5", size = 117173, upload_time = "2024-07-01T14:07:19.603Z" }, +] + +[[package]] +name = "ipython" +version = "9.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "decorator" }, + { name = "ipython-pygments-lexers" }, + { name = "jedi" }, + { name = "matplotlib-inline" }, + { name = "pexpect", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "prompt-toolkit" }, + { name = "pygments" }, + { name = "stack-data" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/54/80/406f9e3bde1c1fd9bf5a0be9d090f8ae623e401b7670d8f6fdf2ab679891/ipython-9.4.0.tar.gz", hash = "sha256:c033c6d4e7914c3d9768aabe76bbe87ba1dc66a92a05db6bfa1125d81f2ee270", size = 4385338, upload_time = "2025-07-01T11:11:30.606Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/63/f8/0031ee2b906a15a33d6bfc12dd09c3dfa966b3cb5b284ecfb7549e6ac3c4/ipython-9.4.0-py3-none-any.whl", hash = "sha256:25850f025a446d9b359e8d296ba175a36aedd32e83ca9b5060430fe16801f066", size = 611021, upload_time = "2025-07-01T11:11:27.85Z" }, +] + +[[package]] +name = "ipython-pygments-lexers" +version = "1.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ef/4c/5dd1d8af08107f88c7f741ead7a40854b8ac24ddf9ae850afbcf698aa552/ipython_pygments_lexers-1.1.1.tar.gz", hash = "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81", size = 8393, upload_time = "2025-01-17T11:24:34.505Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl", hash = "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c", size = 8074, upload_time = "2025-01-17T11:24:33.271Z" }, +] + +[[package]] +name = "isodate" +version = "0.7.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/54/4d/e940025e2ce31a8ce1202635910747e5a87cc3a6a6bb2d00973375014749/isodate-0.7.2.tar.gz", hash = "sha256:4cd1aa0f43ca76f4a6c6c0292a85f40b35ec2e43e315b59f06e6d32171a953e6", size = 29705, upload_time = "2024-10-08T23:04:11.5Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl", hash = "sha256:28009937d8031054830160fce6d409ed342816b543597cece116d966c6d99e15", size = 22320, upload_time = "2024-10-08T23:04:09.501Z" }, +] + +[[package]] +name = "jedi" +version = "0.19.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "parso" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/72/3a/79a912fbd4d8dd6fbb02bf69afd3bb72cf0c729bb3063c6f4498603db17a/jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0", size = 1231287, upload_time = "2024-11-11T01:41:42.873Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9", size = 1572278, upload_time = "2024-11-11T01:41:40.175Z" }, +] + +[[package]] +name = "jinja2" +version = "3.1.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload_time = "2025-03-05T20:05:02.478Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload_time = "2025-03-05T20:05:00.369Z" }, +] + +[[package]] +name = "joblib" +version = "1.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/dc/fe/0f5a938c54105553436dbff7a61dc4fed4b1b2c98852f8833beaf4d5968f/joblib-1.5.1.tar.gz", hash = "sha256:f4f86e351f39fe3d0d32a9f2c3d8af1ee4cec285aafcb27003dda5205576b444", size = 330475, upload_time = "2025-05-23T12:04:37.097Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7d/4f/1195bbac8e0c2acc5f740661631d8d750dc38d4a32b23ee5df3cde6f4e0d/joblib-1.5.1-py3-none-any.whl", hash = "sha256:4719a31f054c7d766948dcd83e9613686b27114f190f717cec7eaa2084f8a74a", size = 307746, upload_time = "2025-05-23T12:04:35.124Z" }, +] + +[[package]] +name = "jsmin" +version = "3.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5e/73/e01e4c5e11ad0494f4407a3f623ad4d87714909f50b17a06ed121034ff6e/jsmin-3.0.1.tar.gz", hash = "sha256:c0959a121ef94542e807a674142606f7e90214a2b3d1eb17300244bbb5cc2bfc", size = 13925, upload_time = "2022-01-16T20:35:59.13Z" } + +[[package]] +name = "jsonlines" +version = "4.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/35/87/bcda8e46c88d0e34cad2f09ee2d0c7f5957bccdb9791b0b934ec84d84be4/jsonlines-4.0.0.tar.gz", hash = "sha256:0c6d2c09117550c089995247f605ae4cf77dd1533041d366351f6f298822ea74", size = 11359, upload_time = "2023-09-01T12:34:44.187Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f8/62/d9ba6323b9202dd2fe166beab8a86d29465c41a0288cbe229fac60c1ab8d/jsonlines-4.0.0-py3-none-any.whl", hash = "sha256:185b334ff2ca5a91362993f42e83588a360cf95ce4b71a73548502bda52a7c55", size = 8701, upload_time = "2023-09-01T12:34:42.563Z" }, +] + +[[package]] +name = "jsonpath-ng" +version = "1.7.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ply" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6d/86/08646239a313f895186ff0a4573452038eed8c86f54380b3ebac34d32fb2/jsonpath-ng-1.7.0.tar.gz", hash = "sha256:f6f5f7fd4e5ff79c785f1573b394043b39849fb2bb47bcead935d12b00beab3c", size = 37838, upload_time = "2024-10-11T15:41:42.404Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/35/5a/73ecb3d82f8615f32ccdadeb9356726d6cae3a4bbc840b437ceb95708063/jsonpath_ng-1.7.0-py3-none-any.whl", hash = "sha256:f3d7f9e848cba1b6da28c55b1c26ff915dc9e0b1ba7e752a53d6da8d5cbd00b6", size = 30105, upload_time = "2024-11-20T17:58:30.418Z" }, +] + +[[package]] +name = "jsonschema" +version = "4.24.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "jsonschema-specifications" }, + { name = "referencing" }, + { name = "rpds-py" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bf/d3/1cf5326b923a53515d8f3a2cd442e6d7e94fcc444716e879ea70a0ce3177/jsonschema-4.24.0.tar.gz", hash = "sha256:0b4e8069eb12aedfa881333004bccaec24ecef5a8a6a4b6df142b2cc9599d196", size = 353480, upload_time = "2025-05-26T18:48:10.459Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a2/3d/023389198f69c722d039351050738d6755376c8fd343e91dc493ea485905/jsonschema-4.24.0-py3-none-any.whl", hash = "sha256:a462455f19f5faf404a7902952b6f0e3ce868f3ee09a359b05eca6673bd8412d", size = 88709, upload_time = "2025-05-26T18:48:08.417Z" }, +] + +[[package]] +name = "jsonschema-specifications" +version = "2025.4.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "referencing" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bf/ce/46fbd9c8119cfc3581ee5643ea49464d168028cfb5caff5fc0596d0cf914/jsonschema_specifications-2025.4.1.tar.gz", hash = "sha256:630159c9f4dbea161a6a2205c3011cc4f18ff381b189fff48bb39b9bf26ae608", size = 15513, upload_time = "2025-04-23T12:34:07.418Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/01/0e/b27cdbaccf30b890c40ed1da9fd4a3593a5cf94dae54fb34f8a4b74fcd3f/jsonschema_specifications-2025.4.1-py3-none-any.whl", hash = "sha256:4653bffbd6584f7de83a67e0d620ef16900b390ddc7939d56684d6c81e33f1af", size = 18437, upload_time = "2025-04-23T12:34:05.422Z" }, +] + +[[package]] +name = "jupyter-client" +version = "8.6.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jupyter-core" }, + { name = "python-dateutil" }, + { name = "pyzmq" }, + { name = "tornado" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/71/22/bf9f12fdaeae18019a468b68952a60fe6dbab5d67cd2a103cac7659b41ca/jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419", size = 342019, upload_time = "2024-09-17T10:44:17.613Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/11/85/b0394e0b6fcccd2c1eeefc230978a6f8cb0c5df1e4cd3e7625735a0d7d1e/jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f", size = 106105, upload_time = "2024-09-17T10:44:15.218Z" }, +] + +[[package]] +name = "jupyter-core" +version = "5.8.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "platformdirs" }, + { name = "pywin32", marker = "platform_python_implementation != 'PyPy' and sys_platform == 'win32'" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/99/1b/72906d554acfeb588332eaaa6f61577705e9ec752ddb486f302dafa292d9/jupyter_core-5.8.1.tar.gz", hash = "sha256:0a5f9706f70e64786b75acba995988915ebd4601c8a52e534a40b51c95f59941", size = 88923, upload_time = "2025-05-27T07:38:16.655Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2f/57/6bffd4b20b88da3800c5d691e0337761576ee688eb01299eae865689d2df/jupyter_core-5.8.1-py3-none-any.whl", hash = "sha256:c28d268fc90fb53f1338ded2eb410704c5449a358406e8a948b75706e24863d0", size = 28880, upload_time = "2025-05-27T07:38:15.137Z" }, +] + +[[package]] +name = "kiwisolver" +version = "1.4.8" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/82/59/7c91426a8ac292e1cdd53a63b6d9439abd573c875c3f92c146767dd33faf/kiwisolver-1.4.8.tar.gz", hash = "sha256:23d5f023bdc8c7e54eb65f03ca5d5bb25b601eac4d7f1a042888a1f45237987e", size = 97538, upload_time = "2024-12-24T18:30:51.519Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fc/aa/cea685c4ab647f349c3bc92d2daf7ae34c8e8cf405a6dcd3a497f58a2ac3/kiwisolver-1.4.8-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d6af5e8815fd02997cb6ad9bbed0ee1e60014438ee1a5c2444c96f87b8843502", size = 124152, upload_time = "2024-12-24T18:29:16.85Z" }, + { url = "https://files.pythonhosted.org/packages/c5/0b/8db6d2e2452d60d5ebc4ce4b204feeb16176a851fd42462f66ade6808084/kiwisolver-1.4.8-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:bade438f86e21d91e0cf5dd7c0ed00cda0f77c8c1616bd83f9fc157fa6760d31", size = 66555, upload_time = "2024-12-24T18:29:19.146Z" }, + { url = "https://files.pythonhosted.org/packages/60/26/d6a0db6785dd35d3ba5bf2b2df0aedc5af089962c6eb2cbf67a15b81369e/kiwisolver-1.4.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b83dc6769ddbc57613280118fb4ce3cd08899cc3369f7d0e0fab518a7cf37fdb", size = 65067, upload_time = "2024-12-24T18:29:20.096Z" }, + { url = "https://files.pythonhosted.org/packages/c9/ed/1d97f7e3561e09757a196231edccc1bcf59d55ddccefa2afc9c615abd8e0/kiwisolver-1.4.8-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:111793b232842991be367ed828076b03d96202c19221b5ebab421ce8bcad016f", size = 1378443, upload_time = "2024-12-24T18:29:22.843Z" }, + { url = "https://files.pythonhosted.org/packages/29/61/39d30b99954e6b46f760e6289c12fede2ab96a254c443639052d1b573fbc/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:257af1622860e51b1a9d0ce387bf5c2c4f36a90594cb9514f55b074bcc787cfc", size = 1472728, upload_time = "2024-12-24T18:29:24.463Z" }, + { url = "https://files.pythonhosted.org/packages/0c/3e/804163b932f7603ef256e4a715e5843a9600802bb23a68b4e08c8c0ff61d/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:69b5637c3f316cab1ec1c9a12b8c5f4750a4c4b71af9157645bf32830e39c03a", size = 1478388, upload_time = "2024-12-24T18:29:25.776Z" }, + { url = "https://files.pythonhosted.org/packages/8a/9e/60eaa75169a154700be74f875a4d9961b11ba048bef315fbe89cb6999056/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:782bb86f245ec18009890e7cb8d13a5ef54dcf2ebe18ed65f795e635a96a1c6a", size = 1413849, upload_time = "2024-12-24T18:29:27.202Z" }, + { url = "https://files.pythonhosted.org/packages/bc/b3/9458adb9472e61a998c8c4d95cfdfec91c73c53a375b30b1428310f923e4/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc978a80a0db3a66d25767b03688f1147a69e6237175c0f4ffffaaedf744055a", size = 1475533, upload_time = "2024-12-24T18:29:28.638Z" }, + { url = "https://files.pythonhosted.org/packages/e4/7a/0a42d9571e35798de80aef4bb43a9b672aa7f8e58643d7bd1950398ffb0a/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:36dbbfd34838500a31f52c9786990d00150860e46cd5041386f217101350f0d3", size = 2268898, upload_time = "2024-12-24T18:29:30.368Z" }, + { url = "https://files.pythonhosted.org/packages/d9/07/1255dc8d80271400126ed8db35a1795b1a2c098ac3a72645075d06fe5c5d/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:eaa973f1e05131de5ff3569bbba7f5fd07ea0595d3870ed4a526d486fe57fa1b", size = 2425605, upload_time = "2024-12-24T18:29:33.151Z" }, + { url = "https://files.pythonhosted.org/packages/84/df/5a3b4cf13780ef6f6942df67b138b03b7e79e9f1f08f57c49957d5867f6e/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:a66f60f8d0c87ab7f59b6fb80e642ebb29fec354a4dfad687ca4092ae69d04f4", size = 2375801, upload_time = "2024-12-24T18:29:34.584Z" }, + { url = "https://files.pythonhosted.org/packages/8f/10/2348d068e8b0f635c8c86892788dac7a6b5c0cb12356620ab575775aad89/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:858416b7fb777a53f0c59ca08190ce24e9abbd3cffa18886a5781b8e3e26f65d", size = 2520077, upload_time = "2024-12-24T18:29:36.138Z" }, + { url = "https://files.pythonhosted.org/packages/32/d8/014b89fee5d4dce157d814303b0fce4d31385a2af4c41fed194b173b81ac/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:085940635c62697391baafaaeabdf3dd7a6c3643577dde337f4d66eba021b2b8", size = 2338410, upload_time = "2024-12-24T18:29:39.991Z" }, + { url = "https://files.pythonhosted.org/packages/bd/72/dfff0cc97f2a0776e1c9eb5bef1ddfd45f46246c6533b0191887a427bca5/kiwisolver-1.4.8-cp312-cp312-win_amd64.whl", hash = "sha256:01c3d31902c7db5fb6182832713d3b4122ad9317c2c5877d0539227d96bb2e50", size = 71853, upload_time = "2024-12-24T18:29:42.006Z" }, + { url = "https://files.pythonhosted.org/packages/dc/85/220d13d914485c0948a00f0b9eb419efaf6da81b7d72e88ce2391f7aed8d/kiwisolver-1.4.8-cp312-cp312-win_arm64.whl", hash = "sha256:a3c44cb68861de93f0c4a8175fbaa691f0aa22550c331fefef02b618a9dcb476", size = 65424, upload_time = "2024-12-24T18:29:44.38Z" }, + { url = "https://files.pythonhosted.org/packages/79/b3/e62464a652f4f8cd9006e13d07abad844a47df1e6537f73ddfbf1bc997ec/kiwisolver-1.4.8-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:1c8ceb754339793c24aee1c9fb2485b5b1f5bb1c2c214ff13368431e51fc9a09", size = 124156, upload_time = "2024-12-24T18:29:45.368Z" }, + { url = "https://files.pythonhosted.org/packages/8d/2d/f13d06998b546a2ad4f48607a146e045bbe48030774de29f90bdc573df15/kiwisolver-1.4.8-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:54a62808ac74b5e55a04a408cda6156f986cefbcf0ada13572696b507cc92fa1", size = 66555, upload_time = "2024-12-24T18:29:46.37Z" }, + { url = "https://files.pythonhosted.org/packages/59/e3/b8bd14b0a54998a9fd1e8da591c60998dc003618cb19a3f94cb233ec1511/kiwisolver-1.4.8-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:68269e60ee4929893aad82666821aaacbd455284124817af45c11e50a4b42e3c", size = 65071, upload_time = "2024-12-24T18:29:47.333Z" }, + { url = "https://files.pythonhosted.org/packages/f0/1c/6c86f6d85ffe4d0ce04228d976f00674f1df5dc893bf2dd4f1928748f187/kiwisolver-1.4.8-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34d142fba9c464bc3bbfeff15c96eab0e7310343d6aefb62a79d51421fcc5f1b", size = 1378053, upload_time = "2024-12-24T18:29:49.636Z" }, + { url = "https://files.pythonhosted.org/packages/4e/b9/1c6e9f6dcb103ac5cf87cb695845f5fa71379021500153566d8a8a9fc291/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ddc373e0eef45b59197de815b1b28ef89ae3955e7722cc9710fb91cd77b7f47", size = 1472278, upload_time = "2024-12-24T18:29:51.164Z" }, + { url = "https://files.pythonhosted.org/packages/ee/81/aca1eb176de671f8bda479b11acdc42c132b61a2ac861c883907dde6debb/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:77e6f57a20b9bd4e1e2cedda4d0b986ebd0216236f0106e55c28aea3d3d69b16", size = 1478139, upload_time = "2024-12-24T18:29:52.594Z" }, + { url = "https://files.pythonhosted.org/packages/49/f4/e081522473671c97b2687d380e9e4c26f748a86363ce5af48b4a28e48d06/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08e77738ed7538f036cd1170cbed942ef749137b1311fa2bbe2a7fda2f6bf3cc", size = 1413517, upload_time = "2024-12-24T18:29:53.941Z" }, + { url = "https://files.pythonhosted.org/packages/8f/e9/6a7d025d8da8c4931522922cd706105aa32b3291d1add8c5427cdcd66e63/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5ce1e481a74b44dd5e92ff03ea0cb371ae7a0268318e202be06c8f04f4f1246", size = 1474952, upload_time = "2024-12-24T18:29:56.523Z" }, + { url = "https://files.pythonhosted.org/packages/82/13/13fa685ae167bee5d94b415991c4fc7bb0a1b6ebea6e753a87044b209678/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:fc2ace710ba7c1dfd1a3b42530b62b9ceed115f19a1656adefce7b1782a37794", size = 2269132, upload_time = "2024-12-24T18:29:57.989Z" }, + { url = "https://files.pythonhosted.org/packages/ef/92/bb7c9395489b99a6cb41d502d3686bac692586db2045adc19e45ee64ed23/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:3452046c37c7692bd52b0e752b87954ef86ee2224e624ef7ce6cb21e8c41cc1b", size = 2425997, upload_time = "2024-12-24T18:29:59.393Z" }, + { url = "https://files.pythonhosted.org/packages/ed/12/87f0e9271e2b63d35d0d8524954145837dd1a6c15b62a2d8c1ebe0f182b4/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:7e9a60b50fe8b2ec6f448fe8d81b07e40141bfced7f896309df271a0b92f80f3", size = 2376060, upload_time = "2024-12-24T18:30:01.338Z" }, + { url = "https://files.pythonhosted.org/packages/02/6e/c8af39288edbce8bf0fa35dee427b082758a4b71e9c91ef18fa667782138/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:918139571133f366e8362fa4a297aeba86c7816b7ecf0bc79168080e2bd79957", size = 2520471, upload_time = "2024-12-24T18:30:04.574Z" }, + { url = "https://files.pythonhosted.org/packages/13/78/df381bc7b26e535c91469f77f16adcd073beb3e2dd25042efd064af82323/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e063ef9f89885a1d68dd8b2e18f5ead48653176d10a0e324e3b0030e3a69adeb", size = 2338793, upload_time = "2024-12-24T18:30:06.25Z" }, + { url = "https://files.pythonhosted.org/packages/d0/dc/c1abe38c37c071d0fc71c9a474fd0b9ede05d42f5a458d584619cfd2371a/kiwisolver-1.4.8-cp313-cp313-win_amd64.whl", hash = "sha256:a17b7c4f5b2c51bb68ed379defd608a03954a1845dfed7cc0117f1cc8a9b7fd2", size = 71855, upload_time = "2024-12-24T18:30:07.535Z" }, + { url = "https://files.pythonhosted.org/packages/a0/b6/21529d595b126ac298fdd90b705d87d4c5693de60023e0efcb4f387ed99e/kiwisolver-1.4.8-cp313-cp313-win_arm64.whl", hash = "sha256:3cd3bc628b25f74aedc6d374d5babf0166a92ff1317f46267f12d2ed54bc1d30", size = 65430, upload_time = "2024-12-24T18:30:08.504Z" }, + { url = "https://files.pythonhosted.org/packages/34/bd/b89380b7298e3af9b39f49334e3e2a4af0e04819789f04b43d560516c0c8/kiwisolver-1.4.8-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:370fd2df41660ed4e26b8c9d6bbcad668fbe2560462cba151a721d49e5b6628c", size = 126294, upload_time = "2024-12-24T18:30:09.508Z" }, + { url = "https://files.pythonhosted.org/packages/83/41/5857dc72e5e4148eaac5aa76e0703e594e4465f8ab7ec0fc60e3a9bb8fea/kiwisolver-1.4.8-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:84a2f830d42707de1d191b9490ac186bf7997a9495d4e9072210a1296345f7dc", size = 67736, upload_time = "2024-12-24T18:30:11.039Z" }, + { url = "https://files.pythonhosted.org/packages/e1/d1/be059b8db56ac270489fb0b3297fd1e53d195ba76e9bbb30e5401fa6b759/kiwisolver-1.4.8-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:7a3ad337add5148cf51ce0b55642dc551c0b9d6248458a757f98796ca7348712", size = 66194, upload_time = "2024-12-24T18:30:14.886Z" }, + { url = "https://files.pythonhosted.org/packages/e1/83/4b73975f149819eb7dcf9299ed467eba068ecb16439a98990dcb12e63fdd/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7506488470f41169b86d8c9aeff587293f530a23a23a49d6bc64dab66bedc71e", size = 1465942, upload_time = "2024-12-24T18:30:18.927Z" }, + { url = "https://files.pythonhosted.org/packages/c7/2c/30a5cdde5102958e602c07466bce058b9d7cb48734aa7a4327261ac8e002/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f0121b07b356a22fb0414cec4666bbe36fd6d0d759db3d37228f496ed67c880", size = 1595341, upload_time = "2024-12-24T18:30:22.102Z" }, + { url = "https://files.pythonhosted.org/packages/ff/9b/1e71db1c000385aa069704f5990574b8244cce854ecd83119c19e83c9586/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d6d6bd87df62c27d4185de7c511c6248040afae67028a8a22012b010bc7ad062", size = 1598455, upload_time = "2024-12-24T18:30:24.947Z" }, + { url = "https://files.pythonhosted.org/packages/85/92/c8fec52ddf06231b31cbb779af77e99b8253cd96bd135250b9498144c78b/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:291331973c64bb9cce50bbe871fb2e675c4331dab4f31abe89f175ad7679a4d7", size = 1522138, upload_time = "2024-12-24T18:30:26.286Z" }, + { url = "https://files.pythonhosted.org/packages/0b/51/9eb7e2cd07a15d8bdd976f6190c0164f92ce1904e5c0c79198c4972926b7/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:893f5525bb92d3d735878ec00f781b2de998333659507d29ea4466208df37bed", size = 1582857, upload_time = "2024-12-24T18:30:28.86Z" }, + { url = "https://files.pythonhosted.org/packages/0f/95/c5a00387a5405e68ba32cc64af65ce881a39b98d73cc394b24143bebc5b8/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b47a465040146981dc9db8647981b8cb96366fbc8d452b031e4f8fdffec3f26d", size = 2293129, upload_time = "2024-12-24T18:30:30.34Z" }, + { url = "https://files.pythonhosted.org/packages/44/83/eeb7af7d706b8347548313fa3a3a15931f404533cc54fe01f39e830dd231/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:99cea8b9dd34ff80c521aef46a1dddb0dcc0283cf18bde6d756f1e6f31772165", size = 2421538, upload_time = "2024-12-24T18:30:33.334Z" }, + { url = "https://files.pythonhosted.org/packages/05/f9/27e94c1b3eb29e6933b6986ffc5fa1177d2cd1f0c8efc5f02c91c9ac61de/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:151dffc4865e5fe6dafce5480fab84f950d14566c480c08a53c663a0020504b6", size = 2390661, upload_time = "2024-12-24T18:30:34.939Z" }, + { url = "https://files.pythonhosted.org/packages/d9/d4/3c9735faa36ac591a4afcc2980d2691000506050b7a7e80bcfe44048daa7/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:577facaa411c10421314598b50413aa1ebcf5126f704f1e5d72d7e4e9f020d90", size = 2546710, upload_time = "2024-12-24T18:30:37.281Z" }, + { url = "https://files.pythonhosted.org/packages/4c/fa/be89a49c640930180657482a74970cdcf6f7072c8d2471e1babe17a222dc/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:be4816dc51c8a471749d664161b434912eee82f2ea66bd7628bd14583a833e85", size = 2349213, upload_time = "2024-12-24T18:30:40.019Z" }, +] + +[[package]] +name = "lark" +version = "1.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/af/60/bc7622aefb2aee1c0b4ba23c1446d3e30225c8770b38d7aedbfb65ca9d5a/lark-1.2.2.tar.gz", hash = "sha256:ca807d0162cd16cef15a8feecb862d7319e7a09bdb13aef927968e45040fed80", size = 252132, upload_time = "2024-08-13T19:49:00.652Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2d/00/d90b10b962b4277f5e64a78b6609968859ff86889f5b898c1a778c06ec00/lark-1.2.2-py3-none-any.whl", hash = "sha256:c2276486b02f0f1b90be155f2c8ba4a8e194d42775786db622faccd652d8e80c", size = 111036, upload_time = "2024-08-13T19:48:58.603Z" }, +] + +[[package]] +name = "libhxl" +version = "5.2.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jsonpath-ng" }, + { name = "ply" }, + { name = "python-dateutil" }, + { name = "python-io-wrapper" }, + { name = "requests" }, + { name = "structlog" }, + { name = "unidecode" }, + { name = "urllib3" }, + { name = "wheel" }, + { name = "xlrd3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/63/ad/c1dafb7c59e685692a2eeafce83245b7c5f46e05881fdb77a0cbb7c19c74/libhxl-5.2.2.tar.gz", hash = "sha256:3a74d9f23561bfcefd20e5229c574bc68dfc114fdb6ba1ba684d9e9d7ea52483", size = 127736, upload_time = "2024-10-25T09:19:11.202Z" } + +[[package]] +name = "loguru" +version = "0.7.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "win32-setctime", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3a/05/a1dae3dffd1116099471c643b8924f5aa6524411dc6c63fdae648c4f1aca/loguru-0.7.3.tar.gz", hash = "sha256:19480589e77d47b8d85b2c827ad95d49bf31b0dcde16593892eb51dd18706eb6", size = 63559, upload_time = "2024-12-06T11:20:56.608Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl", hash = "sha256:31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c", size = 61595, upload_time = "2024-12-06T11:20:54.538Z" }, +] + +[[package]] +name = "markdown" +version = "3.8.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/c2/4ab49206c17f75cb08d6311171f2d65798988db4360c4d1485bd0eedd67c/markdown-3.8.2.tar.gz", hash = "sha256:247b9a70dd12e27f67431ce62523e675b866d254f900c4fe75ce3dda62237c45", size = 362071, upload_time = "2025-06-19T17:12:44.483Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/96/2b/34cc11786bc00d0f04d0f5fdc3a2b1ae0b6239eef72d3d345805f9ad92a1/markdown-3.8.2-py3-none-any.whl", hash = "sha256:5c83764dbd4e00bdd94d85a19b8d55ccca20fe35b2e678a1422b380324dd5f24", size = 106827, upload_time = "2025-06-19T17:12:42.994Z" }, +] + +[[package]] +name = "markdown-it-py" +version = "3.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mdurl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596, upload_time = "2023-06-03T06:41:14.443Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528, upload_time = "2023-06-03T06:41:11.019Z" }, +] + +[[package]] +name = "marko" +version = "2.1.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/dc/c8cadbd83de1b38d95a48568b445a5553005ebdd32e00a333ca940113db4/marko-2.1.4.tar.gz", hash = "sha256:dd7d66f3706732bf8f994790e674649a4fd0a6c67f16b80246f30de8e16a1eac", size = 142795, upload_time = "2025-06-13T03:25:50.857Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c3/66/49e3691d14898fb6e34ccb337c7677dfb7e18269ed170f12e4b85315eae6/marko-2.1.4-py3-none-any.whl", hash = "sha256:81c2b9f570ca485bc356678d9ba1a1b3eb78b4a315d01f3ded25442fdc796990", size = 42186, upload_time = "2025-06-13T03:25:49.858Z" }, +] + +[[package]] +name = "markupsafe" +version = "3.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537, upload_time = "2024-10-18T15:21:54.129Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/09/d1f21434c97fc42f09d290cbb6350d44eb12f09cc62c9476effdb33a18aa/MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", size = 14274, upload_time = "2024-10-18T15:21:13.777Z" }, + { url = "https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", size = 12348, upload_time = "2024-10-18T15:21:14.822Z" }, + { url = "https://files.pythonhosted.org/packages/e0/25/dd5c0f6ac1311e9b40f4af06c78efde0f3b5cbf02502f8ef9501294c425b/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", size = 24149, upload_time = "2024-10-18T15:21:15.642Z" }, + { url = "https://files.pythonhosted.org/packages/f3/f0/89e7aadfb3749d0f52234a0c8c7867877876e0a20b60e2188e9850794c17/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", size = 23118, upload_time = "2024-10-18T15:21:17.133Z" }, + { url = "https://files.pythonhosted.org/packages/d5/da/f2eeb64c723f5e3777bc081da884b414671982008c47dcc1873d81f625b6/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", size = 22993, upload_time = "2024-10-18T15:21:18.064Z" }, + { url = "https://files.pythonhosted.org/packages/da/0e/1f32af846df486dce7c227fe0f2398dc7e2e51d4a370508281f3c1c5cddc/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", size = 24178, upload_time = "2024-10-18T15:21:18.859Z" }, + { url = "https://files.pythonhosted.org/packages/c4/f6/bb3ca0532de8086cbff5f06d137064c8410d10779c4c127e0e47d17c0b71/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", size = 23319, upload_time = "2024-10-18T15:21:19.671Z" }, + { url = "https://files.pythonhosted.org/packages/a2/82/8be4c96ffee03c5b4a034e60a31294daf481e12c7c43ab8e34a1453ee48b/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", size = 23352, upload_time = "2024-10-18T15:21:20.971Z" }, + { url = "https://files.pythonhosted.org/packages/51/ae/97827349d3fcffee7e184bdf7f41cd6b88d9919c80f0263ba7acd1bbcb18/MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", size = 15097, upload_time = "2024-10-18T15:21:22.646Z" }, + { url = "https://files.pythonhosted.org/packages/c1/80/a61f99dc3a936413c3ee4e1eecac96c0da5ed07ad56fd975f1a9da5bc630/MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", size = 15601, upload_time = "2024-10-18T15:21:23.499Z" }, + { url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274, upload_time = "2024-10-18T15:21:24.577Z" }, + { url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352, upload_time = "2024-10-18T15:21:25.382Z" }, + { url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122, upload_time = "2024-10-18T15:21:26.199Z" }, + { url = "https://files.pythonhosted.org/packages/0c/91/96cf928db8236f1bfab6ce15ad070dfdd02ed88261c2afafd4b43575e9e9/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", size = 23085, upload_time = "2024-10-18T15:21:27.029Z" }, + { url = "https://files.pythonhosted.org/packages/c2/cf/c9d56af24d56ea04daae7ac0940232d31d5a8354f2b457c6d856b2057d69/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", size = 22978, upload_time = "2024-10-18T15:21:27.846Z" }, + { url = "https://files.pythonhosted.org/packages/2a/9f/8619835cd6a711d6272d62abb78c033bda638fdc54c4e7f4272cf1c0962b/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", size = 24208, upload_time = "2024-10-18T15:21:28.744Z" }, + { url = "https://files.pythonhosted.org/packages/f9/bf/176950a1792b2cd2102b8ffeb5133e1ed984547b75db47c25a67d3359f77/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", size = 23357, upload_time = "2024-10-18T15:21:29.545Z" }, + { url = "https://files.pythonhosted.org/packages/ce/4f/9a02c1d335caabe5c4efb90e1b6e8ee944aa245c1aaaab8e8a618987d816/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", size = 23344, upload_time = "2024-10-18T15:21:30.366Z" }, + { url = "https://files.pythonhosted.org/packages/ee/55/c271b57db36f748f0e04a759ace9f8f759ccf22b4960c270c78a394f58be/MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", size = 15101, upload_time = "2024-10-18T15:21:31.207Z" }, + { url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", size = 15603, upload_time = "2024-10-18T15:21:32.032Z" }, + { url = "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", size = 14510, upload_time = "2024-10-18T15:21:33.625Z" }, + { url = "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", size = 12486, upload_time = "2024-10-18T15:21:34.611Z" }, + { url = "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", size = 25480, upload_time = "2024-10-18T15:21:35.398Z" }, + { url = "https://files.pythonhosted.org/packages/0c/e3/90e9651924c430b885468b56b3d597cabf6d72be4b24a0acd1fa0e12af67/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", size = 23914, upload_time = "2024-10-18T15:21:36.231Z" }, + { url = "https://files.pythonhosted.org/packages/66/8c/6c7cf61f95d63bb866db39085150df1f2a5bd3335298f14a66b48e92659c/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", size = 23796, upload_time = "2024-10-18T15:21:37.073Z" }, + { url = "https://files.pythonhosted.org/packages/bb/35/cbe9238ec3f47ac9a7c8b3df7a808e7cb50fe149dc7039f5f454b3fba218/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", size = 25473, upload_time = "2024-10-18T15:21:37.932Z" }, + { url = "https://files.pythonhosted.org/packages/e6/32/7621a4382488aa283cc05e8984a9c219abad3bca087be9ec77e89939ded9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", size = 24114, upload_time = "2024-10-18T15:21:39.799Z" }, + { url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098, upload_time = "2024-10-18T15:21:40.813Z" }, + { url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208, upload_time = "2024-10-18T15:21:41.814Z" }, + { url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739, upload_time = "2024-10-18T15:21:42.784Z" }, +] + +[[package]] +name = "matplotlib" +version = "3.10.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "contourpy" }, + { name = "cycler" }, + { name = "fonttools" }, + { name = "kiwisolver" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "pillow" }, + { name = "pyparsing" }, + { name = "python-dateutil" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/26/91/d49359a21893183ed2a5b6c76bec40e0b1dcbf8ca148f864d134897cfc75/matplotlib-3.10.3.tar.gz", hash = "sha256:2f82d2c5bb7ae93aaaa4cd42aca65d76ce6376f83304fa3a630b569aca274df0", size = 34799811, upload_time = "2025-05-08T19:10:54.39Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/43/6b80eb47d1071f234ef0c96ca370c2ca621f91c12045f1401b5c9b28a639/matplotlib-3.10.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0ab1affc11d1f495ab9e6362b8174a25afc19c081ba5b0775ef00533a4236eea", size = 8179689, upload_time = "2025-05-08T19:10:07.602Z" }, + { url = "https://files.pythonhosted.org/packages/0f/70/d61a591958325c357204870b5e7b164f93f2a8cca1dc6ce940f563909a13/matplotlib-3.10.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2a818d8bdcafa7ed2eed74487fdb071c09c1ae24152d403952adad11fa3c65b4", size = 8050466, upload_time = "2025-05-08T19:10:09.383Z" }, + { url = "https://files.pythonhosted.org/packages/e7/75/70c9d2306203148cc7902a961240c5927dd8728afedf35e6a77e105a2985/matplotlib-3.10.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:748ebc3470c253e770b17d8b0557f0aa85cf8c63fd52f1a61af5b27ec0b7ffee", size = 8456252, upload_time = "2025-05-08T19:10:11.958Z" }, + { url = "https://files.pythonhosted.org/packages/c4/91/ba0ae1ff4b3f30972ad01cd4a8029e70a0ec3b8ea5be04764b128b66f763/matplotlib-3.10.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ed70453fd99733293ace1aec568255bc51c6361cb0da94fa5ebf0649fdb2150a", size = 8601321, upload_time = "2025-05-08T19:10:14.47Z" }, + { url = "https://files.pythonhosted.org/packages/d2/88/d636041eb54a84b889e11872d91f7cbf036b3b0e194a70fa064eb8b04f7a/matplotlib-3.10.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dbed9917b44070e55640bd13419de83b4c918e52d97561544814ba463811cbc7", size = 9406972, upload_time = "2025-05-08T19:10:16.569Z" }, + { url = "https://files.pythonhosted.org/packages/b1/79/0d1c165eac44405a86478082e225fce87874f7198300bbebc55faaf6d28d/matplotlib-3.10.3-cp312-cp312-win_amd64.whl", hash = "sha256:cf37d8c6ef1a48829443e8ba5227b44236d7fcaf7647caa3178a4ff9f7a5be05", size = 8067954, upload_time = "2025-05-08T19:10:18.663Z" }, + { url = "https://files.pythonhosted.org/packages/3b/c1/23cfb566a74c696a3b338d8955c549900d18fe2b898b6e94d682ca21e7c2/matplotlib-3.10.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9f2efccc8dcf2b86fc4ee849eea5dcaecedd0773b30f47980dc0cbeabf26ec84", size = 8180318, upload_time = "2025-05-08T19:10:20.426Z" }, + { url = "https://files.pythonhosted.org/packages/6c/0c/02f1c3b66b30da9ee343c343acbb6251bef5b01d34fad732446eaadcd108/matplotlib-3.10.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3ddbba06a6c126e3301c3d272a99dcbe7f6c24c14024e80307ff03791a5f294e", size = 8051132, upload_time = "2025-05-08T19:10:22.569Z" }, + { url = "https://files.pythonhosted.org/packages/b4/ab/8db1a5ac9b3a7352fb914133001dae889f9fcecb3146541be46bed41339c/matplotlib-3.10.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:748302b33ae9326995b238f606e9ed840bf5886ebafcb233775d946aa8107a15", size = 8457633, upload_time = "2025-05-08T19:10:24.749Z" }, + { url = "https://files.pythonhosted.org/packages/f5/64/41c4367bcaecbc03ef0d2a3ecee58a7065d0a36ae1aa817fe573a2da66d4/matplotlib-3.10.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a80fcccbef63302c0efd78042ea3c2436104c5b1a4d3ae20f864593696364ac7", size = 8601031, upload_time = "2025-05-08T19:10:27.03Z" }, + { url = "https://files.pythonhosted.org/packages/12/6f/6cc79e9e5ab89d13ed64da28898e40fe5b105a9ab9c98f83abd24e46d7d7/matplotlib-3.10.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:55e46cbfe1f8586adb34f7587c3e4f7dedc59d5226719faf6cb54fc24f2fd52d", size = 9406988, upload_time = "2025-05-08T19:10:29.056Z" }, + { url = "https://files.pythonhosted.org/packages/b1/0f/eed564407bd4d935ffabf561ed31099ed609e19287409a27b6d336848653/matplotlib-3.10.3-cp313-cp313-win_amd64.whl", hash = "sha256:151d89cb8d33cb23345cd12490c76fd5d18a56581a16d950b48c6ff19bb2ab93", size = 8068034, upload_time = "2025-05-08T19:10:31.221Z" }, + { url = "https://files.pythonhosted.org/packages/3e/e5/2f14791ff69b12b09e9975e1d116d9578ac684460860ce542c2588cb7a1c/matplotlib-3.10.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:c26dd9834e74d164d06433dc7be5d75a1e9890b926b3e57e74fa446e1a62c3e2", size = 8218223, upload_time = "2025-05-08T19:10:33.114Z" }, + { url = "https://files.pythonhosted.org/packages/5c/08/30a94afd828b6e02d0a52cae4a29d6e9ccfcf4c8b56cc28b021d3588873e/matplotlib-3.10.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:24853dad5b8c84c8c2390fc31ce4858b6df504156893292ce8092d190ef8151d", size = 8094985, upload_time = "2025-05-08T19:10:35.337Z" }, + { url = "https://files.pythonhosted.org/packages/89/44/f3bc6b53066c889d7a1a3ea8094c13af6a667c5ca6220ec60ecceec2dabe/matplotlib-3.10.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68f7878214d369d7d4215e2a9075fef743be38fa401d32e6020bab2dfabaa566", size = 8483109, upload_time = "2025-05-08T19:10:37.611Z" }, + { url = "https://files.pythonhosted.org/packages/ba/c7/473bc559beec08ebee9f86ca77a844b65747e1a6c2691e8c92e40b9f42a8/matplotlib-3.10.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6929fc618cb6db9cb75086f73b3219bbb25920cb24cee2ea7a12b04971a4158", size = 8618082, upload_time = "2025-05-08T19:10:39.892Z" }, + { url = "https://files.pythonhosted.org/packages/d8/e9/6ce8edd264c8819e37bbed8172e0ccdc7107fe86999b76ab5752276357a4/matplotlib-3.10.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6c7818292a5cc372a2dc4c795e5c356942eb8350b98ef913f7fda51fe175ac5d", size = 9413699, upload_time = "2025-05-08T19:10:42.376Z" }, + { url = "https://files.pythonhosted.org/packages/1b/92/9a45c91089c3cf690b5badd4be81e392ff086ccca8a1d4e3a08463d8a966/matplotlib-3.10.3-cp313-cp313t-win_amd64.whl", hash = "sha256:4f23ffe95c5667ef8a2b56eea9b53db7f43910fa4a2d5472ae0f72b64deab4d5", size = 8139044, upload_time = "2025-05-08T19:10:44.551Z" }, +] + +[[package]] +name = "matplotlib-inline" +version = "0.1.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/99/5b/a36a337438a14116b16480db471ad061c36c3694df7c2084a0da7ba538b7/matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90", size = 8159, upload_time = "2024-04-15T13:44:44.803Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8f/8e/9ad090d3553c280a8060fbf6e24dc1c0c29704ee7d1c372f0c174aa59285/matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca", size = 9899, upload_time = "2024-04-15T13:44:43.265Z" }, +] + +[[package]] +name = "mdurl" +version = "0.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload_time = "2022-08-14T12:40:10.846Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload_time = "2022-08-14T12:40:09.779Z" }, +] + +[[package]] +name = "mergedeep" +version = "1.3.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3a/41/580bb4006e3ed0361b8151a01d324fb03f420815446c7def45d02f74c270/mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8", size = 4661, upload_time = "2021-02-05T18:55:30.623Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307", size = 6354, upload_time = "2021-02-05T18:55:29.583Z" }, +] + +[[package]] +name = "mkdocs" +version = "1.6.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "ghp-import" }, + { name = "jinja2" }, + { name = "markdown" }, + { name = "markupsafe" }, + { name = "mergedeep" }, + { name = "mkdocs-get-deps" }, + { name = "packaging" }, + { name = "pathspec" }, + { name = "pyyaml" }, + { name = "pyyaml-env-tag" }, + { name = "watchdog" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bc/c6/bbd4f061bd16b378247f12953ffcb04786a618ce5e904b8c5a01a0309061/mkdocs-1.6.1.tar.gz", hash = "sha256:7b432f01d928c084353ab39c57282f29f92136665bdd6abf7c1ec8d822ef86f2", size = 3889159, upload_time = "2024-08-30T12:24:06.899Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl", hash = "sha256:db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e", size = 3864451, upload_time = "2024-08-30T12:24:05.054Z" }, +] + +[[package]] +name = "mkdocs-autolinks-plugin" +version = "0.7.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mkdocs" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/63/b7/efc75b7870a4fecbc9a05ba94ce622462a40b5a13670d00036c5b47bf82f/mkdocs-autolinks-plugin-0.7.1.tar.gz", hash = "sha256:445ddb9b417b7795856c30801bb430773186c1daf210bdeecf8305f55a47d151", size = 4375, upload_time = "2023-08-04T14:42:25.67Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d4/9c/ee3d81a799b8b0b73a89625bcbf3c58cd369c8a26a1b415413edea9bf259/mkdocs_autolinks_plugin-0.7.1-py3-none-any.whl", hash = "sha256:5c6c17f6649b68e79a9ef0b2648d59f3072e18002b90ee1586a64c505f11ab12", size = 4235, upload_time = "2023-08-04T14:42:23.955Z" }, +] + +[[package]] +name = "mkdocs-autorefs" +version = "1.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown" }, + { name = "markupsafe" }, + { name = "mkdocs" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/47/0c/c9826f35b99c67fa3a7cddfa094c1a6c43fafde558c309c6e4403e5b37dc/mkdocs_autorefs-1.4.2.tar.gz", hash = "sha256:e2ebe1abd2b67d597ed19378c0fff84d73d1dbce411fce7a7cc6f161888b6749", size = 54961, upload_time = "2025-05-20T13:09:09.886Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/87/dc/fc063b78f4b769d1956319351704e23ebeba1e9e1d6a41b4b602325fd7e4/mkdocs_autorefs-1.4.2-py3-none-any.whl", hash = "sha256:83d6d777b66ec3c372a1aad4ae0cf77c243ba5bcda5bf0c6b8a2c5e7a3d89f13", size = 24969, upload_time = "2025-05-20T13:09:08.237Z" }, +] + +[[package]] +name = "mkdocs-get-deps" +version = "0.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mergedeep" }, + { name = "platformdirs" }, + { name = "pyyaml" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/98/f5/ed29cd50067784976f25ed0ed6fcd3c2ce9eb90650aa3b2796ddf7b6870b/mkdocs_get_deps-0.2.0.tar.gz", hash = "sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c", size = 10239, upload_time = "2023-11-20T17:51:09.981Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9f/d4/029f984e8d3f3b6b726bd33cafc473b75e9e44c0f7e80a5b29abc466bdea/mkdocs_get_deps-0.2.0-py3-none-any.whl", hash = "sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134", size = 9521, upload_time = "2023-11-20T17:51:08.587Z" }, +] + +[[package]] +name = "mkdocs-git-revision-date-localized-plugin" +version = "1.4.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "babel" }, + { name = "gitpython" }, + { name = "mkdocs" }, + { name = "pytz" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5e/f8/a17ec39a4fc314d40cc96afdc1d401e393ebd4f42309d454cc940a2cf38a/mkdocs_git_revision_date_localized_plugin-1.4.7.tar.gz", hash = "sha256:10a49eff1e1c3cb766e054b9d8360c904ce4fe8c33ac3f6cc083ac6459c91953", size = 450473, upload_time = "2025-05-28T18:26:20.697Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/53/b6/106fcc15287e7228658fbd0ad9e8b0d775becced0a089cc39984641f4a0f/mkdocs_git_revision_date_localized_plugin-1.4.7-py3-none-any.whl", hash = "sha256:056c0a90242409148f1dc94d5c9d2c25b5b8ddd8de45489fa38f7fa7ccad2bc4", size = 25382, upload_time = "2025-05-28T18:26:18.907Z" }, +] + +[[package]] +name = "mkdocs-material" +version = "9.6.15" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "babel" }, + { name = "backrefs" }, + { name = "colorama" }, + { name = "jinja2" }, + { name = "markdown" }, + { name = "mkdocs" }, + { name = "mkdocs-material-extensions" }, + { name = "paginate" }, + { name = "pygments" }, + { name = "pymdown-extensions" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/95/c1/f804ba2db2ddc2183e900befe7dad64339a34fa935034e1ab405289d0a97/mkdocs_material-9.6.15.tar.gz", hash = "sha256:64adf8fa8dba1a17905b6aee1894a5aafd966d4aeb44a11088519b0f5ca4f1b5", size = 3951836, upload_time = "2025-07-01T10:14:15.671Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1d/30/dda19f0495a9096b64b6b3c07c4bfcff1c76ee0fc521086d53593f18b4c0/mkdocs_material-9.6.15-py3-none-any.whl", hash = "sha256:ac969c94d4fe5eb7c924b6d2f43d7db41159ea91553d18a9afc4780c34f2717a", size = 8716840, upload_time = "2025-07-01T10:14:13.18Z" }, +] + +[[package]] +name = "mkdocs-material-extensions" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/79/9b/9b4c96d6593b2a541e1cb8b34899a6d021d208bb357042823d4d2cabdbe7/mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443", size = 11847, upload_time = "2023-11-22T19:09:45.208Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31", size = 8728, upload_time = "2023-11-22T19:09:43.465Z" }, +] + +[[package]] +name = "mkdocs-minify-plugin" +version = "0.8.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "csscompressor" }, + { name = "htmlmin2" }, + { name = "jsmin" }, + { name = "mkdocs" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/52/67/fe4b77e7a8ae7628392e28b14122588beaf6078b53eb91c7ed000fd158ac/mkdocs-minify-plugin-0.8.0.tar.gz", hash = "sha256:bc11b78b8120d79e817308e2b11539d790d21445eb63df831e393f76e52e753d", size = 8366, upload_time = "2024-01-29T16:11:32.982Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1b/cd/2e8d0d92421916e2ea4ff97f10a544a9bd5588eb747556701c983581df13/mkdocs_minify_plugin-0.8.0-py3-none-any.whl", hash = "sha256:5fba1a3f7bd9a2142c9954a6559a57e946587b21f133165ece30ea145c66aee6", size = 6723, upload_time = "2024-01-29T16:11:31.851Z" }, +] + +[[package]] +name = "mkdocs-open-in-new-tab" +version = "1.0.8" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mkdocs" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0a/0e/f72a506a21bdb27b807124e00c688226848a388d1fd3980b80ae3cc27203/mkdocs_open_in_new_tab-1.0.8.tar.gz", hash = "sha256:3e0dad08cc9938b0b13097be8e0aa435919de1eeb2d1a648e66b5dee8d57e048", size = 5791, upload_time = "2024-11-18T13:15:13.977Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/21/94/44f3c868495481c868d08eea065c82803f1affd8553d3383b782f497613c/mkdocs_open_in_new_tab-1.0.8-py3-none-any.whl", hash = "sha256:051d767a4467b12d89827e1fea0ec660b05b027c726317fe4fceee5456e36ad2", size = 7717, upload_time = "2024-11-18T13:15:12.286Z" }, +] + +[[package]] +name = "mkdocstrings" +version = "0.29.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jinja2" }, + { name = "markdown" }, + { name = "markupsafe" }, + { name = "mkdocs" }, + { name = "mkdocs-autorefs" }, + { name = "pymdown-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/41/e8/d22922664a627a0d3d7ff4a6ca95800f5dde54f411982591b4621a76225d/mkdocstrings-0.29.1.tar.gz", hash = "sha256:8722f8f8c5cd75da56671e0a0c1bbed1df9946c0cef74794d6141b34011abd42", size = 1212686, upload_time = "2025-03-31T08:33:11.997Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/98/14/22533a578bf8b187e05d67e2c1721ce10e3f526610eebaf7a149d557ea7a/mkdocstrings-0.29.1-py3-none-any.whl", hash = "sha256:37a9736134934eea89cbd055a513d40a020d87dfcae9e3052c2a6b8cd4af09b6", size = 1631075, upload_time = "2025-03-31T08:33:09.661Z" }, +] + +[[package]] +name = "mkdocstrings-python" +version = "1.16.12" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "griffe" }, + { name = "mkdocs-autorefs" }, + { name = "mkdocstrings" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bf/ed/b886f8c714fd7cccc39b79646b627dbea84cd95c46be43459ef46852caf0/mkdocstrings_python-1.16.12.tar.gz", hash = "sha256:9b9eaa066e0024342d433e332a41095c4e429937024945fea511afe58f63175d", size = 206065, upload_time = "2025-06-03T12:52:49.276Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3b/dd/a24ee3de56954bfafb6ede7cd63c2413bb842cc48eb45e41c43a05a33074/mkdocstrings_python-1.16.12-py3-none-any.whl", hash = "sha256:22ded3a63b3d823d57457a70ff9860d5a4de9e8b1e482876fc9baabaf6f5f374", size = 124287, upload_time = "2025-06-03T12:52:47.819Z" }, +] + +[[package]] +name = "mypy" +version = "1.16.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mypy-extensions" }, + { name = "pathspec" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/81/69/92c7fa98112e4d9eb075a239caa4ef4649ad7d441545ccffbd5e34607cbb/mypy-1.16.1.tar.gz", hash = "sha256:6bd00a0a2094841c5e47e7374bb42b83d64c527a502e3334e1173a0c24437bab", size = 3324747, upload_time = "2025-06-16T16:51:35.145Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b4/d6/39482e5fcc724c15bf6280ff5806548c7185e0c090712a3736ed4d07e8b7/mypy-1.16.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:af4792433f09575d9eeca5c63d7d90ca4aeceda9d8355e136f80f8967639183d", size = 11066493, upload_time = "2025-06-16T16:47:01.683Z" }, + { url = "https://files.pythonhosted.org/packages/e6/e5/26c347890efc6b757f4d5bb83f4a0cf5958b8cf49c938ac99b8b72b420a6/mypy-1.16.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:66df38405fd8466ce3517eda1f6640611a0b8e70895e2a9462d1d4323c5eb4b9", size = 10081687, upload_time = "2025-06-16T16:48:19.367Z" }, + { url = "https://files.pythonhosted.org/packages/44/c7/b5cb264c97b86914487d6a24bd8688c0172e37ec0f43e93b9691cae9468b/mypy-1.16.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:44e7acddb3c48bd2713994d098729494117803616e116032af192871aed80b79", size = 11839723, upload_time = "2025-06-16T16:49:20.912Z" }, + { url = "https://files.pythonhosted.org/packages/15/f8/491997a9b8a554204f834ed4816bda813aefda31cf873bb099deee3c9a99/mypy-1.16.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0ab5eca37b50188163fa7c1b73c685ac66c4e9bdee4a85c9adac0e91d8895e15", size = 12722980, upload_time = "2025-06-16T16:37:40.929Z" }, + { url = "https://files.pythonhosted.org/packages/df/f0/2bd41e174b5fd93bc9de9a28e4fb673113633b8a7f3a607fa4a73595e468/mypy-1.16.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dedb6229b2c9086247e21a83c309754b9058b438704ad2f6807f0d8227f6ebdd", size = 12903328, upload_time = "2025-06-16T16:34:35.099Z" }, + { url = "https://files.pythonhosted.org/packages/61/81/5572108a7bec2c46b8aff7e9b524f371fe6ab5efb534d38d6b37b5490da8/mypy-1.16.1-cp312-cp312-win_amd64.whl", hash = "sha256:1f0435cf920e287ff68af3d10a118a73f212deb2ce087619eb4e648116d1fe9b", size = 9562321, upload_time = "2025-06-16T16:48:58.823Z" }, + { url = "https://files.pythonhosted.org/packages/28/e3/96964af4a75a949e67df4b95318fe2b7427ac8189bbc3ef28f92a1c5bc56/mypy-1.16.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ddc91eb318c8751c69ddb200a5937f1232ee8efb4e64e9f4bc475a33719de438", size = 11063480, upload_time = "2025-06-16T16:47:56.205Z" }, + { url = "https://files.pythonhosted.org/packages/f5/4d/cd1a42b8e5be278fab7010fb289d9307a63e07153f0ae1510a3d7b703193/mypy-1.16.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:87ff2c13d58bdc4bbe7dc0dedfe622c0f04e2cb2a492269f3b418df2de05c536", size = 10090538, upload_time = "2025-06-16T16:46:43.92Z" }, + { url = "https://files.pythonhosted.org/packages/c9/4f/c3c6b4b66374b5f68bab07c8cabd63a049ff69796b844bc759a0ca99bb2a/mypy-1.16.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a7cfb0fe29fe5a9841b7c8ee6dffb52382c45acdf68f032145b75620acfbd6f", size = 11836839, upload_time = "2025-06-16T16:36:28.039Z" }, + { url = "https://files.pythonhosted.org/packages/b4/7e/81ca3b074021ad9775e5cb97ebe0089c0f13684b066a750b7dc208438403/mypy-1.16.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:051e1677689c9d9578b9c7f4d206d763f9bbd95723cd1416fad50db49d52f359", size = 12715634, upload_time = "2025-06-16T16:50:34.441Z" }, + { url = "https://files.pythonhosted.org/packages/e9/95/bdd40c8be346fa4c70edb4081d727a54d0a05382d84966869738cfa8a497/mypy-1.16.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d5d2309511cc56c021b4b4e462907c2b12f669b2dbeb68300110ec27723971be", size = 12895584, upload_time = "2025-06-16T16:34:54.857Z" }, + { url = "https://files.pythonhosted.org/packages/5a/fd/d486a0827a1c597b3b48b1bdef47228a6e9ee8102ab8c28f944cb83b65dc/mypy-1.16.1-cp313-cp313-win_amd64.whl", hash = "sha256:4f58ac32771341e38a853c5d0ec0dfe27e18e27da9cdb8bbc882d2249c71a3ee", size = 9573886, upload_time = "2025-06-16T16:36:43.589Z" }, + { url = "https://files.pythonhosted.org/packages/cf/d3/53e684e78e07c1a2bf7105715e5edd09ce951fc3f47cf9ed095ec1b7a037/mypy-1.16.1-py3-none-any.whl", hash = "sha256:5fc2ac4027d0ef28d6ba69a0343737a23c4d1b83672bf38d1fe237bdc0643b37", size = 2265923, upload_time = "2025-06-16T16:48:02.366Z" }, +] + +[[package]] +name = "mypy-extensions" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/6e/371856a3fb9d31ca8dac321cda606860fa4548858c0cc45d9d1d4ca2628b/mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558", size = 6343, upload_time = "2025-04-22T14:54:24.164Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505", size = 4963, upload_time = "2025-04-22T14:54:22.983Z" }, +] + +[[package]] +name = "nest-asyncio" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/83/f8/51569ac65d696c8ecbee95938f89d4abf00f47d58d48f6fbabfe8f0baefe/nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe", size = 7418, upload_time = "2024-01-21T14:25:19.227Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c", size = 5195, upload_time = "2024-01-21T14:25:17.223Z" }, +] + +[[package]] +name = "nodeenv" +version = "1.9.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/43/16/fc88b08840de0e0a72a2f9d8c6bae36be573e475a6326ae854bcc549fc45/nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f", size = 47437, upload_time = "2024-06-04T18:44:11.171Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d2/1d/1b658dbd2b9fa9c4c9f32accbfc0205d532c8c6194dc0f2a4c0428e7128a/nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9", size = 22314, upload_time = "2024-06-04T18:44:08.352Z" }, +] + +[[package]] +name = "numpy" +version = "2.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2e/19/d7c972dfe90a353dbd3efbbe1d14a5951de80c99c9dc1b93cd998d51dc0f/numpy-2.3.1.tar.gz", hash = "sha256:1ec9ae20a4226da374362cca3c62cd753faf2f951440b0e3b98e93c235441d2b", size = 20390372, upload_time = "2025-06-21T12:28:33.469Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c6/56/71ad5022e2f63cfe0ca93559403d0edef14aea70a841d640bd13cdba578e/numpy-2.3.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2959d8f268f3d8ee402b04a9ec4bb7604555aeacf78b360dc4ec27f1d508177d", size = 20896664, upload_time = "2025-06-21T12:15:30.845Z" }, + { url = "https://files.pythonhosted.org/packages/25/65/2db52ba049813670f7f987cc5db6dac9be7cd95e923cc6832b3d32d87cef/numpy-2.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:762e0c0c6b56bdedfef9a8e1d4538556438288c4276901ea008ae44091954e29", size = 14131078, upload_time = "2025-06-21T12:15:52.23Z" }, + { url = "https://files.pythonhosted.org/packages/57/dd/28fa3c17b0e751047ac928c1e1b6990238faad76e9b147e585b573d9d1bd/numpy-2.3.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:867ef172a0976aaa1f1d1b63cf2090de8b636a7674607d514505fb7276ab08fc", size = 5112554, upload_time = "2025-06-21T12:16:01.434Z" }, + { url = "https://files.pythonhosted.org/packages/c9/fc/84ea0cba8e760c4644b708b6819d91784c290288c27aca916115e3311d17/numpy-2.3.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:4e602e1b8682c2b833af89ba641ad4176053aaa50f5cacda1a27004352dde943", size = 6646560, upload_time = "2025-06-21T12:16:11.895Z" }, + { url = "https://files.pythonhosted.org/packages/61/b2/512b0c2ddec985ad1e496b0bd853eeb572315c0f07cd6997473ced8f15e2/numpy-2.3.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:8e333040d069eba1652fb08962ec5b76af7f2c7bce1df7e1418c8055cf776f25", size = 14260638, upload_time = "2025-06-21T12:16:32.611Z" }, + { url = "https://files.pythonhosted.org/packages/6e/45/c51cb248e679a6c6ab14b7a8e3ead3f4a3fe7425fc7a6f98b3f147bec532/numpy-2.3.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:e7cbf5a5eafd8d230a3ce356d892512185230e4781a361229bd902ff403bc660", size = 16632729, upload_time = "2025-06-21T12:16:57.439Z" }, + { url = "https://files.pythonhosted.org/packages/e4/ff/feb4be2e5c09a3da161b412019caf47183099cbea1132fd98061808c2df2/numpy-2.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5f1b8f26d1086835f442286c1d9b64bb3974b0b1e41bb105358fd07d20872952", size = 15565330, upload_time = "2025-06-21T12:17:20.638Z" }, + { url = "https://files.pythonhosted.org/packages/bc/6d/ceafe87587101e9ab0d370e4f6e5f3f3a85b9a697f2318738e5e7e176ce3/numpy-2.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ee8340cb48c9b7a5899d1149eece41ca535513a9698098edbade2a8e7a84da77", size = 18361734, upload_time = "2025-06-21T12:17:47.938Z" }, + { url = "https://files.pythonhosted.org/packages/2b/19/0fb49a3ea088be691f040c9bf1817e4669a339d6e98579f91859b902c636/numpy-2.3.1-cp312-cp312-win32.whl", hash = "sha256:e772dda20a6002ef7061713dc1e2585bc1b534e7909b2030b5a46dae8ff077ab", size = 6320411, upload_time = "2025-06-21T12:17:58.475Z" }, + { url = "https://files.pythonhosted.org/packages/b1/3e/e28f4c1dd9e042eb57a3eb652f200225e311b608632bc727ae378623d4f8/numpy-2.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:cfecc7822543abdea6de08758091da655ea2210b8ffa1faf116b940693d3df76", size = 12734973, upload_time = "2025-06-21T12:18:17.601Z" }, + { url = "https://files.pythonhosted.org/packages/04/a8/8a5e9079dc722acf53522b8f8842e79541ea81835e9b5483388701421073/numpy-2.3.1-cp312-cp312-win_arm64.whl", hash = "sha256:7be91b2239af2658653c5bb6f1b8bccafaf08226a258caf78ce44710a0160d30", size = 10191491, upload_time = "2025-06-21T12:18:33.585Z" }, + { url = "https://files.pythonhosted.org/packages/d4/bd/35ad97006d8abff8631293f8ea6adf07b0108ce6fec68da3c3fcca1197f2/numpy-2.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:25a1992b0a3fdcdaec9f552ef10d8103186f5397ab45e2d25f8ac51b1a6b97e8", size = 20889381, upload_time = "2025-06-21T12:19:04.103Z" }, + { url = "https://files.pythonhosted.org/packages/f1/4f/df5923874d8095b6062495b39729178eef4a922119cee32a12ee1bd4664c/numpy-2.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7dea630156d39b02a63c18f508f85010230409db5b2927ba59c8ba4ab3e8272e", size = 14152726, upload_time = "2025-06-21T12:19:25.599Z" }, + { url = "https://files.pythonhosted.org/packages/8c/0f/a1f269b125806212a876f7efb049b06c6f8772cf0121139f97774cd95626/numpy-2.3.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:bada6058dd886061f10ea15f230ccf7dfff40572e99fef440a4a857c8728c9c0", size = 5105145, upload_time = "2025-06-21T12:19:34.782Z" }, + { url = "https://files.pythonhosted.org/packages/6d/63/a7f7fd5f375b0361682f6ffbf686787e82b7bbd561268e4f30afad2bb3c0/numpy-2.3.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:a894f3816eb17b29e4783e5873f92faf55b710c2519e5c351767c51f79d8526d", size = 6639409, upload_time = "2025-06-21T12:19:45.228Z" }, + { url = "https://files.pythonhosted.org/packages/bf/0d/1854a4121af895aab383f4aa233748f1df4671ef331d898e32426756a8a6/numpy-2.3.1-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:18703df6c4a4fee55fd3d6e5a253d01c5d33a295409b03fda0c86b3ca2ff41a1", size = 14257630, upload_time = "2025-06-21T12:20:06.544Z" }, + { url = "https://files.pythonhosted.org/packages/50/30/af1b277b443f2fb08acf1c55ce9d68ee540043f158630d62cef012750f9f/numpy-2.3.1-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:5902660491bd7a48b2ec16c23ccb9124b8abfd9583c5fdfa123fe6b421e03de1", size = 16627546, upload_time = "2025-06-21T12:20:31.002Z" }, + { url = "https://files.pythonhosted.org/packages/6e/ec/3b68220c277e463095342d254c61be8144c31208db18d3fd8ef02712bcd6/numpy-2.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:36890eb9e9d2081137bd78d29050ba63b8dab95dff7912eadf1185e80074b2a0", size = 15562538, upload_time = "2025-06-21T12:20:54.322Z" }, + { url = "https://files.pythonhosted.org/packages/77/2b/4014f2bcc4404484021c74d4c5ee8eb3de7e3f7ac75f06672f8dcf85140a/numpy-2.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a780033466159c2270531e2b8ac063704592a0bc62ec4a1b991c7c40705eb0e8", size = 18360327, upload_time = "2025-06-21T12:21:21.053Z" }, + { url = "https://files.pythonhosted.org/packages/40/8d/2ddd6c9b30fcf920837b8672f6c65590c7d92e43084c25fc65edc22e93ca/numpy-2.3.1-cp313-cp313-win32.whl", hash = "sha256:39bff12c076812595c3a306f22bfe49919c5513aa1e0e70fac756a0be7c2a2b8", size = 6312330, upload_time = "2025-06-21T12:25:07.447Z" }, + { url = "https://files.pythonhosted.org/packages/dd/c8/beaba449925988d415efccb45bf977ff8327a02f655090627318f6398c7b/numpy-2.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:8d5ee6eec45f08ce507a6570e06f2f879b374a552087a4179ea7838edbcbfa42", size = 12731565, upload_time = "2025-06-21T12:25:26.444Z" }, + { url = "https://files.pythonhosted.org/packages/0b/c3/5c0c575d7ec78c1126998071f58facfc124006635da75b090805e642c62e/numpy-2.3.1-cp313-cp313-win_arm64.whl", hash = "sha256:0c4d9e0a8368db90f93bd192bfa771ace63137c3488d198ee21dfb8e7771916e", size = 10190262, upload_time = "2025-06-21T12:25:42.196Z" }, + { url = "https://files.pythonhosted.org/packages/ea/19/a029cd335cf72f79d2644dcfc22d90f09caa86265cbbde3b5702ccef6890/numpy-2.3.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:b0b5397374f32ec0649dd98c652a1798192042e715df918c20672c62fb52d4b8", size = 20987593, upload_time = "2025-06-21T12:21:51.664Z" }, + { url = "https://files.pythonhosted.org/packages/25/91/8ea8894406209107d9ce19b66314194675d31761fe2cb3c84fe2eeae2f37/numpy-2.3.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:c5bdf2015ccfcee8253fb8be695516ac4457c743473a43290fd36eba6a1777eb", size = 14300523, upload_time = "2025-06-21T12:22:13.583Z" }, + { url = "https://files.pythonhosted.org/packages/a6/7f/06187b0066eefc9e7ce77d5f2ddb4e314a55220ad62dd0bfc9f2c44bac14/numpy-2.3.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:d70f20df7f08b90a2062c1f07737dd340adccf2068d0f1b9b3d56e2038979fee", size = 5227993, upload_time = "2025-06-21T12:22:22.53Z" }, + { url = "https://files.pythonhosted.org/packages/e8/ec/a926c293c605fa75e9cfb09f1e4840098ed46d2edaa6e2152ee35dc01ed3/numpy-2.3.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:2fb86b7e58f9ac50e1e9dd1290154107e47d1eef23a0ae9145ded06ea606f992", size = 6736652, upload_time = "2025-06-21T12:22:33.629Z" }, + { url = "https://files.pythonhosted.org/packages/e3/62/d68e52fb6fde5586650d4c0ce0b05ff3a48ad4df4ffd1b8866479d1d671d/numpy-2.3.1-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:23ab05b2d241f76cb883ce8b9a93a680752fbfcbd51c50eff0b88b979e471d8c", size = 14331561, upload_time = "2025-06-21T12:22:55.056Z" }, + { url = "https://files.pythonhosted.org/packages/fc/ec/b74d3f2430960044bdad6900d9f5edc2dc0fb8bf5a0be0f65287bf2cbe27/numpy-2.3.1-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:ce2ce9e5de4703a673e705183f64fd5da5bf36e7beddcb63a25ee2286e71ca48", size = 16693349, upload_time = "2025-06-21T12:23:20.53Z" }, + { url = "https://files.pythonhosted.org/packages/0d/15/def96774b9d7eb198ddadfcbd20281b20ebb510580419197e225f5c55c3e/numpy-2.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c4913079974eeb5c16ccfd2b1f09354b8fed7e0d6f2cab933104a09a6419b1ee", size = 15642053, upload_time = "2025-06-21T12:23:43.697Z" }, + { url = "https://files.pythonhosted.org/packages/2b/57/c3203974762a759540c6ae71d0ea2341c1fa41d84e4971a8e76d7141678a/numpy-2.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:010ce9b4f00d5c036053ca684c77441f2f2c934fd23bee058b4d6f196efd8280", size = 18434184, upload_time = "2025-06-21T12:24:10.708Z" }, + { url = "https://files.pythonhosted.org/packages/22/8a/ccdf201457ed8ac6245187850aff4ca56a79edbea4829f4e9f14d46fa9a5/numpy-2.3.1-cp313-cp313t-win32.whl", hash = "sha256:6269b9edfe32912584ec496d91b00b6d34282ca1d07eb10e82dfc780907d6c2e", size = 6440678, upload_time = "2025-06-21T12:24:21.596Z" }, + { url = "https://files.pythonhosted.org/packages/f1/7e/7f431d8bd8eb7e03d79294aed238b1b0b174b3148570d03a8a8a8f6a0da9/numpy-2.3.1-cp313-cp313t-win_amd64.whl", hash = "sha256:2a809637460e88a113e186e87f228d74ae2852a2e0c44de275263376f17b5bdc", size = 12870697, upload_time = "2025-06-21T12:24:40.644Z" }, + { url = "https://files.pythonhosted.org/packages/d4/ca/af82bf0fad4c3e573c6930ed743b5308492ff19917c7caaf2f9b6f9e2e98/numpy-2.3.1-cp313-cp313t-win_arm64.whl", hash = "sha256:eccb9a159db9aed60800187bc47a6d3451553f0e1b08b068d8b277ddfbb9b244", size = 10260376, upload_time = "2025-06-21T12:24:56.884Z" }, +] + +[[package]] +name = "oda-reader" +version = "1.2.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "joblib" }, + { name = "openpyxl" }, + { name = "pandas" }, + { name = "pyarrow" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1a/d1/5c0bb2a714ebea7df131b8e87010eab39d0df75878f6785f2a214ff66bb2/oda_reader-1.2.2.tar.gz", hash = "sha256:55be081e1744e75184eca3d09e794fad71958201d08b48fb497aac97a95f3685", size = 35630, upload_time = "2025-06-16T16:15:05.49Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d8/ec/59338ec9108848dc53f50e7381b9817595bf98f414f4a732100a06828a3b/oda_reader-1.2.2-py3-none-any.whl", hash = "sha256:7f7b854ab1e9bc2cf64b6c63bd56a2ac64cb90ec054518fd01b741fd518cf007", size = 45314, upload_time = "2025-06-16T16:15:04.328Z" }, +] + +[[package]] +name = "openpyxl" +version = "3.1.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "et-xmlfile" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3d/f9/88d94a75de065ea32619465d2f77b29a0469500e99012523b91cc4141cd1/openpyxl-3.1.5.tar.gz", hash = "sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050", size = 186464, upload_time = "2024-06-28T14:03:44.161Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl", hash = "sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2", size = 250910, upload_time = "2024-06-28T14:03:41.161Z" }, +] + +[[package]] +name = "packaging" +version = "25.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727, upload_time = "2025-04-19T11:48:59.673Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469, upload_time = "2025-04-19T11:48:57.875Z" }, +] + +[[package]] +name = "paginate" +version = "0.5.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ec/46/68dde5b6bc00c1296ec6466ab27dddede6aec9af1b99090e1107091b3b84/paginate-0.5.7.tar.gz", hash = "sha256:22bd083ab41e1a8b4f3690544afb2c60c25e5c9a63a30fa2f483f6c60c8e5945", size = 19252, upload_time = "2024-08-25T14:17:24.139Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl", hash = "sha256:b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591", size = 13746, upload_time = "2024-08-25T14:17:22.55Z" }, +] + +[[package]] +name = "pandas" +version = "2.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "python-dateutil" }, + { name = "pytz" }, + { name = "tzdata" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d1/6f/75aa71f8a14267117adeeed5d21b204770189c0a0025acbdc03c337b28fc/pandas-2.3.1.tar.gz", hash = "sha256:0a95b9ac964fe83ce317827f80304d37388ea77616b1425f0ae41c9d2d0d7bb2", size = 4487493, upload_time = "2025-07-07T19:20:04.079Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/46/de/b8445e0f5d217a99fe0eeb2f4988070908979bec3587c0633e5428ab596c/pandas-2.3.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:689968e841136f9e542020698ee1c4fbe9caa2ed2213ae2388dc7b81721510d3", size = 11588172, upload_time = "2025-07-07T19:18:52.054Z" }, + { url = "https://files.pythonhosted.org/packages/1e/e0/801cdb3564e65a5ac041ab99ea6f1d802a6c325bb6e58c79c06a3f1cd010/pandas-2.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:025e92411c16cbe5bb2a4abc99732a6b132f439b8aab23a59fa593eb00704232", size = 10717365, upload_time = "2025-07-07T19:18:54.785Z" }, + { url = "https://files.pythonhosted.org/packages/51/a5/c76a8311833c24ae61a376dbf360eb1b1c9247a5d9c1e8b356563b31b80c/pandas-2.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b7ff55f31c4fcb3e316e8f7fa194566b286d6ac430afec0d461163312c5841e", size = 11280411, upload_time = "2025-07-07T19:18:57.045Z" }, + { url = "https://files.pythonhosted.org/packages/da/01/e383018feba0a1ead6cf5fe8728e5d767fee02f06a3d800e82c489e5daaf/pandas-2.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7dcb79bf373a47d2a40cf7232928eb7540155abbc460925c2c96d2d30b006eb4", size = 11988013, upload_time = "2025-07-07T19:18:59.771Z" }, + { url = "https://files.pythonhosted.org/packages/5b/14/cec7760d7c9507f11c97d64f29022e12a6cc4fc03ac694535e89f88ad2ec/pandas-2.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:56a342b231e8862c96bdb6ab97170e203ce511f4d0429589c8ede1ee8ece48b8", size = 12767210, upload_time = "2025-07-07T19:19:02.944Z" }, + { url = "https://files.pythonhosted.org/packages/50/b9/6e2d2c6728ed29fb3d4d4d302504fb66f1a543e37eb2e43f352a86365cdf/pandas-2.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ca7ed14832bce68baef331f4d7f294411bed8efd032f8109d690df45e00c4679", size = 13440571, upload_time = "2025-07-07T19:19:06.82Z" }, + { url = "https://files.pythonhosted.org/packages/80/a5/3a92893e7399a691bad7664d977cb5e7c81cf666c81f89ea76ba2bff483d/pandas-2.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:ac942bfd0aca577bef61f2bc8da8147c4ef6879965ef883d8e8d5d2dc3e744b8", size = 10987601, upload_time = "2025-07-07T19:19:09.589Z" }, + { url = "https://files.pythonhosted.org/packages/32/ed/ff0a67a2c5505e1854e6715586ac6693dd860fbf52ef9f81edee200266e7/pandas-2.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9026bd4a80108fac2239294a15ef9003c4ee191a0f64b90f170b40cfb7cf2d22", size = 11531393, upload_time = "2025-07-07T19:19:12.245Z" }, + { url = "https://files.pythonhosted.org/packages/c7/db/d8f24a7cc9fb0972adab0cc80b6817e8bef888cfd0024eeb5a21c0bb5c4a/pandas-2.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6de8547d4fdb12421e2d047a2c446c623ff4c11f47fddb6b9169eb98ffba485a", size = 10668750, upload_time = "2025-07-07T19:19:14.612Z" }, + { url = "https://files.pythonhosted.org/packages/0f/b0/80f6ec783313f1e2356b28b4fd8d2148c378370045da918c73145e6aab50/pandas-2.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:782647ddc63c83133b2506912cc6b108140a38a37292102aaa19c81c83db2928", size = 11342004, upload_time = "2025-07-07T19:19:16.857Z" }, + { url = "https://files.pythonhosted.org/packages/e9/e2/20a317688435470872885e7fc8f95109ae9683dec7c50be29b56911515a5/pandas-2.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ba6aff74075311fc88504b1db890187a3cd0f887a5b10f5525f8e2ef55bfdb9", size = 12050869, upload_time = "2025-07-07T19:19:19.265Z" }, + { url = "https://files.pythonhosted.org/packages/55/79/20d746b0a96c67203a5bee5fb4e00ac49c3e8009a39e1f78de264ecc5729/pandas-2.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e5635178b387bd2ba4ac040f82bc2ef6e6b500483975c4ebacd34bec945fda12", size = 12750218, upload_time = "2025-07-07T19:19:21.547Z" }, + { url = "https://files.pythonhosted.org/packages/7c/0f/145c8b41e48dbf03dd18fdd7f24f8ba95b8254a97a3379048378f33e7838/pandas-2.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6f3bf5ec947526106399a9e1d26d40ee2b259c66422efdf4de63c848492d91bb", size = 13416763, upload_time = "2025-07-07T19:19:23.939Z" }, + { url = "https://files.pythonhosted.org/packages/b2/c0/54415af59db5cdd86a3d3bf79863e8cc3fa9ed265f0745254061ac09d5f2/pandas-2.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:1c78cf43c8fde236342a1cb2c34bcff89564a7bfed7e474ed2fffa6aed03a956", size = 10987482, upload_time = "2025-07-07T19:19:42.699Z" }, + { url = "https://files.pythonhosted.org/packages/48/64/2fd2e400073a1230e13b8cd604c9bc95d9e3b962e5d44088ead2e8f0cfec/pandas-2.3.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:8dfc17328e8da77be3cf9f47509e5637ba8f137148ed0e9b5241e1baf526e20a", size = 12029159, upload_time = "2025-07-07T19:19:26.362Z" }, + { url = "https://files.pythonhosted.org/packages/d8/0a/d84fd79b0293b7ef88c760d7dca69828d867c89b6d9bc52d6a27e4d87316/pandas-2.3.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:ec6c851509364c59a5344458ab935e6451b31b818be467eb24b0fe89bd05b6b9", size = 11393287, upload_time = "2025-07-07T19:19:29.157Z" }, + { url = "https://files.pythonhosted.org/packages/50/ae/ff885d2b6e88f3c7520bb74ba319268b42f05d7e583b5dded9837da2723f/pandas-2.3.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:911580460fc4884d9b05254b38a6bfadddfcc6aaef856fb5859e7ca202e45275", size = 11309381, upload_time = "2025-07-07T19:19:31.436Z" }, + { url = "https://files.pythonhosted.org/packages/85/86/1fa345fc17caf5d7780d2699985c03dbe186c68fee00b526813939062bb0/pandas-2.3.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f4d6feeba91744872a600e6edbbd5b033005b431d5ae8379abee5bcfa479fab", size = 11883998, upload_time = "2025-07-07T19:19:34.267Z" }, + { url = "https://files.pythonhosted.org/packages/81/aa/e58541a49b5e6310d89474333e994ee57fea97c8aaa8fc7f00b873059bbf/pandas-2.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:fe37e757f462d31a9cd7580236a82f353f5713a80e059a29753cf938c6775d96", size = 12704705, upload_time = "2025-07-07T19:19:36.856Z" }, + { url = "https://files.pythonhosted.org/packages/d5/f9/07086f5b0f2a19872554abeea7658200824f5835c58a106fa8f2ae96a46c/pandas-2.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5db9637dbc24b631ff3707269ae4559bce4b7fd75c1c4d7e13f40edc42df4444", size = 13189044, upload_time = "2025-07-07T19:19:39.999Z" }, +] + +[[package]] +name = "parso" +version = "0.8.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/66/94/68e2e17afaa9169cf6412ab0f28623903be73d1b32e208d9e8e541bb086d/parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d", size = 400609, upload_time = "2024-04-05T09:43:55.897Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c6/ac/dac4a63f978e4dcb3c6d3a78c4d8e0192a113d288502a1216950c41b1027/parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18", size = 103650, upload_time = "2024-04-05T09:43:53.299Z" }, +] + +[[package]] +name = "pathspec" +version = "0.12.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ca/bc/f35b8446f4531a7cb215605d100cd88b7ac6f44ab3fc94870c120ab3adbf/pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712", size = 51043, upload_time = "2023-12-10T22:30:45Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", size = 31191, upload_time = "2023-12-10T22:30:43.14Z" }, +] + +[[package]] +name = "petl" +version = "1.7.16" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/99/28/ce7321fbd3b981fd9c212adf7455e0e4e42babebd83b92e24f8265d13dd3/petl-1.7.16.tar.gz", hash = "sha256:9c2fea64d859da45e120fd86d471e5387396cc45d5d4986efa79679f18eb8752", size = 420780, upload_time = "2025-04-04T23:54:50.921Z" } + +[[package]] +name = "pexpect" +version = "4.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ptyprocess" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450, upload_time = "2023-11-25T09:07:26.339Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772, upload_time = "2023-11-25T06:56:14.81Z" }, +] + +[[package]] +name = "pillow" +version = "11.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/0d/d0d6dea55cd152ce3d6767bb38a8fc10e33796ba4ba210cbab9354b6d238/pillow-11.3.0.tar.gz", hash = "sha256:3828ee7586cd0b2091b6209e5ad53e20d0649bbe87164a459d0676e035e8f523", size = 47113069, upload_time = "2025-07-01T09:16:30.666Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/40/fe/1bc9b3ee13f68487a99ac9529968035cca2f0a51ec36892060edcc51d06a/pillow-11.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fdae223722da47b024b867c1ea0be64e0df702c5e0a60e27daad39bf960dd1e4", size = 5278800, upload_time = "2025-07-01T09:14:17.648Z" }, + { url = "https://files.pythonhosted.org/packages/2c/32/7e2ac19b5713657384cec55f89065fb306b06af008cfd87e572035b27119/pillow-11.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:921bd305b10e82b4d1f5e802b6850677f965d8394203d182f078873851dada69", size = 4686296, upload_time = "2025-07-01T09:14:19.828Z" }, + { url = "https://files.pythonhosted.org/packages/8e/1e/b9e12bbe6e4c2220effebc09ea0923a07a6da1e1f1bfbc8d7d29a01ce32b/pillow-11.3.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:eb76541cba2f958032d79d143b98a3a6b3ea87f0959bbe256c0b5e416599fd5d", size = 5871726, upload_time = "2025-07-03T13:10:04.448Z" }, + { url = "https://files.pythonhosted.org/packages/8d/33/e9200d2bd7ba00dc3ddb78df1198a6e80d7669cce6c2bdbeb2530a74ec58/pillow-11.3.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:67172f2944ebba3d4a7b54f2e95c786a3a50c21b88456329314caaa28cda70f6", size = 7644652, upload_time = "2025-07-03T13:10:10.391Z" }, + { url = "https://files.pythonhosted.org/packages/41/f1/6f2427a26fc683e00d985bc391bdd76d8dd4e92fac33d841127eb8fb2313/pillow-11.3.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97f07ed9f56a3b9b5f49d3661dc9607484e85c67e27f3e8be2c7d28ca032fec7", size = 5977787, upload_time = "2025-07-01T09:14:21.63Z" }, + { url = "https://files.pythonhosted.org/packages/e4/c9/06dd4a38974e24f932ff5f98ea3c546ce3f8c995d3f0985f8e5ba48bba19/pillow-11.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:676b2815362456b5b3216b4fd5bd89d362100dc6f4945154ff172e206a22c024", size = 6645236, upload_time = "2025-07-01T09:14:23.321Z" }, + { url = "https://files.pythonhosted.org/packages/40/e7/848f69fb79843b3d91241bad658e9c14f39a32f71a301bcd1d139416d1be/pillow-11.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3e184b2f26ff146363dd07bde8b711833d7b0202e27d13540bfe2e35a323a809", size = 6086950, upload_time = "2025-07-01T09:14:25.237Z" }, + { url = "https://files.pythonhosted.org/packages/0b/1a/7cff92e695a2a29ac1958c2a0fe4c0b2393b60aac13b04a4fe2735cad52d/pillow-11.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6be31e3fc9a621e071bc17bb7de63b85cbe0bfae91bb0363c893cbe67247780d", size = 6723358, upload_time = "2025-07-01T09:14:27.053Z" }, + { url = "https://files.pythonhosted.org/packages/26/7d/73699ad77895f69edff76b0f332acc3d497f22f5d75e5360f78cbcaff248/pillow-11.3.0-cp312-cp312-win32.whl", hash = "sha256:7b161756381f0918e05e7cb8a371fff367e807770f8fe92ecb20d905d0e1c149", size = 6275079, upload_time = "2025-07-01T09:14:30.104Z" }, + { url = "https://files.pythonhosted.org/packages/8c/ce/e7dfc873bdd9828f3b6e5c2bbb74e47a98ec23cc5c74fc4e54462f0d9204/pillow-11.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:a6444696fce635783440b7f7a9fc24b3ad10a9ea3f0ab66c5905be1c19ccf17d", size = 6986324, upload_time = "2025-07-01T09:14:31.899Z" }, + { url = "https://files.pythonhosted.org/packages/16/8f/b13447d1bf0b1f7467ce7d86f6e6edf66c0ad7cf44cf5c87a37f9bed9936/pillow-11.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:2aceea54f957dd4448264f9bf40875da0415c83eb85f55069d89c0ed436e3542", size = 2423067, upload_time = "2025-07-01T09:14:33.709Z" }, + { url = "https://files.pythonhosted.org/packages/1e/93/0952f2ed8db3a5a4c7a11f91965d6184ebc8cd7cbb7941a260d5f018cd2d/pillow-11.3.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:1c627742b539bba4309df89171356fcb3cc5a9178355b2727d1b74a6cf155fbd", size = 2128328, upload_time = "2025-07-01T09:14:35.276Z" }, + { url = "https://files.pythonhosted.org/packages/4b/e8/100c3d114b1a0bf4042f27e0f87d2f25e857e838034e98ca98fe7b8c0a9c/pillow-11.3.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:30b7c02f3899d10f13d7a48163c8969e4e653f8b43416d23d13d1bbfdc93b9f8", size = 2170652, upload_time = "2025-07-01T09:14:37.203Z" }, + { url = "https://files.pythonhosted.org/packages/aa/86/3f758a28a6e381758545f7cdb4942e1cb79abd271bea932998fc0db93cb6/pillow-11.3.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:7859a4cc7c9295f5838015d8cc0a9c215b77e43d07a25e460f35cf516df8626f", size = 2227443, upload_time = "2025-07-01T09:14:39.344Z" }, + { url = "https://files.pythonhosted.org/packages/01/f4/91d5b3ffa718df2f53b0dc109877993e511f4fd055d7e9508682e8aba092/pillow-11.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ec1ee50470b0d050984394423d96325b744d55c701a439d2bd66089bff963d3c", size = 5278474, upload_time = "2025-07-01T09:14:41.843Z" }, + { url = "https://files.pythonhosted.org/packages/f9/0e/37d7d3eca6c879fbd9dba21268427dffda1ab00d4eb05b32923d4fbe3b12/pillow-11.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7db51d222548ccfd274e4572fdbf3e810a5e66b00608862f947b163e613b67dd", size = 4686038, upload_time = "2025-07-01T09:14:44.008Z" }, + { url = "https://files.pythonhosted.org/packages/ff/b0/3426e5c7f6565e752d81221af9d3676fdbb4f352317ceafd42899aaf5d8a/pillow-11.3.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2d6fcc902a24ac74495df63faad1884282239265c6839a0a6416d33faedfae7e", size = 5864407, upload_time = "2025-07-03T13:10:15.628Z" }, + { url = "https://files.pythonhosted.org/packages/fc/c1/c6c423134229f2a221ee53f838d4be9d82bab86f7e2f8e75e47b6bf6cd77/pillow-11.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f0f5d8f4a08090c6d6d578351a2b91acf519a54986c055af27e7a93feae6d3f1", size = 7639094, upload_time = "2025-07-03T13:10:21.857Z" }, + { url = "https://files.pythonhosted.org/packages/ba/c9/09e6746630fe6372c67c648ff9deae52a2bc20897d51fa293571977ceb5d/pillow-11.3.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c37d8ba9411d6003bba9e518db0db0c58a680ab9fe5179f040b0463644bc9805", size = 5973503, upload_time = "2025-07-01T09:14:45.698Z" }, + { url = "https://files.pythonhosted.org/packages/d5/1c/a2a29649c0b1983d3ef57ee87a66487fdeb45132df66ab30dd37f7dbe162/pillow-11.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:13f87d581e71d9189ab21fe0efb5a23e9f28552d5be6979e84001d3b8505abe8", size = 6642574, upload_time = "2025-07-01T09:14:47.415Z" }, + { url = "https://files.pythonhosted.org/packages/36/de/d5cc31cc4b055b6c6fd990e3e7f0f8aaf36229a2698501bcb0cdf67c7146/pillow-11.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:023f6d2d11784a465f09fd09a34b150ea4672e85fb3d05931d89f373ab14abb2", size = 6084060, upload_time = "2025-07-01T09:14:49.636Z" }, + { url = "https://files.pythonhosted.org/packages/d5/ea/502d938cbaeec836ac28a9b730193716f0114c41325db428e6b280513f09/pillow-11.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:45dfc51ac5975b938e9809451c51734124e73b04d0f0ac621649821a63852e7b", size = 6721407, upload_time = "2025-07-01T09:14:51.962Z" }, + { url = "https://files.pythonhosted.org/packages/45/9c/9c5e2a73f125f6cbc59cc7087c8f2d649a7ae453f83bd0362ff7c9e2aee2/pillow-11.3.0-cp313-cp313-win32.whl", hash = "sha256:a4d336baed65d50d37b88ca5b60c0fa9d81e3a87d4a7930d3880d1624d5b31f3", size = 6273841, upload_time = "2025-07-01T09:14:54.142Z" }, + { url = "https://files.pythonhosted.org/packages/23/85/397c73524e0cd212067e0c969aa245b01d50183439550d24d9f55781b776/pillow-11.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:0bce5c4fd0921f99d2e858dc4d4d64193407e1b99478bc5cacecba2311abde51", size = 6978450, upload_time = "2025-07-01T09:14:56.436Z" }, + { url = "https://files.pythonhosted.org/packages/17/d2/622f4547f69cd173955194b78e4d19ca4935a1b0f03a302d655c9f6aae65/pillow-11.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:1904e1264881f682f02b7f8167935cce37bc97db457f8e7849dc3a6a52b99580", size = 2423055, upload_time = "2025-07-01T09:14:58.072Z" }, + { url = "https://files.pythonhosted.org/packages/dd/80/a8a2ac21dda2e82480852978416cfacd439a4b490a501a288ecf4fe2532d/pillow-11.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:4c834a3921375c48ee6b9624061076bc0a32a60b5532b322cc0ea64e639dd50e", size = 5281110, upload_time = "2025-07-01T09:14:59.79Z" }, + { url = "https://files.pythonhosted.org/packages/44/d6/b79754ca790f315918732e18f82a8146d33bcd7f4494380457ea89eb883d/pillow-11.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5e05688ccef30ea69b9317a9ead994b93975104a677a36a8ed8106be9260aa6d", size = 4689547, upload_time = "2025-07-01T09:15:01.648Z" }, + { url = "https://files.pythonhosted.org/packages/49/20/716b8717d331150cb00f7fdd78169c01e8e0c219732a78b0e59b6bdb2fd6/pillow-11.3.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1019b04af07fc0163e2810167918cb5add8d74674b6267616021ab558dc98ced", size = 5901554, upload_time = "2025-07-03T13:10:27.018Z" }, + { url = "https://files.pythonhosted.org/packages/74/cf/a9f3a2514a65bb071075063a96f0a5cf949c2f2fce683c15ccc83b1c1cab/pillow-11.3.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f944255db153ebb2b19c51fe85dd99ef0ce494123f21b9db4877ffdfc5590c7c", size = 7669132, upload_time = "2025-07-03T13:10:33.01Z" }, + { url = "https://files.pythonhosted.org/packages/98/3c/da78805cbdbee9cb43efe8261dd7cc0b4b93f2ac79b676c03159e9db2187/pillow-11.3.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1f85acb69adf2aaee8b7da124efebbdb959a104db34d3a2cb0f3793dbae422a8", size = 6005001, upload_time = "2025-07-01T09:15:03.365Z" }, + { url = "https://files.pythonhosted.org/packages/6c/fa/ce044b91faecf30e635321351bba32bab5a7e034c60187fe9698191aef4f/pillow-11.3.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:05f6ecbeff5005399bb48d198f098a9b4b6bdf27b8487c7f38ca16eeb070cd59", size = 6668814, upload_time = "2025-07-01T09:15:05.655Z" }, + { url = "https://files.pythonhosted.org/packages/7b/51/90f9291406d09bf93686434f9183aba27b831c10c87746ff49f127ee80cb/pillow-11.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a7bc6e6fd0395bc052f16b1a8670859964dbd7003bd0af2ff08342eb6e442cfe", size = 6113124, upload_time = "2025-07-01T09:15:07.358Z" }, + { url = "https://files.pythonhosted.org/packages/cd/5a/6fec59b1dfb619234f7636d4157d11fb4e196caeee220232a8d2ec48488d/pillow-11.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:83e1b0161c9d148125083a35c1c5a89db5b7054834fd4387499e06552035236c", size = 6747186, upload_time = "2025-07-01T09:15:09.317Z" }, + { url = "https://files.pythonhosted.org/packages/49/6b/00187a044f98255225f172de653941e61da37104a9ea60e4f6887717e2b5/pillow-11.3.0-cp313-cp313t-win32.whl", hash = "sha256:2a3117c06b8fb646639dce83694f2f9eac405472713fcb1ae887469c0d4f6788", size = 6277546, upload_time = "2025-07-01T09:15:11.311Z" }, + { url = "https://files.pythonhosted.org/packages/e8/5c/6caaba7e261c0d75bab23be79f1d06b5ad2a2ae49f028ccec801b0e853d6/pillow-11.3.0-cp313-cp313t-win_amd64.whl", hash = "sha256:857844335c95bea93fb39e0fa2726b4d9d758850b34075a7e3ff4f4fa3aa3b31", size = 6985102, upload_time = "2025-07-01T09:15:13.164Z" }, + { url = "https://files.pythonhosted.org/packages/f3/7e/b623008460c09a0cb38263c93b828c666493caee2eb34ff67f778b87e58c/pillow-11.3.0-cp313-cp313t-win_arm64.whl", hash = "sha256:8797edc41f3e8536ae4b10897ee2f637235c94f27404cac7297f7b607dd0716e", size = 2424803, upload_time = "2025-07-01T09:15:15.695Z" }, + { url = "https://files.pythonhosted.org/packages/73/f4/04905af42837292ed86cb1b1dabe03dce1edc008ef14c473c5c7e1443c5d/pillow-11.3.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:d9da3df5f9ea2a89b81bb6087177fb1f4d1c7146d583a3fe5c672c0d94e55e12", size = 5278520, upload_time = "2025-07-01T09:15:17.429Z" }, + { url = "https://files.pythonhosted.org/packages/41/b0/33d79e377a336247df6348a54e6d2a2b85d644ca202555e3faa0cf811ecc/pillow-11.3.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0b275ff9b04df7b640c59ec5a3cb113eefd3795a8df80bac69646ef699c6981a", size = 4686116, upload_time = "2025-07-01T09:15:19.423Z" }, + { url = "https://files.pythonhosted.org/packages/49/2d/ed8bc0ab219ae8768f529597d9509d184fe8a6c4741a6864fea334d25f3f/pillow-11.3.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0743841cabd3dba6a83f38a92672cccbd69af56e3e91777b0ee7f4dba4385632", size = 5864597, upload_time = "2025-07-03T13:10:38.404Z" }, + { url = "https://files.pythonhosted.org/packages/b5/3d/b932bb4225c80b58dfadaca9d42d08d0b7064d2d1791b6a237f87f661834/pillow-11.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2465a69cf967b8b49ee1b96d76718cd98c4e925414ead59fdf75cf0fd07df673", size = 7638246, upload_time = "2025-07-03T13:10:44.987Z" }, + { url = "https://files.pythonhosted.org/packages/09/b5/0487044b7c096f1b48f0d7ad416472c02e0e4bf6919541b111efd3cae690/pillow-11.3.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:41742638139424703b4d01665b807c6468e23e699e8e90cffefe291c5832b027", size = 5973336, upload_time = "2025-07-01T09:15:21.237Z" }, + { url = "https://files.pythonhosted.org/packages/a8/2d/524f9318f6cbfcc79fbc004801ea6b607ec3f843977652fdee4857a7568b/pillow-11.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:93efb0b4de7e340d99057415c749175e24c8864302369e05914682ba642e5d77", size = 6642699, upload_time = "2025-07-01T09:15:23.186Z" }, + { url = "https://files.pythonhosted.org/packages/6f/d2/a9a4f280c6aefedce1e8f615baaa5474e0701d86dd6f1dede66726462bbd/pillow-11.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7966e38dcd0fa11ca390aed7c6f20454443581d758242023cf36fcb319b1a874", size = 6083789, upload_time = "2025-07-01T09:15:25.1Z" }, + { url = "https://files.pythonhosted.org/packages/fe/54/86b0cd9dbb683a9d5e960b66c7379e821a19be4ac5810e2e5a715c09a0c0/pillow-11.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:98a9afa7b9007c67ed84c57c9e0ad86a6000da96eaa638e4f8abe5b65ff83f0a", size = 6720386, upload_time = "2025-07-01T09:15:27.378Z" }, + { url = "https://files.pythonhosted.org/packages/e7/95/88efcaf384c3588e24259c4203b909cbe3e3c2d887af9e938c2022c9dd48/pillow-11.3.0-cp314-cp314-win32.whl", hash = "sha256:02a723e6bf909e7cea0dac1b0e0310be9d7650cd66222a5f1c571455c0a45214", size = 6370911, upload_time = "2025-07-01T09:15:29.294Z" }, + { url = "https://files.pythonhosted.org/packages/2e/cc/934e5820850ec5eb107e7b1a72dd278140731c669f396110ebc326f2a503/pillow-11.3.0-cp314-cp314-win_amd64.whl", hash = "sha256:a418486160228f64dd9e9efcd132679b7a02a5f22c982c78b6fc7dab3fefb635", size = 7117383, upload_time = "2025-07-01T09:15:31.128Z" }, + { url = "https://files.pythonhosted.org/packages/d6/e9/9c0a616a71da2a5d163aa37405e8aced9a906d574b4a214bede134e731bc/pillow-11.3.0-cp314-cp314-win_arm64.whl", hash = "sha256:155658efb5e044669c08896c0c44231c5e9abcaadbc5cd3648df2f7c0b96b9a6", size = 2511385, upload_time = "2025-07-01T09:15:33.328Z" }, + { url = "https://files.pythonhosted.org/packages/1a/33/c88376898aff369658b225262cd4f2659b13e8178e7534df9e6e1fa289f6/pillow-11.3.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:59a03cdf019efbfeeed910bf79c7c93255c3d54bc45898ac2a4140071b02b4ae", size = 5281129, upload_time = "2025-07-01T09:15:35.194Z" }, + { url = "https://files.pythonhosted.org/packages/1f/70/d376247fb36f1844b42910911c83a02d5544ebd2a8bad9efcc0f707ea774/pillow-11.3.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f8a5827f84d973d8636e9dc5764af4f0cf2318d26744b3d902931701b0d46653", size = 4689580, upload_time = "2025-07-01T09:15:37.114Z" }, + { url = "https://files.pythonhosted.org/packages/eb/1c/537e930496149fbac69efd2fc4329035bbe2e5475b4165439e3be9cb183b/pillow-11.3.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ee92f2fd10f4adc4b43d07ec5e779932b4eb3dbfbc34790ada5a6669bc095aa6", size = 5902860, upload_time = "2025-07-03T13:10:50.248Z" }, + { url = "https://files.pythonhosted.org/packages/bd/57/80f53264954dcefeebcf9dae6e3eb1daea1b488f0be8b8fef12f79a3eb10/pillow-11.3.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c96d333dcf42d01f47b37e0979b6bd73ec91eae18614864622d9b87bbd5bbf36", size = 7670694, upload_time = "2025-07-03T13:10:56.432Z" }, + { url = "https://files.pythonhosted.org/packages/70/ff/4727d3b71a8578b4587d9c276e90efad2d6fe0335fd76742a6da08132e8c/pillow-11.3.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4c96f993ab8c98460cd0c001447bff6194403e8b1d7e149ade5f00594918128b", size = 6005888, upload_time = "2025-07-01T09:15:39.436Z" }, + { url = "https://files.pythonhosted.org/packages/05/ae/716592277934f85d3be51d7256f3636672d7b1abfafdc42cf3f8cbd4b4c8/pillow-11.3.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:41342b64afeba938edb034d122b2dda5db2139b9a4af999729ba8818e0056477", size = 6670330, upload_time = "2025-07-01T09:15:41.269Z" }, + { url = "https://files.pythonhosted.org/packages/e7/bb/7fe6cddcc8827b01b1a9766f5fdeb7418680744f9082035bdbabecf1d57f/pillow-11.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:068d9c39a2d1b358eb9f245ce7ab1b5c3246c7c8c7d9ba58cfa5b43146c06e50", size = 6114089, upload_time = "2025-07-01T09:15:43.13Z" }, + { url = "https://files.pythonhosted.org/packages/8b/f5/06bfaa444c8e80f1a8e4bff98da9c83b37b5be3b1deaa43d27a0db37ef84/pillow-11.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a1bc6ba083b145187f648b667e05a2534ecc4b9f2784c2cbe3089e44868f2b9b", size = 6748206, upload_time = "2025-07-01T09:15:44.937Z" }, + { url = "https://files.pythonhosted.org/packages/f0/77/bc6f92a3e8e6e46c0ca78abfffec0037845800ea38c73483760362804c41/pillow-11.3.0-cp314-cp314t-win32.whl", hash = "sha256:118ca10c0d60b06d006be10a501fd6bbdfef559251ed31b794668ed569c87e12", size = 6377370, upload_time = "2025-07-01T09:15:46.673Z" }, + { url = "https://files.pythonhosted.org/packages/4a/82/3a721f7d69dca802befb8af08b7c79ebcab461007ce1c18bd91a5d5896f9/pillow-11.3.0-cp314-cp314t-win_amd64.whl", hash = "sha256:8924748b688aa210d79883357d102cd64690e56b923a186f35a82cbc10f997db", size = 7121500, upload_time = "2025-07-01T09:15:48.512Z" }, + { url = "https://files.pythonhosted.org/packages/89/c7/5572fa4a3f45740eaab6ae86fcdf7195b55beac1371ac8c619d880cfe948/pillow-11.3.0-cp314-cp314t-win_arm64.whl", hash = "sha256:79ea0d14d3ebad43ec77ad5272e6ff9bba5b679ef73375ea760261207fa8e0aa", size = 2512835, upload_time = "2025-07-01T09:15:50.399Z" }, +] + +[[package]] +name = "pint" +version = "0.24.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "flexcache" }, + { name = "flexparser" }, + { name = "platformdirs" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/20/bb/52b15ddf7b7706ed591134a895dbf6e41c8348171fb635e655e0a4bbb0ea/pint-0.24.4.tar.gz", hash = "sha256:35275439b574837a6cd3020a5a4a73645eb125ce4152a73a2f126bf164b91b80", size = 342225, upload_time = "2024-11-07T16:29:46.061Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/16/bd2f5904557265882108dc2e04f18abc05ab0c2b7082ae9430091daf1d5c/Pint-0.24.4-py3-none-any.whl", hash = "sha256:aa54926c8772159fcf65f82cc0d34de6768c151b32ad1deb0331291c38fe7659", size = 302029, upload_time = "2024-11-07T16:29:43.976Z" }, +] + +[[package]] +name = "platformdirs" +version = "4.3.8" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fe/8b/3c73abc9c759ecd3f1f7ceff6685840859e8070c4d947c93fae71f6a0bf2/platformdirs-4.3.8.tar.gz", hash = "sha256:3d512d96e16bcb959a814c9f348431070822a6496326a4be0911c40b5a74c2bc", size = 21362, upload_time = "2025-05-07T22:47:42.121Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fe/39/979e8e21520d4e47a0bbe349e2713c0aac6f3d853d0e5b34d76206c439aa/platformdirs-4.3.8-py3-none-any.whl", hash = "sha256:ff7059bb7eb1179e2685604f4aaf157cfd9535242bd23742eadc3c13542139b4", size = 18567, upload_time = "2025-05-07T22:47:40.376Z" }, +] + +[[package]] +name = "pluggy" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload_time = "2025-05-15T12:30:07.975Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload_time = "2025-05-15T12:30:06.134Z" }, +] + +[[package]] +name = "ply" +version = "3.11" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e5/69/882ee5c9d017149285cab114ebeab373308ef0f874fcdac9beb90e0ac4da/ply-3.11.tar.gz", hash = "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3", size = 159130, upload_time = "2018-02-15T19:01:31.097Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a3/58/35da89ee790598a0700ea49b2a66594140f44dec458c07e8e3d4979137fc/ply-3.11-py2.py3-none-any.whl", hash = "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce", size = 49567, upload_time = "2018-02-15T19:01:27.172Z" }, +] + +[[package]] +name = "pre-commit" +version = "4.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cfgv" }, + { name = "identify" }, + { name = "nodeenv" }, + { name = "pyyaml" }, + { name = "virtualenv" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/08/39/679ca9b26c7bb2999ff122d50faa301e49af82ca9c066ec061cfbc0c6784/pre_commit-4.2.0.tar.gz", hash = "sha256:601283b9757afd87d40c4c4a9b2b5de9637a8ea02eaff7adc2d0fb4e04841146", size = 193424, upload_time = "2025-03-18T21:35:20.987Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/74/a88bf1b1efeae488a0c0b7bdf71429c313722d1fc0f377537fbe554e6180/pre_commit-4.2.0-py2.py3-none-any.whl", hash = "sha256:a009ca7205f1eb497d10b845e52c838a98b6cdd2102a6c8e4540e94ee75c58bd", size = 220707, upload_time = "2025-03-18T21:35:19.343Z" }, +] + +[[package]] +name = "prompt-toolkit" +version = "3.0.51" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "wcwidth" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bb/6e/9d084c929dfe9e3bfe0c6a47e31f78a25c54627d64a66e884a8bf5474f1c/prompt_toolkit-3.0.51.tar.gz", hash = "sha256:931a162e3b27fc90c86f1b48bb1fb2c528c2761475e57c9c06de13311c7b54ed", size = 428940, upload_time = "2025-04-15T09:18:47.731Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ce/4f/5249960887b1fbe561d9ff265496d170b55a735b76724f10ef19f9e40716/prompt_toolkit-3.0.51-py3-none-any.whl", hash = "sha256:52742911fde84e2d423e2f9a4cf1de7d7ac4e51958f648d9540e0fb8db077b07", size = 387810, upload_time = "2025-04-15T09:18:44.753Z" }, +] + +[[package]] +name = "psutil" +version = "7.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2a/80/336820c1ad9286a4ded7e845b2eccfcb27851ab8ac6abece774a6ff4d3de/psutil-7.0.0.tar.gz", hash = "sha256:7be9c3eba38beccb6495ea33afd982a44074b78f28c434a1f51cc07fd315c456", size = 497003, upload_time = "2025-02-13T21:54:07.946Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ed/e6/2d26234410f8b8abdbf891c9da62bee396583f713fb9f3325a4760875d22/psutil-7.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:101d71dc322e3cffd7cea0650b09b3d08b8e7c4109dd6809fe452dfd00e58b25", size = 238051, upload_time = "2025-02-13T21:54:12.36Z" }, + { url = "https://files.pythonhosted.org/packages/04/8b/30f930733afe425e3cbfc0e1468a30a18942350c1a8816acfade80c005c4/psutil-7.0.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:39db632f6bb862eeccf56660871433e111b6ea58f2caea825571951d4b6aa3da", size = 239535, upload_time = "2025-02-13T21:54:16.07Z" }, + { url = "https://files.pythonhosted.org/packages/2a/ed/d362e84620dd22876b55389248e522338ed1bf134a5edd3b8231d7207f6d/psutil-7.0.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fcee592b4c6f146991ca55919ea3d1f8926497a713ed7faaf8225e174581e91", size = 275004, upload_time = "2025-02-13T21:54:18.662Z" }, + { url = "https://files.pythonhosted.org/packages/bf/b9/b0eb3f3cbcb734d930fdf839431606844a825b23eaf9a6ab371edac8162c/psutil-7.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b1388a4f6875d7e2aff5c4ca1cc16c545ed41dd8bb596cefea80111db353a34", size = 277986, upload_time = "2025-02-13T21:54:21.811Z" }, + { url = "https://files.pythonhosted.org/packages/eb/a2/709e0fe2f093556c17fbafda93ac032257242cabcc7ff3369e2cb76a97aa/psutil-7.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5f098451abc2828f7dc6b58d44b532b22f2088f4999a937557b603ce72b1993", size = 279544, upload_time = "2025-02-13T21:54:24.68Z" }, + { url = "https://files.pythonhosted.org/packages/50/e6/eecf58810b9d12e6427369784efe814a1eec0f492084ce8eb8f4d89d6d61/psutil-7.0.0-cp37-abi3-win32.whl", hash = "sha256:ba3fcef7523064a6c9da440fc4d6bd07da93ac726b5733c29027d7dc95b39d99", size = 241053, upload_time = "2025-02-13T21:54:34.31Z" }, + { url = "https://files.pythonhosted.org/packages/50/1b/6921afe68c74868b4c9fa424dad3be35b095e16687989ebbb50ce4fceb7c/psutil-7.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:4cf3d4eb1aa9b348dec30105c55cd9b7d4629285735a102beb4441e38db90553", size = 244885, upload_time = "2025-02-13T21:54:37.486Z" }, +] + +[[package]] +name = "ptyprocess" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220", size = 70762, upload_time = "2020-12-28T15:15:30.155Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", size = 13993, upload_time = "2020-12-28T15:15:28.35Z" }, +] + +[[package]] +name = "pure-eval" +version = "0.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/05/0a34433a064256a578f1783a10da6df098ceaa4a57bbeaa96a6c0352786b/pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42", size = 19752, upload_time = "2024-07-21T12:58:21.801Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842, upload_time = "2024-07-21T12:58:20.04Z" }, +] + +[[package]] +name = "pyarrow" +version = "20.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/ee/a7810cb9f3d6e9238e61d312076a9859bf3668fd21c69744de9532383912/pyarrow-20.0.0.tar.gz", hash = "sha256:febc4a913592573c8d5805091a6c2b5064c8bd6e002131f01061797d91c783c1", size = 1125187, upload_time = "2025-04-27T12:34:23.264Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a1/d6/0c10e0d54f6c13eb464ee9b67a68b8c71bcf2f67760ef5b6fbcddd2ab05f/pyarrow-20.0.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:75a51a5b0eef32727a247707d4755322cb970be7e935172b6a3a9f9ae98404ba", size = 30815067, upload_time = "2025-04-27T12:29:44.384Z" }, + { url = "https://files.pythonhosted.org/packages/7e/e2/04e9874abe4094a06fd8b0cbb0f1312d8dd7d707f144c2ec1e5e8f452ffa/pyarrow-20.0.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:211d5e84cecc640c7a3ab900f930aaff5cd2702177e0d562d426fb7c4f737781", size = 32297128, upload_time = "2025-04-27T12:29:52.038Z" }, + { url = "https://files.pythonhosted.org/packages/31/fd/c565e5dcc906a3b471a83273039cb75cb79aad4a2d4a12f76cc5ae90a4b8/pyarrow-20.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ba3cf4182828be7a896cbd232aa8dd6a31bd1f9e32776cc3796c012855e1199", size = 41334890, upload_time = "2025-04-27T12:29:59.452Z" }, + { url = "https://files.pythonhosted.org/packages/af/a9/3bdd799e2c9b20c1ea6dc6fa8e83f29480a97711cf806e823f808c2316ac/pyarrow-20.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c3a01f313ffe27ac4126f4c2e5ea0f36a5fc6ab51f8726cf41fee4b256680bd", size = 42421775, upload_time = "2025-04-27T12:30:06.875Z" }, + { url = "https://files.pythonhosted.org/packages/10/f7/da98ccd86354c332f593218101ae56568d5dcedb460e342000bd89c49cc1/pyarrow-20.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:a2791f69ad72addd33510fec7bb14ee06c2a448e06b649e264c094c5b5f7ce28", size = 40687231, upload_time = "2025-04-27T12:30:13.954Z" }, + { url = "https://files.pythonhosted.org/packages/bb/1b/2168d6050e52ff1e6cefc61d600723870bf569cbf41d13db939c8cf97a16/pyarrow-20.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:4250e28a22302ce8692d3a0e8ec9d9dde54ec00d237cff4dfa9c1fbf79e472a8", size = 42295639, upload_time = "2025-04-27T12:30:21.949Z" }, + { url = "https://files.pythonhosted.org/packages/b2/66/2d976c0c7158fd25591c8ca55aee026e6d5745a021915a1835578707feb3/pyarrow-20.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:89e030dc58fc760e4010148e6ff164d2f44441490280ef1e97a542375e41058e", size = 42908549, upload_time = "2025-04-27T12:30:29.551Z" }, + { url = "https://files.pythonhosted.org/packages/31/a9/dfb999c2fc6911201dcbf348247f9cc382a8990f9ab45c12eabfd7243a38/pyarrow-20.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6102b4864d77102dbbb72965618e204e550135a940c2534711d5ffa787df2a5a", size = 44557216, upload_time = "2025-04-27T12:30:36.977Z" }, + { url = "https://files.pythonhosted.org/packages/a0/8e/9adee63dfa3911be2382fb4d92e4b2e7d82610f9d9f668493bebaa2af50f/pyarrow-20.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:96d6a0a37d9c98be08f5ed6a10831d88d52cac7b13f5287f1e0f625a0de8062b", size = 25660496, upload_time = "2025-04-27T12:30:42.809Z" }, + { url = "https://files.pythonhosted.org/packages/9b/aa/daa413b81446d20d4dad2944110dcf4cf4f4179ef7f685dd5a6d7570dc8e/pyarrow-20.0.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:a15532e77b94c61efadde86d10957950392999503b3616b2ffcef7621a002893", size = 30798501, upload_time = "2025-04-27T12:30:48.351Z" }, + { url = "https://files.pythonhosted.org/packages/ff/75/2303d1caa410925de902d32ac215dc80a7ce7dd8dfe95358c165f2adf107/pyarrow-20.0.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:dd43f58037443af715f34f1322c782ec463a3c8a94a85fdb2d987ceb5658e061", size = 32277895, upload_time = "2025-04-27T12:30:55.238Z" }, + { url = "https://files.pythonhosted.org/packages/92/41/fe18c7c0b38b20811b73d1bdd54b1fccba0dab0e51d2048878042d84afa8/pyarrow-20.0.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa0d288143a8585806e3cc7c39566407aab646fb9ece164609dac1cfff45f6ae", size = 41327322, upload_time = "2025-04-27T12:31:05.587Z" }, + { url = "https://files.pythonhosted.org/packages/da/ab/7dbf3d11db67c72dbf36ae63dcbc9f30b866c153b3a22ef728523943eee6/pyarrow-20.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6953f0114f8d6f3d905d98e987d0924dabce59c3cda380bdfaa25a6201563b4", size = 42411441, upload_time = "2025-04-27T12:31:15.675Z" }, + { url = "https://files.pythonhosted.org/packages/90/c3/0c7da7b6dac863af75b64e2f827e4742161128c350bfe7955b426484e226/pyarrow-20.0.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:991f85b48a8a5e839b2128590ce07611fae48a904cae6cab1f089c5955b57eb5", size = 40677027, upload_time = "2025-04-27T12:31:24.631Z" }, + { url = "https://files.pythonhosted.org/packages/be/27/43a47fa0ff9053ab5203bb3faeec435d43c0d8bfa40179bfd076cdbd4e1c/pyarrow-20.0.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:97c8dc984ed09cb07d618d57d8d4b67a5100a30c3818c2fb0b04599f0da2de7b", size = 42281473, upload_time = "2025-04-27T12:31:31.311Z" }, + { url = "https://files.pythonhosted.org/packages/bc/0b/d56c63b078876da81bbb9ba695a596eabee9b085555ed12bf6eb3b7cab0e/pyarrow-20.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9b71daf534f4745818f96c214dbc1e6124d7daf059167330b610fc69b6f3d3e3", size = 42893897, upload_time = "2025-04-27T12:31:39.406Z" }, + { url = "https://files.pythonhosted.org/packages/92/ac/7d4bd020ba9145f354012838692d48300c1b8fe5634bfda886abcada67ed/pyarrow-20.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e8b88758f9303fa5a83d6c90e176714b2fd3852e776fc2d7e42a22dd6c2fb368", size = 44543847, upload_time = "2025-04-27T12:31:45.997Z" }, + { url = "https://files.pythonhosted.org/packages/9d/07/290f4abf9ca702c5df7b47739c1b2c83588641ddfa2cc75e34a301d42e55/pyarrow-20.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:30b3051b7975801c1e1d387e17c588d8ab05ced9b1e14eec57915f79869b5031", size = 25653219, upload_time = "2025-04-27T12:31:54.11Z" }, + { url = "https://files.pythonhosted.org/packages/95/df/720bb17704b10bd69dde086e1400b8eefb8f58df3f8ac9cff6c425bf57f1/pyarrow-20.0.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:ca151afa4f9b7bc45bcc791eb9a89e90a9eb2772767d0b1e5389609c7d03db63", size = 30853957, upload_time = "2025-04-27T12:31:59.215Z" }, + { url = "https://files.pythonhosted.org/packages/d9/72/0d5f875efc31baef742ba55a00a25213a19ea64d7176e0fe001c5d8b6e9a/pyarrow-20.0.0-cp313-cp313t-macosx_12_0_x86_64.whl", hash = "sha256:4680f01ecd86e0dd63e39eb5cd59ef9ff24a9d166db328679e36c108dc993d4c", size = 32247972, upload_time = "2025-04-27T12:32:05.369Z" }, + { url = "https://files.pythonhosted.org/packages/d5/bc/e48b4fa544d2eea72f7844180eb77f83f2030b84c8dad860f199f94307ed/pyarrow-20.0.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f4c8534e2ff059765647aa69b75d6543f9fef59e2cd4c6d18015192565d2b70", size = 41256434, upload_time = "2025-04-27T12:32:11.814Z" }, + { url = "https://files.pythonhosted.org/packages/c3/01/974043a29874aa2cf4f87fb07fd108828fc7362300265a2a64a94965e35b/pyarrow-20.0.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e1f8a47f4b4ae4c69c4d702cfbdfe4d41e18e5c7ef6f1bb1c50918c1e81c57b", size = 42353648, upload_time = "2025-04-27T12:32:20.766Z" }, + { url = "https://files.pythonhosted.org/packages/68/95/cc0d3634cde9ca69b0e51cbe830d8915ea32dda2157560dda27ff3b3337b/pyarrow-20.0.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:a1f60dc14658efaa927f8214734f6a01a806d7690be4b3232ba526836d216122", size = 40619853, upload_time = "2025-04-27T12:32:28.1Z" }, + { url = "https://files.pythonhosted.org/packages/29/c2/3ad40e07e96a3e74e7ed7cc8285aadfa84eb848a798c98ec0ad009eb6bcc/pyarrow-20.0.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:204a846dca751428991346976b914d6d2a82ae5b8316a6ed99789ebf976551e6", size = 42241743, upload_time = "2025-04-27T12:32:35.792Z" }, + { url = "https://files.pythonhosted.org/packages/eb/cb/65fa110b483339add6a9bc7b6373614166b14e20375d4daa73483755f830/pyarrow-20.0.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:f3b117b922af5e4c6b9a9115825726cac7d8b1421c37c2b5e24fbacc8930612c", size = 42839441, upload_time = "2025-04-27T12:32:46.64Z" }, + { url = "https://files.pythonhosted.org/packages/98/7b/f30b1954589243207d7a0fbc9997401044bf9a033eec78f6cb50da3f304a/pyarrow-20.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e724a3fd23ae5b9c010e7be857f4405ed5e679db5c93e66204db1a69f733936a", size = 44503279, upload_time = "2025-04-27T12:32:56.503Z" }, + { url = "https://files.pythonhosted.org/packages/37/40/ad395740cd641869a13bcf60851296c89624662575621968dcfafabaa7f6/pyarrow-20.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:82f1ee5133bd8f49d31be1299dc07f585136679666b502540db854968576faf9", size = 25944982, upload_time = "2025-04-27T12:33:04.72Z" }, +] + +[[package]] +name = "pycparser" +version = "2.22" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1d/b2/31537cf4b1ca988837256c910a668b553fceb8f069bedc4b1c826024b52c/pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", size = 172736, upload_time = "2024-03-30T13:22:22.564Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552, upload_time = "2024-03-30T13:22:20.476Z" }, +] + +[[package]] +name = "pydantic" +version = "2.11.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-types" }, + { name = "pydantic-core" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/00/dd/4325abf92c39ba8623b5af936ddb36ffcfe0beae70405d456ab1fb2f5b8c/pydantic-2.11.7.tar.gz", hash = "sha256:d989c3c6cb79469287b1569f7447a17848c998458d49ebe294e975b9baf0f0db", size = 788350, upload_time = "2025-06-14T08:33:17.137Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6a/c0/ec2b1c8712ca690e5d61979dee872603e92b8a32f94cc1b72d53beab008a/pydantic-2.11.7-py3-none-any.whl", hash = "sha256:dde5df002701f6de26248661f6835bbe296a47bf73990135c7d07ce741b9623b", size = 444782, upload_time = "2025-06-14T08:33:14.905Z" }, +] + +[[package]] +name = "pydantic-core" +version = "2.33.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ad/88/5f2260bdfae97aabf98f1778d43f69574390ad787afb646292a638c923d4/pydantic_core-2.33.2.tar.gz", hash = "sha256:7cb8bc3605c29176e1b105350d2e6474142d7c1bd1d9327c4a9bdb46bf827acc", size = 435195, upload_time = "2025-04-23T18:33:52.104Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/8a/2b41c97f554ec8c71f2a8a5f85cb56a8b0956addfe8b0efb5b3d77e8bdc3/pydantic_core-2.33.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a7ec89dc587667f22b6a0b6579c249fca9026ce7c333fc142ba42411fa243cdc", size = 2009000, upload_time = "2025-04-23T18:31:25.863Z" }, + { url = "https://files.pythonhosted.org/packages/a1/02/6224312aacb3c8ecbaa959897af57181fb6cf3a3d7917fd44d0f2917e6f2/pydantic_core-2.33.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3c6db6e52c6d70aa0d00d45cdb9b40f0433b96380071ea80b09277dba021ddf7", size = 1847996, upload_time = "2025-04-23T18:31:27.341Z" }, + { url = "https://files.pythonhosted.org/packages/d6/46/6dcdf084a523dbe0a0be59d054734b86a981726f221f4562aed313dbcb49/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e61206137cbc65e6d5256e1166f88331d3b6238e082d9f74613b9b765fb9025", size = 1880957, upload_time = "2025-04-23T18:31:28.956Z" }, + { url = "https://files.pythonhosted.org/packages/ec/6b/1ec2c03837ac00886ba8160ce041ce4e325b41d06a034adbef11339ae422/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb8c529b2819c37140eb51b914153063d27ed88e3bdc31b71198a198e921e011", size = 1964199, upload_time = "2025-04-23T18:31:31.025Z" }, + { url = "https://files.pythonhosted.org/packages/2d/1d/6bf34d6adb9debd9136bd197ca72642203ce9aaaa85cfcbfcf20f9696e83/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c52b02ad8b4e2cf14ca7b3d918f3eb0ee91e63b3167c32591e57c4317e134f8f", size = 2120296, upload_time = "2025-04-23T18:31:32.514Z" }, + { url = "https://files.pythonhosted.org/packages/e0/94/2bd0aaf5a591e974b32a9f7123f16637776c304471a0ab33cf263cf5591a/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96081f1605125ba0855dfda83f6f3df5ec90c61195421ba72223de35ccfb2f88", size = 2676109, upload_time = "2025-04-23T18:31:33.958Z" }, + { url = "https://files.pythonhosted.org/packages/f9/41/4b043778cf9c4285d59742281a769eac371b9e47e35f98ad321349cc5d61/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f57a69461af2a5fa6e6bbd7a5f60d3b7e6cebb687f55106933188e79ad155c1", size = 2002028, upload_time = "2025-04-23T18:31:39.095Z" }, + { url = "https://files.pythonhosted.org/packages/cb/d5/7bb781bf2748ce3d03af04d5c969fa1308880e1dca35a9bd94e1a96a922e/pydantic_core-2.33.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:572c7e6c8bb4774d2ac88929e3d1f12bc45714ae5ee6d9a788a9fb35e60bb04b", size = 2100044, upload_time = "2025-04-23T18:31:41.034Z" }, + { url = "https://files.pythonhosted.org/packages/fe/36/def5e53e1eb0ad896785702a5bbfd25eed546cdcf4087ad285021a90ed53/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:db4b41f9bd95fbe5acd76d89920336ba96f03e149097365afe1cb092fceb89a1", size = 2058881, upload_time = "2025-04-23T18:31:42.757Z" }, + { url = "https://files.pythonhosted.org/packages/01/6c/57f8d70b2ee57fc3dc8b9610315949837fa8c11d86927b9bb044f8705419/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:fa854f5cf7e33842a892e5c73f45327760bc7bc516339fda888c75ae60edaeb6", size = 2227034, upload_time = "2025-04-23T18:31:44.304Z" }, + { url = "https://files.pythonhosted.org/packages/27/b9/9c17f0396a82b3d5cbea4c24d742083422639e7bb1d5bf600e12cb176a13/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5f483cfb75ff703095c59e365360cb73e00185e01aaea067cd19acffd2ab20ea", size = 2234187, upload_time = "2025-04-23T18:31:45.891Z" }, + { url = "https://files.pythonhosted.org/packages/b0/6a/adf5734ffd52bf86d865093ad70b2ce543415e0e356f6cacabbc0d9ad910/pydantic_core-2.33.2-cp312-cp312-win32.whl", hash = "sha256:9cb1da0f5a471435a7bc7e439b8a728e8b61e59784b2af70d7c169f8dd8ae290", size = 1892628, upload_time = "2025-04-23T18:31:47.819Z" }, + { url = "https://files.pythonhosted.org/packages/43/e4/5479fecb3606c1368d496a825d8411e126133c41224c1e7238be58b87d7e/pydantic_core-2.33.2-cp312-cp312-win_amd64.whl", hash = "sha256:f941635f2a3d96b2973e867144fde513665c87f13fe0e193c158ac51bfaaa7b2", size = 1955866, upload_time = "2025-04-23T18:31:49.635Z" }, + { url = "https://files.pythonhosted.org/packages/0d/24/8b11e8b3e2be9dd82df4b11408a67c61bb4dc4f8e11b5b0fc888b38118b5/pydantic_core-2.33.2-cp312-cp312-win_arm64.whl", hash = "sha256:cca3868ddfaccfbc4bfb1d608e2ccaaebe0ae628e1416aeb9c4d88c001bb45ab", size = 1888894, upload_time = "2025-04-23T18:31:51.609Z" }, + { url = "https://files.pythonhosted.org/packages/46/8c/99040727b41f56616573a28771b1bfa08a3d3fe74d3d513f01251f79f172/pydantic_core-2.33.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:1082dd3e2d7109ad8b7da48e1d4710c8d06c253cbc4a27c1cff4fbcaa97a9e3f", size = 2015688, upload_time = "2025-04-23T18:31:53.175Z" }, + { url = "https://files.pythonhosted.org/packages/3a/cc/5999d1eb705a6cefc31f0b4a90e9f7fc400539b1a1030529700cc1b51838/pydantic_core-2.33.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f517ca031dfc037a9c07e748cefd8d96235088b83b4f4ba8939105d20fa1dcd6", size = 1844808, upload_time = "2025-04-23T18:31:54.79Z" }, + { url = "https://files.pythonhosted.org/packages/6f/5e/a0a7b8885c98889a18b6e376f344da1ef323d270b44edf8174d6bce4d622/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a9f2c9dd19656823cb8250b0724ee9c60a82f3cdf68a080979d13092a3b0fef", size = 1885580, upload_time = "2025-04-23T18:31:57.393Z" }, + { url = "https://files.pythonhosted.org/packages/3b/2a/953581f343c7d11a304581156618c3f592435523dd9d79865903272c256a/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2b0a451c263b01acebe51895bfb0e1cc842a5c666efe06cdf13846c7418caa9a", size = 1973859, upload_time = "2025-04-23T18:31:59.065Z" }, + { url = "https://files.pythonhosted.org/packages/e6/55/f1a813904771c03a3f97f676c62cca0c0a4138654107c1b61f19c644868b/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ea40a64d23faa25e62a70ad163571c0b342b8bf66d5fa612ac0dec4f069d916", size = 2120810, upload_time = "2025-04-23T18:32:00.78Z" }, + { url = "https://files.pythonhosted.org/packages/aa/c3/053389835a996e18853ba107a63caae0b9deb4a276c6b472931ea9ae6e48/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fb2d542b4d66f9470e8065c5469ec676978d625a8b7a363f07d9a501a9cb36a", size = 2676498, upload_time = "2025-04-23T18:32:02.418Z" }, + { url = "https://files.pythonhosted.org/packages/eb/3c/f4abd740877a35abade05e437245b192f9d0ffb48bbbbd708df33d3cda37/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdac5d6ffa1b5a83bca06ffe7583f5576555e6c8b3a91fbd25ea7780f825f7d", size = 2000611, upload_time = "2025-04-23T18:32:04.152Z" }, + { url = "https://files.pythonhosted.org/packages/59/a7/63ef2fed1837d1121a894d0ce88439fe3e3b3e48c7543b2a4479eb99c2bd/pydantic_core-2.33.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04a1a413977ab517154eebb2d326da71638271477d6ad87a769102f7c2488c56", size = 2107924, upload_time = "2025-04-23T18:32:06.129Z" }, + { url = "https://files.pythonhosted.org/packages/04/8f/2551964ef045669801675f1cfc3b0d74147f4901c3ffa42be2ddb1f0efc4/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c8e7af2f4e0194c22b5b37205bfb293d166a7344a5b0d0eaccebc376546d77d5", size = 2063196, upload_time = "2025-04-23T18:32:08.178Z" }, + { url = "https://files.pythonhosted.org/packages/26/bd/d9602777e77fc6dbb0c7db9ad356e9a985825547dce5ad1d30ee04903918/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:5c92edd15cd58b3c2d34873597a1e20f13094f59cf88068adb18947df5455b4e", size = 2236389, upload_time = "2025-04-23T18:32:10.242Z" }, + { url = "https://files.pythonhosted.org/packages/42/db/0e950daa7e2230423ab342ae918a794964b053bec24ba8af013fc7c94846/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:65132b7b4a1c0beded5e057324b7e16e10910c106d43675d9bd87d4f38dde162", size = 2239223, upload_time = "2025-04-23T18:32:12.382Z" }, + { url = "https://files.pythonhosted.org/packages/58/4d/4f937099c545a8a17eb52cb67fe0447fd9a373b348ccfa9a87f141eeb00f/pydantic_core-2.33.2-cp313-cp313-win32.whl", hash = "sha256:52fb90784e0a242bb96ec53f42196a17278855b0f31ac7c3cc6f5c1ec4811849", size = 1900473, upload_time = "2025-04-23T18:32:14.034Z" }, + { url = "https://files.pythonhosted.org/packages/a0/75/4a0a9bac998d78d889def5e4ef2b065acba8cae8c93696906c3a91f310ca/pydantic_core-2.33.2-cp313-cp313-win_amd64.whl", hash = "sha256:c083a3bdd5a93dfe480f1125926afcdbf2917ae714bdb80b36d34318b2bec5d9", size = 1955269, upload_time = "2025-04-23T18:32:15.783Z" }, + { url = "https://files.pythonhosted.org/packages/f9/86/1beda0576969592f1497b4ce8e7bc8cbdf614c352426271b1b10d5f0aa64/pydantic_core-2.33.2-cp313-cp313-win_arm64.whl", hash = "sha256:e80b087132752f6b3d714f041ccf74403799d3b23a72722ea2e6ba2e892555b9", size = 1893921, upload_time = "2025-04-23T18:32:18.473Z" }, + { url = "https://files.pythonhosted.org/packages/a4/7d/e09391c2eebeab681df2b74bfe6c43422fffede8dc74187b2b0bf6fd7571/pydantic_core-2.33.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:61c18fba8e5e9db3ab908620af374db0ac1baa69f0f32df4f61ae23f15e586ac", size = 1806162, upload_time = "2025-04-23T18:32:20.188Z" }, + { url = "https://files.pythonhosted.org/packages/f1/3d/847b6b1fed9f8ed3bb95a9ad04fbd0b212e832d4f0f50ff4d9ee5a9f15cf/pydantic_core-2.33.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95237e53bb015f67b63c91af7518a62a8660376a6a0db19b89acc77a4d6199f5", size = 1981560, upload_time = "2025-04-23T18:32:22.354Z" }, + { url = "https://files.pythonhosted.org/packages/6f/9a/e73262f6c6656262b5fdd723ad90f518f579b7bc8622e43a942eec53c938/pydantic_core-2.33.2-cp313-cp313t-win_amd64.whl", hash = "sha256:c2fc0a768ef76c15ab9238afa6da7f69895bb5d1ee83aeea2e3509af4472d0b9", size = 1935777, upload_time = "2025-04-23T18:32:25.088Z" }, +] + +[[package]] +name = "pydeflate" +version = "2.1.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "hdx-python-country" }, + { name = "imf-reader" }, + { name = "oda-reader" }, + { name = "pandas" }, + { name = "pyarrow" }, + { name = "requests" }, + { name = "wbgapi" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5e/72/3e56d8166ca4b366a4e37c85711a706bba66768f70ba690bdb279f728d8d/pydeflate-2.1.3.tar.gz", hash = "sha256:48a2b74ad900dd8c50dfb1e4cdfcea8ca11cbd2d3a713bf9208f2028fea4cf4f", size = 26586, upload_time = "2025-06-03T09:38:12.25Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/31/31/e703ab5bc311c58e4dc00759d7a48a850877b8bbcd64c9778e2315e06bd5/pydeflate-2.1.3-py3-none-any.whl", hash = "sha256:09ebdde04eb2fea1c4b6712889cb2a9d4c2dd22ce0204aaeae64f4335667354f", size = 32540, upload_time = "2025-06-03T09:38:10.858Z" }, +] + +[[package]] +name = "pygments" +version = "2.19.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b0/77/a5b8c569bf593b0140bde72ea885a803b82086995367bf2037de0159d924/pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", size = 4968631, upload_time = "2025-06-21T13:39:12.283Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217, upload_time = "2025-06-21T13:39:07.939Z" }, +] + +[[package]] +name = "pymdown-extensions" +version = "10.16" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown" }, + { name = "pyyaml" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1a/0a/c06b542ac108bfc73200677309cd9188a3a01b127a63f20cadc18d873d88/pymdown_extensions-10.16.tar.gz", hash = "sha256:71dac4fca63fabeffd3eb9038b756161a33ec6e8d230853d3cecf562155ab3de", size = 853197, upload_time = "2025-06-21T17:56:36.974Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/98/d4/10bb14004d3c792811e05e21b5e5dcae805aacb739bd12a0540967b99592/pymdown_extensions-10.16-py3-none-any.whl", hash = "sha256:f5dd064a4db588cb2d95229fc4ee63a1b16cc8b4d0e6145c0899ed8723da1df2", size = 266143, upload_time = "2025-06-21T17:56:35.356Z" }, +] + +[[package]] +name = "pyparsing" +version = "3.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bb/22/f1129e69d94ffff626bdb5c835506b3a5b4f3d070f17ea295e12c2c6f60f/pyparsing-3.2.3.tar.gz", hash = "sha256:b9c13f1ab8b3b542f72e28f634bad4de758ab3ce4546e4301970ad6fa77c38be", size = 1088608, upload_time = "2025-03-25T05:01:28.114Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/05/e7/df2285f3d08fee213f2d041540fa4fc9ca6c2d44cf36d3a035bf2a8d2bcc/pyparsing-3.2.3-py3-none-any.whl", hash = "sha256:a749938e02d6fd0b59b356ca504a24982314bb090c383e3cf201c95ef7e2bfcf", size = 111120, upload_time = "2025-03-25T05:01:24.908Z" }, +] + +[[package]] +name = "pyphonetics" +version = "0.5.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "unidecode" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d6/7c/7c45a9e9bf6ddb57b67e66cf4e8076a7baf3a790a3411daac1a7a2df0c5b/pyphonetics-0.5.3.tar.gz", hash = "sha256:2d3c2e359fde91a3c57914f0b5468bba7a5daf38e7927fd999992ea68990fbe4", size = 10314, upload_time = "2020-02-25T12:08:31.049Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bd/dd/a7d0a860efd3d4335d538b4361b8e9af8311f2aba2e8c7e4c7a47d623b6e/pyphonetics-0.5.3-py2.py3-none-any.whl", hash = "sha256:e6b29671d0d624dda1cac59c0c5a8a7216d8db504bae4941bfc482e04a0621d1", size = 10729, upload_time = "2020-02-25T12:08:25.368Z" }, +] + +[[package]] +name = "pytest" +version = "8.4.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "iniconfig" }, + { name = "packaging" }, + { name = "pluggy" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/08/ba/45911d754e8eba3d5a841a5ce61a65a685ff1798421ac054f85aa8747dfb/pytest-8.4.1.tar.gz", hash = "sha256:7c67fd69174877359ed9371ec3af8a3d2b04741818c51e5e99cc1742251fa93c", size = 1517714, upload_time = "2025-06-18T05:48:06.109Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/29/16/c8a903f4c4dffe7a12843191437d7cd8e32751d5de349d45d3fe69544e87/pytest-8.4.1-py3-none-any.whl", hash = "sha256:539c70ba6fcead8e78eebbf1115e8b589e7565830d7d006a8723f19ac8a0afb7", size = 365474, upload_time = "2025-06-18T05:48:03.955Z" }, +] + +[[package]] +name = "python-calamine" +version = "0.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cc/03/269f96535705b2f18c8977fa58e76763b4e4727a9b3ae277a9468c8ffe05/python_calamine-0.4.0.tar.gz", hash = "sha256:94afcbae3fec36d2d7475095a59d4dc6fae45829968c743cb799ebae269d7bbf", size = 127737, upload_time = "2025-07-04T06:05:28.626Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/63/60/f951513aaaa470b3a38a87d65eca45e0a02bc329b47864f5a17db563f746/python_calamine-0.4.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:74bca5d44a73acf3dcfa5370820797fcfd225c8c71abcddea987c5b4f5077e98", size = 826603, upload_time = "2025-07-04T06:03:51.245Z" }, + { url = "https://files.pythonhosted.org/packages/76/3f/789955bbc77831c639890758f945eb2b25d6358065edf00da6751226cf31/python_calamine-0.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cf80178f5d1b0ee2ccfffb8549c50855f6249e930664adc5807f4d0d6c2b269c", size = 805826, upload_time = "2025-07-04T06:03:52.482Z" }, + { url = "https://files.pythonhosted.org/packages/00/4c/f87d17d996f647030a40bfd124fe45fe893c002bee35ae6aca9910a923ae/python_calamine-0.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65cfef345386ae86f7720f1be93495a40fd7e7feabb8caa1df5025d7fbc58a1f", size = 874989, upload_time = "2025-07-04T06:03:53.794Z" }, + { url = "https://files.pythonhosted.org/packages/47/d2/3269367303f6c0488cf1bfebded3f9fe968d118a988222e04c9b2636bf2e/python_calamine-0.4.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f23e6214dbf9b29065a5dcfd6a6c674dd0e251407298c9138611c907d53423ff", size = 877504, upload_time = "2025-07-04T06:03:55.095Z" }, + { url = "https://files.pythonhosted.org/packages/f9/6d/c7ac35f5c7125e8bd07eb36773f300fda20dd2da635eae78a8cebb0b6ab7/python_calamine-0.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d792d304ee232ab01598e1d3ab22e074a32c2511476b5fb4f16f4222d9c2a265", size = 1014171, upload_time = "2025-07-04T06:03:56.777Z" }, + { url = "https://files.pythonhosted.org/packages/f0/81/5ea8792a2e9ab5e2a05872db3a4d3ed3538ad5af1861282c789e2f13a8cf/python_calamine-0.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bf813425918fd68f3e991ef7c4b5015be0a1a95fc4a8ab7e73c016ef1b881bb4", size = 926737, upload_time = "2025-07-04T06:03:58.024Z" }, + { url = "https://files.pythonhosted.org/packages/cc/6e/989e56e6f073fc0981a74ba7a393881eb351bb143e5486aa629b5e5d6a8b/python_calamine-0.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbe2a0ccb4d003635888eea83a995ff56b0748c8c76fc71923544f5a4a7d4cd7", size = 887032, upload_time = "2025-07-04T06:03:59.298Z" }, + { url = "https://files.pythonhosted.org/packages/5d/92/2c9bd64277c6fe4be695d7d5a803b38d953ec8565037486be7506642c27c/python_calamine-0.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a7b3bb5f0d910b9b03c240987560f843256626fd443279759df4e91b717826d2", size = 929700, upload_time = "2025-07-04T06:04:01.388Z" }, + { url = "https://files.pythonhosted.org/packages/64/fa/fc758ca37701d354a6bc7d63118699f1c73788a1f2e1b44d720824992764/python_calamine-0.4.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:bd2c0fc2b5eabd08ceac8a2935bffa88dbc6116db971aa8c3f244bad3fd0f644", size = 1053971, upload_time = "2025-07-04T06:04:02.704Z" }, + { url = "https://files.pythonhosted.org/packages/65/52/40d7e08ae0ddba331cdc9f7fb3e92972f8f38d7afbd00228158ff6d1fceb/python_calamine-0.4.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:85b547cb1c5b692a0c2406678d666dbc1cec65a714046104683fe4f504a1721d", size = 1057057, upload_time = "2025-07-04T06:04:04.014Z" }, + { url = "https://files.pythonhosted.org/packages/16/de/e8a071c0adfda73285d891898a24f6e99338328c404f497ff5b0e6bc3d45/python_calamine-0.4.0-cp312-cp312-win32.whl", hash = "sha256:4c2a1e3a0db4d6de4587999a21cc35845648c84fba81c03dd6f3072c690888e4", size = 665540, upload_time = "2025-07-04T06:04:05.679Z" }, + { url = "https://files.pythonhosted.org/packages/5e/f2/7fdfada13f80db12356853cf08697ff4e38800a1809c2bdd26ee60962e7a/python_calamine-0.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:b193c89ffcc146019475cd121c552b23348411e19c04dedf5c766a20db64399a", size = 695366, upload_time = "2025-07-04T06:04:06.977Z" }, + { url = "https://files.pythonhosted.org/packages/20/66/d37412ad854480ce32f50d9f74f2a2f88b1b8a6fbc32f70aabf3211ae89e/python_calamine-0.4.0-cp312-cp312-win_arm64.whl", hash = "sha256:43a0f15e0b60c75a71b21a012b911d5d6f5fa052afad2a8edbc728af43af0fcf", size = 670740, upload_time = "2025-07-04T06:04:08.656Z" }, + { url = "https://files.pythonhosted.org/packages/5a/10/f78218ccdc5bb5591a37d582c7e8723121d0fbe8196c5a4089110ec02f22/python_calamine-0.4.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:f8d6b2d2ae73acf91343f02756bdcb2fa6117db4eaf5cfab75ce50dfb54525ee", size = 826339, upload_time = "2025-07-04T06:04:10.254Z" }, + { url = "https://files.pythonhosted.org/packages/15/b1/d7d0dbbd0469db0fc628b1b9ee3a8f3b698391279f0d7aea96e2018a3863/python_calamine-0.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:aca7e019f42ca16806fef53e3028fa158005c0e68eabda577c3f3c2bea9735fd", size = 805473, upload_time = "2025-07-04T06:04:11.557Z" }, + { url = "https://files.pythonhosted.org/packages/46/52/033b902fb11f9b4bb59fa18621acbf5eaf4ecb0bce878d34fcb0020229df/python_calamine-0.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aca67cb447ba8dcefa4d5a1131d1cfdd1e0d0a0f0c6470655ce9ad37b7cfa228", size = 874275, upload_time = "2025-07-04T06:04:13.318Z" }, + { url = "https://files.pythonhosted.org/packages/56/12/e6b589293314a5d10b2c309411542424ebefb77430cc715d7601d80349ae/python_calamine-0.4.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e127d3b78d511d4f6fbdfed02fe666d83a722d73e27dd64d1718be9efafbabfe", size = 877061, upload_time = "2025-07-04T06:04:15.013Z" }, + { url = "https://files.pythonhosted.org/packages/64/24/0eeb583eb5d44f674ca9f7a846c665e33190431386d7c9f6d08ec9f09d3c/python_calamine-0.4.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e47891d9d62e3015448749ddb2ba60ab583a651d0fca9a3a1794936942ad7d5d", size = 1013946, upload_time = "2025-07-04T06:04:16.647Z" }, + { url = "https://files.pythonhosted.org/packages/c4/93/360cf58b8e24f760a3d4643423389dbc37bdca8b6fdda75ffc664ce622b5/python_calamine-0.4.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d4072bf9dcb8ec49f5b92688bd960b5d0e03e4826d227bbd66478a6f6b0aea06", size = 926462, upload_time = "2025-07-04T06:04:17.936Z" }, + { url = "https://files.pythonhosted.org/packages/5a/5d/3b8c46ccc62d020858bc52f2d792208910eb68682c6ebf8d6706593d7a88/python_calamine-0.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eabc9dc770f753c4227aacedd8390056937e67af0bf65d6696c584d3054f1287", size = 886319, upload_time = "2025-07-04T06:04:19.33Z" }, + { url = "https://files.pythonhosted.org/packages/66/cf/73241714800bddb277f827c4683f579b81915406bf7dc643dc185cef7eb2/python_calamine-0.4.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6a4bcf36dc77674892616b66cffba432f5fd62df3e0adb0487ec245036b50041", size = 929044, upload_time = "2025-07-04T06:04:20.689Z" }, + { url = "https://files.pythonhosted.org/packages/7c/6b/71e30ee568ce1ea6676be66f1a42c6397946859effc471cc102922fb4792/python_calamine-0.4.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:f81518d4b49c47054cb1861badf5bcef44b0a49959968fb2e9c9cb89645c76af", size = 1053084, upload_time = "2025-07-04T06:04:22.414Z" }, + { url = "https://files.pythonhosted.org/packages/75/19/87b42fe975f8952754562785a545f6d2eec17c353befdf33a8e16c046ce0/python_calamine-0.4.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:18375eb3ac1362fcbf3a9fcad0672d8dc054001247bc52f063e0054a3e01a8d1", size = 1056735, upload_time = "2025-07-04T06:04:23.903Z" }, + { url = "https://files.pythonhosted.org/packages/04/db/ecee6e5d6ed4f3725312580a83c4cb1758c9060aa08bf2d8512d3396cea1/python_calamine-0.4.0-cp313-cp313-win32.whl", hash = "sha256:c7e98c7e531bafdf719414d0c428f25f933a82640fb92e6e84864a85e758aecc", size = 665282, upload_time = "2025-07-04T06:04:25.274Z" }, + { url = "https://files.pythonhosted.org/packages/cb/0b/26337e0a0e2b335c1d6225bda8de259a21fea129a06009c1471deda28e1f/python_calamine-0.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:6ec081b874e78f4dbcbe70804644281366814289956755575a5871f725592d4e", size = 694982, upload_time = "2025-07-04T06:04:26.573Z" }, + { url = "https://files.pythonhosted.org/packages/90/26/f72c2b2fe70f2901abb41fcdf8249181133ddd72b9392cfb63d030393b3e/python_calamine-0.4.0-cp313-cp313-win_arm64.whl", hash = "sha256:3f9bdf570023138ee4090a51b1e34786978d6e649852ccc3b83ac9729f125ca2", size = 670283, upload_time = "2025-07-04T06:04:28.434Z" }, +] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload_time = "2024-03-01T18:36:20.211Z" } +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-io-wrapper" +version = "0.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/74/8dc5f7d0b7cc1a0ca9e5c320abf11adee2094998c93ae8c9c80d9a8323ff/python-io-wrapper-0.3.1.tar.gz", hash = "sha256:e3391787ff0d9870e739294c6392437915502153e695a017450aa46b6d091762", size = 3271, upload_time = "2022-11-14T15:00:10.932Z" } + +[[package]] +name = "python-slugify" +version = "8.0.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "text-unidecode" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/87/c7/5e1547c44e31da50a460df93af11a535ace568ef89d7a811069ead340c4a/python-slugify-8.0.4.tar.gz", hash = "sha256:59202371d1d05b54a9e7720c5e038f928f45daaffe41dd10822f3907b937c856", size = 10921, upload_time = "2024-02-08T18:32:45.488Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a4/62/02da182e544a51a5c3ccf4b03ab79df279f9c60c5e82d5e8bec7ca26ac11/python_slugify-8.0.4-py2.py3-none-any.whl", hash = "sha256:276540b79961052b66b7d116620b36518847f52d5fd9e3a70164fc8c50faa6b8", size = 10051, upload_time = "2024-02-08T18:32:43.911Z" }, +] + +[[package]] +name = "pytz" +version = "2025.2" +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" } +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" }, +] + +[[package]] +name = "pywin32" +version = "310" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6b/ec/4fdbe47932f671d6e348474ea35ed94227fb5df56a7c30cbbb42cd396ed0/pywin32-310-cp312-cp312-win32.whl", hash = "sha256:8a75a5cc3893e83a108c05d82198880704c44bbaee4d06e442e471d3c9ea4f3d", size = 8796239, upload_time = "2025-03-17T00:55:58.807Z" }, + { url = "https://files.pythonhosted.org/packages/e3/e5/b0627f8bb84e06991bea89ad8153a9e50ace40b2e1195d68e9dff6b03d0f/pywin32-310-cp312-cp312-win_amd64.whl", hash = "sha256:bf5c397c9a9a19a6f62f3fb821fbf36cac08f03770056711f765ec1503972060", size = 9503839, upload_time = "2025-03-17T00:56:00.8Z" }, + { url = "https://files.pythonhosted.org/packages/1f/32/9ccf53748df72301a89713936645a664ec001abd35ecc8578beda593d37d/pywin32-310-cp312-cp312-win_arm64.whl", hash = "sha256:2349cc906eae872d0663d4d6290d13b90621eaf78964bb1578632ff20e152966", size = 8459470, upload_time = "2025-03-17T00:56:02.601Z" }, + { url = "https://files.pythonhosted.org/packages/1c/09/9c1b978ffc4ae53999e89c19c77ba882d9fce476729f23ef55211ea1c034/pywin32-310-cp313-cp313-win32.whl", hash = "sha256:5d241a659c496ada3253cd01cfaa779b048e90ce4b2b38cd44168ad555ce74ab", size = 8794384, upload_time = "2025-03-17T00:56:04.383Z" }, + { url = "https://files.pythonhosted.org/packages/45/3c/b4640f740ffebadd5d34df35fecba0e1cfef8fde9f3e594df91c28ad9b50/pywin32-310-cp313-cp313-win_amd64.whl", hash = "sha256:667827eb3a90208ddbdcc9e860c81bde63a135710e21e4cb3348968e4bd5249e", size = 9503039, upload_time = "2025-03-17T00:56:06.207Z" }, + { url = "https://files.pythonhosted.org/packages/b4/f4/f785020090fb050e7fb6d34b780f2231f302609dc964672f72bfaeb59a28/pywin32-310-cp313-cp313-win_arm64.whl", hash = "sha256:e308f831de771482b7cf692a1f308f8fca701b2d8f9dde6cc440c7da17e47b33", size = 8458152, upload_time = "2025-03-17T00:56:07.819Z" }, +] + +[[package]] +name = "pyyaml" +version = "6.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631, upload_time = "2024-08-06T20:33:50.674Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/86/0c/c581167fc46d6d6d7ddcfb8c843a4de25bdd27e4466938109ca68492292c/PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", size = 183873, upload_time = "2024-08-06T20:32:25.131Z" }, + { url = "https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", size = 173302, upload_time = "2024-08-06T20:32:26.511Z" }, + { url = "https://files.pythonhosted.org/packages/c3/93/9916574aa8c00aa06bbac729972eb1071d002b8e158bd0e83a3b9a20a1f7/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", size = 739154, upload_time = "2024-08-06T20:32:28.363Z" }, + { url = "https://files.pythonhosted.org/packages/95/0f/b8938f1cbd09739c6da569d172531567dbcc9789e0029aa070856f123984/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", size = 766223, upload_time = "2024-08-06T20:32:30.058Z" }, + { url = "https://files.pythonhosted.org/packages/b9/2b/614b4752f2e127db5cc206abc23a8c19678e92b23c3db30fc86ab731d3bd/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", size = 767542, upload_time = "2024-08-06T20:32:31.881Z" }, + { url = "https://files.pythonhosted.org/packages/d4/00/dd137d5bcc7efea1836d6264f049359861cf548469d18da90cd8216cf05f/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", size = 731164, upload_time = "2024-08-06T20:32:37.083Z" }, + { url = "https://files.pythonhosted.org/packages/c9/1f/4f998c900485e5c0ef43838363ba4a9723ac0ad73a9dc42068b12aaba4e4/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", size = 756611, upload_time = "2024-08-06T20:32:38.898Z" }, + { url = "https://files.pythonhosted.org/packages/df/d1/f5a275fdb252768b7a11ec63585bc38d0e87c9e05668a139fea92b80634c/PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", size = 140591, upload_time = "2024-08-06T20:32:40.241Z" }, + { url = "https://files.pythonhosted.org/packages/0c/e8/4f648c598b17c3d06e8753d7d13d57542b30d56e6c2dedf9c331ae56312e/PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", size = 156338, upload_time = "2024-08-06T20:32:41.93Z" }, + { url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309, upload_time = "2024-08-06T20:32:43.4Z" }, + { url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679, upload_time = "2024-08-06T20:32:44.801Z" }, + { url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428, upload_time = "2024-08-06T20:32:46.432Z" }, + { url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361, upload_time = "2024-08-06T20:32:51.188Z" }, + { url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523, upload_time = "2024-08-06T20:32:53.019Z" }, + { url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660, upload_time = "2024-08-06T20:32:54.708Z" }, + { url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597, upload_time = "2024-08-06T20:32:56.985Z" }, + { url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527, upload_time = "2024-08-06T20:33:03.001Z" }, + { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446, upload_time = "2024-08-06T20:33:04.33Z" }, +] + +[[package]] +name = "pyyaml-env-tag" +version = "1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyyaml" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/eb/2e/79c822141bfd05a853236b504869ebc6b70159afc570e1d5a20641782eaa/pyyaml_env_tag-1.1.tar.gz", hash = "sha256:2eb38b75a2d21ee0475d6d97ec19c63287a7e140231e4214969d0eac923cd7ff", size = 5737, upload_time = "2025-05-13T15:24:01.64Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl", hash = "sha256:17109e1a528561e32f026364712fee1264bc2ea6715120891174ed1b980d2e04", size = 4722, upload_time = "2025-05-13T15:23:59.629Z" }, +] + +[[package]] +name = "pyzmq" +version = "27.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "implementation_name == 'pypy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f1/06/50a4e9648b3e8b992bef8eb632e457307553a89d294103213cfd47b3da69/pyzmq-27.0.0.tar.gz", hash = "sha256:b1f08eeb9ce1510e6939b6e5dcd46a17765e2333daae78ecf4606808442e52cf", size = 280478, upload_time = "2025-06-13T14:09:07.087Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/93/a7/9ad68f55b8834ede477842214feba6a4c786d936c022a67625497aacf61d/pyzmq-27.0.0-cp312-abi3-macosx_10_15_universal2.whl", hash = "sha256:cbabc59dcfaac66655c040dfcb8118f133fb5dde185e5fc152628354c1598e52", size = 1305438, upload_time = "2025-06-13T14:07:31.676Z" }, + { url = "https://files.pythonhosted.org/packages/ba/ee/26aa0f98665a22bc90ebe12dced1de5f3eaca05363b717f6fb229b3421b3/pyzmq-27.0.0-cp312-abi3-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:cb0ac5179cba4b2f94f1aa208fbb77b62c4c9bf24dd446278b8b602cf85fcda3", size = 895095, upload_time = "2025-06-13T14:07:33.104Z" }, + { url = "https://files.pythonhosted.org/packages/cf/85/c57e7ab216ecd8aa4cc7e3b83b06cc4e9cf45c87b0afc095f10cd5ce87c1/pyzmq-27.0.0-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:53a48f0228eab6cbf69fde3aa3c03cbe04e50e623ef92ae395fce47ef8a76152", size = 651826, upload_time = "2025-06-13T14:07:34.831Z" }, + { url = "https://files.pythonhosted.org/packages/69/9a/9ea7e230feda9400fb0ae0d61d7d6ddda635e718d941c44eeab22a179d34/pyzmq-27.0.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:111db5f395e09f7e775f759d598f43cb815fc58e0147623c4816486e1a39dc22", size = 839750, upload_time = "2025-06-13T14:07:36.553Z" }, + { url = "https://files.pythonhosted.org/packages/08/66/4cebfbe71f3dfbd417011daca267539f62ed0fbc68105357b68bbb1a25b7/pyzmq-27.0.0-cp312-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:c8878011653dcdc27cc2c57e04ff96f0471e797f5c19ac3d7813a245bcb24371", size = 1641357, upload_time = "2025-06-13T14:07:38.21Z" }, + { url = "https://files.pythonhosted.org/packages/ac/f6/b0f62578c08d2471c791287149cb8c2aaea414ae98c6e995c7dbe008adfb/pyzmq-27.0.0-cp312-abi3-musllinux_1_2_i686.whl", hash = "sha256:c0ed2c1f335ba55b5fdc964622254917d6b782311c50e138863eda409fbb3b6d", size = 2020281, upload_time = "2025-06-13T14:07:39.599Z" }, + { url = "https://files.pythonhosted.org/packages/37/b9/4f670b15c7498495da9159edc374ec09c88a86d9cd5a47d892f69df23450/pyzmq-27.0.0-cp312-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:e918d70862d4cfd4b1c187310015646a14e1f5917922ab45b29f28f345eeb6be", size = 1877110, upload_time = "2025-06-13T14:07:41.027Z" }, + { url = "https://files.pythonhosted.org/packages/66/31/9dee25c226295b740609f0d46db2fe972b23b6f5cf786360980524a3ba92/pyzmq-27.0.0-cp312-abi3-win32.whl", hash = "sha256:88b4e43cab04c3c0f0d55df3b1eef62df2b629a1a369b5289a58f6fa8b07c4f4", size = 559297, upload_time = "2025-06-13T14:07:42.533Z" }, + { url = "https://files.pythonhosted.org/packages/9b/12/52da5509800f7ff2d287b2f2b4e636e7ea0f001181cba6964ff6c1537778/pyzmq-27.0.0-cp312-abi3-win_amd64.whl", hash = "sha256:dce4199bf5f648a902ce37e7b3afa286f305cd2ef7a8b6ec907470ccb6c8b371", size = 619203, upload_time = "2025-06-13T14:07:43.843Z" }, + { url = "https://files.pythonhosted.org/packages/93/6d/7f2e53b19d1edb1eb4f09ec7c3a1f945ca0aac272099eab757d15699202b/pyzmq-27.0.0-cp312-abi3-win_arm64.whl", hash = "sha256:56e46bbb85d52c1072b3f809cc1ce77251d560bc036d3a312b96db1afe76db2e", size = 551927, upload_time = "2025-06-13T14:07:45.51Z" }, + { url = "https://files.pythonhosted.org/packages/19/62/876b27c4ff777db4ceba1c69ea90d3c825bb4f8d5e7cd987ce5802e33c55/pyzmq-27.0.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:c36ad534c0c29b4afa088dc53543c525b23c0797e01b69fef59b1a9c0e38b688", size = 1340826, upload_time = "2025-06-13T14:07:46.881Z" }, + { url = "https://files.pythonhosted.org/packages/43/69/58ef8f4f59d3bcd505260c73bee87b008850f45edca40ddaba54273c35f4/pyzmq-27.0.0-cp313-cp313t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:67855c14173aec36395d7777aaba3cc527b393821f30143fd20b98e1ff31fd38", size = 897283, upload_time = "2025-06-13T14:07:49.562Z" }, + { url = "https://files.pythonhosted.org/packages/43/15/93a0d0396700a60475ad3c5d42c5f1c308d3570bc94626b86c71ef9953e0/pyzmq-27.0.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8617c7d43cd8ccdb62aebe984bfed77ca8f036e6c3e46dd3dddda64b10f0ab7a", size = 660567, upload_time = "2025-06-13T14:07:51.364Z" }, + { url = "https://files.pythonhosted.org/packages/0e/b3/fe055513e498ca32f64509abae19b9c9eb4d7c829e02bd8997dd51b029eb/pyzmq-27.0.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:67bfbcbd0a04c575e8103a6061d03e393d9f80ffdb9beb3189261e9e9bc5d5e9", size = 847681, upload_time = "2025-06-13T14:07:52.77Z" }, + { url = "https://files.pythonhosted.org/packages/b6/4f/ff15300b00b5b602191f3df06bbc8dd4164e805fdd65bb77ffbb9c5facdc/pyzmq-27.0.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:5cd11d46d7b7e5958121b3eaf4cd8638eff3a720ec527692132f05a57f14341d", size = 1650148, upload_time = "2025-06-13T14:07:54.178Z" }, + { url = "https://files.pythonhosted.org/packages/c4/6f/84bdfff2a224a6f26a24249a342e5906993c50b0761e311e81b39aef52a7/pyzmq-27.0.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:b801c2e40c5aa6072c2f4876de8dccd100af6d9918d4d0d7aa54a1d982fd4f44", size = 2023768, upload_time = "2025-06-13T14:07:55.714Z" }, + { url = "https://files.pythonhosted.org/packages/64/39/dc2db178c26a42228c5ac94a9cc595030458aa64c8d796a7727947afbf55/pyzmq-27.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:20d5cb29e8c5f76a127c75b6e7a77e846bc4b655c373baa098c26a61b7ecd0ef", size = 1885199, upload_time = "2025-06-13T14:07:57.166Z" }, + { url = "https://files.pythonhosted.org/packages/c7/21/dae7b06a1f8cdee5d8e7a63d99c5d129c401acc40410bef2cbf42025e26f/pyzmq-27.0.0-cp313-cp313t-win32.whl", hash = "sha256:a20528da85c7ac7a19b7384e8c3f8fa707841fd85afc4ed56eda59d93e3d98ad", size = 575439, upload_time = "2025-06-13T14:07:58.959Z" }, + { url = "https://files.pythonhosted.org/packages/eb/bc/1709dc55f0970cf4cb8259e435e6773f9946f41a045c2cb90e870b7072da/pyzmq-27.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:d8229f2efece6a660ee211d74d91dbc2a76b95544d46c74c615e491900dc107f", size = 639933, upload_time = "2025-06-13T14:08:00.777Z" }, +] + +[[package]] +name = "ratelimit" +version = "2.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ab/38/ff60c8fc9e002d50d48822cc5095deb8ebbc5f91a6b8fdd9731c87a147c9/ratelimit-2.2.1.tar.gz", hash = "sha256:af8a9b64b821529aca09ebaf6d8d279100d766f19e90b5059ac6a718ca6dee42", size = 5251, upload_time = "2018-12-17T18:55:49.675Z" } + +[[package]] +name = "referencing" +version = "0.36.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "rpds-py" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2f/db/98b5c277be99dd18bfd91dd04e1b759cad18d1a338188c936e92f921c7e2/referencing-0.36.2.tar.gz", hash = "sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa", size = 74744, upload_time = "2025-01-25T08:48:16.138Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0", size = 26775, upload_time = "2025-01-25T08:48:14.241Z" }, +] + +[[package]] +name = "requests" +version = "2.32.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e1/0a/929373653770d8a0d7ea76c37de6e41f11eb07559b103b1c02cafb3f7cf8/requests-2.32.4.tar.gz", hash = "sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422", size = 135258, upload_time = "2025-06-09T16:43:07.34Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7c/e4/56027c4a6b4ae70ca9de302488c5ca95ad4a39e190093d6c1a8ace08341b/requests-2.32.4-py3-none-any.whl", hash = "sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c", size = 64847, upload_time = "2025-06-09T16:43:05.728Z" }, +] + +[[package]] +name = "requests-file" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/72/97/bf44e6c6bd8ddbb99943baf7ba8b1a8485bcd2fe0e55e5708d7fee4ff1ae/requests_file-2.1.0.tar.gz", hash = "sha256:0f549a3f3b0699415ac04d167e9cb39bccfb730cb832b4d20be3d9867356e658", size = 6891, upload_time = "2024-05-21T16:28:00.24Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d7/25/dd878a121fcfdf38f52850f11c512e13ec87c2ea72385933818e5b6c15ce/requests_file-2.1.0-py2.py3-none-any.whl", hash = "sha256:cf270de5a4c5874e84599fc5778303d496c10ae5e870bfa378818f35d21bda5c", size = 4244, upload_time = "2024-05-21T16:27:57.733Z" }, +] + +[[package]] +name = "rfc3986" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/85/40/1520d68bfa07ab5a6f065a186815fb6610c86fe957bc065754e47f7b0840/rfc3986-2.0.0.tar.gz", hash = "sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c", size = 49026, upload_time = "2022-01-10T00:52:30.832Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ff/9a/9afaade874b2fa6c752c36f1548f718b5b83af81ed9b76628329dab81c1b/rfc3986-2.0.0-py2.py3-none-any.whl", hash = "sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd", size = 31326, upload_time = "2022-01-10T00:52:29.594Z" }, +] + +[[package]] +name = "rich" +version = "14.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown-it-py" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a1/53/830aa4c3066a8ab0ae9a9955976fb770fe9c6102117c8ec4ab3ea62d89e8/rich-14.0.0.tar.gz", hash = "sha256:82f1bc23a6a21ebca4ae0c45af9bdbc492ed20231dcb63f297d6d1021a9d5725", size = 224078, upload_time = "2025-03-30T14:15:14.23Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0d/9b/63f4c7ebc259242c89b3acafdb37b41d1185c07ff0011164674e9076b491/rich-14.0.0-py3-none-any.whl", hash = "sha256:1c9491e1951aac09caffd42f448ee3d04e58923ffe14993f6e83068dc395d7e0", size = 243229, upload_time = "2025-03-30T14:15:12.283Z" }, +] + +[[package]] +name = "rpds-py" +version = "0.26.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a5/aa/4456d84bbb54adc6a916fb10c9b374f78ac840337644e4a5eda229c81275/rpds_py-0.26.0.tar.gz", hash = "sha256:20dae58a859b0906f0685642e591056f1e787f3a8b39c8e8749a45dc7d26bdb0", size = 27385, upload_time = "2025-07-01T15:57:13.958Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ea/86/90eb87c6f87085868bd077c7a9938006eb1ce19ed4d06944a90d3560fce2/rpds_py-0.26.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:894514d47e012e794f1350f076c427d2347ebf82f9b958d554d12819849a369d", size = 363933, upload_time = "2025-07-01T15:54:15.734Z" }, + { url = "https://files.pythonhosted.org/packages/63/78/4469f24d34636242c924626082b9586f064ada0b5dbb1e9d096ee7a8e0c6/rpds_py-0.26.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc921b96fa95a097add244da36a1d9e4f3039160d1d30f1b35837bf108c21136", size = 350447, upload_time = "2025-07-01T15:54:16.922Z" }, + { url = "https://files.pythonhosted.org/packages/ad/91/c448ed45efdfdade82348d5e7995e15612754826ea640afc20915119734f/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e1157659470aa42a75448b6e943c895be8c70531c43cb78b9ba990778955582", size = 384711, upload_time = "2025-07-01T15:54:18.101Z" }, + { url = "https://files.pythonhosted.org/packages/ec/43/e5c86fef4be7f49828bdd4ecc8931f0287b1152c0bb0163049b3218740e7/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:521ccf56f45bb3a791182dc6b88ae5f8fa079dd705ee42138c76deb1238e554e", size = 400865, upload_time = "2025-07-01T15:54:19.295Z" }, + { url = "https://files.pythonhosted.org/packages/55/34/e00f726a4d44f22d5c5fe2e5ddd3ac3d7fd3f74a175607781fbdd06fe375/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9def736773fd56b305c0eef698be5192c77bfa30d55a0e5885f80126c4831a15", size = 517763, upload_time = "2025-07-01T15:54:20.858Z" }, + { url = "https://files.pythonhosted.org/packages/52/1c/52dc20c31b147af724b16104500fba13e60123ea0334beba7b40e33354b4/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cdad4ea3b4513b475e027be79e5a0ceac8ee1c113a1a11e5edc3c30c29f964d8", size = 406651, upload_time = "2025-07-01T15:54:22.508Z" }, + { url = "https://files.pythonhosted.org/packages/2e/77/87d7bfabfc4e821caa35481a2ff6ae0b73e6a391bb6b343db2c91c2b9844/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82b165b07f416bdccf5c84546a484cc8f15137ca38325403864bfdf2b5b72f6a", size = 386079, upload_time = "2025-07-01T15:54:23.987Z" }, + { url = "https://files.pythonhosted.org/packages/e3/d4/7f2200c2d3ee145b65b3cddc4310d51f7da6a26634f3ac87125fd789152a/rpds_py-0.26.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d04cab0a54b9dba4d278fe955a1390da3cf71f57feb78ddc7cb67cbe0bd30323", size = 421379, upload_time = "2025-07-01T15:54:25.073Z" }, + { url = "https://files.pythonhosted.org/packages/ae/13/9fdd428b9c820869924ab62236b8688b122baa22d23efdd1c566938a39ba/rpds_py-0.26.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:79061ba1a11b6a12743a2b0f72a46aa2758613d454aa6ba4f5a265cc48850158", size = 562033, upload_time = "2025-07-01T15:54:26.225Z" }, + { url = "https://files.pythonhosted.org/packages/f3/e1/b69686c3bcbe775abac3a4c1c30a164a2076d28df7926041f6c0eb5e8d28/rpds_py-0.26.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:f405c93675d8d4c5ac87364bb38d06c988e11028a64b52a47158a355079661f3", size = 591639, upload_time = "2025-07-01T15:54:27.424Z" }, + { url = "https://files.pythonhosted.org/packages/5c/c9/1e3d8c8863c84a90197ac577bbc3d796a92502124c27092413426f670990/rpds_py-0.26.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dafd4c44b74aa4bed4b250f1aed165b8ef5de743bcca3b88fc9619b6087093d2", size = 557105, upload_time = "2025-07-01T15:54:29.93Z" }, + { url = "https://files.pythonhosted.org/packages/9f/c5/90c569649057622959f6dcc40f7b516539608a414dfd54b8d77e3b201ac0/rpds_py-0.26.0-cp312-cp312-win32.whl", hash = "sha256:3da5852aad63fa0c6f836f3359647870e21ea96cf433eb393ffa45263a170d44", size = 223272, upload_time = "2025-07-01T15:54:31.128Z" }, + { url = "https://files.pythonhosted.org/packages/7d/16/19f5d9f2a556cfed454eebe4d354c38d51c20f3db69e7b4ce6cff904905d/rpds_py-0.26.0-cp312-cp312-win_amd64.whl", hash = "sha256:cf47cfdabc2194a669dcf7a8dbba62e37a04c5041d2125fae0233b720da6f05c", size = 234995, upload_time = "2025-07-01T15:54:32.195Z" }, + { url = "https://files.pythonhosted.org/packages/83/f0/7935e40b529c0e752dfaa7880224771b51175fce08b41ab4a92eb2fbdc7f/rpds_py-0.26.0-cp312-cp312-win_arm64.whl", hash = "sha256:20ab1ae4fa534f73647aad289003f1104092890849e0266271351922ed5574f8", size = 223198, upload_time = "2025-07-01T15:54:33.271Z" }, + { url = "https://files.pythonhosted.org/packages/6a/67/bb62d0109493b12b1c6ab00de7a5566aa84c0e44217c2d94bee1bd370da9/rpds_py-0.26.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:696764a5be111b036256c0b18cd29783fab22154690fc698062fc1b0084b511d", size = 363917, upload_time = "2025-07-01T15:54:34.755Z" }, + { url = "https://files.pythonhosted.org/packages/4b/f3/34e6ae1925a5706c0f002a8d2d7f172373b855768149796af87bd65dcdb9/rpds_py-0.26.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1e6c15d2080a63aaed876e228efe4f814bc7889c63b1e112ad46fdc8b368b9e1", size = 350073, upload_time = "2025-07-01T15:54:36.292Z" }, + { url = "https://files.pythonhosted.org/packages/75/83/1953a9d4f4e4de7fd0533733e041c28135f3c21485faaef56a8aadbd96b5/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:390e3170babf42462739a93321e657444f0862c6d722a291accc46f9d21ed04e", size = 384214, upload_time = "2025-07-01T15:54:37.469Z" }, + { url = "https://files.pythonhosted.org/packages/48/0e/983ed1b792b3322ea1d065e67f4b230f3b96025f5ce3878cc40af09b7533/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7da84c2c74c0f5bc97d853d9e17bb83e2dcafcff0dc48286916001cc114379a1", size = 400113, upload_time = "2025-07-01T15:54:38.954Z" }, + { url = "https://files.pythonhosted.org/packages/69/7f/36c0925fff6f660a80be259c5b4f5e53a16851f946eb080351d057698528/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4c5fe114a6dd480a510b6d3661d09d67d1622c4bf20660a474507aaee7eeeee9", size = 515189, upload_time = "2025-07-01T15:54:40.57Z" }, + { url = "https://files.pythonhosted.org/packages/13/45/cbf07fc03ba7a9b54662c9badb58294ecfb24f828b9732970bd1a431ed5c/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3100b3090269f3a7ea727b06a6080d4eb7439dca4c0e91a07c5d133bb1727ea7", size = 406998, upload_time = "2025-07-01T15:54:43.025Z" }, + { url = "https://files.pythonhosted.org/packages/6c/b0/8fa5e36e58657997873fd6a1cf621285ca822ca75b4b3434ead047daa307/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c03c9b0c64afd0320ae57de4c982801271c0c211aa2d37f3003ff5feb75bb04", size = 385903, upload_time = "2025-07-01T15:54:44.752Z" }, + { url = "https://files.pythonhosted.org/packages/4b/f7/b25437772f9f57d7a9fbd73ed86d0dcd76b4c7c6998348c070d90f23e315/rpds_py-0.26.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5963b72ccd199ade6ee493723d18a3f21ba7d5b957017607f815788cef50eaf1", size = 419785, upload_time = "2025-07-01T15:54:46.043Z" }, + { url = "https://files.pythonhosted.org/packages/a7/6b/63ffa55743dfcb4baf2e9e77a0b11f7f97ed96a54558fcb5717a4b2cd732/rpds_py-0.26.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9da4e873860ad5bab3291438525cae80169daecbfafe5657f7f5fb4d6b3f96b9", size = 561329, upload_time = "2025-07-01T15:54:47.64Z" }, + { url = "https://files.pythonhosted.org/packages/2f/07/1f4f5e2886c480a2346b1e6759c00278b8a69e697ae952d82ae2e6ee5db0/rpds_py-0.26.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5afaddaa8e8c7f1f7b4c5c725c0070b6eed0228f705b90a1732a48e84350f4e9", size = 590875, upload_time = "2025-07-01T15:54:48.9Z" }, + { url = "https://files.pythonhosted.org/packages/cc/bc/e6639f1b91c3a55f8c41b47d73e6307051b6e246254a827ede730624c0f8/rpds_py-0.26.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4916dc96489616a6f9667e7526af8fa693c0fdb4f3acb0e5d9f4400eb06a47ba", size = 556636, upload_time = "2025-07-01T15:54:50.619Z" }, + { url = "https://files.pythonhosted.org/packages/05/4c/b3917c45566f9f9a209d38d9b54a1833f2bb1032a3e04c66f75726f28876/rpds_py-0.26.0-cp313-cp313-win32.whl", hash = "sha256:2a343f91b17097c546b93f7999976fd6c9d5900617aa848c81d794e062ab302b", size = 222663, upload_time = "2025-07-01T15:54:52.023Z" }, + { url = "https://files.pythonhosted.org/packages/e0/0b/0851bdd6025775aaa2365bb8de0697ee2558184c800bfef8d7aef5ccde58/rpds_py-0.26.0-cp313-cp313-win_amd64.whl", hash = "sha256:0a0b60701f2300c81b2ac88a5fb893ccfa408e1c4a555a77f908a2596eb875a5", size = 234428, upload_time = "2025-07-01T15:54:53.692Z" }, + { url = "https://files.pythonhosted.org/packages/ed/e8/a47c64ed53149c75fb581e14a237b7b7cd18217e969c30d474d335105622/rpds_py-0.26.0-cp313-cp313-win_arm64.whl", hash = "sha256:257d011919f133a4746958257f2c75238e3ff54255acd5e3e11f3ff41fd14256", size = 222571, upload_time = "2025-07-01T15:54:54.822Z" }, + { url = "https://files.pythonhosted.org/packages/89/bf/3d970ba2e2bcd17d2912cb42874107390f72873e38e79267224110de5e61/rpds_py-0.26.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:529c8156d7506fba5740e05da8795688f87119cce330c244519cf706a4a3d618", size = 360475, upload_time = "2025-07-01T15:54:56.228Z" }, + { url = "https://files.pythonhosted.org/packages/82/9f/283e7e2979fc4ec2d8ecee506d5a3675fce5ed9b4b7cb387ea5d37c2f18d/rpds_py-0.26.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f53ec51f9d24e9638a40cabb95078ade8c99251945dad8d57bf4aabe86ecee35", size = 346692, upload_time = "2025-07-01T15:54:58.561Z" }, + { url = "https://files.pythonhosted.org/packages/e3/03/7e50423c04d78daf391da3cc4330bdb97042fc192a58b186f2d5deb7befd/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab504c4d654e4a29558eaa5bb8cea5fdc1703ea60a8099ffd9c758472cf913f", size = 379415, upload_time = "2025-07-01T15:54:59.751Z" }, + { url = "https://files.pythonhosted.org/packages/57/00/d11ee60d4d3b16808432417951c63df803afb0e0fc672b5e8d07e9edaaae/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fd0641abca296bc1a00183fe44f7fced8807ed49d501f188faa642d0e4975b83", size = 391783, upload_time = "2025-07-01T15:55:00.898Z" }, + { url = "https://files.pythonhosted.org/packages/08/b3/1069c394d9c0d6d23c5b522e1f6546b65793a22950f6e0210adcc6f97c3e/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:69b312fecc1d017b5327afa81d4da1480f51c68810963a7336d92203dbb3d4f1", size = 512844, upload_time = "2025-07-01T15:55:02.201Z" }, + { url = "https://files.pythonhosted.org/packages/08/3b/c4fbf0926800ed70b2c245ceca99c49f066456755f5d6eb8863c2c51e6d0/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c741107203954f6fc34d3066d213d0a0c40f7bb5aafd698fb39888af277c70d8", size = 402105, upload_time = "2025-07-01T15:55:03.698Z" }, + { url = "https://files.pythonhosted.org/packages/1c/b0/db69b52ca07413e568dae9dc674627a22297abb144c4d6022c6d78f1e5cc/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc3e55a7db08dc9a6ed5fb7103019d2c1a38a349ac41901f9f66d7f95750942f", size = 383440, upload_time = "2025-07-01T15:55:05.398Z" }, + { url = "https://files.pythonhosted.org/packages/4c/e1/c65255ad5b63903e56b3bb3ff9dcc3f4f5c3badde5d08c741ee03903e951/rpds_py-0.26.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9e851920caab2dbcae311fd28f4313c6953993893eb5c1bb367ec69d9a39e7ed", size = 412759, upload_time = "2025-07-01T15:55:08.316Z" }, + { url = "https://files.pythonhosted.org/packages/e4/22/bb731077872377a93c6e93b8a9487d0406c70208985831034ccdeed39c8e/rpds_py-0.26.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:dfbf280da5f876d0b00c81f26bedce274e72a678c28845453885a9b3c22ae632", size = 556032, upload_time = "2025-07-01T15:55:09.52Z" }, + { url = "https://files.pythonhosted.org/packages/e0/8b/393322ce7bac5c4530fb96fc79cc9ea2f83e968ff5f6e873f905c493e1c4/rpds_py-0.26.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:1cc81d14ddfa53d7f3906694d35d54d9d3f850ef8e4e99ee68bc0d1e5fed9a9c", size = 585416, upload_time = "2025-07-01T15:55:11.216Z" }, + { url = "https://files.pythonhosted.org/packages/49/ae/769dc372211835bf759319a7aae70525c6eb523e3371842c65b7ef41c9c6/rpds_py-0.26.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dca83c498b4650a91efcf7b88d669b170256bf8017a5db6f3e06c2bf031f57e0", size = 554049, upload_time = "2025-07-01T15:55:13.004Z" }, + { url = "https://files.pythonhosted.org/packages/6b/f9/4c43f9cc203d6ba44ce3146246cdc38619d92c7bd7bad4946a3491bd5b70/rpds_py-0.26.0-cp313-cp313t-win32.whl", hash = "sha256:4d11382bcaf12f80b51d790dee295c56a159633a8e81e6323b16e55d81ae37e9", size = 218428, upload_time = "2025-07-01T15:55:14.486Z" }, + { url = "https://files.pythonhosted.org/packages/7e/8b/9286b7e822036a4a977f2f1e851c7345c20528dbd56b687bb67ed68a8ede/rpds_py-0.26.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ff110acded3c22c033e637dd8896e411c7d3a11289b2edf041f86663dbc791e9", size = 231524, upload_time = "2025-07-01T15:55:15.745Z" }, + { url = "https://files.pythonhosted.org/packages/55/07/029b7c45db910c74e182de626dfdae0ad489a949d84a468465cd0ca36355/rpds_py-0.26.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:da619979df60a940cd434084355c514c25cf8eb4cf9a508510682f6c851a4f7a", size = 364292, upload_time = "2025-07-01T15:55:17.001Z" }, + { url = "https://files.pythonhosted.org/packages/13/d1/9b3d3f986216b4d1f584878dca15ce4797aaf5d372d738974ba737bf68d6/rpds_py-0.26.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ea89a2458a1a75f87caabefe789c87539ea4e43b40f18cff526052e35bbb4fdf", size = 350334, upload_time = "2025-07-01T15:55:18.922Z" }, + { url = "https://files.pythonhosted.org/packages/18/98/16d5e7bc9ec715fa9668731d0cf97f6b032724e61696e2db3d47aeb89214/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:feac1045b3327a45944e7dcbeb57530339f6b17baff154df51ef8b0da34c8c12", size = 384875, upload_time = "2025-07-01T15:55:20.399Z" }, + { url = "https://files.pythonhosted.org/packages/f9/13/aa5e2b1ec5ab0e86a5c464d53514c0467bec6ba2507027d35fc81818358e/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b818a592bd69bfe437ee8368603d4a2d928c34cffcdf77c2e761a759ffd17d20", size = 399993, upload_time = "2025-07-01T15:55:21.729Z" }, + { url = "https://files.pythonhosted.org/packages/17/03/8021810b0e97923abdbab6474c8b77c69bcb4b2c58330777df9ff69dc559/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a8b0dd8648709b62d9372fc00a57466f5fdeefed666afe3fea5a6c9539a0331", size = 516683, upload_time = "2025-07-01T15:55:22.918Z" }, + { url = "https://files.pythonhosted.org/packages/dc/b1/da8e61c87c2f3d836954239fdbbfb477bb7b54d74974d8f6fcb34342d166/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6d3498ad0df07d81112aa6ec6c95a7e7b1ae00929fb73e7ebee0f3faaeabad2f", size = 408825, upload_time = "2025-07-01T15:55:24.207Z" }, + { url = "https://files.pythonhosted.org/packages/38/bc/1fc173edaaa0e52c94b02a655db20697cb5fa954ad5a8e15a2c784c5cbdd/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24a4146ccb15be237fdef10f331c568e1b0e505f8c8c9ed5d67759dac58ac246", size = 387292, upload_time = "2025-07-01T15:55:25.554Z" }, + { url = "https://files.pythonhosted.org/packages/7c/eb/3a9bb4bd90867d21916f253caf4f0d0be7098671b6715ad1cead9fe7bab9/rpds_py-0.26.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a9a63785467b2d73635957d32a4f6e73d5e4df497a16a6392fa066b753e87387", size = 420435, upload_time = "2025-07-01T15:55:27.798Z" }, + { url = "https://files.pythonhosted.org/packages/cd/16/e066dcdb56f5632713445271a3f8d3d0b426d51ae9c0cca387799df58b02/rpds_py-0.26.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:de4ed93a8c91debfd5a047be327b7cc8b0cc6afe32a716bbbc4aedca9e2a83af", size = 562410, upload_time = "2025-07-01T15:55:29.057Z" }, + { url = "https://files.pythonhosted.org/packages/60/22/ddbdec7eb82a0dc2e455be44c97c71c232983e21349836ce9f272e8a3c29/rpds_py-0.26.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:caf51943715b12af827696ec395bfa68f090a4c1a1d2509eb4e2cb69abbbdb33", size = 590724, upload_time = "2025-07-01T15:55:30.719Z" }, + { url = "https://files.pythonhosted.org/packages/2c/b4/95744085e65b7187d83f2fcb0bef70716a1ea0a9e5d8f7f39a86e5d83424/rpds_py-0.26.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:4a59e5bc386de021f56337f757301b337d7ab58baa40174fb150accd480bc953", size = 558285, upload_time = "2025-07-01T15:55:31.981Z" }, + { url = "https://files.pythonhosted.org/packages/37/37/6309a75e464d1da2559446f9c811aa4d16343cebe3dbb73701e63f760caa/rpds_py-0.26.0-cp314-cp314-win32.whl", hash = "sha256:92c8db839367ef16a662478f0a2fe13e15f2227da3c1430a782ad0f6ee009ec9", size = 223459, upload_time = "2025-07-01T15:55:33.312Z" }, + { url = "https://files.pythonhosted.org/packages/d9/6f/8e9c11214c46098b1d1391b7e02b70bb689ab963db3b19540cba17315291/rpds_py-0.26.0-cp314-cp314-win_amd64.whl", hash = "sha256:b0afb8cdd034150d4d9f53926226ed27ad15b7f465e93d7468caaf5eafae0d37", size = 236083, upload_time = "2025-07-01T15:55:34.933Z" }, + { url = "https://files.pythonhosted.org/packages/47/af/9c4638994dd623d51c39892edd9d08e8be8220a4b7e874fa02c2d6e91955/rpds_py-0.26.0-cp314-cp314-win_arm64.whl", hash = "sha256:ca3f059f4ba485d90c8dc75cb5ca897e15325e4e609812ce57f896607c1c0867", size = 223291, upload_time = "2025-07-01T15:55:36.202Z" }, + { url = "https://files.pythonhosted.org/packages/4d/db/669a241144460474aab03e254326b32c42def83eb23458a10d163cb9b5ce/rpds_py-0.26.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:5afea17ab3a126006dc2f293b14ffc7ef3c85336cf451564a0515ed7648033da", size = 361445, upload_time = "2025-07-01T15:55:37.483Z" }, + { url = "https://files.pythonhosted.org/packages/3b/2d/133f61cc5807c6c2fd086a46df0eb8f63a23f5df8306ff9f6d0fd168fecc/rpds_py-0.26.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:69f0c0a3df7fd3a7eec50a00396104bb9a843ea6d45fcc31c2d5243446ffd7a7", size = 347206, upload_time = "2025-07-01T15:55:38.828Z" }, + { url = "https://files.pythonhosted.org/packages/05/bf/0e8fb4c05f70273469eecf82f6ccf37248558526a45321644826555db31b/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:801a71f70f9813e82d2513c9a96532551fce1e278ec0c64610992c49c04c2dad", size = 380330, upload_time = "2025-07-01T15:55:40.175Z" }, + { url = "https://files.pythonhosted.org/packages/d4/a8/060d24185d8b24d3923322f8d0ede16df4ade226a74e747b8c7c978e3dd3/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:df52098cde6d5e02fa75c1f6244f07971773adb4a26625edd5c18fee906fa84d", size = 392254, upload_time = "2025-07-01T15:55:42.015Z" }, + { url = "https://files.pythonhosted.org/packages/b9/7b/7c2e8a9ee3e6bc0bae26bf29f5219955ca2fbb761dca996a83f5d2f773fe/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9bc596b30f86dc6f0929499c9e574601679d0341a0108c25b9b358a042f51bca", size = 516094, upload_time = "2025-07-01T15:55:43.603Z" }, + { url = "https://files.pythonhosted.org/packages/75/d6/f61cafbed8ba1499b9af9f1777a2a199cd888f74a96133d8833ce5eaa9c5/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9dfbe56b299cf5875b68eb6f0ebaadc9cac520a1989cac0db0765abfb3709c19", size = 402889, upload_time = "2025-07-01T15:55:45.275Z" }, + { url = "https://files.pythonhosted.org/packages/92/19/c8ac0a8a8df2dd30cdec27f69298a5c13e9029500d6d76718130f5e5be10/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac64f4b2bdb4ea622175c9ab7cf09444e412e22c0e02e906978b3b488af5fde8", size = 384301, upload_time = "2025-07-01T15:55:47.098Z" }, + { url = "https://files.pythonhosted.org/packages/41/e1/6b1859898bc292a9ce5776016c7312b672da00e25cec74d7beced1027286/rpds_py-0.26.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:181ef9b6bbf9845a264f9aa45c31836e9f3c1f13be565d0d010e964c661d1e2b", size = 412891, upload_time = "2025-07-01T15:55:48.412Z" }, + { url = "https://files.pythonhosted.org/packages/ef/b9/ceb39af29913c07966a61367b3c08b4f71fad841e32c6b59a129d5974698/rpds_py-0.26.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:49028aa684c144ea502a8e847d23aed5e4c2ef7cadfa7d5eaafcb40864844b7a", size = 557044, upload_time = "2025-07-01T15:55:49.816Z" }, + { url = "https://files.pythonhosted.org/packages/2f/27/35637b98380731a521f8ec4f3fd94e477964f04f6b2f8f7af8a2d889a4af/rpds_py-0.26.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:e5d524d68a474a9688336045bbf76cb0def88549c1b2ad9dbfec1fb7cfbe9170", size = 585774, upload_time = "2025-07-01T15:55:51.192Z" }, + { url = "https://files.pythonhosted.org/packages/52/d9/3f0f105420fecd18551b678c9a6ce60bd23986098b252a56d35781b3e7e9/rpds_py-0.26.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:c1851f429b822831bd2edcbe0cfd12ee9ea77868f8d3daf267b189371671c80e", size = 554886, upload_time = "2025-07-01T15:55:52.541Z" }, + { url = "https://files.pythonhosted.org/packages/6b/c5/347c056a90dc8dd9bc240a08c527315008e1b5042e7a4cf4ac027be9d38a/rpds_py-0.26.0-cp314-cp314t-win32.whl", hash = "sha256:7bdb17009696214c3b66bb3590c6d62e14ac5935e53e929bcdbc5a495987a84f", size = 219027, upload_time = "2025-07-01T15:55:53.874Z" }, + { url = "https://files.pythonhosted.org/packages/75/04/5302cea1aa26d886d34cadbf2dc77d90d7737e576c0065f357b96dc7a1a6/rpds_py-0.26.0-cp314-cp314t-win_amd64.whl", hash = "sha256:f14440b9573a6f76b4ee4770c13f0b5921f71dde3b6fcb8dabbefd13b7fe05d7", size = 232821, upload_time = "2025-07-01T15:55:55.167Z" }, +] + +[[package]] +name = "ruamel-yaml" +version = "0.18.14" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ruamel-yaml-clib", marker = "python_full_version < '3.14' and platform_python_implementation == 'CPython'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/39/87/6da0df742a4684263261c253f00edd5829e6aca970fff69e75028cccc547/ruamel.yaml-0.18.14.tar.gz", hash = "sha256:7227b76aaec364df15936730efbf7d72b30c0b79b1d578bbb8e3dcb2d81f52b7", size = 145511, upload_time = "2025-06-09T08:51:09.828Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/af/6d/6fe4805235e193aad4aaf979160dd1f3c487c57d48b810c816e6e842171b/ruamel.yaml-0.18.14-py3-none-any.whl", hash = "sha256:710ff198bb53da66718c7db27eec4fbcc9aa6ca7204e4c1df2f282b6fe5eb6b2", size = 118570, upload_time = "2025-06-09T08:51:06.348Z" }, +] + +[[package]] +name = "ruamel-yaml-clib" +version = "0.2.12" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/20/84/80203abff8ea4993a87d823a5f632e4d92831ef75d404c9fc78d0176d2b5/ruamel.yaml.clib-0.2.12.tar.gz", hash = "sha256:6c8fbb13ec503f99a91901ab46e0b07ae7941cd527393187039aec586fdfd36f", size = 225315, upload_time = "2024-10-20T10:10:56.22Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/48/41/e7a405afbdc26af961678474a55373e1b323605a4f5e2ddd4a80ea80f628/ruamel.yaml.clib-0.2.12-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:20b0f8dc160ba83b6dcc0e256846e1a02d044e13f7ea74a3d1d56ede4e48c632", size = 133433, upload_time = "2024-10-20T10:12:55.657Z" }, + { url = "https://files.pythonhosted.org/packages/ec/b0/b850385604334c2ce90e3ee1013bd911aedf058a934905863a6ea95e9eb4/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:943f32bc9dedb3abff9879edc134901df92cfce2c3d5c9348f172f62eb2d771d", size = 647362, upload_time = "2024-10-20T10:12:57.155Z" }, + { url = "https://files.pythonhosted.org/packages/44/d0/3f68a86e006448fb6c005aee66565b9eb89014a70c491d70c08de597f8e4/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95c3829bb364fdb8e0332c9931ecf57d9be3519241323c5274bd82f709cebc0c", size = 754118, upload_time = "2024-10-20T10:12:58.501Z" }, + { url = "https://files.pythonhosted.org/packages/52/a9/d39f3c5ada0a3bb2870d7db41901125dbe2434fa4f12ca8c5b83a42d7c53/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:749c16fcc4a2b09f28843cda5a193e0283e47454b63ec4b81eaa2242f50e4ccd", size = 706497, upload_time = "2024-10-20T10:13:00.211Z" }, + { url = "https://files.pythonhosted.org/packages/b0/fa/097e38135dadd9ac25aecf2a54be17ddf6e4c23e43d538492a90ab3d71c6/ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bf165fef1f223beae7333275156ab2022cffe255dcc51c27f066b4370da81e31", size = 698042, upload_time = "2024-10-21T11:26:46.038Z" }, + { url = "https://files.pythonhosted.org/packages/ec/d5/a659ca6f503b9379b930f13bc6b130c9f176469b73b9834296822a83a132/ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:32621c177bbf782ca5a18ba4d7af0f1082a3f6e517ac2a18b3974d4edf349680", size = 745831, upload_time = "2024-10-21T11:26:47.487Z" }, + { url = "https://files.pythonhosted.org/packages/db/5d/36619b61ffa2429eeaefaab4f3374666adf36ad8ac6330d855848d7d36fd/ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b82a7c94a498853aa0b272fd5bc67f29008da798d4f93a2f9f289feb8426a58d", size = 715692, upload_time = "2024-12-11T19:58:17.252Z" }, + { url = "https://files.pythonhosted.org/packages/b1/82/85cb92f15a4231c89b95dfe08b09eb6adca929ef7df7e17ab59902b6f589/ruamel.yaml.clib-0.2.12-cp312-cp312-win32.whl", hash = "sha256:e8c4ebfcfd57177b572e2040777b8abc537cdef58a2120e830124946aa9b42c5", size = 98777, upload_time = "2024-10-20T10:13:01.395Z" }, + { url = "https://files.pythonhosted.org/packages/d7/8f/c3654f6f1ddb75daf3922c3d8fc6005b1ab56671ad56ffb874d908bfa668/ruamel.yaml.clib-0.2.12-cp312-cp312-win_amd64.whl", hash = "sha256:0467c5965282c62203273b838ae77c0d29d7638c8a4e3a1c8bdd3602c10904e4", size = 115523, upload_time = "2024-10-20T10:13:02.768Z" }, + { url = "https://files.pythonhosted.org/packages/29/00/4864119668d71a5fa45678f380b5923ff410701565821925c69780356ffa/ruamel.yaml.clib-0.2.12-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:4c8c5d82f50bb53986a5e02d1b3092b03622c02c2eb78e29bec33fd9593bae1a", size = 132011, upload_time = "2024-10-20T10:13:04.377Z" }, + { url = "https://files.pythonhosted.org/packages/7f/5e/212f473a93ae78c669ffa0cb051e3fee1139cb2d385d2ae1653d64281507/ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux2014_aarch64.whl", hash = "sha256:e7e3736715fbf53e9be2a79eb4db68e4ed857017344d697e8b9749444ae57475", size = 642488, upload_time = "2024-10-20T10:13:05.906Z" }, + { url = "https://files.pythonhosted.org/packages/1f/8f/ecfbe2123ade605c49ef769788f79c38ddb1c8fa81e01f4dbf5cf1a44b16/ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b7e75b4965e1d4690e93021adfcecccbca7d61c7bddd8e22406ef2ff20d74ef", size = 745066, upload_time = "2024-10-20T10:13:07.26Z" }, + { url = "https://files.pythonhosted.org/packages/e2/a9/28f60726d29dfc01b8decdb385de4ced2ced9faeb37a847bd5cf26836815/ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96777d473c05ee3e5e3c3e999f5d23c6f4ec5b0c38c098b3a5229085f74236c6", size = 701785, upload_time = "2024-10-20T10:13:08.504Z" }, + { url = "https://files.pythonhosted.org/packages/84/7e/8e7ec45920daa7f76046578e4f677a3215fe8f18ee30a9cb7627a19d9b4c/ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:3bc2a80e6420ca8b7d3590791e2dfc709c88ab9152c00eeb511c9875ce5778bf", size = 693017, upload_time = "2024-10-21T11:26:48.866Z" }, + { url = "https://files.pythonhosted.org/packages/c5/b3/d650eaade4ca225f02a648321e1ab835b9d361c60d51150bac49063b83fa/ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:e188d2699864c11c36cdfdada94d781fd5d6b0071cd9c427bceb08ad3d7c70e1", size = 741270, upload_time = "2024-10-21T11:26:50.213Z" }, + { url = "https://files.pythonhosted.org/packages/87/b8/01c29b924dcbbed75cc45b30c30d565d763b9c4d540545a0eeecffb8f09c/ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4f6f3eac23941b32afccc23081e1f50612bdbe4e982012ef4f5797986828cd01", size = 709059, upload_time = "2024-12-11T19:58:18.846Z" }, + { url = "https://files.pythonhosted.org/packages/30/8c/ed73f047a73638257aa9377ad356bea4d96125b305c34a28766f4445cc0f/ruamel.yaml.clib-0.2.12-cp313-cp313-win32.whl", hash = "sha256:6442cb36270b3afb1b4951f060eccca1ce49f3d087ca1ca4563a6eb479cb3de6", size = 98583, upload_time = "2024-10-20T10:13:09.658Z" }, + { url = "https://files.pythonhosted.org/packages/b0/85/e8e751d8791564dd333d5d9a4eab0a7a115f7e349595417fd50ecae3395c/ruamel.yaml.clib-0.2.12-cp313-cp313-win_amd64.whl", hash = "sha256:e5b8daf27af0b90da7bb903a876477a9e6d7270be6146906b276605997c7e9a3", size = 115190, upload_time = "2024-10-20T10:13:10.66Z" }, +] + +[[package]] +name = "ruff" +version = "0.12.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6c/3d/d9a195676f25d00dbfcf3cf95fdd4c685c497fcfa7e862a44ac5e4e96480/ruff-0.12.2.tar.gz", hash = "sha256:d7b4f55cd6f325cb7621244f19c873c565a08aff5a4ba9c69aa7355f3f7afd3e", size = 4432239, upload_time = "2025-07-03T16:40:19.566Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/74/b6/2098d0126d2d3318fd5bec3ad40d06c25d377d95749f7a0c5af17129b3b1/ruff-0.12.2-py3-none-linux_armv6l.whl", hash = "sha256:093ea2b221df1d2b8e7ad92fc6ffdca40a2cb10d8564477a987b44fd4008a7be", size = 10369761, upload_time = "2025-07-03T16:39:38.847Z" }, + { url = "https://files.pythonhosted.org/packages/b1/4b/5da0142033dbe155dc598cfb99262d8ee2449d76920ea92c4eeb9547c208/ruff-0.12.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:09e4cf27cc10f96b1708100fa851e0daf21767e9709e1649175355280e0d950e", size = 11155659, upload_time = "2025-07-03T16:39:42.294Z" }, + { url = "https://files.pythonhosted.org/packages/3e/21/967b82550a503d7c5c5c127d11c935344b35e8c521f52915fc858fb3e473/ruff-0.12.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:8ae64755b22f4ff85e9c52d1f82644abd0b6b6b6deedceb74bd71f35c24044cc", size = 10537769, upload_time = "2025-07-03T16:39:44.75Z" }, + { url = "https://files.pythonhosted.org/packages/33/91/00cff7102e2ec71a4890fb7ba1803f2cdb122d82787c7d7cf8041fe8cbc1/ruff-0.12.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3eb3a6b2db4d6e2c77e682f0b988d4d61aff06860158fdb413118ca133d57922", size = 10717602, upload_time = "2025-07-03T16:39:47.652Z" }, + { url = "https://files.pythonhosted.org/packages/9b/eb/928814daec4e1ba9115858adcda44a637fb9010618721937491e4e2283b8/ruff-0.12.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:73448de992d05517170fc37169cbca857dfeaeaa8c2b9be494d7bcb0d36c8f4b", size = 10198772, upload_time = "2025-07-03T16:39:49.641Z" }, + { url = "https://files.pythonhosted.org/packages/50/fa/f15089bc20c40f4f72334f9145dde55ab2b680e51afb3b55422effbf2fb6/ruff-0.12.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3b8b94317cbc2ae4a2771af641739f933934b03555e51515e6e021c64441532d", size = 11845173, upload_time = "2025-07-03T16:39:52.069Z" }, + { url = "https://files.pythonhosted.org/packages/43/9f/1f6f98f39f2b9302acc161a4a2187b1e3a97634fe918a8e731e591841cf4/ruff-0.12.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:45fc42c3bf1d30d2008023a0a9a0cfb06bf9835b147f11fe0679f21ae86d34b1", size = 12553002, upload_time = "2025-07-03T16:39:54.551Z" }, + { url = "https://files.pythonhosted.org/packages/d8/70/08991ac46e38ddd231c8f4fd05ef189b1b94be8883e8c0c146a025c20a19/ruff-0.12.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce48f675c394c37e958bf229fb5c1e843e20945a6d962cf3ea20b7a107dcd9f4", size = 12171330, upload_time = "2025-07-03T16:39:57.55Z" }, + { url = "https://files.pythonhosted.org/packages/88/a9/5a55266fec474acfd0a1c73285f19dd22461d95a538f29bba02edd07a5d9/ruff-0.12.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:793d8859445ea47591272021a81391350205a4af65a9392401f418a95dfb75c9", size = 11774717, upload_time = "2025-07-03T16:39:59.78Z" }, + { url = "https://files.pythonhosted.org/packages/87/e5/0c270e458fc73c46c0d0f7cf970bb14786e5fdb88c87b5e423a4bd65232b/ruff-0.12.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6932323db80484dda89153da3d8e58164d01d6da86857c79f1961934354992da", size = 11646659, upload_time = "2025-07-03T16:40:01.934Z" }, + { url = "https://files.pythonhosted.org/packages/b7/b6/45ab96070c9752af37f0be364d849ed70e9ccede07675b0ec4e3ef76b63b/ruff-0.12.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:6aa7e623a3a11538108f61e859ebf016c4f14a7e6e4eba1980190cacb57714ce", size = 10604012, upload_time = "2025-07-03T16:40:04.363Z" }, + { url = "https://files.pythonhosted.org/packages/86/91/26a6e6a424eb147cc7627eebae095cfa0b4b337a7c1c413c447c9ebb72fd/ruff-0.12.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:2a4a20aeed74671b2def096bdf2eac610c7d8ffcbf4fb0e627c06947a1d7078d", size = 10176799, upload_time = "2025-07-03T16:40:06.514Z" }, + { url = "https://files.pythonhosted.org/packages/f5/0c/9f344583465a61c8918a7cda604226e77b2c548daf8ef7c2bfccf2b37200/ruff-0.12.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:71a4c550195612f486c9d1f2b045a600aeba851b298c667807ae933478fcef04", size = 11241507, upload_time = "2025-07-03T16:40:08.708Z" }, + { url = "https://files.pythonhosted.org/packages/1c/b7/99c34ded8fb5f86c0280278fa89a0066c3760edc326e935ce0b1550d315d/ruff-0.12.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:4987b8f4ceadf597c927beee65a5eaf994c6e2b631df963f86d8ad1bdea99342", size = 11717609, upload_time = "2025-07-03T16:40:10.836Z" }, + { url = "https://files.pythonhosted.org/packages/51/de/8589fa724590faa057e5a6d171e7f2f6cffe3287406ef40e49c682c07d89/ruff-0.12.2-py3-none-win32.whl", hash = "sha256:369ffb69b70cd55b6c3fc453b9492d98aed98062db9fec828cdfd069555f5f1a", size = 10523823, upload_time = "2025-07-03T16:40:13.203Z" }, + { url = "https://files.pythonhosted.org/packages/94/47/8abf129102ae4c90cba0c2199a1a9b0fa896f6f806238d6f8c14448cc748/ruff-0.12.2-py3-none-win_amd64.whl", hash = "sha256:dca8a3b6d6dc9810ed8f328d406516bf4d660c00caeaef36eb831cf4871b0639", size = 11629831, upload_time = "2025-07-03T16:40:15.478Z" }, + { url = "https://files.pythonhosted.org/packages/e2/1f/72d2946e3cc7456bb837e88000eb3437e55f80db339c840c04015a11115d/ruff-0.12.2-py3-none-win_arm64.whl", hash = "sha256:48d6c6bfb4761df68bc05ae630e24f506755e702d4fb08f08460be778c7ccb12", size = 10735334, upload_time = "2025-07-03T16:40:17.677Z" }, +] + +[[package]] +name = "savepagenow" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/84/a4/b61c6e7a13b848fd985c9ed9acd525ccb1c2675e6cfa0d62292ae8015792/savepagenow-1.3.0.tar.gz", hash = "sha256:d0bc6bbe4606c700315015c3defcfab3c329208002b2b8cdc59f9b52996c6d3f", size = 42927, upload_time = "2023-07-01T13:31:49.607Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a6/8f/aea39979f8a7091ad2242a038a0e4c2b463593923ce598a914255dfba9ef/savepagenow-1.3.0-py2.py3-none-any.whl", hash = "sha256:4b0a4fff47254c160a37a20868ab53bb90da3d3f9f96086a9255b2375e39fcbf", size = 5649, upload_time = "2023-07-01T13:31:48.005Z" }, +] + +[[package]] +name = "scipy" +version = "1.16.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/81/18/b06a83f0c5ee8cddbde5e3f3d0bb9b702abfa5136ef6d4620ff67df7eee5/scipy-1.16.0.tar.gz", hash = "sha256:b5ef54021e832869c8cfb03bc3bf20366cbcd426e02a58e8a58d7584dfbb8f62", size = 30581216, upload_time = "2025-06-22T16:27:55.782Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/01/c0/c943bc8d2bbd28123ad0f4f1eef62525fa1723e84d136b32965dcb6bad3a/scipy-1.16.0-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:7eb6bd33cef4afb9fa5f1fb25df8feeb1e52d94f21a44f1d17805b41b1da3180", size = 36459071, upload_time = "2025-06-22T16:19:06.605Z" }, + { url = "https://files.pythonhosted.org/packages/99/0d/270e2e9f1a4db6ffbf84c9a0b648499842046e4e0d9b2275d150711b3aba/scipy-1.16.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:1dbc8fdba23e4d80394ddfab7a56808e3e6489176d559c6c71935b11a2d59db1", size = 28490500, upload_time = "2025-06-22T16:19:11.775Z" }, + { url = "https://files.pythonhosted.org/packages/1c/22/01d7ddb07cff937d4326198ec8d10831367a708c3da72dfd9b7ceaf13028/scipy-1.16.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:7dcf42c380e1e3737b343dec21095c9a9ad3f9cbe06f9c05830b44b1786c9e90", size = 20762345, upload_time = "2025-06-22T16:19:15.813Z" }, + { url = "https://files.pythonhosted.org/packages/34/7f/87fd69856569ccdd2a5873fe5d7b5bbf2ad9289d7311d6a3605ebde3a94b/scipy-1.16.0-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:26ec28675f4a9d41587266084c626b02899db373717d9312fa96ab17ca1ae94d", size = 23418563, upload_time = "2025-06-22T16:19:20.746Z" }, + { url = "https://files.pythonhosted.org/packages/f6/f1/e4f4324fef7f54160ab749efbab6a4bf43678a9eb2e9817ed71a0a2fd8de/scipy-1.16.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:952358b7e58bd3197cfbd2f2f2ba829f258404bdf5db59514b515a8fe7a36c52", size = 33203951, upload_time = "2025-06-22T16:19:25.813Z" }, + { url = "https://files.pythonhosted.org/packages/6d/f0/b6ac354a956384fd8abee2debbb624648125b298f2c4a7b4f0d6248048a5/scipy-1.16.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:03931b4e870c6fef5b5c0970d52c9f6ddd8c8d3e934a98f09308377eba6f3824", size = 35070225, upload_time = "2025-06-22T16:19:31.416Z" }, + { url = "https://files.pythonhosted.org/packages/e5/73/5cbe4a3fd4bc3e2d67ffad02c88b83edc88f381b73ab982f48f3df1a7790/scipy-1.16.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:512c4f4f85912767c351a0306824ccca6fd91307a9f4318efe8fdbd9d30562ef", size = 35389070, upload_time = "2025-06-22T16:19:37.387Z" }, + { url = "https://files.pythonhosted.org/packages/86/e8/a60da80ab9ed68b31ea5a9c6dfd3c2f199347429f229bf7f939a90d96383/scipy-1.16.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e69f798847e9add03d512eaf5081a9a5c9a98757d12e52e6186ed9681247a1ac", size = 37825287, upload_time = "2025-06-22T16:19:43.375Z" }, + { url = "https://files.pythonhosted.org/packages/ea/b5/29fece1a74c6a94247f8a6fb93f5b28b533338e9c34fdcc9cfe7a939a767/scipy-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:adf9b1999323ba335adc5d1dc7add4781cb5a4b0ef1e98b79768c05c796c4e49", size = 38431929, upload_time = "2025-06-22T16:19:49.385Z" }, + { url = "https://files.pythonhosted.org/packages/46/95/0746417bc24be0c2a7b7563946d61f670a3b491b76adede420e9d173841f/scipy-1.16.0-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:e9f414cbe9ca289a73e0cc92e33a6a791469b6619c240aa32ee18abdce8ab451", size = 36418162, upload_time = "2025-06-22T16:19:56.3Z" }, + { url = "https://files.pythonhosted.org/packages/19/5a/914355a74481b8e4bbccf67259bbde171348a3f160b67b4945fbc5f5c1e5/scipy-1.16.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:bbba55fb97ba3cdef9b1ee973f06b09d518c0c7c66a009c729c7d1592be1935e", size = 28465985, upload_time = "2025-06-22T16:20:01.238Z" }, + { url = "https://files.pythonhosted.org/packages/58/46/63477fc1246063855969cbefdcee8c648ba4b17f67370bd542ba56368d0b/scipy-1.16.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:58e0d4354eacb6004e7aa1cd350e5514bd0270acaa8d5b36c0627bb3bb486974", size = 20737961, upload_time = "2025-06-22T16:20:05.913Z" }, + { url = "https://files.pythonhosted.org/packages/93/86/0fbb5588b73555e40f9d3d6dde24ee6fac7d8e301a27f6f0cab9d8f66ff2/scipy-1.16.0-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:75b2094ec975c80efc273567436e16bb794660509c12c6a31eb5c195cbf4b6dc", size = 23377941, upload_time = "2025-06-22T16:20:10.668Z" }, + { url = "https://files.pythonhosted.org/packages/ca/80/a561f2bf4c2da89fa631b3cbf31d120e21ea95db71fd9ec00cb0247c7a93/scipy-1.16.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:6b65d232157a380fdd11a560e7e21cde34fdb69d65c09cb87f6cc024ee376351", size = 33196703, upload_time = "2025-06-22T16:20:16.097Z" }, + { url = "https://files.pythonhosted.org/packages/11/6b/3443abcd0707d52e48eb315e33cc669a95e29fc102229919646f5a501171/scipy-1.16.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1d8747f7736accd39289943f7fe53a8333be7f15a82eea08e4afe47d79568c32", size = 35083410, upload_time = "2025-06-22T16:20:21.734Z" }, + { url = "https://files.pythonhosted.org/packages/20/ab/eb0fc00e1e48961f1bd69b7ad7e7266896fe5bad4ead91b5fc6b3561bba4/scipy-1.16.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:eb9f147a1b8529bb7fec2a85cf4cf42bdfadf9e83535c309a11fdae598c88e8b", size = 35387829, upload_time = "2025-06-22T16:20:27.548Z" }, + { url = "https://files.pythonhosted.org/packages/57/9e/d6fc64e41fad5d481c029ee5a49eefc17f0b8071d636a02ceee44d4a0de2/scipy-1.16.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d2b83c37edbfa837a8923d19c749c1935ad3d41cf196006a24ed44dba2ec4358", size = 37841356, upload_time = "2025-06-22T16:20:35.112Z" }, + { url = "https://files.pythonhosted.org/packages/7c/a7/4c94bbe91f12126b8bf6709b2471900577b7373a4fd1f431f28ba6f81115/scipy-1.16.0-cp313-cp313-win_amd64.whl", hash = "sha256:79a3c13d43c95aa80b87328a46031cf52508cf5f4df2767602c984ed1d3c6bbe", size = 38403710, upload_time = "2025-06-22T16:21:54.473Z" }, + { url = "https://files.pythonhosted.org/packages/47/20/965da8497f6226e8fa90ad3447b82ed0e28d942532e92dd8b91b43f100d4/scipy-1.16.0-cp313-cp313t-macosx_10_14_x86_64.whl", hash = "sha256:f91b87e1689f0370690e8470916fe1b2308e5b2061317ff76977c8f836452a47", size = 36813833, upload_time = "2025-06-22T16:20:43.925Z" }, + { url = "https://files.pythonhosted.org/packages/28/f4/197580c3dac2d234e948806e164601c2df6f0078ed9f5ad4a62685b7c331/scipy-1.16.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:88a6ca658fb94640079e7a50b2ad3b67e33ef0f40e70bdb7dc22017dae73ac08", size = 28974431, upload_time = "2025-06-22T16:20:51.302Z" }, + { url = "https://files.pythonhosted.org/packages/8a/fc/e18b8550048d9224426e76906694c60028dbdb65d28b1372b5503914b89d/scipy-1.16.0-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:ae902626972f1bd7e4e86f58fd72322d7f4ec7b0cfc17b15d4b7006efc385176", size = 21246454, upload_time = "2025-06-22T16:20:57.276Z" }, + { url = "https://files.pythonhosted.org/packages/8c/48/07b97d167e0d6a324bfd7484cd0c209cc27338b67e5deadae578cf48e809/scipy-1.16.0-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:8cb824c1fc75ef29893bc32b3ddd7b11cf9ab13c1127fe26413a05953b8c32ed", size = 23772979, upload_time = "2025-06-22T16:21:03.363Z" }, + { url = "https://files.pythonhosted.org/packages/4c/4f/9efbd3f70baf9582edf271db3002b7882c875ddd37dc97f0f675ad68679f/scipy-1.16.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:de2db7250ff6514366a9709c2cba35cb6d08498e961cba20d7cff98a7ee88938", size = 33341972, upload_time = "2025-06-22T16:21:11.14Z" }, + { url = "https://files.pythonhosted.org/packages/3f/dc/9e496a3c5dbe24e76ee24525155ab7f659c20180bab058ef2c5fa7d9119c/scipy-1.16.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e85800274edf4db8dd2e4e93034f92d1b05c9421220e7ded9988b16976f849c1", size = 35185476, upload_time = "2025-06-22T16:21:19.156Z" }, + { url = "https://files.pythonhosted.org/packages/ce/b3/21001cff985a122ba434c33f2c9d7d1dc3b669827e94f4fc4e1fe8b9dfd8/scipy-1.16.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4f720300a3024c237ace1cb11f9a84c38beb19616ba7c4cdcd771047a10a1706", size = 35570990, upload_time = "2025-06-22T16:21:27.797Z" }, + { url = "https://files.pythonhosted.org/packages/e5/d3/7ba42647d6709251cdf97043d0c107e0317e152fa2f76873b656b509ff55/scipy-1.16.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:aad603e9339ddb676409b104c48a027e9916ce0d2838830691f39552b38a352e", size = 37950262, upload_time = "2025-06-22T16:21:36.976Z" }, + { url = "https://files.pythonhosted.org/packages/eb/c4/231cac7a8385394ebbbb4f1ca662203e9d8c332825ab4f36ffc3ead09a42/scipy-1.16.0-cp313-cp313t-win_amd64.whl", hash = "sha256:f56296fefca67ba605fd74d12f7bd23636267731a72cb3947963e76b8c0a25db", size = 38515076, upload_time = "2025-06-22T16:21:45.694Z" }, +] + +[[package]] +name = "seaborn" +version = "0.13.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "matplotlib" }, + { name = "numpy" }, + { name = "pandas" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/86/59/a451d7420a77ab0b98f7affa3a1d78a313d2f7281a57afb1a34bae8ab412/seaborn-0.13.2.tar.gz", hash = "sha256:93e60a40988f4d65e9f4885df477e2fdaff6b73a9ded434c1ab356dd57eefff7", size = 1457696, upload_time = "2024-01-25T13:21:52.551Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/83/11/00d3c3dfc25ad54e731d91449895a79e4bf2384dc3ac01809010ba88f6d5/seaborn-0.13.2-py3-none-any.whl", hash = "sha256:636f8336facf092165e27924f223d3c62ca560b1f2bb5dff7ab7fad265361987", size = 294914, upload_time = "2024-01-25T13:21:49.598Z" }, +] + +[[package]] +name = "shellingham" +version = "1.5.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310, upload_time = "2023-10-24T04:13:40.426Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755, upload_time = "2023-10-24T04:13:38.866Z" }, +] + +[[package]] +name = "simpleeval" +version = "1.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ff/6f/15be211749430f52f2c8f0c69158a6fc961c03aac93fa28d44d1a6f5ebc7/simpleeval-1.0.3.tar.gz", hash = "sha256:67bbf246040ac3b57c29cf048657b9cf31d4e7b9d6659684daa08ca8f1e45829", size = 24358, upload_time = "2024-11-02T10:29:46.912Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/e9/e58082fbb8cecbb6fb4133033c40cc50c248b1a331582be3a0f39138d65b/simpleeval-1.0.3-py3-none-any.whl", hash = "sha256:e3bdbb8c82c26297c9a153902d0fd1858a6c3774bf53ff4f134788c3f2035c38", size = 15762, upload_time = "2024-11-02T10:29:45.706Z" }, +] + +[[package]] +name = "six" +version = "1.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload_time = "2024-12-04T17:35:28.174Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload_time = "2024-12-04T17:35:26.475Z" }, +] + +[[package]] +name = "smmap" +version = "5.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/44/cd/a040c4b3119bbe532e5b0732286f805445375489fceaec1f48306068ee3b/smmap-5.0.2.tar.gz", hash = "sha256:26ea65a03958fa0c8a1c7e8c7a58fdc77221b8910f6be2131affade476898ad5", size = 22329, upload_time = "2025-01-02T07:14:40.909Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-py3-none-any.whl", hash = "sha256:b30115f0def7d7531d22a0fb6502488d879e75b260a9db4d0819cfb25403af5e", size = 24303, upload_time = "2025-01-02T07:14:38.724Z" }, +] + +[[package]] +name = "soupsieve" +version = "2.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3f/f4/4a80cd6ef364b2e8b65b15816a843c0980f7a5a2b4dc701fc574952aa19f/soupsieve-2.7.tar.gz", hash = "sha256:ad282f9b6926286d2ead4750552c8a6142bc4c783fd66b0293547c8fe6ae126a", size = 103418, upload_time = "2025-04-20T18:50:08.518Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/9c/0e6afc12c269578be5c0c1c9f4b49a8d32770a080260c333ac04cc1c832d/soupsieve-2.7-py3-none-any.whl", hash = "sha256:6e60cc5c1ffaf1cebcc12e8188320b72071e922c2e897f737cadce79ad5d30c4", size = 36677, upload_time = "2025-04-20T18:50:07.196Z" }, +] + +[[package]] +name = "stack-data" +version = "0.6.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "asttokens" }, + { name = "executing" }, + { name = "pure-eval" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/28/e3/55dcc2cfbc3ca9c29519eb6884dd1415ecb53b0e934862d3559ddcb7e20b/stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9", size = 44707, upload_time = "2023-09-30T13:58:05.479Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521, upload_time = "2023-09-30T13:58:03.53Z" }, +] + +[[package]] +name = "structlog" +version = "25.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/79/b9/6e672db4fec07349e7a8a8172c1a6ae235c58679ca29c3f86a61b5e59ff3/structlog-25.4.0.tar.gz", hash = "sha256:186cd1b0a8ae762e29417095664adf1d6a31702160a46dacb7796ea82f7409e4", size = 1369138, upload_time = "2025-06-02T08:21:12.971Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/4a/97ee6973e3a73c74c8120d59829c3861ea52210667ec3e7a16045c62b64d/structlog-25.4.0-py3-none-any.whl", hash = "sha256:fe809ff5c27e557d14e613f45ca441aabda051d119ee5a0102aaba6ce40eed2c", size = 68720, upload_time = "2025-06-02T08:21:11.43Z" }, +] + +[[package]] +name = "tableschema-to-template" +version = "0.0.13" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jsonschema" }, + { name = "pyyaml" }, + { name = "xlsxwriter" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/23/2d/5b5c0127e959a715c5365b3b491846fba5bc1fb7f94370cc3a4fb3f51f68/tableschema-to-template-0.0.13.tar.gz", hash = "sha256:2d8d2250efb840e0ecb9012c5e879a82ef68f65dd86bdff574200fdfc978ff1c", size = 13564, upload_time = "2023-02-01T21:53:17.238Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9f/7f/3c129377d9b815c0bb92b8c24bbecabe5e6b13b831f38924f80d2e5b40b2/tableschema_to_template-0.0.13-py3-none-any.whl", hash = "sha256:4905500a4235740654230c3223629d26fdccb7a0457ec1d0110ea102c4f1146c", size = 14860, upload_time = "2023-02-01T21:53:16.02Z" }, +] + +[[package]] +name = "tabulate" +version = "0.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ec/fe/802052aecb21e3797b8f7902564ab6ea0d60ff8ca23952079064155d1ae1/tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c", size = 81090, upload_time = "2022-10-06T17:21:48.54Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/40/44/4a5f08c96eb108af5cb50b41f76142f0afa346dfa99d5296fe7202a11854/tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f", size = 35252, upload_time = "2022-10-06T17:21:44.262Z" }, +] + +[[package]] +name = "technologydata" +source = { editable = "." } +dependencies = [ + { name = "frictionless", extra = ["pandas"] }, + { name = "hdx-python-country" }, + { name = "ipykernel" }, + { name = "matplotlib" }, + { name = "mypy" }, + { name = "pandas" }, + { name = "pint" }, + { name = "pre-commit" }, + { name = "pydeflate" }, + { name = "pytest" }, + { name = "python-calamine" }, + { name = "requests" }, + { name = "ruff" }, + { name = "savepagenow" }, + { name = "scipy" }, + { name = "seaborn" }, + { name = "tqdm" }, + { name = "ucumvert" }, +] + +[package.optional-dependencies] +docs = [ + { name = "mkdocs-autolinks-plugin" }, + { name = "mkdocs-git-revision-date-localized-plugin" }, + { name = "mkdocs-material" }, + { name = "mkdocs-minify-plugin" }, + { name = "mkdocs-open-in-new-tab" }, + { name = "mkdocstrings" }, + { name = "mkdocstrings-python" }, +] + +[package.metadata] +requires-dist = [ + { name = "frictionless", extras = ["pandas"], specifier = ">=5.18.0" }, + { name = "hdx-python-country", specifier = ">=3.9.4" }, + { name = "ipykernel", specifier = ">=6.29.5" }, + { name = "matplotlib", specifier = ">=3.10.1" }, + { name = "mkdocs-autolinks-plugin", marker = "extra == 'docs'", specifier = ">=0.7.1" }, + { name = "mkdocs-git-revision-date-localized-plugin", marker = "extra == 'docs'", specifier = ">=1.4.7" }, + { name = "mkdocs-material", marker = "extra == 'docs'", specifier = ">=9.6.14" }, + { name = "mkdocs-minify-plugin", marker = "extra == 'docs'", specifier = ">=0.8.0" }, + { name = "mkdocs-open-in-new-tab", marker = "extra == 'docs'", specifier = ">=1.0.8" }, + { name = "mkdocstrings", marker = "extra == 'docs'", specifier = ">=0.29.1" }, + { name = "mkdocstrings-python", marker = "extra == 'docs'", specifier = ">=1.16.11" }, + { name = "mypy", specifier = ">=1.15.0" }, + { name = "pandas", specifier = ">=2.2.3" }, + { name = "pint", specifier = ">=0.24.4" }, + { name = "pre-commit", specifier = ">=4.2.0" }, + { name = "pydeflate", specifier = ">=2.1.3" }, + { name = "pytest", specifier = ">=8.3.5" }, + { name = "python-calamine", specifier = ">=0.3.1" }, + { name = "requests", specifier = ">=2.32.3" }, + { name = "ruff", specifier = ">=0.11.0" }, + { name = "savepagenow", specifier = ">=1.3.0" }, + { name = "scipy", specifier = ">=1.15.2" }, + { name = "seaborn", specifier = ">=0.13.2" }, + { name = "tqdm", specifier = ">=4.67.1" }, + { name = "ucumvert", specifier = ">=0.2.1" }, +] +provides-extras = ["docs"] + +[[package]] +name = "tenacity" +version = "9.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0a/d4/2b0cd0fe285e14b36db076e78c93766ff1d529d70408bd1d2a5a84f1d929/tenacity-9.1.2.tar.gz", hash = "sha256:1169d376c297e7de388d18b4481760d478b0e99a777cad3a9c86e556f4b697cb", size = 48036, upload_time = "2025-04-02T08:25:09.966Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/30/643397144bfbfec6f6ef821f36f33e57d35946c44a2352d3c9f0ae847619/tenacity-9.1.2-py3-none-any.whl", hash = "sha256:f77bf36710d8b73a50b2dd155c97b870017ad21afe6ab300326b0371b3b05138", size = 28248, upload_time = "2025-04-02T08:25:07.678Z" }, +] + +[[package]] +name = "text-unidecode" +version = "1.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ab/e2/e9a00f0ccb71718418230718b3d900e71a5d16e701a3dae079a21e9cd8f8/text-unidecode-1.3.tar.gz", hash = "sha256:bad6603bb14d279193107714b288be206cac565dfa49aa5b105294dd5c4aab93", size = 76885, upload_time = "2019-08-30T21:36:45.405Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a6/a5/c0b6468d3824fe3fde30dbb5e1f687b291608f9473681bbf7dabbf5a87d7/text_unidecode-1.3-py2.py3-none-any.whl", hash = "sha256:1311f10e8b895935241623731c2ba64f4c455287888b18189350b67134a822e8", size = 78154, upload_time = "2019-08-30T21:37:03.543Z" }, +] + +[[package]] +name = "tornado" +version = "6.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/51/89/c72771c81d25d53fe33e3dca61c233b665b2780f21820ba6fd2c6793c12b/tornado-6.5.1.tar.gz", hash = "sha256:84ceece391e8eb9b2b95578db65e920d2a61070260594819589609ba9bc6308c", size = 509934, upload_time = "2025-05-22T18:15:38.788Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/77/89/f4532dee6843c9e0ebc4e28d4be04c67f54f60813e4bf73d595fe7567452/tornado-6.5.1-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:d50065ba7fd11d3bd41bcad0825227cc9a95154bad83239357094c36708001f7", size = 441948, upload_time = "2025-05-22T18:15:20.862Z" }, + { url = "https://files.pythonhosted.org/packages/15/9a/557406b62cffa395d18772e0cdcf03bed2fff03b374677348eef9f6a3792/tornado-6.5.1-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:9e9ca370f717997cb85606d074b0e5b247282cf5e2e1611568b8821afe0342d6", size = 440112, upload_time = "2025-05-22T18:15:22.591Z" }, + { url = "https://files.pythonhosted.org/packages/55/82/7721b7319013a3cf881f4dffa4f60ceff07b31b394e459984e7a36dc99ec/tornado-6.5.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b77e9dfa7ed69754a54c89d82ef746398be82f749df69c4d3abe75c4d1ff4888", size = 443672, upload_time = "2025-05-22T18:15:24.027Z" }, + { url = "https://files.pythonhosted.org/packages/7d/42/d11c4376e7d101171b94e03cef0cbce43e823ed6567ceda571f54cf6e3ce/tornado-6.5.1-cp39-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:253b76040ee3bab8bcf7ba9feb136436a3787208717a1fb9f2c16b744fba7331", size = 443019, upload_time = "2025-05-22T18:15:25.735Z" }, + { url = "https://files.pythonhosted.org/packages/7d/f7/0c48ba992d875521ac761e6e04b0a1750f8150ae42ea26df1852d6a98942/tornado-6.5.1-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:308473f4cc5a76227157cdf904de33ac268af770b2c5f05ca6c1161d82fdd95e", size = 443252, upload_time = "2025-05-22T18:15:27.499Z" }, + { url = "https://files.pythonhosted.org/packages/89/46/d8d7413d11987e316df4ad42e16023cd62666a3c0dfa1518ffa30b8df06c/tornado-6.5.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:caec6314ce8a81cf69bd89909f4b633b9f523834dc1a352021775d45e51d9401", size = 443930, upload_time = "2025-05-22T18:15:29.299Z" }, + { url = "https://files.pythonhosted.org/packages/78/b2/f8049221c96a06df89bed68260e8ca94beca5ea532ffc63b1175ad31f9cc/tornado-6.5.1-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:13ce6e3396c24e2808774741331638ee6c2f50b114b97a55c5b442df65fd9692", size = 443351, upload_time = "2025-05-22T18:15:31.038Z" }, + { url = "https://files.pythonhosted.org/packages/76/ff/6a0079e65b326cc222a54720a748e04a4db246870c4da54ece4577bfa702/tornado-6.5.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:5cae6145f4cdf5ab24744526cc0f55a17d76f02c98f4cff9daa08ae9a217448a", size = 443328, upload_time = "2025-05-22T18:15:32.426Z" }, + { url = "https://files.pythonhosted.org/packages/49/18/e3f902a1d21f14035b5bc6246a8c0f51e0eef562ace3a2cea403c1fb7021/tornado-6.5.1-cp39-abi3-win32.whl", hash = "sha256:e0a36e1bc684dca10b1aa75a31df8bdfed656831489bc1e6a6ebed05dc1ec365", size = 444396, upload_time = "2025-05-22T18:15:34.205Z" }, + { url = "https://files.pythonhosted.org/packages/7b/09/6526e32bf1049ee7de3bebba81572673b19a2a8541f795d887e92af1a8bc/tornado-6.5.1-cp39-abi3-win_amd64.whl", hash = "sha256:908e7d64567cecd4c2b458075589a775063453aeb1d2a1853eedb806922f568b", size = 444840, upload_time = "2025-05-22T18:15:36.1Z" }, + { url = "https://files.pythonhosted.org/packages/55/a7/535c44c7bea4578e48281d83c615219f3ab19e6abc67625ef637c73987be/tornado-6.5.1-cp39-abi3-win_arm64.whl", hash = "sha256:02420a0eb7bf617257b9935e2b754d1b63897525d8a289c9d65690d580b4dcf7", size = 443596, upload_time = "2025-05-22T18:15:37.433Z" }, +] + +[[package]] +name = "tqdm" +version = "4.67.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a8/4b/29b4ef32e036bb34e4ab51796dd745cdba7ed47ad142a9f4a1eb8e0c744d/tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2", size = 169737, upload_time = "2024-11-24T20:12:22.481Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2", size = 78540, upload_time = "2024-11-24T20:12:19.698Z" }, +] + +[[package]] +name = "traitlets" +version = "5.14.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/eb/79/72064e6a701c2183016abbbfedaba506d81e30e232a68c9f0d6f6fcd1574/traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7", size = 161621, upload_time = "2024-04-19T11:11:49.746Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359, upload_time = "2024-04-19T11:11:46.763Z" }, +] + +[[package]] +name = "typer" +version = "0.16.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "rich" }, + { name = "shellingham" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c5/8c/7d682431efca5fd290017663ea4588bf6f2c6aad085c7f108c5dbc316e70/typer-0.16.0.tar.gz", hash = "sha256:af377ffaee1dbe37ae9440cb4e8f11686ea5ce4e9bae01b84ae7c63b87f1dd3b", size = 102625, upload_time = "2025-05-26T14:30:31.824Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/76/42/3efaf858001d2c2913de7f354563e3a3a2f0decae3efe98427125a8f441e/typer-0.16.0-py3-none-any.whl", hash = "sha256:1f79bed11d4d02d4310e3c1b7ba594183bcedb0ac73b27a9e5f28f6fb5b98855", size = 46317, upload_time = "2025-05-26T14:30:30.523Z" }, +] + +[[package]] +name = "typing-extensions" +version = "4.14.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/98/5a/da40306b885cc8c09109dc2e1abd358d5684b1425678151cdaed4731c822/typing_extensions-4.14.1.tar.gz", hash = "sha256:38b39f4aeeab64884ce9f74c94263ef78f3c22467c8724005483154c26648d36", size = 107673, upload_time = "2025-07-04T13:28:34.16Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b5/00/d631e67a838026495268c2f6884f3711a15a9a2a96cd244fdaea53b823fb/typing_extensions-4.14.1-py3-none-any.whl", hash = "sha256:d1e1e3b58374dc93031d6eda2420a48ea44a36c2b4766a4fdeb3710755731d76", size = 43906, upload_time = "2025-07-04T13:28:32.743Z" }, +] + +[[package]] +name = "typing-inspection" +version = "0.4.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f8/b1/0c11f5058406b3af7609f121aaa6b609744687f1d158b3c3a5bf4cc94238/typing_inspection-0.4.1.tar.gz", hash = "sha256:6ae134cc0203c33377d43188d4064e9b357dba58cff3185f22924610e70a9d28", size = 75726, upload_time = "2025-05-21T18:55:23.885Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/17/69/cd203477f944c353c31bade965f880aa1061fd6bf05ded0726ca845b6ff7/typing_inspection-0.4.1-py3-none-any.whl", hash = "sha256:389055682238f53b04f7badcb49b989835495a96700ced5dab2d8feae4b26f51", size = 14552, upload_time = "2025-05-21T18:55:22.152Z" }, +] + +[[package]] +name = "tzdata" +version = "2025.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/95/32/1a225d6164441be760d75c2c42e2780dc0873fe382da3e98a2e1e48361e5/tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9", size = 196380, upload_time = "2025-03-23T13:54:43.652Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8", size = 347839, upload_time = "2025-03-23T13:54:41.845Z" }, +] + +[[package]] +name = "ucumvert" +version = "0.2.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "lark" }, + { name = "pint" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d1/27/cfeeea46e92d30edd1f8938e7630798e92c2cc8dbb0493a26373d850b3c4/ucumvert-0.2.2.tar.gz", hash = "sha256:f6218839a36b0e74e671f16d1f9f4aa1a2b530527a3c126031515c13273b1343", size = 52281, upload_time = "2025-05-10T22:18:25.204Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6b/b5/be9107654e04f7bcc16138598f2bccfde20952dfe1115f5289b5a7c5717e/ucumvert-0.2.2-py3-none-any.whl", hash = "sha256:cd5b9e93f9dfc52d4dbe3f4e790d0b426934185823a611fd6898bb4e3d6f4c86", size = 53201, upload_time = "2025-05-10T22:18:23.304Z" }, +] + +[[package]] +name = "unidecode" +version = "1.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/7d/a8a765761bbc0c836e397a2e48d498305a865b70a8600fd7a942e85dcf63/Unidecode-1.4.0.tar.gz", hash = "sha256:ce35985008338b676573023acc382d62c264f307c8f7963733405add37ea2b23", size = 200149, upload_time = "2025-04-24T08:45:03.798Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8f/b7/559f59d57d18b44c6d1250d2eeaa676e028b9c527431f5d0736478a73ba1/Unidecode-1.4.0-py3-none-any.whl", hash = "sha256:c3c7606c27503ad8d501270406e345ddb480a7b5f38827eafe4fa82a137f0021", size = 235837, upload_time = "2025-04-24T08:45:01.609Z" }, +] + +[[package]] +name = "urllib3" +version = "2.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/15/22/9ee70a2574a4f4599c47dd506532914ce044817c7752a79b6a51286319bc/urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760", size = 393185, upload_time = "2025-06-18T14:07:41.644Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795, upload_time = "2025-06-18T14:07:40.39Z" }, +] + +[[package]] +name = "validators" +version = "0.35.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/53/66/a435d9ae49850b2f071f7ebd8119dd4e84872b01630d6736761e6e7fd847/validators-0.35.0.tar.gz", hash = "sha256:992d6c48a4e77c81f1b4daba10d16c3a9bb0dbb79b3a19ea847ff0928e70497a", size = 73399, upload_time = "2025-05-01T05:42:06.7Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fa/6e/3e955517e22cbdd565f2f8b2e73d52528b14b8bcfdb04f62466b071de847/validators-0.35.0-py3-none-any.whl", hash = "sha256:e8c947097eae7892cb3d26868d637f79f47b4a0554bc6b80065dfe5aac3705dd", size = 44712, upload_time = "2025-05-01T05:42:04.203Z" }, +] + +[[package]] +name = "virtualenv" +version = "20.31.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "distlib" }, + { name = "filelock" }, + { name = "platformdirs" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/56/2c/444f465fb2c65f40c3a104fd0c495184c4f2336d65baf398e3c75d72ea94/virtualenv-20.31.2.tar.gz", hash = "sha256:e10c0a9d02835e592521be48b332b6caee6887f332c111aa79a09b9e79efc2af", size = 6076316, upload_time = "2025-05-08T17:58:23.811Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f3/40/b1c265d4b2b62b58576588510fc4d1fe60a86319c8de99fd8e9fec617d2c/virtualenv-20.31.2-py3-none-any.whl", hash = "sha256:36efd0d9650ee985f0cad72065001e66d49a6f24eb44d98980f630686243cf11", size = 6057982, upload_time = "2025-05-08T17:58:21.15Z" }, +] + +[[package]] +name = "watchdog" +version = "6.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/db/7d/7f3d619e951c88ed75c6037b246ddcf2d322812ee8ea189be89511721d54/watchdog-6.0.0.tar.gz", hash = "sha256:9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282", size = 131220, upload_time = "2024-11-01T14:07:13.037Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/39/ea/3930d07dafc9e286ed356a679aa02d777c06e9bfd1164fa7c19c288a5483/watchdog-6.0.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:bdd4e6f14b8b18c334febb9c4425a878a2ac20efd1e0b231978e7b150f92a948", size = 96471, upload_time = "2024-11-01T14:06:37.745Z" }, + { url = "https://files.pythonhosted.org/packages/12/87/48361531f70b1f87928b045df868a9fd4e253d9ae087fa4cf3f7113be363/watchdog-6.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c7c15dda13c4eb00d6fb6fc508b3c0ed88b9d5d374056b239c4ad1611125c860", size = 88449, upload_time = "2024-11-01T14:06:39.748Z" }, + { url = "https://files.pythonhosted.org/packages/5b/7e/8f322f5e600812e6f9a31b75d242631068ca8f4ef0582dd3ae6e72daecc8/watchdog-6.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6f10cb2d5902447c7d0da897e2c6768bca89174d0c6e1e30abec5421af97a5b0", size = 89054, upload_time = "2024-11-01T14:06:41.009Z" }, + { url = "https://files.pythonhosted.org/packages/68/98/b0345cabdce2041a01293ba483333582891a3bd5769b08eceb0d406056ef/watchdog-6.0.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:490ab2ef84f11129844c23fb14ecf30ef3d8a6abafd3754a6f75ca1e6654136c", size = 96480, upload_time = "2024-11-01T14:06:42.952Z" }, + { url = "https://files.pythonhosted.org/packages/85/83/cdf13902c626b28eedef7ec4f10745c52aad8a8fe7eb04ed7b1f111ca20e/watchdog-6.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:76aae96b00ae814b181bb25b1b98076d5fc84e8a53cd8885a318b42b6d3a5134", size = 88451, upload_time = "2024-11-01T14:06:45.084Z" }, + { url = "https://files.pythonhosted.org/packages/fe/c4/225c87bae08c8b9ec99030cd48ae9c4eca050a59bf5c2255853e18c87b50/watchdog-6.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a175f755fc2279e0b7312c0035d52e27211a5bc39719dd529625b1930917345b", size = 89057, upload_time = "2024-11-01T14:06:47.324Z" }, + { url = "https://files.pythonhosted.org/packages/a9/c7/ca4bf3e518cb57a686b2feb4f55a1892fd9a3dd13f470fca14e00f80ea36/watchdog-6.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7607498efa04a3542ae3e05e64da8202e58159aa1fa4acddf7678d34a35d4f13", size = 79079, upload_time = "2024-11-01T14:06:59.472Z" }, + { url = "https://files.pythonhosted.org/packages/5c/51/d46dc9332f9a647593c947b4b88e2381c8dfc0942d15b8edc0310fa4abb1/watchdog-6.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:9041567ee8953024c83343288ccc458fd0a2d811d6a0fd68c4c22609e3490379", size = 79078, upload_time = "2024-11-01T14:07:01.431Z" }, + { url = "https://files.pythonhosted.org/packages/d4/57/04edbf5e169cd318d5f07b4766fee38e825d64b6913ca157ca32d1a42267/watchdog-6.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:82dc3e3143c7e38ec49d61af98d6558288c415eac98486a5c581726e0737c00e", size = 79076, upload_time = "2024-11-01T14:07:02.568Z" }, + { url = "https://files.pythonhosted.org/packages/ab/cc/da8422b300e13cb187d2203f20b9253e91058aaf7db65b74142013478e66/watchdog-6.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:212ac9b8bf1161dc91bd09c048048a95ca3a4c4f5e5d4a7d1b1a7d5752a7f96f", size = 79077, upload_time = "2024-11-01T14:07:03.893Z" }, + { url = "https://files.pythonhosted.org/packages/2c/3b/b8964e04ae1a025c44ba8e4291f86e97fac443bca31de8bd98d3263d2fcf/watchdog-6.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:e3df4cbb9a450c6d49318f6d14f4bbc80d763fa587ba46ec86f99f9e6876bb26", size = 79078, upload_time = "2024-11-01T14:07:05.189Z" }, + { url = "https://files.pythonhosted.org/packages/62/ae/a696eb424bedff7407801c257d4b1afda455fe40821a2be430e173660e81/watchdog-6.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:2cce7cfc2008eb51feb6aab51251fd79b85d9894e98ba847408f662b3395ca3c", size = 79077, upload_time = "2024-11-01T14:07:06.376Z" }, + { url = "https://files.pythonhosted.org/packages/b5/e8/dbf020b4d98251a9860752a094d09a65e1b436ad181faf929983f697048f/watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:20ffe5b202af80ab4266dcd3e91aae72bf2da48c0d33bdb15c66658e685e94e2", size = 79078, upload_time = "2024-11-01T14:07:07.547Z" }, + { url = "https://files.pythonhosted.org/packages/07/f6/d0e5b343768e8bcb4cda79f0f2f55051bf26177ecd5651f84c07567461cf/watchdog-6.0.0-py3-none-win32.whl", hash = "sha256:07df1fdd701c5d4c8e55ef6cf55b8f0120fe1aef7ef39a1c6fc6bc2e606d517a", size = 79065, upload_time = "2024-11-01T14:07:09.525Z" }, + { url = "https://files.pythonhosted.org/packages/db/d9/c495884c6e548fce18a8f40568ff120bc3a4b7b99813081c8ac0c936fa64/watchdog-6.0.0-py3-none-win_amd64.whl", hash = "sha256:cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680", size = 79070, upload_time = "2024-11-01T14:07:10.686Z" }, + { url = "https://files.pythonhosted.org/packages/33/e8/e40370e6d74ddba47f002a32919d91310d6074130fe4e17dabcafc15cbf1/watchdog-6.0.0-py3-none-win_ia64.whl", hash = "sha256:a1914259fa9e1454315171103c6a30961236f508b9b623eae470268bbcc6a22f", size = 79067, upload_time = "2024-11-01T14:07:11.845Z" }, +] + +[[package]] +name = "wbgapi" +version = "1.0.12" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyyaml" }, + { name = "requests" }, + { name = "tabulate" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d7/4a/f55695bd1c9f1996b675b6e9e980eef40ebdb5e4bf8774c059c31af6ade1/wbgapi-1.0.12.tar.gz", hash = "sha256:338c3c768bd120b80596b48fa0449ecabc93513ac989c55671dce579dbb3a5be", size = 33590, upload_time = "2022-07-05T15:07:22.772Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/00/12/224030af4886e119a3d03b709f7130e9601a4d15332e1d6a35671b25a4de/wbgapi-1.0.12-py3-none-any.whl", hash = "sha256:c5a1e1683b03d4264d287627c2562932f30e7f5c65509b812cb2e3de7d32633f", size = 36385, upload_time = "2022-07-05T15:07:20.606Z" }, +] + +[[package]] +name = "wcwidth" +version = "0.2.13" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6c/63/53559446a878410fc5a5974feb13d31d78d752eb18aeba59c7fef1af7598/wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5", size = 101301, upload_time = "2024-01-06T02:10:57.829Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fd/84/fd2ba7aafacbad3c4201d395674fc6348826569da3c0937e75505ead3528/wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859", size = 34166, upload_time = "2024-01-06T02:10:55.763Z" }, +] + +[[package]] +name = "wheel" +version = "0.45.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8a/98/2d9906746cdc6a6ef809ae6338005b3f21bb568bea3165cfc6a243fdc25c/wheel-0.45.1.tar.gz", hash = "sha256:661e1abd9198507b1409a20c02106d9670b2576e916d58f520316666abca6729", size = 107545, upload_time = "2024-11-23T00:18:23.513Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/2c/87f3254fd8ffd29e4c02732eee68a83a1d3c346ae39bc6822dcbcb697f2b/wheel-0.45.1-py3-none-any.whl", hash = "sha256:708e7481cc80179af0e556bbf0cc00b8444c7321e2700b8d8580231d13017248", size = 72494, upload_time = "2024-11-23T00:18:21.207Z" }, +] + +[[package]] +name = "win32-setctime" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b3/8f/705086c9d734d3b663af0e9bb3d4de6578d08f46b1b101c2442fd9aecaa2/win32_setctime-1.2.0.tar.gz", hash = "sha256:ae1fdf948f5640aae05c511ade119313fb6a30d7eabe25fef9764dca5873c4c0", size = 4867, upload_time = "2024-12-07T15:28:28.314Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e1/07/c6fe3ad3e685340704d314d765b7912993bcb8dc198f0e7a89382d37974b/win32_setctime-1.2.0-py3-none-any.whl", hash = "sha256:95d644c4e708aba81dc3704a116d8cbc974d70b3bdb8be1d150e36be6e9d1390", size = 4083, upload_time = "2024-12-07T15:28:26.465Z" }, +] + +[[package]] +name = "xlrd" +version = "2.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/07/5a/377161c2d3538d1990d7af382c79f3b2372e880b65de21b01b1a2b78691e/xlrd-2.0.2.tar.gz", hash = "sha256:08b5e25de58f21ce71dc7db3b3b8106c1fa776f3024c54e45b45b374e89234c9", size = 100167, upload_time = "2025-06-14T08:46:39.039Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1a/62/c8d562e7766786ba6587d09c5a8ba9f718ed3fa8af7f4553e8f91c36f302/xlrd-2.0.2-py2.py3-none-any.whl", hash = "sha256:ea762c3d29f4cca48d82df517b6d89fbce4db3107f9d78713e48cd321d5c9aa9", size = 96555, upload_time = "2025-06-14T08:46:37.766Z" }, +] + +[[package]] +name = "xlrd3" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/79/db/88d8d49ddacc203956ecb98dc86c6ffeee6e933ef1f50da9b369de518f7f/xlrd3-1.1.0.tar.gz", hash = "sha256:20e6ed2e5f7f8b4ab61e30faffebceff6fab348332b4c915373f0a72742dc177", size = 58919847, upload_time = "2021-04-25T12:27:10.03Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5d/08/fce745025e58f160e7dcb5a45d4d43eb0bd44c0d8851425be87ef90271fa/xlrd3-1.1.0-py2.py3-none-any.whl", hash = "sha256:8e8e808f938144e7936a6e07c1d57be7a0f6c6f5b37c9c67974b43246d8aacb6", size = 105268, upload_time = "2021-04-25T12:26:55.264Z" }, +] + +[[package]] +name = "xlsx2csv" +version = "0.8.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/36/20/94860286a308a4213581c1beacd4fc7be724250c03583fcff23aaa6107bb/xlsx2csv-0.8.4.tar.gz", hash = "sha256:2aa809888826f6af5b26c77fc7f613f2bbeada0d8cc09e5a58e0f59684bb6911", size = 221390, upload_time = "2024-11-19T17:06:07.818Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c4/c0/15c21556362c67f1155f3643a375d50ac67559b82c768e64e800a42a2577/xlsx2csv-0.8.4-py3-none-any.whl", hash = "sha256:52ab873fc7b2f2ca75d14aee8bd1985a9f5c1bcb3cc7b80df7a5d57a40a67473", size = 15904, upload_time = "2024-11-19T17:06:05.362Z" }, +] + +[[package]] +name = "xlsxwriter" +version = "3.2.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a7/47/7704bac42ac6fe1710ae099b70e6a1e68ed173ef14792b647808c357da43/xlsxwriter-3.2.5.tar.gz", hash = "sha256:7e88469d607cdc920151c0ab3ce9cf1a83992d4b7bc730c5ffdd1a12115a7dbe", size = 213306, upload_time = "2025-06-17T08:59:14.619Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fa/34/a22e6664211f0c8879521328000bdcae9bf6dbafa94a923e531f6d5b3f73/xlsxwriter-3.2.5-py3-none-any.whl", hash = "sha256:4f4824234e1eaf9d95df9a8fe974585ff91d0f5e3d3f12ace5b71e443c1c6abd", size = 172347, upload_time = "2025-06-17T08:59:13.453Z" }, +] + +[[package]] +name = "xlwt" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/06/97/56a6f56ce44578a69343449aa5a0d98eefe04085d69da539f3034e2cd5c1/xlwt-1.3.0.tar.gz", hash = "sha256:c59912717a9b28f1a3c2a98fd60741014b06b043936dcecbc113eaaada156c88", size = 153929, upload_time = "2017-08-22T06:47:16.498Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/44/48/def306413b25c3d01753603b1a222a011b8621aed27cd7f89cbc27e6b0f4/xlwt-1.3.0-py2.py3-none-any.whl", hash = "sha256:a082260524678ba48a297d922cc385f58278b8aa68741596a87de01a9c628b2e", size = 99981, upload_time = "2017-08-22T06:47:15.281Z" }, +] From 617dce4c7c1d2c3a37a7b3c18985484cb978e791 Mon Sep 17 00:00:00 2001 From: Fabrizio Finozzi <167071962+finozzifa@users.noreply.github.com> Date: Mon, 28 Jul 2025 15:18:37 +0200 Subject: [PATCH 03/43] Extend Technology and TechnologyCollection (#14) * doc: update class-diagram * code: technology collection * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * code: update technologycollection and technology definition * code: new changes to file * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * code: add override method for __str__ for Source and SourceCollection * code: update __str__ for source.py * code: finalize technology_collection unit tests * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * data: re-format solar_photovoltaics_example_04 * refactor * code: push forward the development * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * code: add hash and eq methods for Source and finalize get_source_collection * code: SourceCollection optional in Datapackage * code: new datapackage methods * code: docstring for to_datapackage * code: modify unit tests * code: new updates * code: remove to_datapackage * code: remove datapackage path * code: including Annotated and removing Parameters section * code: modify __eq__ method for Source * code: re-write __hash__ method * code: change SourceCollection.from_json --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- docs/class-diagram.puml | 36 +-- technologydata/__init__.py | 8 +- technologydata/datapackage.py | 169 ++++++---- technologydata/parameter.py | 69 +++- technologydata/source.py | 114 +++++-- technologydata/source_collection.py | 103 ++++-- technologydata/technology.py | 96 ++++-- technologydata/technology_collection.py | 238 ++++++++++++++ technologydata/unit_value.py | 13 +- test/conftest.py | 14 +- .../technologies.json | 296 +++++++++--------- .../technologies.json | 288 ++++++++--------- test/test_datapackage.py | 29 ++ test/test_source.py | 98 +++++- test/test_source_collection.py | 48 ++- test/test_technology_collection.py | 106 +++++++ 16 files changed, 1225 insertions(+), 500 deletions(-) create mode 100644 technologydata/technology_collection.py create mode 100644 test/test_datapackage.py create mode 100644 test/test_technology_collection.py diff --git a/docs/class-diagram.puml b/docs/class-diagram.puml index 15db0fff..3ddba2dd 100644 --- a/docs/class-diagram.puml +++ b/docs/class-diagram.puml @@ -10,7 +10,7 @@ class UnitValue { } note left of UnitValue::unit - Unit should be able to accomodate any unit of measurement, + Unit should be able to accommodate any unit of measurement, currencies+years, LHVs and different energy carriers. e.g. EUR_2020, kWh_electricity, kWh_hydrogen_LHV end note @@ -20,8 +20,8 @@ class Source { - authors: str - url: str - url_archive: str - - urldate: str - - urldate_archive: str + - url_date: str + - url_date_archive: str + ensure_in_wayback() + store_in_wayback() @@ -42,6 +42,7 @@ class Parameter { - provenance: str - note: str - sources: SourceCollection + + from_dict(): Parameter } Parameter --> UnitValue : quantity @@ -72,6 +73,7 @@ class Technology { - output-hydrogen: Parameter - output-electricity: Parameter + + from_dict(): Technology + adjust_currency(): Technology // or inplace + adjust_region(): Technology // or inplace + adjust_scale(): Technology // or inplace @@ -116,6 +118,11 @@ end note class TechnologyCollection { - technologies: Iterable + get(**criteria): Technology | TechnologyCollection | None + + from_dict(): TechnologyCollection + + to_json(): str + + to_csv(): str + + to_dataframe(): pd.DataFrame + + from_json(): TechnologyCollection + create_projection(): TechnologyCollection ' TODO: Think about more methods here } @@ -149,25 +156,23 @@ note left of SourceCollection::retrieve_all_from_wayback and stores the files locally. end note -note left of SourceCollection::to_csv - Export the source collection into a csv file. -end note - note left of SourceCollection::to_json Export the source collection into a json file. end note +note left of SourceCollection::to_csv + Export the source collection into a csv file. +end note + note left of SourceCollection::to_dataframe Export the source collection into a Pandas dataframe. end note class Datapackage { - - name: str - - path: Path - technologies: TechnologyCollection - sources: SourceCollection - // potentially other Collections in the future - + to_datapackage() + + to_csv() + from_json() + to_json() + get_source_collection() @@ -182,12 +187,6 @@ note top of Datapackage Please note that the "sources" field is built in the background from "technologies" end note -note right of Datapackage::name - Currently we use "source" as a reference to pre-packaged data and for a column in "technologies.csv". - The Datapackage.name would substitute for referencing to pre-packaged data, e.g. "example01" would be - a packaged data included with `technologydata`. It is meant to be independent of the "TechnologyCollection" or its members. -end note - note right of Datapackage::technologies Derived from the TechnologyCollection. end note @@ -196,11 +195,6 @@ note right of Datapackage::sources Built in the background with the get_source_collection() method, which derives it from all Source objects that are related to the TechnologyCollection (i.e., all sources referenced by technologies and their parameters). end note -note right of Datapackage::to_datapackage - Exports all member Source and TechnologyCollection to a folder following the datapackage - specification, including the schema .json files and the .csv files. -end note - Parameter --> SourceCollection : sources Technology --> "*" Parameter : uses for its members TechnologyCollection --> "*" Technology : consists of diff --git a/technologydata/__init__.py b/technologydata/__init__.py index d3380162..20b78e28 100644 --- a/technologydata/__init__.py +++ b/technologydata/__init__.py @@ -8,17 +8,19 @@ from technologydata.source import Source from technologydata.source_collection import SourceCollection from technologydata.technology import Technology +from technologydata.technology_collection import TechnologyCollection from technologydata.unit_value import UnitValue from technologydata.utils.commons import Commons, DateFormatEnum, FileExtensionEnum __all__ = [ "Commons", "DateFormatEnum", + "DataPackage", "FileExtensionEnum", - "UnitValue", - "Technology", "Parameter", "Source", "SourceCollection", - "DataPackage", + "Technology", + "TechnologyCollection", + "UnitValue", ] diff --git a/technologydata/datapackage.py b/technologydata/datapackage.py index 27ed5182..ca450ff0 100644 --- a/technologydata/datapackage.py +++ b/technologydata/datapackage.py @@ -11,76 +11,135 @@ """ +import logging import pathlib +import typing import pydantic from technologydata.source_collection import SourceCollection +from technologydata.technology_collection import TechnologyCollection -# from technologydata.technology_collection import TechnologyCollection +logger = logging.getLogger(__name__) -# TODO complete class class DataPackage(pydantic.BaseModel): # type: ignore """ Container for a collection of Technology objects and/or Source objects, with batch operations and loading utilities. - Parameters - ---------- - name : str - The short-name code of the source - technologies : List[Technology] - List of Technology objects. - Attributes ---------- - technologies : List[Technology] + technologies : Optional[TechnologyCollection] List of Technology objects. + sources : Optional[SourceCollection] + List of Source objects. """ - name: str - path: pathlib.Path - # technologies: TechnologyCollection - sources: SourceCollection - - # @classmethod - # def from_json(cls, path: pathlib.Path) -> technologydata.DataPackage: - # """ - # Load a DataPackage from a JSON file. - # - # Parameters - # ---------- - # path : Path - # Path to the JSON file. - # - # Returns - # ------- - # DataPackage - # The loaded DataPackage instance. - # - # """ - # with open(path) as f: - # data = json.load(f) - # techs = technologydata.TechnologyCollection( - # [technologydata.Technology(**t) for t in data.get("technologies", [])] - # ) - # # TODO: redo this part once an example JSON is available - # techs = technologydata.TechnologyCollection( - # [technologydata.Technology(**t) for t in data.get("technologies", [])] - # ) - # # You should also handle 'name', 'sources', etc. as needed - # return cls( - # name=data.get("name", ""), - # path=path, - # technologies=techs, - # sources=technologydata.SourceCollection(data.get("sources", [])), - # ) - # - # @classmethod - # def to_json(cls, path: pathlib.Path) -> None: - # pass - # - # @classmethod - # def to_datapackage(cls, path: pathlib.Path) -> None: - # pass + technologies: typing.Annotated[ + TechnologyCollection | None, + pydantic.Field(description="List of Technology objects."), + ] = None + sources: typing.Annotated[ + SourceCollection | None, pydantic.Field(description="List of Source objects.") + ] = None + + def get_source_collection(self) -> None: + """ + Get the SourceCollection associated with this DataPackage from the TechnologyCollection. + + Returns + ------- + SourceCollection + The SourceCollection instance. + + """ + sources_set = set() + if self.sources is None: + if self.technologies is not None: + for technology in self.technologies: + for parameter in technology.parameters.values(): + for source in parameter.sources: + sources_set.add(source) + else: + raise ValueError( + "No technologies available to extract a sources collection from." + ) + else: + logger.info("The data package already has a sources collection.") + self.sources = SourceCollection(sources=list(sources_set)) + + @classmethod + def from_json(cls, path_to_folder: pathlib.Path | str) -> "DataPackage": + """ + Load a DataPackage from a JSON file. + + Parameters + ---------- + path_to_folder : pathlib.Path or str + Path to the data package folder. + + Returns + ------- + DataPackage + The loaded DataPackage instance. + + """ + # Load technologies + technologies_path = pathlib.Path(path_to_folder, "technologies.json") + technologies = TechnologyCollection.from_json(technologies_path) + + # Create DataPackage instance + data_package = cls( + path=path_to_folder, + technologies=technologies, + ) + + # Generate sources collection from technologies if sources is None + data_package.get_source_collection() + + return data_package + + def to_json(self, folder_path: pathlib.Path) -> None: + """ + Export the Datapackage to JSON files. + + The files are: + - the 'technologies' attribute is exported to technologies.json, together with the corresponding data schema + - the 'sources' attribute is exported to sources.json, together with the corresponding data schema + + Parameters + ---------- + folder_path : pathlib.Path + The path to the folder where the JSON files are created + + """ + if self.technologies is not None: + technologies_path = pathlib.Path(folder_path, "technologies.json") + self.technologies.to_json(technologies_path) + + if self.sources is not None: + sources_path = pathlib.Path(folder_path, "sources.json") + self.sources.to_json(sources_path) + + def to_csv(self, folder_path: pathlib.Path) -> None: + """ + Export the Datapackage to CSV files. + + The files are: + - the 'technologies' attribute is exported to technologies.csv + - the 'sources' attribute is exported to sources.csv + + Parameters + ---------- + folder_path : pathlib.Path + The path to the folder where the CSV files are created + + """ + if self.technologies is not None: + technologies_path = pathlib.Path(folder_path, "technologies.csv") + self.technologies.to_csv(path_or_buf=technologies_path) + + if self.sources is not None: + sources_path = pathlib.Path(folder_path, "sources.csv") + self.sources.to_csv(path_or_buf=sources_path) diff --git a/technologydata/parameter.py b/technologydata/parameter.py index 10f94bc6..feb4483a 100644 --- a/technologydata/parameter.py +++ b/technologydata/parameter.py @@ -15,6 +15,8 @@ """ +import typing + import pydantic from technologydata.source_collection import SourceCollection @@ -26,17 +28,6 @@ class Parameter(pydantic.BaseModel): # type: ignore """ Encapsulate a value with its unit, provenance, notes, and sources. - Parameters - ---------- - quantity : UnitValue - The value and its unit. - provenance : Optional[str] - Description of the data's provenance. - note : Optional[str] - Additional notes about the parameter. - sources : SourceCollection - One or more sources for the parameter. - Attributes ---------- quantity : UnitValue @@ -50,12 +41,18 @@ class Parameter(pydantic.BaseModel): # type: ignore """ - quantity: UnitValue = pydantic.Field(..., description="The value and its unit.") - provenance: str | None = pydantic.Field(None, description="Data provenance.") - note: str | None = pydantic.Field(None, description="Additional notes.") - sources: SourceCollection = pydantic.Field( - ..., description="Collection of Sources." - ) + quantity: typing.Annotated[ + UnitValue, pydantic.Field(description="The value and its unit.") + ] + provenance: typing.Annotated[ + str | None, pydantic.Field(description="Data provenance.") + ] = None + note: typing.Annotated[ + str | None, pydantic.Field(description="Additional notes.") + ] = None + sources: typing.Annotated[ + SourceCollection, pydantic.Field(description="Collection of Sources.") + ] @property def value(self) -> float: @@ -82,3 +79,41 @@ def unit(self) -> str: """ return self.quantity.unit + + @classmethod + def from_dict(cls, data: dict[str, typing.Any]) -> "Parameter": + """ + Create an instance of the class from a dictionary. + + Parameters + ---------- + cls : type + The class to instantiate. + data : dict + A dictionary containing the data to initialize the class instance. + Expected keys include: + - "quantity" (dict): A dictionary representing a UnitValue, parsed via `UnitValue.parse_obj()`. + - "provenance" (str or None): Optional provenance information. + - "note" (str or None): Optional notes. + - "sources" (list): A list of source data dictionaries, to be converted into a SourceCollection. + + Returns + ------- + instance : cls + An instance of the class initialized with the provided data. + + Notes + ----- + This method converts the "sources" list into a `SourceCollection` using `SourceCollection.from_json()`. + The "quantity" field is parsed into a `UnitValue` object using `UnitValue.parse_obj()`. + + """ + # Convert sources list into SourceCollection + sources_data = data.get("sources", []) + sources = SourceCollection.from_json(from_str=sources_data) + return cls( + quantity=UnitValue.model_validate(data["quantity"]), + provenance=data.get("provenance"), + note=data.get("note"), + sources=sources, + ) diff --git a/technologydata/source.py b/technologydata/source.py index 3b1fd1f7..7bb369a0 100644 --- a/technologydata/source.py +++ b/technologydata/source.py @@ -30,21 +30,6 @@ class Source(pydantic.BaseModel): # type: ignore """ Represent a data source, including bibliographic and web information. - Parameters - ---------- - title : str - Title of the source. - authors : str - Authors of the source. - url : Optional[str] - URL of the source. - url_archive : Optional[str] - Archived URL (e.g., from the Wayback Machine). - url_date : Optional[str] - Date the URL was accessed. - url_date_archive : Optional[str] - Date the URL was archived. - Attributes ---------- title : str @@ -62,16 +47,95 @@ class Source(pydantic.BaseModel): # type: ignore """ - title: str = pydantic.Field(..., description="Title of the source.") - authors: str = pydantic.Field(..., description="Authors of the source.") - url: str | None = pydantic.Field(None, description="URL of the source.") - url_archive: str | None = pydantic.Field(None, description="Archived URL.") - url_date: str | None = pydantic.Field( - None, description="Date the URL was accessed." - ) - url_date_archive: str | None = pydantic.Field( - None, description="Date the URL was archived." - ) + title: typing.Annotated[str, pydantic.Field(description="Title of the source.")] + authors: typing.Annotated[str, pydantic.Field(description="Authors of the source.")] + url: typing.Annotated[ + str | None, pydantic.Field(description="URL of the source.") + ] = None + url_archive: typing.Annotated[ + str | None, pydantic.Field(description="Archived URL.") + ] = None + url_date: typing.Annotated[ + str | None, pydantic.Field(description="Date the URL was accessed.") + ] = None + url_date_archive: typing.Annotated[ + str | None, pydantic.Field(description="Date the URL was archived.") + ] = None + + def __eq__(self, other: object) -> bool: + """ + Check for equality with another Source object based on non-None attributes. + + Compares all attributes of the current instance with those of the other object. + Only compares attributes that are not None in both instances. + + Parameters + ---------- + other : object + The object to compare with. Expected to be an instance of Source. + + Returns + ------- + bool + True if all non-None attributes are equal between self and other, False otherwise. + Returns False if other is not a Source instance. + + Notes + ----- + This method considers only attributes that are not None in both objects. + If an attribute is None in either object, it is ignored in the comparison. + + """ + if not isinstance(other, Source): + logger.error("The object is not a Source instance.") + return False + + for field in self.__class__.model_fields.keys(): + value_self = getattr(self, field) + value_other = getattr(other, field) + if value_self != value_other: + return False + return True + + def __hash__(self) -> int: + """ + Return a hash value for the Source instance based on all attributes. + + This method computes a combined hash of the instance's attributes to + uniquely identify the object in hash-based collections such as sets and dictionaries. + + Returns + ------- + int + The hash value of the Source instance. + + """ + # Retrieve all attribute values dynamically + attribute_values = tuple( + getattr(self, field) for field in self.__class__.model_fields.keys() + ) + return hash(attribute_values) + + def __str__(self) -> str: + """ + Return a string representation of the Source, including all available attributes. + + Returns + ------- + str + A string detailing the source's information. + + """ + parts = [f"'{self.authors}': '{self.title}'"] + if self.url: + parts.append(f"from url '{self.url}'") + if self.url_date: + parts.append(f"last accessed on '{self.url_date}'") + if self.url_archive: + parts.append(f"archived at '{self.url_archive}'") + if self.url_date_archive: + parts.append(f"on '{self.url_date_archive}'.") + return ", ".join(parts) def ensure_in_wayback(self) -> None: """ diff --git a/technologydata/source_collection.py b/technologydata/source_collection.py index 8dfd1714..702c4f96 100644 --- a/technologydata/source_collection.py +++ b/technologydata/source_collection.py @@ -8,6 +8,7 @@ import json import pathlib import re +import typing import pandas import pydantic @@ -19,11 +20,6 @@ class SourceCollection(pydantic.BaseModel): # type: ignore """ Represent a collection of sources. - Parameters - ---------- - sources : List[Source] - List of Source objects. - Attributes ---------- sources : List[Source] @@ -31,7 +27,46 @@ class SourceCollection(pydantic.BaseModel): # type: ignore """ - sources: list[Source] = pydantic.Field(..., description="List of Source objects.") + sources: typing.Annotated[ + list[Source], pydantic.Field(description="List of Source objects.") + ] + + def __iter__(self) -> typing.Iterator["Source"]: + """ + Return an iterator over the list of Source objects. + + Returns + ------- + Iterator[Source] + An iterator over the Source objects contained in the collection. + + """ + return iter(self.sources) + + def __len__(self) -> int: + """ + Return the number of sources in this collection. + + Returns + ------- + int + The number of Source objects in the sources list. + + """ + return len(self.sources) + + def __str__(self) -> str: + """ + Return a string representation of the SourceCollection. + + Returns + ------- + str + A string representation of the SourceCollection, showing the number of sources. + + """ + sources_str = ", ".join(str(source) for source in self.sources) + return f"SourceCollection with {len(self.sources)} sources: {sources_str}" def get(self, title: str, authors: str) -> "SourceCollection": """ @@ -66,18 +101,6 @@ def get(self, title: str, authors: str) -> "SourceCollection": return SourceCollection(sources=filtered_sources) - def __len__(self) -> int: - """ - Return the number of sources in this collection. - - Returns - ------- - int - The number of Source objects in the sources list. - - """ - return len(self.sources) - def retrieve_all_from_wayback( self, download_directory: pathlib.Path ) -> list[pathlib.Path | None]: @@ -162,7 +185,7 @@ def to_json( file_path : pathlib.Path The path to the JSON file to be created. schema_path : pathlib.Path - The path to the JSON schema file to be created. By default created with a `schema` suffix next to `file_path`. + The path to the JSON schema file to be created. By default, created with a `schema` suffix next to `file_path`. """ if schema_path is None: @@ -180,20 +203,46 @@ def to_json( jsonfile.write(json_data) @classmethod - def from_json(cls, file_path: pathlib.Path | str) -> "SourceCollection": + def from_json( + cls, + file_path: pathlib.Path | str | None = None, + from_str: list[dict[str, typing.Any]] | None = None, + ) -> "SourceCollection": """ Import the SourceCollection from a JSON file. Parameters ---------- - file_path : pathlib.Path + file_path : Optional[pathlib.Path | str] The path to the JSON file to be imported. + from_str : Optional[list] + The list of dictionaries with Source fields. """ - if isinstance(file_path, pathlib.Path | str): - file_path = pathlib.Path(file_path) - else: - raise TypeError("file_path must be a pathlib.Path or str") - with open(file_path, encoding="utf-8") as jsonfile: - json_data = json.load(jsonfile) + if file_path is None and from_str is None: + raise ValueError( + "Both file_path and from_str are None. One must be provided." + ) + + json_data = None + + # Load data from file if file_path is provided + if file_path is not None: + if not isinstance(file_path, (pathlib.Path | str)): + raise TypeError( + f"file_path must be a pathlib.Path or str, but got {type(file_path)}" + ) + path = pathlib.Path(file_path) + with path.open(encoding="utf-8") as jsonfile: + json_data = json.load(jsonfile) + + # Override json_data if from_str is provided + if from_str is not None: + if not isinstance(from_str, list): + raise TypeError(f"from_str must be a list, but got {type(from_str)}") + json_data = {"sources": [Source(**source) for source in from_str]} + + if json_data is None: + raise ValueError("No data to load. Provide either a file_path or from_str.") + return cls(**json_data) diff --git a/technologydata/technology.py b/technologydata/technology.py index ca09967e..2963a968 100644 --- a/technologydata/technology.py +++ b/technologydata/technology.py @@ -11,57 +11,45 @@ import pydantic -import technologydata +from technologydata.parameter import Parameter class Technology(pydantic.BaseModel): # type: ignore """ Represent a technology with region, year, and a flexible set of parameters. - Parameters - ---------- - name : str - Name of the technology. - region : str - Region identifier. - year : Optional[int] - Year of the data. - parameters : Dict[str, Parameter] - Dictionary of parameter names to Parameter objects. - case : Optional[str] - Case or scenario identifier. - detailed_technology : Optional[str] - More detailed technology name. - Attributes ---------- name : str Name of the technology. region : str Region identifier. - year : Optional[int] + year : int Year of the data. parameters : Dict[str, Parameter] Dictionary of parameter names to Parameter objects. - case : Optional[str] + case : str Case or scenario identifier. - detailed_technology : Optional[str] + detailed_technology : str More detailed technology name. """ - name: str = pydantic.Field(..., description="Name of the technology.") - region: str = pydantic.Field(..., description="Region identifier.") - year: int | None = pydantic.Field(None, description="Year of the data.") - parameters: dict[str, technologydata.Parameter] = pydantic.Field( - default_factory=dict, description="Parameters." - ) - case: str | None = pydantic.Field(None, description="Case or scenario identifier.") - detailed_technology: str | None = pydantic.Field( - None, description="Detailed technology name." - ) - - def __getitem__(self, key: str) -> technologydata.Parameter: + name: typing.Annotated[str, pydantic.Field(description="Name of the technology.")] + region: typing.Annotated[str, pydantic.Field(description="Region identifier.")] + year: typing.Annotated[int, pydantic.Field(description="Year of the data.")] + parameters: typing.Annotated[ + dict[str, Parameter], + pydantic.Field(default_factory=dict, description="Parameters."), + ] + case: typing.Annotated[ + str, pydantic.Field(description="Case or scenario identifier.") + ] + detailed_technology: typing.Annotated[ + str, pydantic.Field(description="Detailed technology name.") + ] + + def __getitem__(self, key: str) -> Parameter: """ Access a parameter by name. @@ -78,7 +66,7 @@ def __getitem__(self, key: str) -> technologydata.Parameter: """ return self.parameters[key] - def __setitem__(self, key: str, value: technologydata.Parameter) -> None: + def __setitem__(self, key: str, value: Parameter) -> None: """ Set a parameter by name. @@ -180,3 +168,47 @@ def adjust_scale(self, scaling_factor: float) -> "Technology": """ # Placeholder: implement scaling logic return self + + @classmethod + def from_dict(cls, data: dict[str, typing.Any]) -> "Technology": + """ + Create an instance of the class from a dictionary. + + Parameters + ---------- + cls : type + The class to instantiate. + data : dict + A dictionary containing the data to initialize the class instance. + Expected keys include: + - "region" (str): The region associated with the instance. + - "case" (str): The case identifier. + - "year" (int): The year value. + - "name" (str): The name of the instance. + - "detailed_technology" (str): Details about the technology. + - "parameters" (dict): A dictionary where each key maps to a parameter data + dictionary, which will be converted to a Parameter object. + + Returns + ------- + instance : cls + An instance of the class initialized with the provided data. + + Notes + ----- + This method processes the "parameters" field in the input data by converting each + parameter dictionary into a Parameter object using `Parameter.from_dict()`. It then + constructs and returns an instance of the class with all the provided attributes. + + """ + params = {} + for key, param_data in data.get("parameters", {}).items(): + params[key] = Parameter.from_dict(param_data) + return cls( + region=data["region"], + case=data["case"], + year=data["year"], + name=data["name"], + detailed_technology=data["detailed_technology"], + parameters=params, + ) diff --git a/technologydata/technology_collection.py b/technologydata/technology_collection.py new file mode 100644 index 00000000..4d28dd1b --- /dev/null +++ b/technologydata/technology_collection.py @@ -0,0 +1,238 @@ +# SPDX-FileCopyrightText: The technology-data authors +# +# SPDX-License-Identifier: MIT + +"""TechnologyCollection class for representing an iterable of Technology Objects.""" + +import csv +import json +import pathlib +import re +import typing +from collections.abc import Iterator + +import pandas +import pydantic + +from technologydata.technology import Technology + + +class TechnologyCollection(pydantic.BaseModel): # type: ignore + """ + Represent a collection of technologies. + + Attributes + ---------- + technologies : List[Technology] + List of Technology objects. + + """ + + technologies: typing.Annotated[ + list[Technology], pydantic.Field(description="List of Technology objects.") + ] + + def __iter__(self) -> Iterator["Technology"]: + """ + Return an iterator over the list of Technology objects. + + Returns + ------- + Iterator[Technology] + An iterator over the Technology objects contained in the collection. + + """ + return iter(self.technologies) + + def __len__(self) -> int: + """ + Return the number of technologies in this collection. + + Returns + ------- + int + The number of Technology objects in the technologies list. + + """ + return len(self.technologies) + + def get( + self, name: str, region: str, year: int, case: str, detailed_technology: str + ) -> "TechnologyCollection": + """ + Filter technologies based on regex patterns for non-optional attributes. + + Parameters + ---------- + name : str + Regex pattern to filter technology names. + region : str + Regex pattern to filter region identifiers. + year : int + Regex pattern to filter the year of the data. + case : str + Regex pattern to filter case or scenario identifiers. + detailed_technology : str + Regex pattern to filter detailed technology names. + + Returns + ------- + TechnologyCollection + A new TechnologyCollection with filtered technologies. + + """ + filtered_technologies = self.technologies + + if name is not None: + pattern_name = re.compile(name, re.IGNORECASE) + filtered_technologies = [ + t for t in filtered_technologies if pattern_name.search(t.name) + ] + + if region is not None: + pattern_region = re.compile(region, re.IGNORECASE) + filtered_technologies = [ + t for t in filtered_technologies if pattern_region.search(t.region) + ] + + if year is not None: + pattern_year = re.compile(str(year), re.IGNORECASE) + filtered_technologies = [ + t for t in filtered_technologies if pattern_year.search(str(t.year)) + ] + + if case is not None: + pattern_case = re.compile(case, re.IGNORECASE) + filtered_technologies = [ + t for t in filtered_technologies if pattern_case.search(t.case) + ] + + if detailed_technology is not None: + pattern_detailed_technology = re.compile(detailed_technology, re.IGNORECASE) + filtered_technologies = [ + t + for t in filtered_technologies + if pattern_detailed_technology.search(t.detailed_technology) + ] + + return TechnologyCollection(technologies=filtered_technologies) + + def to_dataframe(self) -> pandas.DataFrame: + """ + Convert the TechnologyCollection to a pandas DataFrame. + + Returns + ------- + pd.DataFrame + A DataFrame containing the technology data. + + """ + return pandas.DataFrame( + [technology.model_dump() for technology in self.technologies] + ) + + def to_csv(self, **kwargs: pathlib.Path | str | bool) -> None: + """ + Export the TechnologyCollection to a CSV file. + + Parameters + ---------- + **kwargs : dict + Additional keyword arguments passed to pandas.DataFrame.to_csv(). + Common options include: + - path_or_buf : str or pathlib.Path or file-like object, optional + File path or object, if None, the result is returned as a string. + Default is None. + - sep : str + String of length 1. Field delimiter for the output file. + Default is ','. + - index : bool + Write row names (index). Default is True. + - encoding : str + String representing the encoding to use in the output file. + Default is 'utf-8'. + + Notes + ----- + The method converts the collection to a pandas DataFrame using + `self.to_dataframe()` and then writes it to a CSV file using the provided + kwargs. + + """ + default_kwargs = { + "sep": ",", + "index": False, + "encoding": "utf-8", + "quoting": csv.QUOTE_ALL, + } + + # Merge default_kwargs with user-provided kwargs, giving precedence to user kwargs + merged_kwargs = {**default_kwargs, **kwargs} + output_dataframe = self.to_dataframe() + output_dataframe.to_csv(**merged_kwargs) + + def to_json( + self, file_path: pathlib.Path, schema_path: pathlib.Path | None = None + ) -> None: + """ + Export the TechnologyCollection to a JSON file, together with a data schema. + + Parameters + ---------- + file_path : pathlib.Path + The path to the JSON file to be created. + schema_path : pathlib.Path + The path to the JSON schema file to be created. By default, created with a `schema` suffix next to `file_path`. + + """ + if schema_path is None: + schema_path = file_path.with_suffix(".schema.json") + + # Export the model's schema with descriptions to a dict + schema = self.model_json_schema() + + # Save the schema (which includes descriptions) to a JSON file + with open(schema_path, "w") as f: + json.dump(schema, f, indent=4) + + with open(file_path, mode="w", encoding="utf-8") as jsonfile: + json_data = self.model_dump_json(indent=4) # Convert to JSON string + jsonfile.write(json_data) + + @classmethod + def from_json(cls, file_path: pathlib.Path | str) -> "TechnologyCollection": + """ + Load a TechnologyCollection instance from a JSON file. + + Parameters + ---------- + file_path : pathlib.Path or str + Path to the JSON file containing the data. Can be a pathlib.Path object or a string path. + + Returns + ------- + TechnologyCollection + An instance of TechnologyCollection initialized with the data from the JSON file. + + Raises + ------ + TypeError + If `file_path` is not a pathlib.Path or str. + + Notes + ----- + This method reads the JSON data from the specified file, creates `Technology` objects + for each item in the JSON list using `Technology.from_dict()`, and returns a new + `TechnologyCollection` containing these objects. + + """ + if isinstance(file_path, pathlib.Path | str): + file_path = pathlib.Path(file_path) + else: + raise TypeError("file_path must be a pathlib.Path or str") + with open(file_path, encoding="utf-8") as jsonfile: + json_data = json.load(jsonfile) + techs = [] + for item in json_data: + techs.append(Technology.from_dict(item)) + return cls(technologies=techs) diff --git a/technologydata/unit_value.py b/technologydata/unit_value.py index 0b42cddb..a354a343 100644 --- a/technologydata/unit_value.py +++ b/technologydata/unit_value.py @@ -17,6 +17,8 @@ """ +import typing + import pint import pydantic @@ -27,13 +29,6 @@ class UnitValue(pydantic.BaseModel): # type: ignore """ Represent a numerical value with an associated unit of measurement. - Parameters - ---------- - value : float - The numerical value. - unit : str - The unit of measurement (e.g., 'EUR_2020', 'kWh_electricity', 'kWh_hydrogen_LHV'). - Attributes ---------- value : float @@ -43,8 +38,8 @@ class UnitValue(pydantic.BaseModel): # type: ignore """ - value: float = pydantic.Field(..., description="The numerical value.") - unit: str = pydantic.Field(..., description="The unit of measurement.") + value: typing.Annotated[float, pydantic.Field(description="The numerical value.")] + unit: typing.Annotated[str, pydantic.Field(description="The unit of measurement.")] def to(self, new_unit: str) -> "UnitValue": """ diff --git a/test/conftest.py b/test/conftest.py index a0d1fc81..a87b2dde 100644 --- a/test/conftest.py +++ b/test/conftest.py @@ -42,7 +42,7 @@ def create_source_from_params(params: dict[str, str]) -> technologydata.Source: Returns ------- - td.Source + technologydata.Source A Source object initialized with the provided parameters. Raises @@ -50,18 +50,6 @@ def create_source_from_params(params: dict[str, str]) -> technologydata.Source: ValueError If any of the required fields ("source_title", "source_authors") are missing from the params. - Examples - -------- - >>> params_dict = { - ... "source_title": "Example Title", - ... "source_authors": "John Doe", - ... "source_url": "http://example.com", - ... "source_url_archive": "http://web.archive.org/web/20231001120000/http://example.com", - ... "source_url_date": "2023-10-01", - ... "source_url_date_archive": "2023-10-01T12:00:00Z" - ... } - >>> source = create_source_from_params(params_dict) - """ return technologydata.Source( title=params["source_title"], diff --git a/test/test_data/solar_photovoltaics_example_03/technologies.json b/test/test_data/solar_photovoltaics_example_03/technologies.json index 02712257..be406154 100644 --- a/test/test_data/solar_photovoltaics_example_03/technologies.json +++ b/test/test_data/solar_photovoltaics_example_03/technologies.json @@ -3,170 +3,174 @@ "region": "DEU", "case": "example-scenario", "year": 2022, - "technology": "Solar photovoltaics", + "name": "Solar photovoltaics", "detailed_technology": "Si-HC", - "capacity": { - "quantity": { - "value": 1, - "unit": "MW" - }, - "provenance": "Model calculation", - "note": "Average capacity factor of 22% assumed", - "sources": [ - { - "title": "atb_nrel", - "authors": "NREL/ATB", - "url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", - "url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", - "url_date": "2025-05-22 15:08:02", - "url_date_archive": "2025-05-22 15:08:02" + "parameters": { + "capacity": { + "quantity": { + "value": 1, + "unit": "MW" }, - { - "title": "tech_data_generation", - "authors": "Danish Energy Agency", - "url": "https://ens.dk/media/3273/download", - "url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", - "url_date": "2025-05-06 16:02:04", - "url_date_archive": "2025-05-06 16:02:04" - } - ] - }, - "investment": { - "quantity": { - "value": 500, - "unit": "EUR_2022/KW_el" + "provenance": "Model calculation", + "note": "Average capacity factor of 22% assumed", + "sources": [ + { + "title": "atb_nrel", + "authors": "NREL/ATB", + "url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_date": "2025-05-22 15:08:02", + "url_date_archive": "2025-05-22 15:08:02" + }, + { + "title": "tech_data_generation", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/3273/download", + "url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", + "url_date": "2025-05-06 16:02:04", + "url_date_archive": "2025-05-06 16:02:04" + } + ] }, - "provenance": "Industry report", - "note": "Average overnight cost", - "sources": [ - { - "title": "atb_nrel", - "authors": "NREL/ATB", - "url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", - "url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", - "url_date": "2025-05-22 15:08:02", - "url_date_archive": "2025-05-22 15:08:02" + "investment": { + "quantity": { + "value": 500, + "unit": "EUR_2022/KW_el" }, - { - "title": "tech_data_generation", - "authors": "Danish Energy Agency", - "url": "https://ens.dk/media/3273/download", - "url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", - "url_date": "2025-05-06 16:02:04", - "url_date_archive": "2025-05-06 16:02:04" - } - ] - }, - "specific_investment": { - "quantity": { - "value": 0.95, - "unit": "USD/W" + "provenance": "Industry report", + "note": "Average overnight cost", + "sources": [ + { + "title": "atb_nrel", + "authors": "NREL/ATB", + "url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_date": "2025-05-22 15:08:02", + "url_date_archive": "2025-05-22 15:08:02" + }, + { + "title": "tech_data_generation", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/3273/download", + "url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", + "url_date": "2025-05-06 16:02:04", + "url_date_archive": "2025-05-06 16:02:04" + } + ] }, - "provenance": "Derived", - "note": "Calculated from investment/capacity", - "sources": [ - { - "title": "atb_nrel", - "authors": "NREL/ATB", - "url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", - "url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", - "url_date": "2025-05-22 15:08:02", - "url_date_archive": "2025-05-22 15:08:02" + "specific_investment": { + "quantity": { + "value": 0.95, + "unit": "USD/W" }, - { - "title": "tech_data_generation", - "authors": "Danish Energy Agency", - "url": "https://ens.dk/media/3273/download", - "url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", - "url_date": "2025-05-06 16:02:04", - "url_date_archive": "2025-05-06 16:02:04" - } - ] - }, - "lifetime": { - "quantity": { - "value": 30, - "unit": "years" + "provenance": "Derived", + "note": "Calculated from investment/capacity", + "sources": [ + { + "title": "atb_nrel", + "authors": "NREL/ATB", + "url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_date": "2025-05-22 15:08:02", + "url_date_archive": "2025-05-22 15:08:02" + }, + { + "title": "tech_data_generation", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/3273/download", + "url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", + "url_date": "2025-05-06 16:02:04", + "url_date_archive": "2025-05-06 16:02:04" + } + ] }, - "provenance": "Manufacturer specification", - "note": "With performance degradation guarantee", - "sources": [ - { - "title": "atb_nrel", - "authors": "NREL/ATB", - "url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", - "url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", - "url_date": "2025-05-22 15:08:02", - "url_date_archive": "2025-05-22 15:08:02" + "lifetime": { + "quantity": { + "value": 30, + "unit": "years" }, - { - "title": "tech_data_generation", - "authors": "Danish Energy Agency", - "url": "https://ens.dk/media/3273/download", - "url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", - "url_date": "2025-05-06 16:02:04", - "url_date_archive": "2025-05-06 16:02:04" - } - ] - }, - "wacc": { - "quantity": { - "value": 0.05, - "unit": "fraction" + "provenance": "Manufacturer specification", + "note": "With performance degradation guarantee", + "sources": [ + { + "title": "atb_nrel", + "authors": "NREL/ATB", + "url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_date": "2025-05-22 15:08:02", + "url_date_archive": "2025-05-22 15:08:02" + }, + { + "title": "tech_data_generation", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/3273/download", + "url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", + "url_date": "2025-05-06 16:02:04", + "url_date_archive": "2025-05-06 16:02:04" + } + ] }, - "provenance": "Financial analysis", - "note": "Nominal weighted average cost of capital", - "sources": [ - { - "title": "atb_nrel", - "authors": "NREL/ATB", - "url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", - "url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", - "url_date": "2025-05-22 15:08:02", - "url_date_archive": "2025-05-22 15:08:02" + "wacc": { + "quantity": { + "value": 0.05, + "unit": "fraction" }, - { - "title": "tech_data_generation", - "authors": "Danish Energy Agency", - "url": "https://ens.dk/media/3273/download", - "url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", - "url_date": "2025-05-06 16:02:04", - "url_date_archive": "2025-05-06 16:02:04" - } - ] + "provenance": "Financial analysis", + "note": "Nominal weighted average cost of capital", + "sources": [ + { + "title": "atb_nrel", + "authors": "NREL/ATB", + "url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_date": "2025-05-22 15:08:02", + "url_date_archive": "2025-05-22 15:08:02" + }, + { + "title": "tech_data_generation", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/3273/download", + "url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", + "url_date": "2025-05-06 16:02:04", + "url_date_archive": "2025-05-06 16:02:04" + } + ] + } } }, { "region": "DEU", "case": "example-project", "year": 2022, - "technology": "Solar photovoltaics", + "name": "Solar photovoltaics", "detailed_technology": "Si-HC", - "capacity": { - "quantity": { - "value": 1.0, - "unit": "MW" - }, - "provenance": "Model calculation", - "note": "Average capacity factor of 25% assumed", - "sources": [ - { - "title": "atb_nrel", - "authors": "NREL/ATB", - "url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", - "url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", - "url_date": "2025-05-22 15:08:02", - "url_date_archive": "2025-05-22 15:08:02" + "parameters": { + "capacity": { + "quantity": { + "value": 1.0, + "unit": "MW" }, - { - "title": "tech_data_generation", - "authors": "Danish Energy Agency", - "url": "https://ens.dk/media/3273/download", - "url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", - "url_date": "2025-05-06 16:02:04", - "url_date_archive": "2025-05-06 16:02:04" - } - ] + "provenance": "Model calculation", + "note": "Average capacity factor of 25% assumed", + "sources": [ + { + "title": "atb_nrel", + "authors": "NREL/ATB", + "url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_date": "2025-05-22 15:08:02", + "url_date_archive": "2025-05-22 15:08:02" + }, + { + "title": "tech_data_generation", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/3273/download", + "url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", + "url_date": "2025-05-06 16:02:04", + "url_date_archive": "2025-05-06 16:02:04" + } + ] + } }, "investment": { "quantity": { diff --git a/test/test_data/solar_photovoltaics_example_04/technologies.json b/test/test_data/solar_photovoltaics_example_04/technologies.json index 964b37ae..b97485fd 100644 --- a/test/test_data/solar_photovoltaics_example_04/technologies.json +++ b/test/test_data/solar_photovoltaics_example_04/technologies.json @@ -3,164 +3,168 @@ "region": "DEU", "case": "example-scenario", "year": 2022, - "technology": "Solar photovoltaics", + "name": "Solar photovoltaics", "detailed_technology": "Si-HC", - "capacity": { - "quantity": { - "value": 1, - "unit": "MW" + "parameters": { + "capacity": { + "quantity": { + "value": 1, + "unit": "MW" + }, + "provenance": "Model calculation", + "note": "Average capacity factor of 22% assumed", + "sources": [ + { + "title": "example04", + "authors": "Open Energy Transition gGmbH", + "url": "https://openenergytransition.org/outputs.html" + } + ] }, - "provenance": "Model calculation", - "note": "Average capacity factor of 22% assumed", - "sources": [ - { - "title": "example04", - "authors": "Open Energy Transition gGmbH", - "url": "https://openenergytransition.org/outputs.html" - } - ] - }, - "investment": { - "quantity": { - "value": 500, - "unit": "EUR_2022/KW_el" + "investment": { + "quantity": { + "value": 500, + "unit": "EUR_2022/KW_el" + }, + "provenance": "Industry report", + "note": "Average overnight cost", + "sources": [ + { + "title": "example04", + "authors": "Open Energy Transition gGmbH", + "url": "https://openenergytransition.org/outputs.html" + } + ] }, - "provenance": "Industry report", - "note": "Average overnight cost", - "sources": [ - { - "title": "example04", - "authors": "Open Energy Transition gGmbH", - "url": "https://openenergytransition.org/outputs.html" - } - ] - }, - "specific_investment": { - "quantity": { - "value": 0.95, - "unit": "USD/W" + "specific_investment": { + "quantity": { + "value": 0.95, + "unit": "USD/W" + }, + "provenance": "Derived", + "note": "Calculated from investment/capacity", + "sources": [ + { + "title": "example04", + "authors": "Open Energy Transition gGmbH", + "url": "https://openenergytransition.org/outputs.html" + } + ] }, - "provenance": "Derived", - "note": "Calculated from investment/capacity", - "sources": [ - { - "title": "example04", - "authors": "Open Energy Transition gGmbH", - "url": "https://openenergytransition.org/outputs.html" - } - ] - }, - "lifetime": { - "quantity": { - "value": 30, - "unit": "years" + "lifetime": { + "quantity": { + "value": 30, + "unit": "years" + }, + "provenance": "Manufacturer specification", + "note": "With performance degradation guarantee", + "sources": [ + { + "title": "example04", + "authors": "Open Energy Transition gGmbH", + "url": "https://openenergytransition.org/outputs.html" + } + ] }, - "provenance": "Manufacturer specification", - "note": "With performance degradation guarantee", - "sources": [ - { - "title": "example04", - "authors": "Open Energy Transition gGmbH", - "url": "https://openenergytransition.org/outputs.html" - } - ] - }, - "wacc": { - "quantity": { - "value": 0.05, - "unit": "fraction" - }, - "provenance": "Financial analysis", - "note": "Nominal weighted average cost of capital", - "sources": [ - { - "title": "example04", - "authors": "Open Energy Transition gGmbH", - "url": "https://openenergytransition.org/outputs.html" - } - ] + "wacc": { + "quantity": { + "value": 0.05, + "unit": "fraction" + }, + "provenance": "Financial analysis", + "note": "Nominal weighted average cost of capital", + "sources": [ + { + "title": "example04", + "authors": "Open Energy Transition gGmbH", + "url": "https://openenergytransition.org/outputs.html" + } + ] + } } }, { "region": "DEU", "case": "example-project", "year": 2022, - "technology": "Solar photovoltaics", + "name": "Solar photovoltaics", "detailed_technology": "Si-HC", - "capacity": { - "quantity": { - "value": 1.0, - "unit": "MW" - }, - "provenance": "Model calculation", - "note": "Average capacity factor of 25% assumed", - "sources": [ - { - "title": "example04", - "authors": "Open Energy Transition gGmbH", - "url": "https://openenergytransition.org/outputs.html" - } - ] - }, - "investment": { - "quantity": { - "value": 350, - "unit": "EUR_2022/KW_el" + "parameters": { + "capacity": { + "quantity": { + "value": 1.0, + "unit": "MW" + }, + "provenance": "Model calculation", + "note": "Average capacity factor of 25% assumed", + "sources": [ + { + "title": "example04", + "authors": "Open Energy Transition gGmbH", + "url": "https://openenergytransition.org/outputs.html" + } + ] }, - "provenance": "Industry report", - "note": "Average overnight cost for another tech", - "sources": [ - { - "title": "example04", - "authors": "Open Energy Transition gGmbH", - "url": "https://openenergytransition.org/outputs.html" - } - ] - }, - "specific_investment": { - "quantity": { - "value": 0.95, - "unit": "USD/W" + "investment": { + "quantity": { + "value": 350, + "unit": "EUR_2022/KW_el" + }, + "provenance": "Industry report", + "note": "Average overnight cost for another tech", + "sources": [ + { + "title": "example04", + "authors": "Open Energy Transition gGmbH", + "url": "https://openenergytransition.org/outputs.html" + } + ] }, - "provenance": "Derived", - "note": "Calculated from investment/capacity", - "sources": [ - { - "title": "example04", - "authors": "Open Energy Transition gGmbH", - "url": "https://openenergytransition.org/outputs.html" - } - ] - }, - "lifetime": { - "quantity": { - "value": 30, - "unit": "years" + "specific_investment": { + "quantity": { + "value": 0.95, + "unit": "USD/W" + }, + "provenance": "Derived", + "note": "Calculated from investment/capacity", + "sources": [ + { + "title": "example04", + "authors": "Open Energy Transition gGmbH", + "url": "https://openenergytransition.org/outputs.html" + } + ] }, - "provenance": "Manufacturer specification", - "note": "With performance degradation guarantee", - "sources": [ - { - "title": "example04", - "authors": "Open Energy Transition gGmbH", - "url": "https://openenergytransition.org/outputs.html" - } - ] - }, - "wacc": { - "quantity": { - "value": 0.05, - "unit": "fraction" + "lifetime": { + "quantity": { + "value": 30, + "unit": "years" + }, + "provenance": "Manufacturer specification", + "note": "With performance degradation guarantee", + "sources": [ + { + "title": "example04", + "authors": "Open Energy Transition gGmbH", + "url": "https://openenergytransition.org/outputs.html" + } + ] }, - "provenance": "Financial analysis", - "note": "Nominal weighted average cost of capital", - "sources": [ - { - "title": "example04", - "authors": "Open Energy Transition gGmbH", - "url": "https://openenergytransition.org/outputs.html" - } - ] + "wacc": { + "quantity": { + "value": 0.05, + "unit": "fraction" + }, + "provenance": "Financial analysis", + "note": "Nominal weighted average cost of capital", + "sources": [ + { + "title": "example04", + "authors": "Open Energy Transition gGmbH", + "url": "https://openenergytransition.org/outputs.html" + } + ] + } } } ] diff --git a/test/test_datapackage.py b/test/test_datapackage.py new file mode 100644 index 00000000..5e84e940 --- /dev/null +++ b/test/test_datapackage.py @@ -0,0 +1,29 @@ +# SPDX-FileCopyrightText: The technology-data authors +# +# SPDX-License-Identifier: MIT + +"""Test the initialization and methods of the Datapackage class.""" + +import pathlib + +import technologydata + +path_cwd = pathlib.Path.cwd() + + +def test_get_source_collection() -> None: + """Test how the sources attributes is extracted from a TechnologyCollection instance.""" + input_file = pathlib.Path( + path_cwd, + "test", + "test_data", + "solar_photovoltaics_example_03", + "technologies.json", + ) + technologies_collection = technologydata.TechnologyCollection.from_json(input_file) + data_package = technologydata.DataPackage( + technologies=technologies_collection, + ) + data_package.get_source_collection() + assert isinstance(data_package.sources, technologydata.SourceCollection) + assert len(data_package.sources) == 2 diff --git a/test/test_source.py b/test/test_source.py index f2a521fc..3751b8e2 100644 --- a/test/test_source.py +++ b/test/test_source.py @@ -14,6 +14,102 @@ path_cwd = pathlib.Path.cwd() +@pytest.mark.parametrize( + "example_source, expected_equal", + [ + ( + { + "source_title": "atb_nrel", + "source_authors": "NREL/ATB", + "source_url": "https:download", + "source_url_archive": "http:/3273/download", + "source_url_date": "2025-05-22 15:08:02", + "source_url_date_archive": "2025-05-22 15:08:02", + }, + False, # Expect not equal + ), + ( + { + "source_title": "tech_data_generation", + "source_authors": "Danish Energy Agency", + "source_url": "https:download", + "source_url_archive": "http:/3273/download", + "source_url_date": "2025-05-06 16:02:04", + "source_url_date_archive": "2025-05-06 16:02:04", + }, + True, # Expect equal + ), + ( + { + "source_title": "tech_data_generation", + "source_authors": "Danish Energy Agency", + }, + False, # Expect not equal + ), + ], + indirect=["example_source"], +) # type: ignore +def test_eq(example_source: technologydata.Source, expected_equal: bool) -> None: + """Check if the override method __eq__ works as expected.""" + reference_source = technologydata.Source( + title="tech_data_generation", + authors="Danish Energy Agency", + url="https:download", + url_archive="http:/3273/download", + url_date="2025-05-06 16:02:04", + url_date_archive="2025-05-06 16:02:04", + ) + assert (example_source == reference_source) == expected_equal + + +@pytest.mark.parametrize( + "example_source", + [ + { + "source_title": "atb_nrel", + "source_authors": "NREL/ATB", + "source_url_archive": "http:/3273/download", + "source_url_date_archive": "2025-05-22 15:08:02", + }, + { + "source_title": "tech_data_generation", + "source_authors": "Danish Energy Agency", + "source_url": "https:download", + "source_url_archive": "http:/3273/download", + "source_url_date": "2025-05-06 16:02:04", + "source_url_date_archive": "2025-05-06 16:02:04", + }, + ], + indirect=["example_source"], +) # type: ignore +def test_hash(example_source: technologydata.Source) -> None: + """Check if the override method __hash__ works as expected.""" + assert isinstance(hash(example_source), int) + + +@pytest.mark.parametrize( + "example_source, expected_string", + [ + ( + { + "source_title": "OET project page", + "source_authors": "Open Energy Transition gGmbH", + "source_url": "https://outputs.html", + "source_url_archive": "https:archived.html", + "source_url_date": "2025-05-06 16:02:04", + "source_url_date_archive": "2025-05-06 16:02:04", + }, + "'Open Energy Transition gGmbH': 'OET project page', from url 'https://outputs.html', last accessed on '2025-05-06 16:02:04', archived at 'https:archived.html', on '2025-05-06 16:02:04'.", + ) + ], + indirect=["example_source"], +) # type: ignore +def test_str(example_source: technologydata.Source, expected_string: str) -> None: + """Check if the override method __str__ works as expected.""" + # Ensure the snapshot is created + assert str(example_source) == expected_string + + @pytest.mark.parametrize( "example_source", [ @@ -34,7 +130,7 @@ "source_url_date_archive": "2025-05-06 16:02:04", }, ], - indirect=True, + indirect=["example_source"], ) # type: ignore def test_retrieve_from_wayback(example_source: technologydata.Source) -> None: """Check if the example source is downloaded from the Internet Archive Wayback Machine.""" diff --git a/test/test_source_collection.py b/test/test_source_collection.py index 41d65f68..fd75356b 100644 --- a/test/test_source_collection.py +++ b/test/test_source_collection.py @@ -14,6 +14,36 @@ path_cwd = pathlib.Path.cwd() +@pytest.mark.parametrize( + "example_source_collection, expected_string", + [ + ( + [ + { + "source_title": "atb_nrel", + "source_authors": "NREL/ATB", + "source_url_date": "2025-05-22 15:08:02", + }, + { + "source_title": "tech_data_generation", + "source_authors": "Danish Energy Agency", + "source_url_date_archive": "2025-05-06 16:02:04", + }, + ], + "SourceCollection with 2 sources: " + "'NREL/ATB': 'atb_nrel', last accessed on '2025-05-22 15:08:02', " + "'Danish Energy Agency': 'tech_data_generation', on '2025-05-06 16:02:04'.", + ), + ], + indirect=["example_source_collection"], +) # type: ignore +def test_str( + example_source_collection: technologydata.SourceCollection, expected_string: str +) -> None: + """Check if the example source collection is cast to string as expected.""" + assert str(example_source_collection) == expected_string + + @pytest.mark.parametrize( "example_source_collection", [ @@ -28,7 +58,7 @@ }, ] ], - indirect=True, + indirect=["example_source_collection"], ) # type: ignore def test_example_source_collection( example_source_collection: technologydata.SourceCollection, @@ -69,7 +99,7 @@ def test_example_source_collection( }, ], ], - indirect=True, + indirect=["example_source_collection"], ) # type: ignore def test_retrieve_all_from_wayback( example_source_collection: technologydata.SourceCollection, @@ -118,7 +148,7 @@ def test_retrieve_all_from_wayback( }, ], ], - indirect=True, + indirect=["example_source_collection"], ) # type: ignore def test_to_csv(example_source_collection: technologydata.SourceCollection) -> None: """Check if the example source collection is exported to CSV.""" @@ -150,12 +180,12 @@ def test_to_csv(example_source_collection: technologydata.SourceCollection) -> N }, ], ], - indirect=True, + indirect=["example_source_collection"], ) # type: ignore def test_to_json(example_source_collection: technologydata.SourceCollection) -> None: """Check if the example source collection is exported to JSON.""" output_file = pathlib.Path(path_cwd, "sources.json") - schema_file = pathlib.Path(path_cwd, "source_collection_schema.json") + schema_file = pathlib.Path(path_cwd, "sources.schema.json") example_source_collection.to_json(pathlib.Path(output_file)) assert output_file.is_file() assert schema_file.is_file() @@ -185,7 +215,7 @@ def test_to_json(example_source_collection: technologydata.SourceCollection) -> }, ], ], - indirect=True, + indirect=["example_source_collection"], ) # type: ignore def test_to_dataframe( example_source_collection: technologydata.SourceCollection, @@ -195,11 +225,11 @@ def test_to_dataframe( def test_from_json() -> None: - """Check if the example source collection is exported to JSON.""" + """Check if the example source collection is imported from JSON.""" input_file = pathlib.Path( path_cwd, "test", "test_data", "solar_photovoltaics_example_03", "sources.json" ) - source_collection = technologydata.SourceCollection.from_json(input_file) + source_collection = technologydata.SourceCollection.from_json(file_path=input_file) assert isinstance(source_collection, technologydata.SourceCollection) assert len(source_collection) == 2 @@ -214,6 +244,6 @@ def test_get(title_pattern: str, authors_pattern: str) -> None: path_cwd, "test", "test_data", "solar_photovoltaics_example_03", "sources.json" ) - source_collection = technologydata.SourceCollection.from_json(input_file) + source_collection = technologydata.SourceCollection.from_json(file_path=input_file) result = source_collection.get(title=title_pattern, authors=authors_pattern) assert len(result.sources) == 1 diff --git a/test/test_technology_collection.py b/test/test_technology_collection.py new file mode 100644 index 00000000..3e1e7fb5 --- /dev/null +++ b/test/test_technology_collection.py @@ -0,0 +1,106 @@ +# SPDX-FileCopyrightText: The technology-data authors +# +# SPDX-License-Identifier: MIT + +"""Test the initialization and methods of the TechnologyCollection class.""" + +import pathlib + +import pandas +import pytest + +import technologydata + +path_cwd = pathlib.Path.cwd() + + +def test_to_csv() -> None: + """Check if the example technology collection is exported to CSV.""" + input_file = pathlib.Path( + path_cwd, + "test", + "test_data", + "solar_photovoltaics_example_03", + "technologies.json", + ) + technology_collection = technologydata.TechnologyCollection.from_json(input_file) + output_file = pathlib.Path(path_cwd, "technologies.csv") + technology_collection.to_csv(path_or_buf=output_file) + assert output_file.is_file() + output_file.unlink(missing_ok=True) + + +def test_to_dataframe() -> None: + """Check if the example technology collection is exported to pandas dataframe.""" + input_file = pathlib.Path( + path_cwd, + "test", + "test_data", + "solar_photovoltaics_example_03", + "technologies.json", + ) + technology_collection = technologydata.TechnologyCollection.from_json(input_file) + assert isinstance(technology_collection.to_dataframe(), pandas.DataFrame) + + +def test_to_json() -> None: + """Check if the example technology collection is exported to JSON.""" + input_file = pathlib.Path( + path_cwd, + "test", + "test_data", + "solar_photovoltaics_example_03", + "technologies.json", + ) + technology_collection = technologydata.TechnologyCollection.from_json(input_file) + output_file = pathlib.Path(path_cwd, "technologies.json") + schema_file = pathlib.Path(path_cwd, "technologies.schema.json") + technology_collection.to_json(pathlib.Path(output_file)) + assert output_file.is_file() + assert schema_file.is_file() + output_file.unlink(missing_ok=True) + schema_file.unlink(missing_ok=True) + + +def test_from_json() -> None: + """Check if the example technology collection is imported from JSON.""" + input_file = pathlib.Path( + path_cwd, + "test", + "test_data", + "solar_photovoltaics_example_03", + "technologies.json", + ) + technology_collection = technologydata.TechnologyCollection.from_json(input_file) + assert isinstance(technology_collection, technologydata.TechnologyCollection) + assert len(technology_collection) == 2 + + +@pytest.mark.parametrize( + "name, region, year, case, detailed_technology", + [ + ["Solar photovoltaics", "DEU", 2022, "example-scenario", "Si-HC"], + ["Solar photovoltaics", "DEU", 2022, "example-project", "Si-HC"], + ], +) # type: ignore +def test_get( + name: str, region: str, year: int, case: str, detailed_technology: str +) -> None: + """Check if the example technology collection is filtered as requested.""" + input_file = pathlib.Path( + path_cwd, + "test", + "test_data", + "solar_photovoltaics_example_03", + "technologies.json", + ) + technologies_collection = technologydata.TechnologyCollection.from_json(input_file) + result = technologies_collection.get( + name=name, + region=region, + year=year, + case=case, + detailed_technology=detailed_technology, + ) + assert isinstance(result, technologydata.TechnologyCollection) + assert len(result.technologies) == 1 From 506f17f8efec48541faaf977f8cfccf5435b2a45 Mon Sep 17 00:00:00 2001 From: Fabrizio Finozzi <167071962+finozzifa@users.noreply.github.com> Date: Mon, 28 Jul 2025 18:59:44 +0200 Subject: [PATCH 04/43] config: add pytest-xdist and pytest-cov (#16) --- pyproject.toml | 13 +- uv.lock | 1383 +++++------------------------------------------- 2 files changed, 143 insertions(+), 1253 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 535a6247..b6b18868 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -30,9 +30,12 @@ dependencies = [ "ipykernel>=6.29.5", # this one can go into optional as "dev" "mypy>=1.15.0", "pandas>=2.2.3", - "pre-commit>=4.2.0", # this one can go into optional as "dev" + "pre-commit>=4.2.0", # this one can go into optional as "dev" "pytest>=8.3.5", # this one can go into optional as "dev" + "pytest-cov>=6.2.1", # this one can go into optional as "dev" + "pytest-xdist>=3.8.0", # this one can go into optional as "dev" "requests>=2.32.3", + "reuse>=5.0.2", "savepagenow>=1.3.0", ] @@ -53,9 +56,15 @@ docs = [ "mkdocstrings-python>=1.16.11", ] +[tool.pytest.ini_options] +testpaths = "test" +addopts = "--cov=technologydata --cov-report=term" +filterwarnings = [ + "ignore::RuntimeWarning", + "ignore:numpy.ndarray size changed*:RuntimeWarning" +] # Setuptools_scm settings - [tool.uv] package = true diff --git a/uv.lock b/uv.lock index 9a3db3d3..91c5b29f 100644 --- a/uv.lock +++ b/uv.lock @@ -2,15 +2,6 @@ version = 1 revision = 2 requires-python = ">=3.12" -[[package]] -name = "annotated-types" -version = "0.7.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081, upload_time = "2024-05-20T21:33:25.928Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload_time = "2024-05-20T21:33:24.1Z" }, -] - [[package]] name = "appnope" version = "0.1.4" @@ -62,16 +53,24 @@ wheels = [ ] [[package]] -name = "beautifulsoup4" -version = "4.13.4" +name = "binaryornot" +version = "0.4.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "soupsieve" }, - { name = "typing-extensions" }, + { name = "chardet" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d8/e4/0c4c39e18fd76d6a628d4dd8da40543d136ce2d1752bd6eeeab0791f4d6b/beautifulsoup4-4.13.4.tar.gz", hash = "sha256:dbb3c4e1ceae6aefebdaf2423247260cd062430a410e38c66f2baa50a8437195", size = 621067, upload_time = "2025-04-15T17:05:13.836Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a7/fe/7ebfec74d49f97fc55cd38240c7a7d08134002b1e14be8c3897c0dd5e49b/binaryornot-0.4.4.tar.gz", hash = "sha256:359501dfc9d40632edc9fac890e19542db1a287bbcfa58175b66658392018061", size = 371054, upload_time = "2017-08-03T15:55:25.08Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/50/cd/30110dc0ffcf3b131156077b90e9f60ed75711223f306da4db08eff8403b/beautifulsoup4-4.13.4-py3-none-any.whl", hash = "sha256:9bbbb14bfde9d79f38b8cd5f8c7c85f4b8f2523190ebed90e950a8dea4cb1c4b", size = 187285, upload_time = "2025-04-15T17:05:12.221Z" }, + { url = "https://files.pythonhosted.org/packages/24/7e/f7b6f453e6481d1e233540262ccbfcf89adcd43606f44a028d7f5fae5eb2/binaryornot-0.4.4-py2.py3-none-any.whl", hash = "sha256:b8b71173c917bddcd2c16070412e369c3ed7f0528926f70cac18a6c97fd563e4", size = 9006, upload_time = "2017-08-03T15:55:31.23Z" }, +] + +[[package]] +name = "boolean-py" +version = "5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c4/cf/85379f13b76f3a69bca86b60237978af17d6aa0bc5998978c3b8cf05abb2/boolean_py-5.0.tar.gz", hash = "sha256:60cbc4bad079753721d32649545505362c754e121570ada4658b852a3a318d95", size = 37047, upload_time = "2025-04-03T10:39:49.734Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/ca/78d423b324b8d77900030fa59c4aa9054261ef0925631cd2501dd015b7b7/boolean_py-5.0-py3-none-any.whl", hash = "sha256:ef28a70bd43115208441b53a045d1549e2f0ec6e3d08a9d142cbc41c1938e8d9", size = 26577, upload_time = "2025-04-03T10:39:48.449Z" }, ] [[package]] @@ -203,44 +202,67 @@ wheels = [ ] [[package]] -name = "contourpy" -version = "1.3.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/66/54/eb9bfc647b19f2009dd5c7f5ec51c4e6ca831725f1aea7a993034f483147/contourpy-1.3.2.tar.gz", hash = "sha256:b6945942715a034c671b7fc54f9588126b0b8bf23db2696e3ca8328f3ff0ab54", size = 13466130, upload_time = "2025-04-15T17:47:53.79Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/34/f7/44785876384eff370c251d58fd65f6ad7f39adce4a093c934d4a67a7c6b6/contourpy-1.3.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4caf2bcd2969402bf77edc4cb6034c7dd7c0803213b3523f111eb7460a51b8d2", size = 271580, upload_time = "2025-04-15T17:37:03.105Z" }, - { url = "https://files.pythonhosted.org/packages/93/3b/0004767622a9826ea3d95f0e9d98cd8729015768075d61f9fea8eeca42a8/contourpy-1.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:82199cb78276249796419fe36b7386bd8d2cc3f28b3bc19fe2454fe2e26c4c15", size = 255530, upload_time = "2025-04-15T17:37:07.026Z" }, - { url = "https://files.pythonhosted.org/packages/e7/bb/7bd49e1f4fa805772d9fd130e0d375554ebc771ed7172f48dfcd4ca61549/contourpy-1.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:106fab697af11456fcba3e352ad50effe493a90f893fca6c2ca5c033820cea92", size = 307688, upload_time = "2025-04-15T17:37:11.481Z" }, - { url = "https://files.pythonhosted.org/packages/fc/97/e1d5dbbfa170725ef78357a9a0edc996b09ae4af170927ba8ce977e60a5f/contourpy-1.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d14f12932a8d620e307f715857107b1d1845cc44fdb5da2bc8e850f5ceba9f87", size = 347331, upload_time = "2025-04-15T17:37:18.212Z" }, - { url = "https://files.pythonhosted.org/packages/6f/66/e69e6e904f5ecf6901be3dd16e7e54d41b6ec6ae3405a535286d4418ffb4/contourpy-1.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:532fd26e715560721bb0d5fc7610fce279b3699b018600ab999d1be895b09415", size = 318963, upload_time = "2025-04-15T17:37:22.76Z" }, - { url = "https://files.pythonhosted.org/packages/a8/32/b8a1c8965e4f72482ff2d1ac2cd670ce0b542f203c8e1d34e7c3e6925da7/contourpy-1.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26b383144cf2d2c29f01a1e8170f50dacf0eac02d64139dcd709a8ac4eb3cfe", size = 323681, upload_time = "2025-04-15T17:37:33.001Z" }, - { url = "https://files.pythonhosted.org/packages/30/c6/12a7e6811d08757c7162a541ca4c5c6a34c0f4e98ef2b338791093518e40/contourpy-1.3.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c49f73e61f1f774650a55d221803b101d966ca0c5a2d6d5e4320ec3997489441", size = 1308674, upload_time = "2025-04-15T17:37:48.64Z" }, - { url = "https://files.pythonhosted.org/packages/2a/8a/bebe5a3f68b484d3a2b8ffaf84704b3e343ef1addea528132ef148e22b3b/contourpy-1.3.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3d80b2c0300583228ac98d0a927a1ba6a2ba6b8a742463c564f1d419ee5b211e", size = 1380480, upload_time = "2025-04-15T17:38:06.7Z" }, - { url = "https://files.pythonhosted.org/packages/34/db/fcd325f19b5978fb509a7d55e06d99f5f856294c1991097534360b307cf1/contourpy-1.3.2-cp312-cp312-win32.whl", hash = "sha256:90df94c89a91b7362e1142cbee7568f86514412ab8a2c0d0fca72d7e91b62912", size = 178489, upload_time = "2025-04-15T17:38:10.338Z" }, - { url = "https://files.pythonhosted.org/packages/01/c8/fadd0b92ffa7b5eb5949bf340a63a4a496a6930a6c37a7ba0f12acb076d6/contourpy-1.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:8c942a01d9163e2e5cfb05cb66110121b8d07ad438a17f9e766317bcb62abf73", size = 223042, upload_time = "2025-04-15T17:38:14.239Z" }, - { url = "https://files.pythonhosted.org/packages/2e/61/5673f7e364b31e4e7ef6f61a4b5121c5f170f941895912f773d95270f3a2/contourpy-1.3.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:de39db2604ae755316cb5967728f4bea92685884b1e767b7c24e983ef5f771cb", size = 271630, upload_time = "2025-04-15T17:38:19.142Z" }, - { url = "https://files.pythonhosted.org/packages/ff/66/a40badddd1223822c95798c55292844b7e871e50f6bfd9f158cb25e0bd39/contourpy-1.3.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3f9e896f447c5c8618f1edb2bafa9a4030f22a575ec418ad70611450720b5b08", size = 255670, upload_time = "2025-04-15T17:38:23.688Z" }, - { url = "https://files.pythonhosted.org/packages/1e/c7/cf9fdee8200805c9bc3b148f49cb9482a4e3ea2719e772602a425c9b09f8/contourpy-1.3.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71e2bd4a1c4188f5c2b8d274da78faab884b59df20df63c34f74aa1813c4427c", size = 306694, upload_time = "2025-04-15T17:38:28.238Z" }, - { url = "https://files.pythonhosted.org/packages/dd/e7/ccb9bec80e1ba121efbffad7f38021021cda5be87532ec16fd96533bb2e0/contourpy-1.3.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de425af81b6cea33101ae95ece1f696af39446db9682a0b56daaa48cfc29f38f", size = 345986, upload_time = "2025-04-15T17:38:33.502Z" }, - { url = "https://files.pythonhosted.org/packages/dc/49/ca13bb2da90391fa4219fdb23b078d6065ada886658ac7818e5441448b78/contourpy-1.3.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:977e98a0e0480d3fe292246417239d2d45435904afd6d7332d8455981c408b85", size = 318060, upload_time = "2025-04-15T17:38:38.672Z" }, - { url = "https://files.pythonhosted.org/packages/c8/65/5245ce8c548a8422236c13ffcdcdada6a2a812c361e9e0c70548bb40b661/contourpy-1.3.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:434f0adf84911c924519d2b08fc10491dd282b20bdd3fa8f60fd816ea0b48841", size = 322747, upload_time = "2025-04-15T17:38:43.712Z" }, - { url = "https://files.pythonhosted.org/packages/72/30/669b8eb48e0a01c660ead3752a25b44fdb2e5ebc13a55782f639170772f9/contourpy-1.3.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c66c4906cdbc50e9cba65978823e6e00b45682eb09adbb78c9775b74eb222422", size = 1308895, upload_time = "2025-04-15T17:39:00.224Z" }, - { url = "https://files.pythonhosted.org/packages/05/5a/b569f4250decee6e8d54498be7bdf29021a4c256e77fe8138c8319ef8eb3/contourpy-1.3.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8b7fc0cd78ba2f4695fd0a6ad81a19e7e3ab825c31b577f384aa9d7817dc3bef", size = 1379098, upload_time = "2025-04-15T17:43:29.649Z" }, - { url = "https://files.pythonhosted.org/packages/19/ba/b227c3886d120e60e41b28740ac3617b2f2b971b9f601c835661194579f1/contourpy-1.3.2-cp313-cp313-win32.whl", hash = "sha256:15ce6ab60957ca74cff444fe66d9045c1fd3e92c8936894ebd1f3eef2fff075f", size = 178535, upload_time = "2025-04-15T17:44:44.532Z" }, - { url = "https://files.pythonhosted.org/packages/12/6e/2fed56cd47ca739b43e892707ae9a13790a486a3173be063681ca67d2262/contourpy-1.3.2-cp313-cp313-win_amd64.whl", hash = "sha256:e1578f7eafce927b168752ed7e22646dad6cd9bca673c60bff55889fa236ebf9", size = 223096, upload_time = "2025-04-15T17:44:48.194Z" }, - { url = "https://files.pythonhosted.org/packages/54/4c/e76fe2a03014a7c767d79ea35c86a747e9325537a8b7627e0e5b3ba266b4/contourpy-1.3.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0475b1f6604896bc7c53bb070e355e9321e1bc0d381735421a2d2068ec56531f", size = 285090, upload_time = "2025-04-15T17:43:34.084Z" }, - { url = "https://files.pythonhosted.org/packages/7b/e2/5aba47debd55d668e00baf9651b721e7733975dc9fc27264a62b0dd26eb8/contourpy-1.3.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:c85bb486e9be652314bb5b9e2e3b0d1b2e643d5eec4992c0fbe8ac71775da739", size = 268643, upload_time = "2025-04-15T17:43:38.626Z" }, - { url = "https://files.pythonhosted.org/packages/a1/37/cd45f1f051fe6230f751cc5cdd2728bb3a203f5619510ef11e732109593c/contourpy-1.3.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:745b57db7758f3ffc05a10254edd3182a2a83402a89c00957a8e8a22f5582823", size = 310443, upload_time = "2025-04-15T17:43:44.522Z" }, - { url = "https://files.pythonhosted.org/packages/8b/a2/36ea6140c306c9ff6dd38e3bcec80b3b018474ef4d17eb68ceecd26675f4/contourpy-1.3.2-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:970e9173dbd7eba9b4e01aab19215a48ee5dd3f43cef736eebde064a171f89a5", size = 349865, upload_time = "2025-04-15T17:43:49.545Z" }, - { url = "https://files.pythonhosted.org/packages/95/b7/2fc76bc539693180488f7b6cc518da7acbbb9e3b931fd9280504128bf956/contourpy-1.3.2-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6c4639a9c22230276b7bffb6a850dfc8258a2521305e1faefe804d006b2e532", size = 321162, upload_time = "2025-04-15T17:43:54.203Z" }, - { url = "https://files.pythonhosted.org/packages/f4/10/76d4f778458b0aa83f96e59d65ece72a060bacb20cfbee46cf6cd5ceba41/contourpy-1.3.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc829960f34ba36aad4302e78eabf3ef16a3a100863f0d4eeddf30e8a485a03b", size = 327355, upload_time = "2025-04-15T17:44:01.025Z" }, - { url = "https://files.pythonhosted.org/packages/43/a3/10cf483ea683f9f8ab096c24bad3cce20e0d1dd9a4baa0e2093c1c962d9d/contourpy-1.3.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d32530b534e986374fc19eaa77fcb87e8a99e5431499949b828312bdcd20ac52", size = 1307935, upload_time = "2025-04-15T17:44:17.322Z" }, - { url = "https://files.pythonhosted.org/packages/78/73/69dd9a024444489e22d86108e7b913f3528f56cfc312b5c5727a44188471/contourpy-1.3.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e298e7e70cf4eb179cc1077be1c725b5fd131ebc81181bf0c03525c8abc297fd", size = 1372168, upload_time = "2025-04-15T17:44:33.43Z" }, - { url = "https://files.pythonhosted.org/packages/0f/1b/96d586ccf1b1a9d2004dd519b25fbf104a11589abfd05484ff12199cca21/contourpy-1.3.2-cp313-cp313t-win32.whl", hash = "sha256:d0e589ae0d55204991450bb5c23f571c64fe43adaa53f93fc902a84c96f52fe1", size = 189550, upload_time = "2025-04-15T17:44:37.092Z" }, - { url = "https://files.pythonhosted.org/packages/b0/e6/6000d0094e8a5e32ad62591c8609e269febb6e4db83a1c75ff8868b42731/contourpy-1.3.2-cp313-cp313t-win_amd64.whl", hash = "sha256:78e9253c3de756b3f6a5174d024c4835acd59eb3f8e2ca13e775dbffe1558f69", size = 238214, upload_time = "2025-04-15T17:44:40.827Z" }, +name = "coverage" +version = "7.10.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/87/0e/66dbd4c6a7f0758a8d18044c048779ba21fb94856e1edcf764bd5403e710/coverage-7.10.1.tar.gz", hash = "sha256:ae2b4856f29ddfe827106794f3589949a57da6f0d38ab01e24ec35107979ba57", size = 819938, upload_time = "2025-07-27T14:13:39.045Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a5/3f/b051feeb292400bd22d071fdf933b3ad389a8cef5c80c7866ed0c7414b9e/coverage-7.10.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6b7dc7f0a75a7eaa4584e5843c873c561b12602439d2351ee28c7478186c4da4", size = 214934, upload_time = "2025-07-27T14:11:36.096Z" }, + { url = "https://files.pythonhosted.org/packages/f8/e4/a61b27d5c4c2d185bdfb0bfe9d15ab4ac4f0073032665544507429ae60eb/coverage-7.10.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:607f82389f0ecafc565813aa201a5cade04f897603750028dd660fb01797265e", size = 215173, upload_time = "2025-07-27T14:11:38.005Z" }, + { url = "https://files.pythonhosted.org/packages/8a/01/40a6ee05b60d02d0bc53742ad4966e39dccd450aafb48c535a64390a3552/coverage-7.10.1-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:f7da31a1ba31f1c1d4d5044b7c5813878adae1f3af8f4052d679cc493c7328f4", size = 246190, upload_time = "2025-07-27T14:11:39.887Z" }, + { url = "https://files.pythonhosted.org/packages/11/ef/a28d64d702eb583c377255047281305dc5a5cfbfb0ee36e721f78255adb6/coverage-7.10.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:51fe93f3fe4f5d8483d51072fddc65e717a175490804e1942c975a68e04bf97a", size = 248618, upload_time = "2025-07-27T14:11:41.841Z" }, + { url = "https://files.pythonhosted.org/packages/6a/ad/73d018bb0c8317725370c79d69b5c6e0257df84a3b9b781bda27a438a3be/coverage-7.10.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3e59d00830da411a1feef6ac828b90bbf74c9b6a8e87b8ca37964925bba76dbe", size = 250081, upload_time = "2025-07-27T14:11:43.705Z" }, + { url = "https://files.pythonhosted.org/packages/2d/dd/496adfbbb4503ebca5d5b2de8bed5ec00c0a76558ffc5b834fd404166bc9/coverage-7.10.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:924563481c27941229cb4e16eefacc35da28563e80791b3ddc5597b062a5c386", size = 247990, upload_time = "2025-07-27T14:11:45.244Z" }, + { url = "https://files.pythonhosted.org/packages/18/3c/a9331a7982facfac0d98a4a87b36ae666fe4257d0f00961a3a9ef73e015d/coverage-7.10.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:ca79146ee421b259f8131f153102220b84d1a5e6fb9c8aed13b3badfd1796de6", size = 246191, upload_time = "2025-07-27T14:11:47.093Z" }, + { url = "https://files.pythonhosted.org/packages/62/0c/75345895013b83f7afe92ec595e15a9a525ede17491677ceebb2ba5c3d85/coverage-7.10.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2b225a06d227f23f386fdc0eab471506d9e644be699424814acc7d114595495f", size = 247400, upload_time = "2025-07-27T14:11:48.643Z" }, + { url = "https://files.pythonhosted.org/packages/e2/a9/98b268cfc5619ef9df1d5d34fee408ecb1542d9fd43d467e5c2f28668cd4/coverage-7.10.1-cp312-cp312-win32.whl", hash = "sha256:5ba9a8770effec5baaaab1567be916c87d8eea0c9ad11253722d86874d885eca", size = 217338, upload_time = "2025-07-27T14:11:50.258Z" }, + { url = "https://files.pythonhosted.org/packages/fe/31/22a5440e4d1451f253c5cd69fdcead65e92ef08cd4ec237b8756dc0b20a7/coverage-7.10.1-cp312-cp312-win_amd64.whl", hash = "sha256:9eb245a8d8dd0ad73b4062135a251ec55086fbc2c42e0eb9725a9b553fba18a3", size = 218125, upload_time = "2025-07-27T14:11:52.034Z" }, + { url = "https://files.pythonhosted.org/packages/d6/2b/40d9f0ce7ee839f08a43c5bfc9d05cec28aaa7c9785837247f96cbe490b9/coverage-7.10.1-cp312-cp312-win_arm64.whl", hash = "sha256:7718060dd4434cc719803a5e526838a5d66e4efa5dc46d2b25c21965a9c6fcc4", size = 216523, upload_time = "2025-07-27T14:11:53.965Z" }, + { url = "https://files.pythonhosted.org/packages/ef/72/135ff5fef09b1ffe78dbe6fcf1e16b2e564cd35faeacf3d63d60d887f12d/coverage-7.10.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ebb08d0867c5a25dffa4823377292a0ffd7aaafb218b5d4e2e106378b1061e39", size = 214960, upload_time = "2025-07-27T14:11:55.959Z" }, + { url = "https://files.pythonhosted.org/packages/b1/aa/73a5d1a6fc08ca709a8177825616aa95ee6bf34d522517c2595484a3e6c9/coverage-7.10.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f32a95a83c2e17422f67af922a89422cd24c6fa94041f083dd0bb4f6057d0bc7", size = 215220, upload_time = "2025-07-27T14:11:57.899Z" }, + { url = "https://files.pythonhosted.org/packages/8d/40/3124fdd45ed3772a42fc73ca41c091699b38a2c3bd4f9cb564162378e8b6/coverage-7.10.1-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:c4c746d11c8aba4b9f58ca8bfc6fbfd0da4efe7960ae5540d1a1b13655ee8892", size = 245772, upload_time = "2025-07-27T14:12:00.422Z" }, + { url = "https://files.pythonhosted.org/packages/42/62/a77b254822efa8c12ad59e8039f2bc3df56dc162ebda55e1943e35ba31a5/coverage-7.10.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:7f39edd52c23e5c7ed94e0e4bf088928029edf86ef10b95413e5ea670c5e92d7", size = 248116, upload_time = "2025-07-27T14:12:03.099Z" }, + { url = "https://files.pythonhosted.org/packages/1d/01/8101f062f472a3a6205b458d18ef0444a63ae5d36a8a5ed5dd0f6167f4db/coverage-7.10.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ab6e19b684981d0cd968906e293d5628e89faacb27977c92f3600b201926b994", size = 249554, upload_time = "2025-07-27T14:12:04.668Z" }, + { url = "https://files.pythonhosted.org/packages/8f/7b/e51bc61573e71ff7275a4f167aecbd16cb010aefdf54bcd8b0a133391263/coverage-7.10.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5121d8cf0eacb16133501455d216bb5f99899ae2f52d394fe45d59229e6611d0", size = 247766, upload_time = "2025-07-27T14:12:06.234Z" }, + { url = "https://files.pythonhosted.org/packages/4b/71/1c96d66a51d4204a9d6d12df53c4071d87e110941a2a1fe94693192262f5/coverage-7.10.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:df1c742ca6f46a6f6cbcaef9ac694dc2cb1260d30a6a2f5c68c5f5bcfee1cfd7", size = 245735, upload_time = "2025-07-27T14:12:08.305Z" }, + { url = "https://files.pythonhosted.org/packages/13/d5/efbc2ac4d35ae2f22ef6df2ca084c60e13bd9378be68655e3268c80349ab/coverage-7.10.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:40f9a38676f9c073bf4b9194707aa1eb97dca0e22cc3766d83879d72500132c7", size = 247118, upload_time = "2025-07-27T14:12:09.903Z" }, + { url = "https://files.pythonhosted.org/packages/d1/22/073848352bec28ca65f2b6816b892fcf9a31abbef07b868487ad15dd55f1/coverage-7.10.1-cp313-cp313-win32.whl", hash = "sha256:2348631f049e884839553b9974f0821d39241c6ffb01a418efce434f7eba0fe7", size = 217381, upload_time = "2025-07-27T14:12:11.535Z" }, + { url = "https://files.pythonhosted.org/packages/b7/df/df6a0ff33b042f000089bd11b6bb034bab073e2ab64a56e78ed882cba55d/coverage-7.10.1-cp313-cp313-win_amd64.whl", hash = "sha256:4072b31361b0d6d23f750c524f694e1a417c1220a30d3ef02741eed28520c48e", size = 218152, upload_time = "2025-07-27T14:12:13.182Z" }, + { url = "https://files.pythonhosted.org/packages/30/e3/5085ca849a40ed6b47cdb8f65471c2f754e19390b5a12fa8abd25cbfaa8f/coverage-7.10.1-cp313-cp313-win_arm64.whl", hash = "sha256:3e31dfb8271937cab9425f19259b1b1d1f556790e98eb266009e7a61d337b6d4", size = 216559, upload_time = "2025-07-27T14:12:14.807Z" }, + { url = "https://files.pythonhosted.org/packages/cc/93/58714efbfdeb547909feaabe1d67b2bdd59f0597060271b9c548d5efb529/coverage-7.10.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:1c4f679c6b573a5257af6012f167a45be4c749c9925fd44d5178fd641ad8bf72", size = 215677, upload_time = "2025-07-27T14:12:16.68Z" }, + { url = "https://files.pythonhosted.org/packages/c0/0c/18eaa5897e7e8cb3f8c45e563e23e8a85686b4585e29d53cacb6bc9cb340/coverage-7.10.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:871ebe8143da284bd77b84a9136200bd638be253618765d21a1fce71006d94af", size = 215899, upload_time = "2025-07-27T14:12:18.758Z" }, + { url = "https://files.pythonhosted.org/packages/84/c1/9d1affacc3c75b5a184c140377701bbf14fc94619367f07a269cd9e4fed6/coverage-7.10.1-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:998c4751dabf7d29b30594af416e4bf5091f11f92a8d88eb1512c7ba136d1ed7", size = 257140, upload_time = "2025-07-27T14:12:20.357Z" }, + { url = "https://files.pythonhosted.org/packages/3d/0f/339bc6b8fa968c346df346068cca1f24bdea2ddfa93bb3dc2e7749730962/coverage-7.10.1-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:780f750a25e7749d0af6b3631759c2c14f45de209f3faaa2398312d1c7a22759", size = 259005, upload_time = "2025-07-27T14:12:22.007Z" }, + { url = "https://files.pythonhosted.org/packages/c8/22/89390864b92ea7c909079939b71baba7e5b42a76bf327c1d615bd829ba57/coverage-7.10.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:590bdba9445df4763bdbebc928d8182f094c1f3947a8dc0fc82ef014dbdd8324", size = 261143, upload_time = "2025-07-27T14:12:23.746Z" }, + { url = "https://files.pythonhosted.org/packages/2c/56/3d04d89017c0c41c7a71bd69b29699d919b6bbf2649b8b2091240b97dd6a/coverage-7.10.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b2df80cb6a2af86d300e70acb82e9b79dab2c1e6971e44b78dbfc1a1e736b53", size = 258735, upload_time = "2025-07-27T14:12:25.73Z" }, + { url = "https://files.pythonhosted.org/packages/cb/40/312252c8afa5ca781063a09d931f4b9409dc91526cd0b5a2b84143ffafa2/coverage-7.10.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:d6a558c2725bfb6337bf57c1cd366c13798bfd3bfc9e3dd1f4a6f6fc95a4605f", size = 256871, upload_time = "2025-07-27T14:12:27.767Z" }, + { url = "https://files.pythonhosted.org/packages/1f/2b/564947d5dede068215aaddb9e05638aeac079685101462218229ddea9113/coverage-7.10.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e6150d167f32f2a54690e572e0a4c90296fb000a18e9b26ab81a6489e24e78dd", size = 257692, upload_time = "2025-07-27T14:12:29.347Z" }, + { url = "https://files.pythonhosted.org/packages/93/1b/c8a867ade85cb26d802aea2209b9c2c80613b9c122baa8c8ecea6799648f/coverage-7.10.1-cp313-cp313t-win32.whl", hash = "sha256:d946a0c067aa88be4a593aad1236493313bafaa27e2a2080bfe88db827972f3c", size = 218059, upload_time = "2025-07-27T14:12:31.076Z" }, + { url = "https://files.pythonhosted.org/packages/a1/fe/cd4ab40570ae83a516bf5e754ea4388aeedd48e660e40c50b7713ed4f930/coverage-7.10.1-cp313-cp313t-win_amd64.whl", hash = "sha256:e37c72eaccdd5ed1130c67a92ad38f5b2af66eeff7b0abe29534225db2ef7b18", size = 219150, upload_time = "2025-07-27T14:12:32.746Z" }, + { url = "https://files.pythonhosted.org/packages/8d/16/6e5ed5854be6d70d0c39e9cb9dd2449f2c8c34455534c32c1a508c7dbdb5/coverage-7.10.1-cp313-cp313t-win_arm64.whl", hash = "sha256:89ec0ffc215c590c732918c95cd02b55c7d0f569d76b90bb1a5e78aa340618e4", size = 217014, upload_time = "2025-07-27T14:12:34.406Z" }, + { url = "https://files.pythonhosted.org/packages/54/8e/6d0bfe9c3d7121cf936c5f8b03e8c3da1484fb801703127dba20fb8bd3c7/coverage-7.10.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:166d89c57e877e93d8827dac32cedae6b0277ca684c6511497311249f35a280c", size = 214951, upload_time = "2025-07-27T14:12:36.069Z" }, + { url = "https://files.pythonhosted.org/packages/f2/29/e3e51a8c653cf2174c60532aafeb5065cea0911403fa144c9abe39790308/coverage-7.10.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:bed4a2341b33cd1a7d9ffc47df4a78ee61d3416d43b4adc9e18b7d266650b83e", size = 215229, upload_time = "2025-07-27T14:12:37.759Z" }, + { url = "https://files.pythonhosted.org/packages/e0/59/3c972080b2fa18b6c4510201f6d4dc87159d450627d062cd9ad051134062/coverage-7.10.1-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:ddca1e4f5f4c67980533df01430184c19b5359900e080248bbf4ed6789584d8b", size = 245738, upload_time = "2025-07-27T14:12:39.453Z" }, + { url = "https://files.pythonhosted.org/packages/2e/04/fc0d99d3f809452654e958e1788454f6e27b34e43f8f8598191c8ad13537/coverage-7.10.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:37b69226001d8b7de7126cad7366b0778d36777e4d788c66991455ba817c5b41", size = 248045, upload_time = "2025-07-27T14:12:41.387Z" }, + { url = "https://files.pythonhosted.org/packages/5e/2e/afcbf599e77e0dfbf4c97197747250d13d397d27e185b93987d9eaac053d/coverage-7.10.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b2f22102197bcb1722691296f9e589f02b616f874e54a209284dd7b9294b0b7f", size = 249666, upload_time = "2025-07-27T14:12:43.056Z" }, + { url = "https://files.pythonhosted.org/packages/6e/ae/bc47f7f8ecb7a06cbae2bf86a6fa20f479dd902bc80f57cff7730438059d/coverage-7.10.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:1e0c768b0f9ac5839dac5cf88992a4bb459e488ee8a1f8489af4cb33b1af00f1", size = 247692, upload_time = "2025-07-27T14:12:44.83Z" }, + { url = "https://files.pythonhosted.org/packages/b6/26/cbfa3092d31ccba8ba7647e4d25753263e818b4547eba446b113d7d1efdf/coverage-7.10.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:991196702d5e0b120a8fef2664e1b9c333a81d36d5f6bcf6b225c0cf8b0451a2", size = 245536, upload_time = "2025-07-27T14:12:46.527Z" }, + { url = "https://files.pythonhosted.org/packages/56/77/9c68e92500e6a1c83d024a70eadcc9a173f21aadd73c4675fe64c9c43fdf/coverage-7.10.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ae8e59e5f4fd85d6ad34c2bb9d74037b5b11be072b8b7e9986beb11f957573d4", size = 246954, upload_time = "2025-07-27T14:12:49.279Z" }, + { url = "https://files.pythonhosted.org/packages/7f/a5/ba96671c5a669672aacd9877a5987c8551501b602827b4e84256da2a30a7/coverage-7.10.1-cp314-cp314-win32.whl", hash = "sha256:042125c89cf74a074984002e165d61fe0e31c7bd40ebb4bbebf07939b5924613", size = 217616, upload_time = "2025-07-27T14:12:51.214Z" }, + { url = "https://files.pythonhosted.org/packages/e7/3c/e1e1eb95fc1585f15a410208c4795db24a948e04d9bde818fe4eb893bc85/coverage-7.10.1-cp314-cp314-win_amd64.whl", hash = "sha256:a22c3bfe09f7a530e2c94c87ff7af867259c91bef87ed2089cd69b783af7b84e", size = 218412, upload_time = "2025-07-27T14:12:53.429Z" }, + { url = "https://files.pythonhosted.org/packages/b0/85/7e1e5be2cb966cba95566ba702b13a572ca744fbb3779df9888213762d67/coverage-7.10.1-cp314-cp314-win_arm64.whl", hash = "sha256:ee6be07af68d9c4fca4027c70cea0c31a0f1bc9cb464ff3c84a1f916bf82e652", size = 216776, upload_time = "2025-07-27T14:12:55.482Z" }, + { url = "https://files.pythonhosted.org/packages/62/0f/5bb8f29923141cca8560fe2217679caf4e0db643872c1945ac7d8748c2a7/coverage-7.10.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:d24fb3c0c8ff0d517c5ca5de7cf3994a4cd559cde0315201511dbfa7ab528894", size = 215698, upload_time = "2025-07-27T14:12:57.225Z" }, + { url = "https://files.pythonhosted.org/packages/80/29/547038ffa4e8e4d9e82f7dfc6d152f75fcdc0af146913f0ba03875211f03/coverage-7.10.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1217a54cfd79be20512a67ca81c7da3f2163f51bbfd188aab91054df012154f5", size = 215902, upload_time = "2025-07-27T14:12:59.071Z" }, + { url = "https://files.pythonhosted.org/packages/e1/8a/7aaa8fbfaed900147987a424e112af2e7790e1ac9cd92601e5bd4e1ba60a/coverage-7.10.1-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:51f30da7a52c009667e02f125737229d7d8044ad84b79db454308033a7808ab2", size = 257230, upload_time = "2025-07-27T14:13:01.248Z" }, + { url = "https://files.pythonhosted.org/packages/e5/1d/c252b5ffac44294e23a0d79dd5acf51749b39795ccc898faeabf7bee903f/coverage-7.10.1-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:ed3718c757c82d920f1c94089066225ca2ad7f00bb904cb72b1c39ebdd906ccb", size = 259194, upload_time = "2025-07-27T14:13:03.247Z" }, + { url = "https://files.pythonhosted.org/packages/16/ad/6c8d9f83d08f3bac2e7507534d0c48d1a4f52c18e6f94919d364edbdfa8f/coverage-7.10.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cc452481e124a819ced0c25412ea2e144269ef2f2534b862d9f6a9dae4bda17b", size = 261316, upload_time = "2025-07-27T14:13:04.957Z" }, + { url = "https://files.pythonhosted.org/packages/d6/4e/f9bbf3a36c061e2e0e0f78369c006d66416561a33d2bee63345aee8ee65e/coverage-7.10.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:9d6f494c307e5cb9b1e052ec1a471060f1dea092c8116e642e7a23e79d9388ea", size = 258794, upload_time = "2025-07-27T14:13:06.715Z" }, + { url = "https://files.pythonhosted.org/packages/87/82/e600bbe78eb2cb0541751d03cef9314bcd0897e8eea156219c39b685f869/coverage-7.10.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:fc0e46d86905ddd16b85991f1f4919028092b4e511689bbdaff0876bd8aab3dd", size = 256869, upload_time = "2025-07-27T14:13:08.933Z" }, + { url = "https://files.pythonhosted.org/packages/ce/5d/2fc9a9236c5268f68ac011d97cd3a5ad16cc420535369bedbda659fdd9b7/coverage-7.10.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:80b9ccd82e30038b61fc9a692a8dc4801504689651b281ed9109f10cc9fe8b4d", size = 257765, upload_time = "2025-07-27T14:13:10.778Z" }, + { url = "https://files.pythonhosted.org/packages/8a/05/b4e00b2bd48a2dc8e1c7d2aea7455f40af2e36484ab2ef06deb85883e9fe/coverage-7.10.1-cp314-cp314t-win32.whl", hash = "sha256:e58991a2b213417285ec866d3cd32db17a6a88061a985dbb7e8e8f13af429c47", size = 218420, upload_time = "2025-07-27T14:13:12.882Z" }, + { url = "https://files.pythonhosted.org/packages/77/fb/d21d05f33ea27ece327422240e69654b5932b0b29e7fbc40fbab3cf199bf/coverage-7.10.1-cp314-cp314t-win_amd64.whl", hash = "sha256:e88dd71e4ecbc49d9d57d064117462c43f40a21a1383507811cf834a4a620651", size = 219536, upload_time = "2025-07-27T14:13:14.718Z" }, + { url = "https://files.pythonhosted.org/packages/a6/68/7fea94b141281ed8be3d1d5c4319a97f2befc3e487ce33657fc64db2c45e/coverage-7.10.1-cp314-cp314t-win_arm64.whl", hash = "sha256:1aadfb06a30c62c2eb82322171fe1f7c288c80ca4156d46af0ca039052814bab", size = 217190, upload_time = "2025-07-27T14:13:16.85Z" }, + { url = "https://files.pythonhosted.org/packages/0f/64/922899cff2c0fd3496be83fa8b81230f5a8d82a2ad30f98370b133c2c83b/coverage-7.10.1-py3-none-any.whl", hash = "sha256:fa2a258aa6bf188eb9a8948f7102a83da7c430a0dce918dbd8b60ef8fcb772d7", size = 206597, upload_time = "2025-07-27T14:13:37.221Z" }, ] [[package]] @@ -249,15 +271,6 @@ version = "0.9.5" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/f1/2a/8c3ac3d8bc94e6de8d7ae270bb5bc437b210bb9d6d9e46630c98f4abd20c/csscompressor-0.9.5.tar.gz", hash = "sha256:afa22badbcf3120a4f392e4d22f9fff485c044a1feda4a950ecc5eba9dd31a05", size = 237808, upload_time = "2017-11-26T21:13:08.238Z" } -[[package]] -name = "cycler" -version = "0.12.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a9/95/a3dbbb5028f35eafb79008e7522a75244477d2838f38cbb722248dabc2a8/cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c", size = 7615, upload_time = "2023-10-07T05:32:18.335Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321, upload_time = "2023-10-07T05:32:16.783Z" }, -] - [[package]] name = "debugpy" version = "1.8.14" @@ -294,12 +307,12 @@ wheels = [ ] [[package]] -name = "et-xmlfile" -version = "2.0.0" +name = "execnet" +version = "2.1.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d3/38/af70d7ab1ae9d4da450eeec1fa3918940a5fafb9055e934af8d6eb0c2313/et_xmlfile-2.0.0.tar.gz", hash = "sha256:dab3f4764309081ce75662649be815c4c9081e88f0837825f90fd28317d4da54", size = 17234, upload_time = "2024-10-25T17:25:40.039Z" } +sdist = { url = "https://files.pythonhosted.org/packages/bb/ff/b4c0dc78fbe20c3e59c0c7334de0c27eb4001a2b2017999af398bf730817/execnet-2.1.1.tar.gz", hash = "sha256:5189b52c6121c24feae288166ab41b32549c7e2348652736540b9e6e7d4e72e3", size = 166524, upload_time = "2024-04-08T09:04:19.245Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl", hash = "sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa", size = 18059, upload_time = "2024-10-25T17:25:39.051Z" }, + { url = "https://files.pythonhosted.org/packages/43/09/2aea36ff60d16dd8879bdb2f5b3ee0ba8d08cbbdcdfe870e695ce3784385/execnet-2.1.1-py3-none-any.whl", hash = "sha256:26dee51f1b80cebd6d0ca8e74dd8745419761d3bef34163928cbebbdc4749fdc", size = 40612, upload_time = "2024-04-08T09:04:17.414Z" }, ] [[package]] @@ -320,91 +333,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/4d/36/2a115987e2d8c300a974597416d9de88f2444426de9571f4b59b2cca3acc/filelock-3.18.0-py3-none-any.whl", hash = "sha256:c401f4f8377c4464e6db25fff06205fd89bdd83b65eb0488ed1b160f780e21de", size = 16215, upload_time = "2025-03-14T07:11:39.145Z" }, ] -[[package]] -name = "flexcache" -version = "0.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/55/b0/8a21e330561c65653d010ef112bf38f60890051d244ede197ddaa08e50c1/flexcache-0.3.tar.gz", hash = "sha256:18743bd5a0621bfe2cf8d519e4c3bfdf57a269c15d1ced3fb4b64e0ff4600656", size = 15816, upload_time = "2024-03-09T03:21:07.555Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/27/cd/c883e1a7c447479d6e13985565080e3fea88ab5a107c21684c813dba1875/flexcache-0.3-py3-none-any.whl", hash = "sha256:d43c9fea82336af6e0115e308d9d33a185390b8346a017564611f1466dcd2e32", size = 13263, upload_time = "2024-03-09T03:21:05.635Z" }, -] - -[[package]] -name = "flexparser" -version = "0.4" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/82/99/b4de7e39e8eaf8207ba1a8fa2241dd98b2ba72ae6e16960d8351736d8702/flexparser-0.4.tar.gz", hash = "sha256:266d98905595be2ccc5da964fe0a2c3526fbbffdc45b65b3146d75db992ef6b2", size = 31799, upload_time = "2024-11-07T02:00:56.249Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fe/5e/3be305568fe5f34448807976dc82fc151d76c3e0e03958f34770286278c1/flexparser-0.4-py3-none-any.whl", hash = "sha256:3738b456192dcb3e15620f324c447721023c0293f6af9955b481e91d00179846", size = 27625, upload_time = "2024-11-07T02:00:54.523Z" }, -] - -[[package]] -name = "fonttools" -version = "4.58.5" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/52/97/5735503e58d3816b0989955ef9b2df07e4c99b246469bd8b3823a14095da/fonttools-4.58.5.tar.gz", hash = "sha256:b2a35b0a19f1837284b3a23dd64fd7761b8911d50911ecd2bdbaf5b2d1b5df9c", size = 3526243, upload_time = "2025-07-03T14:04:47.736Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d6/68/66b498ee66f3e7e92fd68476c2509508082b7f57d68c0cdb4b8573f44331/fonttools-4.58.5-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:c3af3fefaafb570a03051a0d6899b8374dcf8e6a4560e42575843aef33bdbad6", size = 2754751, upload_time = "2025-07-03T14:03:52.976Z" }, - { url = "https://files.pythonhosted.org/packages/f1/1e/edbc14b79290980c3944a1f43098624bc8965f534964aa03d52041f24cb4/fonttools-4.58.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:688137789dbd44e8757ad77b49a771539d8069195ffa9a8bcf18176e90bbd86d", size = 2322342, upload_time = "2025-07-03T14:03:54.957Z" }, - { url = "https://files.pythonhosted.org/packages/c1/d7/3c87cf147185d91c2e946460a5cf68c236427b4a23ab96793ccb7d8017c9/fonttools-4.58.5-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2af65836cf84cd7cb882d0b353bdc73643a497ce23b7414c26499bb8128ca1af", size = 4897011, upload_time = "2025-07-03T14:03:56.829Z" }, - { url = "https://files.pythonhosted.org/packages/a0/d6/fbb44cc85d4195fe54356658bd9f934328b4f74ae14addd90b4b5558b5c9/fonttools-4.58.5-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d2d79cfeb456bf438cb9fb87437634d4d6f228f27572ca5c5355e58472d5519d", size = 4942291, upload_time = "2025-07-03T14:03:59.204Z" }, - { url = "https://files.pythonhosted.org/packages/4d/c8/453f82e21aedf25cdc2ae619c03a73512398cec9bd8b6c3b1c571e0b6632/fonttools-4.58.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0feac9dda9a48a7a342a593f35d50a5cee2dbd27a03a4c4a5192834a4853b204", size = 4886824, upload_time = "2025-07-03T14:04:01.517Z" }, - { url = "https://files.pythonhosted.org/packages/40/54/e9190001b8e22d123f78925b2f508c866d9d18531694b979277ad45d59b0/fonttools-4.58.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:36555230e168511e83ad8637232268649634b8dfff6ef58f46e1ebc057a041ad", size = 5038510, upload_time = "2025-07-03T14:04:03.917Z" }, - { url = "https://files.pythonhosted.org/packages/cf/9c/07cdad4774841a6304aabae939f8cbb9538cb1d8e97f5016b334da98e73a/fonttools-4.58.5-cp312-cp312-win32.whl", hash = "sha256:26ec05319353842d127bd02516eacb25b97ca83966e40e9ad6fab85cab0576f4", size = 2188459, upload_time = "2025-07-03T14:04:06.103Z" }, - { url = "https://files.pythonhosted.org/packages/0e/4d/1eaaad22781d55f49d1b184563842172aeb6a4fe53c029e503be81114314/fonttools-4.58.5-cp312-cp312-win_amd64.whl", hash = "sha256:778a632e538f82c1920579c0c01566a8f83dc24470c96efbf2fbac698907f569", size = 2236565, upload_time = "2025-07-03T14:04:08.27Z" }, - { url = "https://files.pythonhosted.org/packages/3a/ee/764dd8b99891f815241f449345863cfed9e546923d9cef463f37fd1d7168/fonttools-4.58.5-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f4b6f1360da13cecc88c0d60716145b31e1015fbe6a59e32f73a4404e2ea92cf", size = 2745867, upload_time = "2025-07-03T14:04:10.586Z" }, - { url = "https://files.pythonhosted.org/packages/e2/23/8fef484c02fef55e226dfeac4339a015c5480b6a496064058491759ac71e/fonttools-4.58.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4a036822e915692aa2c03e2decc60f49a8190f8111b639c947a4f4e5774d0d7a", size = 2317933, upload_time = "2025-07-03T14:04:12.335Z" }, - { url = "https://files.pythonhosted.org/packages/ab/47/f92b135864fa777e11ad68420bf89446c91a572fe2782745586f8e6aac0c/fonttools-4.58.5-cp313-cp313-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a6d7709fcf4577b0f294ee6327088884ca95046e1eccde87c53bbba4d5008541", size = 4877844, upload_time = "2025-07-03T14:04:14.58Z" }, - { url = "https://files.pythonhosted.org/packages/3e/65/6c1a83511d8ac32411930495645edb3f8dfabebcb78f08cf6009ba2585ec/fonttools-4.58.5-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b9b5099ca99b79d6d67162778b1b1616fc0e1de02c1a178248a0da8d78a33852", size = 4940106, upload_time = "2025-07-03T14:04:16.563Z" }, - { url = "https://files.pythonhosted.org/packages/fa/90/df8eb77d6cf266cbbba01866a1349a3e9121e0a63002cf8d6754e994f755/fonttools-4.58.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3f2c05a8d82a4d15aebfdb3506e90793aea16e0302cec385134dd960647a36c0", size = 4879458, upload_time = "2025-07-03T14:04:19.584Z" }, - { url = "https://files.pythonhosted.org/packages/26/b1/e32f8de51b7afcfea6ad62780da2fa73212c43a32cd8cafcc852189d7949/fonttools-4.58.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:79f0c4b1cc63839b61deeac646d8dba46f8ed40332c2ac1b9997281462c2e4ba", size = 5021917, upload_time = "2025-07-03T14:04:21.736Z" }, - { url = "https://files.pythonhosted.org/packages/89/72/578aa7fe32918dd763c62f447aaed672d665ee10e3eeb1725f4d6493fe96/fonttools-4.58.5-cp313-cp313-win32.whl", hash = "sha256:a1a9a2c462760976882131cbab7d63407813413a2d32cd699e86a1ff22bf7aa5", size = 2186827, upload_time = "2025-07-03T14:04:24.237Z" }, - { url = "https://files.pythonhosted.org/packages/71/a3/21e921b16cb9c029d3308e0cb79c9a937e9ff1fc1ee28c2419f0957b9e7c/fonttools-4.58.5-cp313-cp313-win_amd64.whl", hash = "sha256:bca61b14031a4b7dc87e14bf6ca34c275f8e4b9f7a37bc2fe746b532a924cf30", size = 2235706, upload_time = "2025-07-03T14:04:26.082Z" }, - { url = "https://files.pythonhosted.org/packages/d7/d4/1d85a1996b6188cd2713230e002d79a6f3a289bb17cef600cba385848b72/fonttools-4.58.5-py3-none-any.whl", hash = "sha256:e48a487ed24d9b611c5c4b25db1e50e69e9854ca2670e39a3486ffcd98863ec4", size = 1115318, upload_time = "2025-07-03T14:04:45.378Z" }, -] - -[[package]] -name = "frictionless" -version = "5.18.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "attrs" }, - { name = "chardet" }, - { name = "humanize" }, - { name = "isodate" }, - { name = "jinja2" }, - { name = "jsonschema" }, - { name = "marko" }, - { name = "petl" }, - { name = "pydantic" }, - { name = "python-dateutil" }, - { name = "python-slugify" }, - { name = "pyyaml" }, - { name = "requests" }, - { name = "rfc3986" }, - { name = "simpleeval" }, - { name = "tabulate" }, - { name = "typer" }, - { name = "typing-extensions" }, - { name = "validators" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/11/d0/c94675a1c1b8c12fd68489e2b4a924f80a2b122199cd986c58a5136197d2/frictionless-5.18.1.tar.gz", hash = "sha256:daeaf55f896eeb52b43e62600466af9528fe0aeeebd28b1b917e13322f370a8b", size = 74372478, upload_time = "2025-03-25T21:32:50.081Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a9/7a/dac76d31584bb4f874ae860490c9465f5b59bd8c110f68fbbb07aba48845/frictionless-5.18.1-py3-none-any.whl", hash = "sha256:3f4c87469a89bdb88e9cc318088553a26f3d14839098f95c183ea01fc89628dd", size = 531615, upload_time = "2025-03-25T21:32:45.534Z" }, -] - -[package.optional-dependencies] -pandas = [ - { name = "pandas" }, - { name = "pyarrow" }, -] - [[package]] name = "ghp-import" version = "2.1.0" @@ -453,45 +381,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/58/c6/5c20af38c2a57c15d87f7f38bee77d63c1d2a3689f74fefaf35915dd12b2/griffe-1.7.3-py3-none-any.whl", hash = "sha256:c6b3ee30c2f0f17f30bcdef5068d6ab7a2a4f1b8bf1a3e74b56fffd21e1c5f75", size = 129303, upload_time = "2025-04-23T11:29:07.145Z" }, ] -[[package]] -name = "hdx-python-country" -version = "3.9.5" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "hdx-python-utilities" }, - { name = "libhxl" }, - { name = "tenacity" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/1d/6b/424edb0f0834cd645a9ea97e2741046d42dbc54407eaef17bcd160f8e58d/hdx_python_country-3.9.5.tar.gz", hash = "sha256:1db9872a083c8bd0632ae13247b48011ab4655265b7967f73eeac88123168879", size = 529170, upload_time = "2025-06-24T22:28:08.996Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/45/9a/19b60f18d26bc674cc5c5e6a55ea0ec1da3713df6a307dfe6881486464f3/hdx_python_country-3.9.5-py3-none-any.whl", hash = "sha256:6e21b3f904564c8ef61835f063d2bcefff11393967bbe261b42ea87fe82f9b7c", size = 55537, upload_time = "2025-06-24T22:28:06.824Z" }, -] - -[[package]] -name = "hdx-python-utilities" -version = "3.8.7" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "frictionless" }, - { name = "ijson" }, - { name = "jsonlines" }, - { name = "loguru" }, - { name = "openpyxl" }, - { name = "pyphonetics" }, - { name = "python-dateutil" }, - { name = "ratelimit" }, - { name = "requests-file" }, - { name = "ruamel-yaml" }, - { name = "tableschema-to-template" }, - { name = "xlrd" }, - { name = "xlsx2csv" }, - { name = "xlwt" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/66/de/b812b6b242f47db98ed043b7f3211c81443f0e59959377e97a93915331c0/hdx_python_utilities-3.8.7.tar.gz", hash = "sha256:41212cd5b682777d393ee991b546f1b4326665d981714a829e5483101fd15a60", size = 656009, upload_time = "2025-05-14T02:31:28.578Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/db/38/44f2a0b83e103bb3d47dbc66dfaa4aaa65c34c60fd26d5445fb2bbd3c09a/hdx_python_utilities-3.8.7-py3-none-any.whl", hash = "sha256:47e67810e81a481504b8653c429b31b8c237da594dc27604075c8e79077c8640", size = 60787, upload_time = "2025-05-14T02:31:26.794Z" }, -] - [[package]] name = "htmlmin2" version = "0.1.13" @@ -500,15 +389,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/be/31/a76f4bfa885f93b8167cb4c85cf32b54d1f64384d0b897d45bc6d19b7b45/htmlmin2-0.1.13-py3-none-any.whl", hash = "sha256:75609f2a42e64f7ce57dbff28a39890363bde9e7e5885db633317efbdf8c79a2", size = 34486, upload_time = "2023-03-14T21:28:30.388Z" }, ] -[[package]] -name = "humanize" -version = "4.12.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/22/d1/bbc4d251187a43f69844f7fd8941426549bbe4723e8ff0a7441796b0789f/humanize-4.12.3.tar.gz", hash = "sha256:8430be3a615106fdfceb0b2c1b41c4c98c6b0fc5cc59663a5539b111dd325fb0", size = 80514, upload_time = "2025-04-30T11:51:07.98Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/1e/62a2ec3104394a2975a2629eec89276ede9dbe717092f6966fcf963e1bf0/humanize-4.12.3-py3-none-any.whl", hash = "sha256:2cbf6370af06568fa6d2da77c86edb7886f3160ecd19ee1ffef07979efc597f6", size = 128487, upload_time = "2025-04-30T11:51:06.468Z" }, -] - [[package]] name = "identify" version = "2.6.12" @@ -527,62 +407,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442, upload_time = "2024-09-15T18:07:37.964Z" }, ] -[[package]] -name = "ijson" -version = "3.4.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a3/4f/1cfeada63f5fce87536651268ddf5cca79b8b4bbb457aee4e45777964a0a/ijson-3.4.0.tar.gz", hash = "sha256:5f74dcbad9d592c428d3ca3957f7115a42689ee7ee941458860900236ae9bb13", size = 65782, upload_time = "2025-05-08T02:37:20.135Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f8/ec/317ee5b2d13e50448833ead3aa906659a32b376191f6abc2a7c6112d2b27/ijson-3.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:956b148f88259a80a9027ffbe2d91705fae0c004fbfba3e5a24028fbe72311a9", size = 87212, upload_time = "2025-05-08T02:35:51.835Z" }, - { url = "https://files.pythonhosted.org/packages/f8/43/b06c96ced30cacecc5d518f89b0fd1c98c294a30ff88848b70ed7b7f72a1/ijson-3.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:06b89960f5c721106394c7fba5760b3f67c515b8eb7d80f612388f5eca2f4621", size = 59175, upload_time = "2025-05-08T02:35:52.988Z" }, - { url = "https://files.pythonhosted.org/packages/e9/df/b4aeafb7ecde463130840ee9be36130823ec94a00525049bf700883378b8/ijson-3.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9a0bb591cf250dd7e9dfab69d634745a7f3272d31cfe879f9156e0a081fd97ee", size = 59011, upload_time = "2025-05-08T02:35:54.394Z" }, - { url = "https://files.pythonhosted.org/packages/e3/7c/a80b8e361641609507f62022089626d4b8067f0826f51e1c09e4ba86eba8/ijson-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:72e92de999977f4c6b660ffcf2b8d59604ccd531edcbfde05b642baf283e0de8", size = 146094, upload_time = "2025-05-08T02:35:55.601Z" }, - { url = "https://files.pythonhosted.org/packages/01/44/fa416347b9a802e3646c6ff377fc3278bd7d6106e17beb339514b6a3184e/ijson-3.4.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e9602157a5b869d44b6896e64f502c712a312fcde044c2e586fccb85d3e316e", size = 137903, upload_time = "2025-05-08T02:35:56.814Z" }, - { url = "https://files.pythonhosted.org/packages/24/c6/41a9ad4d42df50ff6e70fdce79b034f09b914802737ebbdc141153d8d791/ijson-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e83660edb931a425b7ff662eb49db1f10d30ca6d4d350e5630edbed098bc01", size = 148339, upload_time = "2025-05-08T02:35:58.595Z" }, - { url = "https://files.pythonhosted.org/packages/5f/6f/7d01efda415b8502dce67e067ed9e8a124f53e763002c02207e542e1a2f1/ijson-3.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:49bf8eac1c7b7913073865a859c215488461f7591b4fa6a33c14b51cb73659d0", size = 149383, upload_time = "2025-05-08T02:36:00.197Z" }, - { url = "https://files.pythonhosted.org/packages/95/6c/0d67024b9ecb57916c5e5ab0350251c9fe2f86dc9c8ca2b605c194bdad6a/ijson-3.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:160b09273cb42019f1811469508b0a057d19f26434d44752bde6f281da6d3f32", size = 141580, upload_time = "2025-05-08T02:36:01.998Z" }, - { url = "https://files.pythonhosted.org/packages/06/43/e10edcc1c6a3b619294de835e7678bfb3a1b8a75955f3689fd66a1e9e7b4/ijson-3.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2019ff4e6f354aa00c76c8591bd450899111c61f2354ad55cc127e2ce2492c44", size = 150280, upload_time = "2025-05-08T02:36:03.926Z" }, - { url = "https://files.pythonhosted.org/packages/07/84/1cbeee8e8190a1ebe6926569a92cf1fa80ddb380c129beb6f86559e1bb24/ijson-3.4.0-cp312-cp312-win32.whl", hash = "sha256:931c007bf6bb8330705429989b2deed6838c22b63358a330bf362b6e458ba0bf", size = 51512, upload_time = "2025-05-08T02:36:05.595Z" }, - { url = "https://files.pythonhosted.org/packages/66/13/530802bc391c95be6fe9f96e9aa427d94067e7c0b7da7a9092344dc44c4b/ijson-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:71523f2b64cb856a820223e94d23e88369f193017ecc789bb4de198cc9d349eb", size = 54081, upload_time = "2025-05-08T02:36:07.099Z" }, - { url = "https://files.pythonhosted.org/packages/77/b3/b1d2eb2745e5204ec7a25365a6deb7868576214feb5e109bce368fb692c9/ijson-3.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e8d96f88d75196a61c9d9443de2b72c2d4a7ba9456ff117b57ae3bba23a54256", size = 87216, upload_time = "2025-05-08T02:36:08.414Z" }, - { url = "https://files.pythonhosted.org/packages/b1/cd/cd6d340087617f8cc9bedbb21d974542fe2f160ed0126b8288d3499a469b/ijson-3.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c45906ce2c1d3b62f15645476fc3a6ca279549127f01662a39ca5ed334a00cf9", size = 59170, upload_time = "2025-05-08T02:36:09.604Z" }, - { url = "https://files.pythonhosted.org/packages/3e/4d/32d3a9903b488d3306e3c8288f6ee4217d2eea82728261db03a1045eb5d1/ijson-3.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4ab4bc2119b35c4363ea49f29563612237cae9413d2fbe54b223be098b97bc9e", size = 59013, upload_time = "2025-05-08T02:36:10.696Z" }, - { url = "https://files.pythonhosted.org/packages/d5/c8/db15465ab4b0b477cee5964c8bfc94bf8c45af8e27a23e1ad78d1926e587/ijson-3.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97b0a9b5a15e61dfb1f14921ea4e0dba39f3a650df6d8f444ddbc2b19b479ff1", size = 146564, upload_time = "2025-05-08T02:36:11.916Z" }, - { url = "https://files.pythonhosted.org/packages/c4/d8/0755545bc122473a9a434ab90e0f378780e603d75495b1ca3872de757873/ijson-3.4.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e3047bb994dabedf11de11076ed1147a307924b6e5e2df6784fb2599c4ad8c60", size = 137917, upload_time = "2025-05-08T02:36:13.532Z" }, - { url = "https://files.pythonhosted.org/packages/d0/c6/aeb89c8939ebe3f534af26c8c88000c5e870dbb6ae33644c21a4531f87d2/ijson-3.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68c83161b052e9f5dc8191acbc862bb1e63f8a35344cb5cd0db1afd3afd487a6", size = 148897, upload_time = "2025-05-08T02:36:14.813Z" }, - { url = "https://files.pythonhosted.org/packages/be/0e/7ef6e9b372106f2682a4a32b3c65bf86bb471a1670e4dac242faee4a7d3f/ijson-3.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1eebd9b6c20eb1dffde0ae1f0fbb4aeacec2eb7b89adb5c7c0449fc9fd742760", size = 149711, upload_time = "2025-05-08T02:36:16.476Z" }, - { url = "https://files.pythonhosted.org/packages/d1/5d/9841c3ed75bcdabf19b3202de5f862a9c9c86ce5c7c9d95fa32347fdbf5f/ijson-3.4.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:13fb6d5c35192c541421f3ee81239d91fc15a8d8f26c869250f941f4b346a86c", size = 141691, upload_time = "2025-05-08T02:36:18.044Z" }, - { url = "https://files.pythonhosted.org/packages/d5/d2/ce74e17218dba292e9be10a44ed0c75439f7958cdd263adb0b5b92d012d5/ijson-3.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:28b7196ff7b37c4897c547a28fa4876919696739fc91c1f347651c9736877c69", size = 150738, upload_time = "2025-05-08T02:36:19.483Z" }, - { url = "https://files.pythonhosted.org/packages/4e/43/dcc480f94453b1075c9911d4755b823f3ace275761bb37b40139f22109ca/ijson-3.4.0-cp313-cp313-win32.whl", hash = "sha256:3c2691d2da42629522140f77b99587d6f5010440d58d36616f33bc7bdc830cc3", size = 51512, upload_time = "2025-05-08T02:36:20.99Z" }, - { url = "https://files.pythonhosted.org/packages/35/dd/d8c5f15efd85ba51e6e11451ebe23d779361a9ec0d192064c2a8c3cdfcb8/ijson-3.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:c4554718c275a044c47eb3874f78f2c939f300215d9031e785a6711cc51b83fc", size = 54074, upload_time = "2025-05-08T02:36:22.075Z" }, - { url = "https://files.pythonhosted.org/packages/79/73/24ad8cd106203419c4d22bed627e02e281d66b83e91bc206a371893d0486/ijson-3.4.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:915a65e3f3c0eee2ea937bc62aaedb6c14cc1e8f0bb9f3f4fb5a9e2bbfa4b480", size = 91694, upload_time = "2025-05-08T02:36:23.289Z" }, - { url = "https://files.pythonhosted.org/packages/17/2d/f7f680984bcb7324a46a4c2df3bd73cf70faef0acfeb85a3f811abdfd590/ijson-3.4.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:afbe9748707684b6c5adc295c4fdcf27765b300aec4d484e14a13dca4e5c0afa", size = 61390, upload_time = "2025-05-08T02:36:24.42Z" }, - { url = "https://files.pythonhosted.org/packages/09/a1/f3ca7bab86f95bdb82494739e71d271410dfefce4590785d511669127145/ijson-3.4.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:d823f8f321b4d8d5fa020d0a84f089fec5d52b7c0762430476d9f8bf95bbc1a9", size = 61140, upload_time = "2025-05-08T02:36:26.708Z" }, - { url = "https://files.pythonhosted.org/packages/51/79/dd340df3d4fc7771c95df29997956b92ed0570fe7b616d1792fea9ad93f2/ijson-3.4.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8a0a2c54f3becf76881188beefd98b484b1d3bd005769a740d5b433b089fa23", size = 214739, upload_time = "2025-05-08T02:36:27.973Z" }, - { url = "https://files.pythonhosted.org/packages/59/f0/85380b7f51d1f5fb7065d76a7b623e02feca920cc678d329b2eccc0011e0/ijson-3.4.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ced19a83ab09afa16257a0b15bc1aa888dbc555cb754be09d375c7f8d41051f2", size = 198338, upload_time = "2025-05-08T02:36:29.496Z" }, - { url = "https://files.pythonhosted.org/packages/a5/cd/313264cf2ec42e0f01d198c49deb7b6fadeb793b3685e20e738eb6b3fa13/ijson-3.4.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8100f9885eff1f38d35cef80ef759a1bbf5fc946349afa681bd7d0e681b7f1a0", size = 207515, upload_time = "2025-05-08T02:36:30.981Z" }, - { url = "https://files.pythonhosted.org/packages/12/94/bf14457aa87ea32641f2db577c9188ef4e4ae373478afef422b31fc7f309/ijson-3.4.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d7bcc3f7f21b0f703031ecd15209b1284ea51b2a329d66074b5261de3916c1eb", size = 210081, upload_time = "2025-05-08T02:36:32.403Z" }, - { url = "https://files.pythonhosted.org/packages/7d/b4/eaee39e290e40e52d665db9bd1492cfdce86bd1e47948e0440db209c6023/ijson-3.4.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:2dcb190227b09dd171bdcbfe4720fddd574933c66314818dfb3960c8a6246a77", size = 199253, upload_time = "2025-05-08T02:36:33.861Z" }, - { url = "https://files.pythonhosted.org/packages/c5/9c/e09c7b9ac720a703ab115b221b819f149ed54c974edfff623c1e925e57da/ijson-3.4.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:eda4cfb1d49c6073a901735aaa62e39cb7ab47f3ad7bb184862562f776f1fa8a", size = 203816, upload_time = "2025-05-08T02:36:35.348Z" }, - { url = "https://files.pythonhosted.org/packages/7c/14/acd304f412e32d16a2c12182b9d78206bb0ae35354d35664f45db05c1b3b/ijson-3.4.0-cp313-cp313t-win32.whl", hash = "sha256:0772638efa1f3b72b51736833404f1cbd2f5beeb9c1a3d392e7d385b9160cba7", size = 53760, upload_time = "2025-05-08T02:36:36.608Z" }, - { url = "https://files.pythonhosted.org/packages/2f/24/93dd0a467191590a5ed1fc2b35842bca9d09900d001e00b0b497c0208ef6/ijson-3.4.0-cp313-cp313t-win_amd64.whl", hash = "sha256:3d8a0d67f36e4fb97c61a724456ef0791504b16ce6f74917a31c2e92309bbeb9", size = 56948, upload_time = "2025-05-08T02:36:37.849Z" }, -] - -[[package]] -name = "imf-reader" -version = "1.3.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "beautifulsoup4" }, - { name = "chardet" }, - { name = "pandas" }, - { name = "requests" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/af/45/24521d229aec5c058d998510794567788bc7b1b764dfaa02fb8e0aeda4b7/imf_reader-1.3.0.tar.gz", hash = "sha256:3f3130dd793a112fdd5913a7c7b733847a5a07fd70dee14d57624ae4e021a141", size = 12990, upload_time = "2025-02-06T09:16:10.723Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fd/5b/3a063116950f2aa2b450120e78162bb5b87098dde3b75ae90210c6f2c099/imf_reader-1.3.0-py3-none-any.whl", hash = "sha256:3515c6644dfef44d5fda89f5bb3786b4f83da20f49184911f0df2386782106f1", size = 16520, upload_time = "2025-02-06T09:16:09.042Z" }, -] - [[package]] name = "iniconfig" version = "2.1.0" @@ -649,15 +473,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl", hash = "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c", size = 8074, upload_time = "2025-01-17T11:24:33.271Z" }, ] -[[package]] -name = "isodate" -version = "0.7.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/54/4d/e940025e2ce31a8ce1202635910747e5a87cc3a6a6bb2d00973375014749/isodate-0.7.2.tar.gz", hash = "sha256:4cd1aa0f43ca76f4a6c6c0292a85f40b35ec2e43e315b59f06e6d32171a953e6", size = 29705, upload_time = "2024-10-08T23:04:11.5Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl", hash = "sha256:28009937d8031054830160fce6d409ed342816b543597cece116d966c6d99e15", size = 22320, upload_time = "2024-10-08T23:04:09.501Z" }, -] - [[package]] name = "jedi" version = "0.19.2" @@ -682,72 +497,12 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload_time = "2025-03-05T20:05:00.369Z" }, ] -[[package]] -name = "joblib" -version = "1.5.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/dc/fe/0f5a938c54105553436dbff7a61dc4fed4b1b2c98852f8833beaf4d5968f/joblib-1.5.1.tar.gz", hash = "sha256:f4f86e351f39fe3d0d32a9f2c3d8af1ee4cec285aafcb27003dda5205576b444", size = 330475, upload_time = "2025-05-23T12:04:37.097Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7d/4f/1195bbac8e0c2acc5f740661631d8d750dc38d4a32b23ee5df3cde6f4e0d/joblib-1.5.1-py3-none-any.whl", hash = "sha256:4719a31f054c7d766948dcd83e9613686b27114f190f717cec7eaa2084f8a74a", size = 307746, upload_time = "2025-05-23T12:04:35.124Z" }, -] - [[package]] name = "jsmin" version = "3.0.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/5e/73/e01e4c5e11ad0494f4407a3f623ad4d87714909f50b17a06ed121034ff6e/jsmin-3.0.1.tar.gz", hash = "sha256:c0959a121ef94542e807a674142606f7e90214a2b3d1eb17300244bbb5cc2bfc", size = 13925, upload_time = "2022-01-16T20:35:59.13Z" } -[[package]] -name = "jsonlines" -version = "4.0.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "attrs" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/35/87/bcda8e46c88d0e34cad2f09ee2d0c7f5957bccdb9791b0b934ec84d84be4/jsonlines-4.0.0.tar.gz", hash = "sha256:0c6d2c09117550c089995247f605ae4cf77dd1533041d366351f6f298822ea74", size = 11359, upload_time = "2023-09-01T12:34:44.187Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f8/62/d9ba6323b9202dd2fe166beab8a86d29465c41a0288cbe229fac60c1ab8d/jsonlines-4.0.0-py3-none-any.whl", hash = "sha256:185b334ff2ca5a91362993f42e83588a360cf95ce4b71a73548502bda52a7c55", size = 8701, upload_time = "2023-09-01T12:34:42.563Z" }, -] - -[[package]] -name = "jsonpath-ng" -version = "1.7.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "ply" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/6d/86/08646239a313f895186ff0a4573452038eed8c86f54380b3ebac34d32fb2/jsonpath-ng-1.7.0.tar.gz", hash = "sha256:f6f5f7fd4e5ff79c785f1573b394043b39849fb2bb47bcead935d12b00beab3c", size = 37838, upload_time = "2024-10-11T15:41:42.404Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/35/5a/73ecb3d82f8615f32ccdadeb9356726d6cae3a4bbc840b437ceb95708063/jsonpath_ng-1.7.0-py3-none-any.whl", hash = "sha256:f3d7f9e848cba1b6da28c55b1c26ff915dc9e0b1ba7e752a53d6da8d5cbd00b6", size = 30105, upload_time = "2024-11-20T17:58:30.418Z" }, -] - -[[package]] -name = "jsonschema" -version = "4.24.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "attrs" }, - { name = "jsonschema-specifications" }, - { name = "referencing" }, - { name = "rpds-py" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/bf/d3/1cf5326b923a53515d8f3a2cd442e6d7e94fcc444716e879ea70a0ce3177/jsonschema-4.24.0.tar.gz", hash = "sha256:0b4e8069eb12aedfa881333004bccaec24ecef5a8a6a4b6df142b2cc9599d196", size = 353480, upload_time = "2025-05-26T18:48:10.459Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a2/3d/023389198f69c722d039351050738d6755376c8fd343e91dc493ea485905/jsonschema-4.24.0-py3-none-any.whl", hash = "sha256:a462455f19f5faf404a7902952b6f0e3ce868f3ee09a359b05eca6673bd8412d", size = 88709, upload_time = "2025-05-26T18:48:08.417Z" }, -] - -[[package]] -name = "jsonschema-specifications" -version = "2025.4.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "referencing" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/bf/ce/46fbd9c8119cfc3581ee5643ea49464d168028cfb5caff5fc0596d0cf914/jsonschema_specifications-2025.4.1.tar.gz", hash = "sha256:630159c9f4dbea161a6a2205c3011cc4f18ff381b189fff48bb39b9bf26ae608", size = 15513, upload_time = "2025-04-23T12:34:07.418Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/01/0e/b27cdbaccf30b890c40ed1da9fd4a3593a5cf94dae54fb34f8a4b74fcd3f/jsonschema_specifications-2025.4.1-py3-none-any.whl", hash = "sha256:4653bffbd6584f7de83a67e0d620ef16900b390ddc7939d56684d6c81e33f1af", size = 18437, upload_time = "2025-04-23T12:34:05.422Z" }, -] - [[package]] name = "jupyter-client" version = "8.6.3" @@ -779,94 +534,15 @@ wheels = [ ] [[package]] -name = "kiwisolver" -version = "1.4.8" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/82/59/7c91426a8ac292e1cdd53a63b6d9439abd573c875c3f92c146767dd33faf/kiwisolver-1.4.8.tar.gz", hash = "sha256:23d5f023bdc8c7e54eb65f03ca5d5bb25b601eac4d7f1a042888a1f45237987e", size = 97538, upload_time = "2024-12-24T18:30:51.519Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fc/aa/cea685c4ab647f349c3bc92d2daf7ae34c8e8cf405a6dcd3a497f58a2ac3/kiwisolver-1.4.8-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d6af5e8815fd02997cb6ad9bbed0ee1e60014438ee1a5c2444c96f87b8843502", size = 124152, upload_time = "2024-12-24T18:29:16.85Z" }, - { url = "https://files.pythonhosted.org/packages/c5/0b/8db6d2e2452d60d5ebc4ce4b204feeb16176a851fd42462f66ade6808084/kiwisolver-1.4.8-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:bade438f86e21d91e0cf5dd7c0ed00cda0f77c8c1616bd83f9fc157fa6760d31", size = 66555, upload_time = "2024-12-24T18:29:19.146Z" }, - { url = "https://files.pythonhosted.org/packages/60/26/d6a0db6785dd35d3ba5bf2b2df0aedc5af089962c6eb2cbf67a15b81369e/kiwisolver-1.4.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b83dc6769ddbc57613280118fb4ce3cd08899cc3369f7d0e0fab518a7cf37fdb", size = 65067, upload_time = "2024-12-24T18:29:20.096Z" }, - { url = "https://files.pythonhosted.org/packages/c9/ed/1d97f7e3561e09757a196231edccc1bcf59d55ddccefa2afc9c615abd8e0/kiwisolver-1.4.8-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:111793b232842991be367ed828076b03d96202c19221b5ebab421ce8bcad016f", size = 1378443, upload_time = "2024-12-24T18:29:22.843Z" }, - { url = "https://files.pythonhosted.org/packages/29/61/39d30b99954e6b46f760e6289c12fede2ab96a254c443639052d1b573fbc/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:257af1622860e51b1a9d0ce387bf5c2c4f36a90594cb9514f55b074bcc787cfc", size = 1472728, upload_time = "2024-12-24T18:29:24.463Z" }, - { url = "https://files.pythonhosted.org/packages/0c/3e/804163b932f7603ef256e4a715e5843a9600802bb23a68b4e08c8c0ff61d/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:69b5637c3f316cab1ec1c9a12b8c5f4750a4c4b71af9157645bf32830e39c03a", size = 1478388, upload_time = "2024-12-24T18:29:25.776Z" }, - { url = "https://files.pythonhosted.org/packages/8a/9e/60eaa75169a154700be74f875a4d9961b11ba048bef315fbe89cb6999056/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:782bb86f245ec18009890e7cb8d13a5ef54dcf2ebe18ed65f795e635a96a1c6a", size = 1413849, upload_time = "2024-12-24T18:29:27.202Z" }, - { url = "https://files.pythonhosted.org/packages/bc/b3/9458adb9472e61a998c8c4d95cfdfec91c73c53a375b30b1428310f923e4/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc978a80a0db3a66d25767b03688f1147a69e6237175c0f4ffffaaedf744055a", size = 1475533, upload_time = "2024-12-24T18:29:28.638Z" }, - { url = "https://files.pythonhosted.org/packages/e4/7a/0a42d9571e35798de80aef4bb43a9b672aa7f8e58643d7bd1950398ffb0a/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:36dbbfd34838500a31f52c9786990d00150860e46cd5041386f217101350f0d3", size = 2268898, upload_time = "2024-12-24T18:29:30.368Z" }, - { url = "https://files.pythonhosted.org/packages/d9/07/1255dc8d80271400126ed8db35a1795b1a2c098ac3a72645075d06fe5c5d/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:eaa973f1e05131de5ff3569bbba7f5fd07ea0595d3870ed4a526d486fe57fa1b", size = 2425605, upload_time = "2024-12-24T18:29:33.151Z" }, - { url = "https://files.pythonhosted.org/packages/84/df/5a3b4cf13780ef6f6942df67b138b03b7e79e9f1f08f57c49957d5867f6e/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:a66f60f8d0c87ab7f59b6fb80e642ebb29fec354a4dfad687ca4092ae69d04f4", size = 2375801, upload_time = "2024-12-24T18:29:34.584Z" }, - { url = "https://files.pythonhosted.org/packages/8f/10/2348d068e8b0f635c8c86892788dac7a6b5c0cb12356620ab575775aad89/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:858416b7fb777a53f0c59ca08190ce24e9abbd3cffa18886a5781b8e3e26f65d", size = 2520077, upload_time = "2024-12-24T18:29:36.138Z" }, - { url = "https://files.pythonhosted.org/packages/32/d8/014b89fee5d4dce157d814303b0fce4d31385a2af4c41fed194b173b81ac/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:085940635c62697391baafaaeabdf3dd7a6c3643577dde337f4d66eba021b2b8", size = 2338410, upload_time = "2024-12-24T18:29:39.991Z" }, - { url = "https://files.pythonhosted.org/packages/bd/72/dfff0cc97f2a0776e1c9eb5bef1ddfd45f46246c6533b0191887a427bca5/kiwisolver-1.4.8-cp312-cp312-win_amd64.whl", hash = "sha256:01c3d31902c7db5fb6182832713d3b4122ad9317c2c5877d0539227d96bb2e50", size = 71853, upload_time = "2024-12-24T18:29:42.006Z" }, - { url = "https://files.pythonhosted.org/packages/dc/85/220d13d914485c0948a00f0b9eb419efaf6da81b7d72e88ce2391f7aed8d/kiwisolver-1.4.8-cp312-cp312-win_arm64.whl", hash = "sha256:a3c44cb68861de93f0c4a8175fbaa691f0aa22550c331fefef02b618a9dcb476", size = 65424, upload_time = "2024-12-24T18:29:44.38Z" }, - { url = "https://files.pythonhosted.org/packages/79/b3/e62464a652f4f8cd9006e13d07abad844a47df1e6537f73ddfbf1bc997ec/kiwisolver-1.4.8-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:1c8ceb754339793c24aee1c9fb2485b5b1f5bb1c2c214ff13368431e51fc9a09", size = 124156, upload_time = "2024-12-24T18:29:45.368Z" }, - { url = "https://files.pythonhosted.org/packages/8d/2d/f13d06998b546a2ad4f48607a146e045bbe48030774de29f90bdc573df15/kiwisolver-1.4.8-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:54a62808ac74b5e55a04a408cda6156f986cefbcf0ada13572696b507cc92fa1", size = 66555, upload_time = "2024-12-24T18:29:46.37Z" }, - { url = "https://files.pythonhosted.org/packages/59/e3/b8bd14b0a54998a9fd1e8da591c60998dc003618cb19a3f94cb233ec1511/kiwisolver-1.4.8-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:68269e60ee4929893aad82666821aaacbd455284124817af45c11e50a4b42e3c", size = 65071, upload_time = "2024-12-24T18:29:47.333Z" }, - { url = "https://files.pythonhosted.org/packages/f0/1c/6c86f6d85ffe4d0ce04228d976f00674f1df5dc893bf2dd4f1928748f187/kiwisolver-1.4.8-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34d142fba9c464bc3bbfeff15c96eab0e7310343d6aefb62a79d51421fcc5f1b", size = 1378053, upload_time = "2024-12-24T18:29:49.636Z" }, - { url = "https://files.pythonhosted.org/packages/4e/b9/1c6e9f6dcb103ac5cf87cb695845f5fa71379021500153566d8a8a9fc291/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ddc373e0eef45b59197de815b1b28ef89ae3955e7722cc9710fb91cd77b7f47", size = 1472278, upload_time = "2024-12-24T18:29:51.164Z" }, - { url = "https://files.pythonhosted.org/packages/ee/81/aca1eb176de671f8bda479b11acdc42c132b61a2ac861c883907dde6debb/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:77e6f57a20b9bd4e1e2cedda4d0b986ebd0216236f0106e55c28aea3d3d69b16", size = 1478139, upload_time = "2024-12-24T18:29:52.594Z" }, - { url = "https://files.pythonhosted.org/packages/49/f4/e081522473671c97b2687d380e9e4c26f748a86363ce5af48b4a28e48d06/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08e77738ed7538f036cd1170cbed942ef749137b1311fa2bbe2a7fda2f6bf3cc", size = 1413517, upload_time = "2024-12-24T18:29:53.941Z" }, - { url = "https://files.pythonhosted.org/packages/8f/e9/6a7d025d8da8c4931522922cd706105aa32b3291d1add8c5427cdcd66e63/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5ce1e481a74b44dd5e92ff03ea0cb371ae7a0268318e202be06c8f04f4f1246", size = 1474952, upload_time = "2024-12-24T18:29:56.523Z" }, - { url = "https://files.pythonhosted.org/packages/82/13/13fa685ae167bee5d94b415991c4fc7bb0a1b6ebea6e753a87044b209678/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:fc2ace710ba7c1dfd1a3b42530b62b9ceed115f19a1656adefce7b1782a37794", size = 2269132, upload_time = "2024-12-24T18:29:57.989Z" }, - { url = "https://files.pythonhosted.org/packages/ef/92/bb7c9395489b99a6cb41d502d3686bac692586db2045adc19e45ee64ed23/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:3452046c37c7692bd52b0e752b87954ef86ee2224e624ef7ce6cb21e8c41cc1b", size = 2425997, upload_time = "2024-12-24T18:29:59.393Z" }, - { url = "https://files.pythonhosted.org/packages/ed/12/87f0e9271e2b63d35d0d8524954145837dd1a6c15b62a2d8c1ebe0f182b4/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:7e9a60b50fe8b2ec6f448fe8d81b07e40141bfced7f896309df271a0b92f80f3", size = 2376060, upload_time = "2024-12-24T18:30:01.338Z" }, - { url = "https://files.pythonhosted.org/packages/02/6e/c8af39288edbce8bf0fa35dee427b082758a4b71e9c91ef18fa667782138/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:918139571133f366e8362fa4a297aeba86c7816b7ecf0bc79168080e2bd79957", size = 2520471, upload_time = "2024-12-24T18:30:04.574Z" }, - { url = "https://files.pythonhosted.org/packages/13/78/df381bc7b26e535c91469f77f16adcd073beb3e2dd25042efd064af82323/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e063ef9f89885a1d68dd8b2e18f5ead48653176d10a0e324e3b0030e3a69adeb", size = 2338793, upload_time = "2024-12-24T18:30:06.25Z" }, - { url = "https://files.pythonhosted.org/packages/d0/dc/c1abe38c37c071d0fc71c9a474fd0b9ede05d42f5a458d584619cfd2371a/kiwisolver-1.4.8-cp313-cp313-win_amd64.whl", hash = "sha256:a17b7c4f5b2c51bb68ed379defd608a03954a1845dfed7cc0117f1cc8a9b7fd2", size = 71855, upload_time = "2024-12-24T18:30:07.535Z" }, - { url = "https://files.pythonhosted.org/packages/a0/b6/21529d595b126ac298fdd90b705d87d4c5693de60023e0efcb4f387ed99e/kiwisolver-1.4.8-cp313-cp313-win_arm64.whl", hash = "sha256:3cd3bc628b25f74aedc6d374d5babf0166a92ff1317f46267f12d2ed54bc1d30", size = 65430, upload_time = "2024-12-24T18:30:08.504Z" }, - { url = "https://files.pythonhosted.org/packages/34/bd/b89380b7298e3af9b39f49334e3e2a4af0e04819789f04b43d560516c0c8/kiwisolver-1.4.8-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:370fd2df41660ed4e26b8c9d6bbcad668fbe2560462cba151a721d49e5b6628c", size = 126294, upload_time = "2024-12-24T18:30:09.508Z" }, - { url = "https://files.pythonhosted.org/packages/83/41/5857dc72e5e4148eaac5aa76e0703e594e4465f8ab7ec0fc60e3a9bb8fea/kiwisolver-1.4.8-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:84a2f830d42707de1d191b9490ac186bf7997a9495d4e9072210a1296345f7dc", size = 67736, upload_time = "2024-12-24T18:30:11.039Z" }, - { url = "https://files.pythonhosted.org/packages/e1/d1/be059b8db56ac270489fb0b3297fd1e53d195ba76e9bbb30e5401fa6b759/kiwisolver-1.4.8-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:7a3ad337add5148cf51ce0b55642dc551c0b9d6248458a757f98796ca7348712", size = 66194, upload_time = "2024-12-24T18:30:14.886Z" }, - { url = "https://files.pythonhosted.org/packages/e1/83/4b73975f149819eb7dcf9299ed467eba068ecb16439a98990dcb12e63fdd/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7506488470f41169b86d8c9aeff587293f530a23a23a49d6bc64dab66bedc71e", size = 1465942, upload_time = "2024-12-24T18:30:18.927Z" }, - { url = "https://files.pythonhosted.org/packages/c7/2c/30a5cdde5102958e602c07466bce058b9d7cb48734aa7a4327261ac8e002/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f0121b07b356a22fb0414cec4666bbe36fd6d0d759db3d37228f496ed67c880", size = 1595341, upload_time = "2024-12-24T18:30:22.102Z" }, - { url = "https://files.pythonhosted.org/packages/ff/9b/1e71db1c000385aa069704f5990574b8244cce854ecd83119c19e83c9586/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d6d6bd87df62c27d4185de7c511c6248040afae67028a8a22012b010bc7ad062", size = 1598455, upload_time = "2024-12-24T18:30:24.947Z" }, - { url = "https://files.pythonhosted.org/packages/85/92/c8fec52ddf06231b31cbb779af77e99b8253cd96bd135250b9498144c78b/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:291331973c64bb9cce50bbe871fb2e675c4331dab4f31abe89f175ad7679a4d7", size = 1522138, upload_time = "2024-12-24T18:30:26.286Z" }, - { url = "https://files.pythonhosted.org/packages/0b/51/9eb7e2cd07a15d8bdd976f6190c0164f92ce1904e5c0c79198c4972926b7/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:893f5525bb92d3d735878ec00f781b2de998333659507d29ea4466208df37bed", size = 1582857, upload_time = "2024-12-24T18:30:28.86Z" }, - { url = "https://files.pythonhosted.org/packages/0f/95/c5a00387a5405e68ba32cc64af65ce881a39b98d73cc394b24143bebc5b8/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b47a465040146981dc9db8647981b8cb96366fbc8d452b031e4f8fdffec3f26d", size = 2293129, upload_time = "2024-12-24T18:30:30.34Z" }, - { url = "https://files.pythonhosted.org/packages/44/83/eeb7af7d706b8347548313fa3a3a15931f404533cc54fe01f39e830dd231/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:99cea8b9dd34ff80c521aef46a1dddb0dcc0283cf18bde6d756f1e6f31772165", size = 2421538, upload_time = "2024-12-24T18:30:33.334Z" }, - { url = "https://files.pythonhosted.org/packages/05/f9/27e94c1b3eb29e6933b6986ffc5fa1177d2cd1f0c8efc5f02c91c9ac61de/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:151dffc4865e5fe6dafce5480fab84f950d14566c480c08a53c663a0020504b6", size = 2390661, upload_time = "2024-12-24T18:30:34.939Z" }, - { url = "https://files.pythonhosted.org/packages/d9/d4/3c9735faa36ac591a4afcc2980d2691000506050b7a7e80bcfe44048daa7/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:577facaa411c10421314598b50413aa1ebcf5126f704f1e5d72d7e4e9f020d90", size = 2546710, upload_time = "2024-12-24T18:30:37.281Z" }, - { url = "https://files.pythonhosted.org/packages/4c/fa/be89a49c640930180657482a74970cdcf6f7072c8d2471e1babe17a222dc/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:be4816dc51c8a471749d664161b434912eee82f2ea66bd7628bd14583a833e85", size = 2349213, upload_time = "2024-12-24T18:30:40.019Z" }, -] - -[[package]] -name = "lark" -version = "1.2.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/af/60/bc7622aefb2aee1c0b4ba23c1446d3e30225c8770b38d7aedbfb65ca9d5a/lark-1.2.2.tar.gz", hash = "sha256:ca807d0162cd16cef15a8feecb862d7319e7a09bdb13aef927968e45040fed80", size = 252132, upload_time = "2024-08-13T19:49:00.652Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2d/00/d90b10b962b4277f5e64a78b6609968859ff86889f5b898c1a778c06ec00/lark-1.2.2-py3-none-any.whl", hash = "sha256:c2276486b02f0f1b90be155f2c8ba4a8e194d42775786db622faccd652d8e80c", size = 111036, upload_time = "2024-08-13T19:48:58.603Z" }, -] - -[[package]] -name = "libhxl" -version = "5.2.2" +name = "license-expression" +version = "30.4.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "jsonpath-ng" }, - { name = "ply" }, - { name = "python-dateutil" }, - { name = "python-io-wrapper" }, - { name = "requests" }, - { name = "structlog" }, - { name = "unidecode" }, - { name = "urllib3" }, - { name = "wheel" }, - { name = "xlrd3" }, + { name = "boolean-py" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/63/ad/c1dafb7c59e685692a2eeafce83245b7c5f46e05881fdb77a0cbb7c19c74/libhxl-5.2.2.tar.gz", hash = "sha256:3a74d9f23561bfcefd20e5229c574bc68dfc114fdb6ba1ba684d9e9d7ea52483", size = 127736, upload_time = "2024-10-25T09:19:11.202Z" } - -[[package]] -name = "loguru" -version = "0.7.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, - { name = "win32-setctime", marker = "sys_platform == 'win32'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/3a/05/a1dae3dffd1116099471c643b8924f5aa6524411dc6c63fdae648c4f1aca/loguru-0.7.3.tar.gz", hash = "sha256:19480589e77d47b8d85b2c827ad95d49bf31b0dcde16593892eb51dd18706eb6", size = 63559, upload_time = "2024-12-06T11:20:56.608Z" } +sdist = { url = "https://files.pythonhosted.org/packages/40/71/d89bb0e71b1415453980fd32315f2a037aad9f7f70f695c7cec7035feb13/license_expression-30.4.4.tar.gz", hash = "sha256:73448f0aacd8d0808895bdc4b2c8e01a8d67646e4188f887375398c761f340fd", size = 186402, upload_time = "2025-07-22T11:13:32.17Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl", hash = "sha256:31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c", size = 61595, upload_time = "2024-12-06T11:20:54.538Z" }, + { url = "https://files.pythonhosted.org/packages/af/40/791891d4c0c4dab4c5e187c17261cedc26285fd41541577f900470a45a4d/license_expression-30.4.4-py3-none-any.whl", hash = "sha256:421788fdcadb41f049d2dc934ce666626265aeccefddd25e162a26f23bcbf8a4", size = 120615, upload_time = "2025-07-22T11:13:31.217Z" }, ] [[package]] @@ -878,27 +554,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/96/2b/34cc11786bc00d0f04d0f5fdc3a2b1ae0b6239eef72d3d345805f9ad92a1/markdown-3.8.2-py3-none-any.whl", hash = "sha256:5c83764dbd4e00bdd94d85a19b8d55ccca20fe35b2e678a1422b380324dd5f24", size = 106827, upload_time = "2025-06-19T17:12:42.994Z" }, ] -[[package]] -name = "markdown-it-py" -version = "3.0.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "mdurl" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596, upload_time = "2023-06-03T06:41:14.443Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528, upload_time = "2023-06-03T06:41:11.019Z" }, -] - -[[package]] -name = "marko" -version = "2.1.4" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/72/dc/c8cadbd83de1b38d95a48568b445a5553005ebdd32e00a333ca940113db4/marko-2.1.4.tar.gz", hash = "sha256:dd7d66f3706732bf8f994790e674649a4fd0a6c67f16b80246f30de8e16a1eac", size = 142795, upload_time = "2025-06-13T03:25:50.857Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c3/66/49e3691d14898fb6e34ccb337c7677dfb7e18269ed170f12e4b85315eae6/marko-2.1.4-py3-none-any.whl", hash = "sha256:81c2b9f570ca485bc356678d9ba1a1b3eb78b4a315d01f3ded25442fdc796990", size = 42186, upload_time = "2025-06-13T03:25:49.858Z" }, -] - [[package]] name = "markupsafe" version = "3.0.2" @@ -937,43 +592,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739, upload_time = "2024-10-18T15:21:42.784Z" }, ] -[[package]] -name = "matplotlib" -version = "3.10.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "contourpy" }, - { name = "cycler" }, - { name = "fonttools" }, - { name = "kiwisolver" }, - { name = "numpy" }, - { name = "packaging" }, - { name = "pillow" }, - { name = "pyparsing" }, - { name = "python-dateutil" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/26/91/d49359a21893183ed2a5b6c76bec40e0b1dcbf8ca148f864d134897cfc75/matplotlib-3.10.3.tar.gz", hash = "sha256:2f82d2c5bb7ae93aaaa4cd42aca65d76ce6376f83304fa3a630b569aca274df0", size = 34799811, upload_time = "2025-05-08T19:10:54.39Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/eb/43/6b80eb47d1071f234ef0c96ca370c2ca621f91c12045f1401b5c9b28a639/matplotlib-3.10.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0ab1affc11d1f495ab9e6362b8174a25afc19c081ba5b0775ef00533a4236eea", size = 8179689, upload_time = "2025-05-08T19:10:07.602Z" }, - { url = "https://files.pythonhosted.org/packages/0f/70/d61a591958325c357204870b5e7b164f93f2a8cca1dc6ce940f563909a13/matplotlib-3.10.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2a818d8bdcafa7ed2eed74487fdb071c09c1ae24152d403952adad11fa3c65b4", size = 8050466, upload_time = "2025-05-08T19:10:09.383Z" }, - { url = "https://files.pythonhosted.org/packages/e7/75/70c9d2306203148cc7902a961240c5927dd8728afedf35e6a77e105a2985/matplotlib-3.10.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:748ebc3470c253e770b17d8b0557f0aa85cf8c63fd52f1a61af5b27ec0b7ffee", size = 8456252, upload_time = "2025-05-08T19:10:11.958Z" }, - { url = "https://files.pythonhosted.org/packages/c4/91/ba0ae1ff4b3f30972ad01cd4a8029e70a0ec3b8ea5be04764b128b66f763/matplotlib-3.10.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ed70453fd99733293ace1aec568255bc51c6361cb0da94fa5ebf0649fdb2150a", size = 8601321, upload_time = "2025-05-08T19:10:14.47Z" }, - { url = "https://files.pythonhosted.org/packages/d2/88/d636041eb54a84b889e11872d91f7cbf036b3b0e194a70fa064eb8b04f7a/matplotlib-3.10.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dbed9917b44070e55640bd13419de83b4c918e52d97561544814ba463811cbc7", size = 9406972, upload_time = "2025-05-08T19:10:16.569Z" }, - { url = "https://files.pythonhosted.org/packages/b1/79/0d1c165eac44405a86478082e225fce87874f7198300bbebc55faaf6d28d/matplotlib-3.10.3-cp312-cp312-win_amd64.whl", hash = "sha256:cf37d8c6ef1a48829443e8ba5227b44236d7fcaf7647caa3178a4ff9f7a5be05", size = 8067954, upload_time = "2025-05-08T19:10:18.663Z" }, - { url = "https://files.pythonhosted.org/packages/3b/c1/23cfb566a74c696a3b338d8955c549900d18fe2b898b6e94d682ca21e7c2/matplotlib-3.10.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9f2efccc8dcf2b86fc4ee849eea5dcaecedd0773b30f47980dc0cbeabf26ec84", size = 8180318, upload_time = "2025-05-08T19:10:20.426Z" }, - { url = "https://files.pythonhosted.org/packages/6c/0c/02f1c3b66b30da9ee343c343acbb6251bef5b01d34fad732446eaadcd108/matplotlib-3.10.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3ddbba06a6c126e3301c3d272a99dcbe7f6c24c14024e80307ff03791a5f294e", size = 8051132, upload_time = "2025-05-08T19:10:22.569Z" }, - { url = "https://files.pythonhosted.org/packages/b4/ab/8db1a5ac9b3a7352fb914133001dae889f9fcecb3146541be46bed41339c/matplotlib-3.10.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:748302b33ae9326995b238f606e9ed840bf5886ebafcb233775d946aa8107a15", size = 8457633, upload_time = "2025-05-08T19:10:24.749Z" }, - { url = "https://files.pythonhosted.org/packages/f5/64/41c4367bcaecbc03ef0d2a3ecee58a7065d0a36ae1aa817fe573a2da66d4/matplotlib-3.10.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a80fcccbef63302c0efd78042ea3c2436104c5b1a4d3ae20f864593696364ac7", size = 8601031, upload_time = "2025-05-08T19:10:27.03Z" }, - { url = "https://files.pythonhosted.org/packages/12/6f/6cc79e9e5ab89d13ed64da28898e40fe5b105a9ab9c98f83abd24e46d7d7/matplotlib-3.10.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:55e46cbfe1f8586adb34f7587c3e4f7dedc59d5226719faf6cb54fc24f2fd52d", size = 9406988, upload_time = "2025-05-08T19:10:29.056Z" }, - { url = "https://files.pythonhosted.org/packages/b1/0f/eed564407bd4d935ffabf561ed31099ed609e19287409a27b6d336848653/matplotlib-3.10.3-cp313-cp313-win_amd64.whl", hash = "sha256:151d89cb8d33cb23345cd12490c76fd5d18a56581a16d950b48c6ff19bb2ab93", size = 8068034, upload_time = "2025-05-08T19:10:31.221Z" }, - { url = "https://files.pythonhosted.org/packages/3e/e5/2f14791ff69b12b09e9975e1d116d9578ac684460860ce542c2588cb7a1c/matplotlib-3.10.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:c26dd9834e74d164d06433dc7be5d75a1e9890b926b3e57e74fa446e1a62c3e2", size = 8218223, upload_time = "2025-05-08T19:10:33.114Z" }, - { url = "https://files.pythonhosted.org/packages/5c/08/30a94afd828b6e02d0a52cae4a29d6e9ccfcf4c8b56cc28b021d3588873e/matplotlib-3.10.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:24853dad5b8c84c8c2390fc31ce4858b6df504156893292ce8092d190ef8151d", size = 8094985, upload_time = "2025-05-08T19:10:35.337Z" }, - { url = "https://files.pythonhosted.org/packages/89/44/f3bc6b53066c889d7a1a3ea8094c13af6a667c5ca6220ec60ecceec2dabe/matplotlib-3.10.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68f7878214d369d7d4215e2a9075fef743be38fa401d32e6020bab2dfabaa566", size = 8483109, upload_time = "2025-05-08T19:10:37.611Z" }, - { url = "https://files.pythonhosted.org/packages/ba/c7/473bc559beec08ebee9f86ca77a844b65747e1a6c2691e8c92e40b9f42a8/matplotlib-3.10.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6929fc618cb6db9cb75086f73b3219bbb25920cb24cee2ea7a12b04971a4158", size = 8618082, upload_time = "2025-05-08T19:10:39.892Z" }, - { url = "https://files.pythonhosted.org/packages/d8/e9/6ce8edd264c8819e37bbed8172e0ccdc7107fe86999b76ab5752276357a4/matplotlib-3.10.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6c7818292a5cc372a2dc4c795e5c356942eb8350b98ef913f7fda51fe175ac5d", size = 9413699, upload_time = "2025-05-08T19:10:42.376Z" }, - { url = "https://files.pythonhosted.org/packages/1b/92/9a45c91089c3cf690b5badd4be81e392ff086ccca8a1d4e3a08463d8a966/matplotlib-3.10.3-cp313-cp313t-win_amd64.whl", hash = "sha256:4f23ffe95c5667ef8a2b56eea9b53db7f43910fa4a2d5472ae0f72b64deab4d5", size = 8139044, upload_time = "2025-05-08T19:10:44.551Z" }, -] - [[package]] name = "matplotlib-inline" version = "0.1.7" @@ -986,15 +604,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/8f/8e/9ad090d3553c280a8060fbf6e24dc1c0c29704ee7d1c372f0c174aa59285/matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca", size = 9899, upload_time = "2024-04-15T13:44:43.265Z" }, ] -[[package]] -name = "mdurl" -version = "0.1.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload_time = "2022-08-14T12:40:10.846Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload_time = "2022-08-14T12:40:09.779Z" }, -] - [[package]] name = "mergedeep" version = "1.3.4" @@ -1266,34 +875,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d4/ca/af82bf0fad4c3e573c6930ed743b5308492ff19917c7caaf2f9b6f9e2e98/numpy-2.3.1-cp313-cp313t-win_arm64.whl", hash = "sha256:eccb9a159db9aed60800187bc47a6d3451553f0e1b08b068d8b277ddfbb9b244", size = 10260376, upload_time = "2025-06-21T12:24:56.884Z" }, ] -[[package]] -name = "oda-reader" -version = "1.2.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "joblib" }, - { name = "openpyxl" }, - { name = "pandas" }, - { name = "pyarrow" }, - { name = "requests" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/1a/d1/5c0bb2a714ebea7df131b8e87010eab39d0df75878f6785f2a214ff66bb2/oda_reader-1.2.2.tar.gz", hash = "sha256:55be081e1744e75184eca3d09e794fad71958201d08b48fb497aac97a95f3685", size = 35630, upload_time = "2025-06-16T16:15:05.49Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d8/ec/59338ec9108848dc53f50e7381b9817595bf98f414f4a732100a06828a3b/oda_reader-1.2.2-py3-none-any.whl", hash = "sha256:7f7b854ab1e9bc2cf64b6c63bd56a2ac64cb90ec054518fd01b741fd518cf007", size = 45314, upload_time = "2025-06-16T16:15:04.328Z" }, -] - -[[package]] -name = "openpyxl" -version = "3.1.5" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "et-xmlfile" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/3d/f9/88d94a75de065ea32619465d2f77b29a0469500e99012523b91cc4141cd1/openpyxl-3.1.5.tar.gz", hash = "sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050", size = 186464, upload_time = "2024-06-28T14:03:44.161Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl", hash = "sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2", size = 250910, upload_time = "2024-06-28T14:03:41.161Z" }, -] - [[package]] name = "packaging" version = "25.0" @@ -1364,12 +945,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", size = 31191, upload_time = "2023-12-10T22:30:43.14Z" }, ] -[[package]] -name = "petl" -version = "1.7.16" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/99/28/ce7321fbd3b981fd9c212adf7455e0e4e42babebd83b92e24f8265d13dd3/petl-1.7.16.tar.gz", hash = "sha256:9c2fea64d859da45e120fd86d471e5387396cc45d5d4986efa79679f18eb8752", size = 420780, upload_time = "2025-04-04T23:54:50.921Z" } - [[package]] name = "pexpect" version = "4.9.0" @@ -1382,87 +957,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772, upload_time = "2023-11-25T06:56:14.81Z" }, ] -[[package]] -name = "pillow" -version = "11.3.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f3/0d/d0d6dea55cd152ce3d6767bb38a8fc10e33796ba4ba210cbab9354b6d238/pillow-11.3.0.tar.gz", hash = "sha256:3828ee7586cd0b2091b6209e5ad53e20d0649bbe87164a459d0676e035e8f523", size = 47113069, upload_time = "2025-07-01T09:16:30.666Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/40/fe/1bc9b3ee13f68487a99ac9529968035cca2f0a51ec36892060edcc51d06a/pillow-11.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fdae223722da47b024b867c1ea0be64e0df702c5e0a60e27daad39bf960dd1e4", size = 5278800, upload_time = "2025-07-01T09:14:17.648Z" }, - { url = "https://files.pythonhosted.org/packages/2c/32/7e2ac19b5713657384cec55f89065fb306b06af008cfd87e572035b27119/pillow-11.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:921bd305b10e82b4d1f5e802b6850677f965d8394203d182f078873851dada69", size = 4686296, upload_time = "2025-07-01T09:14:19.828Z" }, - { url = "https://files.pythonhosted.org/packages/8e/1e/b9e12bbe6e4c2220effebc09ea0923a07a6da1e1f1bfbc8d7d29a01ce32b/pillow-11.3.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:eb76541cba2f958032d79d143b98a3a6b3ea87f0959bbe256c0b5e416599fd5d", size = 5871726, upload_time = "2025-07-03T13:10:04.448Z" }, - { url = "https://files.pythonhosted.org/packages/8d/33/e9200d2bd7ba00dc3ddb78df1198a6e80d7669cce6c2bdbeb2530a74ec58/pillow-11.3.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:67172f2944ebba3d4a7b54f2e95c786a3a50c21b88456329314caaa28cda70f6", size = 7644652, upload_time = "2025-07-03T13:10:10.391Z" }, - { url = "https://files.pythonhosted.org/packages/41/f1/6f2427a26fc683e00d985bc391bdd76d8dd4e92fac33d841127eb8fb2313/pillow-11.3.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97f07ed9f56a3b9b5f49d3661dc9607484e85c67e27f3e8be2c7d28ca032fec7", size = 5977787, upload_time = "2025-07-01T09:14:21.63Z" }, - { url = "https://files.pythonhosted.org/packages/e4/c9/06dd4a38974e24f932ff5f98ea3c546ce3f8c995d3f0985f8e5ba48bba19/pillow-11.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:676b2815362456b5b3216b4fd5bd89d362100dc6f4945154ff172e206a22c024", size = 6645236, upload_time = "2025-07-01T09:14:23.321Z" }, - { url = "https://files.pythonhosted.org/packages/40/e7/848f69fb79843b3d91241bad658e9c14f39a32f71a301bcd1d139416d1be/pillow-11.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3e184b2f26ff146363dd07bde8b711833d7b0202e27d13540bfe2e35a323a809", size = 6086950, upload_time = "2025-07-01T09:14:25.237Z" }, - { url = "https://files.pythonhosted.org/packages/0b/1a/7cff92e695a2a29ac1958c2a0fe4c0b2393b60aac13b04a4fe2735cad52d/pillow-11.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6be31e3fc9a621e071bc17bb7de63b85cbe0bfae91bb0363c893cbe67247780d", size = 6723358, upload_time = "2025-07-01T09:14:27.053Z" }, - { url = "https://files.pythonhosted.org/packages/26/7d/73699ad77895f69edff76b0f332acc3d497f22f5d75e5360f78cbcaff248/pillow-11.3.0-cp312-cp312-win32.whl", hash = "sha256:7b161756381f0918e05e7cb8a371fff367e807770f8fe92ecb20d905d0e1c149", size = 6275079, upload_time = "2025-07-01T09:14:30.104Z" }, - { url = "https://files.pythonhosted.org/packages/8c/ce/e7dfc873bdd9828f3b6e5c2bbb74e47a98ec23cc5c74fc4e54462f0d9204/pillow-11.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:a6444696fce635783440b7f7a9fc24b3ad10a9ea3f0ab66c5905be1c19ccf17d", size = 6986324, upload_time = "2025-07-01T09:14:31.899Z" }, - { url = "https://files.pythonhosted.org/packages/16/8f/b13447d1bf0b1f7467ce7d86f6e6edf66c0ad7cf44cf5c87a37f9bed9936/pillow-11.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:2aceea54f957dd4448264f9bf40875da0415c83eb85f55069d89c0ed436e3542", size = 2423067, upload_time = "2025-07-01T09:14:33.709Z" }, - { url = "https://files.pythonhosted.org/packages/1e/93/0952f2ed8db3a5a4c7a11f91965d6184ebc8cd7cbb7941a260d5f018cd2d/pillow-11.3.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:1c627742b539bba4309df89171356fcb3cc5a9178355b2727d1b74a6cf155fbd", size = 2128328, upload_time = "2025-07-01T09:14:35.276Z" }, - { url = "https://files.pythonhosted.org/packages/4b/e8/100c3d114b1a0bf4042f27e0f87d2f25e857e838034e98ca98fe7b8c0a9c/pillow-11.3.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:30b7c02f3899d10f13d7a48163c8969e4e653f8b43416d23d13d1bbfdc93b9f8", size = 2170652, upload_time = "2025-07-01T09:14:37.203Z" }, - { url = "https://files.pythonhosted.org/packages/aa/86/3f758a28a6e381758545f7cdb4942e1cb79abd271bea932998fc0db93cb6/pillow-11.3.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:7859a4cc7c9295f5838015d8cc0a9c215b77e43d07a25e460f35cf516df8626f", size = 2227443, upload_time = "2025-07-01T09:14:39.344Z" }, - { url = "https://files.pythonhosted.org/packages/01/f4/91d5b3ffa718df2f53b0dc109877993e511f4fd055d7e9508682e8aba092/pillow-11.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ec1ee50470b0d050984394423d96325b744d55c701a439d2bd66089bff963d3c", size = 5278474, upload_time = "2025-07-01T09:14:41.843Z" }, - { url = "https://files.pythonhosted.org/packages/f9/0e/37d7d3eca6c879fbd9dba21268427dffda1ab00d4eb05b32923d4fbe3b12/pillow-11.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7db51d222548ccfd274e4572fdbf3e810a5e66b00608862f947b163e613b67dd", size = 4686038, upload_time = "2025-07-01T09:14:44.008Z" }, - { url = "https://files.pythonhosted.org/packages/ff/b0/3426e5c7f6565e752d81221af9d3676fdbb4f352317ceafd42899aaf5d8a/pillow-11.3.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2d6fcc902a24ac74495df63faad1884282239265c6839a0a6416d33faedfae7e", size = 5864407, upload_time = "2025-07-03T13:10:15.628Z" }, - { url = "https://files.pythonhosted.org/packages/fc/c1/c6c423134229f2a221ee53f838d4be9d82bab86f7e2f8e75e47b6bf6cd77/pillow-11.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f0f5d8f4a08090c6d6d578351a2b91acf519a54986c055af27e7a93feae6d3f1", size = 7639094, upload_time = "2025-07-03T13:10:21.857Z" }, - { url = "https://files.pythonhosted.org/packages/ba/c9/09e6746630fe6372c67c648ff9deae52a2bc20897d51fa293571977ceb5d/pillow-11.3.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c37d8ba9411d6003bba9e518db0db0c58a680ab9fe5179f040b0463644bc9805", size = 5973503, upload_time = "2025-07-01T09:14:45.698Z" }, - { url = "https://files.pythonhosted.org/packages/d5/1c/a2a29649c0b1983d3ef57ee87a66487fdeb45132df66ab30dd37f7dbe162/pillow-11.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:13f87d581e71d9189ab21fe0efb5a23e9f28552d5be6979e84001d3b8505abe8", size = 6642574, upload_time = "2025-07-01T09:14:47.415Z" }, - { url = "https://files.pythonhosted.org/packages/36/de/d5cc31cc4b055b6c6fd990e3e7f0f8aaf36229a2698501bcb0cdf67c7146/pillow-11.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:023f6d2d11784a465f09fd09a34b150ea4672e85fb3d05931d89f373ab14abb2", size = 6084060, upload_time = "2025-07-01T09:14:49.636Z" }, - { url = "https://files.pythonhosted.org/packages/d5/ea/502d938cbaeec836ac28a9b730193716f0114c41325db428e6b280513f09/pillow-11.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:45dfc51ac5975b938e9809451c51734124e73b04d0f0ac621649821a63852e7b", size = 6721407, upload_time = "2025-07-01T09:14:51.962Z" }, - { url = "https://files.pythonhosted.org/packages/45/9c/9c5e2a73f125f6cbc59cc7087c8f2d649a7ae453f83bd0362ff7c9e2aee2/pillow-11.3.0-cp313-cp313-win32.whl", hash = "sha256:a4d336baed65d50d37b88ca5b60c0fa9d81e3a87d4a7930d3880d1624d5b31f3", size = 6273841, upload_time = "2025-07-01T09:14:54.142Z" }, - { url = "https://files.pythonhosted.org/packages/23/85/397c73524e0cd212067e0c969aa245b01d50183439550d24d9f55781b776/pillow-11.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:0bce5c4fd0921f99d2e858dc4d4d64193407e1b99478bc5cacecba2311abde51", size = 6978450, upload_time = "2025-07-01T09:14:56.436Z" }, - { url = "https://files.pythonhosted.org/packages/17/d2/622f4547f69cd173955194b78e4d19ca4935a1b0f03a302d655c9f6aae65/pillow-11.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:1904e1264881f682f02b7f8167935cce37bc97db457f8e7849dc3a6a52b99580", size = 2423055, upload_time = "2025-07-01T09:14:58.072Z" }, - { url = "https://files.pythonhosted.org/packages/dd/80/a8a2ac21dda2e82480852978416cfacd439a4b490a501a288ecf4fe2532d/pillow-11.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:4c834a3921375c48ee6b9624061076bc0a32a60b5532b322cc0ea64e639dd50e", size = 5281110, upload_time = "2025-07-01T09:14:59.79Z" }, - { url = "https://files.pythonhosted.org/packages/44/d6/b79754ca790f315918732e18f82a8146d33bcd7f4494380457ea89eb883d/pillow-11.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5e05688ccef30ea69b9317a9ead994b93975104a677a36a8ed8106be9260aa6d", size = 4689547, upload_time = "2025-07-01T09:15:01.648Z" }, - { url = "https://files.pythonhosted.org/packages/49/20/716b8717d331150cb00f7fdd78169c01e8e0c219732a78b0e59b6bdb2fd6/pillow-11.3.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1019b04af07fc0163e2810167918cb5add8d74674b6267616021ab558dc98ced", size = 5901554, upload_time = "2025-07-03T13:10:27.018Z" }, - { url = "https://files.pythonhosted.org/packages/74/cf/a9f3a2514a65bb071075063a96f0a5cf949c2f2fce683c15ccc83b1c1cab/pillow-11.3.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f944255db153ebb2b19c51fe85dd99ef0ce494123f21b9db4877ffdfc5590c7c", size = 7669132, upload_time = "2025-07-03T13:10:33.01Z" }, - { url = "https://files.pythonhosted.org/packages/98/3c/da78805cbdbee9cb43efe8261dd7cc0b4b93f2ac79b676c03159e9db2187/pillow-11.3.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1f85acb69adf2aaee8b7da124efebbdb959a104db34d3a2cb0f3793dbae422a8", size = 6005001, upload_time = "2025-07-01T09:15:03.365Z" }, - { url = "https://files.pythonhosted.org/packages/6c/fa/ce044b91faecf30e635321351bba32bab5a7e034c60187fe9698191aef4f/pillow-11.3.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:05f6ecbeff5005399bb48d198f098a9b4b6bdf27b8487c7f38ca16eeb070cd59", size = 6668814, upload_time = "2025-07-01T09:15:05.655Z" }, - { url = "https://files.pythonhosted.org/packages/7b/51/90f9291406d09bf93686434f9183aba27b831c10c87746ff49f127ee80cb/pillow-11.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a7bc6e6fd0395bc052f16b1a8670859964dbd7003bd0af2ff08342eb6e442cfe", size = 6113124, upload_time = "2025-07-01T09:15:07.358Z" }, - { url = "https://files.pythonhosted.org/packages/cd/5a/6fec59b1dfb619234f7636d4157d11fb4e196caeee220232a8d2ec48488d/pillow-11.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:83e1b0161c9d148125083a35c1c5a89db5b7054834fd4387499e06552035236c", size = 6747186, upload_time = "2025-07-01T09:15:09.317Z" }, - { url = "https://files.pythonhosted.org/packages/49/6b/00187a044f98255225f172de653941e61da37104a9ea60e4f6887717e2b5/pillow-11.3.0-cp313-cp313t-win32.whl", hash = "sha256:2a3117c06b8fb646639dce83694f2f9eac405472713fcb1ae887469c0d4f6788", size = 6277546, upload_time = "2025-07-01T09:15:11.311Z" }, - { url = "https://files.pythonhosted.org/packages/e8/5c/6caaba7e261c0d75bab23be79f1d06b5ad2a2ae49f028ccec801b0e853d6/pillow-11.3.0-cp313-cp313t-win_amd64.whl", hash = "sha256:857844335c95bea93fb39e0fa2726b4d9d758850b34075a7e3ff4f4fa3aa3b31", size = 6985102, upload_time = "2025-07-01T09:15:13.164Z" }, - { url = "https://files.pythonhosted.org/packages/f3/7e/b623008460c09a0cb38263c93b828c666493caee2eb34ff67f778b87e58c/pillow-11.3.0-cp313-cp313t-win_arm64.whl", hash = "sha256:8797edc41f3e8536ae4b10897ee2f637235c94f27404cac7297f7b607dd0716e", size = 2424803, upload_time = "2025-07-01T09:15:15.695Z" }, - { url = "https://files.pythonhosted.org/packages/73/f4/04905af42837292ed86cb1b1dabe03dce1edc008ef14c473c5c7e1443c5d/pillow-11.3.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:d9da3df5f9ea2a89b81bb6087177fb1f4d1c7146d583a3fe5c672c0d94e55e12", size = 5278520, upload_time = "2025-07-01T09:15:17.429Z" }, - { url = "https://files.pythonhosted.org/packages/41/b0/33d79e377a336247df6348a54e6d2a2b85d644ca202555e3faa0cf811ecc/pillow-11.3.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0b275ff9b04df7b640c59ec5a3cb113eefd3795a8df80bac69646ef699c6981a", size = 4686116, upload_time = "2025-07-01T09:15:19.423Z" }, - { url = "https://files.pythonhosted.org/packages/49/2d/ed8bc0ab219ae8768f529597d9509d184fe8a6c4741a6864fea334d25f3f/pillow-11.3.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0743841cabd3dba6a83f38a92672cccbd69af56e3e91777b0ee7f4dba4385632", size = 5864597, upload_time = "2025-07-03T13:10:38.404Z" }, - { url = "https://files.pythonhosted.org/packages/b5/3d/b932bb4225c80b58dfadaca9d42d08d0b7064d2d1791b6a237f87f661834/pillow-11.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2465a69cf967b8b49ee1b96d76718cd98c4e925414ead59fdf75cf0fd07df673", size = 7638246, upload_time = "2025-07-03T13:10:44.987Z" }, - { url = "https://files.pythonhosted.org/packages/09/b5/0487044b7c096f1b48f0d7ad416472c02e0e4bf6919541b111efd3cae690/pillow-11.3.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:41742638139424703b4d01665b807c6468e23e699e8e90cffefe291c5832b027", size = 5973336, upload_time = "2025-07-01T09:15:21.237Z" }, - { url = "https://files.pythonhosted.org/packages/a8/2d/524f9318f6cbfcc79fbc004801ea6b607ec3f843977652fdee4857a7568b/pillow-11.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:93efb0b4de7e340d99057415c749175e24c8864302369e05914682ba642e5d77", size = 6642699, upload_time = "2025-07-01T09:15:23.186Z" }, - { url = "https://files.pythonhosted.org/packages/6f/d2/a9a4f280c6aefedce1e8f615baaa5474e0701d86dd6f1dede66726462bbd/pillow-11.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7966e38dcd0fa11ca390aed7c6f20454443581d758242023cf36fcb319b1a874", size = 6083789, upload_time = "2025-07-01T09:15:25.1Z" }, - { url = "https://files.pythonhosted.org/packages/fe/54/86b0cd9dbb683a9d5e960b66c7379e821a19be4ac5810e2e5a715c09a0c0/pillow-11.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:98a9afa7b9007c67ed84c57c9e0ad86a6000da96eaa638e4f8abe5b65ff83f0a", size = 6720386, upload_time = "2025-07-01T09:15:27.378Z" }, - { url = "https://files.pythonhosted.org/packages/e7/95/88efcaf384c3588e24259c4203b909cbe3e3c2d887af9e938c2022c9dd48/pillow-11.3.0-cp314-cp314-win32.whl", hash = "sha256:02a723e6bf909e7cea0dac1b0e0310be9d7650cd66222a5f1c571455c0a45214", size = 6370911, upload_time = "2025-07-01T09:15:29.294Z" }, - { url = "https://files.pythonhosted.org/packages/2e/cc/934e5820850ec5eb107e7b1a72dd278140731c669f396110ebc326f2a503/pillow-11.3.0-cp314-cp314-win_amd64.whl", hash = "sha256:a418486160228f64dd9e9efcd132679b7a02a5f22c982c78b6fc7dab3fefb635", size = 7117383, upload_time = "2025-07-01T09:15:31.128Z" }, - { url = "https://files.pythonhosted.org/packages/d6/e9/9c0a616a71da2a5d163aa37405e8aced9a906d574b4a214bede134e731bc/pillow-11.3.0-cp314-cp314-win_arm64.whl", hash = "sha256:155658efb5e044669c08896c0c44231c5e9abcaadbc5cd3648df2f7c0b96b9a6", size = 2511385, upload_time = "2025-07-01T09:15:33.328Z" }, - { url = "https://files.pythonhosted.org/packages/1a/33/c88376898aff369658b225262cd4f2659b13e8178e7534df9e6e1fa289f6/pillow-11.3.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:59a03cdf019efbfeeed910bf79c7c93255c3d54bc45898ac2a4140071b02b4ae", size = 5281129, upload_time = "2025-07-01T09:15:35.194Z" }, - { url = "https://files.pythonhosted.org/packages/1f/70/d376247fb36f1844b42910911c83a02d5544ebd2a8bad9efcc0f707ea774/pillow-11.3.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f8a5827f84d973d8636e9dc5764af4f0cf2318d26744b3d902931701b0d46653", size = 4689580, upload_time = "2025-07-01T09:15:37.114Z" }, - { url = "https://files.pythonhosted.org/packages/eb/1c/537e930496149fbac69efd2fc4329035bbe2e5475b4165439e3be9cb183b/pillow-11.3.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ee92f2fd10f4adc4b43d07ec5e779932b4eb3dbfbc34790ada5a6669bc095aa6", size = 5902860, upload_time = "2025-07-03T13:10:50.248Z" }, - { url = "https://files.pythonhosted.org/packages/bd/57/80f53264954dcefeebcf9dae6e3eb1daea1b488f0be8b8fef12f79a3eb10/pillow-11.3.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c96d333dcf42d01f47b37e0979b6bd73ec91eae18614864622d9b87bbd5bbf36", size = 7670694, upload_time = "2025-07-03T13:10:56.432Z" }, - { url = "https://files.pythonhosted.org/packages/70/ff/4727d3b71a8578b4587d9c276e90efad2d6fe0335fd76742a6da08132e8c/pillow-11.3.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4c96f993ab8c98460cd0c001447bff6194403e8b1d7e149ade5f00594918128b", size = 6005888, upload_time = "2025-07-01T09:15:39.436Z" }, - { url = "https://files.pythonhosted.org/packages/05/ae/716592277934f85d3be51d7256f3636672d7b1abfafdc42cf3f8cbd4b4c8/pillow-11.3.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:41342b64afeba938edb034d122b2dda5db2139b9a4af999729ba8818e0056477", size = 6670330, upload_time = "2025-07-01T09:15:41.269Z" }, - { url = "https://files.pythonhosted.org/packages/e7/bb/7fe6cddcc8827b01b1a9766f5fdeb7418680744f9082035bdbabecf1d57f/pillow-11.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:068d9c39a2d1b358eb9f245ce7ab1b5c3246c7c8c7d9ba58cfa5b43146c06e50", size = 6114089, upload_time = "2025-07-01T09:15:43.13Z" }, - { url = "https://files.pythonhosted.org/packages/8b/f5/06bfaa444c8e80f1a8e4bff98da9c83b37b5be3b1deaa43d27a0db37ef84/pillow-11.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a1bc6ba083b145187f648b667e05a2534ecc4b9f2784c2cbe3089e44868f2b9b", size = 6748206, upload_time = "2025-07-01T09:15:44.937Z" }, - { url = "https://files.pythonhosted.org/packages/f0/77/bc6f92a3e8e6e46c0ca78abfffec0037845800ea38c73483760362804c41/pillow-11.3.0-cp314-cp314t-win32.whl", hash = "sha256:118ca10c0d60b06d006be10a501fd6bbdfef559251ed31b794668ed569c87e12", size = 6377370, upload_time = "2025-07-01T09:15:46.673Z" }, - { url = "https://files.pythonhosted.org/packages/4a/82/3a721f7d69dca802befb8af08b7c79ebcab461007ce1c18bd91a5d5896f9/pillow-11.3.0-cp314-cp314t-win_amd64.whl", hash = "sha256:8924748b688aa210d79883357d102cd64690e56b923a186f35a82cbc10f997db", size = 7121500, upload_time = "2025-07-01T09:15:48.512Z" }, - { url = "https://files.pythonhosted.org/packages/89/c7/5572fa4a3f45740eaab6ae86fcdf7195b55beac1371ac8c619d880cfe948/pillow-11.3.0-cp314-cp314t-win_arm64.whl", hash = "sha256:79ea0d14d3ebad43ec77ad5272e6ff9bba5b679ef73375ea760261207fa8e0aa", size = 2512835, upload_time = "2025-07-01T09:15:50.399Z" }, -] - -[[package]] -name = "pint" -version = "0.24.4" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "flexcache" }, - { name = "flexparser" }, - { name = "platformdirs" }, - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/20/bb/52b15ddf7b7706ed591134a895dbf6e41c8348171fb635e655e0a4bbb0ea/pint-0.24.4.tar.gz", hash = "sha256:35275439b574837a6cd3020a5a4a73645eb125ce4152a73a2f126bf164b91b80", size = 342225, upload_time = "2024-11-07T16:29:46.061Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/16/bd2f5904557265882108dc2e04f18abc05ab0c2b7082ae9430091daf1d5c/Pint-0.24.4-py3-none-any.whl", hash = "sha256:aa54926c8772159fcf65f82cc0d34de6768c151b32ad1deb0331291c38fe7659", size = 302029, upload_time = "2024-11-07T16:29:43.976Z" }, -] - [[package]] name = "platformdirs" version = "4.3.8" @@ -1481,15 +975,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload_time = "2025-05-15T12:30:06.134Z" }, ] -[[package]] -name = "ply" -version = "3.11" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e5/69/882ee5c9d017149285cab114ebeab373308ef0f874fcdac9beb90e0ac4da/ply-3.11.tar.gz", hash = "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3", size = 159130, upload_time = "2018-02-15T19:01:31.097Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a3/58/35da89ee790598a0700ea49b2a66594140f44dec458c07e8e3d4979137fc/ply-3.11-py2.py3-none-any.whl", hash = "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce", size = 49567, upload_time = "2018-02-15T19:01:27.172Z" }, -] - [[package]] name = "pre-commit" version = "4.2.0" @@ -1551,41 +1036,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842, upload_time = "2024-07-21T12:58:20.04Z" }, ] -[[package]] -name = "pyarrow" -version = "20.0.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a2/ee/a7810cb9f3d6e9238e61d312076a9859bf3668fd21c69744de9532383912/pyarrow-20.0.0.tar.gz", hash = "sha256:febc4a913592573c8d5805091a6c2b5064c8bd6e002131f01061797d91c783c1", size = 1125187, upload_time = "2025-04-27T12:34:23.264Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a1/d6/0c10e0d54f6c13eb464ee9b67a68b8c71bcf2f67760ef5b6fbcddd2ab05f/pyarrow-20.0.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:75a51a5b0eef32727a247707d4755322cb970be7e935172b6a3a9f9ae98404ba", size = 30815067, upload_time = "2025-04-27T12:29:44.384Z" }, - { url = "https://files.pythonhosted.org/packages/7e/e2/04e9874abe4094a06fd8b0cbb0f1312d8dd7d707f144c2ec1e5e8f452ffa/pyarrow-20.0.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:211d5e84cecc640c7a3ab900f930aaff5cd2702177e0d562d426fb7c4f737781", size = 32297128, upload_time = "2025-04-27T12:29:52.038Z" }, - { url = "https://files.pythonhosted.org/packages/31/fd/c565e5dcc906a3b471a83273039cb75cb79aad4a2d4a12f76cc5ae90a4b8/pyarrow-20.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ba3cf4182828be7a896cbd232aa8dd6a31bd1f9e32776cc3796c012855e1199", size = 41334890, upload_time = "2025-04-27T12:29:59.452Z" }, - { url = "https://files.pythonhosted.org/packages/af/a9/3bdd799e2c9b20c1ea6dc6fa8e83f29480a97711cf806e823f808c2316ac/pyarrow-20.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c3a01f313ffe27ac4126f4c2e5ea0f36a5fc6ab51f8726cf41fee4b256680bd", size = 42421775, upload_time = "2025-04-27T12:30:06.875Z" }, - { url = "https://files.pythonhosted.org/packages/10/f7/da98ccd86354c332f593218101ae56568d5dcedb460e342000bd89c49cc1/pyarrow-20.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:a2791f69ad72addd33510fec7bb14ee06c2a448e06b649e264c094c5b5f7ce28", size = 40687231, upload_time = "2025-04-27T12:30:13.954Z" }, - { url = "https://files.pythonhosted.org/packages/bb/1b/2168d6050e52ff1e6cefc61d600723870bf569cbf41d13db939c8cf97a16/pyarrow-20.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:4250e28a22302ce8692d3a0e8ec9d9dde54ec00d237cff4dfa9c1fbf79e472a8", size = 42295639, upload_time = "2025-04-27T12:30:21.949Z" }, - { url = "https://files.pythonhosted.org/packages/b2/66/2d976c0c7158fd25591c8ca55aee026e6d5745a021915a1835578707feb3/pyarrow-20.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:89e030dc58fc760e4010148e6ff164d2f44441490280ef1e97a542375e41058e", size = 42908549, upload_time = "2025-04-27T12:30:29.551Z" }, - { url = "https://files.pythonhosted.org/packages/31/a9/dfb999c2fc6911201dcbf348247f9cc382a8990f9ab45c12eabfd7243a38/pyarrow-20.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6102b4864d77102dbbb72965618e204e550135a940c2534711d5ffa787df2a5a", size = 44557216, upload_time = "2025-04-27T12:30:36.977Z" }, - { url = "https://files.pythonhosted.org/packages/a0/8e/9adee63dfa3911be2382fb4d92e4b2e7d82610f9d9f668493bebaa2af50f/pyarrow-20.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:96d6a0a37d9c98be08f5ed6a10831d88d52cac7b13f5287f1e0f625a0de8062b", size = 25660496, upload_time = "2025-04-27T12:30:42.809Z" }, - { url = "https://files.pythonhosted.org/packages/9b/aa/daa413b81446d20d4dad2944110dcf4cf4f4179ef7f685dd5a6d7570dc8e/pyarrow-20.0.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:a15532e77b94c61efadde86d10957950392999503b3616b2ffcef7621a002893", size = 30798501, upload_time = "2025-04-27T12:30:48.351Z" }, - { url = "https://files.pythonhosted.org/packages/ff/75/2303d1caa410925de902d32ac215dc80a7ce7dd8dfe95358c165f2adf107/pyarrow-20.0.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:dd43f58037443af715f34f1322c782ec463a3c8a94a85fdb2d987ceb5658e061", size = 32277895, upload_time = "2025-04-27T12:30:55.238Z" }, - { url = "https://files.pythonhosted.org/packages/92/41/fe18c7c0b38b20811b73d1bdd54b1fccba0dab0e51d2048878042d84afa8/pyarrow-20.0.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa0d288143a8585806e3cc7c39566407aab646fb9ece164609dac1cfff45f6ae", size = 41327322, upload_time = "2025-04-27T12:31:05.587Z" }, - { url = "https://files.pythonhosted.org/packages/da/ab/7dbf3d11db67c72dbf36ae63dcbc9f30b866c153b3a22ef728523943eee6/pyarrow-20.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6953f0114f8d6f3d905d98e987d0924dabce59c3cda380bdfaa25a6201563b4", size = 42411441, upload_time = "2025-04-27T12:31:15.675Z" }, - { url = "https://files.pythonhosted.org/packages/90/c3/0c7da7b6dac863af75b64e2f827e4742161128c350bfe7955b426484e226/pyarrow-20.0.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:991f85b48a8a5e839b2128590ce07611fae48a904cae6cab1f089c5955b57eb5", size = 40677027, upload_time = "2025-04-27T12:31:24.631Z" }, - { url = "https://files.pythonhosted.org/packages/be/27/43a47fa0ff9053ab5203bb3faeec435d43c0d8bfa40179bfd076cdbd4e1c/pyarrow-20.0.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:97c8dc984ed09cb07d618d57d8d4b67a5100a30c3818c2fb0b04599f0da2de7b", size = 42281473, upload_time = "2025-04-27T12:31:31.311Z" }, - { url = "https://files.pythonhosted.org/packages/bc/0b/d56c63b078876da81bbb9ba695a596eabee9b085555ed12bf6eb3b7cab0e/pyarrow-20.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9b71daf534f4745818f96c214dbc1e6124d7daf059167330b610fc69b6f3d3e3", size = 42893897, upload_time = "2025-04-27T12:31:39.406Z" }, - { url = "https://files.pythonhosted.org/packages/92/ac/7d4bd020ba9145f354012838692d48300c1b8fe5634bfda886abcada67ed/pyarrow-20.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e8b88758f9303fa5a83d6c90e176714b2fd3852e776fc2d7e42a22dd6c2fb368", size = 44543847, upload_time = "2025-04-27T12:31:45.997Z" }, - { url = "https://files.pythonhosted.org/packages/9d/07/290f4abf9ca702c5df7b47739c1b2c83588641ddfa2cc75e34a301d42e55/pyarrow-20.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:30b3051b7975801c1e1d387e17c588d8ab05ced9b1e14eec57915f79869b5031", size = 25653219, upload_time = "2025-04-27T12:31:54.11Z" }, - { url = "https://files.pythonhosted.org/packages/95/df/720bb17704b10bd69dde086e1400b8eefb8f58df3f8ac9cff6c425bf57f1/pyarrow-20.0.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:ca151afa4f9b7bc45bcc791eb9a89e90a9eb2772767d0b1e5389609c7d03db63", size = 30853957, upload_time = "2025-04-27T12:31:59.215Z" }, - { url = "https://files.pythonhosted.org/packages/d9/72/0d5f875efc31baef742ba55a00a25213a19ea64d7176e0fe001c5d8b6e9a/pyarrow-20.0.0-cp313-cp313t-macosx_12_0_x86_64.whl", hash = "sha256:4680f01ecd86e0dd63e39eb5cd59ef9ff24a9d166db328679e36c108dc993d4c", size = 32247972, upload_time = "2025-04-27T12:32:05.369Z" }, - { url = "https://files.pythonhosted.org/packages/d5/bc/e48b4fa544d2eea72f7844180eb77f83f2030b84c8dad860f199f94307ed/pyarrow-20.0.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f4c8534e2ff059765647aa69b75d6543f9fef59e2cd4c6d18015192565d2b70", size = 41256434, upload_time = "2025-04-27T12:32:11.814Z" }, - { url = "https://files.pythonhosted.org/packages/c3/01/974043a29874aa2cf4f87fb07fd108828fc7362300265a2a64a94965e35b/pyarrow-20.0.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e1f8a47f4b4ae4c69c4d702cfbdfe4d41e18e5c7ef6f1bb1c50918c1e81c57b", size = 42353648, upload_time = "2025-04-27T12:32:20.766Z" }, - { url = "https://files.pythonhosted.org/packages/68/95/cc0d3634cde9ca69b0e51cbe830d8915ea32dda2157560dda27ff3b3337b/pyarrow-20.0.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:a1f60dc14658efaa927f8214734f6a01a806d7690be4b3232ba526836d216122", size = 40619853, upload_time = "2025-04-27T12:32:28.1Z" }, - { url = "https://files.pythonhosted.org/packages/29/c2/3ad40e07e96a3e74e7ed7cc8285aadfa84eb848a798c98ec0ad009eb6bcc/pyarrow-20.0.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:204a846dca751428991346976b914d6d2a82ae5b8316a6ed99789ebf976551e6", size = 42241743, upload_time = "2025-04-27T12:32:35.792Z" }, - { url = "https://files.pythonhosted.org/packages/eb/cb/65fa110b483339add6a9bc7b6373614166b14e20375d4daa73483755f830/pyarrow-20.0.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:f3b117b922af5e4c6b9a9115825726cac7d8b1421c37c2b5e24fbacc8930612c", size = 42839441, upload_time = "2025-04-27T12:32:46.64Z" }, - { url = "https://files.pythonhosted.org/packages/98/7b/f30b1954589243207d7a0fbc9997401044bf9a033eec78f6cb50da3f304a/pyarrow-20.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e724a3fd23ae5b9c010e7be857f4405ed5e679db5c93e66204db1a69f733936a", size = 44503279, upload_time = "2025-04-27T12:32:56.503Z" }, - { url = "https://files.pythonhosted.org/packages/37/40/ad395740cd641869a13bcf60851296c89624662575621968dcfafabaa7f6/pyarrow-20.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:82f1ee5133bd8f49d31be1299dc07f585136679666b502540db854968576faf9", size = 25944982, upload_time = "2025-04-27T12:33:04.72Z" }, -] - [[package]] name = "pycparser" version = "2.22" @@ -1595,81 +1045,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552, upload_time = "2024-03-30T13:22:20.476Z" }, ] -[[package]] -name = "pydantic" -version = "2.11.7" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "annotated-types" }, - { name = "pydantic-core" }, - { name = "typing-extensions" }, - { name = "typing-inspection" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/00/dd/4325abf92c39ba8623b5af936ddb36ffcfe0beae70405d456ab1fb2f5b8c/pydantic-2.11.7.tar.gz", hash = "sha256:d989c3c6cb79469287b1569f7447a17848c998458d49ebe294e975b9baf0f0db", size = 788350, upload_time = "2025-06-14T08:33:17.137Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6a/c0/ec2b1c8712ca690e5d61979dee872603e92b8a32f94cc1b72d53beab008a/pydantic-2.11.7-py3-none-any.whl", hash = "sha256:dde5df002701f6de26248661f6835bbe296a47bf73990135c7d07ce741b9623b", size = 444782, upload_time = "2025-06-14T08:33:14.905Z" }, -] - -[[package]] -name = "pydantic-core" -version = "2.33.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/ad/88/5f2260bdfae97aabf98f1778d43f69574390ad787afb646292a638c923d4/pydantic_core-2.33.2.tar.gz", hash = "sha256:7cb8bc3605c29176e1b105350d2e6474142d7c1bd1d9327c4a9bdb46bf827acc", size = 435195, upload_time = "2025-04-23T18:33:52.104Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/18/8a/2b41c97f554ec8c71f2a8a5f85cb56a8b0956addfe8b0efb5b3d77e8bdc3/pydantic_core-2.33.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a7ec89dc587667f22b6a0b6579c249fca9026ce7c333fc142ba42411fa243cdc", size = 2009000, upload_time = "2025-04-23T18:31:25.863Z" }, - { url = "https://files.pythonhosted.org/packages/a1/02/6224312aacb3c8ecbaa959897af57181fb6cf3a3d7917fd44d0f2917e6f2/pydantic_core-2.33.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3c6db6e52c6d70aa0d00d45cdb9b40f0433b96380071ea80b09277dba021ddf7", size = 1847996, upload_time = "2025-04-23T18:31:27.341Z" }, - { url = "https://files.pythonhosted.org/packages/d6/46/6dcdf084a523dbe0a0be59d054734b86a981726f221f4562aed313dbcb49/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e61206137cbc65e6d5256e1166f88331d3b6238e082d9f74613b9b765fb9025", size = 1880957, upload_time = "2025-04-23T18:31:28.956Z" }, - { url = "https://files.pythonhosted.org/packages/ec/6b/1ec2c03837ac00886ba8160ce041ce4e325b41d06a034adbef11339ae422/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb8c529b2819c37140eb51b914153063d27ed88e3bdc31b71198a198e921e011", size = 1964199, upload_time = "2025-04-23T18:31:31.025Z" }, - { url = "https://files.pythonhosted.org/packages/2d/1d/6bf34d6adb9debd9136bd197ca72642203ce9aaaa85cfcbfcf20f9696e83/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c52b02ad8b4e2cf14ca7b3d918f3eb0ee91e63b3167c32591e57c4317e134f8f", size = 2120296, upload_time = "2025-04-23T18:31:32.514Z" }, - { url = "https://files.pythonhosted.org/packages/e0/94/2bd0aaf5a591e974b32a9f7123f16637776c304471a0ab33cf263cf5591a/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96081f1605125ba0855dfda83f6f3df5ec90c61195421ba72223de35ccfb2f88", size = 2676109, upload_time = "2025-04-23T18:31:33.958Z" }, - { url = "https://files.pythonhosted.org/packages/f9/41/4b043778cf9c4285d59742281a769eac371b9e47e35f98ad321349cc5d61/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f57a69461af2a5fa6e6bbd7a5f60d3b7e6cebb687f55106933188e79ad155c1", size = 2002028, upload_time = "2025-04-23T18:31:39.095Z" }, - { url = "https://files.pythonhosted.org/packages/cb/d5/7bb781bf2748ce3d03af04d5c969fa1308880e1dca35a9bd94e1a96a922e/pydantic_core-2.33.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:572c7e6c8bb4774d2ac88929e3d1f12bc45714ae5ee6d9a788a9fb35e60bb04b", size = 2100044, upload_time = "2025-04-23T18:31:41.034Z" }, - { url = "https://files.pythonhosted.org/packages/fe/36/def5e53e1eb0ad896785702a5bbfd25eed546cdcf4087ad285021a90ed53/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:db4b41f9bd95fbe5acd76d89920336ba96f03e149097365afe1cb092fceb89a1", size = 2058881, upload_time = "2025-04-23T18:31:42.757Z" }, - { url = "https://files.pythonhosted.org/packages/01/6c/57f8d70b2ee57fc3dc8b9610315949837fa8c11d86927b9bb044f8705419/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:fa854f5cf7e33842a892e5c73f45327760bc7bc516339fda888c75ae60edaeb6", size = 2227034, upload_time = "2025-04-23T18:31:44.304Z" }, - { url = "https://files.pythonhosted.org/packages/27/b9/9c17f0396a82b3d5cbea4c24d742083422639e7bb1d5bf600e12cb176a13/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5f483cfb75ff703095c59e365360cb73e00185e01aaea067cd19acffd2ab20ea", size = 2234187, upload_time = "2025-04-23T18:31:45.891Z" }, - { url = "https://files.pythonhosted.org/packages/b0/6a/adf5734ffd52bf86d865093ad70b2ce543415e0e356f6cacabbc0d9ad910/pydantic_core-2.33.2-cp312-cp312-win32.whl", hash = "sha256:9cb1da0f5a471435a7bc7e439b8a728e8b61e59784b2af70d7c169f8dd8ae290", size = 1892628, upload_time = "2025-04-23T18:31:47.819Z" }, - { url = "https://files.pythonhosted.org/packages/43/e4/5479fecb3606c1368d496a825d8411e126133c41224c1e7238be58b87d7e/pydantic_core-2.33.2-cp312-cp312-win_amd64.whl", hash = "sha256:f941635f2a3d96b2973e867144fde513665c87f13fe0e193c158ac51bfaaa7b2", size = 1955866, upload_time = "2025-04-23T18:31:49.635Z" }, - { url = "https://files.pythonhosted.org/packages/0d/24/8b11e8b3e2be9dd82df4b11408a67c61bb4dc4f8e11b5b0fc888b38118b5/pydantic_core-2.33.2-cp312-cp312-win_arm64.whl", hash = "sha256:cca3868ddfaccfbc4bfb1d608e2ccaaebe0ae628e1416aeb9c4d88c001bb45ab", size = 1888894, upload_time = "2025-04-23T18:31:51.609Z" }, - { url = "https://files.pythonhosted.org/packages/46/8c/99040727b41f56616573a28771b1bfa08a3d3fe74d3d513f01251f79f172/pydantic_core-2.33.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:1082dd3e2d7109ad8b7da48e1d4710c8d06c253cbc4a27c1cff4fbcaa97a9e3f", size = 2015688, upload_time = "2025-04-23T18:31:53.175Z" }, - { url = "https://files.pythonhosted.org/packages/3a/cc/5999d1eb705a6cefc31f0b4a90e9f7fc400539b1a1030529700cc1b51838/pydantic_core-2.33.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f517ca031dfc037a9c07e748cefd8d96235088b83b4f4ba8939105d20fa1dcd6", size = 1844808, upload_time = "2025-04-23T18:31:54.79Z" }, - { url = "https://files.pythonhosted.org/packages/6f/5e/a0a7b8885c98889a18b6e376f344da1ef323d270b44edf8174d6bce4d622/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a9f2c9dd19656823cb8250b0724ee9c60a82f3cdf68a080979d13092a3b0fef", size = 1885580, upload_time = "2025-04-23T18:31:57.393Z" }, - { url = "https://files.pythonhosted.org/packages/3b/2a/953581f343c7d11a304581156618c3f592435523dd9d79865903272c256a/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2b0a451c263b01acebe51895bfb0e1cc842a5c666efe06cdf13846c7418caa9a", size = 1973859, upload_time = "2025-04-23T18:31:59.065Z" }, - { url = "https://files.pythonhosted.org/packages/e6/55/f1a813904771c03a3f97f676c62cca0c0a4138654107c1b61f19c644868b/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ea40a64d23faa25e62a70ad163571c0b342b8bf66d5fa612ac0dec4f069d916", size = 2120810, upload_time = "2025-04-23T18:32:00.78Z" }, - { url = "https://files.pythonhosted.org/packages/aa/c3/053389835a996e18853ba107a63caae0b9deb4a276c6b472931ea9ae6e48/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fb2d542b4d66f9470e8065c5469ec676978d625a8b7a363f07d9a501a9cb36a", size = 2676498, upload_time = "2025-04-23T18:32:02.418Z" }, - { url = "https://files.pythonhosted.org/packages/eb/3c/f4abd740877a35abade05e437245b192f9d0ffb48bbbbd708df33d3cda37/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdac5d6ffa1b5a83bca06ffe7583f5576555e6c8b3a91fbd25ea7780f825f7d", size = 2000611, upload_time = "2025-04-23T18:32:04.152Z" }, - { url = "https://files.pythonhosted.org/packages/59/a7/63ef2fed1837d1121a894d0ce88439fe3e3b3e48c7543b2a4479eb99c2bd/pydantic_core-2.33.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04a1a413977ab517154eebb2d326da71638271477d6ad87a769102f7c2488c56", size = 2107924, upload_time = "2025-04-23T18:32:06.129Z" }, - { url = "https://files.pythonhosted.org/packages/04/8f/2551964ef045669801675f1cfc3b0d74147f4901c3ffa42be2ddb1f0efc4/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c8e7af2f4e0194c22b5b37205bfb293d166a7344a5b0d0eaccebc376546d77d5", size = 2063196, upload_time = "2025-04-23T18:32:08.178Z" }, - { url = "https://files.pythonhosted.org/packages/26/bd/d9602777e77fc6dbb0c7db9ad356e9a985825547dce5ad1d30ee04903918/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:5c92edd15cd58b3c2d34873597a1e20f13094f59cf88068adb18947df5455b4e", size = 2236389, upload_time = "2025-04-23T18:32:10.242Z" }, - { url = "https://files.pythonhosted.org/packages/42/db/0e950daa7e2230423ab342ae918a794964b053bec24ba8af013fc7c94846/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:65132b7b4a1c0beded5e057324b7e16e10910c106d43675d9bd87d4f38dde162", size = 2239223, upload_time = "2025-04-23T18:32:12.382Z" }, - { url = "https://files.pythonhosted.org/packages/58/4d/4f937099c545a8a17eb52cb67fe0447fd9a373b348ccfa9a87f141eeb00f/pydantic_core-2.33.2-cp313-cp313-win32.whl", hash = "sha256:52fb90784e0a242bb96ec53f42196a17278855b0f31ac7c3cc6f5c1ec4811849", size = 1900473, upload_time = "2025-04-23T18:32:14.034Z" }, - { url = "https://files.pythonhosted.org/packages/a0/75/4a0a9bac998d78d889def5e4ef2b065acba8cae8c93696906c3a91f310ca/pydantic_core-2.33.2-cp313-cp313-win_amd64.whl", hash = "sha256:c083a3bdd5a93dfe480f1125926afcdbf2917ae714bdb80b36d34318b2bec5d9", size = 1955269, upload_time = "2025-04-23T18:32:15.783Z" }, - { url = "https://files.pythonhosted.org/packages/f9/86/1beda0576969592f1497b4ce8e7bc8cbdf614c352426271b1b10d5f0aa64/pydantic_core-2.33.2-cp313-cp313-win_arm64.whl", hash = "sha256:e80b087132752f6b3d714f041ccf74403799d3b23a72722ea2e6ba2e892555b9", size = 1893921, upload_time = "2025-04-23T18:32:18.473Z" }, - { url = "https://files.pythonhosted.org/packages/a4/7d/e09391c2eebeab681df2b74bfe6c43422fffede8dc74187b2b0bf6fd7571/pydantic_core-2.33.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:61c18fba8e5e9db3ab908620af374db0ac1baa69f0f32df4f61ae23f15e586ac", size = 1806162, upload_time = "2025-04-23T18:32:20.188Z" }, - { url = "https://files.pythonhosted.org/packages/f1/3d/847b6b1fed9f8ed3bb95a9ad04fbd0b212e832d4f0f50ff4d9ee5a9f15cf/pydantic_core-2.33.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95237e53bb015f67b63c91af7518a62a8660376a6a0db19b89acc77a4d6199f5", size = 1981560, upload_time = "2025-04-23T18:32:22.354Z" }, - { url = "https://files.pythonhosted.org/packages/6f/9a/e73262f6c6656262b5fdd723ad90f518f579b7bc8622e43a942eec53c938/pydantic_core-2.33.2-cp313-cp313t-win_amd64.whl", hash = "sha256:c2fc0a768ef76c15ab9238afa6da7f69895bb5d1ee83aeea2e3509af4472d0b9", size = 1935777, upload_time = "2025-04-23T18:32:25.088Z" }, -] - -[[package]] -name = "pydeflate" -version = "2.1.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "hdx-python-country" }, - { name = "imf-reader" }, - { name = "oda-reader" }, - { name = "pandas" }, - { name = "pyarrow" }, - { name = "requests" }, - { name = "wbgapi" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/5e/72/3e56d8166ca4b366a4e37c85711a706bba66768f70ba690bdb279f728d8d/pydeflate-2.1.3.tar.gz", hash = "sha256:48a2b74ad900dd8c50dfb1e4cdfcea8ca11cbd2d3a713bf9208f2028fea4cf4f", size = 26586, upload_time = "2025-06-03T09:38:12.25Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/31/31/e703ab5bc311c58e4dc00759d7a48a850877b8bbcd64c9778e2315e06bd5/pydeflate-2.1.3-py3-none-any.whl", hash = "sha256:09ebdde04eb2fea1c4b6712889cb2a9d4c2dd22ce0204aaeae64f4335667354f", size = 32540, upload_time = "2025-06-03T09:38:10.858Z" }, -] - [[package]] name = "pygments" version = "2.19.2" @@ -1692,27 +1067,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/98/d4/10bb14004d3c792811e05e21b5e5dcae805aacb739bd12a0540967b99592/pymdown_extensions-10.16-py3-none-any.whl", hash = "sha256:f5dd064a4db588cb2d95229fc4ee63a1b16cc8b4d0e6145c0899ed8723da1df2", size = 266143, upload_time = "2025-06-21T17:56:35.356Z" }, ] -[[package]] -name = "pyparsing" -version = "3.2.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/bb/22/f1129e69d94ffff626bdb5c835506b3a5b4f3d070f17ea295e12c2c6f60f/pyparsing-3.2.3.tar.gz", hash = "sha256:b9c13f1ab8b3b542f72e28f634bad4de758ab3ce4546e4301970ad6fa77c38be", size = 1088608, upload_time = "2025-03-25T05:01:28.114Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/05/e7/df2285f3d08fee213f2d041540fa4fc9ca6c2d44cf36d3a035bf2a8d2bcc/pyparsing-3.2.3-py3-none-any.whl", hash = "sha256:a749938e02d6fd0b59b356ca504a24982314bb090c383e3cf201c95ef7e2bfcf", size = 111120, upload_time = "2025-03-25T05:01:24.908Z" }, -] - -[[package]] -name = "pyphonetics" -version = "0.5.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "unidecode" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/d6/7c/7c45a9e9bf6ddb57b67e66cf4e8076a7baf3a790a3411daac1a7a2df0c5b/pyphonetics-0.5.3.tar.gz", hash = "sha256:2d3c2e359fde91a3c57914f0b5468bba7a5daf38e7927fd999992ea68990fbe4", size = 10314, upload_time = "2020-02-25T12:08:31.049Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/bd/dd/a7d0a860efd3d4335d538b4361b8e9af8311f2aba2e8c7e4c7a47d623b6e/pyphonetics-0.5.3-py2.py3-none-any.whl", hash = "sha256:e6b29671d0d624dda1cac59c0c5a8a7216d8db504bae4941bfc482e04a0621d1", size = 10729, upload_time = "2020-02-25T12:08:25.368Z" }, -] - [[package]] name = "pytest" version = "8.4.1" @@ -1730,40 +1084,30 @@ wheels = [ ] [[package]] -name = "python-calamine" -version = "0.4.0" +name = "pytest-cov" +version = "6.2.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "packaging" }, + { name = "coverage" }, + { name = "pluggy" }, + { name = "pytest" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/cc/03/269f96535705b2f18c8977fa58e76763b4e4727a9b3ae277a9468c8ffe05/python_calamine-0.4.0.tar.gz", hash = "sha256:94afcbae3fec36d2d7475095a59d4dc6fae45829968c743cb799ebae269d7bbf", size = 127737, upload_time = "2025-07-04T06:05:28.626Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/63/60/f951513aaaa470b3a38a87d65eca45e0a02bc329b47864f5a17db563f746/python_calamine-0.4.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:74bca5d44a73acf3dcfa5370820797fcfd225c8c71abcddea987c5b4f5077e98", size = 826603, upload_time = "2025-07-04T06:03:51.245Z" }, - { url = "https://files.pythonhosted.org/packages/76/3f/789955bbc77831c639890758f945eb2b25d6358065edf00da6751226cf31/python_calamine-0.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cf80178f5d1b0ee2ccfffb8549c50855f6249e930664adc5807f4d0d6c2b269c", size = 805826, upload_time = "2025-07-04T06:03:52.482Z" }, - { url = "https://files.pythonhosted.org/packages/00/4c/f87d17d996f647030a40bfd124fe45fe893c002bee35ae6aca9910a923ae/python_calamine-0.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65cfef345386ae86f7720f1be93495a40fd7e7feabb8caa1df5025d7fbc58a1f", size = 874989, upload_time = "2025-07-04T06:03:53.794Z" }, - { url = "https://files.pythonhosted.org/packages/47/d2/3269367303f6c0488cf1bfebded3f9fe968d118a988222e04c9b2636bf2e/python_calamine-0.4.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f23e6214dbf9b29065a5dcfd6a6c674dd0e251407298c9138611c907d53423ff", size = 877504, upload_time = "2025-07-04T06:03:55.095Z" }, - { url = "https://files.pythonhosted.org/packages/f9/6d/c7ac35f5c7125e8bd07eb36773f300fda20dd2da635eae78a8cebb0b6ab7/python_calamine-0.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d792d304ee232ab01598e1d3ab22e074a32c2511476b5fb4f16f4222d9c2a265", size = 1014171, upload_time = "2025-07-04T06:03:56.777Z" }, - { url = "https://files.pythonhosted.org/packages/f0/81/5ea8792a2e9ab5e2a05872db3a4d3ed3538ad5af1861282c789e2f13a8cf/python_calamine-0.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bf813425918fd68f3e991ef7c4b5015be0a1a95fc4a8ab7e73c016ef1b881bb4", size = 926737, upload_time = "2025-07-04T06:03:58.024Z" }, - { url = "https://files.pythonhosted.org/packages/cc/6e/989e56e6f073fc0981a74ba7a393881eb351bb143e5486aa629b5e5d6a8b/python_calamine-0.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbe2a0ccb4d003635888eea83a995ff56b0748c8c76fc71923544f5a4a7d4cd7", size = 887032, upload_time = "2025-07-04T06:03:59.298Z" }, - { url = "https://files.pythonhosted.org/packages/5d/92/2c9bd64277c6fe4be695d7d5a803b38d953ec8565037486be7506642c27c/python_calamine-0.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a7b3bb5f0d910b9b03c240987560f843256626fd443279759df4e91b717826d2", size = 929700, upload_time = "2025-07-04T06:04:01.388Z" }, - { url = "https://files.pythonhosted.org/packages/64/fa/fc758ca37701d354a6bc7d63118699f1c73788a1f2e1b44d720824992764/python_calamine-0.4.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:bd2c0fc2b5eabd08ceac8a2935bffa88dbc6116db971aa8c3f244bad3fd0f644", size = 1053971, upload_time = "2025-07-04T06:04:02.704Z" }, - { url = "https://files.pythonhosted.org/packages/65/52/40d7e08ae0ddba331cdc9f7fb3e92972f8f38d7afbd00228158ff6d1fceb/python_calamine-0.4.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:85b547cb1c5b692a0c2406678d666dbc1cec65a714046104683fe4f504a1721d", size = 1057057, upload_time = "2025-07-04T06:04:04.014Z" }, - { url = "https://files.pythonhosted.org/packages/16/de/e8a071c0adfda73285d891898a24f6e99338328c404f497ff5b0e6bc3d45/python_calamine-0.4.0-cp312-cp312-win32.whl", hash = "sha256:4c2a1e3a0db4d6de4587999a21cc35845648c84fba81c03dd6f3072c690888e4", size = 665540, upload_time = "2025-07-04T06:04:05.679Z" }, - { url = "https://files.pythonhosted.org/packages/5e/f2/7fdfada13f80db12356853cf08697ff4e38800a1809c2bdd26ee60962e7a/python_calamine-0.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:b193c89ffcc146019475cd121c552b23348411e19c04dedf5c766a20db64399a", size = 695366, upload_time = "2025-07-04T06:04:06.977Z" }, - { url = "https://files.pythonhosted.org/packages/20/66/d37412ad854480ce32f50d9f74f2a2f88b1b8a6fbc32f70aabf3211ae89e/python_calamine-0.4.0-cp312-cp312-win_arm64.whl", hash = "sha256:43a0f15e0b60c75a71b21a012b911d5d6f5fa052afad2a8edbc728af43af0fcf", size = 670740, upload_time = "2025-07-04T06:04:08.656Z" }, - { url = "https://files.pythonhosted.org/packages/5a/10/f78218ccdc5bb5591a37d582c7e8723121d0fbe8196c5a4089110ec02f22/python_calamine-0.4.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:f8d6b2d2ae73acf91343f02756bdcb2fa6117db4eaf5cfab75ce50dfb54525ee", size = 826339, upload_time = "2025-07-04T06:04:10.254Z" }, - { url = "https://files.pythonhosted.org/packages/15/b1/d7d0dbbd0469db0fc628b1b9ee3a8f3b698391279f0d7aea96e2018a3863/python_calamine-0.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:aca7e019f42ca16806fef53e3028fa158005c0e68eabda577c3f3c2bea9735fd", size = 805473, upload_time = "2025-07-04T06:04:11.557Z" }, - { url = "https://files.pythonhosted.org/packages/46/52/033b902fb11f9b4bb59fa18621acbf5eaf4ecb0bce878d34fcb0020229df/python_calamine-0.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aca67cb447ba8dcefa4d5a1131d1cfdd1e0d0a0f0c6470655ce9ad37b7cfa228", size = 874275, upload_time = "2025-07-04T06:04:13.318Z" }, - { url = "https://files.pythonhosted.org/packages/56/12/e6b589293314a5d10b2c309411542424ebefb77430cc715d7601d80349ae/python_calamine-0.4.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e127d3b78d511d4f6fbdfed02fe666d83a722d73e27dd64d1718be9efafbabfe", size = 877061, upload_time = "2025-07-04T06:04:15.013Z" }, - { url = "https://files.pythonhosted.org/packages/64/24/0eeb583eb5d44f674ca9f7a846c665e33190431386d7c9f6d08ec9f09d3c/python_calamine-0.4.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e47891d9d62e3015448749ddb2ba60ab583a651d0fca9a3a1794936942ad7d5d", size = 1013946, upload_time = "2025-07-04T06:04:16.647Z" }, - { url = "https://files.pythonhosted.org/packages/c4/93/360cf58b8e24f760a3d4643423389dbc37bdca8b6fdda75ffc664ce622b5/python_calamine-0.4.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d4072bf9dcb8ec49f5b92688bd960b5d0e03e4826d227bbd66478a6f6b0aea06", size = 926462, upload_time = "2025-07-04T06:04:17.936Z" }, - { url = "https://files.pythonhosted.org/packages/5a/5d/3b8c46ccc62d020858bc52f2d792208910eb68682c6ebf8d6706593d7a88/python_calamine-0.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eabc9dc770f753c4227aacedd8390056937e67af0bf65d6696c584d3054f1287", size = 886319, upload_time = "2025-07-04T06:04:19.33Z" }, - { url = "https://files.pythonhosted.org/packages/66/cf/73241714800bddb277f827c4683f579b81915406bf7dc643dc185cef7eb2/python_calamine-0.4.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6a4bcf36dc77674892616b66cffba432f5fd62df3e0adb0487ec245036b50041", size = 929044, upload_time = "2025-07-04T06:04:20.689Z" }, - { url = "https://files.pythonhosted.org/packages/7c/6b/71e30ee568ce1ea6676be66f1a42c6397946859effc471cc102922fb4792/python_calamine-0.4.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:f81518d4b49c47054cb1861badf5bcef44b0a49959968fb2e9c9cb89645c76af", size = 1053084, upload_time = "2025-07-04T06:04:22.414Z" }, - { url = "https://files.pythonhosted.org/packages/75/19/87b42fe975f8952754562785a545f6d2eec17c353befdf33a8e16c046ce0/python_calamine-0.4.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:18375eb3ac1362fcbf3a9fcad0672d8dc054001247bc52f063e0054a3e01a8d1", size = 1056735, upload_time = "2025-07-04T06:04:23.903Z" }, - { url = "https://files.pythonhosted.org/packages/04/db/ecee6e5d6ed4f3725312580a83c4cb1758c9060aa08bf2d8512d3396cea1/python_calamine-0.4.0-cp313-cp313-win32.whl", hash = "sha256:c7e98c7e531bafdf719414d0c428f25f933a82640fb92e6e84864a85e758aecc", size = 665282, upload_time = "2025-07-04T06:04:25.274Z" }, - { url = "https://files.pythonhosted.org/packages/cb/0b/26337e0a0e2b335c1d6225bda8de259a21fea129a06009c1471deda28e1f/python_calamine-0.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:6ec081b874e78f4dbcbe70804644281366814289956755575a5871f725592d4e", size = 694982, upload_time = "2025-07-04T06:04:26.573Z" }, - { url = "https://files.pythonhosted.org/packages/90/26/f72c2b2fe70f2901abb41fcdf8249181133ddd72b9392cfb63d030393b3e/python_calamine-0.4.0-cp313-cp313-win_arm64.whl", hash = "sha256:3f9bdf570023138ee4090a51b1e34786978d6e649852ccc3b83ac9729f125ca2", size = 670283, upload_time = "2025-07-04T06:04:28.434Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/18/99/668cade231f434aaa59bbfbf49469068d2ddd945000621d3d165d2e7dd7b/pytest_cov-6.2.1.tar.gz", hash = "sha256:25cc6cc0a5358204b8108ecedc51a9b57b34cc6b8c967cc2c01a4e00d8a67da2", size = 69432, upload_time = "2025-06-12T10:47:47.684Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bc/16/4ea354101abb1287856baa4af2732be351c7bee728065aed451b678153fd/pytest_cov-6.2.1-py3-none-any.whl", hash = "sha256:f5bc4c23f42f1cdd23c70b1dab1bbaef4fc505ba950d53e0081d0730dd7e86d5", size = 24644, upload_time = "2025-06-12T10:47:45.932Z" }, +] + +[[package]] +name = "pytest-xdist" +version = "3.8.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "execnet" }, + { name = "pytest" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/78/b4/439b179d1ff526791eb921115fca8e44e596a13efeda518b9d845a619450/pytest_xdist-3.8.0.tar.gz", hash = "sha256:7e578125ec9bc6050861aa93f2d59f1d8d085595d6551c2c90b6f4fad8d3a9f1", size = 88069, upload_time = "2025-07-01T13:30:59.346Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl", hash = "sha256:202ca578cfeb7370784a8c33d6d05bc6e13b4f25b5053c30a152269fd10f0b88", size = 46396, upload_time = "2025-07-01T13:30:56.632Z" }, ] [[package]] @@ -1779,21 +1123,15 @@ wheels = [ ] [[package]] -name = "python-io-wrapper" -version = "0.3.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d7/74/8dc5f7d0b7cc1a0ca9e5c320abf11adee2094998c93ae8c9c80d9a8323ff/python-io-wrapper-0.3.1.tar.gz", hash = "sha256:e3391787ff0d9870e739294c6392437915502153e695a017450aa46b6d091762", size = 3271, upload_time = "2022-11-14T15:00:10.932Z" } - -[[package]] -name = "python-slugify" -version = "8.0.4" +name = "python-debian" +version = "1.0.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "text-unidecode" }, + { name = "charset-normalizer" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/87/c7/5e1547c44e31da50a460df93af11a535ace568ef89d7a811069ead340c4a/python-slugify-8.0.4.tar.gz", hash = "sha256:59202371d1d05b54a9e7720c5e038f928f45daaffe41dd10822f3907b937c856", size = 10921, upload_time = "2024-02-08T18:32:45.488Z" } +sdist = { url = "https://files.pythonhosted.org/packages/bf/4b/3c4cf635311b6203f17c2d693dc15e898969983dd3f729bee3c428aa60d4/python-debian-1.0.1.tar.gz", hash = "sha256:3ada9b83a3d671b58081782c0969cffa0102f6ce433fbbc7cf21275b8b5cc771", size = 127249, upload_time = "2025-03-11T12:27:27.245Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a4/62/02da182e544a51a5c3ccf4b03ab79df279f9c60c5e82d5e8bec7ca26ac11/python_slugify-8.0.4-py2.py3-none-any.whl", hash = "sha256:276540b79961052b66b7d116620b36518847f52d5fd9e3a70164fc8c50faa6b8", size = 10051, upload_time = "2024-02-08T18:32:43.911Z" }, + { url = "https://files.pythonhosted.org/packages/ba/15/e8096189b18dda72e4923622abc10b021ecff723b397e22eff29fb86637b/python_debian-1.0.1-py3-none-any.whl", hash = "sha256:8f137c230c1d9279c2ac892b35915068b2aca090c9fd3da5671ff87af32af12c", size = 137453, upload_time = "2025-03-11T12:27:25.014Z" }, ] [[package]] @@ -1886,26 +1224,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/eb/bc/1709dc55f0970cf4cb8259e435e6773f9946f41a045c2cb90e870b7072da/pyzmq-27.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:d8229f2efece6a660ee211d74d91dbc2a76b95544d46c74c615e491900dc107f", size = 639933, upload_time = "2025-06-13T14:08:00.777Z" }, ] -[[package]] -name = "ratelimit" -version = "2.2.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ab/38/ff60c8fc9e002d50d48822cc5095deb8ebbc5f91a6b8fdd9731c87a147c9/ratelimit-2.2.1.tar.gz", hash = "sha256:af8a9b64b821529aca09ebaf6d8d279100d766f19e90b5059ac6a718ca6dee42", size = 5251, upload_time = "2018-12-17T18:55:49.675Z" } - -[[package]] -name = "referencing" -version = "0.36.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "attrs" }, - { name = "rpds-py" }, - { name = "typing-extensions", marker = "python_full_version < '3.13'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/2f/db/98b5c277be99dd18bfd91dd04e1b759cad18d1a338188c936e92f921c7e2/referencing-0.36.2.tar.gz", hash = "sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa", size = 74744, upload_time = "2025-01-25T08:48:16.138Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0", size = 26775, upload_time = "2025-01-25T08:48:14.241Z" }, -] - [[package]] name = "requests" version = "2.32.4" @@ -1922,176 +1240,22 @@ wheels = [ ] [[package]] -name = "requests-file" -version = "2.1.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "requests" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/72/97/bf44e6c6bd8ddbb99943baf7ba8b1a8485bcd2fe0e55e5708d7fee4ff1ae/requests_file-2.1.0.tar.gz", hash = "sha256:0f549a3f3b0699415ac04d167e9cb39bccfb730cb832b4d20be3d9867356e658", size = 6891, upload_time = "2024-05-21T16:28:00.24Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d7/25/dd878a121fcfdf38f52850f11c512e13ec87c2ea72385933818e5b6c15ce/requests_file-2.1.0-py2.py3-none-any.whl", hash = "sha256:cf270de5a4c5874e84599fc5778303d496c10ae5e870bfa378818f35d21bda5c", size = 4244, upload_time = "2024-05-21T16:27:57.733Z" }, -] - -[[package]] -name = "rfc3986" -version = "2.0.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/85/40/1520d68bfa07ab5a6f065a186815fb6610c86fe957bc065754e47f7b0840/rfc3986-2.0.0.tar.gz", hash = "sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c", size = 49026, upload_time = "2022-01-10T00:52:30.832Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ff/9a/9afaade874b2fa6c752c36f1548f718b5b83af81ed9b76628329dab81c1b/rfc3986-2.0.0-py2.py3-none-any.whl", hash = "sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd", size = 31326, upload_time = "2022-01-10T00:52:29.594Z" }, -] - -[[package]] -name = "rich" -version = "14.0.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "markdown-it-py" }, - { name = "pygments" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/a1/53/830aa4c3066a8ab0ae9a9955976fb770fe9c6102117c8ec4ab3ea62d89e8/rich-14.0.0.tar.gz", hash = "sha256:82f1bc23a6a21ebca4ae0c45af9bdbc492ed20231dcb63f297d6d1021a9d5725", size = 224078, upload_time = "2025-03-30T14:15:14.23Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0d/9b/63f4c7ebc259242c89b3acafdb37b41d1185c07ff0011164674e9076b491/rich-14.0.0-py3-none-any.whl", hash = "sha256:1c9491e1951aac09caffd42f448ee3d04e58923ffe14993f6e83068dc395d7e0", size = 243229, upload_time = "2025-03-30T14:15:12.283Z" }, -] - -[[package]] -name = "rpds-py" -version = "0.26.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a5/aa/4456d84bbb54adc6a916fb10c9b374f78ac840337644e4a5eda229c81275/rpds_py-0.26.0.tar.gz", hash = "sha256:20dae58a859b0906f0685642e591056f1e787f3a8b39c8e8749a45dc7d26bdb0", size = 27385, upload_time = "2025-07-01T15:57:13.958Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ea/86/90eb87c6f87085868bd077c7a9938006eb1ce19ed4d06944a90d3560fce2/rpds_py-0.26.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:894514d47e012e794f1350f076c427d2347ebf82f9b958d554d12819849a369d", size = 363933, upload_time = "2025-07-01T15:54:15.734Z" }, - { url = "https://files.pythonhosted.org/packages/63/78/4469f24d34636242c924626082b9586f064ada0b5dbb1e9d096ee7a8e0c6/rpds_py-0.26.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc921b96fa95a097add244da36a1d9e4f3039160d1d30f1b35837bf108c21136", size = 350447, upload_time = "2025-07-01T15:54:16.922Z" }, - { url = "https://files.pythonhosted.org/packages/ad/91/c448ed45efdfdade82348d5e7995e15612754826ea640afc20915119734f/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e1157659470aa42a75448b6e943c895be8c70531c43cb78b9ba990778955582", size = 384711, upload_time = "2025-07-01T15:54:18.101Z" }, - { url = "https://files.pythonhosted.org/packages/ec/43/e5c86fef4be7f49828bdd4ecc8931f0287b1152c0bb0163049b3218740e7/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:521ccf56f45bb3a791182dc6b88ae5f8fa079dd705ee42138c76deb1238e554e", size = 400865, upload_time = "2025-07-01T15:54:19.295Z" }, - { url = "https://files.pythonhosted.org/packages/55/34/e00f726a4d44f22d5c5fe2e5ddd3ac3d7fd3f74a175607781fbdd06fe375/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9def736773fd56b305c0eef698be5192c77bfa30d55a0e5885f80126c4831a15", size = 517763, upload_time = "2025-07-01T15:54:20.858Z" }, - { url = "https://files.pythonhosted.org/packages/52/1c/52dc20c31b147af724b16104500fba13e60123ea0334beba7b40e33354b4/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cdad4ea3b4513b475e027be79e5a0ceac8ee1c113a1a11e5edc3c30c29f964d8", size = 406651, upload_time = "2025-07-01T15:54:22.508Z" }, - { url = "https://files.pythonhosted.org/packages/2e/77/87d7bfabfc4e821caa35481a2ff6ae0b73e6a391bb6b343db2c91c2b9844/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82b165b07f416bdccf5c84546a484cc8f15137ca38325403864bfdf2b5b72f6a", size = 386079, upload_time = "2025-07-01T15:54:23.987Z" }, - { url = "https://files.pythonhosted.org/packages/e3/d4/7f2200c2d3ee145b65b3cddc4310d51f7da6a26634f3ac87125fd789152a/rpds_py-0.26.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d04cab0a54b9dba4d278fe955a1390da3cf71f57feb78ddc7cb67cbe0bd30323", size = 421379, upload_time = "2025-07-01T15:54:25.073Z" }, - { url = "https://files.pythonhosted.org/packages/ae/13/9fdd428b9c820869924ab62236b8688b122baa22d23efdd1c566938a39ba/rpds_py-0.26.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:79061ba1a11b6a12743a2b0f72a46aa2758613d454aa6ba4f5a265cc48850158", size = 562033, upload_time = "2025-07-01T15:54:26.225Z" }, - { url = "https://files.pythonhosted.org/packages/f3/e1/b69686c3bcbe775abac3a4c1c30a164a2076d28df7926041f6c0eb5e8d28/rpds_py-0.26.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:f405c93675d8d4c5ac87364bb38d06c988e11028a64b52a47158a355079661f3", size = 591639, upload_time = "2025-07-01T15:54:27.424Z" }, - { url = "https://files.pythonhosted.org/packages/5c/c9/1e3d8c8863c84a90197ac577bbc3d796a92502124c27092413426f670990/rpds_py-0.26.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dafd4c44b74aa4bed4b250f1aed165b8ef5de743bcca3b88fc9619b6087093d2", size = 557105, upload_time = "2025-07-01T15:54:29.93Z" }, - { url = "https://files.pythonhosted.org/packages/9f/c5/90c569649057622959f6dcc40f7b516539608a414dfd54b8d77e3b201ac0/rpds_py-0.26.0-cp312-cp312-win32.whl", hash = "sha256:3da5852aad63fa0c6f836f3359647870e21ea96cf433eb393ffa45263a170d44", size = 223272, upload_time = "2025-07-01T15:54:31.128Z" }, - { url = "https://files.pythonhosted.org/packages/7d/16/19f5d9f2a556cfed454eebe4d354c38d51c20f3db69e7b4ce6cff904905d/rpds_py-0.26.0-cp312-cp312-win_amd64.whl", hash = "sha256:cf47cfdabc2194a669dcf7a8dbba62e37a04c5041d2125fae0233b720da6f05c", size = 234995, upload_time = "2025-07-01T15:54:32.195Z" }, - { url = "https://files.pythonhosted.org/packages/83/f0/7935e40b529c0e752dfaa7880224771b51175fce08b41ab4a92eb2fbdc7f/rpds_py-0.26.0-cp312-cp312-win_arm64.whl", hash = "sha256:20ab1ae4fa534f73647aad289003f1104092890849e0266271351922ed5574f8", size = 223198, upload_time = "2025-07-01T15:54:33.271Z" }, - { url = "https://files.pythonhosted.org/packages/6a/67/bb62d0109493b12b1c6ab00de7a5566aa84c0e44217c2d94bee1bd370da9/rpds_py-0.26.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:696764a5be111b036256c0b18cd29783fab22154690fc698062fc1b0084b511d", size = 363917, upload_time = "2025-07-01T15:54:34.755Z" }, - { url = "https://files.pythonhosted.org/packages/4b/f3/34e6ae1925a5706c0f002a8d2d7f172373b855768149796af87bd65dcdb9/rpds_py-0.26.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1e6c15d2080a63aaed876e228efe4f814bc7889c63b1e112ad46fdc8b368b9e1", size = 350073, upload_time = "2025-07-01T15:54:36.292Z" }, - { url = "https://files.pythonhosted.org/packages/75/83/1953a9d4f4e4de7fd0533733e041c28135f3c21485faaef56a8aadbd96b5/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:390e3170babf42462739a93321e657444f0862c6d722a291accc46f9d21ed04e", size = 384214, upload_time = "2025-07-01T15:54:37.469Z" }, - { url = "https://files.pythonhosted.org/packages/48/0e/983ed1b792b3322ea1d065e67f4b230f3b96025f5ce3878cc40af09b7533/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7da84c2c74c0f5bc97d853d9e17bb83e2dcafcff0dc48286916001cc114379a1", size = 400113, upload_time = "2025-07-01T15:54:38.954Z" }, - { url = "https://files.pythonhosted.org/packages/69/7f/36c0925fff6f660a80be259c5b4f5e53a16851f946eb080351d057698528/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4c5fe114a6dd480a510b6d3661d09d67d1622c4bf20660a474507aaee7eeeee9", size = 515189, upload_time = "2025-07-01T15:54:40.57Z" }, - { url = "https://files.pythonhosted.org/packages/13/45/cbf07fc03ba7a9b54662c9badb58294ecfb24f828b9732970bd1a431ed5c/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3100b3090269f3a7ea727b06a6080d4eb7439dca4c0e91a07c5d133bb1727ea7", size = 406998, upload_time = "2025-07-01T15:54:43.025Z" }, - { url = "https://files.pythonhosted.org/packages/6c/b0/8fa5e36e58657997873fd6a1cf621285ca822ca75b4b3434ead047daa307/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c03c9b0c64afd0320ae57de4c982801271c0c211aa2d37f3003ff5feb75bb04", size = 385903, upload_time = "2025-07-01T15:54:44.752Z" }, - { url = "https://files.pythonhosted.org/packages/4b/f7/b25437772f9f57d7a9fbd73ed86d0dcd76b4c7c6998348c070d90f23e315/rpds_py-0.26.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5963b72ccd199ade6ee493723d18a3f21ba7d5b957017607f815788cef50eaf1", size = 419785, upload_time = "2025-07-01T15:54:46.043Z" }, - { url = "https://files.pythonhosted.org/packages/a7/6b/63ffa55743dfcb4baf2e9e77a0b11f7f97ed96a54558fcb5717a4b2cd732/rpds_py-0.26.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9da4e873860ad5bab3291438525cae80169daecbfafe5657f7f5fb4d6b3f96b9", size = 561329, upload_time = "2025-07-01T15:54:47.64Z" }, - { url = "https://files.pythonhosted.org/packages/2f/07/1f4f5e2886c480a2346b1e6759c00278b8a69e697ae952d82ae2e6ee5db0/rpds_py-0.26.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5afaddaa8e8c7f1f7b4c5c725c0070b6eed0228f705b90a1732a48e84350f4e9", size = 590875, upload_time = "2025-07-01T15:54:48.9Z" }, - { url = "https://files.pythonhosted.org/packages/cc/bc/e6639f1b91c3a55f8c41b47d73e6307051b6e246254a827ede730624c0f8/rpds_py-0.26.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4916dc96489616a6f9667e7526af8fa693c0fdb4f3acb0e5d9f4400eb06a47ba", size = 556636, upload_time = "2025-07-01T15:54:50.619Z" }, - { url = "https://files.pythonhosted.org/packages/05/4c/b3917c45566f9f9a209d38d9b54a1833f2bb1032a3e04c66f75726f28876/rpds_py-0.26.0-cp313-cp313-win32.whl", hash = "sha256:2a343f91b17097c546b93f7999976fd6c9d5900617aa848c81d794e062ab302b", size = 222663, upload_time = "2025-07-01T15:54:52.023Z" }, - { url = "https://files.pythonhosted.org/packages/e0/0b/0851bdd6025775aaa2365bb8de0697ee2558184c800bfef8d7aef5ccde58/rpds_py-0.26.0-cp313-cp313-win_amd64.whl", hash = "sha256:0a0b60701f2300c81b2ac88a5fb893ccfa408e1c4a555a77f908a2596eb875a5", size = 234428, upload_time = "2025-07-01T15:54:53.692Z" }, - { url = "https://files.pythonhosted.org/packages/ed/e8/a47c64ed53149c75fb581e14a237b7b7cd18217e969c30d474d335105622/rpds_py-0.26.0-cp313-cp313-win_arm64.whl", hash = "sha256:257d011919f133a4746958257f2c75238e3ff54255acd5e3e11f3ff41fd14256", size = 222571, upload_time = "2025-07-01T15:54:54.822Z" }, - { url = "https://files.pythonhosted.org/packages/89/bf/3d970ba2e2bcd17d2912cb42874107390f72873e38e79267224110de5e61/rpds_py-0.26.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:529c8156d7506fba5740e05da8795688f87119cce330c244519cf706a4a3d618", size = 360475, upload_time = "2025-07-01T15:54:56.228Z" }, - { url = "https://files.pythonhosted.org/packages/82/9f/283e7e2979fc4ec2d8ecee506d5a3675fce5ed9b4b7cb387ea5d37c2f18d/rpds_py-0.26.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f53ec51f9d24e9638a40cabb95078ade8c99251945dad8d57bf4aabe86ecee35", size = 346692, upload_time = "2025-07-01T15:54:58.561Z" }, - { url = "https://files.pythonhosted.org/packages/e3/03/7e50423c04d78daf391da3cc4330bdb97042fc192a58b186f2d5deb7befd/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab504c4d654e4a29558eaa5bb8cea5fdc1703ea60a8099ffd9c758472cf913f", size = 379415, upload_time = "2025-07-01T15:54:59.751Z" }, - { url = "https://files.pythonhosted.org/packages/57/00/d11ee60d4d3b16808432417951c63df803afb0e0fc672b5e8d07e9edaaae/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fd0641abca296bc1a00183fe44f7fced8807ed49d501f188faa642d0e4975b83", size = 391783, upload_time = "2025-07-01T15:55:00.898Z" }, - { url = "https://files.pythonhosted.org/packages/08/b3/1069c394d9c0d6d23c5b522e1f6546b65793a22950f6e0210adcc6f97c3e/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:69b312fecc1d017b5327afa81d4da1480f51c68810963a7336d92203dbb3d4f1", size = 512844, upload_time = "2025-07-01T15:55:02.201Z" }, - { url = "https://files.pythonhosted.org/packages/08/3b/c4fbf0926800ed70b2c245ceca99c49f066456755f5d6eb8863c2c51e6d0/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c741107203954f6fc34d3066d213d0a0c40f7bb5aafd698fb39888af277c70d8", size = 402105, upload_time = "2025-07-01T15:55:03.698Z" }, - { url = "https://files.pythonhosted.org/packages/1c/b0/db69b52ca07413e568dae9dc674627a22297abb144c4d6022c6d78f1e5cc/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc3e55a7db08dc9a6ed5fb7103019d2c1a38a349ac41901f9f66d7f95750942f", size = 383440, upload_time = "2025-07-01T15:55:05.398Z" }, - { url = "https://files.pythonhosted.org/packages/4c/e1/c65255ad5b63903e56b3bb3ff9dcc3f4f5c3badde5d08c741ee03903e951/rpds_py-0.26.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9e851920caab2dbcae311fd28f4313c6953993893eb5c1bb367ec69d9a39e7ed", size = 412759, upload_time = "2025-07-01T15:55:08.316Z" }, - { url = "https://files.pythonhosted.org/packages/e4/22/bb731077872377a93c6e93b8a9487d0406c70208985831034ccdeed39c8e/rpds_py-0.26.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:dfbf280da5f876d0b00c81f26bedce274e72a678c28845453885a9b3c22ae632", size = 556032, upload_time = "2025-07-01T15:55:09.52Z" }, - { url = "https://files.pythonhosted.org/packages/e0/8b/393322ce7bac5c4530fb96fc79cc9ea2f83e968ff5f6e873f905c493e1c4/rpds_py-0.26.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:1cc81d14ddfa53d7f3906694d35d54d9d3f850ef8e4e99ee68bc0d1e5fed9a9c", size = 585416, upload_time = "2025-07-01T15:55:11.216Z" }, - { url = "https://files.pythonhosted.org/packages/49/ae/769dc372211835bf759319a7aae70525c6eb523e3371842c65b7ef41c9c6/rpds_py-0.26.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dca83c498b4650a91efcf7b88d669b170256bf8017a5db6f3e06c2bf031f57e0", size = 554049, upload_time = "2025-07-01T15:55:13.004Z" }, - { url = "https://files.pythonhosted.org/packages/6b/f9/4c43f9cc203d6ba44ce3146246cdc38619d92c7bd7bad4946a3491bd5b70/rpds_py-0.26.0-cp313-cp313t-win32.whl", hash = "sha256:4d11382bcaf12f80b51d790dee295c56a159633a8e81e6323b16e55d81ae37e9", size = 218428, upload_time = "2025-07-01T15:55:14.486Z" }, - { url = "https://files.pythonhosted.org/packages/7e/8b/9286b7e822036a4a977f2f1e851c7345c20528dbd56b687bb67ed68a8ede/rpds_py-0.26.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ff110acded3c22c033e637dd8896e411c7d3a11289b2edf041f86663dbc791e9", size = 231524, upload_time = "2025-07-01T15:55:15.745Z" }, - { url = "https://files.pythonhosted.org/packages/55/07/029b7c45db910c74e182de626dfdae0ad489a949d84a468465cd0ca36355/rpds_py-0.26.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:da619979df60a940cd434084355c514c25cf8eb4cf9a508510682f6c851a4f7a", size = 364292, upload_time = "2025-07-01T15:55:17.001Z" }, - { url = "https://files.pythonhosted.org/packages/13/d1/9b3d3f986216b4d1f584878dca15ce4797aaf5d372d738974ba737bf68d6/rpds_py-0.26.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ea89a2458a1a75f87caabefe789c87539ea4e43b40f18cff526052e35bbb4fdf", size = 350334, upload_time = "2025-07-01T15:55:18.922Z" }, - { url = "https://files.pythonhosted.org/packages/18/98/16d5e7bc9ec715fa9668731d0cf97f6b032724e61696e2db3d47aeb89214/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:feac1045b3327a45944e7dcbeb57530339f6b17baff154df51ef8b0da34c8c12", size = 384875, upload_time = "2025-07-01T15:55:20.399Z" }, - { url = "https://files.pythonhosted.org/packages/f9/13/aa5e2b1ec5ab0e86a5c464d53514c0467bec6ba2507027d35fc81818358e/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b818a592bd69bfe437ee8368603d4a2d928c34cffcdf77c2e761a759ffd17d20", size = 399993, upload_time = "2025-07-01T15:55:21.729Z" }, - { url = "https://files.pythonhosted.org/packages/17/03/8021810b0e97923abdbab6474c8b77c69bcb4b2c58330777df9ff69dc559/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a8b0dd8648709b62d9372fc00a57466f5fdeefed666afe3fea5a6c9539a0331", size = 516683, upload_time = "2025-07-01T15:55:22.918Z" }, - { url = "https://files.pythonhosted.org/packages/dc/b1/da8e61c87c2f3d836954239fdbbfb477bb7b54d74974d8f6fcb34342d166/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6d3498ad0df07d81112aa6ec6c95a7e7b1ae00929fb73e7ebee0f3faaeabad2f", size = 408825, upload_time = "2025-07-01T15:55:24.207Z" }, - { url = "https://files.pythonhosted.org/packages/38/bc/1fc173edaaa0e52c94b02a655db20697cb5fa954ad5a8e15a2c784c5cbdd/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24a4146ccb15be237fdef10f331c568e1b0e505f8c8c9ed5d67759dac58ac246", size = 387292, upload_time = "2025-07-01T15:55:25.554Z" }, - { url = "https://files.pythonhosted.org/packages/7c/eb/3a9bb4bd90867d21916f253caf4f0d0be7098671b6715ad1cead9fe7bab9/rpds_py-0.26.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a9a63785467b2d73635957d32a4f6e73d5e4df497a16a6392fa066b753e87387", size = 420435, upload_time = "2025-07-01T15:55:27.798Z" }, - { url = "https://files.pythonhosted.org/packages/cd/16/e066dcdb56f5632713445271a3f8d3d0b426d51ae9c0cca387799df58b02/rpds_py-0.26.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:de4ed93a8c91debfd5a047be327b7cc8b0cc6afe32a716bbbc4aedca9e2a83af", size = 562410, upload_time = "2025-07-01T15:55:29.057Z" }, - { url = "https://files.pythonhosted.org/packages/60/22/ddbdec7eb82a0dc2e455be44c97c71c232983e21349836ce9f272e8a3c29/rpds_py-0.26.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:caf51943715b12af827696ec395bfa68f090a4c1a1d2509eb4e2cb69abbbdb33", size = 590724, upload_time = "2025-07-01T15:55:30.719Z" }, - { url = "https://files.pythonhosted.org/packages/2c/b4/95744085e65b7187d83f2fcb0bef70716a1ea0a9e5d8f7f39a86e5d83424/rpds_py-0.26.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:4a59e5bc386de021f56337f757301b337d7ab58baa40174fb150accd480bc953", size = 558285, upload_time = "2025-07-01T15:55:31.981Z" }, - { url = "https://files.pythonhosted.org/packages/37/37/6309a75e464d1da2559446f9c811aa4d16343cebe3dbb73701e63f760caa/rpds_py-0.26.0-cp314-cp314-win32.whl", hash = "sha256:92c8db839367ef16a662478f0a2fe13e15f2227da3c1430a782ad0f6ee009ec9", size = 223459, upload_time = "2025-07-01T15:55:33.312Z" }, - { url = "https://files.pythonhosted.org/packages/d9/6f/8e9c11214c46098b1d1391b7e02b70bb689ab963db3b19540cba17315291/rpds_py-0.26.0-cp314-cp314-win_amd64.whl", hash = "sha256:b0afb8cdd034150d4d9f53926226ed27ad15b7f465e93d7468caaf5eafae0d37", size = 236083, upload_time = "2025-07-01T15:55:34.933Z" }, - { url = "https://files.pythonhosted.org/packages/47/af/9c4638994dd623d51c39892edd9d08e8be8220a4b7e874fa02c2d6e91955/rpds_py-0.26.0-cp314-cp314-win_arm64.whl", hash = "sha256:ca3f059f4ba485d90c8dc75cb5ca897e15325e4e609812ce57f896607c1c0867", size = 223291, upload_time = "2025-07-01T15:55:36.202Z" }, - { url = "https://files.pythonhosted.org/packages/4d/db/669a241144460474aab03e254326b32c42def83eb23458a10d163cb9b5ce/rpds_py-0.26.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:5afea17ab3a126006dc2f293b14ffc7ef3c85336cf451564a0515ed7648033da", size = 361445, upload_time = "2025-07-01T15:55:37.483Z" }, - { url = "https://files.pythonhosted.org/packages/3b/2d/133f61cc5807c6c2fd086a46df0eb8f63a23f5df8306ff9f6d0fd168fecc/rpds_py-0.26.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:69f0c0a3df7fd3a7eec50a00396104bb9a843ea6d45fcc31c2d5243446ffd7a7", size = 347206, upload_time = "2025-07-01T15:55:38.828Z" }, - { url = "https://files.pythonhosted.org/packages/05/bf/0e8fb4c05f70273469eecf82f6ccf37248558526a45321644826555db31b/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:801a71f70f9813e82d2513c9a96532551fce1e278ec0c64610992c49c04c2dad", size = 380330, upload_time = "2025-07-01T15:55:40.175Z" }, - { url = "https://files.pythonhosted.org/packages/d4/a8/060d24185d8b24d3923322f8d0ede16df4ade226a74e747b8c7c978e3dd3/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:df52098cde6d5e02fa75c1f6244f07971773adb4a26625edd5c18fee906fa84d", size = 392254, upload_time = "2025-07-01T15:55:42.015Z" }, - { url = "https://files.pythonhosted.org/packages/b9/7b/7c2e8a9ee3e6bc0bae26bf29f5219955ca2fbb761dca996a83f5d2f773fe/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9bc596b30f86dc6f0929499c9e574601679d0341a0108c25b9b358a042f51bca", size = 516094, upload_time = "2025-07-01T15:55:43.603Z" }, - { url = "https://files.pythonhosted.org/packages/75/d6/f61cafbed8ba1499b9af9f1777a2a199cd888f74a96133d8833ce5eaa9c5/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9dfbe56b299cf5875b68eb6f0ebaadc9cac520a1989cac0db0765abfb3709c19", size = 402889, upload_time = "2025-07-01T15:55:45.275Z" }, - { url = "https://files.pythonhosted.org/packages/92/19/c8ac0a8a8df2dd30cdec27f69298a5c13e9029500d6d76718130f5e5be10/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac64f4b2bdb4ea622175c9ab7cf09444e412e22c0e02e906978b3b488af5fde8", size = 384301, upload_time = "2025-07-01T15:55:47.098Z" }, - { url = "https://files.pythonhosted.org/packages/41/e1/6b1859898bc292a9ce5776016c7312b672da00e25cec74d7beced1027286/rpds_py-0.26.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:181ef9b6bbf9845a264f9aa45c31836e9f3c1f13be565d0d010e964c661d1e2b", size = 412891, upload_time = "2025-07-01T15:55:48.412Z" }, - { url = "https://files.pythonhosted.org/packages/ef/b9/ceb39af29913c07966a61367b3c08b4f71fad841e32c6b59a129d5974698/rpds_py-0.26.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:49028aa684c144ea502a8e847d23aed5e4c2ef7cadfa7d5eaafcb40864844b7a", size = 557044, upload_time = "2025-07-01T15:55:49.816Z" }, - { url = "https://files.pythonhosted.org/packages/2f/27/35637b98380731a521f8ec4f3fd94e477964f04f6b2f8f7af8a2d889a4af/rpds_py-0.26.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:e5d524d68a474a9688336045bbf76cb0def88549c1b2ad9dbfec1fb7cfbe9170", size = 585774, upload_time = "2025-07-01T15:55:51.192Z" }, - { url = "https://files.pythonhosted.org/packages/52/d9/3f0f105420fecd18551b678c9a6ce60bd23986098b252a56d35781b3e7e9/rpds_py-0.26.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:c1851f429b822831bd2edcbe0cfd12ee9ea77868f8d3daf267b189371671c80e", size = 554886, upload_time = "2025-07-01T15:55:52.541Z" }, - { url = "https://files.pythonhosted.org/packages/6b/c5/347c056a90dc8dd9bc240a08c527315008e1b5042e7a4cf4ac027be9d38a/rpds_py-0.26.0-cp314-cp314t-win32.whl", hash = "sha256:7bdb17009696214c3b66bb3590c6d62e14ac5935e53e929bcdbc5a495987a84f", size = 219027, upload_time = "2025-07-01T15:55:53.874Z" }, - { url = "https://files.pythonhosted.org/packages/75/04/5302cea1aa26d886d34cadbf2dc77d90d7737e576c0065f357b96dc7a1a6/rpds_py-0.26.0-cp314-cp314t-win_amd64.whl", hash = "sha256:f14440b9573a6f76b4ee4770c13f0b5921f71dde3b6fcb8dabbefd13b7fe05d7", size = 232821, upload_time = "2025-07-01T15:55:55.167Z" }, -] - -[[package]] -name = "ruamel-yaml" -version = "0.18.14" +name = "reuse" +version = "5.0.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "ruamel-yaml-clib", marker = "python_full_version < '3.14' and platform_python_implementation == 'CPython'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/39/87/6da0df742a4684263261c253f00edd5829e6aca970fff69e75028cccc547/ruamel.yaml-0.18.14.tar.gz", hash = "sha256:7227b76aaec364df15936730efbf7d72b30c0b79b1d578bbb8e3dcb2d81f52b7", size = 145511, upload_time = "2025-06-09T08:51:09.828Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/af/6d/6fe4805235e193aad4aaf979160dd1f3c487c57d48b810c816e6e842171b/ruamel.yaml-0.18.14-py3-none-any.whl", hash = "sha256:710ff198bb53da66718c7db27eec4fbcc9aa6ca7204e4c1df2f282b6fe5eb6b2", size = 118570, upload_time = "2025-06-09T08:51:06.348Z" }, -] - -[[package]] -name = "ruamel-yaml-clib" -version = "0.2.12" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/20/84/80203abff8ea4993a87d823a5f632e4d92831ef75d404c9fc78d0176d2b5/ruamel.yaml.clib-0.2.12.tar.gz", hash = "sha256:6c8fbb13ec503f99a91901ab46e0b07ae7941cd527393187039aec586fdfd36f", size = 225315, upload_time = "2024-10-20T10:10:56.22Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/48/41/e7a405afbdc26af961678474a55373e1b323605a4f5e2ddd4a80ea80f628/ruamel.yaml.clib-0.2.12-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:20b0f8dc160ba83b6dcc0e256846e1a02d044e13f7ea74a3d1d56ede4e48c632", size = 133433, upload_time = "2024-10-20T10:12:55.657Z" }, - { url = "https://files.pythonhosted.org/packages/ec/b0/b850385604334c2ce90e3ee1013bd911aedf058a934905863a6ea95e9eb4/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:943f32bc9dedb3abff9879edc134901df92cfce2c3d5c9348f172f62eb2d771d", size = 647362, upload_time = "2024-10-20T10:12:57.155Z" }, - { url = "https://files.pythonhosted.org/packages/44/d0/3f68a86e006448fb6c005aee66565b9eb89014a70c491d70c08de597f8e4/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95c3829bb364fdb8e0332c9931ecf57d9be3519241323c5274bd82f709cebc0c", size = 754118, upload_time = "2024-10-20T10:12:58.501Z" }, - { url = "https://files.pythonhosted.org/packages/52/a9/d39f3c5ada0a3bb2870d7db41901125dbe2434fa4f12ca8c5b83a42d7c53/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:749c16fcc4a2b09f28843cda5a193e0283e47454b63ec4b81eaa2242f50e4ccd", size = 706497, upload_time = "2024-10-20T10:13:00.211Z" }, - { url = "https://files.pythonhosted.org/packages/b0/fa/097e38135dadd9ac25aecf2a54be17ddf6e4c23e43d538492a90ab3d71c6/ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bf165fef1f223beae7333275156ab2022cffe255dcc51c27f066b4370da81e31", size = 698042, upload_time = "2024-10-21T11:26:46.038Z" }, - { url = "https://files.pythonhosted.org/packages/ec/d5/a659ca6f503b9379b930f13bc6b130c9f176469b73b9834296822a83a132/ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:32621c177bbf782ca5a18ba4d7af0f1082a3f6e517ac2a18b3974d4edf349680", size = 745831, upload_time = "2024-10-21T11:26:47.487Z" }, - { url = "https://files.pythonhosted.org/packages/db/5d/36619b61ffa2429eeaefaab4f3374666adf36ad8ac6330d855848d7d36fd/ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b82a7c94a498853aa0b272fd5bc67f29008da798d4f93a2f9f289feb8426a58d", size = 715692, upload_time = "2024-12-11T19:58:17.252Z" }, - { url = "https://files.pythonhosted.org/packages/b1/82/85cb92f15a4231c89b95dfe08b09eb6adca929ef7df7e17ab59902b6f589/ruamel.yaml.clib-0.2.12-cp312-cp312-win32.whl", hash = "sha256:e8c4ebfcfd57177b572e2040777b8abc537cdef58a2120e830124946aa9b42c5", size = 98777, upload_time = "2024-10-20T10:13:01.395Z" }, - { url = "https://files.pythonhosted.org/packages/d7/8f/c3654f6f1ddb75daf3922c3d8fc6005b1ab56671ad56ffb874d908bfa668/ruamel.yaml.clib-0.2.12-cp312-cp312-win_amd64.whl", hash = "sha256:0467c5965282c62203273b838ae77c0d29d7638c8a4e3a1c8bdd3602c10904e4", size = 115523, upload_time = "2024-10-20T10:13:02.768Z" }, - { url = "https://files.pythonhosted.org/packages/29/00/4864119668d71a5fa45678f380b5923ff410701565821925c69780356ffa/ruamel.yaml.clib-0.2.12-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:4c8c5d82f50bb53986a5e02d1b3092b03622c02c2eb78e29bec33fd9593bae1a", size = 132011, upload_time = "2024-10-20T10:13:04.377Z" }, - { url = "https://files.pythonhosted.org/packages/7f/5e/212f473a93ae78c669ffa0cb051e3fee1139cb2d385d2ae1653d64281507/ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux2014_aarch64.whl", hash = "sha256:e7e3736715fbf53e9be2a79eb4db68e4ed857017344d697e8b9749444ae57475", size = 642488, upload_time = "2024-10-20T10:13:05.906Z" }, - { url = "https://files.pythonhosted.org/packages/1f/8f/ecfbe2123ade605c49ef769788f79c38ddb1c8fa81e01f4dbf5cf1a44b16/ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b7e75b4965e1d4690e93021adfcecccbca7d61c7bddd8e22406ef2ff20d74ef", size = 745066, upload_time = "2024-10-20T10:13:07.26Z" }, - { url = "https://files.pythonhosted.org/packages/e2/a9/28f60726d29dfc01b8decdb385de4ced2ced9faeb37a847bd5cf26836815/ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96777d473c05ee3e5e3c3e999f5d23c6f4ec5b0c38c098b3a5229085f74236c6", size = 701785, upload_time = "2024-10-20T10:13:08.504Z" }, - { url = "https://files.pythonhosted.org/packages/84/7e/8e7ec45920daa7f76046578e4f677a3215fe8f18ee30a9cb7627a19d9b4c/ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:3bc2a80e6420ca8b7d3590791e2dfc709c88ab9152c00eeb511c9875ce5778bf", size = 693017, upload_time = "2024-10-21T11:26:48.866Z" }, - { url = "https://files.pythonhosted.org/packages/c5/b3/d650eaade4ca225f02a648321e1ab835b9d361c60d51150bac49063b83fa/ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:e188d2699864c11c36cdfdada94d781fd5d6b0071cd9c427bceb08ad3d7c70e1", size = 741270, upload_time = "2024-10-21T11:26:50.213Z" }, - { url = "https://files.pythonhosted.org/packages/87/b8/01c29b924dcbbed75cc45b30c30d565d763b9c4d540545a0eeecffb8f09c/ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4f6f3eac23941b32afccc23081e1f50612bdbe4e982012ef4f5797986828cd01", size = 709059, upload_time = "2024-12-11T19:58:18.846Z" }, - { url = "https://files.pythonhosted.org/packages/30/8c/ed73f047a73638257aa9377ad356bea4d96125b305c34a28766f4445cc0f/ruamel.yaml.clib-0.2.12-cp313-cp313-win32.whl", hash = "sha256:6442cb36270b3afb1b4951f060eccca1ce49f3d087ca1ca4563a6eb479cb3de6", size = 98583, upload_time = "2024-10-20T10:13:09.658Z" }, - { url = "https://files.pythonhosted.org/packages/b0/85/e8e751d8791564dd333d5d9a4eab0a7a115f7e349595417fd50ecae3395c/ruamel.yaml.clib-0.2.12-cp313-cp313-win_amd64.whl", hash = "sha256:e5b8daf27af0b90da7bb903a876477a9e6d7270be6146906b276605997c7e9a3", size = 115190, upload_time = "2024-10-20T10:13:10.66Z" }, + { name = "attrs" }, + { name = "binaryornot" }, + { name = "boolean-py" }, + { name = "click" }, + { name = "jinja2" }, + { name = "license-expression" }, + { name = "python-debian" }, + { name = "tomlkit" }, ] - -[[package]] -name = "ruff" -version = "0.12.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6c/3d/d9a195676f25d00dbfcf3cf95fdd4c685c497fcfa7e862a44ac5e4e96480/ruff-0.12.2.tar.gz", hash = "sha256:d7b4f55cd6f325cb7621244f19c873c565a08aff5a4ba9c69aa7355f3f7afd3e", size = 4432239, upload_time = "2025-07-03T16:40:19.566Z" } +sdist = { url = "https://files.pythonhosted.org/packages/08/43/35421efe0e69823787b331362e11cc16bb697cd6f19cbed284d421615f14/reuse-5.0.2.tar.gz", hash = "sha256:878016ae5dd29c10bad4606d6676c12a268c12aa9fcfea66403598e16eed085c", size = 358798, upload_time = "2024-11-14T09:33:17.512Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/74/b6/2098d0126d2d3318fd5bec3ad40d06c25d377d95749f7a0c5af17129b3b1/ruff-0.12.2-py3-none-linux_armv6l.whl", hash = "sha256:093ea2b221df1d2b8e7ad92fc6ffdca40a2cb10d8564477a987b44fd4008a7be", size = 10369761, upload_time = "2025-07-03T16:39:38.847Z" }, - { url = "https://files.pythonhosted.org/packages/b1/4b/5da0142033dbe155dc598cfb99262d8ee2449d76920ea92c4eeb9547c208/ruff-0.12.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:09e4cf27cc10f96b1708100fa851e0daf21767e9709e1649175355280e0d950e", size = 11155659, upload_time = "2025-07-03T16:39:42.294Z" }, - { url = "https://files.pythonhosted.org/packages/3e/21/967b82550a503d7c5c5c127d11c935344b35e8c521f52915fc858fb3e473/ruff-0.12.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:8ae64755b22f4ff85e9c52d1f82644abd0b6b6b6deedceb74bd71f35c24044cc", size = 10537769, upload_time = "2025-07-03T16:39:44.75Z" }, - { url = "https://files.pythonhosted.org/packages/33/91/00cff7102e2ec71a4890fb7ba1803f2cdb122d82787c7d7cf8041fe8cbc1/ruff-0.12.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3eb3a6b2db4d6e2c77e682f0b988d4d61aff06860158fdb413118ca133d57922", size = 10717602, upload_time = "2025-07-03T16:39:47.652Z" }, - { url = "https://files.pythonhosted.org/packages/9b/eb/928814daec4e1ba9115858adcda44a637fb9010618721937491e4e2283b8/ruff-0.12.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:73448de992d05517170fc37169cbca857dfeaeaa8c2b9be494d7bcb0d36c8f4b", size = 10198772, upload_time = "2025-07-03T16:39:49.641Z" }, - { url = "https://files.pythonhosted.org/packages/50/fa/f15089bc20c40f4f72334f9145dde55ab2b680e51afb3b55422effbf2fb6/ruff-0.12.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3b8b94317cbc2ae4a2771af641739f933934b03555e51515e6e021c64441532d", size = 11845173, upload_time = "2025-07-03T16:39:52.069Z" }, - { url = "https://files.pythonhosted.org/packages/43/9f/1f6f98f39f2b9302acc161a4a2187b1e3a97634fe918a8e731e591841cf4/ruff-0.12.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:45fc42c3bf1d30d2008023a0a9a0cfb06bf9835b147f11fe0679f21ae86d34b1", size = 12553002, upload_time = "2025-07-03T16:39:54.551Z" }, - { url = "https://files.pythonhosted.org/packages/d8/70/08991ac46e38ddd231c8f4fd05ef189b1b94be8883e8c0c146a025c20a19/ruff-0.12.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce48f675c394c37e958bf229fb5c1e843e20945a6d962cf3ea20b7a107dcd9f4", size = 12171330, upload_time = "2025-07-03T16:39:57.55Z" }, - { url = "https://files.pythonhosted.org/packages/88/a9/5a55266fec474acfd0a1c73285f19dd22461d95a538f29bba02edd07a5d9/ruff-0.12.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:793d8859445ea47591272021a81391350205a4af65a9392401f418a95dfb75c9", size = 11774717, upload_time = "2025-07-03T16:39:59.78Z" }, - { url = "https://files.pythonhosted.org/packages/87/e5/0c270e458fc73c46c0d0f7cf970bb14786e5fdb88c87b5e423a4bd65232b/ruff-0.12.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6932323db80484dda89153da3d8e58164d01d6da86857c79f1961934354992da", size = 11646659, upload_time = "2025-07-03T16:40:01.934Z" }, - { url = "https://files.pythonhosted.org/packages/b7/b6/45ab96070c9752af37f0be364d849ed70e9ccede07675b0ec4e3ef76b63b/ruff-0.12.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:6aa7e623a3a11538108f61e859ebf016c4f14a7e6e4eba1980190cacb57714ce", size = 10604012, upload_time = "2025-07-03T16:40:04.363Z" }, - { url = "https://files.pythonhosted.org/packages/86/91/26a6e6a424eb147cc7627eebae095cfa0b4b337a7c1c413c447c9ebb72fd/ruff-0.12.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:2a4a20aeed74671b2def096bdf2eac610c7d8ffcbf4fb0e627c06947a1d7078d", size = 10176799, upload_time = "2025-07-03T16:40:06.514Z" }, - { url = "https://files.pythonhosted.org/packages/f5/0c/9f344583465a61c8918a7cda604226e77b2c548daf8ef7c2bfccf2b37200/ruff-0.12.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:71a4c550195612f486c9d1f2b045a600aeba851b298c667807ae933478fcef04", size = 11241507, upload_time = "2025-07-03T16:40:08.708Z" }, - { url = "https://files.pythonhosted.org/packages/1c/b7/99c34ded8fb5f86c0280278fa89a0066c3760edc326e935ce0b1550d315d/ruff-0.12.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:4987b8f4ceadf597c927beee65a5eaf994c6e2b631df963f86d8ad1bdea99342", size = 11717609, upload_time = "2025-07-03T16:40:10.836Z" }, - { url = "https://files.pythonhosted.org/packages/51/de/8589fa724590faa057e5a6d171e7f2f6cffe3287406ef40e49c682c07d89/ruff-0.12.2-py3-none-win32.whl", hash = "sha256:369ffb69b70cd55b6c3fc453b9492d98aed98062db9fec828cdfd069555f5f1a", size = 10523823, upload_time = "2025-07-03T16:40:13.203Z" }, - { url = "https://files.pythonhosted.org/packages/94/47/8abf129102ae4c90cba0c2199a1a9b0fa896f6f806238d6f8c14448cc748/ruff-0.12.2-py3-none-win_amd64.whl", hash = "sha256:dca8a3b6d6dc9810ed8f328d406516bf4d660c00caeaef36eb831cf4871b0639", size = 11629831, upload_time = "2025-07-03T16:40:15.478Z" }, - { url = "https://files.pythonhosted.org/packages/e2/1f/72d2946e3cc7456bb837e88000eb3437e55f80db339c840c04015a11115d/ruff-0.12.2-py3-none-win_arm64.whl", hash = "sha256:48d6c6bfb4761df68bc05ae630e24f506755e702d4fb08f08460be778c7ccb12", size = 10735334, upload_time = "2025-07-03T16:40:17.677Z" }, + { url = "https://files.pythonhosted.org/packages/0a/2f/73de654df9e7e5f67d742c1d949b5c0c7c1203e84b2272d9e34a91faaf5c/reuse-5.0.2-cp313-cp313-manylinux_2_40_x86_64.whl", hash = "sha256:7a680f00324e87a72061677a892d8cbabfddf7adcf7a5376aeeed2d78995bbbb", size = 184309, upload_time = "2024-11-14T09:33:15.047Z" }, ] [[package]] @@ -2107,76 +1271,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a6/8f/aea39979f8a7091ad2242a038a0e4c2b463593923ce598a914255dfba9ef/savepagenow-1.3.0-py2.py3-none-any.whl", hash = "sha256:4b0a4fff47254c160a37a20868ab53bb90da3d3f9f96086a9255b2375e39fcbf", size = 5649, upload_time = "2023-07-01T13:31:48.005Z" }, ] -[[package]] -name = "scipy" -version = "1.16.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/81/18/b06a83f0c5ee8cddbde5e3f3d0bb9b702abfa5136ef6d4620ff67df7eee5/scipy-1.16.0.tar.gz", hash = "sha256:b5ef54021e832869c8cfb03bc3bf20366cbcd426e02a58e8a58d7584dfbb8f62", size = 30581216, upload_time = "2025-06-22T16:27:55.782Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/01/c0/c943bc8d2bbd28123ad0f4f1eef62525fa1723e84d136b32965dcb6bad3a/scipy-1.16.0-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:7eb6bd33cef4afb9fa5f1fb25df8feeb1e52d94f21a44f1d17805b41b1da3180", size = 36459071, upload_time = "2025-06-22T16:19:06.605Z" }, - { url = "https://files.pythonhosted.org/packages/99/0d/270e2e9f1a4db6ffbf84c9a0b648499842046e4e0d9b2275d150711b3aba/scipy-1.16.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:1dbc8fdba23e4d80394ddfab7a56808e3e6489176d559c6c71935b11a2d59db1", size = 28490500, upload_time = "2025-06-22T16:19:11.775Z" }, - { url = "https://files.pythonhosted.org/packages/1c/22/01d7ddb07cff937d4326198ec8d10831367a708c3da72dfd9b7ceaf13028/scipy-1.16.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:7dcf42c380e1e3737b343dec21095c9a9ad3f9cbe06f9c05830b44b1786c9e90", size = 20762345, upload_time = "2025-06-22T16:19:15.813Z" }, - { url = "https://files.pythonhosted.org/packages/34/7f/87fd69856569ccdd2a5873fe5d7b5bbf2ad9289d7311d6a3605ebde3a94b/scipy-1.16.0-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:26ec28675f4a9d41587266084c626b02899db373717d9312fa96ab17ca1ae94d", size = 23418563, upload_time = "2025-06-22T16:19:20.746Z" }, - { url = "https://files.pythonhosted.org/packages/f6/f1/e4f4324fef7f54160ab749efbab6a4bf43678a9eb2e9817ed71a0a2fd8de/scipy-1.16.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:952358b7e58bd3197cfbd2f2f2ba829f258404bdf5db59514b515a8fe7a36c52", size = 33203951, upload_time = "2025-06-22T16:19:25.813Z" }, - { url = "https://files.pythonhosted.org/packages/6d/f0/b6ac354a956384fd8abee2debbb624648125b298f2c4a7b4f0d6248048a5/scipy-1.16.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:03931b4e870c6fef5b5c0970d52c9f6ddd8c8d3e934a98f09308377eba6f3824", size = 35070225, upload_time = "2025-06-22T16:19:31.416Z" }, - { url = "https://files.pythonhosted.org/packages/e5/73/5cbe4a3fd4bc3e2d67ffad02c88b83edc88f381b73ab982f48f3df1a7790/scipy-1.16.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:512c4f4f85912767c351a0306824ccca6fd91307a9f4318efe8fdbd9d30562ef", size = 35389070, upload_time = "2025-06-22T16:19:37.387Z" }, - { url = "https://files.pythonhosted.org/packages/86/e8/a60da80ab9ed68b31ea5a9c6dfd3c2f199347429f229bf7f939a90d96383/scipy-1.16.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e69f798847e9add03d512eaf5081a9a5c9a98757d12e52e6186ed9681247a1ac", size = 37825287, upload_time = "2025-06-22T16:19:43.375Z" }, - { url = "https://files.pythonhosted.org/packages/ea/b5/29fece1a74c6a94247f8a6fb93f5b28b533338e9c34fdcc9cfe7a939a767/scipy-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:adf9b1999323ba335adc5d1dc7add4781cb5a4b0ef1e98b79768c05c796c4e49", size = 38431929, upload_time = "2025-06-22T16:19:49.385Z" }, - { url = "https://files.pythonhosted.org/packages/46/95/0746417bc24be0c2a7b7563946d61f670a3b491b76adede420e9d173841f/scipy-1.16.0-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:e9f414cbe9ca289a73e0cc92e33a6a791469b6619c240aa32ee18abdce8ab451", size = 36418162, upload_time = "2025-06-22T16:19:56.3Z" }, - { url = "https://files.pythonhosted.org/packages/19/5a/914355a74481b8e4bbccf67259bbde171348a3f160b67b4945fbc5f5c1e5/scipy-1.16.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:bbba55fb97ba3cdef9b1ee973f06b09d518c0c7c66a009c729c7d1592be1935e", size = 28465985, upload_time = "2025-06-22T16:20:01.238Z" }, - { url = "https://files.pythonhosted.org/packages/58/46/63477fc1246063855969cbefdcee8c648ba4b17f67370bd542ba56368d0b/scipy-1.16.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:58e0d4354eacb6004e7aa1cd350e5514bd0270acaa8d5b36c0627bb3bb486974", size = 20737961, upload_time = "2025-06-22T16:20:05.913Z" }, - { url = "https://files.pythonhosted.org/packages/93/86/0fbb5588b73555e40f9d3d6dde24ee6fac7d8e301a27f6f0cab9d8f66ff2/scipy-1.16.0-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:75b2094ec975c80efc273567436e16bb794660509c12c6a31eb5c195cbf4b6dc", size = 23377941, upload_time = "2025-06-22T16:20:10.668Z" }, - { url = "https://files.pythonhosted.org/packages/ca/80/a561f2bf4c2da89fa631b3cbf31d120e21ea95db71fd9ec00cb0247c7a93/scipy-1.16.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:6b65d232157a380fdd11a560e7e21cde34fdb69d65c09cb87f6cc024ee376351", size = 33196703, upload_time = "2025-06-22T16:20:16.097Z" }, - { url = "https://files.pythonhosted.org/packages/11/6b/3443abcd0707d52e48eb315e33cc669a95e29fc102229919646f5a501171/scipy-1.16.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1d8747f7736accd39289943f7fe53a8333be7f15a82eea08e4afe47d79568c32", size = 35083410, upload_time = "2025-06-22T16:20:21.734Z" }, - { url = "https://files.pythonhosted.org/packages/20/ab/eb0fc00e1e48961f1bd69b7ad7e7266896fe5bad4ead91b5fc6b3561bba4/scipy-1.16.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:eb9f147a1b8529bb7fec2a85cf4cf42bdfadf9e83535c309a11fdae598c88e8b", size = 35387829, upload_time = "2025-06-22T16:20:27.548Z" }, - { url = "https://files.pythonhosted.org/packages/57/9e/d6fc64e41fad5d481c029ee5a49eefc17f0b8071d636a02ceee44d4a0de2/scipy-1.16.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d2b83c37edbfa837a8923d19c749c1935ad3d41cf196006a24ed44dba2ec4358", size = 37841356, upload_time = "2025-06-22T16:20:35.112Z" }, - { url = "https://files.pythonhosted.org/packages/7c/a7/4c94bbe91f12126b8bf6709b2471900577b7373a4fd1f431f28ba6f81115/scipy-1.16.0-cp313-cp313-win_amd64.whl", hash = "sha256:79a3c13d43c95aa80b87328a46031cf52508cf5f4df2767602c984ed1d3c6bbe", size = 38403710, upload_time = "2025-06-22T16:21:54.473Z" }, - { url = "https://files.pythonhosted.org/packages/47/20/965da8497f6226e8fa90ad3447b82ed0e28d942532e92dd8b91b43f100d4/scipy-1.16.0-cp313-cp313t-macosx_10_14_x86_64.whl", hash = "sha256:f91b87e1689f0370690e8470916fe1b2308e5b2061317ff76977c8f836452a47", size = 36813833, upload_time = "2025-06-22T16:20:43.925Z" }, - { url = "https://files.pythonhosted.org/packages/28/f4/197580c3dac2d234e948806e164601c2df6f0078ed9f5ad4a62685b7c331/scipy-1.16.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:88a6ca658fb94640079e7a50b2ad3b67e33ef0f40e70bdb7dc22017dae73ac08", size = 28974431, upload_time = "2025-06-22T16:20:51.302Z" }, - { url = "https://files.pythonhosted.org/packages/8a/fc/e18b8550048d9224426e76906694c60028dbdb65d28b1372b5503914b89d/scipy-1.16.0-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:ae902626972f1bd7e4e86f58fd72322d7f4ec7b0cfc17b15d4b7006efc385176", size = 21246454, upload_time = "2025-06-22T16:20:57.276Z" }, - { url = "https://files.pythonhosted.org/packages/8c/48/07b97d167e0d6a324bfd7484cd0c209cc27338b67e5deadae578cf48e809/scipy-1.16.0-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:8cb824c1fc75ef29893bc32b3ddd7b11cf9ab13c1127fe26413a05953b8c32ed", size = 23772979, upload_time = "2025-06-22T16:21:03.363Z" }, - { url = "https://files.pythonhosted.org/packages/4c/4f/9efbd3f70baf9582edf271db3002b7882c875ddd37dc97f0f675ad68679f/scipy-1.16.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:de2db7250ff6514366a9709c2cba35cb6d08498e961cba20d7cff98a7ee88938", size = 33341972, upload_time = "2025-06-22T16:21:11.14Z" }, - { url = "https://files.pythonhosted.org/packages/3f/dc/9e496a3c5dbe24e76ee24525155ab7f659c20180bab058ef2c5fa7d9119c/scipy-1.16.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e85800274edf4db8dd2e4e93034f92d1b05c9421220e7ded9988b16976f849c1", size = 35185476, upload_time = "2025-06-22T16:21:19.156Z" }, - { url = "https://files.pythonhosted.org/packages/ce/b3/21001cff985a122ba434c33f2c9d7d1dc3b669827e94f4fc4e1fe8b9dfd8/scipy-1.16.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4f720300a3024c237ace1cb11f9a84c38beb19616ba7c4cdcd771047a10a1706", size = 35570990, upload_time = "2025-06-22T16:21:27.797Z" }, - { url = "https://files.pythonhosted.org/packages/e5/d3/7ba42647d6709251cdf97043d0c107e0317e152fa2f76873b656b509ff55/scipy-1.16.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:aad603e9339ddb676409b104c48a027e9916ce0d2838830691f39552b38a352e", size = 37950262, upload_time = "2025-06-22T16:21:36.976Z" }, - { url = "https://files.pythonhosted.org/packages/eb/c4/231cac7a8385394ebbbb4f1ca662203e9d8c332825ab4f36ffc3ead09a42/scipy-1.16.0-cp313-cp313t-win_amd64.whl", hash = "sha256:f56296fefca67ba605fd74d12f7bd23636267731a72cb3947963e76b8c0a25db", size = 38515076, upload_time = "2025-06-22T16:21:45.694Z" }, -] - -[[package]] -name = "seaborn" -version = "0.13.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "matplotlib" }, - { name = "numpy" }, - { name = "pandas" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/86/59/a451d7420a77ab0b98f7affa3a1d78a313d2f7281a57afb1a34bae8ab412/seaborn-0.13.2.tar.gz", hash = "sha256:93e60a40988f4d65e9f4885df477e2fdaff6b73a9ded434c1ab356dd57eefff7", size = 1457696, upload_time = "2024-01-25T13:21:52.551Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/83/11/00d3c3dfc25ad54e731d91449895a79e4bf2384dc3ac01809010ba88f6d5/seaborn-0.13.2-py3-none-any.whl", hash = "sha256:636f8336facf092165e27924f223d3c62ca560b1f2bb5dff7ab7fad265361987", size = 294914, upload_time = "2024-01-25T13:21:49.598Z" }, -] - -[[package]] -name = "shellingham" -version = "1.5.4" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310, upload_time = "2023-10-24T04:13:40.426Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755, upload_time = "2023-10-24T04:13:38.866Z" }, -] - -[[package]] -name = "simpleeval" -version = "1.0.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ff/6f/15be211749430f52f2c8f0c69158a6fc961c03aac93fa28d44d1a6f5ebc7/simpleeval-1.0.3.tar.gz", hash = "sha256:67bbf246040ac3b57c29cf048657b9cf31d4e7b9d6659684daa08ca8f1e45829", size = 24358, upload_time = "2024-11-02T10:29:46.912Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/e9/e58082fbb8cecbb6fb4133033c40cc50c248b1a331582be3a0f39138d65b/simpleeval-1.0.3-py3-none-any.whl", hash = "sha256:e3bdbb8c82c26297c9a153902d0fd1858a6c3774bf53ff4f134788c3f2035c38", size = 15762, upload_time = "2024-11-02T10:29:45.706Z" }, -] - [[package]] name = "six" version = "1.17.0" @@ -2195,15 +1289,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-py3-none-any.whl", hash = "sha256:b30115f0def7d7531d22a0fb6502488d879e75b260a9db4d0819cfb25403af5e", size = 24303, upload_time = "2025-01-02T07:14:38.724Z" }, ] -[[package]] -name = "soupsieve" -version = "2.7" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/3f/f4/4a80cd6ef364b2e8b65b15816a843c0980f7a5a2b4dc701fc574952aa19f/soupsieve-2.7.tar.gz", hash = "sha256:ad282f9b6926286d2ead4750552c8a6142bc4c783fd66b0293547c8fe6ae126a", size = 103418, upload_time = "2025-04-20T18:50:08.518Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/9c/0e6afc12c269578be5c0c1c9f4b49a8d32770a080260c333ac04cc1c832d/soupsieve-2.7-py3-none-any.whl", hash = "sha256:6e60cc5c1ffaf1cebcc12e8188320b72071e922c2e897f737cadce79ad5d30c4", size = 36677, upload_time = "2025-04-20T18:50:07.196Z" }, -] - [[package]] name = "stack-data" version = "0.6.3" @@ -2218,60 +1303,20 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521, upload_time = "2023-09-30T13:58:03.53Z" }, ] -[[package]] -name = "structlog" -version = "25.4.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/79/b9/6e672db4fec07349e7a8a8172c1a6ae235c58679ca29c3f86a61b5e59ff3/structlog-25.4.0.tar.gz", hash = "sha256:186cd1b0a8ae762e29417095664adf1d6a31702160a46dacb7796ea82f7409e4", size = 1369138, upload_time = "2025-06-02T08:21:12.971Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/4a/97ee6973e3a73c74c8120d59829c3861ea52210667ec3e7a16045c62b64d/structlog-25.4.0-py3-none-any.whl", hash = "sha256:fe809ff5c27e557d14e613f45ca441aabda051d119ee5a0102aaba6ce40eed2c", size = 68720, upload_time = "2025-06-02T08:21:11.43Z" }, -] - -[[package]] -name = "tableschema-to-template" -version = "0.0.13" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "jsonschema" }, - { name = "pyyaml" }, - { name = "xlsxwriter" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/23/2d/5b5c0127e959a715c5365b3b491846fba5bc1fb7f94370cc3a4fb3f51f68/tableschema-to-template-0.0.13.tar.gz", hash = "sha256:2d8d2250efb840e0ecb9012c5e879a82ef68f65dd86bdff574200fdfc978ff1c", size = 13564, upload_time = "2023-02-01T21:53:17.238Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9f/7f/3c129377d9b815c0bb92b8c24bbecabe5e6b13b831f38924f80d2e5b40b2/tableschema_to_template-0.0.13-py3-none-any.whl", hash = "sha256:4905500a4235740654230c3223629d26fdccb7a0457ec1d0110ea102c4f1146c", size = 14860, upload_time = "2023-02-01T21:53:16.02Z" }, -] - -[[package]] -name = "tabulate" -version = "0.9.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ec/fe/802052aecb21e3797b8f7902564ab6ea0d60ff8ca23952079064155d1ae1/tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c", size = 81090, upload_time = "2022-10-06T17:21:48.54Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/40/44/4a5f08c96eb108af5cb50b41f76142f0afa346dfa99d5296fe7202a11854/tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f", size = 35252, upload_time = "2022-10-06T17:21:44.262Z" }, -] - [[package]] name = "technologydata" source = { editable = "." } dependencies = [ - { name = "frictionless", extra = ["pandas"] }, - { name = "hdx-python-country" }, { name = "ipykernel" }, - { name = "matplotlib" }, { name = "mypy" }, { name = "pandas" }, - { name = "pint" }, { name = "pre-commit" }, - { name = "pydeflate" }, { name = "pytest" }, - { name = "python-calamine" }, + { name = "pytest-cov" }, + { name = "pytest-xdist" }, { name = "requests" }, - { name = "ruff" }, + { name = "reuse" }, { name = "savepagenow" }, - { name = "scipy" }, - { name = "seaborn" }, - { name = "tqdm" }, - { name = "ucumvert" }, ] [package.optional-dependencies] @@ -2287,10 +1332,7 @@ docs = [ [package.metadata] requires-dist = [ - { name = "frictionless", extras = ["pandas"], specifier = ">=5.18.0" }, - { name = "hdx-python-country", specifier = ">=3.9.4" }, { name = "ipykernel", specifier = ">=6.29.5" }, - { name = "matplotlib", specifier = ">=3.10.1" }, { name = "mkdocs-autolinks-plugin", marker = "extra == 'docs'", specifier = ">=0.7.1" }, { name = "mkdocs-git-revision-date-localized-plugin", marker = "extra == 'docs'", specifier = ">=1.4.7" }, { name = "mkdocs-material", marker = "extra == 'docs'", specifier = ">=9.6.14" }, @@ -2300,37 +1342,23 @@ requires-dist = [ { name = "mkdocstrings-python", marker = "extra == 'docs'", specifier = ">=1.16.11" }, { name = "mypy", specifier = ">=1.15.0" }, { name = "pandas", specifier = ">=2.2.3" }, - { name = "pint", specifier = ">=0.24.4" }, { name = "pre-commit", specifier = ">=4.2.0" }, - { name = "pydeflate", specifier = ">=2.1.3" }, { name = "pytest", specifier = ">=8.3.5" }, - { name = "python-calamine", specifier = ">=0.3.1" }, + { name = "pytest-cov", specifier = ">=6.2.1" }, + { name = "pytest-xdist", specifier = ">=3.8.0" }, { name = "requests", specifier = ">=2.32.3" }, - { name = "ruff", specifier = ">=0.11.0" }, + { name = "reuse", specifier = ">=5.0.2" }, { name = "savepagenow", specifier = ">=1.3.0" }, - { name = "scipy", specifier = ">=1.15.2" }, - { name = "seaborn", specifier = ">=0.13.2" }, - { name = "tqdm", specifier = ">=4.67.1" }, - { name = "ucumvert", specifier = ">=0.2.1" }, ] provides-extras = ["docs"] [[package]] -name = "tenacity" -version = "9.1.2" +name = "tomlkit" +version = "0.13.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0a/d4/2b0cd0fe285e14b36db076e78c93766ff1d529d70408bd1d2a5a84f1d929/tenacity-9.1.2.tar.gz", hash = "sha256:1169d376c297e7de388d18b4481760d478b0e99a777cad3a9c86e556f4b697cb", size = 48036, upload_time = "2025-04-02T08:25:09.966Z" } +sdist = { url = "https://files.pythonhosted.org/packages/cc/18/0bbf3884e9eaa38819ebe46a7bd25dcd56b67434402b66a58c4b8e552575/tomlkit-0.13.3.tar.gz", hash = "sha256:430cf247ee57df2b94ee3fbe588e71d362a941ebb545dec29b53961d61add2a1", size = 185207, upload_time = "2025-06-05T07:13:44.947Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e5/30/643397144bfbfec6f6ef821f36f33e57d35946c44a2352d3c9f0ae847619/tenacity-9.1.2-py3-none-any.whl", hash = "sha256:f77bf36710d8b73a50b2dd155c97b870017ad21afe6ab300326b0371b3b05138", size = 28248, upload_time = "2025-04-02T08:25:07.678Z" }, -] - -[[package]] -name = "text-unidecode" -version = "1.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ab/e2/e9a00f0ccb71718418230718b3d900e71a5d16e701a3dae079a21e9cd8f8/text-unidecode-1.3.tar.gz", hash = "sha256:bad6603bb14d279193107714b288be206cac565dfa49aa5b105294dd5c4aab93", size = 76885, upload_time = "2019-08-30T21:36:45.405Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a6/a5/c0b6468d3824fe3fde30dbb5e1f687b291608f9473681bbf7dabbf5a87d7/text_unidecode-1.3-py2.py3-none-any.whl", hash = "sha256:1311f10e8b895935241623731c2ba64f4c455287888b18189350b67134a822e8", size = 78154, upload_time = "2019-08-30T21:37:03.543Z" }, + { url = "https://files.pythonhosted.org/packages/bd/75/8539d011f6be8e29f339c42e633aae3cb73bffa95dd0f9adec09b9c58e85/tomlkit-0.13.3-py3-none-any.whl", hash = "sha256:c89c649d79ee40629a9fda55f8ace8c6a1b42deb912b2a8fd8d942ddadb606b0", size = 38901, upload_time = "2025-06-05T07:13:43.546Z" }, ] [[package]] @@ -2352,18 +1380,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/55/a7/535c44c7bea4578e48281d83c615219f3ab19e6abc67625ef637c73987be/tornado-6.5.1-cp39-abi3-win_arm64.whl", hash = "sha256:02420a0eb7bf617257b9935e2b754d1b63897525d8a289c9d65690d580b4dcf7", size = 443596, upload_time = "2025-05-22T18:15:37.433Z" }, ] -[[package]] -name = "tqdm" -version = "4.67.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/a8/4b/29b4ef32e036bb34e4ab51796dd745cdba7ed47ad142a9f4a1eb8e0c744d/tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2", size = 169737, upload_time = "2024-11-24T20:12:22.481Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2", size = 78540, upload_time = "2024-11-24T20:12:19.698Z" }, -] - [[package]] name = "traitlets" version = "5.14.3" @@ -2373,21 +1389,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359, upload_time = "2024-04-19T11:11:46.763Z" }, ] -[[package]] -name = "typer" -version = "0.16.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "click" }, - { name = "rich" }, - { name = "shellingham" }, - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/c5/8c/7d682431efca5fd290017663ea4588bf6f2c6aad085c7f108c5dbc316e70/typer-0.16.0.tar.gz", hash = "sha256:af377ffaee1dbe37ae9440cb4e8f11686ea5ce4e9bae01b84ae7c63b87f1dd3b", size = 102625, upload_time = "2025-05-26T14:30:31.824Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/76/42/3efaf858001d2c2913de7f354563e3a3a2f0decae3efe98427125a8f441e/typer-0.16.0-py3-none-any.whl", hash = "sha256:1f79bed11d4d02d4310e3c1b7ba594183bcedb0ac73b27a9e5f28f6fb5b98855", size = 46317, upload_time = "2025-05-26T14:30:30.523Z" }, -] - [[package]] name = "typing-extensions" version = "4.14.1" @@ -2397,18 +1398,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b5/00/d631e67a838026495268c2f6884f3711a15a9a2a96cd244fdaea53b823fb/typing_extensions-4.14.1-py3-none-any.whl", hash = "sha256:d1e1e3b58374dc93031d6eda2420a48ea44a36c2b4766a4fdeb3710755731d76", size = 43906, upload_time = "2025-07-04T13:28:32.743Z" }, ] -[[package]] -name = "typing-inspection" -version = "0.4.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/f8/b1/0c11f5058406b3af7609f121aaa6b609744687f1d158b3c3a5bf4cc94238/typing_inspection-0.4.1.tar.gz", hash = "sha256:6ae134cc0203c33377d43188d4064e9b357dba58cff3185f22924610e70a9d28", size = 75726, upload_time = "2025-05-21T18:55:23.885Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/17/69/cd203477f944c353c31bade965f880aa1061fd6bf05ded0726ca845b6ff7/typing_inspection-0.4.1-py3-none-any.whl", hash = "sha256:389055682238f53b04f7badcb49b989835495a96700ced5dab2d8feae4b26f51", size = 14552, upload_time = "2025-05-21T18:55:22.152Z" }, -] - [[package]] name = "tzdata" version = "2025.2" @@ -2418,28 +1407,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8", size = 347839, upload_time = "2025-03-23T13:54:41.845Z" }, ] -[[package]] -name = "ucumvert" -version = "0.2.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "lark" }, - { name = "pint" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/d1/27/cfeeea46e92d30edd1f8938e7630798e92c2cc8dbb0493a26373d850b3c4/ucumvert-0.2.2.tar.gz", hash = "sha256:f6218839a36b0e74e671f16d1f9f4aa1a2b530527a3c126031515c13273b1343", size = 52281, upload_time = "2025-05-10T22:18:25.204Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6b/b5/be9107654e04f7bcc16138598f2bccfde20952dfe1115f5289b5a7c5717e/ucumvert-0.2.2-py3-none-any.whl", hash = "sha256:cd5b9e93f9dfc52d4dbe3f4e790d0b426934185823a611fd6898bb4e3d6f4c86", size = 53201, upload_time = "2025-05-10T22:18:23.304Z" }, -] - -[[package]] -name = "unidecode" -version = "1.4.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/94/7d/a8a765761bbc0c836e397a2e48d498305a865b70a8600fd7a942e85dcf63/Unidecode-1.4.0.tar.gz", hash = "sha256:ce35985008338b676573023acc382d62c264f307c8f7963733405add37ea2b23", size = 200149, upload_time = "2025-04-24T08:45:03.798Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/8f/b7/559f59d57d18b44c6d1250d2eeaa676e028b9c527431f5d0736478a73ba1/Unidecode-1.4.0-py3-none-any.whl", hash = "sha256:c3c7606c27503ad8d501270406e345ddb480a7b5f38827eafe4fa82a137f0021", size = 235837, upload_time = "2025-04-24T08:45:01.609Z" }, -] - [[package]] name = "urllib3" version = "2.5.0" @@ -2449,15 +1416,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795, upload_time = "2025-06-18T14:07:40.39Z" }, ] -[[package]] -name = "validators" -version = "0.35.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/53/66/a435d9ae49850b2f071f7ebd8119dd4e84872b01630d6736761e6e7fd847/validators-0.35.0.tar.gz", hash = "sha256:992d6c48a4e77c81f1b4daba10d16c3a9bb0dbb79b3a19ea847ff0928e70497a", size = 73399, upload_time = "2025-05-01T05:42:06.7Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fa/6e/3e955517e22cbdd565f2f8b2e73d52528b14b8bcfdb04f62466b071de847/validators-0.35.0-py3-none-any.whl", hash = "sha256:e8c947097eae7892cb3d26868d637f79f47b4a0554bc6b80065dfe5aac3705dd", size = 44712, upload_time = "2025-05-01T05:42:04.203Z" }, -] - [[package]] name = "virtualenv" version = "20.31.2" @@ -2496,20 +1454,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/33/e8/e40370e6d74ddba47f002a32919d91310d6074130fe4e17dabcafc15cbf1/watchdog-6.0.0-py3-none-win_ia64.whl", hash = "sha256:a1914259fa9e1454315171103c6a30961236f508b9b623eae470268bbcc6a22f", size = 79067, upload_time = "2024-11-01T14:07:11.845Z" }, ] -[[package]] -name = "wbgapi" -version = "1.0.12" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pyyaml" }, - { name = "requests" }, - { name = "tabulate" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/d7/4a/f55695bd1c9f1996b675b6e9e980eef40ebdb5e4bf8774c059c31af6ade1/wbgapi-1.0.12.tar.gz", hash = "sha256:338c3c768bd120b80596b48fa0449ecabc93513ac989c55671dce579dbb3a5be", size = 33590, upload_time = "2022-07-05T15:07:22.772Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/00/12/224030af4886e119a3d03b709f7130e9601a4d15332e1d6a35671b25a4de/wbgapi-1.0.12-py3-none-any.whl", hash = "sha256:c5a1e1683b03d4264d287627c2562932f30e7f5c65509b812cb2e3de7d32633f", size = 36385, upload_time = "2022-07-05T15:07:20.606Z" }, -] - [[package]] name = "wcwidth" version = "0.2.13" @@ -2518,66 +1462,3 @@ sdist = { url = "https://files.pythonhosted.org/packages/6c/63/53559446a878410fc wheels = [ { url = "https://files.pythonhosted.org/packages/fd/84/fd2ba7aafacbad3c4201d395674fc6348826569da3c0937e75505ead3528/wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859", size = 34166, upload_time = "2024-01-06T02:10:55.763Z" }, ] - -[[package]] -name = "wheel" -version = "0.45.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8a/98/2d9906746cdc6a6ef809ae6338005b3f21bb568bea3165cfc6a243fdc25c/wheel-0.45.1.tar.gz", hash = "sha256:661e1abd9198507b1409a20c02106d9670b2576e916d58f520316666abca6729", size = 107545, upload_time = "2024-11-23T00:18:23.513Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0b/2c/87f3254fd8ffd29e4c02732eee68a83a1d3c346ae39bc6822dcbcb697f2b/wheel-0.45.1-py3-none-any.whl", hash = "sha256:708e7481cc80179af0e556bbf0cc00b8444c7321e2700b8d8580231d13017248", size = 72494, upload_time = "2024-11-23T00:18:21.207Z" }, -] - -[[package]] -name = "win32-setctime" -version = "1.2.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b3/8f/705086c9d734d3b663af0e9bb3d4de6578d08f46b1b101c2442fd9aecaa2/win32_setctime-1.2.0.tar.gz", hash = "sha256:ae1fdf948f5640aae05c511ade119313fb6a30d7eabe25fef9764dca5873c4c0", size = 4867, upload_time = "2024-12-07T15:28:28.314Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e1/07/c6fe3ad3e685340704d314d765b7912993bcb8dc198f0e7a89382d37974b/win32_setctime-1.2.0-py3-none-any.whl", hash = "sha256:95d644c4e708aba81dc3704a116d8cbc974d70b3bdb8be1d150e36be6e9d1390", size = 4083, upload_time = "2024-12-07T15:28:26.465Z" }, -] - -[[package]] -name = "xlrd" -version = "2.0.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/07/5a/377161c2d3538d1990d7af382c79f3b2372e880b65de21b01b1a2b78691e/xlrd-2.0.2.tar.gz", hash = "sha256:08b5e25de58f21ce71dc7db3b3b8106c1fa776f3024c54e45b45b374e89234c9", size = 100167, upload_time = "2025-06-14T08:46:39.039Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/1a/62/c8d562e7766786ba6587d09c5a8ba9f718ed3fa8af7f4553e8f91c36f302/xlrd-2.0.2-py2.py3-none-any.whl", hash = "sha256:ea762c3d29f4cca48d82df517b6d89fbce4db3107f9d78713e48cd321d5c9aa9", size = 96555, upload_time = "2025-06-14T08:46:37.766Z" }, -] - -[[package]] -name = "xlrd3" -version = "1.1.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/79/db/88d8d49ddacc203956ecb98dc86c6ffeee6e933ef1f50da9b369de518f7f/xlrd3-1.1.0.tar.gz", hash = "sha256:20e6ed2e5f7f8b4ab61e30faffebceff6fab348332b4c915373f0a72742dc177", size = 58919847, upload_time = "2021-04-25T12:27:10.03Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5d/08/fce745025e58f160e7dcb5a45d4d43eb0bd44c0d8851425be87ef90271fa/xlrd3-1.1.0-py2.py3-none-any.whl", hash = "sha256:8e8e808f938144e7936a6e07c1d57be7a0f6c6f5b37c9c67974b43246d8aacb6", size = 105268, upload_time = "2021-04-25T12:26:55.264Z" }, -] - -[[package]] -name = "xlsx2csv" -version = "0.8.4" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/36/20/94860286a308a4213581c1beacd4fc7be724250c03583fcff23aaa6107bb/xlsx2csv-0.8.4.tar.gz", hash = "sha256:2aa809888826f6af5b26c77fc7f613f2bbeada0d8cc09e5a58e0f59684bb6911", size = 221390, upload_time = "2024-11-19T17:06:07.818Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c4/c0/15c21556362c67f1155f3643a375d50ac67559b82c768e64e800a42a2577/xlsx2csv-0.8.4-py3-none-any.whl", hash = "sha256:52ab873fc7b2f2ca75d14aee8bd1985a9f5c1bcb3cc7b80df7a5d57a40a67473", size = 15904, upload_time = "2024-11-19T17:06:05.362Z" }, -] - -[[package]] -name = "xlsxwriter" -version = "3.2.5" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a7/47/7704bac42ac6fe1710ae099b70e6a1e68ed173ef14792b647808c357da43/xlsxwriter-3.2.5.tar.gz", hash = "sha256:7e88469d607cdc920151c0ab3ce9cf1a83992d4b7bc730c5ffdd1a12115a7dbe", size = 213306, upload_time = "2025-06-17T08:59:14.619Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fa/34/a22e6664211f0c8879521328000bdcae9bf6dbafa94a923e531f6d5b3f73/xlsxwriter-3.2.5-py3-none-any.whl", hash = "sha256:4f4824234e1eaf9d95df9a8fe974585ff91d0f5e3d3f12ace5b71e443c1c6abd", size = 172347, upload_time = "2025-06-17T08:59:13.453Z" }, -] - -[[package]] -name = "xlwt" -version = "1.3.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/06/97/56a6f56ce44578a69343449aa5a0d98eefe04085d69da539f3034e2cd5c1/xlwt-1.3.0.tar.gz", hash = "sha256:c59912717a9b28f1a3c2a98fd60741014b06b043936dcecbc113eaaada156c88", size = 153929, upload_time = "2017-08-22T06:47:16.498Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/44/48/def306413b25c3d01753603b1a222a011b8621aed27cd7f89cbc27e6b0f4/xlwt-1.3.0-py2.py3-none-any.whl", hash = "sha256:a082260524678ba48a297d922cc385f58278b8aa68741596a87de01a9c628b2e", size = 99981, upload_time = "2017-08-22T06:47:15.281Z" }, -] From 3f69fb19c6df9bb0014cc9df3242a500d4dd466f Mon Sep 17 00:00:00 2001 From: Johannes HAMPP <42553970+euronion@users.noreply.github.com> Date: Thu, 31 Jul 2025 16:39:23 +0200 Subject: [PATCH 05/43] Unit-ful parameter (#15) * code: Flatten class structure by removing UnitValue * code: add reuse dependency * code: add tests for parameters.py * code: Require carrier for heating_value attribute * code: Add default values for optional attributes * code: Make sources for Parameter optional * code: Implement arithmetic operations on Parameters * code: Add start of custom unit registry and helpers * code: Move test into single file and linting * code: Add tests for extraction from pint.Unit objects * code: Add tests for currency conversion rates * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * code: Add tests for custom UnitRegistry * code: Rename currency code cache file * code: Dedicated registries for heating values and carriers * code: Add instructions files for GH copilot * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * code: Fix test using wrong ureg * code: use lru_cache * code: Add function to map from currency code to ISO3 * code: New frozendict dependency * code: remove unused import * code: add debug msgs * code: Fix usage of wrong registry for currency units * code: Ensure canonical names are used for units, carriers, hvs * code: Adjust test for canonical name usage * code: docstrings * doc: improve docstring * code: Disallow currency conversion in unit conversion * code: Name capture groups in regex * code: formatting * code: Fix test for disallowed currency conversion in .to * code: Draft currency conversion method * code: Rename arguments for consistency * code: Fix failing test due to wrong UnitRegistry being used * code: Add missing renames * code: Wait... didn't I already commit this? * code: Fix wrong dtype in function call * code: Fix issue with conversion rates * code: Fix alias for source arguments * code: Raise errors on invalid currency conversion calls * doc: Update docstream with more options * code: Fix tests to comply with new syntax * code: Bugfix wrong logic check in conversion rate function * code: Add dependency for pytest-xdist * code: Fix issue with cache when calling method repeadetly from different uregs * code: Fix mypy errors * code: Adjust ValueError msg for incompatible heating values * code: Add tests for heating value operations * code: Add test for carrier compatabilities * doc: Add draft doc for parameters.py * code: add stub for heating value conversion * code: add equality and power operations on parameters * code: remove decorator for updating pint attributes in favour of direct calls * code: Implement conversion between LHV and HHV * code: Bugfix incompatible carrier in dividing Parameter objects * code: Outsource HHVs and LHVs for energy carriers * doc: Update puml * doc: Add details on change_heating_value(...) function * code: fix wrong heating values in tests * code: Add simple combination logic for provenance/note/sources * code: start to solve mypy annotations * code: new update * code: in between commit * data: update solar_photovoltaics_example_03/technologies.json * data: update technologies.json * data: update example_04 data * code: update to parameter.py * code: remove any reference to UnitValue * code: switch off type checking for UnitRegistry * code: solve mypy comment in units.py * doc: update class-diagram * ci: ai-prototype and unit test fix * code: update parameter eq method * code: docstrings for Parameter methods and example_parameter * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * data: add input parameters.csv for currency_conversion * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * code/data: add tests for change_currency * code: add extra check on magnitude * code: update change_currency * code: latest comments --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Fabrizio Finozzi --- .github/instructions/copilot-instructions.md | 43 + .github/workflows/ci.yaml | 4 +- REUSE.toml | 2 +- docs/CLAUDE.md | 26 - docs/class-diagram.puml | 49 +- docs/parameter.md | 137 +++ pyproject.toml | 5 + technologydata/__init__.py | 18 +- technologydata/constants/__init__.py | 12 + technologydata/constants/energy_density.py | 61 ++ technologydata/parameter.py | 652 ++++++++++++- technologydata/source.py | 11 +- technologydata/unit_value.py | 66 -- technologydata/utils/carriers.txt | 29 + technologydata/utils/heating_values.txt | 17 + technologydata/utils/units.py | 409 ++++++++ test/conftest.py | 15 + .../WB_CNY_2020/parameters.csv | 15 + .../WB_EUR_2020/parameters.csv | 15 + .../WB_USD_2020/parameters.csv | 15 + .../technologies.json | 66 +- .../technologies.json | 68 +- test/test_parameter.py | 717 ++++++++++++++ test/test_source.py | 2 +- test/test_units.py | 590 ++++++++++++ uv.lock | 905 ++++++++++++++++++ 26 files changed, 3710 insertions(+), 239 deletions(-) create mode 100644 .github/instructions/copilot-instructions.md delete mode 100644 docs/CLAUDE.md create mode 100644 docs/parameter.md create mode 100644 technologydata/constants/__init__.py create mode 100644 technologydata/constants/energy_density.py delete mode 100644 technologydata/unit_value.py create mode 100644 technologydata/utils/carriers.txt create mode 100644 technologydata/utils/heating_values.txt create mode 100644 technologydata/utils/units.py create mode 100644 test/test_data/currency_conversion/WB_CNY_2020/parameters.csv create mode 100644 test/test_data/currency_conversion/WB_EUR_2020/parameters.csv create mode 100644 test/test_data/currency_conversion/WB_USD_2020/parameters.csv create mode 100644 test/test_parameter.py create mode 100644 test/test_units.py diff --git a/.github/instructions/copilot-instructions.md b/.github/instructions/copilot-instructions.md new file mode 100644 index 00000000..a7a7955a --- /dev/null +++ b/.github/instructions/copilot-instructions.md @@ -0,0 +1,43 @@ + + +# Copilot Coding Agent Instructions for `technologydata` + +## Project Overview +- `technologydata` is a Python package for energy system modellers to screen, harmonize, and transform techno-economic input data for energy system models. +- Major use cases: data validation, harmonization, transformation to model-ready formats, and provenance/audit tracing. +- Core classes: `DataPackage`, `Technology`, `Parameter`, `Source`, and `SourceCollection` (see `technologydata/`). +- Data flows: Input data (JSON or DataFrame) β†’ `DataPackage`/`Technology` objects β†’ validation/transformation β†’ output for modeling/analysis. + +## Key Workflows +- **Install dependencies:** Use `uv` (see `pyproject.toml`, `uv.lock`). Example: `uv sync`. +- **Activate virtual environment:** Use `source .venv/bin/activate` before running commands. +- **Linting/formatting:** Use `ruff` (`ruff check .` and `ruff format .`). +- **Type checking:** Use `mypy`. +- **Testing:** Use `pytest` (tests in `test/`). Fixtures in `test/conftest.py`. Run: `pytest`. +- **Pre-commit hooks:** Set up with `pre-commit` using `.pre-commit-config.yaml`, use this preferably over using `mypy` and `ruff` manually. +- **Docs:** Built with `mkdocs` (see `docs/`). + +## Project-Specific Patterns +- **Validation:** Instantiating `Technology` or `DataPackage` triggers schema validation. Use `.check_consistency()` and `.calculate_parameters()` for further checks and derivations. +- **Parameter Derivation:** Use `.calculate_parameters()` to fill in missing values based on rules. +- **Unit Handling:** Uses `pint` for units and `pydeflate` for currency/inflation adjustments. Custom `UnitRegistry` in `technologydata/utils/units.py`. +- **Data Provenance:** Each `Parameter` and `Technology` tracks its source and transformation history. +- **Data Input:** Prefer JSON conforming to the internal schema. See `test/test_data/` for examples. + +## External Integrations +- `pydeflate` for currency/inflation +- `pint` for units +- `hdx.location.country` for country/currency codes +- `savepagenow` for web archiving + +## References +- Design: `docs/design.md` +- Class diagram: `docs/class-diagram.puml` +- Example data: `test/test_data/` + +--- +If any conventions or workflows are unclear, please ask for clarification or check `docs/design.md` for rationale and details. diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index e5c703bb..d177761d 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -5,9 +5,9 @@ name: Technologydata prototype CI on: push: - branches: [prototype] + branches: [ai-prototype] pull_request: - branches: [prototype] + branches: [ai-prototype] jobs: test: diff --git a/REUSE.toml b/REUSE.toml index a6ee5e76..79009ed1 100644 --- a/REUSE.toml +++ b/REUSE.toml @@ -10,6 +10,6 @@ SPDX-License-Identifier = "MIT" [[annotations]] -path = ["test/test_data/*/*"] +path = ["test/test_data/*/*", "test/test_data/*/*/*"] SPDX-FileCopyrightText = "The technology-data authors" SPDX-License-Identifier = "CC-BY-4.0" diff --git a/docs/CLAUDE.md b/docs/CLAUDE.md deleted file mode 100644 index 1713f9f3..00000000 --- a/docs/CLAUDE.md +++ /dev/null @@ -1,26 +0,0 @@ - -## General - -* Description of use cases in `docs/design.md` -* Class diagram in `docs/class-diagram.puml` - -## Tools - -* `ruff` for formatting and linting -* `uv` for package management with `pyproject.toml` for configuration and package metadata -* `pytest` for testing all classes and methods - * a `tests/conftest.py` for all the fixtures - * a `tests//input` and `tests//output` for input and output files -* `mypy` for type checking -* `pre-commit` for setting up linting, formatting and checking hooks, configured via `.pre-commit-config.yaml` -* `pydantic` for data validation -* `mkdocs` for documentation generation, configured via `docs/mkdocs.yaml` - -## Packages to depend on - -* `pydeflate` for currency conversions and inflation adjustments -* `pint` for unit conversions -* `savepagenow` for archiving web pages using the Wayback Machine diff --git a/docs/class-diagram.puml b/docs/class-diagram.puml index 3ddba2dd..403c59d3 100644 --- a/docs/class-diagram.puml +++ b/docs/class-diagram.puml @@ -4,16 +4,6 @@ SPDX-License-Identifier: MIT '/ @startuml Class Diagram -class UnitValue { - - value: float - - unit: str -} - -note left of UnitValue::unit - Unit should be able to accommodate any unit of measurement, - currencies+years, LHVs and different energy carriers. - e.g. EUR_2020, kWh_electricity, kWh_hydrogen_LHV -end note class Source { - name: str @@ -26,6 +16,12 @@ class Source { + ensure_in_wayback() + store_in_wayback() + retrieve_from_wayback() + + _get_save_path() + + _get_content_type() + + _download_file() + + __eq__(other) + + __hash__(other) + + __str__(other) } note right of Source::store_in_wayback @@ -38,17 +34,33 @@ note right of Source::retrieve_from_wayback end note class Parameter { - - quantity: UnitValue + - magnitude: float + - units: str + - carrier: str + - heating_value: str - provenance: str - note: str - sources: SourceCollection + - _pint_quantity: pint.Quantity + - _pint_carrier: pint.Unit + - _pint_heating_value: pint.Unit + + + _update_pint_attributes() + + _check_parameter_compatibility() + + change_currency() + + change_heating_value() + + to() + from_dict(): Parameter + + __add__(other: Parameter) + + __sub__(other: Parameter) + + __mul__(other: Parameter) + + __truediv__(other: Parameter) + + __pow__(other: Parameter) + + __eq__(other: Parameter) } -Parameter --> UnitValue : quantity - note right of Parameter - Encapsulates a value, its unit (via UnitValue, as quantity), + Encapsulates a value, its unit, data provenance (via sources). end note @@ -73,6 +85,8 @@ class Technology { - output-hydrogen: Parameter - output-electricity: Parameter + + __getitem__() + + __setitem__() + from_dict(): Technology + adjust_currency(): Technology // or inplace + adjust_region(): Technology // or inplace @@ -80,6 +94,7 @@ class Technology { + calculate_EAC(): Parameter // or inplace + calculate_efficiency(): Parameter // or inplace + calculate_specific_investment(): Parameter // or inplace + + check_consistency() } note right of Technology::inputs @@ -124,6 +139,8 @@ class TechnologyCollection { + to_dataframe(): pd.DataFrame + from_json(): TechnologyCollection + create_projection(): TechnologyCollection + + __iter__() + + __len__() ' TODO: Think about more methods here } @@ -149,6 +166,10 @@ class SourceCollection { + to_csv() + to_dataframe() + from_json() + + __iter__() + + __len__() + + __str__() + + get() } note left of SourceCollection::retrieve_all_from_wayback diff --git a/docs/parameter.md b/docs/parameter.md new file mode 100644 index 00000000..38ae2a9e --- /dev/null +++ b/docs/parameter.md @@ -0,0 +1,137 @@ + + +# `Parameter` Class Documentation + +## Overview + +The `Parameter` class in `technologydata` encapsulates a value, its unit, provenance, notes, sources, and additional attributes required to describe technology parameters, such as carrier and heating value. It is designed for use in energy system modeling workflows, supporting unit handling, currency/inflation adjustments, and provenance tracking. + +## Features + +- **Value and Units**: Stores a numerical value (`magnitude`) and its associated units (`units`). Units are handled using `pint` and support custom currency units (e.g., `USD_2020/kW`). +- **Currency Unit Convention**: Currency units must follow the pattern `XYZ_YYYY`, where `XYZ` is the 3-letter [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) currency code (e.g., `USD`, `EUR`, `CNY`) and `YYYY` is the 4-digit year (e.g., `USD_2020`). This allows for both currency and inflation adjustment. +- **Carrier and Heating Value**: Optionally specify an energy carrier (e.g., `H2`) and a heating value type (`LHV` or `HHV`). +- **Provenance and Notes**: Track the origin of the data and any additional notes. +- **Sources**: Attach a `SourceCollection` of references for traceability. +- **Unit Conversion**: Convert between compatible units (excluding currency conversion) using `.to()`. +- **Currency/Inflation Adjustment**: Convert between currencies and adjust for inflation using `.change_currency()`. +- **Arithmetic Operations**: Supports addition, subtraction, multiplication, and division with other `Parameter` objects, with compatibility checks for carrier and heating value. **Note:** Some operations will fail if heating values or carriers are incompatible, raising a `ValueError`. + +## Usage Examples + +### Creating a Parameter + +```python +from technologydata.parameter import Parameter +from technologydata.source import Source +from technologydata.source_collection import SourceCollection + +param = Parameter( + magnitude=1000, + units="USD_2020/kW", + carrier="H2", + heating_value="LHV", + provenance="Directly extracted from literature", + note="Estimated", + sources=SourceCollection(sources=[ + Source(name="Example Source", authors="some authors", title="Example Title") + ]), +) + +>>> param +Parameter(magnitude=1000.0, units='USD_2020/kW', carrier='H2', heating_value='LHV', provenance='literature', note='Estimated', sources=SourceCollection(sources=[Source(name='Example Source', authors='some authors', title='Example Title')])) +``` + +### Unit Conversion (excluding currency) + +```python +converted = param.to("USD_2020 / megawatt") +>>> print(converted.magnitude, converted.units) +1000000.0 USD_2020 / megawatt +``` + +### Currency and Inflation Adjustment + +```python +# Convert to EUR_2023 with inflation adjustment for Germany, using World Bank data +euro_param = param.change_currency("EUR_2023", "DEU", source="worldbank") +>>> print(euro_param.magnitude, euro_param.units) +950.0 EUR_2023 / kilowatt +``` + +### Arithmetic Operations + +```python +param2 = Parameter(magnitude=500, units="USD_2020/kW", carrier="H2", heating_value="LHV") +sum_param = param + param2 +>>> print(sum_param.magnitude, sum_param.units) +1500.0 USD_2020 / kilowatt +``` + +**Note:** If you try to add or subtract parameters with different carriers or heating values, a `ValueError` will be raised: + +```python +param_hhv = Parameter(magnitude=1, units="USD_2020/kW", carrier="H2", heating_value="HHV") +param + param_hhv +>>> # ValueError: Cannot add parameters with different heating values +``` + +## Notes on Currency Conversion and pydeflate + +- **pydeflate Integration**: Currency and inflation adjustments are performed using the `pydeflate` package. This package uses data from either the World Bank or the International Monetary Fund. In order to use `pydeflate` with currency codes, we make some opinioated assumptions about the mapping from currency codes to countries which should in most cases be correct, but may not always be accurate for all currencies or years. +- **Country Mapping**: To see which country was used for a given currency code during conversion, inspect the mapping in `pydeflate` or use the helper functions in `technologydata.utils.units` (e.g., `get_iso3_from_currency_code`). The country code you provide to `.change_currency()` determines the inflation adjustment, but the mapping from currency code to country is handled internally by pydeflate and may be checked in its documentation or by printing the mapping used in your environment. +- **Data availability**: Since we use World Bank or IMF data, the availability of currency conversion data may vary by year and currency, depending on the most recent publication. World Bank data is based on the [World Bank DataBank](https://databank.worldbank.org/home.aspx) and IMF data is based on the [World Economic Outlook](https://www.imf.org/en/Publications/WEO). If IMF data is used, this means that also short-term projections can be accessed, usually e.g. GDP deflators for up to 2 years into the future. +- **Updating Data**: If `pydeflate` notices that data is older than 50 days, it will display a warning. It will also periodically try to update the data automatically. More information on how to configure the update behaviour and caching locations for `pydeflate` are available in their [documentation](https://github.com/jm-rivera/pydeflate). + +## Handling different heating values + +Each `Parameter` can have a `heating_value` attribute, which can be either `LHV` (or allowed aliases like `lower_heating_value`, 'NCV', 'net_calorific_value') or `HHV` (or allowed aliases like `higher_heating_value`, 'GCV', 'gross_calorific_value'). +This attribute indicates the basis on which the energy content of the parameter is defined. +In operations between `Parameter` objects, the heating value is checked. +Only parameters with the same heating value can be used in arithmetic operations. + +The heating value can be changed using the `change_heating_value` method, which uses the `carrier` attribute of the `Parameter` to determine the conversion factor between LHV and HHV based on their energy densities. + +- **Supported Carriers:** The method currently supports conversion for common carriers such as hydrogen and methane. For any other carrier that is not implemented, a ratio of 1 is assumed. +- **Changing Heating Value +- **Adding Carriers:** New carriers can be added programmatically by extending the `EnergyDensityLHV` and `EnergyDensityHHV` dictionaries in the `technologydata.constants`. The LHV/HHV ratio is calculated based on these two dictionaries, so any new carrier must have both LHV and HHV energy densities defined. In addition the carrier name must be a valid dimensionality defined in `technologydata.utils.units.creg`. + +### Example: Converting Between LHV and HHV + +```python +from technologydata.parameter import Parameter + +# Create a parameter on LHV basis +param_lhv = Parameter(magnitude=33.33, units="kWh/kg", carrier="hydrogen", heating_value="LHV") +>>> print(param_lhv.magnitude, param_lhv.units, param_lhv.heating_value) +33.33 kWh/kg lower_heating_value + +# Convert to HHV basis +param_hhv = param_lhv.change_heating_value("HHV") +>>> print(param_hhv.magnitude, param_hhv.units, param_hhv.heating_value) +39.51 kWh/kg higher_heating_value + +# Convert back to LHV +param_lhv2 = param_hhv.change_heating_value("LHV") +>>> print(param_lhv2.magnitude, param_lhv2.units, param_lhv2.heating_value) +33.33 kWh/kg lower_heating_value + +# On mixed carriers +param_mixed = Parameter(magnitude=1/9, units="kWh/kg", carrier="hydrogen / water", heating_value="LHV") +param_mixed_hhv = param_mixed.change_heating_value("HHV") +>>> print(param_mixed_hhv.magnitude, param_mixed_hhv.units, param_mixed_hhv.heating_value) +0.13 kWh/kg higher_heating_value +``` + + +## Limitations & Missing Features + +- **Provenance/Note/Sources in Arithmetic**: When performing arithmetic operations, the handling and merging of `provenance`, `note`, and `sources` is not yet implemented (see `TODO` comments in the code). +- **Unit Conversion**: The `.to()` method does not support currency conversion; use `.change_currency()` for that. +- **Partial Unit Compatibility**: Only certain combinations of units, carriers, and heating values are supported for arithmetic operations. +- **No Uncertainty Handling**: There is currently no support for uncertainty or error propagation. +- **No Serialization/Deserialization**: Direct methods for exporting/importing to/from JSON or DataFrame are not implemented in this class. diff --git a/pyproject.toml b/pyproject.toml index b6b18868..18199008 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,10 +27,15 @@ classifiers=[ ] requires-python = ">=3.12" dependencies = [ + "frozendict>=2.4.6", + "hdx-python-country>=3.9.6", "ipykernel>=6.29.5", # this one can go into optional as "dev" "mypy>=1.15.0", "pandas>=2.2.3", + "pint>=0.24.4", "pre-commit>=4.2.0", # this one can go into optional as "dev" + "pydantic>=2.11.7", + "pydeflate>=2.1.3", # this one can go into optional as "dev" "pytest>=8.3.5", # this one can go into optional as "dev" "pytest-cov>=6.2.1", # this one can go into optional as "dev" "pytest-xdist>=3.8.0", # this one can go into optional as "dev" diff --git a/technologydata/__init__.py b/technologydata/__init__.py index 20b78e28..1e2962ef 100644 --- a/technologydata/__init__.py +++ b/technologydata/__init__.py @@ -9,8 +9,16 @@ from technologydata.source_collection import SourceCollection from technologydata.technology import Technology from technologydata.technology_collection import TechnologyCollection -from technologydata.unit_value import UnitValue from technologydata.utils.commons import Commons, DateFormatEnum, FileExtensionEnum +from technologydata.utils.units import ( + CURRENCY_UNIT_PATTERN, + creg, + extract_currency_units, + get_conversion_rate, + get_iso3_from_currency_code, + hvreg, + ureg, +) __all__ = [ "Commons", @@ -22,5 +30,11 @@ "SourceCollection", "Technology", "TechnologyCollection", - "UnitValue", + "CURRENCY_UNIT_PATTERN", + "creg", + "extract_currency_units", + "get_conversion_rate", + "get_iso3_from_currency_code", + "hvreg", + "ureg", ] diff --git a/technologydata/constants/__init__.py b/technologydata/constants/__init__.py new file mode 100644 index 00000000..3c2b6ca2 --- /dev/null +++ b/technologydata/constants/__init__.py @@ -0,0 +1,12 @@ +# SPDX-FileCopyrightText: The technology-data authors +# +# SPDX-License-Identifier: MIT + +"""Provide classes and utilities for handling techno-economic data for energy system modeling.""" + +from technologydata.constants.energy_density import EnergyDensityHHV, EnergyDensityLHV + +__all__ = [ + "EnergyDensityHHV", + "EnergyDensityLHV", +] diff --git a/technologydata/constants/energy_density.py b/technologydata/constants/energy_density.py new file mode 100644 index 00000000..2c98b246 --- /dev/null +++ b/technologydata/constants/energy_density.py @@ -0,0 +1,61 @@ +# SPDX-FileCopyrightText: The technology-data authors +# +# SPDX-License-Identifier: MIT + +""" +Energy density parameters for various carriers. + +This module defines dictionaries containing energy density parameters +for different fuel carriers, specifically focusing on lower heating value (LHV) +and higher heating value (HHV). Each entry maps a carrier name to a `Parameter` +object that includes magnitude, unit, and carrier type. + +Attributes +---------- +EnergyDensityLHV : dict[str, Parameter] + Dictionary mapping carrier names to their lower heating value (LHV) + parameters. + - Key: carrier name (e.g., 'hydrogen', 'methane') + - Value: Parameter object with magnitude, unit, and carrier info. + +EnergyDensityHHV : dict[str, Parameter] + Dictionary mapping carrier names to their higher heating value (HHV) + parameters. + - Key: carrier name (e.g., 'hydrogen', 'methane') + - Value: Parameter object with magnitude, unit, and carrier info. + +""" + +from technologydata import Parameter + +EnergyDensityLHV: dict[str, Parameter] = dict( + hydrogen=Parameter( + magnitude=119.6, + unit="GJ/t", + carrier="hydrogen", + # source= # TODO + ), + methane=Parameter( + magnitude=50.0, + unit="GJ/t", + carrier="methane", + # source= # TODO + ), + # Add more energy densities as needed +) + +EnergyDensityHHV: dict[str, Parameter] = dict( + hydrogen=Parameter( + magnitude=141.8, + unit="GJ/t", + carrier="hydrogen", + # source= # TODO + ), + methane=Parameter( + magnitude=55.5, + unit="GJ/t", + carrier="methane", + # source= # TODO + ), + # Add more energy densities as needed +) diff --git a/technologydata/parameter.py b/technologydata/parameter.py index feb4483a..82a747ce 100644 --- a/technologydata/parameter.py +++ b/technologydata/parameter.py @@ -7,78 +7,648 @@ Examples -------- ->>> from technologydata.unit_value import UnitValue >>> from technologydata.source import Source ->>> uv = UnitValue(value=1000, unit="EUR_2020/kW") +>>> uv = pint.Quantity(1000, "EUR_2020/kW") >>> src = Source(name="Example Source", authors="some authors", url="http://example.com") >>> param = Parameter(quantity=uv, provenance="literature", note="Estimated", sources=[src]) """ +import logging import typing +from typing import Annotated -import pydantic +import pint +from pydantic import BaseModel, Field, PrivateAttr +import technologydata from technologydata.source_collection import SourceCollection -from technologydata.unit_value import UnitValue +# from technologydata.utils.units import ( +# CURRENCY_UNIT_PATTERN, +# creg, +# extract_currency_units, +# get_conversion_rate, +# get_iso3_from_currency_code, +# hvreg, +# ureg, +# ) -# TODO rework class logic -class Parameter(pydantic.BaseModel): # type: ignore +logger = logging.getLogger(__name__) + + +class Parameter(BaseModel): # type: ignore """ - Encapsulate a value with its unit, provenance, notes, and sources. + Encapsulate a value with its unit, provenance, notes, sources, and more optional attributes required to describe technology parameters, like carrier, and heating value. Attributes ---------- - quantity : UnitValue - The value and its unit. + magnitude : float + The numerical value of the parameter. + units : Optional[str] + The unit of the parameter. + carrier : Optional[str] + The energy carrier. + heating_value : Optional[str] + The heating value type. provenance : Optional[str] Description of the data's provenance. note : Optional[str] Additional notes about the parameter. - sources : SourceCollection + sources : Optional[SourceCollection] List of sources for the parameter. """ - quantity: typing.Annotated[ - UnitValue, pydantic.Field(description="The value and its unit.") + magnitude: Annotated[ + float, Field(description="The numerical value of the parameter.") ] - provenance: typing.Annotated[ - str | None, pydantic.Field(description="Data provenance.") + units: Annotated[str | None, Field(description="The unit of the parameter.")] = None + carrier: Annotated[ + str | None, + Field(description="Carriers of the units, e.g. 'H2', 'el', 'H2O'."), ] = None - note: typing.Annotated[ - str | None, pydantic.Field(description="Additional notes.") + heating_value: Annotated[ + str | None, + Field(description="Heating value type for energy carriers ('LHV' or 'HHV')."), ] = None - sources: typing.Annotated[ - SourceCollection, pydantic.Field(description="Collection of Sources.") - ] + provenance: Annotated[str | None, Field(description="The data's provenance.")] = ( + None + ) + note: Annotated[str | None, Field(description="Additional notes.")] = None + sources: Annotated[ + SourceCollection, + Field(description="List of sources for this parameter."), + ] = SourceCollection(sources=[]) - @property - def value(self) -> float: + # Private attributes for derived pint objects + _pint_quantity: pint.Quantity = PrivateAttr(None) + _pint_carrier: pint.Unit = PrivateAttr(None) + _pint_heating_value: pint.Unit = PrivateAttr(None) + + def __init__(self, **data: float | str | SourceCollection | None) -> None: + """Initialize Parameter and update pint attributes.""" + # pint uses canonical names for units, carriers, and heating values + # Ensure the Parameter object is always created with these consistent names from pint + if "units" in data and data["units"] is not None: + technologydata.ureg.ensure_currency_is_unit(str(data["units"])) + data["units"] = str(technologydata.ureg.Unit(data["units"])) + if "carrier" in data and data["carrier"] is not None: + data["carrier"] = str(technologydata.creg.Unit(data["carrier"])) + if "heating_value" in data and data["heating_value"] is not None: + data["heating_value"] = str( + technologydata.hvreg.Unit(data["heating_value"]) + ) + + super().__init__(**data) + self._update_pint_attributes() + + def _update_pint_attributes(self) -> None: """ - The numerical value of the parameter. + Update internal pint attributes based on current object fields. + + This method initializes or updates the following attributes: + - `_pint_quantity`: a pint Quantity created from `magnitude` and `units`. + - `_pint_carrier`: a pint Unit created from `carrier`. + - `_pint_heating_value`: a pint Unit created from `heating_value`, if applicable. + + Notes + ----- + - Ensures that `units` are valid, especially for currency units. + - Raises a ValueError if `heating_value` is set without a valid `carrier`. + + """ + # Create a pint quantity from magnitude and units + if self.units: + # `units` may contain an undefined currency unit - ensure the ureg can handle it + technologydata.ureg.ensure_currency_is_unit(self.units) + + self._pint_quantity = technologydata.ureg.Quantity( + self.magnitude, self.units + ) + else: + self._pint_quantity = technologydata.ureg.Quantity(self.magnitude) + # Create the carrier as pint unit + if self.carrier: + self._pint_carrier = technologydata.creg.Unit(self.carrier) + else: + self._pint_carrier = None + + # Create the heating value as pint unit + if self.heating_value and self.carrier: + self._pint_heating_value = technologydata.hvreg.Unit(self.heating_value) + elif self.heating_value and not self.carrier: + raise ValueError( + "Heating value cannot be set without a carrier. Please provide a valid carrier." + ) + else: + self._pint_heating_value = None + + def to(self, units: str) -> "Parameter": + """Convert the parameter's quantity to new units.""" + self._update_pint_attributes() + + # Do not allow for currency conversion here, as it requires additional information + if technologydata.extract_currency_units( + self._pint_quantity.units + ) != technologydata.extract_currency_units(units): + raise NotImplementedError( + "Currency conversion is not supported in the `to` method. " + "Use `change_currency` for currency conversions." + ) + + self._pint_quantity = self._pint_quantity.to(units) + return Parameter( + magnitude=self._pint_quantity.magnitude, + units=str(self._pint_quantity.units), + carrier=self.carrier, + heating_value=self.heating_value, + provenance=self.provenance, + note=self.note, + sources=self.sources, + ) + + def change_currency( + self, to_currency: str, country: str, source: str = "worldbank" + ) -> "Parameter": + """ + Change the currency of the parameter. + + This allows for conversion to a different currency as well as for inflation adjustments. + To properly adjust for inflation, the function requires the `country` for which the inflation + adjustment should be applied for. + + Note that this will harmonise all currencies used in the parameter's units, + i.e. if the parameter `units` contains multiple different currencies, + all of them will be converted to the target currency. + + Parameters + ---------- + to_currency : str + The target currency unit to convert to, e.g. "USD_2020", "EUR_2024", "CNY_2022". + country : str + The country for which the inflation adjustment should be made for. + Must be the official ISO 3166-1 alpha-3 country code, e.g. "USA", "DEU", "CHN". + source : str, optional + The source of the inflation data, either "worldbank"/"wb" or "international_monetary_fund"/"imf". + Defaults to "worldbank". + Depending on the source, different years to adjust for inflation may be available. + + Returns + ------- + Parameter + A new Parameter object with the converted currency. + + Examples + -------- + >>> param.change_currency("USD_2024", "USA") + >>> param.change_currency("EUR_2020", "DEU", source="imf") + >>> param.change_currency("EUR_2023", "USA", source="worldbank") + + """ + self._update_pint_attributes() + + # Ensure the target currency is a valid unit + technologydata.ureg.ensure_currency_is_unit(to_currency) + + # Current unit and currency/currencies + from_units = self._pint_quantity.units + from_currencies = technologydata.extract_currency_units(from_units) + # Replace all currency units in the from_units with the target currency + to_units = technologydata.CURRENCY_UNIT_PATTERN.sub( + to_currency, str(from_units) + ) + + # Create a temporary context to which we add the conversion rates + # We use a temporary context to avoid polluting the global unit registry + # with potentially invalid or incomplete conversion rates that do not + # match the `country` and `source` parameters. + context = technologydata.ureg.Context() + + # Conversion rates are all relative to the reference currency + ref_currency = technologydata.ureg.get_reference_currency() + ref_currency_p = technologydata.CURRENCY_UNIT_PATTERN.match(ref_currency) + if ref_currency_p: + ref_iso3 = technologydata.get_iso3_from_currency_code( + ref_currency_p.group("cu_iso3") + ) + ref_year = ref_currency_p.group("year") + else: + raise ValueError( + f"Reference currency '{ref_currency}' does not match expected pattern." + ) + + # Get conversion rates for all involved currencies + currencies = set(from_currencies).union({to_currency}) + # Avoid recursion error in pint definition by re-adding the reference currency + currencies = currencies - {ref_currency} + + for currency in currencies: + from_currency_p = technologydata.CURRENCY_UNIT_PATTERN.match(currency) + if from_currency_p: + from_iso3 = technologydata.get_iso3_from_currency_code( + from_currency_p.group("cu_iso3") + ) + from_year = from_currency_p.group("year") + else: + raise ValueError( + f"Currency '{currency}' does not match expected pattern." + ) + + conversion_rate = technologydata.get_conversion_rate( + from_iso3=from_iso3, + from_year=from_year, + to_iso3=ref_iso3, + to_year=int(ref_year), + country=country, + source=source, + ) + + context.redefine(f"{currency} = {conversion_rate} * {ref_currency}") + + # Actual conversion using pint + quantity = self._pint_quantity.to(to_units, context) + + return Parameter( + magnitude=quantity.magnitude, + units=str(quantity.units), + carrier=self.carrier, + heating_value=self.heating_value, + provenance=self.provenance, + note=self.note, + sources=self.sources, + ) + + def change_heating_value(self, to_heating_value: str) -> "Parameter": + """ + Change the heating value of the parameter. + + This converts the parameter's heating value to another heating value, + e.g. from "LHV" to "HHV", by taking into account the parameter's carrier. + + Parameters + ---------- + to_heating_value : str + The target heating value to convert to, e.g. "LHV", "HHV". Returns ------- - float - The value. + Parameter + A new Parameter object with the converted heating value. + + Raises + ------ + ValueError + If the current parameter does not have a carrier or a heating value set, + + Examples + -------- + >>> Parameter(magnitude=1, units="kWh", carrier="H2", heating_value="LHV").change_heating_value("HHV") + """ - return self.quantity.value + if not self.carrier: + raise ValueError( + "Cannot change heating value without a carrier. Please provide a valid carrier." + ) + if not self.heating_value: + raise ValueError( + "Cannot change heating value without a current heating value. " + "Please provide a valid heating value." + ) + if to_heating_value == self.heating_value: + # No change needed, return the same parameter + return self + + self._update_pint_attributes() + + from technologydata.constants import EnergyDensityHHV, EnergyDensityLHV + + # Create a dictionary of heating value ratios based on energy densities + hv_ratios = dict() + lhvs = { + str(technologydata.creg.get_dimensionality(k)): v + for k, v in EnergyDensityLHV.items() + } + hhvs = { + str(technologydata.creg.get_dimensionality(k)): v + for k, v in EnergyDensityHHV.items() + } + for dimension in self._pint_carrier.dimensionality.keys(): + if dimension in lhvs and dimension in hhvs: + hv_ratios[dimension] = ( + hhvs[dimension].magnitude / lhvs[dimension].magnitude + ) + else: + logger.error( + f"No heating values found for '{dimension}' in EnergyDensityLHV or EnergyDensityHHV. " + f"Assuming a ratio of 1." + ) + hv_ratios[dimension] = 1.0 + + # When converting from HHV -> LHV, we need to multiply by the ratios + # When converting from LHV -> HHV, we need to divide by the ratios + # We modify the hv_ratios dictionary to match the conversion direction + if technologydata.hvreg.Unit(to_heating_value).is_compatible_with("HHV"): + hv_ratios = hv_ratios + elif technologydata.hvreg.Unit(to_heating_value).is_compatible_with("LHV"): + hv_ratios = {k: 1 / v for k, v in hv_ratios.items()} + + multiplier = 1 + for dim, exponent in self._pint_carrier.dimensionality.items(): + if dim not in hv_ratios: + raise NotImplementedError( + f"Heating value conversion not implemented for carrier dimension '{dim}'." + ) + # Adjust the hv_ratios for the exponent of the carrier + multiplier *= hv_ratios[dim] ** exponent - @property - def unit(self) -> str: + return Parameter( + magnitude=self.magnitude * multiplier, + units=self.units, + carrier=self.carrier, + heating_value=to_heating_value, + provenance=self.provenance, # TODO implement for this function + note=self.note, + sources=self.sources, + ) + + def _check_parameter_compatibility(self, other: "Parameter") -> None: """ - The unit of the parameter. + Check if two parameters are compatible in terms of units, carrier, and heating value. + + Parameters + ---------- + other : Parameter + The other Parameter instance to compare against. + + Raises + ------ + ValueError + If the carriers or heating values of the two parameters are not compatible. + The error message specifies which attribute differs. + + """ + if self._pint_carrier != other._pint_carrier: + raise ValueError( + f"Operation not permitted on parameters with different carriers: " + f"'{self._pint_carrier}' and '{other._pint_carrier}'." + ) + if self._pint_heating_value != other._pint_heating_value: + raise ValueError( + f"Operation not permitted on parameters with different heating values: " + f"'{self._pint_heating_value}' and '{other._pint_heating_value}'." + ) + + def __add__(self, other: "Parameter") -> "Parameter": + """ + Add this Parameter to another Parameter. + + Parameters + ---------- + other : Parameter + The Parameter instance to add. + + Returns + ------- + Parameter + A new Parameter instance representing the sum of the two parameters. + + Notes + ----- + This method checks for parameter compatibility before performing the addition. + The resulting Parameter retains the carrier, heating value, and combines provenance, + notes, and sources from both operands. + + """ + self._check_parameter_compatibility(other) + new_quantity = self._pint_quantity + other._pint_quantity + return Parameter( + magnitude=new_quantity.magnitude, + units=new_quantity.units, + carrier=self.carrier, + heating_value=self.heating_value, + provenance=(self.provenance or "") + + (other.provenance or ""), # TODO make nicer + note=(self.note or "") + (other.note or ""), # TODO make nicer + sources=SourceCollection( + sources=(self.sources.sources + other.sources.sources) + ), + ) + + def __sub__(self, other: "Parameter") -> "Parameter": + """ + Subtract another Parameter from this Parameter. + + Parameters + ---------- + other : Parameter + The Parameter instance to subtract. + + Returns + ------- + Parameter + A new Parameter instance representing the result of the subtraction. + + Notes + ----- + This method checks for parameter compatibility before performing the subtraction. + The resulting Parameter retains the carrier, heating value, and combines provenance, notes, and sources. + + """ + self._check_parameter_compatibility(other) + new_quantity = self._pint_quantity - other._pint_quantity + return Parameter( + magnitude=new_quantity.magnitude, + units=str(new_quantity.units), + carrier=self.carrier, + heating_value=self.heating_value, + provenance=(self.provenance or "") + + (other.provenance or ""), # TODO make nicer + note=(self.note or "") + (other.note or ""), # TODO make nicer + sources=SourceCollection( + sources=(self.sources.sources + other.sources.sources) + ), + ) + + def __truediv__(self, other: "Parameter") -> "Parameter": + """ + Divide this Parameter by another Parameter. + + Parameters + ---------- + other : Parameter + The Parameter instance to divide by. + + Returns + ------- + Parameter + A new Parameter instance representing the division result. + + Raises + ------ + ValueError + If the heating values of the two parameters are different. + + Notes + ----- + The method divides the quantities of the parameters and constructs a new Parameter. + It also handles the division of carriers and heating values if present. + + """ + # We don't check general compatibility here, as division is not a common operation for parameters. + # Only ensure that the heating values are compatible. + if self._pint_heating_value != other._pint_heating_value: + raise ValueError( + f"Cannot divide parameters with different heating values: " + f"{self._pint_heating_value} and {other._pint_heating_value}." + ) + + new_quantity = self._pint_quantity / other._pint_quantity + new_carrier = ( + self._pint_carrier / other._pint_carrier + if self._pint_carrier and other._pint_carrier + else None + ) + new_heating_value = ( + self._pint_heating_value / other._pint_heating_value + if self._pint_heating_value and other._pint_heating_value + else None + ) + + return Parameter( + magnitude=new_quantity.magnitude, + units=str(new_quantity.units), + carrier=new_carrier, + heating_value=new_heating_value, + provenance=(self.provenance or "") + + (other.provenance or ""), # TODO make nicer + note=(self.note or "") + (other.note or ""), # TODO make nicer + sources=SourceCollection( + sources=(self.sources.sources + other.sources.sources) + ), + ) + + def __mul__(self, other: "Parameter") -> "Parameter": + """ + Multiply two Parameter instances. + + Parameters + ---------- + other : Parameter + The other Parameter instance to multiply with. Returns ------- - str - The unit. + Parameter + A new Parameter instance representing the product of the two parameters. + + Raises + ------ + ValueError + If the heating values of the two parameters are not compatible (i.e., not equal). + + Notes + ----- + - Multiplication is only performed if the heating values are compatible. + - The method multiplies the underlying quantities and carriers (if present). + - The heating value of the resulting parameter is the product of the input heating values. + - Provenance, notes, and sources are combined from both parameters. + - Compatibility checks beyond heating values are not performed. + + """ + # We don't check general compatibility here, as multiplication is not a common operation for parameters. + # Only ensure that the heating values are compatible. + if self._pint_heating_value != other._pint_heating_value: + raise ValueError( + f"Cannot multiply parameters with different heating values: " + f"{self._pint_heating_value} and {other._pint_heating_value}." + ) + + new_quantity = self._pint_quantity * other._pint_quantity + new_carrier = ( + self._pint_carrier * other._pint_carrier + if self._pint_carrier and other._pint_carrier + else None + ) + + new_heating_value = self._pint_heating_value * other._pint_heating_value + return Parameter( + magnitude=new_quantity.magnitude, + units=str(new_quantity.units), + carrier=str(new_carrier), + heating_value=str(new_heating_value), + provenance=(self.provenance or "") + + (other.provenance or ""), # TODO make nicer + note=(self.note or "") + (other.note or ""), # TODO make nicer + sources=SourceCollection( + sources=(self.sources.sources + other.sources.sources) + ), + ) + def __eq__(self, other: object) -> bool: """ - return self.quantity.unit + Check for equality with another Parameter object. + + Compares all attributes of the current instance with those of the other object. + + Parameters + ---------- + other : object + The object to compare with. Expected to be an instance of Parameter. + + Returns + ------- + bool + True if all attributes are equal between self and other, False otherwise. + Returns False if other is not a Parameter instance. + + """ + if not isinstance(other, Parameter): + return NotImplemented + + self._update_pint_attributes() + other._update_pint_attributes() + + for field in self.__class__.model_fields.keys(): + value_self = getattr(self, field) + value_other = getattr(other, field) + if value_self != value_other: + return False + return True + + def __pow__(self, exponent: float | int) -> "Parameter": + """ + Raise the parameter's value to a specified power. + + Parameters + ---------- + exponent : float or int + The exponent to raise the parameter's value to. + + Returns + ------- + Parameter + A new Parameter instance with the value raised to the specified power. + + Notes + ----- + This method updates the internal pint attributes before applying the power operation. + If the parameter has a carrier, it is also raised to the specified power. + + """ + self._update_pint_attributes() + + new_quantity = self._pint_quantity**exponent + return Parameter( + magnitude=new_quantity.magnitude, + units=str(new_quantity.units), + carrier=self._pint_carrier**exponent if self._pint_carrier else None, + heating_value=self.heating_value, + provenance=self.provenance, + note=self.note, + sources=self.sources, + ) @classmethod def from_dict(cls, data: dict[str, typing.Any]) -> "Parameter": @@ -90,29 +660,33 @@ def from_dict(cls, data: dict[str, typing.Any]) -> "Parameter": cls : type The class to instantiate. data : dict - A dictionary containing the data to initialize the class instance. - Expected keys include: - - "quantity" (dict): A dictionary representing a UnitValue, parsed via `UnitValue.parse_obj()`. - - "provenance" (str or None): Optional provenance information. - - "note" (str or None): Optional notes. + A dictionary containing the data to initialize the class instance. Expected keys include: + - "magnitude" + - "units" + - "carrier" + - "heating_value" + - "provenance" + - "note" - "sources" (list): A list of source data dictionaries, to be converted into a SourceCollection. Returns ------- - instance : cls + Parameter An instance of the class initialized with the provided data. Notes ----- This method converts the "sources" list into a `SourceCollection` using `SourceCollection.from_json()`. - The "quantity" field is parsed into a `UnitValue` object using `UnitValue.parse_obj()`. """ # Convert sources list into SourceCollection sources_data = data.get("sources", []) sources = SourceCollection.from_json(from_str=sources_data) return cls( - quantity=UnitValue.model_validate(data["quantity"]), + magnitude=data.get("magnitude"), + units=data.get("units"), + carrier=data.get("carrier"), + heating_value=data.get("heating_value"), provenance=data.get("provenance"), note=data.get("note"), sources=sources, diff --git a/technologydata/source.py b/technologydata/source.py index 7bb369a0..03911d41 100644 --- a/technologydata/source.py +++ b/technologydata/source.py @@ -64,10 +64,9 @@ class Source(pydantic.BaseModel): # type: ignore def __eq__(self, other: object) -> bool: """ - Check for equality with another Source object based on non-None attributes. + Check for equality with another Source object. Compares all attributes of the current instance with those of the other object. - Only compares attributes that are not None in both instances. Parameters ---------- @@ -80,12 +79,10 @@ def __eq__(self, other: object) -> bool: True if all non-None attributes are equal between self and other, False otherwise. Returns False if other is not a Source instance. - Notes - ----- - This method considers only attributes that are not None in both objects. - If an attribute is None in either object, it is ignored in the comparison. - """ + if not isinstance(other, Source): + return NotImplemented + if not isinstance(other, Source): logger.error("The object is not a Source instance.") return False diff --git a/technologydata/unit_value.py b/technologydata/unit_value.py deleted file mode 100644 index a354a343..00000000 --- a/technologydata/unit_value.py +++ /dev/null @@ -1,66 +0,0 @@ -# SPDX-FileCopyrightText: The technology-data authors -# -# SPDX-License-Identifier: MIT -# TODO implement (Johannes) -""" -UnitValue class for representing a value with an associated unit. - -This class is designed to support flexible units, including energy carriers, currencies with years, and more. - -Examples --------- ->>> uv = UnitValue(value=100, unit="EUR_2020") ->>> uv.value -100 ->>> uv.unit -"EUR_2020" - -""" - -import typing - -import pint -import pydantic - -ureg = pint.UnitRegistry() - - -class UnitValue(pydantic.BaseModel): # type: ignore - """ - Represent a numerical value with an associated unit of measurement. - - Attributes - ---------- - value : float - The numerical value. - unit : str - The unit of measurement. - - """ - - value: typing.Annotated[float, pydantic.Field(description="The numerical value.")] - unit: typing.Annotated[str, pydantic.Field(description="The unit of measurement.")] - - def to(self, new_unit: str) -> "UnitValue": - """ - Convert the value to a new unit using pint. - - Parameters - ---------- - new_unit : str - The unit to convert to. - - Returns - ------- - UnitValue - A new UnitValue instance with the converted value and unit. - - Raises - ------ - pint.errors.DimensionalityError - If the units are not compatible. - - """ - q = self.value * ureg(self.unit) - q_converted = q.to(new_unit) - return UnitValue(value=q_converted.magnitude, unit=str(q_converted.units)) diff --git a/technologydata/utils/carriers.txt b/technologydata/utils/carriers.txt new file mode 100644 index 00000000..62c526e7 --- /dev/null +++ b/technologydata/utils/carriers.txt @@ -0,0 +1,29 @@ +# SPDX-FileCopyrightText: The technology-data authors +# +# SPDX-License-Identifier: MIT + +# Definitions for the default carriers supported by the package. +# Each carrier is defined as an independent dimension. +# This way, pint allows for operations like division or multiplication, +# and at the same time prevents incompatible operations on these dimensions. +# +# See also: https://pint.readthedocs.io/en/latest/defining.html + + +# Format: +# = [] [= ] + +carbon = [carbon] = C +carbon_dioxide = [carbon_dioxide] = CO2 +carbon_monoxide = [carbon_monoxide] = CO +coal = [coal] +diesel = [diesel] +jet_fuel_a1 = [jet_fuel_a1] = JETA1 +electricity = [electricity] = e = el +hydrogen = [hydrogen] = H2 +methane = [methane] = CH4 +methanol = [methanol] = CH3OH = MeOH +natural_gas = [natural_gas] = NG +nitrogen = [nitrogen] = N2 +oxygen = [oxygen] = O2 +water = [water] = H2O diff --git a/technologydata/utils/heating_values.txt b/technologydata/utils/heating_values.txt new file mode 100644 index 00000000..8b2162db --- /dev/null +++ b/technologydata/utils/heating_values.txt @@ -0,0 +1,17 @@ +# SPDX-FileCopyrightText: The technology-data authors +# +# SPDX-License-Identifier: MIT + +# Definitions for the default heating values supported by the package. +# Each heating value is defined as an independent dimension. +# This way, pint allows for operations like division or multiplication, +# and at the same time prevents incompatible operations on these dimensions. +# +# See also: https://pint.readthedocs.io/en/latest/defining.html + + +# Format: +# = [] [= ] + +lower_heating_value = [lower_heating_value] = LHV = NCV = net_calorific_value +higher_heating_value = [higher_heating_value] = HHV = GCV = gross_calorific_value diff --git a/technologydata/utils/units.py b/technologydata/utils/units.py new file mode 100644 index 00000000..78351a6c --- /dev/null +++ b/technologydata/utils/units.py @@ -0,0 +1,409 @@ +# SPDX-FileCopyrightText: The technology-data authors +# +# SPDX-License-Identifier: MIT +"""Submodule containing pint.UnitRegistry subclasses and utility functions for handling units, conversions, and currency units.""" + +import json +import logging +import re +import typing +from functools import lru_cache +from pathlib import Path + +import pandas as pd +import pint +import pydeflate +from frozendict import frozendict +from hdx.location.country import Country +from platformdirs import user_cache_dir + +logger = logging.getLogger(__name__) + +CURRENCY_UNIT_PATTERN = re.compile(r"\b(?P[A-Z]{3})_(?P\d{4})\b") + +# Set up cache directory and file for currency codes +CACHE_DIR = Path(user_cache_dir("technologydata")) # TODO move to commons? +CACHE_DIR.mkdir(parents=True, exist_ok=True) # TODO move to commons? +CURRENCY_CODES_CACHE = CACHE_DIR / "iso3_to_currency_codes.json" + + +SPECIAL_CASES_CURRENCY_CODE_TO_ISO3 = frozendict( + { + # Multi-country currencies (return codes directly) + "EUR": "EUR", # Eurozone + # Single primary countries + "AUD": "AUS", # Australia + "CHF": "CHE", # Switzerland + "DKK": "DNK", # Denmark + "GBP": "GBR", # United Kingdom (largest GBP economy) + "ILS": "ISR", # Israel + "MAD": "MAR", # Morocco + "NOK": "NOR", # Norway + "NZD": "NZL", # New Zealand + "USD": "USA", # Dollar-ized economies + # Special regional cases with proxy selection criteria + "ANG": "CUW", # CuraΓ§ao (GDP-weighted proxy) + "XAF": "CAF", # Central African Republic (lowest inflation differential) + "XCD": "GRD", # Grenada (lowest inflation differential) + "XOF": "NER", # Niger (lowest inflation differential 2015-2023) + "XPF": "PYF", # French Polynesia (data availability) + } +) + + +def get_iso3_to_currency_codes( + refresh: bool = False, ignore_cache: bool = False +) -> dict[str, str]: + """ + Get all 3-letter currency codes from official UN data. + + Uses a persistent local cache to avoid unnecessary network requests. + + Parameters + ---------- + refresh : bool, optional + If True, the cache will be updated from the internet, by default False. + ignore_cache : bool, optional + If True, the cache will not be used and the data will always be fetched from the live feed. + + Returns + ------- + dict[str, str] + A dictionary mapping ISO3 country codes to their corresponding 3-letter currency codes. + + """ + currencies: dict[str, str] = {} + + if refresh: + logger.debug("Deleting existing currency codes cache to refresh it.") + CURRENCY_CODES_CACHE.unlink(missing_ok=True) + + if ignore_cache: + logger.debug("Ignoring cache and fetching live currency codes.") + currencies = Country.countriesdata()["currencies"] + elif not CURRENCY_CODES_CACHE.exists(): + logger.debug( + "Cache does not exist. Fetching live currency codes and creating cache." + ) + currencies = Country.countriesdata()["currencies"] + with open(CURRENCY_CODES_CACHE, "w") as f: + json.dump(currencies, f) + else: + logger.debug("Reading currency codes from cache.") + with open(CURRENCY_CODES_CACHE) as f: + currencies = json.load(f) + + return currencies + + +def extract_currency_units(units: str | pint.Unit) -> list[str]: + """ + Extract currency-like strings from a string or pint.Unit. + + Parameters + ---------- + units : str or pint.Unit + The units string or pint.Unit from which to extract currency-like strings. + + Returns + ------- + list[str] + A list of currency-like strings found in the input, formatted as "{3-letter currency code}_{year as YYYY}". + If no matches are found, an empty list is returned. + + Examples + -------- + >>> extract_currency_units("USD_2020/kW") + ["USD_2020"] + + >>> extract_currency_units("EUR_2015/USD_2020") + ["EUR_2015", "USD_2020"] + + """ + # Ensure that the input is a string + units = str(units) + + # Get the 3-letter currency codes for all officially recognized currencies + logger.debug("Retrieving all 3-letter currency codes from the `hdx-country`.") + all_currency_codes = set(get_iso3_to_currency_codes().values()) + + # Check if the units contain a currency-like string, defined as "{3-letter currency code}_{year as YYYY}" + matches = CURRENCY_UNIT_PATTERN.findall(units) + if len(matches) == 0: + logger.debug("No currency-like string found in the units.") + return [] + + # Extract the currency codes from the matches using the regex groups + logger.debug(f"Found currency-like strings in the units: {matches}") + currency_codes = {code for code, year in matches} + + # Ensure that all currency codes are legitimate 3-letter currency codes + invalid_codes = currency_codes - all_currency_codes + if invalid_codes: + invalid_currencies = [ + f"{code}_{year}" for code, year in matches if code in invalid_codes + ] + raise ValueError( + f"The following unit(s) appear to be currency units, but have invalid 3-letter currency codes: {', '.join(invalid_currencies)}. " + ) + + # Reconstruct currency units from the matches + matches = [f"{code}_{year}" for code, year in matches] + + return matches + + +@lru_cache +def get_conversion_rate( + from_iso3: str, + to_iso3: str, + country: str, + from_year: int, + to_year: int, + source: str = "worldbank", +) -> float: + """ + Get the conversion rate from one currency (year, ISO3) to another currency (year, ISO3) from pydeflate. + + Parameters + ---------- + from_iso3 : str + The ISO3 code of the country of the currency to convert from (e.g., 'USA' if the source currency is USD). + to_iso3 : str + The ISO3 code of the country of the currency to convert to (e.g., 'DEU' if the target currency is EUR). + country : str + The ISO3 code of the country to adjust for inflation. + from_year : int + The julian year (YYYY) of the source currency. + to_year : int + The julian year (YYYY) of the target currency. + source : str + The source of the inflation data ('worldbank'/'wb' or 'international_monetary_fund'/'imf'). + + """ + # Choose the deflation function based on the source + deflation_function = { + "worldbank": pydeflate.wb_gdp_deflate, + "wb": pydeflate.wb_gdp_deflate, + "international_monetary_fund": pydeflate.imf_gdp_deflate, + "imf": pydeflate.imf_gdp_deflate, + }[source] + + # Ensure that `country` is a valid ISO3 code; to_iso3 and from_iso3 should already have been parsed before the function was called + if country not in get_iso3_to_currency_codes().keys(): + raise ValueError(f"Unknown ISO3 code for `country`: {country}.") + + # pydeflate only operates on pandas.DataFrame + data = pd.DataFrame( + { + "iso3": [country], + "from_year": [from_year], + "value": [1], + } + ) + + # Deflate values include currency conversion + conversion_rates = deflation_function( + data, + source_currency=from_iso3, + target_currency=to_iso3, + id_column="iso3", + year_column="from_year", + base_year=to_year, + value_column="value", + target_value_column="new_value", + ) + + if conversion_rates.isna().any().any(): + raise ValueError( + f"Conversion rate from {from_iso3} ({from_year}) to {to_iso3} ({to_year}) with inflation rate for {country} not found. " + ) + + return float(conversion_rates.loc[0, "new_value"]) + + +@lru_cache +def get_iso3_from_currency_code( + currency_code: str, + special_cases: frozendict[str, str] = SPECIAL_CASES_CURRENCY_CODE_TO_ISO3, +) -> str: + """ + Get the ISO3 country code from a 3-letter currency code using official UN data and opinionated assumptions. + + Parameters + ---------- + currency_code : str + The 3-letter currency code (e.g., 'USD', 'EUR'). + special_cases : dict[str, str], optional + A dictionary mapping specific currency codes to their ISO3 country codes for special cases. + Defaults to `technologydata.utils.units.SPECIAL_CASES_CURRENCY_CODE_TO_ISO3`. + + Returns + ------- + str + The ISO 3166 alpha 3 country code of the `currency_code`. + + Raises + ------ + ValueError + If the currency code is not found in the official list of currencies. + + """ + # Build reverse mapping: currency code -> list of ISO3 codes + iso3_to_currency_codes = pd.DataFrame.from_dict( + get_iso3_to_currency_codes(), orient="index", columns=["currency"] + ) + iso3_to_currency_codes = iso3_to_currency_codes.reset_index(drop=False).rename( + columns={"index": "iso3"} + ) + currency_codes_to_iso3 = iso3_to_currency_codes.groupby("currency", as_index=False)[ + "iso3" + ].agg(list) + + # Handle special cases for specific currency codes + + # Remove all currencies that are in the special cases from the mapping + currency_codes_to_iso3 = currency_codes_to_iso3.loc[ + ~currency_codes_to_iso3["currency"].isin(special_cases.keys()) + ] + + # Mapping should now only contain unique currency codes to ISO3 codes mappings, safe to explode + currency_codes_to_iso3 = currency_codes_to_iso3.explode("iso3") + + # Add the special cases to the mapping + currency_codes_to_iso3 = pd.concat( + [ + currency_codes_to_iso3, + pd.DataFrame( + list(special_cases.items()), + columns=["currency", "iso3"], + ), + ], + ignore_index=False, + ) + + # Special cases should handle all non-unique currency codes, check to make sure + # and return the ones that are not handled in special cases + + if ( + duplicated_iso3 := currency_codes_to_iso3.explode("iso3")[ + "currency" + ].duplicated() + ).any(): + raise ValueError( + "Some currency codes are used by multiple ISO3 codes but are not handled in `special_cases` " + "and need to be added to the mapping: " + f"{currency_codes_to_iso3[duplicated_iso3]}" + ) + + currency_codes_to_iso3 = currency_codes_to_iso3.set_index("currency")[ + "iso3" + ].to_dict() + + try: + return str(currency_codes_to_iso3[currency_code]) + except KeyError as e: + raise ValueError( + f"Currency code '{currency_code}' not found in the list of currencies. " + "Please ensure it is a valid 3-letter currency code." + ) from e + + +class SpecialUnitRegistry(pint.UnitRegistry): # type: ignore + """A special pint.UnitRegistry subclass that includes methods for handling currency units and conversion using pydeflate.""" + + def __init__( + self, *args: tuple[typing.Any, ...], **kwargs: dict[str, typing.Any] + ) -> None: + """ + Initialize a SpecialUnitRegistry instance. + + This constructor creates a new `SpecialUnitRegistry` object, + inheriting all default behaviors from `pint.UnitRegistry`. + It also defines a reference currency unit (`USD_2020`) for + handling currency conversions and related operations. + + Parameters + ---------- + *args : tuple + Positional arguments passed to the base `pint.UnitRegistry` constructor. + **kwargs : dict + Keyword arguments passed to the base `pint.UnitRegistry` constructor. + + """ + # Use all defaults definitions from a standard pint.UnitRegistry + super().__init__(*args, **kwargs) + + # Define the reference currency unit + # This is the base currency unit that all other currency units will be defined relative to + # We use USD_2020 as the base currency unit because it is a currency that we can relate all other currencies to + self.define("USD_2020 = [currency]") + + def get_reference_currency(self) -> str: + """Get the reference currency from the unit registry.""" + reference_currency = [ + self._units[u].name + for u in self._units + if "[currency]" in self._units[u].reference + ] + if not reference_currency or len(reference_currency) != 1: + raise ValueError( + "The unit registry does not have a unique base currency defined as '[currency]'. Please define a base currency unit to proceed." + ) + + return str(reference_currency[0]) + + def ensure_currency_is_unit(self, units: str) -> None: + """ + Ensure that all currency units in the given string are valid units in the registry. + + Extracts all currency-like strings from the input and checks if they are defined + in the unit registry. If they are not defined, they are added as valid units + relative to the reference currency but without a conversion factor. + + Parameters + ---------- + units : str + The units string to check for currency units. + + Examples + -------- + >>> ureg.ensure_currency_is_unit("USD_2020/kW") + >>> ureg.ensure_currency_is_unit("EUR_2015/USD_2020") + + """ + logger.debug(f"Ensuring currency units of '{units}' are defined in `ureg`") + currency_units = extract_currency_units(units) + logger.debug(f"Found currency-like strings in the units: {currency_units}") + + if not currency_units: + # Nothing to do + return + + reference_currency = self.get_reference_currency() + logger.debug(f"Reference currency is '{reference_currency}'.") + + # Check if the currency unit is already defined in the unit registry + # if not, define it relative to the base currency USD_2015 + for currency_unit in currency_units: + if currency_unit in self._units: + logger.debug( + f"Currency unit '{currency_unit}' is already defined in the unit registry. Not redefining it." + ) + continue + + logger.debug( + f"Currency unit '{currency_unit}' not found in the unit registry. " + f"Defining it without a conversion factor relative to the base currency '{reference_currency}'." + ) + self.define(f"{currency_unit} = nan {reference_currency}") + + +# Unit registries used throughout the package for different purposes +ureg = SpecialUnitRegistry() # For handling units, conversions, and currency units +creg = pint.UnitRegistry( + filename=Path(__file__).parent / "carriers.txt" +) # For tracking carriers and ensuring compatibility between them +hvreg = pint.UnitRegistry( + filename=Path(__file__).parent / "heating_values.txt" +) # For tracking heating values and ensuring compatibility between them diff --git a/test/conftest.py b/test/conftest.py index a87b2dde..08d231e7 100644 --- a/test/conftest.py +++ b/test/conftest.py @@ -83,3 +83,18 @@ def example_source_collection( sources_params: list[dict[str, str]] = request.param sources = [create_source_from_params(params) for params in sources_params] return technologydata.SourceCollection(sources=sources) + + +@pytest.fixture(scope="function") # type: ignore +def example_parameter(request: pytest.FixtureRequest) -> technologydata.Parameter: + """Fixture to create an example parameter.""" + source_list = request.param.pop("parameter_sources", []) + return technologydata.Parameter( + magnitude=request.param.get("parameter_magnitude"), + units=request.param.get("parameter_units"), + carrier=request.param.get("parameter_carrier"), + heating_value=request.param.get("parameter_heating_value"), + provenance=request.param.get("parameter_provenance"), + note=request.param.get("parameter_note"), + sources=technologydata.SourceCollection(sources=source_list), + ) diff --git a/test/test_data/currency_conversion/WB_CNY_2020/parameters.csv b/test/test_data/currency_conversion/WB_CNY_2020/parameters.csv new file mode 100644 index 00000000..32fcd08f --- /dev/null +++ b/test/test_data/currency_conversion/WB_CNY_2020/parameters.csv @@ -0,0 +1,15 @@ +country,input_magnitude,input_units,reference_magnitude,reference_units,source +ITA,100.0,EUR_2020/MW,788.202952,CNY_2020/MW,worldbank +FRA,100.0,EUR_2015/MW,839.849719,CNY_2020/MW,worldbank +FRA,100.0,EUR_2020/MW,788.202952,CNY_2020/MW,worldbank +ITA,100.0,EUR_2015/MW,833.762573,CNY_2020/MW,worldbank +ITA,100.0,EUR_2020/MW,788.202952,CNY_2020/MW,worldbank +FRA,200.0,GBP_2020/MW,1769.428465,CNY_2020/MW,worldbank +ITA,300000.0,USD_2020,2070230.180835,CNY_2020,worldbank +FRA,100.0,USD_2015/MW,756.953548,CNY_2020/MW,worldbank +ITA,200.0,USD_2015/MW,1502.93445,CNY_2020/MW,worldbank +ITA,200.0,USD_2020/MW,1380.153454,CNY_2020/MW,worldbank +ITA,100000.0,USD_2015,751467.224787,CNY_2020,worldbank +ITA,200000.0,USD_2020,1380153.45389,CNY_2020,worldbank +USA,100.0,USD_2020/MW,690.076727,CNY_2020/MW,worldbank +ITA,230.0,USD_2023/MW,1510.563521,CNY_2020/MW,worldbank diff --git a/test/test_data/currency_conversion/WB_EUR_2020/parameters.csv b/test/test_data/currency_conversion/WB_EUR_2020/parameters.csv new file mode 100644 index 00000000..089332de --- /dev/null +++ b/test/test_data/currency_conversion/WB_EUR_2020/parameters.csv @@ -0,0 +1,15 @@ +country,input_magnitude,input_units,reference_magnitude,reference_units,source +ITA,100.0,EUR_2020/MW,100.0,EUR_2020/MW,worldbank +FRA,100.0,EUR_2015/MW,106.552471,EUR_2020/MW,worldbank +FRA,100.0,EUR_2020/MW,100.0,EUR_2020/MW,worldbank +ITA,100.0,EUR_2015/MW,105.780189,EUR_2020/MW,worldbank +ITA,100.0,EUR_2020/MW,100.0,EUR_2020/MW,worldbank +FRA,200.0,GBP_2020/MW,224.488942,EUR_2020/MW,worldbank +ITA,300000.0,USD_2020,262651.919096,EUR_2020,worldbank +FRA,100.0,USD_2015/MW,96.035361,EUR_2020/MW,worldbank +ITA,200.0,USD_2015/MW,190.678612,EUR_2020/MW,worldbank +ITA,200.0,USD_2020/MW,175.101279,EUR_2020/MW,worldbank +ITA,100000.0,USD_2015,95339.30618,EUR_2020,worldbank +ITA,200000.0,USD_2020,175101.279398,EUR_2020,worldbank +USA,100.0,USD_2020/MW,87.55064,EUR_2020/MW,worldbank +ITA,230.0,USD_2023/MW,191.64652,EUR_2020/MW,worldbank diff --git a/test/test_data/currency_conversion/WB_USD_2020/parameters.csv b/test/test_data/currency_conversion/WB_USD_2020/parameters.csv new file mode 100644 index 00000000..724641b0 --- /dev/null +++ b/test/test_data/currency_conversion/WB_USD_2020/parameters.csv @@ -0,0 +1,15 @@ +country,input_magnitude,input_units,reference_magnitude,reference_units,source +ITA,100.0,EUR_2020/MW,114.219611,USD_2020/MW,worldbank +FRA,100.0,EUR_2015/MW,121.703819,USD_2020/MW,worldbank +FRA,100.0,EUR_2020/MW,114.219611,USD_2020/MW,worldbank +ITA,100.0,EUR_2015/MW,120.821722,USD_2020/MW,worldbank +ITA,100.0,EUR_2020/MW,114.219611,USD_2020/MW,worldbank +FRA,200.0,GBP_2020/MW,256.410396,USD_2020/MW,worldbank +ITA,300000.0,USD_2020,300000.0,USD_2020,worldbank +FRA,100.0,USD_2015/MW,109.691217,USD_2020/MW,worldbank +ITA,200.0,USD_2015/MW,217.792372,USD_2020/MW,worldbank +ITA,200.0,USD_2020/MW,200.0,USD_2020/MW,worldbank +ITA,100000.0,USD_2015,108896.185841,USD_2020,worldbank +ITA,200000.0,USD_2020,200000.0,USD_2020,worldbank +USA,100.0,USD_2020/MW,100.0,USD_2020/MW,worldbank +ITA,230.0,USD_2023/MW,218.897908,USD_2020/MW,worldbank diff --git a/test/test_data/solar_photovoltaics_example_03/technologies.json b/test/test_data/solar_photovoltaics_example_03/technologies.json index be406154..f8acfc7d 100644 --- a/test/test_data/solar_photovoltaics_example_03/technologies.json +++ b/test/test_data/solar_photovoltaics_example_03/technologies.json @@ -7,10 +7,9 @@ "detailed_technology": "Si-HC", "parameters": { "capacity": { - "quantity": { - "value": 1, - "unit": "MW" - }, + "magnitude": 1.0, + "units": "MW", + "carrier": "electricity", "provenance": "Model calculation", "note": "Average capacity factor of 22% assumed", "sources": [ @@ -33,10 +32,9 @@ ] }, "investment": { - "quantity": { - "value": 500, - "unit": "EUR_2022/KW_el" - }, + "magnitude": 500, + "units": "EUR_2022/kW", + "carrier": "1/electricity", "provenance": "Industry report", "note": "Average overnight cost", "sources": [ @@ -59,10 +57,9 @@ ] }, "specific_investment": { - "quantity": { - "value": 0.95, - "unit": "USD/W" - }, + "magnitude": 0.95, + "units": "EUR_2022/W", + "carrier": "1/electricity", "provenance": "Derived", "note": "Calculated from investment/capacity", "sources": [ @@ -85,10 +82,8 @@ ] }, "lifetime": { - "quantity": { - "value": 30, - "unit": "years" - }, + "magnitude": 30, + "units": "years", "provenance": "Manufacturer specification", "note": "With performance degradation guarantee", "sources": [ @@ -111,10 +106,8 @@ ] }, "wacc": { - "quantity": { - "value": 0.05, - "unit": "fraction" - }, + "magnitude": 5, + "units": "%", "provenance": "Financial analysis", "note": "Nominal weighted average cost of capital", "sources": [ @@ -146,10 +139,9 @@ "detailed_technology": "Si-HC", "parameters": { "capacity": { - "quantity": { - "value": 1.0, - "unit": "MW" - }, + "magnitude": 1.0, + "units": "MW", + "carrier": "electricity", "provenance": "Model calculation", "note": "Average capacity factor of 25% assumed", "sources": [ @@ -173,10 +165,9 @@ } }, "investment": { - "quantity": { - "value": 350, - "unit": "EUR_2022/KW_el" - }, + "magnitude": 350, + "units": "EUR_2022/kW", + "carrier": "1/electricity", "provenance": "Industry report", "note": "Average overnight cost for another tech", "sources": [ @@ -199,10 +190,9 @@ ] }, "specific_investment": { - "quantity": { - "value": 0.95, - "unit": "USD/W" - }, + "magnitude": 0.95, + "units": "EUR_2022/W", + "carrier": "1/electricity", "provenance": "Derived", "note": "Calculated from investment/capacity", "sources": [ @@ -225,10 +215,8 @@ ] }, "lifetime": { - "quantity": { - "value": 30, - "unit": "years" - }, + "magnitude": 30, + "units": "years", "provenance": "Manufacturer specification", "note": "With performance degradation guarantee", "sources": [ @@ -251,10 +239,8 @@ ] }, "wacc": { - "quantity": { - "value": 0.05, - "unit": "fraction" - }, + "magnitude": 5, + "units": "%", "provenance": "Financial analysis", "note": "Nominal weighted average cost of capital", "sources": [ diff --git a/test/test_data/solar_photovoltaics_example_04/technologies.json b/test/test_data/solar_photovoltaics_example_04/technologies.json index b97485fd..dfa7eb50 100644 --- a/test/test_data/solar_photovoltaics_example_04/technologies.json +++ b/test/test_data/solar_photovoltaics_example_04/technologies.json @@ -7,10 +7,9 @@ "detailed_technology": "Si-HC", "parameters": { "capacity": { - "quantity": { - "value": 1, - "unit": "MW" - }, + "magnitude": 1, + "units": "MW", + "carrier": "electricity", "provenance": "Model calculation", "note": "Average capacity factor of 22% assumed", "sources": [ @@ -22,10 +21,9 @@ ] }, "investment": { - "quantity": { - "value": 500, - "unit": "EUR_2022/KW_el" - }, + "magnitude": 500, + "units": "EUR_2022/kW", + "carrier": "1/electricity", "provenance": "Industry report", "note": "Average overnight cost", "sources": [ @@ -37,10 +35,9 @@ ] }, "specific_investment": { - "quantity": { - "value": 0.95, - "unit": "USD/W" - }, + "magnitude": 0.95, + "units": "EUR_2022/W", + "carrier": "1/electricity", "provenance": "Derived", "note": "Calculated from investment/capacity", "sources": [ @@ -52,10 +49,8 @@ ] }, "lifetime": { - "quantity": { - "value": 30, - "unit": "years" - }, + "magnitude": 30, + "units": "years", "provenance": "Manufacturer specification", "note": "With performance degradation guarantee", "sources": [ @@ -67,10 +62,8 @@ ] }, "wacc": { - "quantity": { - "value": 0.05, - "unit": "fraction" - }, + "magnitude": 5, + "units": "%", "provenance": "Financial analysis", "note": "Nominal weighted average cost of capital", "sources": [ @@ -91,10 +84,9 @@ "detailed_technology": "Si-HC", "parameters": { "capacity": { - "quantity": { - "value": 1.0, - "unit": "MW" - }, + "magnitude": 1.0, + "units": "MW", + "carrier": "electricity", "provenance": "Model calculation", "note": "Average capacity factor of 25% assumed", "sources": [ @@ -106,11 +98,10 @@ ] }, "investment": { - "quantity": { - "value": 350, - "unit": "EUR_2022/KW_el" - }, - "provenance": "Industry report", + "magnitude": 350, + "units": "EUR_2022/kW", + "carrier": "1/electricity", + "provenance": "Industry report", "note": "Average overnight cost for another tech", "sources": [ { @@ -121,10 +112,9 @@ ] }, "specific_investment": { - "quantity": { - "value": 0.95, - "unit": "USD/W" - }, + "magnitude": 0.95, + "units": "EUR_2022/W", + "carrier": "1/electricity", "provenance": "Derived", "note": "Calculated from investment/capacity", "sources": [ @@ -136,10 +126,8 @@ ] }, "lifetime": { - "quantity": { - "value": 30, - "unit": "years" - }, + "magnitude": 30, + "units": "years", "provenance": "Manufacturer specification", "note": "With performance degradation guarantee", "sources": [ @@ -151,10 +139,8 @@ ] }, "wacc": { - "quantity": { - "value": 0.05, - "unit": "fraction" - }, + "magnitude": 5, + "units": "%", "provenance": "Financial analysis", "note": "Nominal weighted average cost of capital", "sources": [ diff --git a/test/test_parameter.py b/test/test_parameter.py new file mode 100644 index 00000000..30cc6da5 --- /dev/null +++ b/test/test_parameter.py @@ -0,0 +1,717 @@ +# SPDX-FileCopyrightText: The technology-data authors +# +# SPDX-License-Identifier: MIT + +"""Test the initialization and methods of the Parameter class.""" + +import pathlib + +import numpy as np +import pandas as pd +import pint +import pytest + +import technologydata + +# from technologydata.utils.units import extract_currency_units, ureg + +path_cwd = pathlib.Path.cwd() + + +class TestParameter: + """Test suite for the Parameter class in the technologydata module.""" + + def test_parameter_creation(self) -> None: + """Test the creation of a Parameter instance with various units.""" + param = technologydata.Parameter( + magnitude=1000, + units="USD_2020/kW", + carrier="H2", + heating_value="LHV", + provenance="literature", + note="Estimated", + sources=technologydata.SourceCollection( + sources=[ + technologydata.Source( + authors="some authors", + title="Example Title", + ) + ] + ), + ) + assert param.magnitude == 1000 + assert param.units == "USD_2020 / kilowatt" + assert param.provenance == "literature" + assert param.note == "Estimated" + assert param.sources is not None + + # Internal pint quantities + # pint autoconverts to the canonical name for the carrier and heating value + # so comparing with == "H2" would fail; instead check that the units are compatible + assert param._pint_quantity.units.is_compatible_with("USD_2020 / kW") + assert param._pint_carrier.is_compatible_with("H2") + assert param._pint_heating_value.is_compatible_with("LHV") + + def test_parameter_invalid_units(self) -> None: + """Test that an error is raised when invalid units are provided.""" + with pytest.raises(pint.errors.UndefinedUnitError) as excinfo: + technologydata.Parameter( + magnitude=1000, + units="INVALID_UNIT", + ) + assert "INVALID_UNIT" in str(excinfo.value) + + with pytest.raises(pint.errors.UndefinedUnitError) as excinfo: + technologydata.Parameter( + magnitude=1000, + units="USD_2020/kW", + carrier="H2", + heating_value="INVALID_HEATING_VALUE", + ) + assert "INVALID_HEATING_VALUE" in str(excinfo.value) + + with pytest.raises(pint.errors.UndefinedUnitError) as excinfo: + technologydata.Parameter( + magnitude=1000, + units="USD_2020/kW", + carrier="INVALID_CARRIER", + ) + assert "INVALID_CARRIER" in str(excinfo.value) + + with pytest.raises(ValueError) as excinfo: + technologydata.Parameter( + magnitude=1000, + units="USD_2020/kW", + heating_value="LHV", + ) + assert "Heating value cannot be set without a carrier" in str(excinfo.value) + + def test_parameter_to_conversion_fail_on_currency_conversion(self) -> None: + """Test the unit conversion of a Parameter instance to fail on currency conversion.""" + param = technologydata.Parameter( + magnitude=1000, + units="USD_2020/kW", + ) + with pytest.raises(NotImplementedError) as excinfo: + param.to("EUR_2025 / kilowatt") + assert "Currency conversion is not supported" in str(excinfo.value) + + def test_parameter_to_conversion(self) -> None: + """Test the conversion of a Parameter instance to different units.""" + param = technologydata.Parameter( + magnitude=1000, + units="USD_2020/kW", + ) + + ref = technologydata.Parameter( + magnitude=param.magnitude * 1000, + units="USD_2020 / megawatt", + ) + + converted = param.to("USD_2020 / megawatt") + + assert isinstance(converted, technologydata.Parameter) + assert converted.units == ref.units + assert converted.magnitude == ref.magnitude + + def test_pint_attributes_update(self) -> None: + """Test that pint attributes are updated correctly when attributes change and a method that uses the pint fields is called.""" + param = technologydata.Parameter( + magnitude=1000, + units="USD_2020/kW", + carrier="H2", + heating_value="LHV", + provenance="literature", + note="Estimated", + ) + # Change magnitude and units + param.magnitude = 2000 + param.units = "EUR_2025 / kilowatt" + param._update_pint_attributes() + assert param._pint_quantity.magnitude == 2000 + assert str(param._pint_quantity.units) == "EUR_2025 / kilowatt" + + # Change magnitude and units again and check if they are updated + # when calling a method that uses them + param.magnitude = 3000 + param.units = "USD_2020 / kWh" + param = param.to("USD_2020 / kWh") + assert param._pint_quantity.magnitude == 3000 + assert str(param._pint_quantity.units) == str( + technologydata.ureg.Unit("USD_2020 / kWh") + ) + + def test_parameter_change_currency(self) -> None: + """Test currency conversion with inflation adjustment.""" + param = technologydata.Parameter( + magnitude=1, + units="USD_2020/kW", + ) + + # Convert to EUR with inflation adjustment for Germany + converted = param.change_currency("EUR_2023", "DEU") + assert isinstance(converted, technologydata.Parameter) + assert converted.units is not None + assert "EUR_2023" in converted.units + assert converted._pint_quantity is not None + assert converted._pint_quantity.is_compatible_with("EUR_2023 / kW") + + # Check that magnitude changed due to currency conversion + assert not np.isnan(converted.magnitude) + assert converted.magnitude != param.magnitude + + def test_parameter_change_currency_explicit_source(self) -> None: + """Test currency conversion with explicit inflation data source.""" + param = technologydata.Parameter( + magnitude=1, + units="EUR_2019/MWh", + ) + + # Convert using IMF data source + converted = param.change_currency("USD_2022", "USA", source="worldbank") + assert isinstance(converted, technologydata.Parameter) + assert converted.units is not None + assert "USD_2022" in converted.units + assert converted._pint_quantity is not None + assert not np.isnan(converted.magnitude) + assert converted._pint_quantity.is_compatible_with("USD_2022 / MWh") + + def test_parameter_change_currency_different_source(self) -> None: + """Test currency conversion with different inflation data source.""" + param = technologydata.Parameter( + magnitude=1, + units="EUR_2019/MWh", + ) + + # Convert using IMF data source + converted = param.change_currency("USD_2022", "USA", source="imf") + assert isinstance(converted, technologydata.Parameter) + assert converted.units is not None + assert "USD_2022" in converted.units + assert converted._pint_quantity.is_compatible_with("USD_2022 / MWh") + + def test_parameter_change_currency_multiple_currencies(self) -> None: + """Test currency conversion when units contain multiple currencies.""" + param = technologydata.Parameter( + magnitude=1, + units="USD_2020 * EUR_2021 / kW", + ) + + # Convert all currencies to CNY_2023 + converted = param.change_currency("CNY_2023", "CHN") + assert isinstance(converted, technologydata.Parameter) + # Both USD_2020 and EUR_2021 should be replaced with CNY_2023 + assert converted.units is not None + assert "CNY_2023" in converted.units + assert "USD_2020" not in converted.units + assert "EUR_2021" not in converted.units + + def test_parameter_change_currency_same_currency(self) -> None: + """Test currency conversion to the same currency (inflation adjustment only).""" + param = technologydata.Parameter( + magnitude=1, + units="USD_2019/kW", + ) + + # Convert to USD but different year (inflation adjustment) + converted = param.change_currency("USD_2023", "USA") + assert isinstance(converted, technologydata.Parameter) + assert converted.units == "USD_2023 / kilowatt" + # Magnitude should change due to inflation adjustment + assert not np.isnan(converted.magnitude) + assert converted.magnitude != param.magnitude + + def test_parameter_no_currency_change(self) -> None: + """Test that no currency change occurs when the target currency is the same as the current one.""" + param = technologydata.Parameter( + magnitude=1, + units="USD_2020/kW", + ) + + # Convert to the same currency and year + converted = param.change_currency("USD_2020", "USA") + assert isinstance(converted, technologydata.Parameter) + assert converted._pint_quantity.is_compatible_with("USD_2020 / kW") + # Magnitude should remain unchanged + assert not np.isnan(converted.magnitude) + assert converted.magnitude == param.magnitude + + def test_parameter_change_currency_invalid_country(self) -> None: + """Test that invalid country codes raise appropriate errors.""" + param = technologydata.Parameter( + magnitude=1, + units="USD_2020/kW", + ) + + # Invalid country code should raise an error + with pytest.raises((ValueError, KeyError)): + param.change_currency("EUR_2023", "USB") + + def test_parameter_change_currency_invalid_source(self) -> None: + """Test that invalid inflation data sources raise appropriate errors.""" + param = technologydata.Parameter( + magnitude=1000, + units="USD_2020/kW", + ) + + # Invalid source should raise an error + with pytest.raises(KeyError): + param.change_currency("EUR_2023", "DEU", source="invalid_source") + + def test_parameter_change_currency_no_units(self) -> None: + """Test currency conversion with parameter that has no units.""" + param = technologydata.Parameter( + magnitude=42, + ) + + # Should handle parameters without currency units gracefully + converted = param.change_currency("EUR_2023", "DEU") + assert isinstance(converted, technologydata.Parameter) + assert converted.magnitude == 42 + assert converted.units is None or "EUR_2023" not in str(converted.units) + + def test_parameter_unchanged_other_attributes(self) -> None: + """Test that other attributes remain unchanged after currency conversion.""" + param = technologydata.Parameter( + magnitude=1000, + units="USD_2020/kW", + carrier="H2", + heating_value="LHV", + provenance="literature", + note="Estimated", + ) + + # Convert to EUR_2023 + converted = param.change_currency("EUR_2023", "DEU") + + # Check that other attributes remain unchanged + assert converted.carrier == param.carrier + assert converted.heating_value == param.heating_value + assert converted.provenance == param.provenance + assert converted.note == param.note + + def test_parameter_heating_value_compatibility(self) -> None: + """Test that we do not permit operations on mixed heating values.""" + param_lhv = technologydata.Parameter( + magnitude=1, + carrier="H2", + heating_value="LHV", + ) + param_hhv = technologydata.Parameter( + magnitude=1, + carrier="H2", + heating_value="HHV", + ) + + # Different error messages for + and - + with pytest.raises(ValueError) as excinfo: + param_lhv + param_hhv + assert ( + "Operation not permitted on parameters with different heating values" + in str(excinfo.value) + ) + with pytest.raises(ValueError) as excinfo: + param_lhv - param_hhv + assert ( + "Operation not permitted on parameters with different heating values" + in str(excinfo.value) + ) + + # Different error messages for * and / + with pytest.raises(ValueError) as excinfo: + param_lhv * param_hhv + assert "Cannot multiply parameters with different heating values" in str( + excinfo.value + ) + + with pytest.raises(ValueError) as excinfo: + param_lhv / param_hhv + assert "Cannot divide parameters with different heating values" in str( + excinfo.value + ) + + def test_parameter_carrier_compatibility(self) -> None: + """Test that we do only permit certain operations on mixed carriers.""" + param_h2 = technologydata.Parameter( + magnitude=1, + carrier="H2", + heating_value="LHV", + ) + param_ch4 = technologydata.Parameter( + magnitude=1, + carrier="CH4", + heating_value="LHV", + ) + + # Different error messages for + and - + with pytest.raises(ValueError) as excinfo: + param_h2 + param_ch4 + assert ( + "Operation not permitted on parameters with different carriers" + in str(excinfo.value) + ) + with pytest.raises(ValueError) as excinfo: + param_h2 - param_ch4 + assert ( + "Operation not permitted on parameters with different carriers" + in str(excinfo.value) + ) + + # * and / are permitted with different carriers and should yield mixed carriers + assert ( + param_h2 * param_ch4 + ).carrier == param_h2._pint_carrier * param_ch4._pint_carrier + assert ( + param_h2 / param_ch4 + ).carrier == param_h2._pint_carrier / param_ch4._pint_carrier + + def test_parameter_equality(self) -> None: + """Test equality comparison of Parameter objects.""" + # Create two identical parameters + param1 = technologydata.Parameter( + magnitude=1000, + units="USD_2020/kW", + carrier="H2", + heating_value="LHV", + provenance="literature", + note="Estimated", + sources=technologydata.SourceCollection( + sources=[ + technologydata.Source( + authors="some authors", + title="Example Title", + ) + ] + ), + ) + param2 = technologydata.Parameter( + magnitude=1000, + units="USD_2020/kW", + carrier="H2", + heating_value="LHV", + provenance="literature", + note="Estimated", + sources=technologydata.SourceCollection( + sources=[ + technologydata.Source( + authors="some authors", + title="Example Title", + ) + ] + ), + ) + + # Should be equal + assert param1 == param2 + assert param2 == param1 + + def test_parameter_equality_different_magnitude(self) -> None: + """Test that parameters with different magnitudes are not equal.""" + param1 = technologydata.Parameter(magnitude=1000, units="USD_2020/kW") + param2 = technologydata.Parameter(magnitude=2000, units="USD_2020/kW") + + assert param1 != param2 + assert param2 != param1 + + def test_parameter_equality_different_units(self) -> None: + """Test that parameters with different units are not equal.""" + param1 = technologydata.Parameter(magnitude=1000, units="USD_2020/kW") + param2 = technologydata.Parameter(magnitude=1000, units="EUR_2020/kW") + + assert param1 != param2 + assert param2 != param1 + + def test_parameter_equality_different_carrier(self) -> None: + """Test that parameters with different carriers are not equal.""" + param1 = technologydata.Parameter(magnitude=1000, carrier="H2") + param2 = technologydata.Parameter(magnitude=1000, carrier="CH4") + + assert param1 != param2 + assert param2 != param1 + + def test_parameter_equality_different_heating_value(self) -> None: + """Test that parameters with different heating values are not equal.""" + param1 = technologydata.Parameter( + magnitude=1000, carrier="H2", heating_value="LHV" + ) + param2 = technologydata.Parameter( + magnitude=1000, carrier="H2", heating_value="HHV" + ) + + assert param1 != param2 + assert param2 != param1 + + def test_parameter_equality_different_provenance(self) -> None: + """Test that parameters with different provenance are not equal.""" + param1 = technologydata.Parameter(magnitude=1000, provenance="literature") + param2 = technologydata.Parameter(magnitude=1000, provenance="expert_estimate") + + assert param1 != param2 + assert param2 != param1 + + def test_parameter_equality_different_note(self) -> None: + """Test that parameters with different notes are not equal.""" + param1 = technologydata.Parameter(magnitude=1000, note="Estimated") + param2 = technologydata.Parameter(magnitude=1000, note="Measured") + + assert param1 != param2 + assert param2 != param1 + + def test_parameter_equality_different_sources(self) -> None: + """Test that parameters with different sources are not equal.""" + source1 = technologydata.Source(authors="Author A", title="Title A") + source2 = technologydata.Source(authors="Author B", title="Title B") + + param1 = technologydata.Parameter( + magnitude=1000, sources=technologydata.SourceCollection(sources=[source1]) + ) + param2 = technologydata.Parameter( + magnitude=1000, sources=technologydata.SourceCollection(sources=[source2]) + ) + + assert param1 != param2 + assert param2 != param1 + + def test_parameter_equality_none_values(self) -> None: + """Test equality with None values for optional fields.""" + param1 = technologydata.Parameter(magnitude=1000) + param2 = technologydata.Parameter(magnitude=1000) + + # Both have None for optional fields, should be equal + assert param1 == param2 + + # One has None, the other has a value + param3 = technologydata.Parameter(magnitude=1000, units="USD_2020/kW") + assert param1 != param3 + assert param3 != param1 + + def test_parameter_equality_with_non_parameter(self) -> None: + """Test equality comparison with non-Parameter objects.""" + param = technologydata.Parameter(magnitude=1000) + + # Should return NotImplemented for non-Parameter objects + assert param.__eq__("not a parameter") == NotImplemented + assert param.__eq__(42) == NotImplemented + assert param.__eq__(None) == NotImplemented + + def test_parameter_equality_canonical_units(self) -> None: + """Test that parameters with equivalent but differently formatted units are equal.""" + # Units should be canonicalized during initialization + param1 = technologydata.Parameter(magnitude=1000, units="USD_2020/kW") + param2 = technologydata.Parameter(magnitude=1000, units="USD_2020/kilowatt") + + # Should be equal because units are canonicalized + assert param1 == param2 + assert param2 == param1 + + def test_parameter_equality_self_reference(self) -> None: + """Test that a parameter is equal to itself.""" + param = technologydata.Parameter( + magnitude=1000, + units="USD_2020/kW", + carrier="H2", + heating_value="LHV", + provenance="literature", + note="Estimated", + ) + + assert param == param + + @pytest.mark.parametrize( + "example_parameter", + [ + { + "parameter_magnitude": 1000, + "parameter_units": "USD_2020/kW", + "parameter_carrier": "H2", + "parameter_heating_value": "LHV", + "parameter_provenance": "literature", + "parameter_note": "Estimated", + "parameter_sources": [ + technologydata.Source(title="title", authors="authors") + ], + } + ], + indirect=["example_parameter"], + ) # type: ignore + def test_example_parameter( + self, example_parameter: technologydata.Parameter + ) -> None: + """Test that the fixture example_parameter yields a parameter object.""" + assert isinstance(example_parameter, technologydata.Parameter) + + def test_parameter_pow_basic(self) -> None: + """Test integer exponentiation.""" + param = technologydata.Parameter(magnitude=2, units="kW") + result = param**3 + assert isinstance(result, technologydata.Parameter) + assert result.magnitude == 8 + assert result.units == "kilowatt ** 3" + + def test_parameter_pow_fractional(self) -> None: + """Test fractional exponentiation.""" + param = technologydata.Parameter(magnitude=9, units="m**2") + result = param**0.5 + assert pytest.approx(result.magnitude) == 3 + assert result.units == "meter" + + def test_parameter_pow_zero(self) -> None: + """Test zero exponent returns dimensionless.""" + param = technologydata.Parameter(magnitude=5, units="J") + result = param**0 + assert result.magnitude == 1 + assert result.units == "dimensionless" + + def test_parameter_pow_negative(self) -> None: + """Test negative exponentiation and unit handling.""" + param = technologydata.Parameter(magnitude=2, units="W") + result = param**-2 + assert pytest.approx(result.magnitude) == 0.25 + # Compare units using pint, not string equality + assert technologydata.ureg.Unit(result.units) == technologydata.ureg.Unit( + "watt ** -2" + ) + + def test_parameter_pow_carrier(self) -> None: + """Test that the carrier attribute is also affected.""" + param = technologydata.Parameter( + magnitude=3, + units="kg", + carrier="H2", + ) + result = param**2 + assert result.carrier == f"{param.carrier} ** 2" + + def test_parameter_pow_preserves_metadata(self) -> None: + """Test that metadata is preserved after exponentiation.""" + param = technologydata.Parameter( + magnitude=3, + units="kg", + carrier="H2", + heating_value="LHV", + provenance="test", + note="note", + ) + result = param**2 + assert result.carrier == f"{param.carrier} ** 2" + assert result.heating_value == param.heating_value + assert result.provenance == param.provenance + assert result.note == param.note + + def test_change_heating_value_h2_lhv_to_hhv(self) -> None: + """Test LHV to HHV conversion for H2.""" + p = technologydata.Parameter( + magnitude=119.6, + units="kilowatt_hour", + carrier="hydrogen", + heating_value="lower_heating_value", + ) + p2 = p.change_heating_value("higher_heating_value") + assert pytest.approx(p2.magnitude) == 141.8 + assert p2.heating_value == "higher_heating_value" + assert p2.carrier == "hydrogen" + assert p2.units == "kilowatt_hour" + + def test_change_heating_value_h2_hhv_to_lhv(self) -> None: + """Test HHV to LHV conversion for H2.""" + p = technologydata.Parameter( + magnitude=141.8, + units="kilowatt_hour", + carrier="hydrogen", + heating_value="higher_heating_value", + ) + p2 = p.change_heating_value("lower_heating_value") + assert pytest.approx(p2.magnitude) == 119.6 + assert p2.heating_value == "lower_heating_value" + assert p2.carrier == "hydrogen" + assert p2.units == "kilowatt_hour" + + def test_change_heating_value_ch4_lhv_to_hhv(self) -> None: + """Test LHV to HHV conversion for CH4.""" + p = technologydata.Parameter( + magnitude=10, + units="kilowatt_hour", + carrier="methane", + heating_value="lower_heating_value", + ) + p2 = p.change_heating_value("higher_heating_value") + assert pytest.approx(p2.magnitude) == 11.1 + assert p2.heating_value == "higher_heating_value" + assert p2.carrier == "methane" + assert p2.units == "kilowatt_hour" + + def test_change_heating_value_ch4_hhv_to_lhv(self) -> None: + """Test HHV to LHV conversion for CH4.""" + p = technologydata.Parameter( + magnitude=11.1, + units="kilowatt_hour", + carrier="methane", + heating_value="higher_heating_value", + ) + p2 = p.change_heating_value("lower_heating_value") + assert pytest.approx(p2.magnitude) == 10.0 + assert p2.heating_value == "lower_heating_value" + assert p2.carrier == "methane" + assert p2.units == "kilowatt_hour" + + def test_change_heating_value_no_carrier_in_units(self) -> None: + """Test conversion when carrier does not appear in units (should treat as 1 appearance).""" + p = technologydata.Parameter( + magnitude=1, + units="kilowatt_hour", + carrier="hydrogen", + heating_value="lower_heating_value", + ) + p2 = p.change_heating_value("higher_heating_value") + assert pytest.approx(p2.magnitude) == 1.418 / 1.196 + assert p2.heating_value == "higher_heating_value" + assert p2.carrier == "hydrogen" + assert p2.units == "kilowatt_hour" + + def test_change_heating_value_same_hv(self) -> None: + """Test that no conversion occurs if heating value is unchanged.""" + p = technologydata.Parameter( + magnitude=1, + units="kilowatt_hour", + carrier="hydrogen", + heating_value="lower_heating_value", + ) + p2 = p.change_heating_value("lower_heating_value") + assert p2.magnitude == 1 + assert p2.heating_value == "lower_heating_value" + + @pytest.mark.parametrize( + "folder_id", + ["WB_CNY_2020", "WB_EUR_2020", "WB_USD_2020"], + ) # type: ignore + def test_change_currency(self, folder_id: str) -> None: + """Validate the currency conversion rates.""" + input_path = pathlib.Path( + path_cwd, + "test", + "test_data", + "currency_conversion", + folder_id, + "parameters.csv", + ) + input_dataframe = pd.read_csv(input_path).reset_index() + for _, row in input_dataframe.iterrows(): + reference_param = technologydata.Parameter( + magnitude=np.round(row["reference_magnitude"], 2), + units=row["reference_units"], + ) + + output_param = technologydata.Parameter( + magnitude=row["input_magnitude"], + units=row["input_units"], + ).change_currency( + to_currency=technologydata.extract_currency_units( + row["reference_units"] + )[0], + country=row["country"], + source=row["source"], + ) + assert output_param.magnitude == pytest.approx( + reference_param.magnitude, rel=1e-2 + ) + assert output_param.units == reference_param.units diff --git a/test/test_source.py b/test/test_source.py index 3751b8e2..94c8db4d 100644 --- a/test/test_source.py +++ b/test/test_source.py @@ -150,7 +150,7 @@ def test_retrieve_from_wayback(example_source: technologydata.Source) -> None: def test_store_in_wayback() -> None: """Check if a given url is correctly stored as a snapshot on Internet Archive Wayback Machine.""" - url_to_archive = "https://openenergytransition.org/outputs.html" + url_to_archive = "https://www.openenergytransition.org/outputs.html" archived_info = technologydata.Source.store_in_wayback(url_to_archive) # Check if archived_info is None diff --git a/test/test_units.py b/test/test_units.py new file mode 100644 index 00000000..e729a327 --- /dev/null +++ b/test/test_units.py @@ -0,0 +1,590 @@ +# SPDX-FileCopyrightText: The technology-data authors +# +# SPDX-License-Identifier: MIT +"""Test the creation of custom units and handling of currencies using Pint.""" + +import json + +import pint +import pytest +from frozendict import frozendict + +from technologydata.utils.units import ( + CURRENCY_CODES_CACHE, + SPECIAL_CASES_CURRENCY_CODE_TO_ISO3, + SpecialUnitRegistry, + creg, + extract_currency_units, + get_conversion_rate, + get_iso3_from_currency_code, + get_iso3_to_currency_codes, + hvreg, +) + + +class TestExtractCurrencyUnits: + """Test cases for extract_currency_units function.""" + + def test_single_currency_unit(self) -> None: + """Test extraction of a single currency unit.""" + result = extract_currency_units("USD_2020/kW") + assert result == ["USD_2020"] + + def test_multiple_currency_units(self) -> None: + """Test extraction of multiple currency units.""" + result = extract_currency_units("EUR_2015/USD_2020") + assert set(result) == {"EUR_2015", "USD_2020"} + + def test_no_currency_units(self) -> None: + """Test that no currency units are extracted from non-currency strings.""" + result = extract_currency_units("kW/hour") + assert result == [] + + def test_empty_string(self) -> None: + """Test extraction from empty string.""" + result = extract_currency_units("") + assert result == [] + + def test_pint_unit(self) -> None: + """Test extraction from pint.Unit object.""" + ureg = pint.UnitRegistry() + ureg.define("USD_2020 = [currency]") + unit = ureg.Unit("USD_2020") + result = extract_currency_units(unit) + assert result == ["USD_2020"] + + ureg.define("USD_2020 = [currency]") + unit = ureg.Unit("USD_2020/kW") + result = extract_currency_units(unit) + assert result == ["USD_2020"] + + def test_pint_unit_input(self) -> None: + """Test that pint.Unit objects are properly converted to strings.""" + ureg = pint.UnitRegistry() + unit = ureg.parse_expression("kW") + result = extract_currency_units(unit) + assert result == [] + + def test_complex_unit_string(self) -> None: + """Test extraction from complex unit strings with multiple components.""" + result = extract_currency_units("USD_2020/kW/year") + assert result == ["USD_2020"] + + def test_invalid_year_format(self) -> None: + """Test that invalid year formats are not matched.""" + result = extract_currency_units("USD_20/kW") + assert result == [] + + result = extract_currency_units("USD_20200/kW") + assert result == [] + + def test_non_three_letter_codes(self) -> None: + """Test that non-three-letter codes are not matched.""" + result = extract_currency_units("US_2020/kW") + assert result == [] + + result = extract_currency_units("USDD_2020/kW") + assert result == [] + + def test_case_sensitivity(self) -> None: + """Test that currency codes must be uppercase.""" + result = extract_currency_units("usd_2020/kW") + assert result == [] + + def test_valid_currency_codes(self) -> None: + """Test that only valid currency codes are accepted.""" + result = extract_currency_units("USD_2020/kW") + assert result == ["USD_2020"] + + result = extract_currency_units("EUR_2015/kW") + assert result == ["EUR_2015"] + + with pytest.raises(ValueError): + extract_currency_units("EUA_2015/kW") + + def test_invalid_currency_codes_raise(self) -> None: + """Test that invalid currency codes raise ValueError.""" + with pytest.raises(ValueError): + extract_currency_units("XYZ_2020/kW") + + def test_duplicate_currency_units(self) -> None: + """Test that duplicate currency units are handled correctly.""" + result = extract_currency_units("USD_2020/USD_2020/EUR_2015") + assert result == ["USD_2020", "USD_2020", "EUR_2015"] + + def test_different_years_same_currency(self) -> None: + """Test extraction of same currency with different years.""" + result = extract_currency_units("USD_2020/USD_2015") + assert result == ["USD_2020", "USD_2015"] + + def test_mixed_valid_invalid_currencies(self) -> None: + """Test behavior with mix of valid and invalid currency codes.""" + with pytest.raises(ValueError): + extract_currency_units("USD_2020/XYZ_2021") + + +class TestGetIso3ToCurrencyCodes: + """Test cases for get_iso3_to_currency_codes function and whether the cache works correctly.""" + + def test_correct_currency_codes(self) -> None: + """Test that the function returns correct currency codes.""" + codes = get_iso3_to_currency_codes() + + # dtype check + assert isinstance(codes, dict) + + # check some known currency codes + assert "USD" in codes.values() + assert "EUR" in codes.values() + + # check wrong currency codes + assert "EUA" not in codes.values() # EUA is not a valid currency code + assert "usd" not in codes.values() # codes must be uppercase + + assert all(len(iso3) == 3 for iso3 in codes.keys()), ( + "All ISO3 codes should be 3 letters long" + ) + assert all(iso3.isupper() for iso3 in codes.keys()), ( + "All ISO3 codes should be uppercase" + ) + assert all([len(code) == 3 for code in codes.values() if code]), ( + "All currency codes should be 3 letters long" + ) + assert all([code.isupper() for code in codes.values() if code]), ( + "All currency codes should be uppercase" + ) + + def test_currency_cache_creates_and_reads(self) -> None: + """Test that the cache is properly created/read/ignored.""" + # Ensure the cache does not exist before the test + CURRENCY_CODES_CACHE.unlink(missing_ok=True) + + # First call should create cache + codes = get_iso3_to_currency_codes() + assert CURRENCY_CODES_CACHE.exists() + + # Second call should read from cache (simulate by modifying file) + dummy_data = {"FOO": "BAR"} + with open(CURRENCY_CODES_CACHE, "w") as f: + json.dump(dummy_data, f) + codes = get_iso3_to_currency_codes() + assert codes == dummy_data + + # Bypass cache to ensure it reads from the live feed (FOO should not be there) + codes = get_iso3_to_currency_codes(ignore_cache=True) + assert codes != dummy_data + + # Force refresh should overwrite cache + codes = get_iso3_to_currency_codes(refresh=True) + assert codes != dummy_data + + +class TestGetConversionRate: + """Test cases for get_conversion_rate function.""" + + def test_same_currency_same_year(self) -> None: + """Test conversion rate when currency and year are the same.""" + rate = get_conversion_rate( + from_iso3="USA", + to_iso3="USA", + country="USA", + from_year=2020, + to_year=2020, + ) + assert rate == pytest.approx(1.0, rel=1e-6) + + def test_different_years_same_currency(self) -> None: + """Test conversion rate with different years but same currency.""" + rate = get_conversion_rate( + from_iso3="USA", + to_iso3="USA", + country="USA", + from_year=2015, + to_year=2020, + ) + # Rate should not be 1.0 due to inflation adjustment + assert rate != 1.0 + assert isinstance(rate, float) + assert rate > 0 + + def test_different_currencies_same_year(self) -> None: + """Test conversion rate with different currencies but same year.""" + rate = get_conversion_rate( + from_iso3="USA", + to_iso3="DEU", + country="USA", + from_year=2020, + to_year=2020, + ) + # Rate should not be 1.0 due to currency conversion + assert rate != 1.0 + assert isinstance(rate, float) + assert rate > 0 + + def test_different_currencies_different_years(self) -> None: + """Test conversion rate with different currencies and years.""" + rate = get_conversion_rate( + from_iso3="USA", + to_iso3="DEU", + country="USA", + from_year=2015, + to_year=2020, + ) + assert isinstance(rate, float) + assert rate > 0 + + def test_worldbank_source(self) -> None: + """Test conversion rate using World Bank data source.""" + rate = get_conversion_rate( + from_iso3="USA", + to_iso3="USA", + country="USA", + from_year=2015, + to_year=2020, + source="worldbank", + ) + assert isinstance(rate, float) + assert rate > 0 + + def test_imf_source(self) -> None: + """Test conversion rate using IMF data source.""" + rate = get_conversion_rate( + from_iso3="USA", + to_iso3="USA", + country="USA", + from_year=2015, + to_year=2020, + source="international_monetary_fund", + ) + assert isinstance(rate, float) + assert rate > 0 + + def test_invalid_source_raises_keyerror(self) -> None: + """Test that invalid source raises KeyError.""" + with pytest.raises(KeyError): + get_conversion_rate( + from_iso3="USA", + to_iso3="USA", + country="USA", + from_year=2020, + to_year=2020, + source="invalid_source", + ) + + def test_caching_behavior(self) -> None: + """Test that function results are cached.""" + # Call function twice with same parameters + rate1 = get_conversion_rate( + from_iso3="USA", + to_iso3="DEU", + country="USA", + from_year=2018, + to_year=2019, + ) + rate2 = get_conversion_rate( + from_iso3="USA", + to_iso3="DEU", + country="USA", + from_year=2018, + to_year=2019, + ) + + # Results should be identical (cached) + assert rate1 == rate2 + + +class TestUnitRegistryGetReferenceCurrency: + """Test cases for UnitRegistry.get_reference_currency method.""" + + def test_single_reference_currency(self) -> None: + """Test that get_reference_currency returns the correct currency when one is defined.""" + ureg = SpecialUnitRegistry() + # UnitRegistry already defines USD_2020 as [currency] in __init__ + reference = ureg.get_reference_currency() + assert reference == "USD_2020" + + def test_no_reference_currency_raises_error(self) -> None: + """Test that ValueError is raised when no reference currency is defined.""" + # Use base pint registry without currency definitions + ureg = SpecialUnitRegistry() + + ureg.define( + "USD_2020 = [not_a_currency]" + ) # Overwrite the default currency definition to not be a currency + + with pytest.raises(ValueError, match="does not have a unique base currency"): + ureg.get_reference_currency() + + def test_multiple_reference_currencies_raises_error(self) -> None: + """Test that ValueError is raised when multiple currencies are defined.""" + ureg = SpecialUnitRegistry() + ureg.define("EUR_2015 = [currency]") + + with pytest.raises(ValueError, match="does not have a unique base currency"): + ureg.get_reference_currency() + + +class TestUnitRegistryEnsureCurrencyIsUnit: + """Test cases for UnitRegistry.ensure_currency_is_unit method.""" + + def test_no_currency_units_does_nothing(self) -> None: + """Test that method does nothing when no currency units are present.""" + ureg = SpecialUnitRegistry() + initial_units = set(ureg._units.keys()) + + ureg.ensure_currency_is_unit("kW/hour") + + # No new units should be added + assert set(ureg._units.keys()) == initial_units + + def test_empty_string_does_nothing(self) -> None: + """Test that method does nothing with empty string.""" + ureg = SpecialUnitRegistry() + initial_units = set(ureg._units.keys()) + + ureg.ensure_currency_is_unit("") + + # No new units should be added + assert set(ureg._units.keys()) == initial_units + + def test_already_defined_currency_not_redefined(self) -> None: + """Test that already defined currency units are not redefined.""" + ureg = SpecialUnitRegistry() + # USD_2020 is already defined in UnitRegistry.__init__ + + # Should not raise an error or redefine + ureg.ensure_currency_is_unit("USD_2020/kW") + + # Verify USD_2020 is still defined + assert "USD_2020" in ureg._units + + def test_new_currency_unit_gets_defined(self) -> None: + """Test that new currency units get defined relative to reference currency.""" + ureg = SpecialUnitRegistry() + + # EUR_2015 should not be defined initially + assert "EUR_2015" not in ureg._units + + ureg.ensure_currency_is_unit("EUR_2015/kW") + + # EUR_2015 should now be defined + assert "EUR_2015" in ureg._units + + # Verify it's defined relative to the reference currency (USD_2020) + eur_unit = ureg._units["EUR_2015"] + assert "USD_2020" in str(eur_unit) + + def test_multiple_currency_units_get_defined(self) -> None: + """Test that multiple new currency units get defined.""" + ureg = SpecialUnitRegistry() + + # Neither should be defined initially + assert "EUR_2015" not in ureg._units + assert "GBP_2018" not in ureg._units + + ureg.ensure_currency_is_unit("EUR_2015/GBP_2018/kW") + + # Both should now be defined + assert "EUR_2015" in ureg._units + assert "GBP_2018" in ureg._units + + def test_mix_of_existing_and_new_currencies(self) -> None: + """Test handling mix of existing and new currency units.""" + ureg = SpecialUnitRegistry() + + # USD_2020 already exists, CAD_2019 doesn't + assert "USD_2020" in ureg._units + assert "CAD_2019" not in ureg._units + + ureg.ensure_currency_is_unit("USD_2020/CAD_2019") + + # Both should be defined + assert "USD_2020" in ureg._units + assert "CAD_2019" in ureg._units + + def test_currency_defined_with_nan_conversion(self) -> None: + """Test that new currencies are defined with nan conversion factor.""" + ureg = SpecialUnitRegistry() + + ureg.ensure_currency_is_unit("JPY_2021/kW") + + # Verify JPY_2021 is defined with nan relative to reference currency + jpy_unit = ureg._units["JPY_2021"] + assert "nan" in str(jpy_unit) or "NaN" in str(jpy_unit).lower() + + def test_complex_unit_string_with_currency(self) -> None: + """Test handling of complex unit strings containing currencies.""" + ureg = SpecialUnitRegistry() + + assert "CHF_2022" not in ureg._units + + ureg.ensure_currency_is_unit("CHF_2022/kW/year") + + assert "CHF_2022" in ureg._units + + def test_same_currency_different_years(self) -> None: + """Test that same currency with different years creates separate units.""" + ureg = SpecialUnitRegistry() + + ureg.ensure_currency_is_unit("EUR_2015/EUR_2020") + + # Both year variants should be defined + assert "EUR_2015" in ureg._units + assert "EUR_2020" in ureg._units + + def test_invalid_currency_code_raises_error(self) -> None: + """Test that invalid currency codes raise ValueError.""" + ureg = SpecialUnitRegistry() + + with pytest.raises(ValueError, match="invalid 3-letter currency codes"): + ureg.ensure_currency_is_unit("XYZ_2020/kW") + + +class TestCarrierRegistry: + """Test cases for creg (carrier registry) functionality.""" + + def test_creg_registry_parses_carriers(self) -> None: + """Test that the carrier registry (creg) loads carrier units from carriers.txt and can create Quantities.""" + expected_carriers = [ + "electricity", + "hydrogen", + "natural_gas", + "coal", + "diesel", + ] + for carrier in expected_carriers: + assert carrier in creg, f"Carrier '{carrier}' not found in creg registry." + q = creg.Quantity(1, carrier) + assert q.units == creg.Unit(carrier) + + +class TestHeatingValueRegistry: + """Test cases for hvreg (heating value registry) functionality.""" + + def test_hvreg_registry_parses_heating_values(self) -> None: + """Test that heating value registry (hvreg) loads heating value units from heating_values.txt and can create Quantities.""" + expected_hvs = [ + "LHV", + "HHV", + "NCV", + "GCV", + ] + for fuel in expected_hvs: + assert fuel in hvreg, f"Fuel '{fuel}' not found in hvreg registry." + q = hvreg.Quantity(1, fuel) + assert q.units == hvreg.Unit(fuel) + + def test_hvreg_units_compatability(self) -> None: + """Test that the same heating values are compatible, but different hvs are not.""" + compatible_hvs = ( + ["LHV", "NCV", "lower_heating_value"], + ["HHV", "GCV", "higher_heating_value"], + ) + for hvs in compatible_hvs: + units = [hvreg.Unit(hv) for hv in hvs] + + # Check compatibility + assert all(units[0].is_compatible_with(u) for u in units[1:]), ( + f"Units {units} should be compatible." + ) + + +class TestGetIso3FromCurrencyCode: + """Test cases for get_iso3_from_currency_code function.""" + + def test_special_case_currencies(self) -> None: + """Test that special case currencies return correct ISO3 codes.""" + # Test some known special cases + assert get_iso3_from_currency_code("USD") == "USA" + assert get_iso3_from_currency_code("EUR") == "EUR" + assert get_iso3_from_currency_code("GBP") == "GBR" + assert get_iso3_from_currency_code("CHF") == "CHE" + assert get_iso3_from_currency_code("NOK") == "NOR" + + def test_regular_currency_codes(self) -> None: + """Test that regular (non-special case) currency codes work correctly.""" + # Test currencies that should have unique mappings + result = get_iso3_from_currency_code("JPY") + assert result == "JPN" + + result = get_iso3_from_currency_code("CAD") + assert result == "CAN" + + def test_invalid_currency_code_raises_error(self) -> None: + """Test that invalid currency codes raise ValueError.""" + with pytest.raises(ValueError, match="Currency code 'XYZ' not found"): + get_iso3_from_currency_code("XYZ") + + with pytest.raises(ValueError, match="Currency code 'INVALID' not found"): + get_iso3_from_currency_code("INVALID") + + def test_empty_currency_code_raises_error(self) -> None: + """Test that empty currency code raises ValueError.""" + with pytest.raises(ValueError, match="Currency code '' not found"): + get_iso3_from_currency_code("") + + def test_case_sensitivity(self) -> None: + """Test that currency codes are case sensitive.""" + # Valid uppercase + assert get_iso3_from_currency_code("USD") == "USA" + + # Invalid lowercase should raise error + with pytest.raises(ValueError, match="Currency code 'usd' not found"): + get_iso3_from_currency_code("usd") + + def test_empty_special_cases(self) -> None: + """Test behavior with empty special cases dictionary.""" + # With empty special cases, USD should not be handled specially + # This might raise an error if USD has multiple ISO3 mappings + + try: + result = get_iso3_from_currency_code("USD", special_cases=frozendict({})) + # If no error, USD has a unique mapping + assert isinstance(result, str) + assert len(result) == 3 + except ValueError as e: + # Expected if USD has multiple mappings and needs special handling + assert "Some currency codes are used by multiple ISO3 codes" in str(e) + + def test_function_caching(self) -> None: + """Test that function results are cached (via @lru_cache decorator).""" + # Call function twice with same parameters + result1 = get_iso3_from_currency_code("USD") + result2 = get_iso3_from_currency_code("USD") + + # Results should be identical (cached) + assert result1 == result2 + assert result1 == "USA" + + def test_return_type_is_string(self) -> None: + """Test that function always returns a string.""" + result = get_iso3_from_currency_code("USD") + assert isinstance(result, str) + assert len(result) == 3 # ISO3 codes are always 3 characters + assert result.isupper() # ISO3 codes are uppercase + + def test_all_special_cases_work(self) -> None: + """Test that all predefined special cases work correctly.""" + for ( + currency_code, + expected_iso3, + ) in SPECIAL_CASES_CURRENCY_CODE_TO_ISO3.items(): + result = get_iso3_from_currency_code(currency_code) + assert result == expected_iso3, f"Failed for {currency_code}" + + def test_duplicate_currency_handling_error(self) -> None: + """Test that currencies with multiple ISO3 codes raise appropriate error when not in special cases.""" + # This test verifies the error handling for currencies that appear in multiple countries + # but are not handled in special cases. The exact currencies that trigger this depend + # on the current UN data, so we test the error mechanism rather than specific currencies. + + # Use empty special cases to potentially trigger the duplicate handling error + try: + special_cases = SPECIAL_CASES_CURRENCY_CODE_TO_ISO3.delete( + "USD" + ) # Remove USD to force error + # Try a currency that might have multiple mappings + get_iso3_from_currency_code("XCD", special_cases=special_cases) + except ValueError as e: + # If it's a duplicate currency error, check the message format + assert "Some currency codes are used by multiple ISO3 codes" in str(e) diff --git a/uv.lock b/uv.lock index 91c5b29f..edc2b8ae 100644 --- a/uv.lock +++ b/uv.lock @@ -2,6 +2,15 @@ version = 1 revision = 2 requires-python = ">=3.12" +[[package]] +name = "annotated-types" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081, upload_time = "2024-05-20T21:33:25.928Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload_time = "2024-05-20T21:33:24.1Z" }, +] + [[package]] name = "appnope" version = "0.1.4" @@ -52,6 +61,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/41/ff/392bff89415399a979be4a65357a41d92729ae8580a66073d8ec8d810f98/backrefs-5.9-py39-none-any.whl", hash = "sha256:f48ee18f6252b8f5777a22a00a09a85de0ca931658f1dd96d4406a34f3748c60", size = 380265, upload_time = "2025-06-22T19:34:12.405Z" }, ] +[[package]] +name = "beautifulsoup4" +version = "4.13.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "soupsieve" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d8/e4/0c4c39e18fd76d6a628d4dd8da40543d136ce2d1752bd6eeeab0791f4d6b/beautifulsoup4-4.13.4.tar.gz", hash = "sha256:dbb3c4e1ceae6aefebdaf2423247260cd062430a410e38c66f2baa50a8437195", size = 621067, upload_time = "2025-04-15T17:05:13.836Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/50/cd/30110dc0ffcf3b131156077b90e9f60ed75711223f306da4db08eff8403b/beautifulsoup4-4.13.4-py3-none-any.whl", hash = "sha256:9bbbb14bfde9d79f38b8cd5f8c7c85f4b8f2523190ebed90e950a8dea4cb1c4b", size = 187285, upload_time = "2025-04-15T17:05:12.221Z" }, +] + [[package]] name = "binaryornot" version = "0.4.4" @@ -306,6 +328,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/91/a1/cf2472db20f7ce4a6be1253a81cfdf85ad9c7885ffbed7047fb72c24cf87/distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87", size = 468973, upload_time = "2024-10-09T18:35:44.272Z" }, ] +[[package]] +name = "et-xmlfile" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d3/38/af70d7ab1ae9d4da450eeec1fa3918940a5fafb9055e934af8d6eb0c2313/et_xmlfile-2.0.0.tar.gz", hash = "sha256:dab3f4764309081ce75662649be815c4c9081e88f0837825f90fd28317d4da54", size = 17234, upload_time = "2024-10-25T17:25:40.039Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl", hash = "sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa", size = 18059, upload_time = "2024-10-25T17:25:39.051Z" }, +] + [[package]] name = "execnet" version = "2.1.1" @@ -333,6 +364,71 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/4d/36/2a115987e2d8c300a974597416d9de88f2444426de9571f4b59b2cca3acc/filelock-3.18.0-py3-none-any.whl", hash = "sha256:c401f4f8377c4464e6db25fff06205fd89bdd83b65eb0488ed1b160f780e21de", size = 16215, upload_time = "2025-03-14T07:11:39.145Z" }, ] +[[package]] +name = "flexcache" +version = "0.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/55/b0/8a21e330561c65653d010ef112bf38f60890051d244ede197ddaa08e50c1/flexcache-0.3.tar.gz", hash = "sha256:18743bd5a0621bfe2cf8d519e4c3bfdf57a269c15d1ced3fb4b64e0ff4600656", size = 15816, upload_time = "2024-03-09T03:21:07.555Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/27/cd/c883e1a7c447479d6e13985565080e3fea88ab5a107c21684c813dba1875/flexcache-0.3-py3-none-any.whl", hash = "sha256:d43c9fea82336af6e0115e308d9d33a185390b8346a017564611f1466dcd2e32", size = 13263, upload_time = "2024-03-09T03:21:05.635Z" }, +] + +[[package]] +name = "flexparser" +version = "0.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/82/99/b4de7e39e8eaf8207ba1a8fa2241dd98b2ba72ae6e16960d8351736d8702/flexparser-0.4.tar.gz", hash = "sha256:266d98905595be2ccc5da964fe0a2c3526fbbffdc45b65b3146d75db992ef6b2", size = 31799, upload_time = "2024-11-07T02:00:56.249Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fe/5e/3be305568fe5f34448807976dc82fc151d76c3e0e03958f34770286278c1/flexparser-0.4-py3-none-any.whl", hash = "sha256:3738b456192dcb3e15620f324c447721023c0293f6af9955b481e91d00179846", size = 27625, upload_time = "2024-11-07T02:00:54.523Z" }, +] + +[[package]] +name = "frictionless" +version = "5.18.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "chardet" }, + { name = "humanize" }, + { name = "isodate" }, + { name = "jinja2" }, + { name = "jsonschema" }, + { name = "marko" }, + { name = "petl" }, + { name = "pydantic" }, + { name = "python-dateutil" }, + { name = "python-slugify" }, + { name = "pyyaml" }, + { name = "requests" }, + { name = "rfc3986" }, + { name = "simpleeval" }, + { name = "tabulate" }, + { name = "typer" }, + { name = "typing-extensions" }, + { name = "validators" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/11/d0/c94675a1c1b8c12fd68489e2b4a924f80a2b122199cd986c58a5136197d2/frictionless-5.18.1.tar.gz", hash = "sha256:daeaf55f896eeb52b43e62600466af9528fe0aeeebd28b1b917e13322f370a8b", size = 74372478, upload_time = "2025-03-25T21:32:50.081Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a9/7a/dac76d31584bb4f874ae860490c9465f5b59bd8c110f68fbbb07aba48845/frictionless-5.18.1-py3-none-any.whl", hash = "sha256:3f4c87469a89bdb88e9cc318088553a26f3d14839098f95c183ea01fc89628dd", size = 531615, upload_time = "2025-03-25T21:32:45.534Z" }, +] + +[[package]] +name = "frozendict" +version = "2.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bb/59/19eb300ba28e7547538bdf603f1c6c34793240a90e1a7b61b65d8517e35e/frozendict-2.4.6.tar.gz", hash = "sha256:df7cd16470fbd26fc4969a208efadc46319334eb97def1ddf48919b351192b8e", size = 316416, upload_time = "2024-10-13T12:15:32.449Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/13/d9839089b900fa7b479cce495d62110cddc4bd5630a04d8469916c0e79c5/frozendict-2.4.6-py311-none-any.whl", hash = "sha256:d065db6a44db2e2375c23eac816f1a022feb2fa98cbb50df44a9e83700accbea", size = 16148, upload_time = "2024-10-13T12:15:26.839Z" }, + { url = "https://files.pythonhosted.org/packages/ba/d0/d482c39cee2ab2978a892558cf130681d4574ea208e162da8958b31e9250/frozendict-2.4.6-py312-none-any.whl", hash = "sha256:49344abe90fb75f0f9fdefe6d4ef6d4894e640fadab71f11009d52ad97f370b9", size = 16146, upload_time = "2024-10-13T12:15:28.16Z" }, + { url = "https://files.pythonhosted.org/packages/a5/8e/b6bf6a0de482d7d7d7a2aaac8fdc4a4d0bb24a809f5ddd422aa7060eb3d2/frozendict-2.4.6-py313-none-any.whl", hash = "sha256:7134a2bb95d4a16556bb5f2b9736dceb6ea848fa5b6f3f6c2d6dba93b44b4757", size = 16146, upload_time = "2024-10-13T12:15:29.495Z" }, +] + [[package]] name = "ghp-import" version = "2.1.0" @@ -381,6 +477,45 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/58/c6/5c20af38c2a57c15d87f7f38bee77d63c1d2a3689f74fefaf35915dd12b2/griffe-1.7.3-py3-none-any.whl", hash = "sha256:c6b3ee30c2f0f17f30bcdef5068d6ab7a2a4f1b8bf1a3e74b56fffd21e1c5f75", size = 129303, upload_time = "2025-04-23T11:29:07.145Z" }, ] +[[package]] +name = "hdx-python-country" +version = "3.9.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "hdx-python-utilities" }, + { name = "libhxl" }, + { name = "tenacity" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/88/96/ac55b204699cd216a22a943f64aafac32bba818f624a5d44879d60368fad/hdx_python_country-3.9.6.tar.gz", hash = "sha256:7791f4b9c5ae3e62e82795c266a3ca6ee23c7bab706c91533844edf2ebd9bb18", size = 529232, upload_time = "2025-07-09T22:56:32.162Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/45/90/646b56ec12df459799510d6d0869ada210ad9f765ad104e50dae4867eb50/hdx_python_country-3.9.6-py3-none-any.whl", hash = "sha256:4c1833bdf3cbd14dfff0146e0bdcae5763931d344fce5f1b42493dc8751e3d4a", size = 55554, upload_time = "2025-07-09T22:56:30.128Z" }, +] + +[[package]] +name = "hdx-python-utilities" +version = "3.8.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "frictionless" }, + { name = "ijson" }, + { name = "jsonlines" }, + { name = "loguru" }, + { name = "openpyxl" }, + { name = "pyphonetics" }, + { name = "python-dateutil" }, + { name = "ratelimit" }, + { name = "requests-file" }, + { name = "ruamel-yaml" }, + { name = "tableschema-to-template" }, + { name = "xlrd" }, + { name = "xlsx2csv" }, + { name = "xlwt" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/de/b812b6b242f47db98ed043b7f3211c81443f0e59959377e97a93915331c0/hdx_python_utilities-3.8.7.tar.gz", hash = "sha256:41212cd5b682777d393ee991b546f1b4326665d981714a829e5483101fd15a60", size = 656009, upload_time = "2025-05-14T02:31:28.578Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/db/38/44f2a0b83e103bb3d47dbc66dfaa4aaa65c34c60fd26d5445fb2bbd3c09a/hdx_python_utilities-3.8.7-py3-none-any.whl", hash = "sha256:47e67810e81a481504b8653c429b31b8c237da594dc27604075c8e79077c8640", size = 60787, upload_time = "2025-05-14T02:31:26.794Z" }, +] + [[package]] name = "htmlmin2" version = "0.1.13" @@ -389,6 +524,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/be/31/a76f4bfa885f93b8167cb4c85cf32b54d1f64384d0b897d45bc6d19b7b45/htmlmin2-0.1.13-py3-none-any.whl", hash = "sha256:75609f2a42e64f7ce57dbff28a39890363bde9e7e5885db633317efbdf8c79a2", size = 34486, upload_time = "2023-03-14T21:28:30.388Z" }, ] +[[package]] +name = "humanize" +version = "4.12.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/22/d1/bbc4d251187a43f69844f7fd8941426549bbe4723e8ff0a7441796b0789f/humanize-4.12.3.tar.gz", hash = "sha256:8430be3a615106fdfceb0b2c1b41c4c98c6b0fc5cc59663a5539b111dd325fb0", size = 80514, upload_time = "2025-04-30T11:51:07.98Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/1e/62a2ec3104394a2975a2629eec89276ede9dbe717092f6966fcf963e1bf0/humanize-4.12.3-py3-none-any.whl", hash = "sha256:2cbf6370af06568fa6d2da77c86edb7886f3160ecd19ee1ffef07979efc597f6", size = 128487, upload_time = "2025-04-30T11:51:06.468Z" }, +] + [[package]] name = "identify" version = "2.6.12" @@ -407,6 +551,62 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442, upload_time = "2024-09-15T18:07:37.964Z" }, ] +[[package]] +name = "ijson" +version = "3.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a3/4f/1cfeada63f5fce87536651268ddf5cca79b8b4bbb457aee4e45777964a0a/ijson-3.4.0.tar.gz", hash = "sha256:5f74dcbad9d592c428d3ca3957f7115a42689ee7ee941458860900236ae9bb13", size = 65782, upload_time = "2025-05-08T02:37:20.135Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f8/ec/317ee5b2d13e50448833ead3aa906659a32b376191f6abc2a7c6112d2b27/ijson-3.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:956b148f88259a80a9027ffbe2d91705fae0c004fbfba3e5a24028fbe72311a9", size = 87212, upload_time = "2025-05-08T02:35:51.835Z" }, + { url = "https://files.pythonhosted.org/packages/f8/43/b06c96ced30cacecc5d518f89b0fd1c98c294a30ff88848b70ed7b7f72a1/ijson-3.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:06b89960f5c721106394c7fba5760b3f67c515b8eb7d80f612388f5eca2f4621", size = 59175, upload_time = "2025-05-08T02:35:52.988Z" }, + { url = "https://files.pythonhosted.org/packages/e9/df/b4aeafb7ecde463130840ee9be36130823ec94a00525049bf700883378b8/ijson-3.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9a0bb591cf250dd7e9dfab69d634745a7f3272d31cfe879f9156e0a081fd97ee", size = 59011, upload_time = "2025-05-08T02:35:54.394Z" }, + { url = "https://files.pythonhosted.org/packages/e3/7c/a80b8e361641609507f62022089626d4b8067f0826f51e1c09e4ba86eba8/ijson-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:72e92de999977f4c6b660ffcf2b8d59604ccd531edcbfde05b642baf283e0de8", size = 146094, upload_time = "2025-05-08T02:35:55.601Z" }, + { url = "https://files.pythonhosted.org/packages/01/44/fa416347b9a802e3646c6ff377fc3278bd7d6106e17beb339514b6a3184e/ijson-3.4.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e9602157a5b869d44b6896e64f502c712a312fcde044c2e586fccb85d3e316e", size = 137903, upload_time = "2025-05-08T02:35:56.814Z" }, + { url = "https://files.pythonhosted.org/packages/24/c6/41a9ad4d42df50ff6e70fdce79b034f09b914802737ebbdc141153d8d791/ijson-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e83660edb931a425b7ff662eb49db1f10d30ca6d4d350e5630edbed098bc01", size = 148339, upload_time = "2025-05-08T02:35:58.595Z" }, + { url = "https://files.pythonhosted.org/packages/5f/6f/7d01efda415b8502dce67e067ed9e8a124f53e763002c02207e542e1a2f1/ijson-3.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:49bf8eac1c7b7913073865a859c215488461f7591b4fa6a33c14b51cb73659d0", size = 149383, upload_time = "2025-05-08T02:36:00.197Z" }, + { url = "https://files.pythonhosted.org/packages/95/6c/0d67024b9ecb57916c5e5ab0350251c9fe2f86dc9c8ca2b605c194bdad6a/ijson-3.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:160b09273cb42019f1811469508b0a057d19f26434d44752bde6f281da6d3f32", size = 141580, upload_time = "2025-05-08T02:36:01.998Z" }, + { url = "https://files.pythonhosted.org/packages/06/43/e10edcc1c6a3b619294de835e7678bfb3a1b8a75955f3689fd66a1e9e7b4/ijson-3.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2019ff4e6f354aa00c76c8591bd450899111c61f2354ad55cc127e2ce2492c44", size = 150280, upload_time = "2025-05-08T02:36:03.926Z" }, + { url = "https://files.pythonhosted.org/packages/07/84/1cbeee8e8190a1ebe6926569a92cf1fa80ddb380c129beb6f86559e1bb24/ijson-3.4.0-cp312-cp312-win32.whl", hash = "sha256:931c007bf6bb8330705429989b2deed6838c22b63358a330bf362b6e458ba0bf", size = 51512, upload_time = "2025-05-08T02:36:05.595Z" }, + { url = "https://files.pythonhosted.org/packages/66/13/530802bc391c95be6fe9f96e9aa427d94067e7c0b7da7a9092344dc44c4b/ijson-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:71523f2b64cb856a820223e94d23e88369f193017ecc789bb4de198cc9d349eb", size = 54081, upload_time = "2025-05-08T02:36:07.099Z" }, + { url = "https://files.pythonhosted.org/packages/77/b3/b1d2eb2745e5204ec7a25365a6deb7868576214feb5e109bce368fb692c9/ijson-3.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e8d96f88d75196a61c9d9443de2b72c2d4a7ba9456ff117b57ae3bba23a54256", size = 87216, upload_time = "2025-05-08T02:36:08.414Z" }, + { url = "https://files.pythonhosted.org/packages/b1/cd/cd6d340087617f8cc9bedbb21d974542fe2f160ed0126b8288d3499a469b/ijson-3.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c45906ce2c1d3b62f15645476fc3a6ca279549127f01662a39ca5ed334a00cf9", size = 59170, upload_time = "2025-05-08T02:36:09.604Z" }, + { url = "https://files.pythonhosted.org/packages/3e/4d/32d3a9903b488d3306e3c8288f6ee4217d2eea82728261db03a1045eb5d1/ijson-3.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4ab4bc2119b35c4363ea49f29563612237cae9413d2fbe54b223be098b97bc9e", size = 59013, upload_time = "2025-05-08T02:36:10.696Z" }, + { url = "https://files.pythonhosted.org/packages/d5/c8/db15465ab4b0b477cee5964c8bfc94bf8c45af8e27a23e1ad78d1926e587/ijson-3.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97b0a9b5a15e61dfb1f14921ea4e0dba39f3a650df6d8f444ddbc2b19b479ff1", size = 146564, upload_time = "2025-05-08T02:36:11.916Z" }, + { url = "https://files.pythonhosted.org/packages/c4/d8/0755545bc122473a9a434ab90e0f378780e603d75495b1ca3872de757873/ijson-3.4.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e3047bb994dabedf11de11076ed1147a307924b6e5e2df6784fb2599c4ad8c60", size = 137917, upload_time = "2025-05-08T02:36:13.532Z" }, + { url = "https://files.pythonhosted.org/packages/d0/c6/aeb89c8939ebe3f534af26c8c88000c5e870dbb6ae33644c21a4531f87d2/ijson-3.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68c83161b052e9f5dc8191acbc862bb1e63f8a35344cb5cd0db1afd3afd487a6", size = 148897, upload_time = "2025-05-08T02:36:14.813Z" }, + { url = "https://files.pythonhosted.org/packages/be/0e/7ef6e9b372106f2682a4a32b3c65bf86bb471a1670e4dac242faee4a7d3f/ijson-3.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1eebd9b6c20eb1dffde0ae1f0fbb4aeacec2eb7b89adb5c7c0449fc9fd742760", size = 149711, upload_time = "2025-05-08T02:36:16.476Z" }, + { url = "https://files.pythonhosted.org/packages/d1/5d/9841c3ed75bcdabf19b3202de5f862a9c9c86ce5c7c9d95fa32347fdbf5f/ijson-3.4.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:13fb6d5c35192c541421f3ee81239d91fc15a8d8f26c869250f941f4b346a86c", size = 141691, upload_time = "2025-05-08T02:36:18.044Z" }, + { url = "https://files.pythonhosted.org/packages/d5/d2/ce74e17218dba292e9be10a44ed0c75439f7958cdd263adb0b5b92d012d5/ijson-3.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:28b7196ff7b37c4897c547a28fa4876919696739fc91c1f347651c9736877c69", size = 150738, upload_time = "2025-05-08T02:36:19.483Z" }, + { url = "https://files.pythonhosted.org/packages/4e/43/dcc480f94453b1075c9911d4755b823f3ace275761bb37b40139f22109ca/ijson-3.4.0-cp313-cp313-win32.whl", hash = "sha256:3c2691d2da42629522140f77b99587d6f5010440d58d36616f33bc7bdc830cc3", size = 51512, upload_time = "2025-05-08T02:36:20.99Z" }, + { url = "https://files.pythonhosted.org/packages/35/dd/d8c5f15efd85ba51e6e11451ebe23d779361a9ec0d192064c2a8c3cdfcb8/ijson-3.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:c4554718c275a044c47eb3874f78f2c939f300215d9031e785a6711cc51b83fc", size = 54074, upload_time = "2025-05-08T02:36:22.075Z" }, + { url = "https://files.pythonhosted.org/packages/79/73/24ad8cd106203419c4d22bed627e02e281d66b83e91bc206a371893d0486/ijson-3.4.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:915a65e3f3c0eee2ea937bc62aaedb6c14cc1e8f0bb9f3f4fb5a9e2bbfa4b480", size = 91694, upload_time = "2025-05-08T02:36:23.289Z" }, + { url = "https://files.pythonhosted.org/packages/17/2d/f7f680984bcb7324a46a4c2df3bd73cf70faef0acfeb85a3f811abdfd590/ijson-3.4.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:afbe9748707684b6c5adc295c4fdcf27765b300aec4d484e14a13dca4e5c0afa", size = 61390, upload_time = "2025-05-08T02:36:24.42Z" }, + { url = "https://files.pythonhosted.org/packages/09/a1/f3ca7bab86f95bdb82494739e71d271410dfefce4590785d511669127145/ijson-3.4.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:d823f8f321b4d8d5fa020d0a84f089fec5d52b7c0762430476d9f8bf95bbc1a9", size = 61140, upload_time = "2025-05-08T02:36:26.708Z" }, + { url = "https://files.pythonhosted.org/packages/51/79/dd340df3d4fc7771c95df29997956b92ed0570fe7b616d1792fea9ad93f2/ijson-3.4.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8a0a2c54f3becf76881188beefd98b484b1d3bd005769a740d5b433b089fa23", size = 214739, upload_time = "2025-05-08T02:36:27.973Z" }, + { url = "https://files.pythonhosted.org/packages/59/f0/85380b7f51d1f5fb7065d76a7b623e02feca920cc678d329b2eccc0011e0/ijson-3.4.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ced19a83ab09afa16257a0b15bc1aa888dbc555cb754be09d375c7f8d41051f2", size = 198338, upload_time = "2025-05-08T02:36:29.496Z" }, + { url = "https://files.pythonhosted.org/packages/a5/cd/313264cf2ec42e0f01d198c49deb7b6fadeb793b3685e20e738eb6b3fa13/ijson-3.4.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8100f9885eff1f38d35cef80ef759a1bbf5fc946349afa681bd7d0e681b7f1a0", size = 207515, upload_time = "2025-05-08T02:36:30.981Z" }, + { url = "https://files.pythonhosted.org/packages/12/94/bf14457aa87ea32641f2db577c9188ef4e4ae373478afef422b31fc7f309/ijson-3.4.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d7bcc3f7f21b0f703031ecd15209b1284ea51b2a329d66074b5261de3916c1eb", size = 210081, upload_time = "2025-05-08T02:36:32.403Z" }, + { url = "https://files.pythonhosted.org/packages/7d/b4/eaee39e290e40e52d665db9bd1492cfdce86bd1e47948e0440db209c6023/ijson-3.4.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:2dcb190227b09dd171bdcbfe4720fddd574933c66314818dfb3960c8a6246a77", size = 199253, upload_time = "2025-05-08T02:36:33.861Z" }, + { url = "https://files.pythonhosted.org/packages/c5/9c/e09c7b9ac720a703ab115b221b819f149ed54c974edfff623c1e925e57da/ijson-3.4.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:eda4cfb1d49c6073a901735aaa62e39cb7ab47f3ad7bb184862562f776f1fa8a", size = 203816, upload_time = "2025-05-08T02:36:35.348Z" }, + { url = "https://files.pythonhosted.org/packages/7c/14/acd304f412e32d16a2c12182b9d78206bb0ae35354d35664f45db05c1b3b/ijson-3.4.0-cp313-cp313t-win32.whl", hash = "sha256:0772638efa1f3b72b51736833404f1cbd2f5beeb9c1a3d392e7d385b9160cba7", size = 53760, upload_time = "2025-05-08T02:36:36.608Z" }, + { url = "https://files.pythonhosted.org/packages/2f/24/93dd0a467191590a5ed1fc2b35842bca9d09900d001e00b0b497c0208ef6/ijson-3.4.0-cp313-cp313t-win_amd64.whl", hash = "sha256:3d8a0d67f36e4fb97c61a724456ef0791504b16ce6f74917a31c2e92309bbeb9", size = 56948, upload_time = "2025-05-08T02:36:37.849Z" }, +] + +[[package]] +name = "imf-reader" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "beautifulsoup4" }, + { name = "chardet" }, + { name = "pandas" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/af/45/24521d229aec5c058d998510794567788bc7b1b764dfaa02fb8e0aeda4b7/imf_reader-1.3.0.tar.gz", hash = "sha256:3f3130dd793a112fdd5913a7c7b733847a5a07fd70dee14d57624ae4e021a141", size = 12990, upload_time = "2025-02-06T09:16:10.723Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fd/5b/3a063116950f2aa2b450120e78162bb5b87098dde3b75ae90210c6f2c099/imf_reader-1.3.0-py3-none-any.whl", hash = "sha256:3515c6644dfef44d5fda89f5bb3786b4f83da20f49184911f0df2386782106f1", size = 16520, upload_time = "2025-02-06T09:16:09.042Z" }, +] + [[package]] name = "iniconfig" version = "2.1.0" @@ -473,6 +673,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl", hash = "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c", size = 8074, upload_time = "2025-01-17T11:24:33.271Z" }, ] +[[package]] +name = "isodate" +version = "0.7.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/54/4d/e940025e2ce31a8ce1202635910747e5a87cc3a6a6bb2d00973375014749/isodate-0.7.2.tar.gz", hash = "sha256:4cd1aa0f43ca76f4a6c6c0292a85f40b35ec2e43e315b59f06e6d32171a953e6", size = 29705, upload_time = "2024-10-08T23:04:11.5Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl", hash = "sha256:28009937d8031054830160fce6d409ed342816b543597cece116d966c6d99e15", size = 22320, upload_time = "2024-10-08T23:04:09.501Z" }, +] + [[package]] name = "jedi" version = "0.19.2" @@ -497,12 +706,72 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload_time = "2025-03-05T20:05:00.369Z" }, ] +[[package]] +name = "joblib" +version = "1.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/dc/fe/0f5a938c54105553436dbff7a61dc4fed4b1b2c98852f8833beaf4d5968f/joblib-1.5.1.tar.gz", hash = "sha256:f4f86e351f39fe3d0d32a9f2c3d8af1ee4cec285aafcb27003dda5205576b444", size = 330475, upload_time = "2025-05-23T12:04:37.097Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7d/4f/1195bbac8e0c2acc5f740661631d8d750dc38d4a32b23ee5df3cde6f4e0d/joblib-1.5.1-py3-none-any.whl", hash = "sha256:4719a31f054c7d766948dcd83e9613686b27114f190f717cec7eaa2084f8a74a", size = 307746, upload_time = "2025-05-23T12:04:35.124Z" }, +] + [[package]] name = "jsmin" version = "3.0.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/5e/73/e01e4c5e11ad0494f4407a3f623ad4d87714909f50b17a06ed121034ff6e/jsmin-3.0.1.tar.gz", hash = "sha256:c0959a121ef94542e807a674142606f7e90214a2b3d1eb17300244bbb5cc2bfc", size = 13925, upload_time = "2022-01-16T20:35:59.13Z" } +[[package]] +name = "jsonlines" +version = "4.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/35/87/bcda8e46c88d0e34cad2f09ee2d0c7f5957bccdb9791b0b934ec84d84be4/jsonlines-4.0.0.tar.gz", hash = "sha256:0c6d2c09117550c089995247f605ae4cf77dd1533041d366351f6f298822ea74", size = 11359, upload_time = "2023-09-01T12:34:44.187Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f8/62/d9ba6323b9202dd2fe166beab8a86d29465c41a0288cbe229fac60c1ab8d/jsonlines-4.0.0-py3-none-any.whl", hash = "sha256:185b334ff2ca5a91362993f42e83588a360cf95ce4b71a73548502bda52a7c55", size = 8701, upload_time = "2023-09-01T12:34:42.563Z" }, +] + +[[package]] +name = "jsonpath-ng" +version = "1.7.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ply" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6d/86/08646239a313f895186ff0a4573452038eed8c86f54380b3ebac34d32fb2/jsonpath-ng-1.7.0.tar.gz", hash = "sha256:f6f5f7fd4e5ff79c785f1573b394043b39849fb2bb47bcead935d12b00beab3c", size = 37838, upload_time = "2024-10-11T15:41:42.404Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/35/5a/73ecb3d82f8615f32ccdadeb9356726d6cae3a4bbc840b437ceb95708063/jsonpath_ng-1.7.0-py3-none-any.whl", hash = "sha256:f3d7f9e848cba1b6da28c55b1c26ff915dc9e0b1ba7e752a53d6da8d5cbd00b6", size = 30105, upload_time = "2024-11-20T17:58:30.418Z" }, +] + +[[package]] +name = "jsonschema" +version = "4.24.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "jsonschema-specifications" }, + { name = "referencing" }, + { name = "rpds-py" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bf/d3/1cf5326b923a53515d8f3a2cd442e6d7e94fcc444716e879ea70a0ce3177/jsonschema-4.24.0.tar.gz", hash = "sha256:0b4e8069eb12aedfa881333004bccaec24ecef5a8a6a4b6df142b2cc9599d196", size = 353480, upload_time = "2025-05-26T18:48:10.459Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a2/3d/023389198f69c722d039351050738d6755376c8fd343e91dc493ea485905/jsonschema-4.24.0-py3-none-any.whl", hash = "sha256:a462455f19f5faf404a7902952b6f0e3ce868f3ee09a359b05eca6673bd8412d", size = 88709, upload_time = "2025-05-26T18:48:08.417Z" }, +] + +[[package]] +name = "jsonschema-specifications" +version = "2025.4.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "referencing" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bf/ce/46fbd9c8119cfc3581ee5643ea49464d168028cfb5caff5fc0596d0cf914/jsonschema_specifications-2025.4.1.tar.gz", hash = "sha256:630159c9f4dbea161a6a2205c3011cc4f18ff381b189fff48bb39b9bf26ae608", size = 15513, upload_time = "2025-04-23T12:34:07.418Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/01/0e/b27cdbaccf30b890c40ed1da9fd4a3593a5cf94dae54fb34f8a4b74fcd3f/jsonschema_specifications-2025.4.1-py3-none-any.whl", hash = "sha256:4653bffbd6584f7de83a67e0d620ef16900b390ddc7939d56684d6c81e33f1af", size = 18437, upload_time = "2025-04-23T12:34:05.422Z" }, +] + [[package]] name = "jupyter-client" version = "8.6.3" @@ -533,6 +802,24 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/2f/57/6bffd4b20b88da3800c5d691e0337761576ee688eb01299eae865689d2df/jupyter_core-5.8.1-py3-none-any.whl", hash = "sha256:c28d268fc90fb53f1338ded2eb410704c5449a358406e8a948b75706e24863d0", size = 28880, upload_time = "2025-05-27T07:38:15.137Z" }, ] +[[package]] +name = "libhxl" +version = "5.2.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jsonpath-ng" }, + { name = "ply" }, + { name = "python-dateutil" }, + { name = "python-io-wrapper" }, + { name = "requests" }, + { name = "structlog" }, + { name = "unidecode" }, + { name = "urllib3" }, + { name = "wheel" }, + { name = "xlrd3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/63/ad/c1dafb7c59e685692a2eeafce83245b7c5f46e05881fdb77a0cbb7c19c74/libhxl-5.2.2.tar.gz", hash = "sha256:3a74d9f23561bfcefd20e5229c574bc68dfc114fdb6ba1ba684d9e9d7ea52483", size = 127736, upload_time = "2024-10-25T09:19:11.202Z" } + [[package]] name = "license-expression" version = "30.4.4" @@ -545,6 +832,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/af/40/791891d4c0c4dab4c5e187c17261cedc26285fd41541577f900470a45a4d/license_expression-30.4.4-py3-none-any.whl", hash = "sha256:421788fdcadb41f049d2dc934ce666626265aeccefddd25e162a26f23bcbf8a4", size = 120615, upload_time = "2025-07-22T11:13:31.217Z" }, ] +[[package]] +name = "loguru" +version = "0.7.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "win32-setctime", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3a/05/a1dae3dffd1116099471c643b8924f5aa6524411dc6c63fdae648c4f1aca/loguru-0.7.3.tar.gz", hash = "sha256:19480589e77d47b8d85b2c827ad95d49bf31b0dcde16593892eb51dd18706eb6", size = 63559, upload_time = "2024-12-06T11:20:56.608Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl", hash = "sha256:31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c", size = 61595, upload_time = "2024-12-06T11:20:54.538Z" }, +] + [[package]] name = "markdown" version = "3.8.2" @@ -554,6 +854,27 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/96/2b/34cc11786bc00d0f04d0f5fdc3a2b1ae0b6239eef72d3d345805f9ad92a1/markdown-3.8.2-py3-none-any.whl", hash = "sha256:5c83764dbd4e00bdd94d85a19b8d55ccca20fe35b2e678a1422b380324dd5f24", size = 106827, upload_time = "2025-06-19T17:12:42.994Z" }, ] +[[package]] +name = "markdown-it-py" +version = "3.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mdurl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596, upload_time = "2023-06-03T06:41:14.443Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528, upload_time = "2023-06-03T06:41:11.019Z" }, +] + +[[package]] +name = "marko" +version = "2.1.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/dc/c8cadbd83de1b38d95a48568b445a5553005ebdd32e00a333ca940113db4/marko-2.1.4.tar.gz", hash = "sha256:dd7d66f3706732bf8f994790e674649a4fd0a6c67f16b80246f30de8e16a1eac", size = 142795, upload_time = "2025-06-13T03:25:50.857Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c3/66/49e3691d14898fb6e34ccb337c7677dfb7e18269ed170f12e4b85315eae6/marko-2.1.4-py3-none-any.whl", hash = "sha256:81c2b9f570ca485bc356678d9ba1a1b3eb78b4a315d01f3ded25442fdc796990", size = 42186, upload_time = "2025-06-13T03:25:49.858Z" }, +] + [[package]] name = "markupsafe" version = "3.0.2" @@ -604,6 +925,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/8f/8e/9ad090d3553c280a8060fbf6e24dc1c0c29704ee7d1c372f0c174aa59285/matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca", size = 9899, upload_time = "2024-04-15T13:44:43.265Z" }, ] +[[package]] +name = "mdurl" +version = "0.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload_time = "2022-08-14T12:40:10.846Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload_time = "2022-08-14T12:40:09.779Z" }, +] + [[package]] name = "mergedeep" version = "1.3.4" @@ -875,6 +1205,34 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d4/ca/af82bf0fad4c3e573c6930ed743b5308492ff19917c7caaf2f9b6f9e2e98/numpy-2.3.1-cp313-cp313t-win_arm64.whl", hash = "sha256:eccb9a159db9aed60800187bc47a6d3451553f0e1b08b068d8b277ddfbb9b244", size = 10260376, upload_time = "2025-06-21T12:24:56.884Z" }, ] +[[package]] +name = "oda-reader" +version = "1.2.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "joblib" }, + { name = "openpyxl" }, + { name = "pandas" }, + { name = "pyarrow" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1a/d1/5c0bb2a714ebea7df131b8e87010eab39d0df75878f6785f2a214ff66bb2/oda_reader-1.2.2.tar.gz", hash = "sha256:55be081e1744e75184eca3d09e794fad71958201d08b48fb497aac97a95f3685", size = 35630, upload_time = "2025-06-16T16:15:05.49Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d8/ec/59338ec9108848dc53f50e7381b9817595bf98f414f4a732100a06828a3b/oda_reader-1.2.2-py3-none-any.whl", hash = "sha256:7f7b854ab1e9bc2cf64b6c63bd56a2ac64cb90ec054518fd01b741fd518cf007", size = 45314, upload_time = "2025-06-16T16:15:04.328Z" }, +] + +[[package]] +name = "openpyxl" +version = "3.1.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "et-xmlfile" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3d/f9/88d94a75de065ea32619465d2f77b29a0469500e99012523b91cc4141cd1/openpyxl-3.1.5.tar.gz", hash = "sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050", size = 186464, upload_time = "2024-06-28T14:03:44.161Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl", hash = "sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2", size = 250910, upload_time = "2024-06-28T14:03:41.161Z" }, +] + [[package]] name = "packaging" version = "25.0" @@ -945,6 +1303,12 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", size = 31191, upload_time = "2023-12-10T22:30:43.14Z" }, ] +[[package]] +name = "petl" +version = "1.7.16" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/99/28/ce7321fbd3b981fd9c212adf7455e0e4e42babebd83b92e24f8265d13dd3/petl-1.7.16.tar.gz", hash = "sha256:9c2fea64d859da45e120fd86d471e5387396cc45d5d4986efa79679f18eb8752", size = 420780, upload_time = "2025-04-04T23:54:50.921Z" } + [[package]] name = "pexpect" version = "4.9.0" @@ -957,6 +1321,21 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772, upload_time = "2023-11-25T06:56:14.81Z" }, ] +[[package]] +name = "pint" +version = "0.24.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "flexcache" }, + { name = "flexparser" }, + { name = "platformdirs" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/20/bb/52b15ddf7b7706ed591134a895dbf6e41c8348171fb635e655e0a4bbb0ea/pint-0.24.4.tar.gz", hash = "sha256:35275439b574837a6cd3020a5a4a73645eb125ce4152a73a2f126bf164b91b80", size = 342225, upload_time = "2024-11-07T16:29:46.061Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/16/bd2f5904557265882108dc2e04f18abc05ab0c2b7082ae9430091daf1d5c/Pint-0.24.4-py3-none-any.whl", hash = "sha256:aa54926c8772159fcf65f82cc0d34de6768c151b32ad1deb0331291c38fe7659", size = 302029, upload_time = "2024-11-07T16:29:43.976Z" }, +] + [[package]] name = "platformdirs" version = "4.3.8" @@ -975,6 +1354,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload_time = "2025-05-15T12:30:06.134Z" }, ] +[[package]] +name = "ply" +version = "3.11" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e5/69/882ee5c9d017149285cab114ebeab373308ef0f874fcdac9beb90e0ac4da/ply-3.11.tar.gz", hash = "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3", size = 159130, upload_time = "2018-02-15T19:01:31.097Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a3/58/35da89ee790598a0700ea49b2a66594140f44dec458c07e8e3d4979137fc/ply-3.11-py2.py3-none-any.whl", hash = "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce", size = 49567, upload_time = "2018-02-15T19:01:27.172Z" }, +] + [[package]] name = "pre-commit" version = "4.2.0" @@ -1036,6 +1424,41 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842, upload_time = "2024-07-21T12:58:20.04Z" }, ] +[[package]] +name = "pyarrow" +version = "20.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/ee/a7810cb9f3d6e9238e61d312076a9859bf3668fd21c69744de9532383912/pyarrow-20.0.0.tar.gz", hash = "sha256:febc4a913592573c8d5805091a6c2b5064c8bd6e002131f01061797d91c783c1", size = 1125187, upload_time = "2025-04-27T12:34:23.264Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a1/d6/0c10e0d54f6c13eb464ee9b67a68b8c71bcf2f67760ef5b6fbcddd2ab05f/pyarrow-20.0.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:75a51a5b0eef32727a247707d4755322cb970be7e935172b6a3a9f9ae98404ba", size = 30815067, upload_time = "2025-04-27T12:29:44.384Z" }, + { url = "https://files.pythonhosted.org/packages/7e/e2/04e9874abe4094a06fd8b0cbb0f1312d8dd7d707f144c2ec1e5e8f452ffa/pyarrow-20.0.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:211d5e84cecc640c7a3ab900f930aaff5cd2702177e0d562d426fb7c4f737781", size = 32297128, upload_time = "2025-04-27T12:29:52.038Z" }, + { url = "https://files.pythonhosted.org/packages/31/fd/c565e5dcc906a3b471a83273039cb75cb79aad4a2d4a12f76cc5ae90a4b8/pyarrow-20.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ba3cf4182828be7a896cbd232aa8dd6a31bd1f9e32776cc3796c012855e1199", size = 41334890, upload_time = "2025-04-27T12:29:59.452Z" }, + { url = "https://files.pythonhosted.org/packages/af/a9/3bdd799e2c9b20c1ea6dc6fa8e83f29480a97711cf806e823f808c2316ac/pyarrow-20.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c3a01f313ffe27ac4126f4c2e5ea0f36a5fc6ab51f8726cf41fee4b256680bd", size = 42421775, upload_time = "2025-04-27T12:30:06.875Z" }, + { url = "https://files.pythonhosted.org/packages/10/f7/da98ccd86354c332f593218101ae56568d5dcedb460e342000bd89c49cc1/pyarrow-20.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:a2791f69ad72addd33510fec7bb14ee06c2a448e06b649e264c094c5b5f7ce28", size = 40687231, upload_time = "2025-04-27T12:30:13.954Z" }, + { url = "https://files.pythonhosted.org/packages/bb/1b/2168d6050e52ff1e6cefc61d600723870bf569cbf41d13db939c8cf97a16/pyarrow-20.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:4250e28a22302ce8692d3a0e8ec9d9dde54ec00d237cff4dfa9c1fbf79e472a8", size = 42295639, upload_time = "2025-04-27T12:30:21.949Z" }, + { url = "https://files.pythonhosted.org/packages/b2/66/2d976c0c7158fd25591c8ca55aee026e6d5745a021915a1835578707feb3/pyarrow-20.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:89e030dc58fc760e4010148e6ff164d2f44441490280ef1e97a542375e41058e", size = 42908549, upload_time = "2025-04-27T12:30:29.551Z" }, + { url = "https://files.pythonhosted.org/packages/31/a9/dfb999c2fc6911201dcbf348247f9cc382a8990f9ab45c12eabfd7243a38/pyarrow-20.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6102b4864d77102dbbb72965618e204e550135a940c2534711d5ffa787df2a5a", size = 44557216, upload_time = "2025-04-27T12:30:36.977Z" }, + { url = "https://files.pythonhosted.org/packages/a0/8e/9adee63dfa3911be2382fb4d92e4b2e7d82610f9d9f668493bebaa2af50f/pyarrow-20.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:96d6a0a37d9c98be08f5ed6a10831d88d52cac7b13f5287f1e0f625a0de8062b", size = 25660496, upload_time = "2025-04-27T12:30:42.809Z" }, + { url = "https://files.pythonhosted.org/packages/9b/aa/daa413b81446d20d4dad2944110dcf4cf4f4179ef7f685dd5a6d7570dc8e/pyarrow-20.0.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:a15532e77b94c61efadde86d10957950392999503b3616b2ffcef7621a002893", size = 30798501, upload_time = "2025-04-27T12:30:48.351Z" }, + { url = "https://files.pythonhosted.org/packages/ff/75/2303d1caa410925de902d32ac215dc80a7ce7dd8dfe95358c165f2adf107/pyarrow-20.0.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:dd43f58037443af715f34f1322c782ec463a3c8a94a85fdb2d987ceb5658e061", size = 32277895, upload_time = "2025-04-27T12:30:55.238Z" }, + { url = "https://files.pythonhosted.org/packages/92/41/fe18c7c0b38b20811b73d1bdd54b1fccba0dab0e51d2048878042d84afa8/pyarrow-20.0.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa0d288143a8585806e3cc7c39566407aab646fb9ece164609dac1cfff45f6ae", size = 41327322, upload_time = "2025-04-27T12:31:05.587Z" }, + { url = "https://files.pythonhosted.org/packages/da/ab/7dbf3d11db67c72dbf36ae63dcbc9f30b866c153b3a22ef728523943eee6/pyarrow-20.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6953f0114f8d6f3d905d98e987d0924dabce59c3cda380bdfaa25a6201563b4", size = 42411441, upload_time = "2025-04-27T12:31:15.675Z" }, + { url = "https://files.pythonhosted.org/packages/90/c3/0c7da7b6dac863af75b64e2f827e4742161128c350bfe7955b426484e226/pyarrow-20.0.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:991f85b48a8a5e839b2128590ce07611fae48a904cae6cab1f089c5955b57eb5", size = 40677027, upload_time = "2025-04-27T12:31:24.631Z" }, + { url = "https://files.pythonhosted.org/packages/be/27/43a47fa0ff9053ab5203bb3faeec435d43c0d8bfa40179bfd076cdbd4e1c/pyarrow-20.0.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:97c8dc984ed09cb07d618d57d8d4b67a5100a30c3818c2fb0b04599f0da2de7b", size = 42281473, upload_time = "2025-04-27T12:31:31.311Z" }, + { url = "https://files.pythonhosted.org/packages/bc/0b/d56c63b078876da81bbb9ba695a596eabee9b085555ed12bf6eb3b7cab0e/pyarrow-20.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9b71daf534f4745818f96c214dbc1e6124d7daf059167330b610fc69b6f3d3e3", size = 42893897, upload_time = "2025-04-27T12:31:39.406Z" }, + { url = "https://files.pythonhosted.org/packages/92/ac/7d4bd020ba9145f354012838692d48300c1b8fe5634bfda886abcada67ed/pyarrow-20.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e8b88758f9303fa5a83d6c90e176714b2fd3852e776fc2d7e42a22dd6c2fb368", size = 44543847, upload_time = "2025-04-27T12:31:45.997Z" }, + { url = "https://files.pythonhosted.org/packages/9d/07/290f4abf9ca702c5df7b47739c1b2c83588641ddfa2cc75e34a301d42e55/pyarrow-20.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:30b3051b7975801c1e1d387e17c588d8ab05ced9b1e14eec57915f79869b5031", size = 25653219, upload_time = "2025-04-27T12:31:54.11Z" }, + { url = "https://files.pythonhosted.org/packages/95/df/720bb17704b10bd69dde086e1400b8eefb8f58df3f8ac9cff6c425bf57f1/pyarrow-20.0.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:ca151afa4f9b7bc45bcc791eb9a89e90a9eb2772767d0b1e5389609c7d03db63", size = 30853957, upload_time = "2025-04-27T12:31:59.215Z" }, + { url = "https://files.pythonhosted.org/packages/d9/72/0d5f875efc31baef742ba55a00a25213a19ea64d7176e0fe001c5d8b6e9a/pyarrow-20.0.0-cp313-cp313t-macosx_12_0_x86_64.whl", hash = "sha256:4680f01ecd86e0dd63e39eb5cd59ef9ff24a9d166db328679e36c108dc993d4c", size = 32247972, upload_time = "2025-04-27T12:32:05.369Z" }, + { url = "https://files.pythonhosted.org/packages/d5/bc/e48b4fa544d2eea72f7844180eb77f83f2030b84c8dad860f199f94307ed/pyarrow-20.0.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f4c8534e2ff059765647aa69b75d6543f9fef59e2cd4c6d18015192565d2b70", size = 41256434, upload_time = "2025-04-27T12:32:11.814Z" }, + { url = "https://files.pythonhosted.org/packages/c3/01/974043a29874aa2cf4f87fb07fd108828fc7362300265a2a64a94965e35b/pyarrow-20.0.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e1f8a47f4b4ae4c69c4d702cfbdfe4d41e18e5c7ef6f1bb1c50918c1e81c57b", size = 42353648, upload_time = "2025-04-27T12:32:20.766Z" }, + { url = "https://files.pythonhosted.org/packages/68/95/cc0d3634cde9ca69b0e51cbe830d8915ea32dda2157560dda27ff3b3337b/pyarrow-20.0.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:a1f60dc14658efaa927f8214734f6a01a806d7690be4b3232ba526836d216122", size = 40619853, upload_time = "2025-04-27T12:32:28.1Z" }, + { url = "https://files.pythonhosted.org/packages/29/c2/3ad40e07e96a3e74e7ed7cc8285aadfa84eb848a798c98ec0ad009eb6bcc/pyarrow-20.0.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:204a846dca751428991346976b914d6d2a82ae5b8316a6ed99789ebf976551e6", size = 42241743, upload_time = "2025-04-27T12:32:35.792Z" }, + { url = "https://files.pythonhosted.org/packages/eb/cb/65fa110b483339add6a9bc7b6373614166b14e20375d4daa73483755f830/pyarrow-20.0.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:f3b117b922af5e4c6b9a9115825726cac7d8b1421c37c2b5e24fbacc8930612c", size = 42839441, upload_time = "2025-04-27T12:32:46.64Z" }, + { url = "https://files.pythonhosted.org/packages/98/7b/f30b1954589243207d7a0fbc9997401044bf9a033eec78f6cb50da3f304a/pyarrow-20.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e724a3fd23ae5b9c010e7be857f4405ed5e679db5c93e66204db1a69f733936a", size = 44503279, upload_time = "2025-04-27T12:32:56.503Z" }, + { url = "https://files.pythonhosted.org/packages/37/40/ad395740cd641869a13bcf60851296c89624662575621968dcfafabaa7f6/pyarrow-20.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:82f1ee5133bd8f49d31be1299dc07f585136679666b502540db854968576faf9", size = 25944982, upload_time = "2025-04-27T12:33:04.72Z" }, +] + [[package]] name = "pycparser" version = "2.22" @@ -1045,6 +1468,81 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552, upload_time = "2024-03-30T13:22:20.476Z" }, ] +[[package]] +name = "pydantic" +version = "2.11.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-types" }, + { name = "pydantic-core" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/00/dd/4325abf92c39ba8623b5af936ddb36ffcfe0beae70405d456ab1fb2f5b8c/pydantic-2.11.7.tar.gz", hash = "sha256:d989c3c6cb79469287b1569f7447a17848c998458d49ebe294e975b9baf0f0db", size = 788350, upload_time = "2025-06-14T08:33:17.137Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6a/c0/ec2b1c8712ca690e5d61979dee872603e92b8a32f94cc1b72d53beab008a/pydantic-2.11.7-py3-none-any.whl", hash = "sha256:dde5df002701f6de26248661f6835bbe296a47bf73990135c7d07ce741b9623b", size = 444782, upload_time = "2025-06-14T08:33:14.905Z" }, +] + +[[package]] +name = "pydantic-core" +version = "2.33.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ad/88/5f2260bdfae97aabf98f1778d43f69574390ad787afb646292a638c923d4/pydantic_core-2.33.2.tar.gz", hash = "sha256:7cb8bc3605c29176e1b105350d2e6474142d7c1bd1d9327c4a9bdb46bf827acc", size = 435195, upload_time = "2025-04-23T18:33:52.104Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/8a/2b41c97f554ec8c71f2a8a5f85cb56a8b0956addfe8b0efb5b3d77e8bdc3/pydantic_core-2.33.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a7ec89dc587667f22b6a0b6579c249fca9026ce7c333fc142ba42411fa243cdc", size = 2009000, upload_time = "2025-04-23T18:31:25.863Z" }, + { url = "https://files.pythonhosted.org/packages/a1/02/6224312aacb3c8ecbaa959897af57181fb6cf3a3d7917fd44d0f2917e6f2/pydantic_core-2.33.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3c6db6e52c6d70aa0d00d45cdb9b40f0433b96380071ea80b09277dba021ddf7", size = 1847996, upload_time = "2025-04-23T18:31:27.341Z" }, + { url = "https://files.pythonhosted.org/packages/d6/46/6dcdf084a523dbe0a0be59d054734b86a981726f221f4562aed313dbcb49/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e61206137cbc65e6d5256e1166f88331d3b6238e082d9f74613b9b765fb9025", size = 1880957, upload_time = "2025-04-23T18:31:28.956Z" }, + { url = "https://files.pythonhosted.org/packages/ec/6b/1ec2c03837ac00886ba8160ce041ce4e325b41d06a034adbef11339ae422/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb8c529b2819c37140eb51b914153063d27ed88e3bdc31b71198a198e921e011", size = 1964199, upload_time = "2025-04-23T18:31:31.025Z" }, + { url = "https://files.pythonhosted.org/packages/2d/1d/6bf34d6adb9debd9136bd197ca72642203ce9aaaa85cfcbfcf20f9696e83/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c52b02ad8b4e2cf14ca7b3d918f3eb0ee91e63b3167c32591e57c4317e134f8f", size = 2120296, upload_time = "2025-04-23T18:31:32.514Z" }, + { url = "https://files.pythonhosted.org/packages/e0/94/2bd0aaf5a591e974b32a9f7123f16637776c304471a0ab33cf263cf5591a/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96081f1605125ba0855dfda83f6f3df5ec90c61195421ba72223de35ccfb2f88", size = 2676109, upload_time = "2025-04-23T18:31:33.958Z" }, + { url = "https://files.pythonhosted.org/packages/f9/41/4b043778cf9c4285d59742281a769eac371b9e47e35f98ad321349cc5d61/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f57a69461af2a5fa6e6bbd7a5f60d3b7e6cebb687f55106933188e79ad155c1", size = 2002028, upload_time = "2025-04-23T18:31:39.095Z" }, + { url = "https://files.pythonhosted.org/packages/cb/d5/7bb781bf2748ce3d03af04d5c969fa1308880e1dca35a9bd94e1a96a922e/pydantic_core-2.33.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:572c7e6c8bb4774d2ac88929e3d1f12bc45714ae5ee6d9a788a9fb35e60bb04b", size = 2100044, upload_time = "2025-04-23T18:31:41.034Z" }, + { url = "https://files.pythonhosted.org/packages/fe/36/def5e53e1eb0ad896785702a5bbfd25eed546cdcf4087ad285021a90ed53/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:db4b41f9bd95fbe5acd76d89920336ba96f03e149097365afe1cb092fceb89a1", size = 2058881, upload_time = "2025-04-23T18:31:42.757Z" }, + { url = "https://files.pythonhosted.org/packages/01/6c/57f8d70b2ee57fc3dc8b9610315949837fa8c11d86927b9bb044f8705419/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:fa854f5cf7e33842a892e5c73f45327760bc7bc516339fda888c75ae60edaeb6", size = 2227034, upload_time = "2025-04-23T18:31:44.304Z" }, + { url = "https://files.pythonhosted.org/packages/27/b9/9c17f0396a82b3d5cbea4c24d742083422639e7bb1d5bf600e12cb176a13/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5f483cfb75ff703095c59e365360cb73e00185e01aaea067cd19acffd2ab20ea", size = 2234187, upload_time = "2025-04-23T18:31:45.891Z" }, + { url = "https://files.pythonhosted.org/packages/b0/6a/adf5734ffd52bf86d865093ad70b2ce543415e0e356f6cacabbc0d9ad910/pydantic_core-2.33.2-cp312-cp312-win32.whl", hash = "sha256:9cb1da0f5a471435a7bc7e439b8a728e8b61e59784b2af70d7c169f8dd8ae290", size = 1892628, upload_time = "2025-04-23T18:31:47.819Z" }, + { url = "https://files.pythonhosted.org/packages/43/e4/5479fecb3606c1368d496a825d8411e126133c41224c1e7238be58b87d7e/pydantic_core-2.33.2-cp312-cp312-win_amd64.whl", hash = "sha256:f941635f2a3d96b2973e867144fde513665c87f13fe0e193c158ac51bfaaa7b2", size = 1955866, upload_time = "2025-04-23T18:31:49.635Z" }, + { url = "https://files.pythonhosted.org/packages/0d/24/8b11e8b3e2be9dd82df4b11408a67c61bb4dc4f8e11b5b0fc888b38118b5/pydantic_core-2.33.2-cp312-cp312-win_arm64.whl", hash = "sha256:cca3868ddfaccfbc4bfb1d608e2ccaaebe0ae628e1416aeb9c4d88c001bb45ab", size = 1888894, upload_time = "2025-04-23T18:31:51.609Z" }, + { url = "https://files.pythonhosted.org/packages/46/8c/99040727b41f56616573a28771b1bfa08a3d3fe74d3d513f01251f79f172/pydantic_core-2.33.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:1082dd3e2d7109ad8b7da48e1d4710c8d06c253cbc4a27c1cff4fbcaa97a9e3f", size = 2015688, upload_time = "2025-04-23T18:31:53.175Z" }, + { url = "https://files.pythonhosted.org/packages/3a/cc/5999d1eb705a6cefc31f0b4a90e9f7fc400539b1a1030529700cc1b51838/pydantic_core-2.33.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f517ca031dfc037a9c07e748cefd8d96235088b83b4f4ba8939105d20fa1dcd6", size = 1844808, upload_time = "2025-04-23T18:31:54.79Z" }, + { url = "https://files.pythonhosted.org/packages/6f/5e/a0a7b8885c98889a18b6e376f344da1ef323d270b44edf8174d6bce4d622/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a9f2c9dd19656823cb8250b0724ee9c60a82f3cdf68a080979d13092a3b0fef", size = 1885580, upload_time = "2025-04-23T18:31:57.393Z" }, + { url = "https://files.pythonhosted.org/packages/3b/2a/953581f343c7d11a304581156618c3f592435523dd9d79865903272c256a/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2b0a451c263b01acebe51895bfb0e1cc842a5c666efe06cdf13846c7418caa9a", size = 1973859, upload_time = "2025-04-23T18:31:59.065Z" }, + { url = "https://files.pythonhosted.org/packages/e6/55/f1a813904771c03a3f97f676c62cca0c0a4138654107c1b61f19c644868b/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ea40a64d23faa25e62a70ad163571c0b342b8bf66d5fa612ac0dec4f069d916", size = 2120810, upload_time = "2025-04-23T18:32:00.78Z" }, + { url = "https://files.pythonhosted.org/packages/aa/c3/053389835a996e18853ba107a63caae0b9deb4a276c6b472931ea9ae6e48/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fb2d542b4d66f9470e8065c5469ec676978d625a8b7a363f07d9a501a9cb36a", size = 2676498, upload_time = "2025-04-23T18:32:02.418Z" }, + { url = "https://files.pythonhosted.org/packages/eb/3c/f4abd740877a35abade05e437245b192f9d0ffb48bbbbd708df33d3cda37/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdac5d6ffa1b5a83bca06ffe7583f5576555e6c8b3a91fbd25ea7780f825f7d", size = 2000611, upload_time = "2025-04-23T18:32:04.152Z" }, + { url = "https://files.pythonhosted.org/packages/59/a7/63ef2fed1837d1121a894d0ce88439fe3e3b3e48c7543b2a4479eb99c2bd/pydantic_core-2.33.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04a1a413977ab517154eebb2d326da71638271477d6ad87a769102f7c2488c56", size = 2107924, upload_time = "2025-04-23T18:32:06.129Z" }, + { url = "https://files.pythonhosted.org/packages/04/8f/2551964ef045669801675f1cfc3b0d74147f4901c3ffa42be2ddb1f0efc4/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c8e7af2f4e0194c22b5b37205bfb293d166a7344a5b0d0eaccebc376546d77d5", size = 2063196, upload_time = "2025-04-23T18:32:08.178Z" }, + { url = "https://files.pythonhosted.org/packages/26/bd/d9602777e77fc6dbb0c7db9ad356e9a985825547dce5ad1d30ee04903918/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:5c92edd15cd58b3c2d34873597a1e20f13094f59cf88068adb18947df5455b4e", size = 2236389, upload_time = "2025-04-23T18:32:10.242Z" }, + { url = "https://files.pythonhosted.org/packages/42/db/0e950daa7e2230423ab342ae918a794964b053bec24ba8af013fc7c94846/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:65132b7b4a1c0beded5e057324b7e16e10910c106d43675d9bd87d4f38dde162", size = 2239223, upload_time = "2025-04-23T18:32:12.382Z" }, + { url = "https://files.pythonhosted.org/packages/58/4d/4f937099c545a8a17eb52cb67fe0447fd9a373b348ccfa9a87f141eeb00f/pydantic_core-2.33.2-cp313-cp313-win32.whl", hash = "sha256:52fb90784e0a242bb96ec53f42196a17278855b0f31ac7c3cc6f5c1ec4811849", size = 1900473, upload_time = "2025-04-23T18:32:14.034Z" }, + { url = "https://files.pythonhosted.org/packages/a0/75/4a0a9bac998d78d889def5e4ef2b065acba8cae8c93696906c3a91f310ca/pydantic_core-2.33.2-cp313-cp313-win_amd64.whl", hash = "sha256:c083a3bdd5a93dfe480f1125926afcdbf2917ae714bdb80b36d34318b2bec5d9", size = 1955269, upload_time = "2025-04-23T18:32:15.783Z" }, + { url = "https://files.pythonhosted.org/packages/f9/86/1beda0576969592f1497b4ce8e7bc8cbdf614c352426271b1b10d5f0aa64/pydantic_core-2.33.2-cp313-cp313-win_arm64.whl", hash = "sha256:e80b087132752f6b3d714f041ccf74403799d3b23a72722ea2e6ba2e892555b9", size = 1893921, upload_time = "2025-04-23T18:32:18.473Z" }, + { url = "https://files.pythonhosted.org/packages/a4/7d/e09391c2eebeab681df2b74bfe6c43422fffede8dc74187b2b0bf6fd7571/pydantic_core-2.33.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:61c18fba8e5e9db3ab908620af374db0ac1baa69f0f32df4f61ae23f15e586ac", size = 1806162, upload_time = "2025-04-23T18:32:20.188Z" }, + { url = "https://files.pythonhosted.org/packages/f1/3d/847b6b1fed9f8ed3bb95a9ad04fbd0b212e832d4f0f50ff4d9ee5a9f15cf/pydantic_core-2.33.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95237e53bb015f67b63c91af7518a62a8660376a6a0db19b89acc77a4d6199f5", size = 1981560, upload_time = "2025-04-23T18:32:22.354Z" }, + { url = "https://files.pythonhosted.org/packages/6f/9a/e73262f6c6656262b5fdd723ad90f518f579b7bc8622e43a942eec53c938/pydantic_core-2.33.2-cp313-cp313t-win_amd64.whl", hash = "sha256:c2fc0a768ef76c15ab9238afa6da7f69895bb5d1ee83aeea2e3509af4472d0b9", size = 1935777, upload_time = "2025-04-23T18:32:25.088Z" }, +] + +[[package]] +name = "pydeflate" +version = "2.1.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "hdx-python-country" }, + { name = "imf-reader" }, + { name = "oda-reader" }, + { name = "pandas" }, + { name = "pyarrow" }, + { name = "requests" }, + { name = "wbgapi" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5e/72/3e56d8166ca4b366a4e37c85711a706bba66768f70ba690bdb279f728d8d/pydeflate-2.1.3.tar.gz", hash = "sha256:48a2b74ad900dd8c50dfb1e4cdfcea8ca11cbd2d3a713bf9208f2028fea4cf4f", size = 26586, upload_time = "2025-06-03T09:38:12.25Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/31/31/e703ab5bc311c58e4dc00759d7a48a850877b8bbcd64c9778e2315e06bd5/pydeflate-2.1.3-py3-none-any.whl", hash = "sha256:09ebdde04eb2fea1c4b6712889cb2a9d4c2dd22ce0204aaeae64f4335667354f", size = 32540, upload_time = "2025-06-03T09:38:10.858Z" }, +] + [[package]] name = "pygments" version = "2.19.2" @@ -1067,6 +1565,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/98/d4/10bb14004d3c792811e05e21b5e5dcae805aacb739bd12a0540967b99592/pymdown_extensions-10.16-py3-none-any.whl", hash = "sha256:f5dd064a4db588cb2d95229fc4ee63a1b16cc8b4d0e6145c0899ed8723da1df2", size = 266143, upload_time = "2025-06-21T17:56:35.356Z" }, ] +[[package]] +name = "pyphonetics" +version = "0.5.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "unidecode" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d6/7c/7c45a9e9bf6ddb57b67e66cf4e8076a7baf3a790a3411daac1a7a2df0c5b/pyphonetics-0.5.3.tar.gz", hash = "sha256:2d3c2e359fde91a3c57914f0b5468bba7a5daf38e7927fd999992ea68990fbe4", size = 10314, upload_time = "2020-02-25T12:08:31.049Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bd/dd/a7d0a860efd3d4335d538b4361b8e9af8311f2aba2e8c7e4c7a47d623b6e/pyphonetics-0.5.3-py2.py3-none-any.whl", hash = "sha256:e6b29671d0d624dda1cac59c0c5a8a7216d8db504bae4941bfc482e04a0621d1", size = 10729, upload_time = "2020-02-25T12:08:25.368Z" }, +] + [[package]] name = "pytest" version = "8.4.1" @@ -1134,6 +1644,24 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ba/15/e8096189b18dda72e4923622abc10b021ecff723b397e22eff29fb86637b/python_debian-1.0.1-py3-none-any.whl", hash = "sha256:8f137c230c1d9279c2ac892b35915068b2aca090c9fd3da5671ff87af32af12c", size = 137453, upload_time = "2025-03-11T12:27:25.014Z" }, ] +[[package]] +name = "python-io-wrapper" +version = "0.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/74/8dc5f7d0b7cc1a0ca9e5c320abf11adee2094998c93ae8c9c80d9a8323ff/python-io-wrapper-0.3.1.tar.gz", hash = "sha256:e3391787ff0d9870e739294c6392437915502153e695a017450aa46b6d091762", size = 3271, upload_time = "2022-11-14T15:00:10.932Z" } + +[[package]] +name = "python-slugify" +version = "8.0.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "text-unidecode" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/87/c7/5e1547c44e31da50a460df93af11a535ace568ef89d7a811069ead340c4a/python-slugify-8.0.4.tar.gz", hash = "sha256:59202371d1d05b54a9e7720c5e038f928f45daaffe41dd10822f3907b937c856", size = 10921, upload_time = "2024-02-08T18:32:45.488Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a4/62/02da182e544a51a5c3ccf4b03ab79df279f9c60c5e82d5e8bec7ca26ac11/python_slugify-8.0.4-py2.py3-none-any.whl", hash = "sha256:276540b79961052b66b7d116620b36518847f52d5fd9e3a70164fc8c50faa6b8", size = 10051, upload_time = "2024-02-08T18:32:43.911Z" }, +] + [[package]] name = "pytz" version = "2025.2" @@ -1224,6 +1752,26 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/eb/bc/1709dc55f0970cf4cb8259e435e6773f9946f41a045c2cb90e870b7072da/pyzmq-27.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:d8229f2efece6a660ee211d74d91dbc2a76b95544d46c74c615e491900dc107f", size = 639933, upload_time = "2025-06-13T14:08:00.777Z" }, ] +[[package]] +name = "ratelimit" +version = "2.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ab/38/ff60c8fc9e002d50d48822cc5095deb8ebbc5f91a6b8fdd9731c87a147c9/ratelimit-2.2.1.tar.gz", hash = "sha256:af8a9b64b821529aca09ebaf6d8d279100d766f19e90b5059ac6a718ca6dee42", size = 5251, upload_time = "2018-12-17T18:55:49.675Z" } + +[[package]] +name = "referencing" +version = "0.36.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "rpds-py" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2f/db/98b5c277be99dd18bfd91dd04e1b759cad18d1a338188c936e92f921c7e2/referencing-0.36.2.tar.gz", hash = "sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa", size = 74744, upload_time = "2025-01-25T08:48:16.138Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0", size = 26775, upload_time = "2025-01-25T08:48:14.241Z" }, +] + [[package]] name = "requests" version = "2.32.4" @@ -1239,6 +1787,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/7c/e4/56027c4a6b4ae70ca9de302488c5ca95ad4a39e190093d6c1a8ace08341b/requests-2.32.4-py3-none-any.whl", hash = "sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c", size = 64847, upload_time = "2025-06-09T16:43:05.728Z" }, ] +[[package]] +name = "requests-file" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/72/97/bf44e6c6bd8ddbb99943baf7ba8b1a8485bcd2fe0e55e5708d7fee4ff1ae/requests_file-2.1.0.tar.gz", hash = "sha256:0f549a3f3b0699415ac04d167e9cb39bccfb730cb832b4d20be3d9867356e658", size = 6891, upload_time = "2024-05-21T16:28:00.24Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d7/25/dd878a121fcfdf38f52850f11c512e13ec87c2ea72385933818e5b6c15ce/requests_file-2.1.0-py2.py3-none-any.whl", hash = "sha256:cf270de5a4c5874e84599fc5778303d496c10ae5e870bfa378818f35d21bda5c", size = 4244, upload_time = "2024-05-21T16:27:57.733Z" }, +] + [[package]] name = "reuse" version = "5.0.2" @@ -1258,6 +1818,142 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/0a/2f/73de654df9e7e5f67d742c1d949b5c0c7c1203e84b2272d9e34a91faaf5c/reuse-5.0.2-cp313-cp313-manylinux_2_40_x86_64.whl", hash = "sha256:7a680f00324e87a72061677a892d8cbabfddf7adcf7a5376aeeed2d78995bbbb", size = 184309, upload_time = "2024-11-14T09:33:15.047Z" }, ] +[[package]] +name = "rfc3986" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/85/40/1520d68bfa07ab5a6f065a186815fb6610c86fe957bc065754e47f7b0840/rfc3986-2.0.0.tar.gz", hash = "sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c", size = 49026, upload_time = "2022-01-10T00:52:30.832Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ff/9a/9afaade874b2fa6c752c36f1548f718b5b83af81ed9b76628329dab81c1b/rfc3986-2.0.0-py2.py3-none-any.whl", hash = "sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd", size = 31326, upload_time = "2022-01-10T00:52:29.594Z" }, +] + +[[package]] +name = "rich" +version = "14.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown-it-py" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a1/53/830aa4c3066a8ab0ae9a9955976fb770fe9c6102117c8ec4ab3ea62d89e8/rich-14.0.0.tar.gz", hash = "sha256:82f1bc23a6a21ebca4ae0c45af9bdbc492ed20231dcb63f297d6d1021a9d5725", size = 224078, upload_time = "2025-03-30T14:15:14.23Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0d/9b/63f4c7ebc259242c89b3acafdb37b41d1185c07ff0011164674e9076b491/rich-14.0.0-py3-none-any.whl", hash = "sha256:1c9491e1951aac09caffd42f448ee3d04e58923ffe14993f6e83068dc395d7e0", size = 243229, upload_time = "2025-03-30T14:15:12.283Z" }, +] + +[[package]] +name = "rpds-py" +version = "0.26.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a5/aa/4456d84bbb54adc6a916fb10c9b374f78ac840337644e4a5eda229c81275/rpds_py-0.26.0.tar.gz", hash = "sha256:20dae58a859b0906f0685642e591056f1e787f3a8b39c8e8749a45dc7d26bdb0", size = 27385, upload_time = "2025-07-01T15:57:13.958Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ea/86/90eb87c6f87085868bd077c7a9938006eb1ce19ed4d06944a90d3560fce2/rpds_py-0.26.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:894514d47e012e794f1350f076c427d2347ebf82f9b958d554d12819849a369d", size = 363933, upload_time = "2025-07-01T15:54:15.734Z" }, + { url = "https://files.pythonhosted.org/packages/63/78/4469f24d34636242c924626082b9586f064ada0b5dbb1e9d096ee7a8e0c6/rpds_py-0.26.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc921b96fa95a097add244da36a1d9e4f3039160d1d30f1b35837bf108c21136", size = 350447, upload_time = "2025-07-01T15:54:16.922Z" }, + { url = "https://files.pythonhosted.org/packages/ad/91/c448ed45efdfdade82348d5e7995e15612754826ea640afc20915119734f/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e1157659470aa42a75448b6e943c895be8c70531c43cb78b9ba990778955582", size = 384711, upload_time = "2025-07-01T15:54:18.101Z" }, + { url = "https://files.pythonhosted.org/packages/ec/43/e5c86fef4be7f49828bdd4ecc8931f0287b1152c0bb0163049b3218740e7/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:521ccf56f45bb3a791182dc6b88ae5f8fa079dd705ee42138c76deb1238e554e", size = 400865, upload_time = "2025-07-01T15:54:19.295Z" }, + { url = "https://files.pythonhosted.org/packages/55/34/e00f726a4d44f22d5c5fe2e5ddd3ac3d7fd3f74a175607781fbdd06fe375/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9def736773fd56b305c0eef698be5192c77bfa30d55a0e5885f80126c4831a15", size = 517763, upload_time = "2025-07-01T15:54:20.858Z" }, + { url = "https://files.pythonhosted.org/packages/52/1c/52dc20c31b147af724b16104500fba13e60123ea0334beba7b40e33354b4/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cdad4ea3b4513b475e027be79e5a0ceac8ee1c113a1a11e5edc3c30c29f964d8", size = 406651, upload_time = "2025-07-01T15:54:22.508Z" }, + { url = "https://files.pythonhosted.org/packages/2e/77/87d7bfabfc4e821caa35481a2ff6ae0b73e6a391bb6b343db2c91c2b9844/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82b165b07f416bdccf5c84546a484cc8f15137ca38325403864bfdf2b5b72f6a", size = 386079, upload_time = "2025-07-01T15:54:23.987Z" }, + { url = "https://files.pythonhosted.org/packages/e3/d4/7f2200c2d3ee145b65b3cddc4310d51f7da6a26634f3ac87125fd789152a/rpds_py-0.26.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d04cab0a54b9dba4d278fe955a1390da3cf71f57feb78ddc7cb67cbe0bd30323", size = 421379, upload_time = "2025-07-01T15:54:25.073Z" }, + { url = "https://files.pythonhosted.org/packages/ae/13/9fdd428b9c820869924ab62236b8688b122baa22d23efdd1c566938a39ba/rpds_py-0.26.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:79061ba1a11b6a12743a2b0f72a46aa2758613d454aa6ba4f5a265cc48850158", size = 562033, upload_time = "2025-07-01T15:54:26.225Z" }, + { url = "https://files.pythonhosted.org/packages/f3/e1/b69686c3bcbe775abac3a4c1c30a164a2076d28df7926041f6c0eb5e8d28/rpds_py-0.26.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:f405c93675d8d4c5ac87364bb38d06c988e11028a64b52a47158a355079661f3", size = 591639, upload_time = "2025-07-01T15:54:27.424Z" }, + { url = "https://files.pythonhosted.org/packages/5c/c9/1e3d8c8863c84a90197ac577bbc3d796a92502124c27092413426f670990/rpds_py-0.26.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dafd4c44b74aa4bed4b250f1aed165b8ef5de743bcca3b88fc9619b6087093d2", size = 557105, upload_time = "2025-07-01T15:54:29.93Z" }, + { url = "https://files.pythonhosted.org/packages/9f/c5/90c569649057622959f6dcc40f7b516539608a414dfd54b8d77e3b201ac0/rpds_py-0.26.0-cp312-cp312-win32.whl", hash = "sha256:3da5852aad63fa0c6f836f3359647870e21ea96cf433eb393ffa45263a170d44", size = 223272, upload_time = "2025-07-01T15:54:31.128Z" }, + { url = "https://files.pythonhosted.org/packages/7d/16/19f5d9f2a556cfed454eebe4d354c38d51c20f3db69e7b4ce6cff904905d/rpds_py-0.26.0-cp312-cp312-win_amd64.whl", hash = "sha256:cf47cfdabc2194a669dcf7a8dbba62e37a04c5041d2125fae0233b720da6f05c", size = 234995, upload_time = "2025-07-01T15:54:32.195Z" }, + { url = "https://files.pythonhosted.org/packages/83/f0/7935e40b529c0e752dfaa7880224771b51175fce08b41ab4a92eb2fbdc7f/rpds_py-0.26.0-cp312-cp312-win_arm64.whl", hash = "sha256:20ab1ae4fa534f73647aad289003f1104092890849e0266271351922ed5574f8", size = 223198, upload_time = "2025-07-01T15:54:33.271Z" }, + { url = "https://files.pythonhosted.org/packages/6a/67/bb62d0109493b12b1c6ab00de7a5566aa84c0e44217c2d94bee1bd370da9/rpds_py-0.26.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:696764a5be111b036256c0b18cd29783fab22154690fc698062fc1b0084b511d", size = 363917, upload_time = "2025-07-01T15:54:34.755Z" }, + { url = "https://files.pythonhosted.org/packages/4b/f3/34e6ae1925a5706c0f002a8d2d7f172373b855768149796af87bd65dcdb9/rpds_py-0.26.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1e6c15d2080a63aaed876e228efe4f814bc7889c63b1e112ad46fdc8b368b9e1", size = 350073, upload_time = "2025-07-01T15:54:36.292Z" }, + { url = "https://files.pythonhosted.org/packages/75/83/1953a9d4f4e4de7fd0533733e041c28135f3c21485faaef56a8aadbd96b5/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:390e3170babf42462739a93321e657444f0862c6d722a291accc46f9d21ed04e", size = 384214, upload_time = "2025-07-01T15:54:37.469Z" }, + { url = "https://files.pythonhosted.org/packages/48/0e/983ed1b792b3322ea1d065e67f4b230f3b96025f5ce3878cc40af09b7533/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7da84c2c74c0f5bc97d853d9e17bb83e2dcafcff0dc48286916001cc114379a1", size = 400113, upload_time = "2025-07-01T15:54:38.954Z" }, + { url = "https://files.pythonhosted.org/packages/69/7f/36c0925fff6f660a80be259c5b4f5e53a16851f946eb080351d057698528/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4c5fe114a6dd480a510b6d3661d09d67d1622c4bf20660a474507aaee7eeeee9", size = 515189, upload_time = "2025-07-01T15:54:40.57Z" }, + { url = "https://files.pythonhosted.org/packages/13/45/cbf07fc03ba7a9b54662c9badb58294ecfb24f828b9732970bd1a431ed5c/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3100b3090269f3a7ea727b06a6080d4eb7439dca4c0e91a07c5d133bb1727ea7", size = 406998, upload_time = "2025-07-01T15:54:43.025Z" }, + { url = "https://files.pythonhosted.org/packages/6c/b0/8fa5e36e58657997873fd6a1cf621285ca822ca75b4b3434ead047daa307/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c03c9b0c64afd0320ae57de4c982801271c0c211aa2d37f3003ff5feb75bb04", size = 385903, upload_time = "2025-07-01T15:54:44.752Z" }, + { url = "https://files.pythonhosted.org/packages/4b/f7/b25437772f9f57d7a9fbd73ed86d0dcd76b4c7c6998348c070d90f23e315/rpds_py-0.26.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5963b72ccd199ade6ee493723d18a3f21ba7d5b957017607f815788cef50eaf1", size = 419785, upload_time = "2025-07-01T15:54:46.043Z" }, + { url = "https://files.pythonhosted.org/packages/a7/6b/63ffa55743dfcb4baf2e9e77a0b11f7f97ed96a54558fcb5717a4b2cd732/rpds_py-0.26.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9da4e873860ad5bab3291438525cae80169daecbfafe5657f7f5fb4d6b3f96b9", size = 561329, upload_time = "2025-07-01T15:54:47.64Z" }, + { url = "https://files.pythonhosted.org/packages/2f/07/1f4f5e2886c480a2346b1e6759c00278b8a69e697ae952d82ae2e6ee5db0/rpds_py-0.26.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5afaddaa8e8c7f1f7b4c5c725c0070b6eed0228f705b90a1732a48e84350f4e9", size = 590875, upload_time = "2025-07-01T15:54:48.9Z" }, + { url = "https://files.pythonhosted.org/packages/cc/bc/e6639f1b91c3a55f8c41b47d73e6307051b6e246254a827ede730624c0f8/rpds_py-0.26.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4916dc96489616a6f9667e7526af8fa693c0fdb4f3acb0e5d9f4400eb06a47ba", size = 556636, upload_time = "2025-07-01T15:54:50.619Z" }, + { url = "https://files.pythonhosted.org/packages/05/4c/b3917c45566f9f9a209d38d9b54a1833f2bb1032a3e04c66f75726f28876/rpds_py-0.26.0-cp313-cp313-win32.whl", hash = "sha256:2a343f91b17097c546b93f7999976fd6c9d5900617aa848c81d794e062ab302b", size = 222663, upload_time = "2025-07-01T15:54:52.023Z" }, + { url = "https://files.pythonhosted.org/packages/e0/0b/0851bdd6025775aaa2365bb8de0697ee2558184c800bfef8d7aef5ccde58/rpds_py-0.26.0-cp313-cp313-win_amd64.whl", hash = "sha256:0a0b60701f2300c81b2ac88a5fb893ccfa408e1c4a555a77f908a2596eb875a5", size = 234428, upload_time = "2025-07-01T15:54:53.692Z" }, + { url = "https://files.pythonhosted.org/packages/ed/e8/a47c64ed53149c75fb581e14a237b7b7cd18217e969c30d474d335105622/rpds_py-0.26.0-cp313-cp313-win_arm64.whl", hash = "sha256:257d011919f133a4746958257f2c75238e3ff54255acd5e3e11f3ff41fd14256", size = 222571, upload_time = "2025-07-01T15:54:54.822Z" }, + { url = "https://files.pythonhosted.org/packages/89/bf/3d970ba2e2bcd17d2912cb42874107390f72873e38e79267224110de5e61/rpds_py-0.26.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:529c8156d7506fba5740e05da8795688f87119cce330c244519cf706a4a3d618", size = 360475, upload_time = "2025-07-01T15:54:56.228Z" }, + { url = "https://files.pythonhosted.org/packages/82/9f/283e7e2979fc4ec2d8ecee506d5a3675fce5ed9b4b7cb387ea5d37c2f18d/rpds_py-0.26.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f53ec51f9d24e9638a40cabb95078ade8c99251945dad8d57bf4aabe86ecee35", size = 346692, upload_time = "2025-07-01T15:54:58.561Z" }, + { url = "https://files.pythonhosted.org/packages/e3/03/7e50423c04d78daf391da3cc4330bdb97042fc192a58b186f2d5deb7befd/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab504c4d654e4a29558eaa5bb8cea5fdc1703ea60a8099ffd9c758472cf913f", size = 379415, upload_time = "2025-07-01T15:54:59.751Z" }, + { url = "https://files.pythonhosted.org/packages/57/00/d11ee60d4d3b16808432417951c63df803afb0e0fc672b5e8d07e9edaaae/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fd0641abca296bc1a00183fe44f7fced8807ed49d501f188faa642d0e4975b83", size = 391783, upload_time = "2025-07-01T15:55:00.898Z" }, + { url = "https://files.pythonhosted.org/packages/08/b3/1069c394d9c0d6d23c5b522e1f6546b65793a22950f6e0210adcc6f97c3e/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:69b312fecc1d017b5327afa81d4da1480f51c68810963a7336d92203dbb3d4f1", size = 512844, upload_time = "2025-07-01T15:55:02.201Z" }, + { url = "https://files.pythonhosted.org/packages/08/3b/c4fbf0926800ed70b2c245ceca99c49f066456755f5d6eb8863c2c51e6d0/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c741107203954f6fc34d3066d213d0a0c40f7bb5aafd698fb39888af277c70d8", size = 402105, upload_time = "2025-07-01T15:55:03.698Z" }, + { url = "https://files.pythonhosted.org/packages/1c/b0/db69b52ca07413e568dae9dc674627a22297abb144c4d6022c6d78f1e5cc/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc3e55a7db08dc9a6ed5fb7103019d2c1a38a349ac41901f9f66d7f95750942f", size = 383440, upload_time = "2025-07-01T15:55:05.398Z" }, + { url = "https://files.pythonhosted.org/packages/4c/e1/c65255ad5b63903e56b3bb3ff9dcc3f4f5c3badde5d08c741ee03903e951/rpds_py-0.26.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9e851920caab2dbcae311fd28f4313c6953993893eb5c1bb367ec69d9a39e7ed", size = 412759, upload_time = "2025-07-01T15:55:08.316Z" }, + { url = "https://files.pythonhosted.org/packages/e4/22/bb731077872377a93c6e93b8a9487d0406c70208985831034ccdeed39c8e/rpds_py-0.26.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:dfbf280da5f876d0b00c81f26bedce274e72a678c28845453885a9b3c22ae632", size = 556032, upload_time = "2025-07-01T15:55:09.52Z" }, + { url = "https://files.pythonhosted.org/packages/e0/8b/393322ce7bac5c4530fb96fc79cc9ea2f83e968ff5f6e873f905c493e1c4/rpds_py-0.26.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:1cc81d14ddfa53d7f3906694d35d54d9d3f850ef8e4e99ee68bc0d1e5fed9a9c", size = 585416, upload_time = "2025-07-01T15:55:11.216Z" }, + { url = "https://files.pythonhosted.org/packages/49/ae/769dc372211835bf759319a7aae70525c6eb523e3371842c65b7ef41c9c6/rpds_py-0.26.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dca83c498b4650a91efcf7b88d669b170256bf8017a5db6f3e06c2bf031f57e0", size = 554049, upload_time = "2025-07-01T15:55:13.004Z" }, + { url = "https://files.pythonhosted.org/packages/6b/f9/4c43f9cc203d6ba44ce3146246cdc38619d92c7bd7bad4946a3491bd5b70/rpds_py-0.26.0-cp313-cp313t-win32.whl", hash = "sha256:4d11382bcaf12f80b51d790dee295c56a159633a8e81e6323b16e55d81ae37e9", size = 218428, upload_time = "2025-07-01T15:55:14.486Z" }, + { url = "https://files.pythonhosted.org/packages/7e/8b/9286b7e822036a4a977f2f1e851c7345c20528dbd56b687bb67ed68a8ede/rpds_py-0.26.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ff110acded3c22c033e637dd8896e411c7d3a11289b2edf041f86663dbc791e9", size = 231524, upload_time = "2025-07-01T15:55:15.745Z" }, + { url = "https://files.pythonhosted.org/packages/55/07/029b7c45db910c74e182de626dfdae0ad489a949d84a468465cd0ca36355/rpds_py-0.26.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:da619979df60a940cd434084355c514c25cf8eb4cf9a508510682f6c851a4f7a", size = 364292, upload_time = "2025-07-01T15:55:17.001Z" }, + { url = "https://files.pythonhosted.org/packages/13/d1/9b3d3f986216b4d1f584878dca15ce4797aaf5d372d738974ba737bf68d6/rpds_py-0.26.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ea89a2458a1a75f87caabefe789c87539ea4e43b40f18cff526052e35bbb4fdf", size = 350334, upload_time = "2025-07-01T15:55:18.922Z" }, + { url = "https://files.pythonhosted.org/packages/18/98/16d5e7bc9ec715fa9668731d0cf97f6b032724e61696e2db3d47aeb89214/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:feac1045b3327a45944e7dcbeb57530339f6b17baff154df51ef8b0da34c8c12", size = 384875, upload_time = "2025-07-01T15:55:20.399Z" }, + { url = "https://files.pythonhosted.org/packages/f9/13/aa5e2b1ec5ab0e86a5c464d53514c0467bec6ba2507027d35fc81818358e/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b818a592bd69bfe437ee8368603d4a2d928c34cffcdf77c2e761a759ffd17d20", size = 399993, upload_time = "2025-07-01T15:55:21.729Z" }, + { url = "https://files.pythonhosted.org/packages/17/03/8021810b0e97923abdbab6474c8b77c69bcb4b2c58330777df9ff69dc559/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a8b0dd8648709b62d9372fc00a57466f5fdeefed666afe3fea5a6c9539a0331", size = 516683, upload_time = "2025-07-01T15:55:22.918Z" }, + { url = "https://files.pythonhosted.org/packages/dc/b1/da8e61c87c2f3d836954239fdbbfb477bb7b54d74974d8f6fcb34342d166/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6d3498ad0df07d81112aa6ec6c95a7e7b1ae00929fb73e7ebee0f3faaeabad2f", size = 408825, upload_time = "2025-07-01T15:55:24.207Z" }, + { url = "https://files.pythonhosted.org/packages/38/bc/1fc173edaaa0e52c94b02a655db20697cb5fa954ad5a8e15a2c784c5cbdd/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24a4146ccb15be237fdef10f331c568e1b0e505f8c8c9ed5d67759dac58ac246", size = 387292, upload_time = "2025-07-01T15:55:25.554Z" }, + { url = "https://files.pythonhosted.org/packages/7c/eb/3a9bb4bd90867d21916f253caf4f0d0be7098671b6715ad1cead9fe7bab9/rpds_py-0.26.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a9a63785467b2d73635957d32a4f6e73d5e4df497a16a6392fa066b753e87387", size = 420435, upload_time = "2025-07-01T15:55:27.798Z" }, + { url = "https://files.pythonhosted.org/packages/cd/16/e066dcdb56f5632713445271a3f8d3d0b426d51ae9c0cca387799df58b02/rpds_py-0.26.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:de4ed93a8c91debfd5a047be327b7cc8b0cc6afe32a716bbbc4aedca9e2a83af", size = 562410, upload_time = "2025-07-01T15:55:29.057Z" }, + { url = "https://files.pythonhosted.org/packages/60/22/ddbdec7eb82a0dc2e455be44c97c71c232983e21349836ce9f272e8a3c29/rpds_py-0.26.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:caf51943715b12af827696ec395bfa68f090a4c1a1d2509eb4e2cb69abbbdb33", size = 590724, upload_time = "2025-07-01T15:55:30.719Z" }, + { url = "https://files.pythonhosted.org/packages/2c/b4/95744085e65b7187d83f2fcb0bef70716a1ea0a9e5d8f7f39a86e5d83424/rpds_py-0.26.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:4a59e5bc386de021f56337f757301b337d7ab58baa40174fb150accd480bc953", size = 558285, upload_time = "2025-07-01T15:55:31.981Z" }, + { url = "https://files.pythonhosted.org/packages/37/37/6309a75e464d1da2559446f9c811aa4d16343cebe3dbb73701e63f760caa/rpds_py-0.26.0-cp314-cp314-win32.whl", hash = "sha256:92c8db839367ef16a662478f0a2fe13e15f2227da3c1430a782ad0f6ee009ec9", size = 223459, upload_time = "2025-07-01T15:55:33.312Z" }, + { url = "https://files.pythonhosted.org/packages/d9/6f/8e9c11214c46098b1d1391b7e02b70bb689ab963db3b19540cba17315291/rpds_py-0.26.0-cp314-cp314-win_amd64.whl", hash = "sha256:b0afb8cdd034150d4d9f53926226ed27ad15b7f465e93d7468caaf5eafae0d37", size = 236083, upload_time = "2025-07-01T15:55:34.933Z" }, + { url = "https://files.pythonhosted.org/packages/47/af/9c4638994dd623d51c39892edd9d08e8be8220a4b7e874fa02c2d6e91955/rpds_py-0.26.0-cp314-cp314-win_arm64.whl", hash = "sha256:ca3f059f4ba485d90c8dc75cb5ca897e15325e4e609812ce57f896607c1c0867", size = 223291, upload_time = "2025-07-01T15:55:36.202Z" }, + { url = "https://files.pythonhosted.org/packages/4d/db/669a241144460474aab03e254326b32c42def83eb23458a10d163cb9b5ce/rpds_py-0.26.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:5afea17ab3a126006dc2f293b14ffc7ef3c85336cf451564a0515ed7648033da", size = 361445, upload_time = "2025-07-01T15:55:37.483Z" }, + { url = "https://files.pythonhosted.org/packages/3b/2d/133f61cc5807c6c2fd086a46df0eb8f63a23f5df8306ff9f6d0fd168fecc/rpds_py-0.26.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:69f0c0a3df7fd3a7eec50a00396104bb9a843ea6d45fcc31c2d5243446ffd7a7", size = 347206, upload_time = "2025-07-01T15:55:38.828Z" }, + { url = "https://files.pythonhosted.org/packages/05/bf/0e8fb4c05f70273469eecf82f6ccf37248558526a45321644826555db31b/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:801a71f70f9813e82d2513c9a96532551fce1e278ec0c64610992c49c04c2dad", size = 380330, upload_time = "2025-07-01T15:55:40.175Z" }, + { url = "https://files.pythonhosted.org/packages/d4/a8/060d24185d8b24d3923322f8d0ede16df4ade226a74e747b8c7c978e3dd3/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:df52098cde6d5e02fa75c1f6244f07971773adb4a26625edd5c18fee906fa84d", size = 392254, upload_time = "2025-07-01T15:55:42.015Z" }, + { url = "https://files.pythonhosted.org/packages/b9/7b/7c2e8a9ee3e6bc0bae26bf29f5219955ca2fbb761dca996a83f5d2f773fe/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9bc596b30f86dc6f0929499c9e574601679d0341a0108c25b9b358a042f51bca", size = 516094, upload_time = "2025-07-01T15:55:43.603Z" }, + { url = "https://files.pythonhosted.org/packages/75/d6/f61cafbed8ba1499b9af9f1777a2a199cd888f74a96133d8833ce5eaa9c5/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9dfbe56b299cf5875b68eb6f0ebaadc9cac520a1989cac0db0765abfb3709c19", size = 402889, upload_time = "2025-07-01T15:55:45.275Z" }, + { url = "https://files.pythonhosted.org/packages/92/19/c8ac0a8a8df2dd30cdec27f69298a5c13e9029500d6d76718130f5e5be10/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac64f4b2bdb4ea622175c9ab7cf09444e412e22c0e02e906978b3b488af5fde8", size = 384301, upload_time = "2025-07-01T15:55:47.098Z" }, + { url = "https://files.pythonhosted.org/packages/41/e1/6b1859898bc292a9ce5776016c7312b672da00e25cec74d7beced1027286/rpds_py-0.26.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:181ef9b6bbf9845a264f9aa45c31836e9f3c1f13be565d0d010e964c661d1e2b", size = 412891, upload_time = "2025-07-01T15:55:48.412Z" }, + { url = "https://files.pythonhosted.org/packages/ef/b9/ceb39af29913c07966a61367b3c08b4f71fad841e32c6b59a129d5974698/rpds_py-0.26.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:49028aa684c144ea502a8e847d23aed5e4c2ef7cadfa7d5eaafcb40864844b7a", size = 557044, upload_time = "2025-07-01T15:55:49.816Z" }, + { url = "https://files.pythonhosted.org/packages/2f/27/35637b98380731a521f8ec4f3fd94e477964f04f6b2f8f7af8a2d889a4af/rpds_py-0.26.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:e5d524d68a474a9688336045bbf76cb0def88549c1b2ad9dbfec1fb7cfbe9170", size = 585774, upload_time = "2025-07-01T15:55:51.192Z" }, + { url = "https://files.pythonhosted.org/packages/52/d9/3f0f105420fecd18551b678c9a6ce60bd23986098b252a56d35781b3e7e9/rpds_py-0.26.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:c1851f429b822831bd2edcbe0cfd12ee9ea77868f8d3daf267b189371671c80e", size = 554886, upload_time = "2025-07-01T15:55:52.541Z" }, + { url = "https://files.pythonhosted.org/packages/6b/c5/347c056a90dc8dd9bc240a08c527315008e1b5042e7a4cf4ac027be9d38a/rpds_py-0.26.0-cp314-cp314t-win32.whl", hash = "sha256:7bdb17009696214c3b66bb3590c6d62e14ac5935e53e929bcdbc5a495987a84f", size = 219027, upload_time = "2025-07-01T15:55:53.874Z" }, + { url = "https://files.pythonhosted.org/packages/75/04/5302cea1aa26d886d34cadbf2dc77d90d7737e576c0065f357b96dc7a1a6/rpds_py-0.26.0-cp314-cp314t-win_amd64.whl", hash = "sha256:f14440b9573a6f76b4ee4770c13f0b5921f71dde3b6fcb8dabbefd13b7fe05d7", size = 232821, upload_time = "2025-07-01T15:55:55.167Z" }, +] + +[[package]] +name = "ruamel-yaml" +version = "0.18.14" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ruamel-yaml-clib", marker = "python_full_version < '3.14' and platform_python_implementation == 'CPython'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/39/87/6da0df742a4684263261c253f00edd5829e6aca970fff69e75028cccc547/ruamel.yaml-0.18.14.tar.gz", hash = "sha256:7227b76aaec364df15936730efbf7d72b30c0b79b1d578bbb8e3dcb2d81f52b7", size = 145511, upload_time = "2025-06-09T08:51:09.828Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/af/6d/6fe4805235e193aad4aaf979160dd1f3c487c57d48b810c816e6e842171b/ruamel.yaml-0.18.14-py3-none-any.whl", hash = "sha256:710ff198bb53da66718c7db27eec4fbcc9aa6ca7204e4c1df2f282b6fe5eb6b2", size = 118570, upload_time = "2025-06-09T08:51:06.348Z" }, +] + +[[package]] +name = "ruamel-yaml-clib" +version = "0.2.12" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/20/84/80203abff8ea4993a87d823a5f632e4d92831ef75d404c9fc78d0176d2b5/ruamel.yaml.clib-0.2.12.tar.gz", hash = "sha256:6c8fbb13ec503f99a91901ab46e0b07ae7941cd527393187039aec586fdfd36f", size = 225315, upload_time = "2024-10-20T10:10:56.22Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/48/41/e7a405afbdc26af961678474a55373e1b323605a4f5e2ddd4a80ea80f628/ruamel.yaml.clib-0.2.12-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:20b0f8dc160ba83b6dcc0e256846e1a02d044e13f7ea74a3d1d56ede4e48c632", size = 133433, upload_time = "2024-10-20T10:12:55.657Z" }, + { url = "https://files.pythonhosted.org/packages/ec/b0/b850385604334c2ce90e3ee1013bd911aedf058a934905863a6ea95e9eb4/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:943f32bc9dedb3abff9879edc134901df92cfce2c3d5c9348f172f62eb2d771d", size = 647362, upload_time = "2024-10-20T10:12:57.155Z" }, + { url = "https://files.pythonhosted.org/packages/44/d0/3f68a86e006448fb6c005aee66565b9eb89014a70c491d70c08de597f8e4/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95c3829bb364fdb8e0332c9931ecf57d9be3519241323c5274bd82f709cebc0c", size = 754118, upload_time = "2024-10-20T10:12:58.501Z" }, + { url = "https://files.pythonhosted.org/packages/52/a9/d39f3c5ada0a3bb2870d7db41901125dbe2434fa4f12ca8c5b83a42d7c53/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:749c16fcc4a2b09f28843cda5a193e0283e47454b63ec4b81eaa2242f50e4ccd", size = 706497, upload_time = "2024-10-20T10:13:00.211Z" }, + { url = "https://files.pythonhosted.org/packages/b0/fa/097e38135dadd9ac25aecf2a54be17ddf6e4c23e43d538492a90ab3d71c6/ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bf165fef1f223beae7333275156ab2022cffe255dcc51c27f066b4370da81e31", size = 698042, upload_time = "2024-10-21T11:26:46.038Z" }, + { url = "https://files.pythonhosted.org/packages/ec/d5/a659ca6f503b9379b930f13bc6b130c9f176469b73b9834296822a83a132/ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:32621c177bbf782ca5a18ba4d7af0f1082a3f6e517ac2a18b3974d4edf349680", size = 745831, upload_time = "2024-10-21T11:26:47.487Z" }, + { url = "https://files.pythonhosted.org/packages/db/5d/36619b61ffa2429eeaefaab4f3374666adf36ad8ac6330d855848d7d36fd/ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b82a7c94a498853aa0b272fd5bc67f29008da798d4f93a2f9f289feb8426a58d", size = 715692, upload_time = "2024-12-11T19:58:17.252Z" }, + { url = "https://files.pythonhosted.org/packages/b1/82/85cb92f15a4231c89b95dfe08b09eb6adca929ef7df7e17ab59902b6f589/ruamel.yaml.clib-0.2.12-cp312-cp312-win32.whl", hash = "sha256:e8c4ebfcfd57177b572e2040777b8abc537cdef58a2120e830124946aa9b42c5", size = 98777, upload_time = "2024-10-20T10:13:01.395Z" }, + { url = "https://files.pythonhosted.org/packages/d7/8f/c3654f6f1ddb75daf3922c3d8fc6005b1ab56671ad56ffb874d908bfa668/ruamel.yaml.clib-0.2.12-cp312-cp312-win_amd64.whl", hash = "sha256:0467c5965282c62203273b838ae77c0d29d7638c8a4e3a1c8bdd3602c10904e4", size = 115523, upload_time = "2024-10-20T10:13:02.768Z" }, + { url = "https://files.pythonhosted.org/packages/29/00/4864119668d71a5fa45678f380b5923ff410701565821925c69780356ffa/ruamel.yaml.clib-0.2.12-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:4c8c5d82f50bb53986a5e02d1b3092b03622c02c2eb78e29bec33fd9593bae1a", size = 132011, upload_time = "2024-10-20T10:13:04.377Z" }, + { url = "https://files.pythonhosted.org/packages/7f/5e/212f473a93ae78c669ffa0cb051e3fee1139cb2d385d2ae1653d64281507/ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux2014_aarch64.whl", hash = "sha256:e7e3736715fbf53e9be2a79eb4db68e4ed857017344d697e8b9749444ae57475", size = 642488, upload_time = "2024-10-20T10:13:05.906Z" }, + { url = "https://files.pythonhosted.org/packages/1f/8f/ecfbe2123ade605c49ef769788f79c38ddb1c8fa81e01f4dbf5cf1a44b16/ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b7e75b4965e1d4690e93021adfcecccbca7d61c7bddd8e22406ef2ff20d74ef", size = 745066, upload_time = "2024-10-20T10:13:07.26Z" }, + { url = "https://files.pythonhosted.org/packages/e2/a9/28f60726d29dfc01b8decdb385de4ced2ced9faeb37a847bd5cf26836815/ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96777d473c05ee3e5e3c3e999f5d23c6f4ec5b0c38c098b3a5229085f74236c6", size = 701785, upload_time = "2024-10-20T10:13:08.504Z" }, + { url = "https://files.pythonhosted.org/packages/84/7e/8e7ec45920daa7f76046578e4f677a3215fe8f18ee30a9cb7627a19d9b4c/ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:3bc2a80e6420ca8b7d3590791e2dfc709c88ab9152c00eeb511c9875ce5778bf", size = 693017, upload_time = "2024-10-21T11:26:48.866Z" }, + { url = "https://files.pythonhosted.org/packages/c5/b3/d650eaade4ca225f02a648321e1ab835b9d361c60d51150bac49063b83fa/ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:e188d2699864c11c36cdfdada94d781fd5d6b0071cd9c427bceb08ad3d7c70e1", size = 741270, upload_time = "2024-10-21T11:26:50.213Z" }, + { url = "https://files.pythonhosted.org/packages/87/b8/01c29b924dcbbed75cc45b30c30d565d763b9c4d540545a0eeecffb8f09c/ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4f6f3eac23941b32afccc23081e1f50612bdbe4e982012ef4f5797986828cd01", size = 709059, upload_time = "2024-12-11T19:58:18.846Z" }, + { url = "https://files.pythonhosted.org/packages/30/8c/ed73f047a73638257aa9377ad356bea4d96125b305c34a28766f4445cc0f/ruamel.yaml.clib-0.2.12-cp313-cp313-win32.whl", hash = "sha256:6442cb36270b3afb1b4951f060eccca1ce49f3d087ca1ca4563a6eb479cb3de6", size = 98583, upload_time = "2024-10-20T10:13:09.658Z" }, + { url = "https://files.pythonhosted.org/packages/b0/85/e8e751d8791564dd333d5d9a4eab0a7a115f7e349595417fd50ecae3395c/ruamel.yaml.clib-0.2.12-cp313-cp313-win_amd64.whl", hash = "sha256:e5b8daf27af0b90da7bb903a876477a9e6d7270be6146906b276605997c7e9a3", size = 115190, upload_time = "2024-10-20T10:13:10.66Z" }, +] + [[package]] name = "savepagenow" version = "1.3.0" @@ -1271,6 +1967,24 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a6/8f/aea39979f8a7091ad2242a038a0e4c2b463593923ce598a914255dfba9ef/savepagenow-1.3.0-py2.py3-none-any.whl", hash = "sha256:4b0a4fff47254c160a37a20868ab53bb90da3d3f9f96086a9255b2375e39fcbf", size = 5649, upload_time = "2023-07-01T13:31:48.005Z" }, ] +[[package]] +name = "shellingham" +version = "1.5.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310, upload_time = "2023-10-24T04:13:40.426Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755, upload_time = "2023-10-24T04:13:38.866Z" }, +] + +[[package]] +name = "simpleeval" +version = "1.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ff/6f/15be211749430f52f2c8f0c69158a6fc961c03aac93fa28d44d1a6f5ebc7/simpleeval-1.0.3.tar.gz", hash = "sha256:67bbf246040ac3b57c29cf048657b9cf31d4e7b9d6659684daa08ca8f1e45829", size = 24358, upload_time = "2024-11-02T10:29:46.912Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/e9/e58082fbb8cecbb6fb4133033c40cc50c248b1a331582be3a0f39138d65b/simpleeval-1.0.3-py3-none-any.whl", hash = "sha256:e3bdbb8c82c26297c9a153902d0fd1858a6c3774bf53ff4f134788c3f2035c38", size = 15762, upload_time = "2024-11-02T10:29:45.706Z" }, +] + [[package]] name = "six" version = "1.17.0" @@ -1289,6 +2003,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-py3-none-any.whl", hash = "sha256:b30115f0def7d7531d22a0fb6502488d879e75b260a9db4d0819cfb25403af5e", size = 24303, upload_time = "2025-01-02T07:14:38.724Z" }, ] +[[package]] +name = "soupsieve" +version = "2.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3f/f4/4a80cd6ef364b2e8b65b15816a843c0980f7a5a2b4dc701fc574952aa19f/soupsieve-2.7.tar.gz", hash = "sha256:ad282f9b6926286d2ead4750552c8a6142bc4c783fd66b0293547c8fe6ae126a", size = 103418, upload_time = "2025-04-20T18:50:08.518Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/9c/0e6afc12c269578be5c0c1c9f4b49a8d32770a080260c333ac04cc1c832d/soupsieve-2.7-py3-none-any.whl", hash = "sha256:6e60cc5c1ffaf1cebcc12e8188320b72071e922c2e897f737cadce79ad5d30c4", size = 36677, upload_time = "2025-04-20T18:50:07.196Z" }, +] + [[package]] name = "stack-data" version = "0.6.3" @@ -1303,14 +2026,51 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521, upload_time = "2023-09-30T13:58:03.53Z" }, ] +[[package]] +name = "structlog" +version = "25.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/79/b9/6e672db4fec07349e7a8a8172c1a6ae235c58679ca29c3f86a61b5e59ff3/structlog-25.4.0.tar.gz", hash = "sha256:186cd1b0a8ae762e29417095664adf1d6a31702160a46dacb7796ea82f7409e4", size = 1369138, upload_time = "2025-06-02T08:21:12.971Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/4a/97ee6973e3a73c74c8120d59829c3861ea52210667ec3e7a16045c62b64d/structlog-25.4.0-py3-none-any.whl", hash = "sha256:fe809ff5c27e557d14e613f45ca441aabda051d119ee5a0102aaba6ce40eed2c", size = 68720, upload_time = "2025-06-02T08:21:11.43Z" }, +] + +[[package]] +name = "tableschema-to-template" +version = "0.0.13" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jsonschema" }, + { name = "pyyaml" }, + { name = "xlsxwriter" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/23/2d/5b5c0127e959a715c5365b3b491846fba5bc1fb7f94370cc3a4fb3f51f68/tableschema-to-template-0.0.13.tar.gz", hash = "sha256:2d8d2250efb840e0ecb9012c5e879a82ef68f65dd86bdff574200fdfc978ff1c", size = 13564, upload_time = "2023-02-01T21:53:17.238Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9f/7f/3c129377d9b815c0bb92b8c24bbecabe5e6b13b831f38924f80d2e5b40b2/tableschema_to_template-0.0.13-py3-none-any.whl", hash = "sha256:4905500a4235740654230c3223629d26fdccb7a0457ec1d0110ea102c4f1146c", size = 14860, upload_time = "2023-02-01T21:53:16.02Z" }, +] + +[[package]] +name = "tabulate" +version = "0.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ec/fe/802052aecb21e3797b8f7902564ab6ea0d60ff8ca23952079064155d1ae1/tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c", size = 81090, upload_time = "2022-10-06T17:21:48.54Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/40/44/4a5f08c96eb108af5cb50b41f76142f0afa346dfa99d5296fe7202a11854/tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f", size = 35252, upload_time = "2022-10-06T17:21:44.262Z" }, +] + [[package]] name = "technologydata" source = { editable = "." } dependencies = [ + { name = "frozendict" }, + { name = "hdx-python-country" }, { name = "ipykernel" }, { name = "mypy" }, { name = "pandas" }, + { name = "pint" }, { name = "pre-commit" }, + { name = "pydantic" }, + { name = "pydeflate" }, { name = "pytest" }, { name = "pytest-cov" }, { name = "pytest-xdist" }, @@ -1332,6 +2092,8 @@ docs = [ [package.metadata] requires-dist = [ + { name = "frozendict", specifier = ">=2.4.6" }, + { name = "hdx-python-country", specifier = ">=3.9.6" }, { name = "ipykernel", specifier = ">=6.29.5" }, { name = "mkdocs-autolinks-plugin", marker = "extra == 'docs'", specifier = ">=0.7.1" }, { name = "mkdocs-git-revision-date-localized-plugin", marker = "extra == 'docs'", specifier = ">=1.4.7" }, @@ -1342,7 +2104,10 @@ requires-dist = [ { name = "mkdocstrings-python", marker = "extra == 'docs'", specifier = ">=1.16.11" }, { name = "mypy", specifier = ">=1.15.0" }, { name = "pandas", specifier = ">=2.2.3" }, + { name = "pint", specifier = ">=0.24.4" }, { name = "pre-commit", specifier = ">=4.2.0" }, + { name = "pydantic", specifier = ">=2.11.7" }, + { name = "pydeflate", specifier = ">=2.1.3" }, { name = "pytest", specifier = ">=8.3.5" }, { name = "pytest-cov", specifier = ">=6.2.1" }, { name = "pytest-xdist", specifier = ">=3.8.0" }, @@ -1352,6 +2117,24 @@ requires-dist = [ ] provides-extras = ["docs"] +[[package]] +name = "tenacity" +version = "9.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0a/d4/2b0cd0fe285e14b36db076e78c93766ff1d529d70408bd1d2a5a84f1d929/tenacity-9.1.2.tar.gz", hash = "sha256:1169d376c297e7de388d18b4481760d478b0e99a777cad3a9c86e556f4b697cb", size = 48036, upload_time = "2025-04-02T08:25:09.966Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/30/643397144bfbfec6f6ef821f36f33e57d35946c44a2352d3c9f0ae847619/tenacity-9.1.2-py3-none-any.whl", hash = "sha256:f77bf36710d8b73a50b2dd155c97b870017ad21afe6ab300326b0371b3b05138", size = 28248, upload_time = "2025-04-02T08:25:07.678Z" }, +] + +[[package]] +name = "text-unidecode" +version = "1.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ab/e2/e9a00f0ccb71718418230718b3d900e71a5d16e701a3dae079a21e9cd8f8/text-unidecode-1.3.tar.gz", hash = "sha256:bad6603bb14d279193107714b288be206cac565dfa49aa5b105294dd5c4aab93", size = 76885, upload_time = "2019-08-30T21:36:45.405Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a6/a5/c0b6468d3824fe3fde30dbb5e1f687b291608f9473681bbf7dabbf5a87d7/text_unidecode-1.3-py2.py3-none-any.whl", hash = "sha256:1311f10e8b895935241623731c2ba64f4c455287888b18189350b67134a822e8", size = 78154, upload_time = "2019-08-30T21:37:03.543Z" }, +] + [[package]] name = "tomlkit" version = "0.13.3" @@ -1389,6 +2172,21 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359, upload_time = "2024-04-19T11:11:46.763Z" }, ] +[[package]] +name = "typer" +version = "0.16.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "rich" }, + { name = "shellingham" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c5/8c/7d682431efca5fd290017663ea4588bf6f2c6aad085c7f108c5dbc316e70/typer-0.16.0.tar.gz", hash = "sha256:af377ffaee1dbe37ae9440cb4e8f11686ea5ce4e9bae01b84ae7c63b87f1dd3b", size = 102625, upload_time = "2025-05-26T14:30:31.824Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/76/42/3efaf858001d2c2913de7f354563e3a3a2f0decae3efe98427125a8f441e/typer-0.16.0-py3-none-any.whl", hash = "sha256:1f79bed11d4d02d4310e3c1b7ba594183bcedb0ac73b27a9e5f28f6fb5b98855", size = 46317, upload_time = "2025-05-26T14:30:30.523Z" }, +] + [[package]] name = "typing-extensions" version = "4.14.1" @@ -1398,6 +2196,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b5/00/d631e67a838026495268c2f6884f3711a15a9a2a96cd244fdaea53b823fb/typing_extensions-4.14.1-py3-none-any.whl", hash = "sha256:d1e1e3b58374dc93031d6eda2420a48ea44a36c2b4766a4fdeb3710755731d76", size = 43906, upload_time = "2025-07-04T13:28:32.743Z" }, ] +[[package]] +name = "typing-inspection" +version = "0.4.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f8/b1/0c11f5058406b3af7609f121aaa6b609744687f1d158b3c3a5bf4cc94238/typing_inspection-0.4.1.tar.gz", hash = "sha256:6ae134cc0203c33377d43188d4064e9b357dba58cff3185f22924610e70a9d28", size = 75726, upload_time = "2025-05-21T18:55:23.885Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/17/69/cd203477f944c353c31bade965f880aa1061fd6bf05ded0726ca845b6ff7/typing_inspection-0.4.1-py3-none-any.whl", hash = "sha256:389055682238f53b04f7badcb49b989835495a96700ced5dab2d8feae4b26f51", size = 14552, upload_time = "2025-05-21T18:55:22.152Z" }, +] + [[package]] name = "tzdata" version = "2025.2" @@ -1407,6 +2217,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8", size = 347839, upload_time = "2025-03-23T13:54:41.845Z" }, ] +[[package]] +name = "unidecode" +version = "1.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/7d/a8a765761bbc0c836e397a2e48d498305a865b70a8600fd7a942e85dcf63/Unidecode-1.4.0.tar.gz", hash = "sha256:ce35985008338b676573023acc382d62c264f307c8f7963733405add37ea2b23", size = 200149, upload_time = "2025-04-24T08:45:03.798Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8f/b7/559f59d57d18b44c6d1250d2eeaa676e028b9c527431f5d0736478a73ba1/Unidecode-1.4.0-py3-none-any.whl", hash = "sha256:c3c7606c27503ad8d501270406e345ddb480a7b5f38827eafe4fa82a137f0021", size = 235837, upload_time = "2025-04-24T08:45:01.609Z" }, +] + [[package]] name = "urllib3" version = "2.5.0" @@ -1416,6 +2235,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795, upload_time = "2025-06-18T14:07:40.39Z" }, ] +[[package]] +name = "validators" +version = "0.35.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/53/66/a435d9ae49850b2f071f7ebd8119dd4e84872b01630d6736761e6e7fd847/validators-0.35.0.tar.gz", hash = "sha256:992d6c48a4e77c81f1b4daba10d16c3a9bb0dbb79b3a19ea847ff0928e70497a", size = 73399, upload_time = "2025-05-01T05:42:06.7Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fa/6e/3e955517e22cbdd565f2f8b2e73d52528b14b8bcfdb04f62466b071de847/validators-0.35.0-py3-none-any.whl", hash = "sha256:e8c947097eae7892cb3d26868d637f79f47b4a0554bc6b80065dfe5aac3705dd", size = 44712, upload_time = "2025-05-01T05:42:04.203Z" }, +] + [[package]] name = "virtualenv" version = "20.31.2" @@ -1454,6 +2282,20 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/33/e8/e40370e6d74ddba47f002a32919d91310d6074130fe4e17dabcafc15cbf1/watchdog-6.0.0-py3-none-win_ia64.whl", hash = "sha256:a1914259fa9e1454315171103c6a30961236f508b9b623eae470268bbcc6a22f", size = 79067, upload_time = "2024-11-01T14:07:11.845Z" }, ] +[[package]] +name = "wbgapi" +version = "1.0.12" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyyaml" }, + { name = "requests" }, + { name = "tabulate" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d7/4a/f55695bd1c9f1996b675b6e9e980eef40ebdb5e4bf8774c059c31af6ade1/wbgapi-1.0.12.tar.gz", hash = "sha256:338c3c768bd120b80596b48fa0449ecabc93513ac989c55671dce579dbb3a5be", size = 33590, upload_time = "2022-07-05T15:07:22.772Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/00/12/224030af4886e119a3d03b709f7130e9601a4d15332e1d6a35671b25a4de/wbgapi-1.0.12-py3-none-any.whl", hash = "sha256:c5a1e1683b03d4264d287627c2562932f30e7f5c65509b812cb2e3de7d32633f", size = 36385, upload_time = "2022-07-05T15:07:20.606Z" }, +] + [[package]] name = "wcwidth" version = "0.2.13" @@ -1462,3 +2304,66 @@ sdist = { url = "https://files.pythonhosted.org/packages/6c/63/53559446a878410fc wheels = [ { url = "https://files.pythonhosted.org/packages/fd/84/fd2ba7aafacbad3c4201d395674fc6348826569da3c0937e75505ead3528/wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859", size = 34166, upload_time = "2024-01-06T02:10:55.763Z" }, ] + +[[package]] +name = "wheel" +version = "0.45.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8a/98/2d9906746cdc6a6ef809ae6338005b3f21bb568bea3165cfc6a243fdc25c/wheel-0.45.1.tar.gz", hash = "sha256:661e1abd9198507b1409a20c02106d9670b2576e916d58f520316666abca6729", size = 107545, upload_time = "2024-11-23T00:18:23.513Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/2c/87f3254fd8ffd29e4c02732eee68a83a1d3c346ae39bc6822dcbcb697f2b/wheel-0.45.1-py3-none-any.whl", hash = "sha256:708e7481cc80179af0e556bbf0cc00b8444c7321e2700b8d8580231d13017248", size = 72494, upload_time = "2024-11-23T00:18:21.207Z" }, +] + +[[package]] +name = "win32-setctime" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b3/8f/705086c9d734d3b663af0e9bb3d4de6578d08f46b1b101c2442fd9aecaa2/win32_setctime-1.2.0.tar.gz", hash = "sha256:ae1fdf948f5640aae05c511ade119313fb6a30d7eabe25fef9764dca5873c4c0", size = 4867, upload_time = "2024-12-07T15:28:28.314Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e1/07/c6fe3ad3e685340704d314d765b7912993bcb8dc198f0e7a89382d37974b/win32_setctime-1.2.0-py3-none-any.whl", hash = "sha256:95d644c4e708aba81dc3704a116d8cbc974d70b3bdb8be1d150e36be6e9d1390", size = 4083, upload_time = "2024-12-07T15:28:26.465Z" }, +] + +[[package]] +name = "xlrd" +version = "2.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/07/5a/377161c2d3538d1990d7af382c79f3b2372e880b65de21b01b1a2b78691e/xlrd-2.0.2.tar.gz", hash = "sha256:08b5e25de58f21ce71dc7db3b3b8106c1fa776f3024c54e45b45b374e89234c9", size = 100167, upload_time = "2025-06-14T08:46:39.039Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1a/62/c8d562e7766786ba6587d09c5a8ba9f718ed3fa8af7f4553e8f91c36f302/xlrd-2.0.2-py2.py3-none-any.whl", hash = "sha256:ea762c3d29f4cca48d82df517b6d89fbce4db3107f9d78713e48cd321d5c9aa9", size = 96555, upload_time = "2025-06-14T08:46:37.766Z" }, +] + +[[package]] +name = "xlrd3" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/79/db/88d8d49ddacc203956ecb98dc86c6ffeee6e933ef1f50da9b369de518f7f/xlrd3-1.1.0.tar.gz", hash = "sha256:20e6ed2e5f7f8b4ab61e30faffebceff6fab348332b4c915373f0a72742dc177", size = 58919847, upload_time = "2021-04-25T12:27:10.03Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5d/08/fce745025e58f160e7dcb5a45d4d43eb0bd44c0d8851425be87ef90271fa/xlrd3-1.1.0-py2.py3-none-any.whl", hash = "sha256:8e8e808f938144e7936a6e07c1d57be7a0f6c6f5b37c9c67974b43246d8aacb6", size = 105268, upload_time = "2021-04-25T12:26:55.264Z" }, +] + +[[package]] +name = "xlsx2csv" +version = "0.8.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/36/20/94860286a308a4213581c1beacd4fc7be724250c03583fcff23aaa6107bb/xlsx2csv-0.8.4.tar.gz", hash = "sha256:2aa809888826f6af5b26c77fc7f613f2bbeada0d8cc09e5a58e0f59684bb6911", size = 221390, upload_time = "2024-11-19T17:06:07.818Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c4/c0/15c21556362c67f1155f3643a375d50ac67559b82c768e64e800a42a2577/xlsx2csv-0.8.4-py3-none-any.whl", hash = "sha256:52ab873fc7b2f2ca75d14aee8bd1985a9f5c1bcb3cc7b80df7a5d57a40a67473", size = 15904, upload_time = "2024-11-19T17:06:05.362Z" }, +] + +[[package]] +name = "xlsxwriter" +version = "3.2.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a7/47/7704bac42ac6fe1710ae099b70e6a1e68ed173ef14792b647808c357da43/xlsxwriter-3.2.5.tar.gz", hash = "sha256:7e88469d607cdc920151c0ab3ce9cf1a83992d4b7bc730c5ffdd1a12115a7dbe", size = 213306, upload_time = "2025-06-17T08:59:14.619Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fa/34/a22e6664211f0c8879521328000bdcae9bf6dbafa94a923e531f6d5b3f73/xlsxwriter-3.2.5-py3-none-any.whl", hash = "sha256:4f4824234e1eaf9d95df9a8fe974585ff91d0f5e3d3f12ace5b71e443c1c6abd", size = 172347, upload_time = "2025-06-17T08:59:13.453Z" }, +] + +[[package]] +name = "xlwt" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/06/97/56a6f56ce44578a69343449aa5a0d98eefe04085d69da539f3034e2cd5c1/xlwt-1.3.0.tar.gz", hash = "sha256:c59912717a9b28f1a3c2a98fd60741014b06b043936dcecbc113eaaada156c88", size = 153929, upload_time = "2017-08-22T06:47:16.498Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/44/48/def306413b25c3d01753603b1a222a011b8621aed27cd7f89cbc27e6b0f4/xlwt-1.3.0-py2.py3-none-any.whl", hash = "sha256:a082260524678ba48a297d922cc385f58278b8aa68741596a87de01a9c628b2e", size = 99981, upload_time = "2017-08-22T06:47:15.281Z" }, +] From 105578b9b0015bde54366fc281d08ee5047c6273 Mon Sep 17 00:00:00 2001 From: Fabrizio Finozzi <167071962+finozzifa@users.noreply.github.com> Date: Thu, 31 Jul 2025 16:44:47 +0200 Subject: [PATCH 06/43] code: add OOP to test suites (#21) --- test/test_commons.py | 258 +++++++++-------- test/test_datapackage.py | 38 +-- test/test_source.py | 366 ++++++++++++------------ test/test_source_collection.py | 445 +++++++++++++++-------------- test/test_technology_collection.py | 179 ++++++------ 5 files changed, 667 insertions(+), 619 deletions(-) diff --git a/test/test_commons.py b/test/test_commons.py index 95bf5ad8..c242f863 100644 --- a/test/test_commons.py +++ b/test/test_commons.py @@ -11,131 +11,143 @@ import technologydata -@pytest.mark.parametrize( - "input_datetime_string, date_format, expected_date", - [ - ( - "2025-05-20 14:45:00", - technologydata.DateFormatEnum.SOURCES_CSV, - "2025-05-20 14:45:00", - ), - ( - "20250520144500", - technologydata.DateFormatEnum.SOURCES_CSV, - "2025-05-20 14:45:00", - ), - ( - "2025-05-20 14:45:00", - technologydata.DateFormatEnum.WAYBACK, - "20250520144500", - ), - ("20250520144500", technologydata.DateFormatEnum.WAYBACK, "20250520144500"), - ("2025-05-20 14:45:00", technologydata.DateFormatEnum.NONE, ""), - ("invalid-date-string", technologydata.DateFormatEnum.SOURCES_CSV, ValueError), - ("2025/13/01", technologydata.DateFormatEnum.SOURCES_CSV, ValueError), - ], -) # type: ignore -def test_change_datetime_format( - input_datetime_string: str, - date_format: technologydata.DateFormatEnum, - expected_date: str | typing.Any, -) -> None: - """Check if the datetime is correctly transformed to a new format.""" - if expected_date is ValueError: - with pytest.raises(ValueError, match="Error during datetime formatting"): - technologydata.Commons.change_datetime_format( +class TestCommonsUtils: + """Test suite for the Commons utility functions in the technologydata module.""" + + @pytest.mark.parametrize( + "input_datetime_string, date_format, expected_date", + [ + ( + "2025-05-20 14:45:00", + technologydata.DateFormatEnum.SOURCES_CSV, + "2025-05-20 14:45:00", + ), + ( + "20250520144500", + technologydata.DateFormatEnum.SOURCES_CSV, + "2025-05-20 14:45:00", + ), + ( + "2025-05-20 14:45:00", + technologydata.DateFormatEnum.WAYBACK, + "20250520144500", + ), + ("20250520144500", technologydata.DateFormatEnum.WAYBACK, "20250520144500"), + ("2025-05-20 14:45:00", technologydata.DateFormatEnum.NONE, ""), + ( + "invalid-date-string", + technologydata.DateFormatEnum.SOURCES_CSV, + ValueError, + ), + ("2025/13/01", technologydata.DateFormatEnum.SOURCES_CSV, ValueError), + ], + ) # type: ignore + def test_change_datetime_format( + self, + input_datetime_string: str, + date_format: technologydata.DateFormatEnum, + expected_date: str | typing.Any, + ) -> None: + """Check if the datetime is correctly transformed to a new format.""" + if expected_date is ValueError: + with pytest.raises(ValueError, match="Error during datetime formatting"): + technologydata.Commons.change_datetime_format( + input_datetime_string, date_format + ) + else: + result = technologydata.Commons.change_datetime_format( input_datetime_string, date_format ) - else: - result = technologydata.Commons.change_datetime_format( - input_datetime_string, date_format - ) - assert result == expected_date - - -@pytest.mark.parametrize( - "input_string, expected_string", - [ - ( - "Hello, World! Welcome to Python @ 2023.", - "hello_world_welcome_to_python_2023", - ), - ( - " Special#Characters$Are%Fun! ", - "special_characters_are_fun", - ), - ( - "!!!LeadingAndTrailing!!!", - "leadingandtrailing", - ), - ], -) # type: ignore -def test_replace_special_characters( - input_string: str, - expected_string: str, -) -> None: - """Check if the special characters are removed from a string and the string is lowercased.""" - assert ( - technologydata.Commons.replace_special_characters(input_string) - == expected_string - ) + assert result == expected_date + @pytest.mark.parametrize( + "input_string, expected_string", + [ + ( + "Hello, World! Welcome to Python @ 2023.", + "hello_world_welcome_to_python_2023", + ), + ( + " Special#Characters$Are%Fun! ", + "special_characters_are_fun", + ), + ( + "!!!LeadingAndTrailing!!!", + "leadingandtrailing", + ), + ], + ) # type: ignore + def test_replace_special_characters( + self, + input_string: str, + expected_string: str, + ) -> None: + """Check if the special characters are removed from a string and the string is lowercased.""" + assert ( + technologydata.Commons.replace_special_characters(input_string) + == expected_string + ) -@pytest.mark.parametrize( - "input_string, expected_string", - [ - ("text/plain", ".txt"), - ("text/html", ".html"), - ("text/csv", ".csv"), - ("text/xml", ".xml"), - ("application/vnd.ms-excel", ".xls"), - ("application/vnd.oasis.opendocument.spreadsheet", ".ods"), - ("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", ".xlsx"), - ("application/json", ".json"), - ("application/xml", ".xml"), - ("application/pdf", ".pdf"), - ("application/parquet", ".parquet"), - ("application/vdn.apache.parquet", ".parquet"), - ("application/x-rar-compressed", ".rar"), - ("application/vnd.rar", ".rar"), - ("application/zip", ".zip"), - ("application/x-zip-compressed", ".zip"), - ], -) # type: ignore -def test_get_extension( - input_string: str, - expected_string: str, -) -> None: - """Check if the correct file extension is associated to a given MIME type.""" - assert ( - technologydata.FileExtensionEnum.get_extension(input_string) == expected_string - ) - + @pytest.mark.parametrize( + "input_string, expected_string", + [ + ("text/plain", ".txt"), + ("text/html", ".html"), + ("text/csv", ".csv"), + ("text/xml", ".xml"), + ("application/vnd.ms-excel", ".xls"), + ("application/vnd.oasis.opendocument.spreadsheet", ".ods"), + ( + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", + ".xlsx", + ), + ("application/json", ".json"), + ("application/xml", ".xml"), + ("application/pdf", ".pdf"), + ("application/parquet", ".parquet"), + ("application/vdn.apache.parquet", ".parquet"), + ("application/x-rar-compressed", ".rar"), + ("application/vnd.rar", ".rar"), + ("application/zip", ".zip"), + ("application/x-zip-compressed", ".zip"), + ], + ) # type: ignore + def test_get_extension( + self, + input_string: str, + expected_string: str, + ) -> None: + """Check if the correct file extension is associated to a given MIME type.""" + assert ( + technologydata.FileExtensionEnum.get_extension(input_string) + == expected_string + ) -@pytest.mark.parametrize( - "input_string, expected_string", - [ - ("https://example.com/file.txt", ".txt"), - ("https://example.com/file.html", ".html"), - ("https://example.com/file.csv", ".csv"), - ("https://example.com/file.xml", ".xml"), - ("https://example.com/file.xls", ".xls"), - ("https://example.com/file.ods", ".ods"), - ("https://example.com/file.xlsx", ".xlsx"), - ("https://example.com/file.json", ".json"), - ("https://example.com/file.pdf", ".pdf"), - ("https://example.com/file.parquet", ".parquet"), - ("https://example.com/file.rar", ".rar"), - ("https://example.com/file.zip", ".zip"), - ("https://example.com/file.unknown", None), - ], -) # type: ignore -def test_search_file_extension_in_url( - input_string: str, - expected_string: str, -) -> None: - """Check if the correct file extension is found in a given url.""" - assert ( - technologydata.FileExtensionEnum.search_file_extension_in_url(input_string) - == expected_string - ) + @pytest.mark.parametrize( + "input_string, expected_string", + [ + ("https://example.com/file.txt", ".txt"), + ("https://example.com/file.html", ".html"), + ("https://example.com/file.csv", ".csv"), + ("https://example.com/file.xml", ".xml"), + ("https://example.com/file.xls", ".xls"), + ("https://example.com/file.ods", ".ods"), + ("https://example.com/file.xlsx", ".xlsx"), + ("https://example.com/file.json", ".json"), + ("https://example.com/file.pdf", ".pdf"), + ("https://example.com/file.parquet", ".parquet"), + ("https://example.com/file.rar", ".rar"), + ("https://example.com/file.zip", ".zip"), + ("https://example.com/file.unknown", None), + ], + ) # type: ignore + def test_search_file_extension_in_url( + self, + input_string: str, + expected_string: str, + ) -> None: + """Check if the correct file extension is found in a given url.""" + assert ( + technologydata.FileExtensionEnum.search_file_extension_in_url(input_string) + == expected_string + ) diff --git a/test/test_datapackage.py b/test/test_datapackage.py index 5e84e940..d1611fe9 100644 --- a/test/test_datapackage.py +++ b/test/test_datapackage.py @@ -11,19 +11,25 @@ path_cwd = pathlib.Path.cwd() -def test_get_source_collection() -> None: - """Test how the sources attributes is extracted from a TechnologyCollection instance.""" - input_file = pathlib.Path( - path_cwd, - "test", - "test_data", - "solar_photovoltaics_example_03", - "technologies.json", - ) - technologies_collection = technologydata.TechnologyCollection.from_json(input_file) - data_package = technologydata.DataPackage( - technologies=technologies_collection, - ) - data_package.get_source_collection() - assert isinstance(data_package.sources, technologydata.SourceCollection) - assert len(data_package.sources) == 2 +class TestDatapackage: + """Test suite for the Datapackage class in the technologydata module.""" + + def test_get_source_collection(self) -> None: + """Test how the sources attributes is extracted from a TechnologyCollection instance.""" + input_file = pathlib.Path( + path_cwd, + "test", + "test_data", + "solar_photovoltaics_example_03", + "technologies.json", + ) + + technologies_collection = technologydata.TechnologyCollection.from_json( + input_file + ) + data_package = technologydata.DataPackage( + technologies=technologies_collection, + ) + data_package.get_source_collection() + assert isinstance(data_package.sources, technologydata.SourceCollection) + assert len(data_package.sources) == 2 diff --git a/test/test_source.py b/test/test_source.py index 94c8db4d..c889b627 100644 --- a/test/test_source.py +++ b/test/test_source.py @@ -14,21 +14,67 @@ path_cwd = pathlib.Path.cwd() -@pytest.mark.parametrize( - "example_source, expected_equal", - [ - ( +class TestSource: + """Test suite for the Source class in the technologydata module.""" + + @pytest.mark.parametrize( + "example_source, expected_equal", + [ + ( + { + "source_title": "atb_nrel", + "source_authors": "NREL/ATB", + "source_url": "https:download", + "source_url_archive": "http:/3273/download", + "source_url_date": "2025-05-22 15:08:02", + "source_url_date_archive": "2025-05-22 15:08:02", + }, + False, # Expect not equal + ), + ( + { + "source_title": "tech_data_generation", + "source_authors": "Danish Energy Agency", + "source_url": "https:download", + "source_url_archive": "http:/3273/download", + "source_url_date": "2025-05-06 16:02:04", + "source_url_date_archive": "2025-05-06 16:02:04", + }, + True, # Expect equal + ), + ( + { + "source_title": "tech_data_generation", + "source_authors": "Danish Energy Agency", + }, + False, # Expect not equal + ), + ], + indirect=["example_source"], + ) # type: ignore + def test_eq( + self, example_source: technologydata.Source, expected_equal: bool + ) -> None: + """Check if the override method __eq__ works as expected.""" + reference_source = technologydata.Source( + title="tech_data_generation", + authors="Danish Energy Agency", + url="https:download", + url_archive="http:/3273/download", + url_date="2025-05-06 16:02:04", + url_date_archive="2025-05-06 16:02:04", + ) + assert (example_source == reference_source) == expected_equal + + @pytest.mark.parametrize( + "example_source", + [ { "source_title": "atb_nrel", "source_authors": "NREL/ATB", - "source_url": "https:download", "source_url_archive": "http:/3273/download", - "source_url_date": "2025-05-22 15:08:02", "source_url_date_archive": "2025-05-22 15:08:02", }, - False, # Expect not equal - ), - ( { "source_title": "tech_data_generation", "source_authors": "Danish Energy Agency", @@ -37,184 +83,142 @@ "source_url_date": "2025-05-06 16:02:04", "source_url_date_archive": "2025-05-06 16:02:04", }, - True, # Expect equal - ), - ( + ], + indirect=["example_source"], + ) # type: ignore + def test_hash(self, example_source: technologydata.Source) -> None: + """Check if the override method __hash__ works as expected.""" + assert isinstance(hash(example_source), int) + + @pytest.mark.parametrize( + "example_source, expected_string", + [ + ( + { + "source_title": "OET project page", + "source_authors": "Open Energy Transition gGmbH", + "source_url": "https://outputs.html", + "source_url_archive": "https:archived.html", + "source_url_date": "2025-05-06 16:02:04", + "source_url_date_archive": "2025-05-06 16:02:04", + }, + "'Open Energy Transition gGmbH': 'OET project page', from url 'https://outputs.html', last accessed on '2025-05-06 16:02:04', archived at 'https:archived.html', on '2025-05-06 16:02:04'.", + ) + ], + indirect=["example_source"], + ) # type: ignore + def test_str( + self, example_source: technologydata.Source, expected_string: str + ) -> None: + """Check if the override method __str__ works as expected.""" + # Ensure the snapshot is created + assert str(example_source) == expected_string + + @pytest.mark.parametrize( + "example_source", + [ + { + "source_title": "atb_nrel", + "source_authors": "NREL/ATB", + "source_url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "source_url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "source_url_date": "2025-05-22 15:08:02", + "source_url_date_archive": "2025-05-22 15:08:02", + }, { "source_title": "tech_data_generation", "source_authors": "Danish Energy Agency", + "source_url": "https://ens.dk/media/3273/download", + "source_url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", + "source_url_date": "2025-05-06 16:02:04", + "source_url_date_archive": "2025-05-06 16:02:04", }, - False, # Expect not equal - ), - ], - indirect=["example_source"], -) # type: ignore -def test_eq(example_source: technologydata.Source, expected_equal: bool) -> None: - """Check if the override method __eq__ works as expected.""" - reference_source = technologydata.Source( - title="tech_data_generation", - authors="Danish Energy Agency", - url="https:download", - url_archive="http:/3273/download", - url_date="2025-05-06 16:02:04", - url_date_archive="2025-05-06 16:02:04", - ) - assert (example_source == reference_source) == expected_equal - - -@pytest.mark.parametrize( - "example_source", - [ - { - "source_title": "atb_nrel", - "source_authors": "NREL/ATB", - "source_url_archive": "http:/3273/download", - "source_url_date_archive": "2025-05-22 15:08:02", - }, - { - "source_title": "tech_data_generation", - "source_authors": "Danish Energy Agency", - "source_url": "https:download", - "source_url_archive": "http:/3273/download", - "source_url_date": "2025-05-06 16:02:04", - "source_url_date_archive": "2025-05-06 16:02:04", - }, - ], - indirect=["example_source"], -) # type: ignore -def test_hash(example_source: technologydata.Source) -> None: - """Check if the override method __hash__ works as expected.""" - assert isinstance(hash(example_source), int) - - -@pytest.mark.parametrize( - "example_source, expected_string", - [ - ( + ], + indirect=["example_source"], + ) # type: ignore + def test_retrieve_from_wayback(self, example_source: technologydata.Source) -> None: + """Check if the example source is downloaded from the Internet Archive Wayback Machine.""" + storage_path = example_source.retrieve_from_wayback(path_cwd) + # Check if storage_paths is not None and is a list + assert storage_path is not None, "Expected a valid storage path, but got None." + assert isinstance(storage_path, pathlib.Path), ( + "Expected storage_path to be a pathlib.Path." + ) + assert storage_path is not None, "Expected a valid storage path, but got None." + assert storage_path.is_file(), ( + f"Expected {storage_path} to be a file, but it does not exist." + ) + # Delete the downloaded file + storage_path.unlink(missing_ok=True) + + def test_store_in_wayback(self) -> None: + """Check if a given url is correctly stored as a snapshot on Internet Archive Wayback Machine.""" + url_to_archive = "https://www.openenergytransition.org/outputs.html" + archived_info = technologydata.Source.store_in_wayback(url_to_archive) + + # Check if archived_info is None + assert archived_info is not None, "archived_info should not be None" + + archived_url, new_capture, output_timestamp = archived_info + + assert "https://web.archive.org/web/" in archived_url + assert url_to_archive in archived_url + assert isinstance(new_capture, bool) + + assert output_timestamp is not None, "output_timestamp should not be None" + try: + datetime.datetime.strptime( + output_timestamp, technologydata.DateFormatEnum.SOURCES_CSV + ) + except ValueError: + pytest.fail("Valid date-time string did not match the format") + + @pytest.mark.parametrize( + "example_source", + [ { "source_title": "OET project page", "source_authors": "Open Energy Transition gGmbH", - "source_url": "https://outputs.html", - "source_url_archive": "https:archived.html", - "source_url_date": "2025-05-06 16:02:04", - "source_url_date_archive": "2025-05-06 16:02:04", + "source_url": "https://openenergytransition.org/outputs.html", }, - "'Open Energy Transition gGmbH': 'OET project page', from url 'https://outputs.html', last accessed on '2025-05-06 16:02:04', archived at 'https:archived.html', on '2025-05-06 16:02:04'.", - ) - ], - indirect=["example_source"], -) # type: ignore -def test_str(example_source: technologydata.Source, expected_string: str) -> None: - """Check if the override method __str__ works as expected.""" - # Ensure the snapshot is created - assert str(example_source) == expected_string - - -@pytest.mark.parametrize( - "example_source", - [ - { - "source_title": "atb_nrel", - "source_authors": "NREL/ATB", - "source_url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", - "source_url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", - "source_url_date": "2025-05-22 15:08:02", - "source_url_date_archive": "2025-05-22 15:08:02", - }, - { - "source_title": "tech_data_generation", - "source_authors": "Danish Energy Agency", - "source_url": "https://ens.dk/media/3273/download", - "source_url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", - "source_url_date": "2025-05-06 16:02:04", - "source_url_date_archive": "2025-05-06 16:02:04", - }, - ], - indirect=["example_source"], -) # type: ignore -def test_retrieve_from_wayback(example_source: technologydata.Source) -> None: - """Check if the example source is downloaded from the Internet Archive Wayback Machine.""" - storage_path = example_source.retrieve_from_wayback(path_cwd) - # Check if storage_paths is not None and is a list - assert storage_path is not None, "Expected a valid storage path, but got None." - assert isinstance(storage_path, pathlib.Path), ( - "Expected storage_path to be a pathlib.Path." - ) - assert storage_path is not None, "Expected a valid storage path, but got None." - assert storage_path.is_file(), ( - f"Expected {storage_path} to be a file, but it does not exist." - ) - # Delete the downloaded file - storage_path.unlink(missing_ok=True) - - -def test_store_in_wayback() -> None: - """Check if a given url is correctly stored as a snapshot on Internet Archive Wayback Machine.""" - url_to_archive = "https://www.openenergytransition.org/outputs.html" - archived_info = technologydata.Source.store_in_wayback(url_to_archive) - - # Check if archived_info is None - assert archived_info is not None, "archived_info should not be None" - - archived_url, new_capture, output_timestamp = archived_info - - assert "https://web.archive.org/web/" in archived_url - assert url_to_archive in archived_url - assert isinstance(new_capture, bool) - - assert output_timestamp is not None, "output_timestamp should not be None" - try: - datetime.datetime.strptime( - output_timestamp, technologydata.DateFormatEnum.SOURCES_CSV + ], + indirect=["example_source"], + ) # type: ignore + def test_ensure_in_wayback(self, example_source: technologydata.Source) -> None: + """Check if the snapshot URL is created correctly.""" + # Ensure the snapshot is created + example_source.ensure_in_wayback() + assert example_source.url_date_archive is not None + assert example_source.url_archive is not None + + @pytest.mark.parametrize( + "url_archived, source_path, source_title, expected_path", + [ + ( + "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", + path_cwd, + "title", + pathlib.Path(path_cwd, "title.pdf"), + ), + ( + "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + path_cwd, + "title", + pathlib.Path(path_cwd, "title.parquet"), + ), + ], + ) # type: ignore + def test_get_save_path( + self, + url_archived: str, + source_path: pathlib.Path, + source_title: str, + expected_path: pathlib.Path, + ) -> None: + """Check if the path where to store the file to download follows the requested pattern.""" + assert ( + technologydata.Source._get_save_path( + url_archived, source_path, source_title + ) + == expected_path ) - except ValueError: - pytest.fail("Valid date-time string did not match the format") - - -@pytest.mark.parametrize( - "example_source", - [ - { - "source_title": "OET project page", - "source_authors": "Open Energy Transition gGmbH", - "source_url": "https://openenergytransition.org/outputs.html", - }, - ], - indirect=["example_source"], -) # type: ignore -def test_ensure_in_wayback(example_source: technologydata.Source) -> None: - """Check if the snapshot URL is created correctly.""" - # Ensure the snapshot is created - example_source.ensure_in_wayback() - assert example_source.url_date_archive is not None - assert example_source.url_archive is not None - - -@pytest.mark.parametrize( - "url_archived, source_path, source_title, expected_path", - [ - ( - "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", - path_cwd, - "title", - pathlib.Path(path_cwd, "title.pdf"), - ), - ( - "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", - path_cwd, - "title", - pathlib.Path(path_cwd, "title.parquet"), - ), - ], -) # type: ignore -def test_get_save_path( - url_archived: str, - source_path: pathlib.Path, - source_title: str, - expected_path: pathlib.Path, -) -> None: - """Check if the path where to store the file to download follows the requested pattern.""" - assert ( - technologydata.Source._get_save_path(url_archived, source_path, source_title) - == expected_path - ) diff --git a/test/test_source_collection.py b/test/test_source_collection.py index fd75356b..62e95a42 100644 --- a/test/test_source_collection.py +++ b/test/test_source_collection.py @@ -14,236 +14,253 @@ path_cwd = pathlib.Path.cwd() -@pytest.mark.parametrize( - "example_source_collection, expected_string", - [ - ( +class TestSourceCollection: + """Test suite for the SourceCollection class in the technologydata module.""" + + @pytest.mark.parametrize( + "example_source_collection, expected_string", + [ + ( + [ + { + "source_title": "atb_nrel", + "source_authors": "NREL/ATB", + "source_url_date": "2025-05-22 15:08:02", + }, + { + "source_title": "tech_data_generation", + "source_authors": "Danish Energy Agency", + "source_url_date_archive": "2025-05-06 16:02:04", + }, + ], + "SourceCollection with 2 sources: " + "'NREL/ATB': 'atb_nrel', last accessed on '2025-05-22 15:08:02', " + "'Danish Energy Agency': 'tech_data_generation', on '2025-05-06 16:02:04'.", + ), + ], + indirect=["example_source_collection"], + ) # type: ignore + def test_str( + self, + example_source_collection: technologydata.SourceCollection, + expected_string: str, + ) -> None: + """Check if the example source collection is cast to string as expected.""" + assert str(example_source_collection) == expected_string + + @pytest.mark.parametrize( + "example_source_collection", + [ + [ + { + "source_title": "Source 1", + "source_authors": "Author 1", + }, + { + "source_title": "Source 2", + "source_authors": "Author 2", + }, + ] + ], + indirect=["example_source_collection"], + ) # type: ignore + def test_example_source_collection( + self, + example_source_collection: technologydata.SourceCollection, + ) -> None: + """Check if the example source collection is instantiated correctly.""" + # Check that the returned object is a SourceCollection + assert isinstance(example_source_collection, technologydata.SourceCollection) + + # Check the number of sources + assert len(example_source_collection.sources) == 2 + + # Check the titles of the sources + assert example_source_collection.sources[0].title == "Source 1" + assert example_source_collection.sources[1].title == "Source 2" + assert example_source_collection.sources[0].authors == "Author 1" + assert example_source_collection.sources[1].authors == "Author 2" + + @pytest.mark.parametrize( + "example_source_collection", + [ [ { "source_title": "atb_nrel", "source_authors": "NREL/ATB", + "source_url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "source_url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", "source_url_date": "2025-05-22 15:08:02", + "source_url_date_archive": "2025-05-22 15:08:02", }, { "source_title": "tech_data_generation", "source_authors": "Danish Energy Agency", + "source_url": "https://ens.dk/media/3273/download", + "source_url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", + "source_url_date": "2025-05-06 16:02:04", "source_url_date_archive": "2025-05-06 16:02:04", }, ], - "SourceCollection with 2 sources: " - "'NREL/ATB': 'atb_nrel', last accessed on '2025-05-22 15:08:02', " - "'Danish Energy Agency': 'tech_data_generation', on '2025-05-06 16:02:04'.", - ), - ], - indirect=["example_source_collection"], -) # type: ignore -def test_str( - example_source_collection: technologydata.SourceCollection, expected_string: str -) -> None: - """Check if the example source collection is cast to string as expected.""" - assert str(example_source_collection) == expected_string - - -@pytest.mark.parametrize( - "example_source_collection", - [ - [ - { - "source_title": "Source 1", - "source_authors": "Author 1", - }, - { - "source_title": "Source 2", - "source_authors": "Author 2", - }, - ] - ], - indirect=["example_source_collection"], -) # type: ignore -def test_example_source_collection( - example_source_collection: technologydata.SourceCollection, -) -> None: - """Check if the example source collection is instantiated correctly.""" - # Check that the returned object is a SourceCollection - assert isinstance(example_source_collection, technologydata.SourceCollection) - - # Check the number of sources - assert len(example_source_collection.sources) == 2 - - # Check the titles of the sources - assert example_source_collection.sources[0].title == "Source 1" - assert example_source_collection.sources[1].title == "Source 2" - assert example_source_collection.sources[0].authors == "Author 1" - assert example_source_collection.sources[1].authors == "Author 2" - - -@pytest.mark.parametrize( - "example_source_collection", - [ - [ - { - "source_title": "atb_nrel", - "source_authors": "NREL/ATB", - "source_url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", - "source_url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", - "source_url_date": "2025-05-22 15:08:02", - "source_url_date_archive": "2025-05-22 15:08:02", - }, - { - "source_title": "tech_data_generation", - "source_authors": "Danish Energy Agency", - "source_url": "https://ens.dk/media/3273/download", - "source_url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", - "source_url_date": "2025-05-06 16:02:04", - "source_url_date_archive": "2025-05-06 16:02:04", - }, ], - ], - indirect=["example_source_collection"], -) # type: ignore -def test_retrieve_all_from_wayback( - example_source_collection: technologydata.SourceCollection, -) -> None: - """Check if the example source collection is downloaded from the Internet Archive Wayback Machine.""" - storage_paths = example_source_collection.retrieve_all_from_wayback(path_cwd) - - # Check if storage_paths is not None and is a list - assert storage_paths is not None, "Expected storage_paths to be not None." - assert isinstance(storage_paths, list), "Expected storage_paths to be a list." - - # Filter out None values and check the remaining paths - valid_paths = [path for path in storage_paths if path is not None] - - assert all(isinstance(path, pathlib.Path) for path in valid_paths), ( - f"Expected all elements in {valid_paths} to be instances of pathlib.Path." - ) - assert all(path.is_file() for path in valid_paths), ( - f"Expected all elements in {valid_paths} to be a file, but it does not exist." - ) - - # Delete the downloaded files - for path in valid_paths: - path.unlink(missing_ok=True) - - -@pytest.mark.parametrize( - "example_source_collection", - [ + indirect=["example_source_collection"], + ) # type: ignore + def test_retrieve_all_from_wayback( + self, + example_source_collection: technologydata.SourceCollection, + ) -> None: + """Check if the example source collection is downloaded from the Internet Archive Wayback Machine.""" + storage_paths = example_source_collection.retrieve_all_from_wayback(path_cwd) + + # Check if storage_paths is not None and is a list + assert storage_paths is not None, "Expected storage_paths to be not None." + assert isinstance(storage_paths, list), "Expected storage_paths to be a list." + + # Filter out None values and check the remaining paths + valid_paths = [path for path in storage_paths if path is not None] + + assert all(isinstance(path, pathlib.Path) for path in valid_paths), ( + f"Expected all elements in {valid_paths} to be instances of pathlib.Path." + ) + assert all(path.is_file() for path in valid_paths), ( + f"Expected all elements in {valid_paths} to be a file, but it does not exist." + ) + + # Delete the downloaded files + for path in valid_paths: + path.unlink(missing_ok=True) + + @pytest.mark.parametrize( + "example_source_collection", [ - { - "source_title": "atb_nrel", - "source_authors": "NREL/ATB", - "source_url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", - "source_url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", - "source_url_date": "2025-05-22 15:08:02", - "source_url_date_archive": "2025-05-22 15:08:02", - }, - { - "source_title": "tech_data_generation", - "source_authors": "Danish Energy Agency", - "source_url": "https://ens.dk/media/3273/download", - "source_url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", - "source_url_date": "2025-05-06 16:02:04", - "source_url_date_archive": "2025-05-06 16:02:04", - }, + [ + { + "source_title": "atb_nrel", + "source_authors": "NREL/ATB", + "source_url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "source_url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "source_url_date": "2025-05-22 15:08:02", + "source_url_date_archive": "2025-05-22 15:08:02", + }, + { + "source_title": "tech_data_generation", + "source_authors": "Danish Energy Agency", + "source_url": "https://ens.dk/media/3273/download", + "source_url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", + "source_url_date": "2025-05-06 16:02:04", + "source_url_date_archive": "2025-05-06 16:02:04", + }, + ], ], - ], - indirect=["example_source_collection"], -) # type: ignore -def test_to_csv(example_source_collection: technologydata.SourceCollection) -> None: - """Check if the example source collection is exported to CSV.""" - output_file = pathlib.Path(path_cwd, "export.csv") - example_source_collection.to_csv(path_or_buf=output_file) - assert output_file.is_file() - output_file.unlink(missing_ok=True) - - -@pytest.mark.parametrize( - "example_source_collection", - [ + indirect=["example_source_collection"], + ) # type: ignore + def test_to_csv( + self, example_source_collection: technologydata.SourceCollection + ) -> None: + """Check if the example source collection is exported to CSV.""" + output_file = pathlib.Path(path_cwd, "export.csv") + example_source_collection.to_csv(path_or_buf=output_file) + assert output_file.is_file() + output_file.unlink(missing_ok=True) + + @pytest.mark.parametrize( + "example_source_collection", [ - { - "source_title": "atb_nrel", - "source_authors": "NREL/ATB", - "source_url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", - "source_url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", - "source_url_date": "2025-05-22 15:08:02", - "source_url_date_archive": "2025-05-22 15:08:02", - }, - { - "source_title": "tech_data_generation", - "source_authors": "Danish Energy Agency", - "source_url": "https://ens.dk/media/3273/download", - "source_url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", - "source_url_date": "2025-05-06 16:02:04", - "source_url_date_archive": "2025-05-06 16:02:04", - }, + [ + { + "source_title": "atb_nrel", + "source_authors": "NREL/ATB", + "source_url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "source_url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "source_url_date": "2025-05-22 15:08:02", + "source_url_date_archive": "2025-05-22 15:08:02", + }, + { + "source_title": "tech_data_generation", + "source_authors": "Danish Energy Agency", + "source_url": "https://ens.dk/media/3273/download", + "source_url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", + "source_url_date": "2025-05-06 16:02:04", + "source_url_date_archive": "2025-05-06 16:02:04", + }, + ], ], - ], - indirect=["example_source_collection"], -) # type: ignore -def test_to_json(example_source_collection: technologydata.SourceCollection) -> None: - """Check if the example source collection is exported to JSON.""" - output_file = pathlib.Path(path_cwd, "sources.json") - schema_file = pathlib.Path(path_cwd, "sources.schema.json") - example_source_collection.to_json(pathlib.Path(output_file)) - assert output_file.is_file() - assert schema_file.is_file() - output_file.unlink(missing_ok=True) - schema_file.unlink(missing_ok=True) - - -@pytest.mark.parametrize( - "example_source_collection", - [ + indirect=["example_source_collection"], + ) # type: ignore + def test_to_json( + self, example_source_collection: technologydata.SourceCollection + ) -> None: + """Check if the example source collection is exported to JSON.""" + output_file = pathlib.Path(path_cwd, "sources.json") + schema_file = pathlib.Path(path_cwd, "sources.schema.json") + example_source_collection.to_json(pathlib.Path(output_file)) + assert output_file.is_file() + assert schema_file.is_file() + output_file.unlink(missing_ok=True) + schema_file.unlink(missing_ok=True) + + @pytest.mark.parametrize( + "example_source_collection", [ - { - "source_title": "atb_nrel", - "source_authors": "NREL/ATB", - "source_url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", - "source_url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", - "source_url_date": "2025-05-22 15:08:02", - "source_url_date_archive": "2025-05-22 15:08:02", - }, - { - "source_title": "tech_data_generation", - "source_authors": "Danish Energy Agency", - "source_url": "https://ens.dk/media/3273/download", - "source_url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", - "source_url_date": "2025-05-06 16:02:04", - "source_url_date_archive": "2025-05-06 16:02:04", - }, + [ + { + "source_title": "atb_nrel", + "source_authors": "NREL/ATB", + "source_url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "source_url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "source_url_date": "2025-05-22 15:08:02", + "source_url_date_archive": "2025-05-22 15:08:02", + }, + { + "source_title": "tech_data_generation", + "source_authors": "Danish Energy Agency", + "source_url": "https://ens.dk/media/3273/download", + "source_url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", + "source_url_date": "2025-05-06 16:02:04", + "source_url_date_archive": "2025-05-06 16:02:04", + }, + ], ], - ], - indirect=["example_source_collection"], -) # type: ignore -def test_to_dataframe( - example_source_collection: technologydata.SourceCollection, -) -> None: - """Check if the example source collection is exported to pandas dataframe.""" - assert isinstance(example_source_collection.to_dataframe(), pandas.DataFrame) - - -def test_from_json() -> None: - """Check if the example source collection is imported from JSON.""" - input_file = pathlib.Path( - path_cwd, "test", "test_data", "solar_photovoltaics_example_03", "sources.json" - ) - source_collection = technologydata.SourceCollection.from_json(file_path=input_file) - assert isinstance(source_collection, technologydata.SourceCollection) - assert len(source_collection) == 2 - - -@pytest.mark.parametrize( - "title_pattern, authors_pattern", - [["ATB", "nrel"], ["TECH_DATA", "danish"]], -) # type: ignore -def test_get(title_pattern: str, authors_pattern: str) -> None: - """Check if the example source collection is filtered as requested.""" - input_file = pathlib.Path( - path_cwd, "test", "test_data", "solar_photovoltaics_example_03", "sources.json" - ) - - source_collection = technologydata.SourceCollection.from_json(file_path=input_file) - result = source_collection.get(title=title_pattern, authors=authors_pattern) - assert len(result.sources) == 1 + indirect=["example_source_collection"], + ) # type: ignore + def test_to_dataframe( + self, + example_source_collection: technologydata.SourceCollection, + ) -> None: + """Check if the example source collection is exported to pandas dataframe.""" + assert isinstance(example_source_collection.to_dataframe(), pandas.DataFrame) + + def test_from_json(self) -> None: + """Check if the example source collection is imported from JSON.""" + input_file = pathlib.Path( + path_cwd, + "test", + "test_data", + "solar_photovoltaics_example_03", + "sources.json", + ) + source_collection = technologydata.SourceCollection.from_json( + file_path=input_file + ) + assert isinstance(source_collection, technologydata.SourceCollection) + assert len(source_collection) == 2 + + @pytest.mark.parametrize( + "title_pattern, authors_pattern", + [["ATB", "nrel"], ["TECH_DATA", "danish"]], + ) # type: ignore + def test_get(self, title_pattern: str, authors_pattern: str) -> None: + """Check if the example source collection is filtered as requested.""" + input_file = pathlib.Path( + path_cwd, + "test", + "test_data", + "solar_photovoltaics_example_03", + "sources.json", + ) + + source_collection = technologydata.SourceCollection.from_json( + file_path=input_file + ) + result = source_collection.get(title=title_pattern, authors=authors_pattern) + assert len(result.sources) == 1 diff --git a/test/test_technology_collection.py b/test/test_technology_collection.py index 3e1e7fb5..2c129f9e 100644 --- a/test/test_technology_collection.py +++ b/test/test_technology_collection.py @@ -14,93 +14,102 @@ path_cwd = pathlib.Path.cwd() -def test_to_csv() -> None: - """Check if the example technology collection is exported to CSV.""" - input_file = pathlib.Path( - path_cwd, - "test", - "test_data", - "solar_photovoltaics_example_03", - "technologies.json", - ) - technology_collection = technologydata.TechnologyCollection.from_json(input_file) - output_file = pathlib.Path(path_cwd, "technologies.csv") - technology_collection.to_csv(path_or_buf=output_file) - assert output_file.is_file() - output_file.unlink(missing_ok=True) +class TestTechnologyCollection: + """Test suite for the TechnologyCollection class in the technologydata module.""" + def test_to_csv(self) -> None: + """Check if the example technology collection is exported to CSV.""" + input_file = pathlib.Path( + path_cwd, + "test", + "test_data", + "solar_photovoltaics_example_03", + "technologies.json", + ) + technology_collection = technologydata.TechnologyCollection.from_json( + input_file + ) + output_file = pathlib.Path(path_cwd, "technologies.csv") + technology_collection.to_csv(path_or_buf=output_file) + assert output_file.is_file() + output_file.unlink(missing_ok=True) -def test_to_dataframe() -> None: - """Check if the example technology collection is exported to pandas dataframe.""" - input_file = pathlib.Path( - path_cwd, - "test", - "test_data", - "solar_photovoltaics_example_03", - "technologies.json", - ) - technology_collection = technologydata.TechnologyCollection.from_json(input_file) - assert isinstance(technology_collection.to_dataframe(), pandas.DataFrame) + def test_to_dataframe(self) -> None: + """Check if the example technology collection is exported to pandas dataframe.""" + input_file = pathlib.Path( + path_cwd, + "test", + "test_data", + "solar_photovoltaics_example_03", + "technologies.json", + ) + technology_collection = technologydata.TechnologyCollection.from_json( + input_file + ) + assert isinstance(technology_collection.to_dataframe(), pandas.DataFrame) + def test_to_json(self) -> None: + """Check if the example technology collection is exported to JSON.""" + input_file = pathlib.Path( + path_cwd, + "test", + "test_data", + "solar_photovoltaics_example_03", + "technologies.json", + ) + technology_collection = technologydata.TechnologyCollection.from_json( + input_file + ) + output_file = pathlib.Path(path_cwd, "technologies.json") + schema_file = pathlib.Path(path_cwd, "technologies.schema.json") + technology_collection.to_json(pathlib.Path(output_file)) + assert output_file.is_file() + assert schema_file.is_file() + output_file.unlink(missing_ok=True) + schema_file.unlink(missing_ok=True) -def test_to_json() -> None: - """Check if the example technology collection is exported to JSON.""" - input_file = pathlib.Path( - path_cwd, - "test", - "test_data", - "solar_photovoltaics_example_03", - "technologies.json", - ) - technology_collection = technologydata.TechnologyCollection.from_json(input_file) - output_file = pathlib.Path(path_cwd, "technologies.json") - schema_file = pathlib.Path(path_cwd, "technologies.schema.json") - technology_collection.to_json(pathlib.Path(output_file)) - assert output_file.is_file() - assert schema_file.is_file() - output_file.unlink(missing_ok=True) - schema_file.unlink(missing_ok=True) + def test_from_json(self) -> None: + """Check if the example technology collection is imported from JSON.""" + input_file = pathlib.Path( + path_cwd, + "test", + "test_data", + "solar_photovoltaics_example_03", + "technologies.json", + ) + technology_collection = technologydata.TechnologyCollection.from_json( + input_file + ) + assert isinstance(technology_collection, technologydata.TechnologyCollection) + assert len(technology_collection) == 2 - -def test_from_json() -> None: - """Check if the example technology collection is imported from JSON.""" - input_file = pathlib.Path( - path_cwd, - "test", - "test_data", - "solar_photovoltaics_example_03", - "technologies.json", - ) - technology_collection = technologydata.TechnologyCollection.from_json(input_file) - assert isinstance(technology_collection, technologydata.TechnologyCollection) - assert len(technology_collection) == 2 - - -@pytest.mark.parametrize( - "name, region, year, case, detailed_technology", - [ - ["Solar photovoltaics", "DEU", 2022, "example-scenario", "Si-HC"], - ["Solar photovoltaics", "DEU", 2022, "example-project", "Si-HC"], - ], -) # type: ignore -def test_get( - name: str, region: str, year: int, case: str, detailed_technology: str -) -> None: - """Check if the example technology collection is filtered as requested.""" - input_file = pathlib.Path( - path_cwd, - "test", - "test_data", - "solar_photovoltaics_example_03", - "technologies.json", - ) - technologies_collection = technologydata.TechnologyCollection.from_json(input_file) - result = technologies_collection.get( - name=name, - region=region, - year=year, - case=case, - detailed_technology=detailed_technology, - ) - assert isinstance(result, technologydata.TechnologyCollection) - assert len(result.technologies) == 1 + @pytest.mark.parametrize( + "name, region, year, case, detailed_technology", + [ + ["Solar photovoltaics", "DEU", 2022, "example-scenario", "Si-HC"], + ["Solar photovoltaics", "DEU", 2022, "example-project", "Si-HC"], + ], + ) # type: ignore + def test_get( + self, name: str, region: str, year: int, case: str, detailed_technology: str + ) -> None: + """Check if the example technology collection is filtered as requested.""" + input_file = pathlib.Path( + path_cwd, + "test", + "test_data", + "solar_photovoltaics_example_03", + "technologies.json", + ) + technologies_collection = technologydata.TechnologyCollection.from_json( + input_file + ) + result = technologies_collection.get( + name=name, + region=region, + year=year, + case=case, + detailed_technology=detailed_technology, + ) + assert isinstance(result, technologydata.TechnologyCollection) + assert len(result.technologies) == 1 From fe3cfcc5316718b7458e6caae9efd8efa19932a0 Mon Sep 17 00:00:00 2001 From: euronion Date: Mon, 18 Aug 2025 18:21:50 +0200 Subject: [PATCH 07/43] code: Switch to src layout --- pyproject.toml | 9 +++++++++ {technologydata => src/technologydata}/__init__.py | 0 .../technologydata}/constants/__init__.py | 0 .../technologydata}/constants/energy_density.py | 0 {technologydata => src/technologydata}/datapackage.py | 0 {technologydata => src/technologydata}/parameter.py | 0 {technologydata => src/technologydata}/source.py | 0 .../technologydata}/source_collection.py | 0 {technologydata => src/technologydata}/technology.py | 0 .../technologydata}/technology_collection.py | 0 {technologydata => src/technologydata}/utils/__init__.py | 0 .../technologydata}/utils/carriers.txt | 0 {technologydata => src/technologydata}/utils/commons.py | 0 .../technologydata}/utils/heating_values.txt | 0 {technologydata => src/technologydata}/utils/units.py | 0 15 files changed, 9 insertions(+) rename {technologydata => src/technologydata}/__init__.py (100%) rename {technologydata => src/technologydata}/constants/__init__.py (100%) rename {technologydata => src/technologydata}/constants/energy_density.py (100%) rename {technologydata => src/technologydata}/datapackage.py (100%) rename {technologydata => src/technologydata}/parameter.py (100%) rename {technologydata => src/technologydata}/source.py (100%) rename {technologydata => src/technologydata}/source_collection.py (100%) rename {technologydata => src/technologydata}/technology.py (100%) rename {technologydata => src/technologydata}/technology_collection.py (100%) rename {technologydata => src/technologydata}/utils/__init__.py (100%) rename {technologydata => src/technologydata}/utils/carriers.txt (100%) rename {technologydata => src/technologydata}/utils/commons.py (100%) rename {technologydata => src/technologydata}/utils/heating_values.txt (100%) rename {technologydata => src/technologydata}/utils/units.py (100%) diff --git a/pyproject.toml b/pyproject.toml index 18199008..d257613e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -62,6 +62,9 @@ docs = [ ] [tool.pytest.ini_options] +pythonpath = [ + "src", +] testpaths = "test" addopts = "--cov=technologydata --cov-report=term" filterwarnings = [ @@ -79,6 +82,12 @@ version_scheme = "no-guess-dev" [tool.setuptools.packages.find] include = ["technologydata"] +# code coverage settings +[tool.coverage.run] +source = [ + "src/technologydata", +] + # Static type checker settings [tool.mypy] diff --git a/technologydata/__init__.py b/src/technologydata/__init__.py similarity index 100% rename from technologydata/__init__.py rename to src/technologydata/__init__.py diff --git a/technologydata/constants/__init__.py b/src/technologydata/constants/__init__.py similarity index 100% rename from technologydata/constants/__init__.py rename to src/technologydata/constants/__init__.py diff --git a/technologydata/constants/energy_density.py b/src/technologydata/constants/energy_density.py similarity index 100% rename from technologydata/constants/energy_density.py rename to src/technologydata/constants/energy_density.py diff --git a/technologydata/datapackage.py b/src/technologydata/datapackage.py similarity index 100% rename from technologydata/datapackage.py rename to src/technologydata/datapackage.py diff --git a/technologydata/parameter.py b/src/technologydata/parameter.py similarity index 100% rename from technologydata/parameter.py rename to src/technologydata/parameter.py diff --git a/technologydata/source.py b/src/technologydata/source.py similarity index 100% rename from technologydata/source.py rename to src/technologydata/source.py diff --git a/technologydata/source_collection.py b/src/technologydata/source_collection.py similarity index 100% rename from technologydata/source_collection.py rename to src/technologydata/source_collection.py diff --git a/technologydata/technology.py b/src/technologydata/technology.py similarity index 100% rename from technologydata/technology.py rename to src/technologydata/technology.py diff --git a/technologydata/technology_collection.py b/src/technologydata/technology_collection.py similarity index 100% rename from technologydata/technology_collection.py rename to src/technologydata/technology_collection.py diff --git a/technologydata/utils/__init__.py b/src/technologydata/utils/__init__.py similarity index 100% rename from technologydata/utils/__init__.py rename to src/technologydata/utils/__init__.py diff --git a/technologydata/utils/carriers.txt b/src/technologydata/utils/carriers.txt similarity index 100% rename from technologydata/utils/carriers.txt rename to src/technologydata/utils/carriers.txt diff --git a/technologydata/utils/commons.py b/src/technologydata/utils/commons.py similarity index 100% rename from technologydata/utils/commons.py rename to src/technologydata/utils/commons.py diff --git a/technologydata/utils/heating_values.txt b/src/technologydata/utils/heating_values.txt similarity index 100% rename from technologydata/utils/heating_values.txt rename to src/technologydata/utils/heating_values.txt diff --git a/technologydata/utils/units.py b/src/technologydata/utils/units.py similarity index 100% rename from technologydata/utils/units.py rename to src/technologydata/utils/units.py From 0f0b43af9d123c99e8248b884d73db81539068dd Mon Sep 17 00:00:00 2001 From: Fabrizio Finozzi Date: Tue, 19 Aug 2025 11:06:36 +0200 Subject: [PATCH 08/43] code: update unit test in test_source.py --- test/test_source.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_source.py b/test/test_source.py index c889b627..038dfe8f 100644 --- a/test/test_source.py +++ b/test/test_source.py @@ -153,7 +153,7 @@ def test_retrieve_from_wayback(self, example_source: technologydata.Source) -> N def test_store_in_wayback(self) -> None: """Check if a given url is correctly stored as a snapshot on Internet Archive Wayback Machine.""" - url_to_archive = "https://www.openenergytransition.org/outputs.html" + url_to_archive = "https://openenergytransition.org/outputs.html" archived_info = technologydata.Source.store_in_wayback(url_to_archive) # Check if archived_info is None From 69c8f96b23fe971205906a3daa017c70c641dc6b Mon Sep 17 00:00:00 2001 From: Johannes HAMPP <42553970+euronion@users.noreply.github.com> Date: Thu, 21 Aug 2025 10:46:31 +0200 Subject: [PATCH 09/43] Make development dependencies optional (#34) * code: Separate development dependencies from necessary dependencies * doc: Add note on installing dev depenencies * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * code: Fix packaging and pytest issues * doc: Update installation details * doc: Add copyright statement --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- docs/contributing.md | 35 + pyproject.toml | 27 +- uv.lock | 1619 +++++++++++++++++++++--------------------- 3 files changed, 868 insertions(+), 813 deletions(-) create mode 100644 docs/contributing.md diff --git a/docs/contributing.md b/docs/contributing.md new file mode 100644 index 00000000..b6c74006 --- /dev/null +++ b/docs/contributing.md @@ -0,0 +1,35 @@ + +# Contributing + +## Development dependencies + +To contribute to this project, you will need to install the development dependencies. +These dependencies include everything needed for development, testing and building the documentation of the project. + +To install the development dependencies, run the following command inside the project directory: + +```bash +uv sync +``` + +The development dependencies include `ipykernel` to support Jupyter notebooks and integration into e.g. VS Code. + +To view the full list of development dependencies, you can check the `pyproject.toml` file under the `[dependency-groups]` section as `dev` and `docs`, which are both included in the `default-groups`. + +## Testing + +To run all tests in parallel, you can use the following command: + +```bash +pytest -n auto +``` + +Some tests may not be thread-safe and therefore fail unexpectedly when run in parallel. +If you encounter such issues, you can run the tests sequentially by omitting the `-n auto` option: + +```bash +pytest +``` diff --git a/pyproject.toml b/pyproject.toml index d257613e..70a7b3a2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -29,18 +29,12 @@ requires-python = ">=3.12" dependencies = [ "frozendict>=2.4.6", "hdx-python-country>=3.9.6", - "ipykernel>=6.29.5", # this one can go into optional as "dev" "mypy>=1.15.0", "pandas>=2.2.3", "pint>=0.24.4", - "pre-commit>=4.2.0", # this one can go into optional as "dev" "pydantic>=2.11.7", - "pydeflate>=2.1.3", # this one can go into optional as "dev" - "pytest>=8.3.5", # this one can go into optional as "dev" - "pytest-cov>=6.2.1", # this one can go into optional as "dev" - "pytest-xdist>=3.8.0", # this one can go into optional as "dev" + "pydeflate>=2.1.3", "requests>=2.32.3", - "reuse>=5.0.2", "savepagenow>=1.3.0", ] @@ -50,7 +44,19 @@ Source = "https://github.com/PyPSA/technology-data" BugTracker = "https://github.com/PyPSA/technology-data/issues" Changelog = "https://github.com/PyPSA/technology-data/releases" -[project.optional-dependencies] +# https://docs.astral.sh/uv/concepts/projects/dependencies/#dependency-groups +# editable install of package and non-packaged dependencies +[dependency-groups] +dev = [ + "ipykernel>=6.29.5", + "pre-commit>=4.2.0", + "pytest>=8.4.1", + "pytest-cov>=6.2.1", + "pytest-xdist>=3.8.0", + "reuse>=5.0.2", + "technologydata", +] + docs = [ "mkdocs-autolinks-plugin>=0.7.1", "mkdocs-git-revision-date-localized-plugin>=1.4.7", @@ -75,11 +81,16 @@ filterwarnings = [ # Setuptools_scm settings [tool.uv] package = true +default-groups = ["dev", "docs"] + +[tool.uv.sources] +technologydata = { workspace = true } [tool.setuptools_scm] version_scheme = "no-guess-dev" [tool.setuptools.packages.find] +where = ["src"] include = ["technologydata"] # code coverage settings diff --git a/uv.lock b/uv.lock index edc2b8ae..223004a8 100644 --- a/uv.lock +++ b/uv.lock @@ -1,64 +1,64 @@ version = 1 -revision = 2 +revision = 1 requires-python = ">=3.12" [[package]] name = "annotated-types" version = "0.7.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081, upload_time = "2024-05-20T21:33:25.928Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081 } wheels = [ - { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload_time = "2024-05-20T21:33:24.1Z" }, + { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643 }, ] [[package]] name = "appnope" version = "0.1.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/35/5d/752690df9ef5b76e169e68d6a129fa6d08a7100ca7f754c89495db3c6019/appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee", size = 4170, upload_time = "2024-02-06T09:43:11.258Z" } +sdist = { url = "https://files.pythonhosted.org/packages/35/5d/752690df9ef5b76e169e68d6a129fa6d08a7100ca7f754c89495db3c6019/appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee", size = 4170 } wheels = [ - { url = "https://files.pythonhosted.org/packages/81/29/5ecc3a15d5a33e31b26c11426c45c501e439cb865d0bff96315d86443b78/appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c", size = 4321, upload_time = "2024-02-06T09:43:09.663Z" }, + { url = "https://files.pythonhosted.org/packages/81/29/5ecc3a15d5a33e31b26c11426c45c501e439cb865d0bff96315d86443b78/appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c", size = 4321 }, ] [[package]] name = "asttokens" version = "3.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/4a/e7/82da0a03e7ba5141f05cce0d302e6eed121ae055e0456ca228bf693984bc/asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7", size = 61978, upload_time = "2024-11-30T04:30:14.439Z" } +sdist = { url = "https://files.pythonhosted.org/packages/4a/e7/82da0a03e7ba5141f05cce0d302e6eed121ae055e0456ca228bf693984bc/asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7", size = 61978 } wheels = [ - { url = "https://files.pythonhosted.org/packages/25/8a/c46dcc25341b5bce5472c718902eb3d38600a903b14fa6aeecef3f21a46f/asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2", size = 26918, upload_time = "2024-11-30T04:30:10.946Z" }, + { url = "https://files.pythonhosted.org/packages/25/8a/c46dcc25341b5bce5472c718902eb3d38600a903b14fa6aeecef3f21a46f/asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2", size = 26918 }, ] [[package]] name = "attrs" version = "25.3.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5a/b0/1367933a8532ee6ff8d63537de4f1177af4bff9f3e829baf7331f595bb24/attrs-25.3.0.tar.gz", hash = "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b", size = 812032, upload_time = "2025-03-13T11:10:22.779Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5a/b0/1367933a8532ee6ff8d63537de4f1177af4bff9f3e829baf7331f595bb24/attrs-25.3.0.tar.gz", hash = "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b", size = 812032 } wheels = [ - { url = "https://files.pythonhosted.org/packages/77/06/bb80f5f86020c4551da315d78b3ab75e8228f89f0162f2c3a819e407941a/attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3", size = 63815, upload_time = "2025-03-13T11:10:21.14Z" }, + { url = "https://files.pythonhosted.org/packages/77/06/bb80f5f86020c4551da315d78b3ab75e8228f89f0162f2c3a819e407941a/attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3", size = 63815 }, ] [[package]] name = "babel" version = "2.17.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7d/6b/d52e42361e1aa00709585ecc30b3f9684b3ab62530771402248b1b1d6240/babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d", size = 9951852, upload_time = "2025-02-01T15:17:41.026Z" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/6b/d52e42361e1aa00709585ecc30b3f9684b3ab62530771402248b1b1d6240/babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d", size = 9951852 } wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2", size = 10182537, upload_time = "2025-02-01T15:17:37.39Z" }, + { url = "https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2", size = 10182537 }, ] [[package]] name = "backrefs" version = "5.9" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/eb/a7/312f673df6a79003279e1f55619abbe7daebbb87c17c976ddc0345c04c7b/backrefs-5.9.tar.gz", hash = "sha256:808548cb708d66b82ee231f962cb36faaf4f2baab032f2fbb783e9c2fdddaa59", size = 5765857, upload_time = "2025-06-22T19:34:13.97Z" } +sdist = { url = "https://files.pythonhosted.org/packages/eb/a7/312f673df6a79003279e1f55619abbe7daebbb87c17c976ddc0345c04c7b/backrefs-5.9.tar.gz", hash = "sha256:808548cb708d66b82ee231f962cb36faaf4f2baab032f2fbb783e9c2fdddaa59", size = 5765857 } wheels = [ - { url = "https://files.pythonhosted.org/packages/19/4d/798dc1f30468134906575156c089c492cf79b5a5fd373f07fe26c4d046bf/backrefs-5.9-py310-none-any.whl", hash = "sha256:db8e8ba0e9de81fcd635f440deab5ae5f2591b54ac1ebe0550a2ca063488cd9f", size = 380267, upload_time = "2025-06-22T19:34:05.252Z" }, - { url = "https://files.pythonhosted.org/packages/55/07/f0b3375bf0d06014e9787797e6b7cc02b38ac9ff9726ccfe834d94e9991e/backrefs-5.9-py311-none-any.whl", hash = "sha256:6907635edebbe9b2dc3de3a2befff44d74f30a4562adbb8b36f21252ea19c5cf", size = 392072, upload_time = "2025-06-22T19:34:06.743Z" }, - { url = "https://files.pythonhosted.org/packages/9d/12/4f345407259dd60a0997107758ba3f221cf89a9b5a0f8ed5b961aef97253/backrefs-5.9-py312-none-any.whl", hash = "sha256:7fdf9771f63e6028d7fee7e0c497c81abda597ea45d6b8f89e8ad76994f5befa", size = 397947, upload_time = "2025-06-22T19:34:08.172Z" }, - { url = "https://files.pythonhosted.org/packages/10/bf/fa31834dc27a7f05e5290eae47c82690edc3a7b37d58f7fb35a1bdbf355b/backrefs-5.9-py313-none-any.whl", hash = "sha256:cc37b19fa219e93ff825ed1fed8879e47b4d89aa7a1884860e2db64ccd7c676b", size = 399843, upload_time = "2025-06-22T19:34:09.68Z" }, - { url = "https://files.pythonhosted.org/packages/fc/24/b29af34b2c9c41645a9f4ff117bae860291780d73880f449e0b5d948c070/backrefs-5.9-py314-none-any.whl", hash = "sha256:df5e169836cc8acb5e440ebae9aad4bf9d15e226d3bad049cf3f6a5c20cc8dc9", size = 411762, upload_time = "2025-06-22T19:34:11.037Z" }, - { url = "https://files.pythonhosted.org/packages/41/ff/392bff89415399a979be4a65357a41d92729ae8580a66073d8ec8d810f98/backrefs-5.9-py39-none-any.whl", hash = "sha256:f48ee18f6252b8f5777a22a00a09a85de0ca931658f1dd96d4406a34f3748c60", size = 380265, upload_time = "2025-06-22T19:34:12.405Z" }, + { url = "https://files.pythonhosted.org/packages/19/4d/798dc1f30468134906575156c089c492cf79b5a5fd373f07fe26c4d046bf/backrefs-5.9-py310-none-any.whl", hash = "sha256:db8e8ba0e9de81fcd635f440deab5ae5f2591b54ac1ebe0550a2ca063488cd9f", size = 380267 }, + { url = "https://files.pythonhosted.org/packages/55/07/f0b3375bf0d06014e9787797e6b7cc02b38ac9ff9726ccfe834d94e9991e/backrefs-5.9-py311-none-any.whl", hash = "sha256:6907635edebbe9b2dc3de3a2befff44d74f30a4562adbb8b36f21252ea19c5cf", size = 392072 }, + { url = "https://files.pythonhosted.org/packages/9d/12/4f345407259dd60a0997107758ba3f221cf89a9b5a0f8ed5b961aef97253/backrefs-5.9-py312-none-any.whl", hash = "sha256:7fdf9771f63e6028d7fee7e0c497c81abda597ea45d6b8f89e8ad76994f5befa", size = 397947 }, + { url = "https://files.pythonhosted.org/packages/10/bf/fa31834dc27a7f05e5290eae47c82690edc3a7b37d58f7fb35a1bdbf355b/backrefs-5.9-py313-none-any.whl", hash = "sha256:cc37b19fa219e93ff825ed1fed8879e47b4d89aa7a1884860e2db64ccd7c676b", size = 399843 }, + { url = "https://files.pythonhosted.org/packages/fc/24/b29af34b2c9c41645a9f4ff117bae860291780d73880f449e0b5d948c070/backrefs-5.9-py314-none-any.whl", hash = "sha256:df5e169836cc8acb5e440ebae9aad4bf9d15e226d3bad049cf3f6a5c20cc8dc9", size = 411762 }, + { url = "https://files.pythonhosted.org/packages/41/ff/392bff89415399a979be4a65357a41d92729ae8580a66073d8ec8d810f98/backrefs-5.9-py39-none-any.whl", hash = "sha256:f48ee18f6252b8f5777a22a00a09a85de0ca931658f1dd96d4406a34f3748c60", size = 380265 }, ] [[package]] @@ -69,9 +69,9 @@ dependencies = [ { name = "soupsieve" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d8/e4/0c4c39e18fd76d6a628d4dd8da40543d136ce2d1752bd6eeeab0791f4d6b/beautifulsoup4-4.13.4.tar.gz", hash = "sha256:dbb3c4e1ceae6aefebdaf2423247260cd062430a410e38c66f2baa50a8437195", size = 621067, upload_time = "2025-04-15T17:05:13.836Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/e4/0c4c39e18fd76d6a628d4dd8da40543d136ce2d1752bd6eeeab0791f4d6b/beautifulsoup4-4.13.4.tar.gz", hash = "sha256:dbb3c4e1ceae6aefebdaf2423247260cd062430a410e38c66f2baa50a8437195", size = 621067 } wheels = [ - { url = "https://files.pythonhosted.org/packages/50/cd/30110dc0ffcf3b131156077b90e9f60ed75711223f306da4db08eff8403b/beautifulsoup4-4.13.4-py3-none-any.whl", hash = "sha256:9bbbb14bfde9d79f38b8cd5f8c7c85f4b8f2523190ebed90e950a8dea4cb1c4b", size = 187285, upload_time = "2025-04-15T17:05:12.221Z" }, + { url = "https://files.pythonhosted.org/packages/50/cd/30110dc0ffcf3b131156077b90e9f60ed75711223f306da4db08eff8403b/beautifulsoup4-4.13.4-py3-none-any.whl", hash = "sha256:9bbbb14bfde9d79f38b8cd5f8c7c85f4b8f2523190ebed90e950a8dea4cb1c4b", size = 187285 }, ] [[package]] @@ -81,27 +81,27 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "chardet" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a7/fe/7ebfec74d49f97fc55cd38240c7a7d08134002b1e14be8c3897c0dd5e49b/binaryornot-0.4.4.tar.gz", hash = "sha256:359501dfc9d40632edc9fac890e19542db1a287bbcfa58175b66658392018061", size = 371054, upload_time = "2017-08-03T15:55:25.08Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a7/fe/7ebfec74d49f97fc55cd38240c7a7d08134002b1e14be8c3897c0dd5e49b/binaryornot-0.4.4.tar.gz", hash = "sha256:359501dfc9d40632edc9fac890e19542db1a287bbcfa58175b66658392018061", size = 371054 } wheels = [ - { url = "https://files.pythonhosted.org/packages/24/7e/f7b6f453e6481d1e233540262ccbfcf89adcd43606f44a028d7f5fae5eb2/binaryornot-0.4.4-py2.py3-none-any.whl", hash = "sha256:b8b71173c917bddcd2c16070412e369c3ed7f0528926f70cac18a6c97fd563e4", size = 9006, upload_time = "2017-08-03T15:55:31.23Z" }, + { url = "https://files.pythonhosted.org/packages/24/7e/f7b6f453e6481d1e233540262ccbfcf89adcd43606f44a028d7f5fae5eb2/binaryornot-0.4.4-py2.py3-none-any.whl", hash = "sha256:b8b71173c917bddcd2c16070412e369c3ed7f0528926f70cac18a6c97fd563e4", size = 9006 }, ] [[package]] name = "boolean-py" version = "5.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c4/cf/85379f13b76f3a69bca86b60237978af17d6aa0bc5998978c3b8cf05abb2/boolean_py-5.0.tar.gz", hash = "sha256:60cbc4bad079753721d32649545505362c754e121570ada4658b852a3a318d95", size = 37047, upload_time = "2025-04-03T10:39:49.734Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c4/cf/85379f13b76f3a69bca86b60237978af17d6aa0bc5998978c3b8cf05abb2/boolean_py-5.0.tar.gz", hash = "sha256:60cbc4bad079753721d32649545505362c754e121570ada4658b852a3a318d95", size = 37047 } wheels = [ - { url = "https://files.pythonhosted.org/packages/e5/ca/78d423b324b8d77900030fa59c4aa9054261ef0925631cd2501dd015b7b7/boolean_py-5.0-py3-none-any.whl", hash = "sha256:ef28a70bd43115208441b53a045d1549e2f0ec6e3d08a9d142cbc41c1938e8d9", size = 26577, upload_time = "2025-04-03T10:39:48.449Z" }, + { url = "https://files.pythonhosted.org/packages/e5/ca/78d423b324b8d77900030fa59c4aa9054261ef0925631cd2501dd015b7b7/boolean_py-5.0-py3-none-any.whl", hash = "sha256:ef28a70bd43115208441b53a045d1549e2f0ec6e3d08a9d142cbc41c1938e8d9", size = 26577 }, ] [[package]] name = "certifi" version = "2025.7.9" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/de/8a/c729b6b60c66a38f590c4e774decc4b2ec7b0576be8f1aa984a53ffa812a/certifi-2025.7.9.tar.gz", hash = "sha256:c1d2ec05395148ee10cf672ffc28cd37ea0ab0d99f9cc74c43e588cbd111b079", size = 160386, upload_time = "2025-07-09T02:13:58.874Z" } +sdist = { url = "https://files.pythonhosted.org/packages/de/8a/c729b6b60c66a38f590c4e774decc4b2ec7b0576be8f1aa984a53ffa812a/certifi-2025.7.9.tar.gz", hash = "sha256:c1d2ec05395148ee10cf672ffc28cd37ea0ab0d99f9cc74c43e588cbd111b079", size = 160386 } wheels = [ - { url = "https://files.pythonhosted.org/packages/66/f3/80a3f974c8b535d394ff960a11ac20368e06b736da395b551a49ce950cce/certifi-2025.7.9-py3-none-any.whl", hash = "sha256:d842783a14f8fdd646895ac26f719a061408834473cfc10203f6a575beb15d39", size = 159230, upload_time = "2025-07-09T02:13:57.007Z" }, + { url = "https://files.pythonhosted.org/packages/66/f3/80a3f974c8b535d394ff960a11ac20368e06b736da395b551a49ce950cce/certifi-2025.7.9-py3-none-any.whl", hash = "sha256:d842783a14f8fdd646895ac26f719a061408834473cfc10203f6a575beb15d39", size = 159230 }, ] [[package]] @@ -111,83 +111,83 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pycparser" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", size = 516621, upload_time = "2024-09-04T20:45:21.852Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5a/84/e94227139ee5fb4d600a7a4927f322e1d4aea6fdc50bd3fca8493caba23f/cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4", size = 183178, upload_time = "2024-09-04T20:44:12.232Z" }, - { url = "https://files.pythonhosted.org/packages/da/ee/fb72c2b48656111c4ef27f0f91da355e130a923473bf5ee75c5643d00cca/cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c", size = 178840, upload_time = "2024-09-04T20:44:13.739Z" }, - { url = "https://files.pythonhosted.org/packages/cc/b6/db007700f67d151abadf508cbfd6a1884f57eab90b1bb985c4c8c02b0f28/cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36", size = 454803, upload_time = "2024-09-04T20:44:15.231Z" }, - { url = "https://files.pythonhosted.org/packages/1a/df/f8d151540d8c200eb1c6fba8cd0dfd40904f1b0682ea705c36e6c2e97ab3/cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5", size = 478850, upload_time = "2024-09-04T20:44:17.188Z" }, - { url = "https://files.pythonhosted.org/packages/28/c0/b31116332a547fd2677ae5b78a2ef662dfc8023d67f41b2a83f7c2aa78b1/cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff", size = 485729, upload_time = "2024-09-04T20:44:18.688Z" }, - { url = "https://files.pythonhosted.org/packages/91/2b/9a1ddfa5c7f13cab007a2c9cc295b70fbbda7cb10a286aa6810338e60ea1/cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99", size = 471256, upload_time = "2024-09-04T20:44:20.248Z" }, - { url = "https://files.pythonhosted.org/packages/b2/d5/da47df7004cb17e4955df6a43d14b3b4ae77737dff8bf7f8f333196717bf/cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93", size = 479424, upload_time = "2024-09-04T20:44:21.673Z" }, - { url = "https://files.pythonhosted.org/packages/0b/ac/2a28bcf513e93a219c8a4e8e125534f4f6db03e3179ba1c45e949b76212c/cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3", size = 484568, upload_time = "2024-09-04T20:44:23.245Z" }, - { url = "https://files.pythonhosted.org/packages/d4/38/ca8a4f639065f14ae0f1d9751e70447a261f1a30fa7547a828ae08142465/cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8", size = 488736, upload_time = "2024-09-04T20:44:24.757Z" }, - { url = "https://files.pythonhosted.org/packages/86/c5/28b2d6f799ec0bdecf44dced2ec5ed43e0eb63097b0f58c293583b406582/cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65", size = 172448, upload_time = "2024-09-04T20:44:26.208Z" }, - { url = "https://files.pythonhosted.org/packages/50/b9/db34c4755a7bd1cb2d1603ac3863f22bcecbd1ba29e5ee841a4bc510b294/cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903", size = 181976, upload_time = "2024-09-04T20:44:27.578Z" }, - { url = "https://files.pythonhosted.org/packages/8d/f8/dd6c246b148639254dad4d6803eb6a54e8c85c6e11ec9df2cffa87571dbe/cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", size = 182989, upload_time = "2024-09-04T20:44:28.956Z" }, - { url = "https://files.pythonhosted.org/packages/8b/f1/672d303ddf17c24fc83afd712316fda78dc6fce1cd53011b839483e1ecc8/cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", size = 178802, upload_time = "2024-09-04T20:44:30.289Z" }, - { url = "https://files.pythonhosted.org/packages/0e/2d/eab2e858a91fdff70533cab61dcff4a1f55ec60425832ddfdc9cd36bc8af/cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", size = 454792, upload_time = "2024-09-04T20:44:32.01Z" }, - { url = "https://files.pythonhosted.org/packages/75/b2/fbaec7c4455c604e29388d55599b99ebcc250a60050610fadde58932b7ee/cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", size = 478893, upload_time = "2024-09-04T20:44:33.606Z" }, - { url = "https://files.pythonhosted.org/packages/4f/b7/6e4a2162178bf1935c336d4da8a9352cccab4d3a5d7914065490f08c0690/cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", size = 485810, upload_time = "2024-09-04T20:44:35.191Z" }, - { url = "https://files.pythonhosted.org/packages/c7/8a/1d0e4a9c26e54746dc08c2c6c037889124d4f59dffd853a659fa545f1b40/cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4", size = 471200, upload_time = "2024-09-04T20:44:36.743Z" }, - { url = "https://files.pythonhosted.org/packages/26/9f/1aab65a6c0db35f43c4d1b4f580e8df53914310afc10ae0397d29d697af4/cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", size = 479447, upload_time = "2024-09-04T20:44:38.492Z" }, - { url = "https://files.pythonhosted.org/packages/5f/e4/fb8b3dd8dc0e98edf1135ff067ae070bb32ef9d509d6cb0f538cd6f7483f/cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", size = 484358, upload_time = "2024-09-04T20:44:40.046Z" }, - { url = "https://files.pythonhosted.org/packages/f1/47/d7145bf2dc04684935d57d67dff9d6d795b2ba2796806bb109864be3a151/cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", size = 488469, upload_time = "2024-09-04T20:44:41.616Z" }, - { url = "https://files.pythonhosted.org/packages/bf/ee/f94057fa6426481d663b88637a9a10e859e492c73d0384514a17d78ee205/cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", size = 172475, upload_time = "2024-09-04T20:44:43.733Z" }, - { url = "https://files.pythonhosted.org/packages/7c/fc/6a8cb64e5f0324877d503c854da15d76c1e50eb722e320b15345c4d0c6de/cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", size = 182009, upload_time = "2024-09-04T20:44:45.309Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", size = 516621 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5a/84/e94227139ee5fb4d600a7a4927f322e1d4aea6fdc50bd3fca8493caba23f/cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4", size = 183178 }, + { url = "https://files.pythonhosted.org/packages/da/ee/fb72c2b48656111c4ef27f0f91da355e130a923473bf5ee75c5643d00cca/cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c", size = 178840 }, + { url = "https://files.pythonhosted.org/packages/cc/b6/db007700f67d151abadf508cbfd6a1884f57eab90b1bb985c4c8c02b0f28/cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36", size = 454803 }, + { url = "https://files.pythonhosted.org/packages/1a/df/f8d151540d8c200eb1c6fba8cd0dfd40904f1b0682ea705c36e6c2e97ab3/cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5", size = 478850 }, + { url = "https://files.pythonhosted.org/packages/28/c0/b31116332a547fd2677ae5b78a2ef662dfc8023d67f41b2a83f7c2aa78b1/cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff", size = 485729 }, + { url = "https://files.pythonhosted.org/packages/91/2b/9a1ddfa5c7f13cab007a2c9cc295b70fbbda7cb10a286aa6810338e60ea1/cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99", size = 471256 }, + { url = "https://files.pythonhosted.org/packages/b2/d5/da47df7004cb17e4955df6a43d14b3b4ae77737dff8bf7f8f333196717bf/cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93", size = 479424 }, + { url = "https://files.pythonhosted.org/packages/0b/ac/2a28bcf513e93a219c8a4e8e125534f4f6db03e3179ba1c45e949b76212c/cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3", size = 484568 }, + { url = "https://files.pythonhosted.org/packages/d4/38/ca8a4f639065f14ae0f1d9751e70447a261f1a30fa7547a828ae08142465/cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8", size = 488736 }, + { url = "https://files.pythonhosted.org/packages/86/c5/28b2d6f799ec0bdecf44dced2ec5ed43e0eb63097b0f58c293583b406582/cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65", size = 172448 }, + { url = "https://files.pythonhosted.org/packages/50/b9/db34c4755a7bd1cb2d1603ac3863f22bcecbd1ba29e5ee841a4bc510b294/cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903", size = 181976 }, + { url = "https://files.pythonhosted.org/packages/8d/f8/dd6c246b148639254dad4d6803eb6a54e8c85c6e11ec9df2cffa87571dbe/cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", size = 182989 }, + { url = "https://files.pythonhosted.org/packages/8b/f1/672d303ddf17c24fc83afd712316fda78dc6fce1cd53011b839483e1ecc8/cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", size = 178802 }, + { url = "https://files.pythonhosted.org/packages/0e/2d/eab2e858a91fdff70533cab61dcff4a1f55ec60425832ddfdc9cd36bc8af/cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", size = 454792 }, + { url = "https://files.pythonhosted.org/packages/75/b2/fbaec7c4455c604e29388d55599b99ebcc250a60050610fadde58932b7ee/cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", size = 478893 }, + { url = "https://files.pythonhosted.org/packages/4f/b7/6e4a2162178bf1935c336d4da8a9352cccab4d3a5d7914065490f08c0690/cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", size = 485810 }, + { url = "https://files.pythonhosted.org/packages/c7/8a/1d0e4a9c26e54746dc08c2c6c037889124d4f59dffd853a659fa545f1b40/cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4", size = 471200 }, + { url = "https://files.pythonhosted.org/packages/26/9f/1aab65a6c0db35f43c4d1b4f580e8df53914310afc10ae0397d29d697af4/cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", size = 479447 }, + { url = "https://files.pythonhosted.org/packages/5f/e4/fb8b3dd8dc0e98edf1135ff067ae070bb32ef9d509d6cb0f538cd6f7483f/cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", size = 484358 }, + { url = "https://files.pythonhosted.org/packages/f1/47/d7145bf2dc04684935d57d67dff9d6d795b2ba2796806bb109864be3a151/cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", size = 488469 }, + { url = "https://files.pythonhosted.org/packages/bf/ee/f94057fa6426481d663b88637a9a10e859e492c73d0384514a17d78ee205/cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", size = 172475 }, + { url = "https://files.pythonhosted.org/packages/7c/fc/6a8cb64e5f0324877d503c854da15d76c1e50eb722e320b15345c4d0c6de/cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", size = 182009 }, ] [[package]] name = "cfgv" version = "3.4.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/11/74/539e56497d9bd1d484fd863dd69cbbfa653cd2aa27abfe35653494d85e94/cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560", size = 7114, upload_time = "2023-08-12T20:38:17.776Z" } +sdist = { url = "https://files.pythonhosted.org/packages/11/74/539e56497d9bd1d484fd863dd69cbbfa653cd2aa27abfe35653494d85e94/cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560", size = 7114 } wheels = [ - { url = "https://files.pythonhosted.org/packages/c5/55/51844dd50c4fc7a33b653bfaba4c2456f06955289ca770a5dbd5fd267374/cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9", size = 7249, upload_time = "2023-08-12T20:38:16.269Z" }, + { url = "https://files.pythonhosted.org/packages/c5/55/51844dd50c4fc7a33b653bfaba4c2456f06955289ca770a5dbd5fd267374/cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9", size = 7249 }, ] [[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" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/0d/f7b6ab21ec75897ed80c17d79b15951a719226b9fababf1e40ea74d69079/chardet-5.2.0.tar.gz", hash = "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7", size = 2069618 } 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" }, + { url = "https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl", hash = "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970", size = 199385 }, ] [[package]] name = "charset-normalizer" version = "3.4.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e4/33/89c2ced2b67d1c2a61c19c6751aa8902d46ce3dacb23600a283619f5a12d/charset_normalizer-3.4.2.tar.gz", hash = "sha256:5baececa9ecba31eff645232d59845c07aa030f0c81ee70184a90d35099a0e63", size = 126367, upload_time = "2025-05-02T08:34:42.01Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d7/a4/37f4d6035c89cac7930395a35cc0f1b872e652eaafb76a6075943754f095/charset_normalizer-3.4.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0c29de6a1a95f24b9a1aa7aefd27d2487263f00dfd55a77719b530788f75cff7", size = 199936, upload_time = "2025-05-02T08:32:33.712Z" }, - { url = "https://files.pythonhosted.org/packages/ee/8a/1a5e33b73e0d9287274f899d967907cd0bf9c343e651755d9307e0dbf2b3/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cddf7bd982eaa998934a91f69d182aec997c6c468898efe6679af88283b498d3", size = 143790, upload_time = "2025-05-02T08:32:35.768Z" }, - { url = "https://files.pythonhosted.org/packages/66/52/59521f1d8e6ab1482164fa21409c5ef44da3e9f653c13ba71becdd98dec3/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcbe676a55d7445b22c10967bceaaf0ee69407fbe0ece4d032b6eb8d4565982a", size = 153924, upload_time = "2025-05-02T08:32:37.284Z" }, - { url = "https://files.pythonhosted.org/packages/86/2d/fb55fdf41964ec782febbf33cb64be480a6b8f16ded2dbe8db27a405c09f/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d41c4d287cfc69060fa91cae9683eacffad989f1a10811995fa309df656ec214", size = 146626, upload_time = "2025-05-02T08:32:38.803Z" }, - { url = "https://files.pythonhosted.org/packages/8c/73/6ede2ec59bce19b3edf4209d70004253ec5f4e319f9a2e3f2f15601ed5f7/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e594135de17ab3866138f496755f302b72157d115086d100c3f19370839dd3a", size = 148567, upload_time = "2025-05-02T08:32:40.251Z" }, - { url = "https://files.pythonhosted.org/packages/09/14/957d03c6dc343c04904530b6bef4e5efae5ec7d7990a7cbb868e4595ee30/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cf713fe9a71ef6fd5adf7a79670135081cd4431c2943864757f0fa3a65b1fafd", size = 150957, upload_time = "2025-05-02T08:32:41.705Z" }, - { url = "https://files.pythonhosted.org/packages/0d/c8/8174d0e5c10ccebdcb1b53cc959591c4c722a3ad92461a273e86b9f5a302/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a370b3e078e418187da8c3674eddb9d983ec09445c99a3a263c2011993522981", size = 145408, upload_time = "2025-05-02T08:32:43.709Z" }, - { url = "https://files.pythonhosted.org/packages/58/aa/8904b84bc8084ac19dc52feb4f5952c6df03ffb460a887b42615ee1382e8/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a955b438e62efdf7e0b7b52a64dc5c3396e2634baa62471768a64bc2adb73d5c", size = 153399, upload_time = "2025-05-02T08:32:46.197Z" }, - { url = "https://files.pythonhosted.org/packages/c2/26/89ee1f0e264d201cb65cf054aca6038c03b1a0c6b4ae998070392a3ce605/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:7222ffd5e4de8e57e03ce2cef95a4c43c98fcb72ad86909abdfc2c17d227fc1b", size = 156815, upload_time = "2025-05-02T08:32:48.105Z" }, - { url = "https://files.pythonhosted.org/packages/fd/07/68e95b4b345bad3dbbd3a8681737b4338ff2c9df29856a6d6d23ac4c73cb/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:bee093bf902e1d8fc0ac143c88902c3dfc8941f7ea1d6a8dd2bcb786d33db03d", size = 154537, upload_time = "2025-05-02T08:32:49.719Z" }, - { url = "https://files.pythonhosted.org/packages/77/1a/5eefc0ce04affb98af07bc05f3bac9094513c0e23b0562d64af46a06aae4/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dedb8adb91d11846ee08bec4c8236c8549ac721c245678282dcb06b221aab59f", size = 149565, upload_time = "2025-05-02T08:32:51.404Z" }, - { url = "https://files.pythonhosted.org/packages/37/a0/2410e5e6032a174c95e0806b1a6585eb21e12f445ebe239fac441995226a/charset_normalizer-3.4.2-cp312-cp312-win32.whl", hash = "sha256:db4c7bf0e07fc3b7d89ac2a5880a6a8062056801b83ff56d8464b70f65482b6c", size = 98357, upload_time = "2025-05-02T08:32:53.079Z" }, - { url = "https://files.pythonhosted.org/packages/6c/4f/c02d5c493967af3eda9c771ad4d2bbc8df6f99ddbeb37ceea6e8716a32bc/charset_normalizer-3.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:5a9979887252a82fefd3d3ed2a8e3b937a7a809f65dcb1e068b090e165bbe99e", size = 105776, upload_time = "2025-05-02T08:32:54.573Z" }, - { url = "https://files.pythonhosted.org/packages/ea/12/a93df3366ed32db1d907d7593a94f1fe6293903e3e92967bebd6950ed12c/charset_normalizer-3.4.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:926ca93accd5d36ccdabd803392ddc3e03e6d4cd1cf17deff3b989ab8e9dbcf0", size = 199622, upload_time = "2025-05-02T08:32:56.363Z" }, - { url = "https://files.pythonhosted.org/packages/04/93/bf204e6f344c39d9937d3c13c8cd5bbfc266472e51fc8c07cb7f64fcd2de/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eba9904b0f38a143592d9fc0e19e2df0fa2e41c3c3745554761c5f6447eedabf", size = 143435, upload_time = "2025-05-02T08:32:58.551Z" }, - { url = "https://files.pythonhosted.org/packages/22/2a/ea8a2095b0bafa6c5b5a55ffdc2f924455233ee7b91c69b7edfcc9e02284/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3fddb7e2c84ac87ac3a947cb4e66d143ca5863ef48e4a5ecb83bd48619e4634e", size = 153653, upload_time = "2025-05-02T08:33:00.342Z" }, - { url = "https://files.pythonhosted.org/packages/b6/57/1b090ff183d13cef485dfbe272e2fe57622a76694061353c59da52c9a659/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98f862da73774290f251b9df8d11161b6cf25b599a66baf087c1ffe340e9bfd1", size = 146231, upload_time = "2025-05-02T08:33:02.081Z" }, - { url = "https://files.pythonhosted.org/packages/e2/28/ffc026b26f441fc67bd21ab7f03b313ab3fe46714a14b516f931abe1a2d8/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c9379d65defcab82d07b2a9dfbfc2e95bc8fe0ebb1b176a3190230a3ef0e07c", size = 148243, upload_time = "2025-05-02T08:33:04.063Z" }, - { url = "https://files.pythonhosted.org/packages/c0/0f/9abe9bd191629c33e69e47c6ef45ef99773320e9ad8e9cb08b8ab4a8d4cb/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e635b87f01ebc977342e2697d05b56632f5f879a4f15955dfe8cef2448b51691", size = 150442, upload_time = "2025-05-02T08:33:06.418Z" }, - { url = "https://files.pythonhosted.org/packages/67/7c/a123bbcedca91d5916c056407f89a7f5e8fdfce12ba825d7d6b9954a1a3c/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1c95a1e2902a8b722868587c0e1184ad5c55631de5afc0eb96bc4b0d738092c0", size = 145147, upload_time = "2025-05-02T08:33:08.183Z" }, - { url = "https://files.pythonhosted.org/packages/ec/fe/1ac556fa4899d967b83e9893788e86b6af4d83e4726511eaaad035e36595/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ef8de666d6179b009dce7bcb2ad4c4a779f113f12caf8dc77f0162c29d20490b", size = 153057, upload_time = "2025-05-02T08:33:09.986Z" }, - { url = "https://files.pythonhosted.org/packages/2b/ff/acfc0b0a70b19e3e54febdd5301a98b72fa07635e56f24f60502e954c461/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:32fc0341d72e0f73f80acb0a2c94216bd704f4f0bce10aedea38f30502b271ff", size = 156454, upload_time = "2025-05-02T08:33:11.814Z" }, - { url = "https://files.pythonhosted.org/packages/92/08/95b458ce9c740d0645feb0e96cea1f5ec946ea9c580a94adfe0b617f3573/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:289200a18fa698949d2b39c671c2cc7a24d44096784e76614899a7ccf2574b7b", size = 154174, upload_time = "2025-05-02T08:33:13.707Z" }, - { url = "https://files.pythonhosted.org/packages/78/be/8392efc43487ac051eee6c36d5fbd63032d78f7728cb37aebcc98191f1ff/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4a476b06fbcf359ad25d34a057b7219281286ae2477cc5ff5e3f70a246971148", size = 149166, upload_time = "2025-05-02T08:33:15.458Z" }, - { url = "https://files.pythonhosted.org/packages/44/96/392abd49b094d30b91d9fbda6a69519e95802250b777841cf3bda8fe136c/charset_normalizer-3.4.2-cp313-cp313-win32.whl", hash = "sha256:aaeeb6a479c7667fbe1099af9617c83aaca22182d6cf8c53966491a0f1b7ffb7", size = 98064, upload_time = "2025-05-02T08:33:17.06Z" }, - { url = "https://files.pythonhosted.org/packages/e9/b0/0200da600134e001d91851ddc797809e2fe0ea72de90e09bec5a2fbdaccb/charset_normalizer-3.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980", size = 105641, upload_time = "2025-05-02T08:33:18.753Z" }, - { url = "https://files.pythonhosted.org/packages/20/94/c5790835a017658cbfabd07f3bfb549140c3ac458cfc196323996b10095a/charset_normalizer-3.4.2-py3-none-any.whl", hash = "sha256:7f56930ab0abd1c45cd15be65cc741c28b1c9a34876ce8c17a2fa107810c0af0", size = 52626, upload_time = "2025-05-02T08:34:40.053Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/e4/33/89c2ced2b67d1c2a61c19c6751aa8902d46ce3dacb23600a283619f5a12d/charset_normalizer-3.4.2.tar.gz", hash = "sha256:5baececa9ecba31eff645232d59845c07aa030f0c81ee70184a90d35099a0e63", size = 126367 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d7/a4/37f4d6035c89cac7930395a35cc0f1b872e652eaafb76a6075943754f095/charset_normalizer-3.4.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0c29de6a1a95f24b9a1aa7aefd27d2487263f00dfd55a77719b530788f75cff7", size = 199936 }, + { url = "https://files.pythonhosted.org/packages/ee/8a/1a5e33b73e0d9287274f899d967907cd0bf9c343e651755d9307e0dbf2b3/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cddf7bd982eaa998934a91f69d182aec997c6c468898efe6679af88283b498d3", size = 143790 }, + { url = "https://files.pythonhosted.org/packages/66/52/59521f1d8e6ab1482164fa21409c5ef44da3e9f653c13ba71becdd98dec3/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcbe676a55d7445b22c10967bceaaf0ee69407fbe0ece4d032b6eb8d4565982a", size = 153924 }, + { url = "https://files.pythonhosted.org/packages/86/2d/fb55fdf41964ec782febbf33cb64be480a6b8f16ded2dbe8db27a405c09f/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d41c4d287cfc69060fa91cae9683eacffad989f1a10811995fa309df656ec214", size = 146626 }, + { url = "https://files.pythonhosted.org/packages/8c/73/6ede2ec59bce19b3edf4209d70004253ec5f4e319f9a2e3f2f15601ed5f7/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e594135de17ab3866138f496755f302b72157d115086d100c3f19370839dd3a", size = 148567 }, + { url = "https://files.pythonhosted.org/packages/09/14/957d03c6dc343c04904530b6bef4e5efae5ec7d7990a7cbb868e4595ee30/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cf713fe9a71ef6fd5adf7a79670135081cd4431c2943864757f0fa3a65b1fafd", size = 150957 }, + { url = "https://files.pythonhosted.org/packages/0d/c8/8174d0e5c10ccebdcb1b53cc959591c4c722a3ad92461a273e86b9f5a302/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a370b3e078e418187da8c3674eddb9d983ec09445c99a3a263c2011993522981", size = 145408 }, + { url = "https://files.pythonhosted.org/packages/58/aa/8904b84bc8084ac19dc52feb4f5952c6df03ffb460a887b42615ee1382e8/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a955b438e62efdf7e0b7b52a64dc5c3396e2634baa62471768a64bc2adb73d5c", size = 153399 }, + { url = "https://files.pythonhosted.org/packages/c2/26/89ee1f0e264d201cb65cf054aca6038c03b1a0c6b4ae998070392a3ce605/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:7222ffd5e4de8e57e03ce2cef95a4c43c98fcb72ad86909abdfc2c17d227fc1b", size = 156815 }, + { url = "https://files.pythonhosted.org/packages/fd/07/68e95b4b345bad3dbbd3a8681737b4338ff2c9df29856a6d6d23ac4c73cb/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:bee093bf902e1d8fc0ac143c88902c3dfc8941f7ea1d6a8dd2bcb786d33db03d", size = 154537 }, + { url = "https://files.pythonhosted.org/packages/77/1a/5eefc0ce04affb98af07bc05f3bac9094513c0e23b0562d64af46a06aae4/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dedb8adb91d11846ee08bec4c8236c8549ac721c245678282dcb06b221aab59f", size = 149565 }, + { url = "https://files.pythonhosted.org/packages/37/a0/2410e5e6032a174c95e0806b1a6585eb21e12f445ebe239fac441995226a/charset_normalizer-3.4.2-cp312-cp312-win32.whl", hash = "sha256:db4c7bf0e07fc3b7d89ac2a5880a6a8062056801b83ff56d8464b70f65482b6c", size = 98357 }, + { url = "https://files.pythonhosted.org/packages/6c/4f/c02d5c493967af3eda9c771ad4d2bbc8df6f99ddbeb37ceea6e8716a32bc/charset_normalizer-3.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:5a9979887252a82fefd3d3ed2a8e3b937a7a809f65dcb1e068b090e165bbe99e", size = 105776 }, + { url = "https://files.pythonhosted.org/packages/ea/12/a93df3366ed32db1d907d7593a94f1fe6293903e3e92967bebd6950ed12c/charset_normalizer-3.4.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:926ca93accd5d36ccdabd803392ddc3e03e6d4cd1cf17deff3b989ab8e9dbcf0", size = 199622 }, + { url = "https://files.pythonhosted.org/packages/04/93/bf204e6f344c39d9937d3c13c8cd5bbfc266472e51fc8c07cb7f64fcd2de/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eba9904b0f38a143592d9fc0e19e2df0fa2e41c3c3745554761c5f6447eedabf", size = 143435 }, + { url = "https://files.pythonhosted.org/packages/22/2a/ea8a2095b0bafa6c5b5a55ffdc2f924455233ee7b91c69b7edfcc9e02284/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3fddb7e2c84ac87ac3a947cb4e66d143ca5863ef48e4a5ecb83bd48619e4634e", size = 153653 }, + { url = "https://files.pythonhosted.org/packages/b6/57/1b090ff183d13cef485dfbe272e2fe57622a76694061353c59da52c9a659/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98f862da73774290f251b9df8d11161b6cf25b599a66baf087c1ffe340e9bfd1", size = 146231 }, + { url = "https://files.pythonhosted.org/packages/e2/28/ffc026b26f441fc67bd21ab7f03b313ab3fe46714a14b516f931abe1a2d8/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c9379d65defcab82d07b2a9dfbfc2e95bc8fe0ebb1b176a3190230a3ef0e07c", size = 148243 }, + { url = "https://files.pythonhosted.org/packages/c0/0f/9abe9bd191629c33e69e47c6ef45ef99773320e9ad8e9cb08b8ab4a8d4cb/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e635b87f01ebc977342e2697d05b56632f5f879a4f15955dfe8cef2448b51691", size = 150442 }, + { url = "https://files.pythonhosted.org/packages/67/7c/a123bbcedca91d5916c056407f89a7f5e8fdfce12ba825d7d6b9954a1a3c/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1c95a1e2902a8b722868587c0e1184ad5c55631de5afc0eb96bc4b0d738092c0", size = 145147 }, + { url = "https://files.pythonhosted.org/packages/ec/fe/1ac556fa4899d967b83e9893788e86b6af4d83e4726511eaaad035e36595/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ef8de666d6179b009dce7bcb2ad4c4a779f113f12caf8dc77f0162c29d20490b", size = 153057 }, + { url = "https://files.pythonhosted.org/packages/2b/ff/acfc0b0a70b19e3e54febdd5301a98b72fa07635e56f24f60502e954c461/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:32fc0341d72e0f73f80acb0a2c94216bd704f4f0bce10aedea38f30502b271ff", size = 156454 }, + { url = "https://files.pythonhosted.org/packages/92/08/95b458ce9c740d0645feb0e96cea1f5ec946ea9c580a94adfe0b617f3573/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:289200a18fa698949d2b39c671c2cc7a24d44096784e76614899a7ccf2574b7b", size = 154174 }, + { url = "https://files.pythonhosted.org/packages/78/be/8392efc43487ac051eee6c36d5fbd63032d78f7728cb37aebcc98191f1ff/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4a476b06fbcf359ad25d34a057b7219281286ae2477cc5ff5e3f70a246971148", size = 149166 }, + { url = "https://files.pythonhosted.org/packages/44/96/392abd49b094d30b91d9fbda6a69519e95802250b777841cf3bda8fe136c/charset_normalizer-3.4.2-cp313-cp313-win32.whl", hash = "sha256:aaeeb6a479c7667fbe1099af9617c83aaca22182d6cf8c53966491a0f1b7ffb7", size = 98064 }, + { url = "https://files.pythonhosted.org/packages/e9/b0/0200da600134e001d91851ddc797809e2fe0ea72de90e09bec5a2fbdaccb/charset_normalizer-3.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980", size = 105641 }, + { url = "https://files.pythonhosted.org/packages/20/94/c5790835a017658cbfabd07f3bfb549140c3ac458cfc196323996b10095a/charset_normalizer-3.4.2-py3-none-any.whl", hash = "sha256:7f56930ab0abd1c45cd15be65cc741c28b1c9a34876ce8c17a2fa107810c0af0", size = 52626 }, ] [[package]] @@ -197,18 +197,18 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/60/6c/8ca2efa64cf75a977a0d7fac081354553ebe483345c734fb6b6515d96bbc/click-8.2.1.tar.gz", hash = "sha256:27c491cc05d968d271d5a1db13e3b5a184636d9d930f148c50b038f0d0646202", size = 286342, upload_time = "2025-05-20T23:19:49.832Z" } +sdist = { url = "https://files.pythonhosted.org/packages/60/6c/8ca2efa64cf75a977a0d7fac081354553ebe483345c734fb6b6515d96bbc/click-8.2.1.tar.gz", hash = "sha256:27c491cc05d968d271d5a1db13e3b5a184636d9d930f148c50b038f0d0646202", size = 286342 } wheels = [ - { url = "https://files.pythonhosted.org/packages/85/32/10bb5764d90a8eee674e9dc6f4db6a0ab47c8c4d0d83c27f7c39ac415a4d/click-8.2.1-py3-none-any.whl", hash = "sha256:61a3265b914e850b85317d0b3109c7f8cd35a670f963866005d6ef1d5175a12b", size = 102215, upload_time = "2025-05-20T23:19:47.796Z" }, + { url = "https://files.pythonhosted.org/packages/85/32/10bb5764d90a8eee674e9dc6f4db6a0ab47c8c4d0d83c27f7c39ac415a4d/click-8.2.1-py3-none-any.whl", hash = "sha256:61a3265b914e850b85317d0b3109c7f8cd35a670f963866005d6ef1d5175a12b", size = 102215 }, ] [[package]] name = "colorama" version = "0.4.6" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload_time = "2022-10-25T02:36:22.414Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 } wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload_time = "2022-10-25T02:36:20.889Z" }, + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 }, ] [[package]] @@ -218,150 +218,150 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/e9/a8/fb783cb0abe2b5fded9f55e5703015cdf1c9c85b3669087c538dd15a6a86/comm-0.2.2.tar.gz", hash = "sha256:3fd7a84065306e07bea1773df6eb8282de51ba82f77c72f9c85716ab11fe980e", size = 6210, upload_time = "2024-03-12T16:53:41.133Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e9/a8/fb783cb0abe2b5fded9f55e5703015cdf1c9c85b3669087c538dd15a6a86/comm-0.2.2.tar.gz", hash = "sha256:3fd7a84065306e07bea1773df6eb8282de51ba82f77c72f9c85716ab11fe980e", size = 6210 } wheels = [ - { url = "https://files.pythonhosted.org/packages/e6/75/49e5bfe642f71f272236b5b2d2691cf915a7283cc0ceda56357b61daa538/comm-0.2.2-py3-none-any.whl", hash = "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3", size = 7180, upload_time = "2024-03-12T16:53:39.226Z" }, + { url = "https://files.pythonhosted.org/packages/e6/75/49e5bfe642f71f272236b5b2d2691cf915a7283cc0ceda56357b61daa538/comm-0.2.2-py3-none-any.whl", hash = "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3", size = 7180 }, ] [[package]] name = "coverage" version = "7.10.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/87/0e/66dbd4c6a7f0758a8d18044c048779ba21fb94856e1edcf764bd5403e710/coverage-7.10.1.tar.gz", hash = "sha256:ae2b4856f29ddfe827106794f3589949a57da6f0d38ab01e24ec35107979ba57", size = 819938, upload_time = "2025-07-27T14:13:39.045Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a5/3f/b051feeb292400bd22d071fdf933b3ad389a8cef5c80c7866ed0c7414b9e/coverage-7.10.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6b7dc7f0a75a7eaa4584e5843c873c561b12602439d2351ee28c7478186c4da4", size = 214934, upload_time = "2025-07-27T14:11:36.096Z" }, - { url = "https://files.pythonhosted.org/packages/f8/e4/a61b27d5c4c2d185bdfb0bfe9d15ab4ac4f0073032665544507429ae60eb/coverage-7.10.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:607f82389f0ecafc565813aa201a5cade04f897603750028dd660fb01797265e", size = 215173, upload_time = "2025-07-27T14:11:38.005Z" }, - { url = "https://files.pythonhosted.org/packages/8a/01/40a6ee05b60d02d0bc53742ad4966e39dccd450aafb48c535a64390a3552/coverage-7.10.1-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:f7da31a1ba31f1c1d4d5044b7c5813878adae1f3af8f4052d679cc493c7328f4", size = 246190, upload_time = "2025-07-27T14:11:39.887Z" }, - { url = "https://files.pythonhosted.org/packages/11/ef/a28d64d702eb583c377255047281305dc5a5cfbfb0ee36e721f78255adb6/coverage-7.10.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:51fe93f3fe4f5d8483d51072fddc65e717a175490804e1942c975a68e04bf97a", size = 248618, upload_time = "2025-07-27T14:11:41.841Z" }, - { url = "https://files.pythonhosted.org/packages/6a/ad/73d018bb0c8317725370c79d69b5c6e0257df84a3b9b781bda27a438a3be/coverage-7.10.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3e59d00830da411a1feef6ac828b90bbf74c9b6a8e87b8ca37964925bba76dbe", size = 250081, upload_time = "2025-07-27T14:11:43.705Z" }, - { url = "https://files.pythonhosted.org/packages/2d/dd/496adfbbb4503ebca5d5b2de8bed5ec00c0a76558ffc5b834fd404166bc9/coverage-7.10.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:924563481c27941229cb4e16eefacc35da28563e80791b3ddc5597b062a5c386", size = 247990, upload_time = "2025-07-27T14:11:45.244Z" }, - { url = "https://files.pythonhosted.org/packages/18/3c/a9331a7982facfac0d98a4a87b36ae666fe4257d0f00961a3a9ef73e015d/coverage-7.10.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:ca79146ee421b259f8131f153102220b84d1a5e6fb9c8aed13b3badfd1796de6", size = 246191, upload_time = "2025-07-27T14:11:47.093Z" }, - { url = "https://files.pythonhosted.org/packages/62/0c/75345895013b83f7afe92ec595e15a9a525ede17491677ceebb2ba5c3d85/coverage-7.10.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2b225a06d227f23f386fdc0eab471506d9e644be699424814acc7d114595495f", size = 247400, upload_time = "2025-07-27T14:11:48.643Z" }, - { url = "https://files.pythonhosted.org/packages/e2/a9/98b268cfc5619ef9df1d5d34fee408ecb1542d9fd43d467e5c2f28668cd4/coverage-7.10.1-cp312-cp312-win32.whl", hash = "sha256:5ba9a8770effec5baaaab1567be916c87d8eea0c9ad11253722d86874d885eca", size = 217338, upload_time = "2025-07-27T14:11:50.258Z" }, - { url = "https://files.pythonhosted.org/packages/fe/31/22a5440e4d1451f253c5cd69fdcead65e92ef08cd4ec237b8756dc0b20a7/coverage-7.10.1-cp312-cp312-win_amd64.whl", hash = "sha256:9eb245a8d8dd0ad73b4062135a251ec55086fbc2c42e0eb9725a9b553fba18a3", size = 218125, upload_time = "2025-07-27T14:11:52.034Z" }, - { url = "https://files.pythonhosted.org/packages/d6/2b/40d9f0ce7ee839f08a43c5bfc9d05cec28aaa7c9785837247f96cbe490b9/coverage-7.10.1-cp312-cp312-win_arm64.whl", hash = "sha256:7718060dd4434cc719803a5e526838a5d66e4efa5dc46d2b25c21965a9c6fcc4", size = 216523, upload_time = "2025-07-27T14:11:53.965Z" }, - { url = "https://files.pythonhosted.org/packages/ef/72/135ff5fef09b1ffe78dbe6fcf1e16b2e564cd35faeacf3d63d60d887f12d/coverage-7.10.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ebb08d0867c5a25dffa4823377292a0ffd7aaafb218b5d4e2e106378b1061e39", size = 214960, upload_time = "2025-07-27T14:11:55.959Z" }, - { url = "https://files.pythonhosted.org/packages/b1/aa/73a5d1a6fc08ca709a8177825616aa95ee6bf34d522517c2595484a3e6c9/coverage-7.10.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f32a95a83c2e17422f67af922a89422cd24c6fa94041f083dd0bb4f6057d0bc7", size = 215220, upload_time = "2025-07-27T14:11:57.899Z" }, - { url = "https://files.pythonhosted.org/packages/8d/40/3124fdd45ed3772a42fc73ca41c091699b38a2c3bd4f9cb564162378e8b6/coverage-7.10.1-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:c4c746d11c8aba4b9f58ca8bfc6fbfd0da4efe7960ae5540d1a1b13655ee8892", size = 245772, upload_time = "2025-07-27T14:12:00.422Z" }, - { url = "https://files.pythonhosted.org/packages/42/62/a77b254822efa8c12ad59e8039f2bc3df56dc162ebda55e1943e35ba31a5/coverage-7.10.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:7f39edd52c23e5c7ed94e0e4bf088928029edf86ef10b95413e5ea670c5e92d7", size = 248116, upload_time = "2025-07-27T14:12:03.099Z" }, - { url = "https://files.pythonhosted.org/packages/1d/01/8101f062f472a3a6205b458d18ef0444a63ae5d36a8a5ed5dd0f6167f4db/coverage-7.10.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ab6e19b684981d0cd968906e293d5628e89faacb27977c92f3600b201926b994", size = 249554, upload_time = "2025-07-27T14:12:04.668Z" }, - { url = "https://files.pythonhosted.org/packages/8f/7b/e51bc61573e71ff7275a4f167aecbd16cb010aefdf54bcd8b0a133391263/coverage-7.10.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5121d8cf0eacb16133501455d216bb5f99899ae2f52d394fe45d59229e6611d0", size = 247766, upload_time = "2025-07-27T14:12:06.234Z" }, - { url = "https://files.pythonhosted.org/packages/4b/71/1c96d66a51d4204a9d6d12df53c4071d87e110941a2a1fe94693192262f5/coverage-7.10.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:df1c742ca6f46a6f6cbcaef9ac694dc2cb1260d30a6a2f5c68c5f5bcfee1cfd7", size = 245735, upload_time = "2025-07-27T14:12:08.305Z" }, - { url = "https://files.pythonhosted.org/packages/13/d5/efbc2ac4d35ae2f22ef6df2ca084c60e13bd9378be68655e3268c80349ab/coverage-7.10.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:40f9a38676f9c073bf4b9194707aa1eb97dca0e22cc3766d83879d72500132c7", size = 247118, upload_time = "2025-07-27T14:12:09.903Z" }, - { url = "https://files.pythonhosted.org/packages/d1/22/073848352bec28ca65f2b6816b892fcf9a31abbef07b868487ad15dd55f1/coverage-7.10.1-cp313-cp313-win32.whl", hash = "sha256:2348631f049e884839553b9974f0821d39241c6ffb01a418efce434f7eba0fe7", size = 217381, upload_time = "2025-07-27T14:12:11.535Z" }, - { url = "https://files.pythonhosted.org/packages/b7/df/df6a0ff33b042f000089bd11b6bb034bab073e2ab64a56e78ed882cba55d/coverage-7.10.1-cp313-cp313-win_amd64.whl", hash = "sha256:4072b31361b0d6d23f750c524f694e1a417c1220a30d3ef02741eed28520c48e", size = 218152, upload_time = "2025-07-27T14:12:13.182Z" }, - { url = "https://files.pythonhosted.org/packages/30/e3/5085ca849a40ed6b47cdb8f65471c2f754e19390b5a12fa8abd25cbfaa8f/coverage-7.10.1-cp313-cp313-win_arm64.whl", hash = "sha256:3e31dfb8271937cab9425f19259b1b1d1f556790e98eb266009e7a61d337b6d4", size = 216559, upload_time = "2025-07-27T14:12:14.807Z" }, - { url = "https://files.pythonhosted.org/packages/cc/93/58714efbfdeb547909feaabe1d67b2bdd59f0597060271b9c548d5efb529/coverage-7.10.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:1c4f679c6b573a5257af6012f167a45be4c749c9925fd44d5178fd641ad8bf72", size = 215677, upload_time = "2025-07-27T14:12:16.68Z" }, - { url = "https://files.pythonhosted.org/packages/c0/0c/18eaa5897e7e8cb3f8c45e563e23e8a85686b4585e29d53cacb6bc9cb340/coverage-7.10.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:871ebe8143da284bd77b84a9136200bd638be253618765d21a1fce71006d94af", size = 215899, upload_time = "2025-07-27T14:12:18.758Z" }, - { url = "https://files.pythonhosted.org/packages/84/c1/9d1affacc3c75b5a184c140377701bbf14fc94619367f07a269cd9e4fed6/coverage-7.10.1-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:998c4751dabf7d29b30594af416e4bf5091f11f92a8d88eb1512c7ba136d1ed7", size = 257140, upload_time = "2025-07-27T14:12:20.357Z" }, - { url = "https://files.pythonhosted.org/packages/3d/0f/339bc6b8fa968c346df346068cca1f24bdea2ddfa93bb3dc2e7749730962/coverage-7.10.1-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:780f750a25e7749d0af6b3631759c2c14f45de209f3faaa2398312d1c7a22759", size = 259005, upload_time = "2025-07-27T14:12:22.007Z" }, - { url = "https://files.pythonhosted.org/packages/c8/22/89390864b92ea7c909079939b71baba7e5b42a76bf327c1d615bd829ba57/coverage-7.10.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:590bdba9445df4763bdbebc928d8182f094c1f3947a8dc0fc82ef014dbdd8324", size = 261143, upload_time = "2025-07-27T14:12:23.746Z" }, - { url = "https://files.pythonhosted.org/packages/2c/56/3d04d89017c0c41c7a71bd69b29699d919b6bbf2649b8b2091240b97dd6a/coverage-7.10.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b2df80cb6a2af86d300e70acb82e9b79dab2c1e6971e44b78dbfc1a1e736b53", size = 258735, upload_time = "2025-07-27T14:12:25.73Z" }, - { url = "https://files.pythonhosted.org/packages/cb/40/312252c8afa5ca781063a09d931f4b9409dc91526cd0b5a2b84143ffafa2/coverage-7.10.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:d6a558c2725bfb6337bf57c1cd366c13798bfd3bfc9e3dd1f4a6f6fc95a4605f", size = 256871, upload_time = "2025-07-27T14:12:27.767Z" }, - { url = "https://files.pythonhosted.org/packages/1f/2b/564947d5dede068215aaddb9e05638aeac079685101462218229ddea9113/coverage-7.10.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e6150d167f32f2a54690e572e0a4c90296fb000a18e9b26ab81a6489e24e78dd", size = 257692, upload_time = "2025-07-27T14:12:29.347Z" }, - { url = "https://files.pythonhosted.org/packages/93/1b/c8a867ade85cb26d802aea2209b9c2c80613b9c122baa8c8ecea6799648f/coverage-7.10.1-cp313-cp313t-win32.whl", hash = "sha256:d946a0c067aa88be4a593aad1236493313bafaa27e2a2080bfe88db827972f3c", size = 218059, upload_time = "2025-07-27T14:12:31.076Z" }, - { url = "https://files.pythonhosted.org/packages/a1/fe/cd4ab40570ae83a516bf5e754ea4388aeedd48e660e40c50b7713ed4f930/coverage-7.10.1-cp313-cp313t-win_amd64.whl", hash = "sha256:e37c72eaccdd5ed1130c67a92ad38f5b2af66eeff7b0abe29534225db2ef7b18", size = 219150, upload_time = "2025-07-27T14:12:32.746Z" }, - { url = "https://files.pythonhosted.org/packages/8d/16/6e5ed5854be6d70d0c39e9cb9dd2449f2c8c34455534c32c1a508c7dbdb5/coverage-7.10.1-cp313-cp313t-win_arm64.whl", hash = "sha256:89ec0ffc215c590c732918c95cd02b55c7d0f569d76b90bb1a5e78aa340618e4", size = 217014, upload_time = "2025-07-27T14:12:34.406Z" }, - { url = "https://files.pythonhosted.org/packages/54/8e/6d0bfe9c3d7121cf936c5f8b03e8c3da1484fb801703127dba20fb8bd3c7/coverage-7.10.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:166d89c57e877e93d8827dac32cedae6b0277ca684c6511497311249f35a280c", size = 214951, upload_time = "2025-07-27T14:12:36.069Z" }, - { url = "https://files.pythonhosted.org/packages/f2/29/e3e51a8c653cf2174c60532aafeb5065cea0911403fa144c9abe39790308/coverage-7.10.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:bed4a2341b33cd1a7d9ffc47df4a78ee61d3416d43b4adc9e18b7d266650b83e", size = 215229, upload_time = "2025-07-27T14:12:37.759Z" }, - { url = "https://files.pythonhosted.org/packages/e0/59/3c972080b2fa18b6c4510201f6d4dc87159d450627d062cd9ad051134062/coverage-7.10.1-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:ddca1e4f5f4c67980533df01430184c19b5359900e080248bbf4ed6789584d8b", size = 245738, upload_time = "2025-07-27T14:12:39.453Z" }, - { url = "https://files.pythonhosted.org/packages/2e/04/fc0d99d3f809452654e958e1788454f6e27b34e43f8f8598191c8ad13537/coverage-7.10.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:37b69226001d8b7de7126cad7366b0778d36777e4d788c66991455ba817c5b41", size = 248045, upload_time = "2025-07-27T14:12:41.387Z" }, - { url = "https://files.pythonhosted.org/packages/5e/2e/afcbf599e77e0dfbf4c97197747250d13d397d27e185b93987d9eaac053d/coverage-7.10.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b2f22102197bcb1722691296f9e589f02b616f874e54a209284dd7b9294b0b7f", size = 249666, upload_time = "2025-07-27T14:12:43.056Z" }, - { url = "https://files.pythonhosted.org/packages/6e/ae/bc47f7f8ecb7a06cbae2bf86a6fa20f479dd902bc80f57cff7730438059d/coverage-7.10.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:1e0c768b0f9ac5839dac5cf88992a4bb459e488ee8a1f8489af4cb33b1af00f1", size = 247692, upload_time = "2025-07-27T14:12:44.83Z" }, - { url = "https://files.pythonhosted.org/packages/b6/26/cbfa3092d31ccba8ba7647e4d25753263e818b4547eba446b113d7d1efdf/coverage-7.10.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:991196702d5e0b120a8fef2664e1b9c333a81d36d5f6bcf6b225c0cf8b0451a2", size = 245536, upload_time = "2025-07-27T14:12:46.527Z" }, - { url = "https://files.pythonhosted.org/packages/56/77/9c68e92500e6a1c83d024a70eadcc9a173f21aadd73c4675fe64c9c43fdf/coverage-7.10.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ae8e59e5f4fd85d6ad34c2bb9d74037b5b11be072b8b7e9986beb11f957573d4", size = 246954, upload_time = "2025-07-27T14:12:49.279Z" }, - { url = "https://files.pythonhosted.org/packages/7f/a5/ba96671c5a669672aacd9877a5987c8551501b602827b4e84256da2a30a7/coverage-7.10.1-cp314-cp314-win32.whl", hash = "sha256:042125c89cf74a074984002e165d61fe0e31c7bd40ebb4bbebf07939b5924613", size = 217616, upload_time = "2025-07-27T14:12:51.214Z" }, - { url = "https://files.pythonhosted.org/packages/e7/3c/e1e1eb95fc1585f15a410208c4795db24a948e04d9bde818fe4eb893bc85/coverage-7.10.1-cp314-cp314-win_amd64.whl", hash = "sha256:a22c3bfe09f7a530e2c94c87ff7af867259c91bef87ed2089cd69b783af7b84e", size = 218412, upload_time = "2025-07-27T14:12:53.429Z" }, - { url = "https://files.pythonhosted.org/packages/b0/85/7e1e5be2cb966cba95566ba702b13a572ca744fbb3779df9888213762d67/coverage-7.10.1-cp314-cp314-win_arm64.whl", hash = "sha256:ee6be07af68d9c4fca4027c70cea0c31a0f1bc9cb464ff3c84a1f916bf82e652", size = 216776, upload_time = "2025-07-27T14:12:55.482Z" }, - { url = "https://files.pythonhosted.org/packages/62/0f/5bb8f29923141cca8560fe2217679caf4e0db643872c1945ac7d8748c2a7/coverage-7.10.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:d24fb3c0c8ff0d517c5ca5de7cf3994a4cd559cde0315201511dbfa7ab528894", size = 215698, upload_time = "2025-07-27T14:12:57.225Z" }, - { url = "https://files.pythonhosted.org/packages/80/29/547038ffa4e8e4d9e82f7dfc6d152f75fcdc0af146913f0ba03875211f03/coverage-7.10.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1217a54cfd79be20512a67ca81c7da3f2163f51bbfd188aab91054df012154f5", size = 215902, upload_time = "2025-07-27T14:12:59.071Z" }, - { url = "https://files.pythonhosted.org/packages/e1/8a/7aaa8fbfaed900147987a424e112af2e7790e1ac9cd92601e5bd4e1ba60a/coverage-7.10.1-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:51f30da7a52c009667e02f125737229d7d8044ad84b79db454308033a7808ab2", size = 257230, upload_time = "2025-07-27T14:13:01.248Z" }, - { url = "https://files.pythonhosted.org/packages/e5/1d/c252b5ffac44294e23a0d79dd5acf51749b39795ccc898faeabf7bee903f/coverage-7.10.1-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:ed3718c757c82d920f1c94089066225ca2ad7f00bb904cb72b1c39ebdd906ccb", size = 259194, upload_time = "2025-07-27T14:13:03.247Z" }, - { url = "https://files.pythonhosted.org/packages/16/ad/6c8d9f83d08f3bac2e7507534d0c48d1a4f52c18e6f94919d364edbdfa8f/coverage-7.10.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cc452481e124a819ced0c25412ea2e144269ef2f2534b862d9f6a9dae4bda17b", size = 261316, upload_time = "2025-07-27T14:13:04.957Z" }, - { url = "https://files.pythonhosted.org/packages/d6/4e/f9bbf3a36c061e2e0e0f78369c006d66416561a33d2bee63345aee8ee65e/coverage-7.10.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:9d6f494c307e5cb9b1e052ec1a471060f1dea092c8116e642e7a23e79d9388ea", size = 258794, upload_time = "2025-07-27T14:13:06.715Z" }, - { url = "https://files.pythonhosted.org/packages/87/82/e600bbe78eb2cb0541751d03cef9314bcd0897e8eea156219c39b685f869/coverage-7.10.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:fc0e46d86905ddd16b85991f1f4919028092b4e511689bbdaff0876bd8aab3dd", size = 256869, upload_time = "2025-07-27T14:13:08.933Z" }, - { url = "https://files.pythonhosted.org/packages/ce/5d/2fc9a9236c5268f68ac011d97cd3a5ad16cc420535369bedbda659fdd9b7/coverage-7.10.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:80b9ccd82e30038b61fc9a692a8dc4801504689651b281ed9109f10cc9fe8b4d", size = 257765, upload_time = "2025-07-27T14:13:10.778Z" }, - { url = "https://files.pythonhosted.org/packages/8a/05/b4e00b2bd48a2dc8e1c7d2aea7455f40af2e36484ab2ef06deb85883e9fe/coverage-7.10.1-cp314-cp314t-win32.whl", hash = "sha256:e58991a2b213417285ec866d3cd32db17a6a88061a985dbb7e8e8f13af429c47", size = 218420, upload_time = "2025-07-27T14:13:12.882Z" }, - { url = "https://files.pythonhosted.org/packages/77/fb/d21d05f33ea27ece327422240e69654b5932b0b29e7fbc40fbab3cf199bf/coverage-7.10.1-cp314-cp314t-win_amd64.whl", hash = "sha256:e88dd71e4ecbc49d9d57d064117462c43f40a21a1383507811cf834a4a620651", size = 219536, upload_time = "2025-07-27T14:13:14.718Z" }, - { url = "https://files.pythonhosted.org/packages/a6/68/7fea94b141281ed8be3d1d5c4319a97f2befc3e487ce33657fc64db2c45e/coverage-7.10.1-cp314-cp314t-win_arm64.whl", hash = "sha256:1aadfb06a30c62c2eb82322171fe1f7c288c80ca4156d46af0ca039052814bab", size = 217190, upload_time = "2025-07-27T14:13:16.85Z" }, - { url = "https://files.pythonhosted.org/packages/0f/64/922899cff2c0fd3496be83fa8b81230f5a8d82a2ad30f98370b133c2c83b/coverage-7.10.1-py3-none-any.whl", hash = "sha256:fa2a258aa6bf188eb9a8948f7102a83da7c430a0dce918dbd8b60ef8fcb772d7", size = 206597, upload_time = "2025-07-27T14:13:37.221Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/87/0e/66dbd4c6a7f0758a8d18044c048779ba21fb94856e1edcf764bd5403e710/coverage-7.10.1.tar.gz", hash = "sha256:ae2b4856f29ddfe827106794f3589949a57da6f0d38ab01e24ec35107979ba57", size = 819938 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a5/3f/b051feeb292400bd22d071fdf933b3ad389a8cef5c80c7866ed0c7414b9e/coverage-7.10.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6b7dc7f0a75a7eaa4584e5843c873c561b12602439d2351ee28c7478186c4da4", size = 214934 }, + { url = "https://files.pythonhosted.org/packages/f8/e4/a61b27d5c4c2d185bdfb0bfe9d15ab4ac4f0073032665544507429ae60eb/coverage-7.10.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:607f82389f0ecafc565813aa201a5cade04f897603750028dd660fb01797265e", size = 215173 }, + { url = "https://files.pythonhosted.org/packages/8a/01/40a6ee05b60d02d0bc53742ad4966e39dccd450aafb48c535a64390a3552/coverage-7.10.1-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:f7da31a1ba31f1c1d4d5044b7c5813878adae1f3af8f4052d679cc493c7328f4", size = 246190 }, + { url = "https://files.pythonhosted.org/packages/11/ef/a28d64d702eb583c377255047281305dc5a5cfbfb0ee36e721f78255adb6/coverage-7.10.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:51fe93f3fe4f5d8483d51072fddc65e717a175490804e1942c975a68e04bf97a", size = 248618 }, + { url = "https://files.pythonhosted.org/packages/6a/ad/73d018bb0c8317725370c79d69b5c6e0257df84a3b9b781bda27a438a3be/coverage-7.10.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3e59d00830da411a1feef6ac828b90bbf74c9b6a8e87b8ca37964925bba76dbe", size = 250081 }, + { url = "https://files.pythonhosted.org/packages/2d/dd/496adfbbb4503ebca5d5b2de8bed5ec00c0a76558ffc5b834fd404166bc9/coverage-7.10.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:924563481c27941229cb4e16eefacc35da28563e80791b3ddc5597b062a5c386", size = 247990 }, + { url = "https://files.pythonhosted.org/packages/18/3c/a9331a7982facfac0d98a4a87b36ae666fe4257d0f00961a3a9ef73e015d/coverage-7.10.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:ca79146ee421b259f8131f153102220b84d1a5e6fb9c8aed13b3badfd1796de6", size = 246191 }, + { url = "https://files.pythonhosted.org/packages/62/0c/75345895013b83f7afe92ec595e15a9a525ede17491677ceebb2ba5c3d85/coverage-7.10.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2b225a06d227f23f386fdc0eab471506d9e644be699424814acc7d114595495f", size = 247400 }, + { url = "https://files.pythonhosted.org/packages/e2/a9/98b268cfc5619ef9df1d5d34fee408ecb1542d9fd43d467e5c2f28668cd4/coverage-7.10.1-cp312-cp312-win32.whl", hash = "sha256:5ba9a8770effec5baaaab1567be916c87d8eea0c9ad11253722d86874d885eca", size = 217338 }, + { url = "https://files.pythonhosted.org/packages/fe/31/22a5440e4d1451f253c5cd69fdcead65e92ef08cd4ec237b8756dc0b20a7/coverage-7.10.1-cp312-cp312-win_amd64.whl", hash = "sha256:9eb245a8d8dd0ad73b4062135a251ec55086fbc2c42e0eb9725a9b553fba18a3", size = 218125 }, + { url = "https://files.pythonhosted.org/packages/d6/2b/40d9f0ce7ee839f08a43c5bfc9d05cec28aaa7c9785837247f96cbe490b9/coverage-7.10.1-cp312-cp312-win_arm64.whl", hash = "sha256:7718060dd4434cc719803a5e526838a5d66e4efa5dc46d2b25c21965a9c6fcc4", size = 216523 }, + { url = "https://files.pythonhosted.org/packages/ef/72/135ff5fef09b1ffe78dbe6fcf1e16b2e564cd35faeacf3d63d60d887f12d/coverage-7.10.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ebb08d0867c5a25dffa4823377292a0ffd7aaafb218b5d4e2e106378b1061e39", size = 214960 }, + { url = "https://files.pythonhosted.org/packages/b1/aa/73a5d1a6fc08ca709a8177825616aa95ee6bf34d522517c2595484a3e6c9/coverage-7.10.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f32a95a83c2e17422f67af922a89422cd24c6fa94041f083dd0bb4f6057d0bc7", size = 215220 }, + { url = "https://files.pythonhosted.org/packages/8d/40/3124fdd45ed3772a42fc73ca41c091699b38a2c3bd4f9cb564162378e8b6/coverage-7.10.1-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:c4c746d11c8aba4b9f58ca8bfc6fbfd0da4efe7960ae5540d1a1b13655ee8892", size = 245772 }, + { url = "https://files.pythonhosted.org/packages/42/62/a77b254822efa8c12ad59e8039f2bc3df56dc162ebda55e1943e35ba31a5/coverage-7.10.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:7f39edd52c23e5c7ed94e0e4bf088928029edf86ef10b95413e5ea670c5e92d7", size = 248116 }, + { url = "https://files.pythonhosted.org/packages/1d/01/8101f062f472a3a6205b458d18ef0444a63ae5d36a8a5ed5dd0f6167f4db/coverage-7.10.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ab6e19b684981d0cd968906e293d5628e89faacb27977c92f3600b201926b994", size = 249554 }, + { url = "https://files.pythonhosted.org/packages/8f/7b/e51bc61573e71ff7275a4f167aecbd16cb010aefdf54bcd8b0a133391263/coverage-7.10.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5121d8cf0eacb16133501455d216bb5f99899ae2f52d394fe45d59229e6611d0", size = 247766 }, + { url = "https://files.pythonhosted.org/packages/4b/71/1c96d66a51d4204a9d6d12df53c4071d87e110941a2a1fe94693192262f5/coverage-7.10.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:df1c742ca6f46a6f6cbcaef9ac694dc2cb1260d30a6a2f5c68c5f5bcfee1cfd7", size = 245735 }, + { url = "https://files.pythonhosted.org/packages/13/d5/efbc2ac4d35ae2f22ef6df2ca084c60e13bd9378be68655e3268c80349ab/coverage-7.10.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:40f9a38676f9c073bf4b9194707aa1eb97dca0e22cc3766d83879d72500132c7", size = 247118 }, + { url = "https://files.pythonhosted.org/packages/d1/22/073848352bec28ca65f2b6816b892fcf9a31abbef07b868487ad15dd55f1/coverage-7.10.1-cp313-cp313-win32.whl", hash = "sha256:2348631f049e884839553b9974f0821d39241c6ffb01a418efce434f7eba0fe7", size = 217381 }, + { url = "https://files.pythonhosted.org/packages/b7/df/df6a0ff33b042f000089bd11b6bb034bab073e2ab64a56e78ed882cba55d/coverage-7.10.1-cp313-cp313-win_amd64.whl", hash = "sha256:4072b31361b0d6d23f750c524f694e1a417c1220a30d3ef02741eed28520c48e", size = 218152 }, + { url = "https://files.pythonhosted.org/packages/30/e3/5085ca849a40ed6b47cdb8f65471c2f754e19390b5a12fa8abd25cbfaa8f/coverage-7.10.1-cp313-cp313-win_arm64.whl", hash = "sha256:3e31dfb8271937cab9425f19259b1b1d1f556790e98eb266009e7a61d337b6d4", size = 216559 }, + { url = "https://files.pythonhosted.org/packages/cc/93/58714efbfdeb547909feaabe1d67b2bdd59f0597060271b9c548d5efb529/coverage-7.10.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:1c4f679c6b573a5257af6012f167a45be4c749c9925fd44d5178fd641ad8bf72", size = 215677 }, + { url = "https://files.pythonhosted.org/packages/c0/0c/18eaa5897e7e8cb3f8c45e563e23e8a85686b4585e29d53cacb6bc9cb340/coverage-7.10.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:871ebe8143da284bd77b84a9136200bd638be253618765d21a1fce71006d94af", size = 215899 }, + { url = "https://files.pythonhosted.org/packages/84/c1/9d1affacc3c75b5a184c140377701bbf14fc94619367f07a269cd9e4fed6/coverage-7.10.1-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:998c4751dabf7d29b30594af416e4bf5091f11f92a8d88eb1512c7ba136d1ed7", size = 257140 }, + { url = "https://files.pythonhosted.org/packages/3d/0f/339bc6b8fa968c346df346068cca1f24bdea2ddfa93bb3dc2e7749730962/coverage-7.10.1-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:780f750a25e7749d0af6b3631759c2c14f45de209f3faaa2398312d1c7a22759", size = 259005 }, + { url = "https://files.pythonhosted.org/packages/c8/22/89390864b92ea7c909079939b71baba7e5b42a76bf327c1d615bd829ba57/coverage-7.10.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:590bdba9445df4763bdbebc928d8182f094c1f3947a8dc0fc82ef014dbdd8324", size = 261143 }, + { url = "https://files.pythonhosted.org/packages/2c/56/3d04d89017c0c41c7a71bd69b29699d919b6bbf2649b8b2091240b97dd6a/coverage-7.10.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b2df80cb6a2af86d300e70acb82e9b79dab2c1e6971e44b78dbfc1a1e736b53", size = 258735 }, + { url = "https://files.pythonhosted.org/packages/cb/40/312252c8afa5ca781063a09d931f4b9409dc91526cd0b5a2b84143ffafa2/coverage-7.10.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:d6a558c2725bfb6337bf57c1cd366c13798bfd3bfc9e3dd1f4a6f6fc95a4605f", size = 256871 }, + { url = "https://files.pythonhosted.org/packages/1f/2b/564947d5dede068215aaddb9e05638aeac079685101462218229ddea9113/coverage-7.10.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e6150d167f32f2a54690e572e0a4c90296fb000a18e9b26ab81a6489e24e78dd", size = 257692 }, + { url = "https://files.pythonhosted.org/packages/93/1b/c8a867ade85cb26d802aea2209b9c2c80613b9c122baa8c8ecea6799648f/coverage-7.10.1-cp313-cp313t-win32.whl", hash = "sha256:d946a0c067aa88be4a593aad1236493313bafaa27e2a2080bfe88db827972f3c", size = 218059 }, + { url = "https://files.pythonhosted.org/packages/a1/fe/cd4ab40570ae83a516bf5e754ea4388aeedd48e660e40c50b7713ed4f930/coverage-7.10.1-cp313-cp313t-win_amd64.whl", hash = "sha256:e37c72eaccdd5ed1130c67a92ad38f5b2af66eeff7b0abe29534225db2ef7b18", size = 219150 }, + { url = "https://files.pythonhosted.org/packages/8d/16/6e5ed5854be6d70d0c39e9cb9dd2449f2c8c34455534c32c1a508c7dbdb5/coverage-7.10.1-cp313-cp313t-win_arm64.whl", hash = "sha256:89ec0ffc215c590c732918c95cd02b55c7d0f569d76b90bb1a5e78aa340618e4", size = 217014 }, + { url = "https://files.pythonhosted.org/packages/54/8e/6d0bfe9c3d7121cf936c5f8b03e8c3da1484fb801703127dba20fb8bd3c7/coverage-7.10.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:166d89c57e877e93d8827dac32cedae6b0277ca684c6511497311249f35a280c", size = 214951 }, + { url = "https://files.pythonhosted.org/packages/f2/29/e3e51a8c653cf2174c60532aafeb5065cea0911403fa144c9abe39790308/coverage-7.10.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:bed4a2341b33cd1a7d9ffc47df4a78ee61d3416d43b4adc9e18b7d266650b83e", size = 215229 }, + { url = "https://files.pythonhosted.org/packages/e0/59/3c972080b2fa18b6c4510201f6d4dc87159d450627d062cd9ad051134062/coverage-7.10.1-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:ddca1e4f5f4c67980533df01430184c19b5359900e080248bbf4ed6789584d8b", size = 245738 }, + { url = "https://files.pythonhosted.org/packages/2e/04/fc0d99d3f809452654e958e1788454f6e27b34e43f8f8598191c8ad13537/coverage-7.10.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:37b69226001d8b7de7126cad7366b0778d36777e4d788c66991455ba817c5b41", size = 248045 }, + { url = "https://files.pythonhosted.org/packages/5e/2e/afcbf599e77e0dfbf4c97197747250d13d397d27e185b93987d9eaac053d/coverage-7.10.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b2f22102197bcb1722691296f9e589f02b616f874e54a209284dd7b9294b0b7f", size = 249666 }, + { url = "https://files.pythonhosted.org/packages/6e/ae/bc47f7f8ecb7a06cbae2bf86a6fa20f479dd902bc80f57cff7730438059d/coverage-7.10.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:1e0c768b0f9ac5839dac5cf88992a4bb459e488ee8a1f8489af4cb33b1af00f1", size = 247692 }, + { url = "https://files.pythonhosted.org/packages/b6/26/cbfa3092d31ccba8ba7647e4d25753263e818b4547eba446b113d7d1efdf/coverage-7.10.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:991196702d5e0b120a8fef2664e1b9c333a81d36d5f6bcf6b225c0cf8b0451a2", size = 245536 }, + { url = "https://files.pythonhosted.org/packages/56/77/9c68e92500e6a1c83d024a70eadcc9a173f21aadd73c4675fe64c9c43fdf/coverage-7.10.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ae8e59e5f4fd85d6ad34c2bb9d74037b5b11be072b8b7e9986beb11f957573d4", size = 246954 }, + { url = "https://files.pythonhosted.org/packages/7f/a5/ba96671c5a669672aacd9877a5987c8551501b602827b4e84256da2a30a7/coverage-7.10.1-cp314-cp314-win32.whl", hash = "sha256:042125c89cf74a074984002e165d61fe0e31c7bd40ebb4bbebf07939b5924613", size = 217616 }, + { url = "https://files.pythonhosted.org/packages/e7/3c/e1e1eb95fc1585f15a410208c4795db24a948e04d9bde818fe4eb893bc85/coverage-7.10.1-cp314-cp314-win_amd64.whl", hash = "sha256:a22c3bfe09f7a530e2c94c87ff7af867259c91bef87ed2089cd69b783af7b84e", size = 218412 }, + { url = "https://files.pythonhosted.org/packages/b0/85/7e1e5be2cb966cba95566ba702b13a572ca744fbb3779df9888213762d67/coverage-7.10.1-cp314-cp314-win_arm64.whl", hash = "sha256:ee6be07af68d9c4fca4027c70cea0c31a0f1bc9cb464ff3c84a1f916bf82e652", size = 216776 }, + { url = "https://files.pythonhosted.org/packages/62/0f/5bb8f29923141cca8560fe2217679caf4e0db643872c1945ac7d8748c2a7/coverage-7.10.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:d24fb3c0c8ff0d517c5ca5de7cf3994a4cd559cde0315201511dbfa7ab528894", size = 215698 }, + { url = "https://files.pythonhosted.org/packages/80/29/547038ffa4e8e4d9e82f7dfc6d152f75fcdc0af146913f0ba03875211f03/coverage-7.10.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1217a54cfd79be20512a67ca81c7da3f2163f51bbfd188aab91054df012154f5", size = 215902 }, + { url = "https://files.pythonhosted.org/packages/e1/8a/7aaa8fbfaed900147987a424e112af2e7790e1ac9cd92601e5bd4e1ba60a/coverage-7.10.1-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:51f30da7a52c009667e02f125737229d7d8044ad84b79db454308033a7808ab2", size = 257230 }, + { url = "https://files.pythonhosted.org/packages/e5/1d/c252b5ffac44294e23a0d79dd5acf51749b39795ccc898faeabf7bee903f/coverage-7.10.1-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:ed3718c757c82d920f1c94089066225ca2ad7f00bb904cb72b1c39ebdd906ccb", size = 259194 }, + { url = "https://files.pythonhosted.org/packages/16/ad/6c8d9f83d08f3bac2e7507534d0c48d1a4f52c18e6f94919d364edbdfa8f/coverage-7.10.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cc452481e124a819ced0c25412ea2e144269ef2f2534b862d9f6a9dae4bda17b", size = 261316 }, + { url = "https://files.pythonhosted.org/packages/d6/4e/f9bbf3a36c061e2e0e0f78369c006d66416561a33d2bee63345aee8ee65e/coverage-7.10.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:9d6f494c307e5cb9b1e052ec1a471060f1dea092c8116e642e7a23e79d9388ea", size = 258794 }, + { url = "https://files.pythonhosted.org/packages/87/82/e600bbe78eb2cb0541751d03cef9314bcd0897e8eea156219c39b685f869/coverage-7.10.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:fc0e46d86905ddd16b85991f1f4919028092b4e511689bbdaff0876bd8aab3dd", size = 256869 }, + { url = "https://files.pythonhosted.org/packages/ce/5d/2fc9a9236c5268f68ac011d97cd3a5ad16cc420535369bedbda659fdd9b7/coverage-7.10.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:80b9ccd82e30038b61fc9a692a8dc4801504689651b281ed9109f10cc9fe8b4d", size = 257765 }, + { url = "https://files.pythonhosted.org/packages/8a/05/b4e00b2bd48a2dc8e1c7d2aea7455f40af2e36484ab2ef06deb85883e9fe/coverage-7.10.1-cp314-cp314t-win32.whl", hash = "sha256:e58991a2b213417285ec866d3cd32db17a6a88061a985dbb7e8e8f13af429c47", size = 218420 }, + { url = "https://files.pythonhosted.org/packages/77/fb/d21d05f33ea27ece327422240e69654b5932b0b29e7fbc40fbab3cf199bf/coverage-7.10.1-cp314-cp314t-win_amd64.whl", hash = "sha256:e88dd71e4ecbc49d9d57d064117462c43f40a21a1383507811cf834a4a620651", size = 219536 }, + { url = "https://files.pythonhosted.org/packages/a6/68/7fea94b141281ed8be3d1d5c4319a97f2befc3e487ce33657fc64db2c45e/coverage-7.10.1-cp314-cp314t-win_arm64.whl", hash = "sha256:1aadfb06a30c62c2eb82322171fe1f7c288c80ca4156d46af0ca039052814bab", size = 217190 }, + { url = "https://files.pythonhosted.org/packages/0f/64/922899cff2c0fd3496be83fa8b81230f5a8d82a2ad30f98370b133c2c83b/coverage-7.10.1-py3-none-any.whl", hash = "sha256:fa2a258aa6bf188eb9a8948f7102a83da7c430a0dce918dbd8b60ef8fcb772d7", size = 206597 }, ] [[package]] name = "csscompressor" version = "0.9.5" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f1/2a/8c3ac3d8bc94e6de8d7ae270bb5bc437b210bb9d6d9e46630c98f4abd20c/csscompressor-0.9.5.tar.gz", hash = "sha256:afa22badbcf3120a4f392e4d22f9fff485c044a1feda4a950ecc5eba9dd31a05", size = 237808, upload_time = "2017-11-26T21:13:08.238Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f1/2a/8c3ac3d8bc94e6de8d7ae270bb5bc437b210bb9d6d9e46630c98f4abd20c/csscompressor-0.9.5.tar.gz", hash = "sha256:afa22badbcf3120a4f392e4d22f9fff485c044a1feda4a950ecc5eba9dd31a05", size = 237808 } [[package]] name = "debugpy" version = "1.8.14" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/bd/75/087fe07d40f490a78782ff3b0a30e3968936854105487decdb33446d4b0e/debugpy-1.8.14.tar.gz", hash = "sha256:7cd287184318416850aa8b60ac90105837bb1e59531898c07569d197d2ed5322", size = 1641444, upload_time = "2025-04-10T19:46:10.981Z" } +sdist = { url = "https://files.pythonhosted.org/packages/bd/75/087fe07d40f490a78782ff3b0a30e3968936854105487decdb33446d4b0e/debugpy-1.8.14.tar.gz", hash = "sha256:7cd287184318416850aa8b60ac90105837bb1e59531898c07569d197d2ed5322", size = 1641444 } wheels = [ - { url = "https://files.pythonhosted.org/packages/d9/2a/ac2df0eda4898f29c46eb6713a5148e6f8b2b389c8ec9e425a4a1d67bf07/debugpy-1.8.14-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:8899c17920d089cfa23e6005ad9f22582fd86f144b23acb9feeda59e84405b84", size = 2501268, upload_time = "2025-04-10T19:46:26.044Z" }, - { url = "https://files.pythonhosted.org/packages/10/53/0a0cb5d79dd9f7039169f8bf94a144ad3efa52cc519940b3b7dde23bcb89/debugpy-1.8.14-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6bb5c0dcf80ad5dbc7b7d6eac484e2af34bdacdf81df09b6a3e62792b722826", size = 4221077, upload_time = "2025-04-10T19:46:27.464Z" }, - { url = "https://files.pythonhosted.org/packages/f8/d5/84e01821f362327bf4828728aa31e907a2eca7c78cd7c6ec062780d249f8/debugpy-1.8.14-cp312-cp312-win32.whl", hash = "sha256:281d44d248a0e1791ad0eafdbbd2912ff0de9eec48022a5bfbc332957487ed3f", size = 5255127, upload_time = "2025-04-10T19:46:29.467Z" }, - { url = "https://files.pythonhosted.org/packages/33/16/1ed929d812c758295cac7f9cf3dab5c73439c83d9091f2d91871e648093e/debugpy-1.8.14-cp312-cp312-win_amd64.whl", hash = "sha256:5aa56ef8538893e4502a7d79047fe39b1dae08d9ae257074c6464a7b290b806f", size = 5297249, upload_time = "2025-04-10T19:46:31.538Z" }, - { url = "https://files.pythonhosted.org/packages/4d/e4/395c792b243f2367d84202dc33689aa3d910fb9826a7491ba20fc9e261f5/debugpy-1.8.14-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:329a15d0660ee09fec6786acdb6e0443d595f64f5d096fc3e3ccf09a4259033f", size = 2485676, upload_time = "2025-04-10T19:46:32.96Z" }, - { url = "https://files.pythonhosted.org/packages/ba/f1/6f2ee3f991327ad9e4c2f8b82611a467052a0fb0e247390192580e89f7ff/debugpy-1.8.14-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f920c7f9af409d90f5fd26e313e119d908b0dd2952c2393cd3247a462331f15", size = 4217514, upload_time = "2025-04-10T19:46:34.336Z" }, - { url = "https://files.pythonhosted.org/packages/79/28/b9d146f8f2dc535c236ee09ad3e5ac899adb39d7a19b49f03ac95d216beb/debugpy-1.8.14-cp313-cp313-win32.whl", hash = "sha256:3784ec6e8600c66cbdd4ca2726c72d8ca781e94bce2f396cc606d458146f8f4e", size = 5254756, upload_time = "2025-04-10T19:46:36.199Z" }, - { url = "https://files.pythonhosted.org/packages/e0/62/a7b4a57013eac4ccaef6977966e6bec5c63906dd25a86e35f155952e29a1/debugpy-1.8.14-cp313-cp313-win_amd64.whl", hash = "sha256:684eaf43c95a3ec39a96f1f5195a7ff3d4144e4a18d69bb66beeb1a6de605d6e", size = 5297119, upload_time = "2025-04-10T19:46:38.141Z" }, - { url = "https://files.pythonhosted.org/packages/97/1a/481f33c37ee3ac8040d3d51fc4c4e4e7e61cb08b8bc8971d6032acc2279f/debugpy-1.8.14-py2.py3-none-any.whl", hash = "sha256:5cd9a579d553b6cb9759a7908a41988ee6280b961f24f63336835d9418216a20", size = 5256230, upload_time = "2025-04-10T19:46:54.077Z" }, + { url = "https://files.pythonhosted.org/packages/d9/2a/ac2df0eda4898f29c46eb6713a5148e6f8b2b389c8ec9e425a4a1d67bf07/debugpy-1.8.14-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:8899c17920d089cfa23e6005ad9f22582fd86f144b23acb9feeda59e84405b84", size = 2501268 }, + { url = "https://files.pythonhosted.org/packages/10/53/0a0cb5d79dd9f7039169f8bf94a144ad3efa52cc519940b3b7dde23bcb89/debugpy-1.8.14-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6bb5c0dcf80ad5dbc7b7d6eac484e2af34bdacdf81df09b6a3e62792b722826", size = 4221077 }, + { url = "https://files.pythonhosted.org/packages/f8/d5/84e01821f362327bf4828728aa31e907a2eca7c78cd7c6ec062780d249f8/debugpy-1.8.14-cp312-cp312-win32.whl", hash = "sha256:281d44d248a0e1791ad0eafdbbd2912ff0de9eec48022a5bfbc332957487ed3f", size = 5255127 }, + { url = "https://files.pythonhosted.org/packages/33/16/1ed929d812c758295cac7f9cf3dab5c73439c83d9091f2d91871e648093e/debugpy-1.8.14-cp312-cp312-win_amd64.whl", hash = "sha256:5aa56ef8538893e4502a7d79047fe39b1dae08d9ae257074c6464a7b290b806f", size = 5297249 }, + { url = "https://files.pythonhosted.org/packages/4d/e4/395c792b243f2367d84202dc33689aa3d910fb9826a7491ba20fc9e261f5/debugpy-1.8.14-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:329a15d0660ee09fec6786acdb6e0443d595f64f5d096fc3e3ccf09a4259033f", size = 2485676 }, + { url = "https://files.pythonhosted.org/packages/ba/f1/6f2ee3f991327ad9e4c2f8b82611a467052a0fb0e247390192580e89f7ff/debugpy-1.8.14-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f920c7f9af409d90f5fd26e313e119d908b0dd2952c2393cd3247a462331f15", size = 4217514 }, + { url = "https://files.pythonhosted.org/packages/79/28/b9d146f8f2dc535c236ee09ad3e5ac899adb39d7a19b49f03ac95d216beb/debugpy-1.8.14-cp313-cp313-win32.whl", hash = "sha256:3784ec6e8600c66cbdd4ca2726c72d8ca781e94bce2f396cc606d458146f8f4e", size = 5254756 }, + { url = "https://files.pythonhosted.org/packages/e0/62/a7b4a57013eac4ccaef6977966e6bec5c63906dd25a86e35f155952e29a1/debugpy-1.8.14-cp313-cp313-win_amd64.whl", hash = "sha256:684eaf43c95a3ec39a96f1f5195a7ff3d4144e4a18d69bb66beeb1a6de605d6e", size = 5297119 }, + { url = "https://files.pythonhosted.org/packages/97/1a/481f33c37ee3ac8040d3d51fc4c4e4e7e61cb08b8bc8971d6032acc2279f/debugpy-1.8.14-py2.py3-none-any.whl", hash = "sha256:5cd9a579d553b6cb9759a7908a41988ee6280b961f24f63336835d9418216a20", size = 5256230 }, ] [[package]] name = "decorator" version = "5.2.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/43/fa/6d96a0978d19e17b68d634497769987b16c8f4cd0a7a05048bec693caa6b/decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360", size = 56711, upload_time = "2025-02-24T04:41:34.073Z" } +sdist = { url = "https://files.pythonhosted.org/packages/43/fa/6d96a0978d19e17b68d634497769987b16c8f4cd0a7a05048bec693caa6b/decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360", size = 56711 } wheels = [ - { url = "https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a", size = 9190, upload_time = "2025-02-24T04:41:32.565Z" }, + { url = "https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a", size = 9190 }, ] [[package]] name = "distlib" version = "0.3.9" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0d/dd/1bec4c5ddb504ca60fc29472f3d27e8d4da1257a854e1d96742f15c1d02d/distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403", size = 613923, upload_time = "2024-10-09T18:35:47.551Z" } +sdist = { url = "https://files.pythonhosted.org/packages/0d/dd/1bec4c5ddb504ca60fc29472f3d27e8d4da1257a854e1d96742f15c1d02d/distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403", size = 613923 } wheels = [ - { url = "https://files.pythonhosted.org/packages/91/a1/cf2472db20f7ce4a6be1253a81cfdf85ad9c7885ffbed7047fb72c24cf87/distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87", size = 468973, upload_time = "2024-10-09T18:35:44.272Z" }, + { url = "https://files.pythonhosted.org/packages/91/a1/cf2472db20f7ce4a6be1253a81cfdf85ad9c7885ffbed7047fb72c24cf87/distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87", size = 468973 }, ] [[package]] name = "et-xmlfile" version = "2.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d3/38/af70d7ab1ae9d4da450eeec1fa3918940a5fafb9055e934af8d6eb0c2313/et_xmlfile-2.0.0.tar.gz", hash = "sha256:dab3f4764309081ce75662649be815c4c9081e88f0837825f90fd28317d4da54", size = 17234, upload_time = "2024-10-25T17:25:40.039Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d3/38/af70d7ab1ae9d4da450eeec1fa3918940a5fafb9055e934af8d6eb0c2313/et_xmlfile-2.0.0.tar.gz", hash = "sha256:dab3f4764309081ce75662649be815c4c9081e88f0837825f90fd28317d4da54", size = 17234 } wheels = [ - { url = "https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl", hash = "sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa", size = 18059, upload_time = "2024-10-25T17:25:39.051Z" }, + { url = "https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl", hash = "sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa", size = 18059 }, ] [[package]] name = "execnet" version = "2.1.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/bb/ff/b4c0dc78fbe20c3e59c0c7334de0c27eb4001a2b2017999af398bf730817/execnet-2.1.1.tar.gz", hash = "sha256:5189b52c6121c24feae288166ab41b32549c7e2348652736540b9e6e7d4e72e3", size = 166524, upload_time = "2024-04-08T09:04:19.245Z" } +sdist = { url = "https://files.pythonhosted.org/packages/bb/ff/b4c0dc78fbe20c3e59c0c7334de0c27eb4001a2b2017999af398bf730817/execnet-2.1.1.tar.gz", hash = "sha256:5189b52c6121c24feae288166ab41b32549c7e2348652736540b9e6e7d4e72e3", size = 166524 } wheels = [ - { url = "https://files.pythonhosted.org/packages/43/09/2aea36ff60d16dd8879bdb2f5b3ee0ba8d08cbbdcdfe870e695ce3784385/execnet-2.1.1-py3-none-any.whl", hash = "sha256:26dee51f1b80cebd6d0ca8e74dd8745419761d3bef34163928cbebbdc4749fdc", size = 40612, upload_time = "2024-04-08T09:04:17.414Z" }, + { url = "https://files.pythonhosted.org/packages/43/09/2aea36ff60d16dd8879bdb2f5b3ee0ba8d08cbbdcdfe870e695ce3784385/execnet-2.1.1-py3-none-any.whl", hash = "sha256:26dee51f1b80cebd6d0ca8e74dd8745419761d3bef34163928cbebbdc4749fdc", size = 40612 }, ] [[package]] name = "executing" version = "2.2.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/91/50/a9d80c47ff289c611ff12e63f7c5d13942c65d68125160cefd768c73e6e4/executing-2.2.0.tar.gz", hash = "sha256:5d108c028108fe2551d1a7b2e8b713341e2cb4fc0aa7dcf966fa4327a5226755", size = 978693, upload_time = "2025-01-22T15:41:29.403Z" } +sdist = { url = "https://files.pythonhosted.org/packages/91/50/a9d80c47ff289c611ff12e63f7c5d13942c65d68125160cefd768c73e6e4/executing-2.2.0.tar.gz", hash = "sha256:5d108c028108fe2551d1a7b2e8b713341e2cb4fc0aa7dcf966fa4327a5226755", size = 978693 } wheels = [ - { url = "https://files.pythonhosted.org/packages/7b/8f/c4d9bafc34ad7ad5d8dc16dd1347ee0e507a52c3adb6bfa8887e1c6a26ba/executing-2.2.0-py2.py3-none-any.whl", hash = "sha256:11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa", size = 26702, upload_time = "2025-01-22T15:41:25.929Z" }, + { url = "https://files.pythonhosted.org/packages/7b/8f/c4d9bafc34ad7ad5d8dc16dd1347ee0e507a52c3adb6bfa8887e1c6a26ba/executing-2.2.0-py2.py3-none-any.whl", hash = "sha256:11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa", size = 26702 }, ] [[package]] name = "filelock" version = "3.18.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0a/10/c23352565a6544bdc5353e0b15fc1c563352101f30e24bf500207a54df9a/filelock-3.18.0.tar.gz", hash = "sha256:adbc88eabb99d2fec8c9c1b229b171f18afa655400173ddc653d5d01501fb9f2", size = 18075, upload_time = "2025-03-14T07:11:40.47Z" } +sdist = { url = "https://files.pythonhosted.org/packages/0a/10/c23352565a6544bdc5353e0b15fc1c563352101f30e24bf500207a54df9a/filelock-3.18.0.tar.gz", hash = "sha256:adbc88eabb99d2fec8c9c1b229b171f18afa655400173ddc653d5d01501fb9f2", size = 18075 } wheels = [ - { url = "https://files.pythonhosted.org/packages/4d/36/2a115987e2d8c300a974597416d9de88f2444426de9571f4b59b2cca3acc/filelock-3.18.0-py3-none-any.whl", hash = "sha256:c401f4f8377c4464e6db25fff06205fd89bdd83b65eb0488ed1b160f780e21de", size = 16215, upload_time = "2025-03-14T07:11:39.145Z" }, + { url = "https://files.pythonhosted.org/packages/4d/36/2a115987e2d8c300a974597416d9de88f2444426de9571f4b59b2cca3acc/filelock-3.18.0-py3-none-any.whl", hash = "sha256:c401f4f8377c4464e6db25fff06205fd89bdd83b65eb0488ed1b160f780e21de", size = 16215 }, ] [[package]] @@ -371,9 +371,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/55/b0/8a21e330561c65653d010ef112bf38f60890051d244ede197ddaa08e50c1/flexcache-0.3.tar.gz", hash = "sha256:18743bd5a0621bfe2cf8d519e4c3bfdf57a269c15d1ced3fb4b64e0ff4600656", size = 15816, upload_time = "2024-03-09T03:21:07.555Z" } +sdist = { url = "https://files.pythonhosted.org/packages/55/b0/8a21e330561c65653d010ef112bf38f60890051d244ede197ddaa08e50c1/flexcache-0.3.tar.gz", hash = "sha256:18743bd5a0621bfe2cf8d519e4c3bfdf57a269c15d1ced3fb4b64e0ff4600656", size = 15816 } wheels = [ - { url = "https://files.pythonhosted.org/packages/27/cd/c883e1a7c447479d6e13985565080e3fea88ab5a107c21684c813dba1875/flexcache-0.3-py3-none-any.whl", hash = "sha256:d43c9fea82336af6e0115e308d9d33a185390b8346a017564611f1466dcd2e32", size = 13263, upload_time = "2024-03-09T03:21:05.635Z" }, + { url = "https://files.pythonhosted.org/packages/27/cd/c883e1a7c447479d6e13985565080e3fea88ab5a107c21684c813dba1875/flexcache-0.3-py3-none-any.whl", hash = "sha256:d43c9fea82336af6e0115e308d9d33a185390b8346a017564611f1466dcd2e32", size = 13263 }, ] [[package]] @@ -383,9 +383,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/82/99/b4de7e39e8eaf8207ba1a8fa2241dd98b2ba72ae6e16960d8351736d8702/flexparser-0.4.tar.gz", hash = "sha256:266d98905595be2ccc5da964fe0a2c3526fbbffdc45b65b3146d75db992ef6b2", size = 31799, upload_time = "2024-11-07T02:00:56.249Z" } +sdist = { url = "https://files.pythonhosted.org/packages/82/99/b4de7e39e8eaf8207ba1a8fa2241dd98b2ba72ae6e16960d8351736d8702/flexparser-0.4.tar.gz", hash = "sha256:266d98905595be2ccc5da964fe0a2c3526fbbffdc45b65b3146d75db992ef6b2", size = 31799 } wheels = [ - { url = "https://files.pythonhosted.org/packages/fe/5e/3be305568fe5f34448807976dc82fc151d76c3e0e03958f34770286278c1/flexparser-0.4-py3-none-any.whl", hash = "sha256:3738b456192dcb3e15620f324c447721023c0293f6af9955b481e91d00179846", size = 27625, upload_time = "2024-11-07T02:00:54.523Z" }, + { url = "https://files.pythonhosted.org/packages/fe/5e/3be305568fe5f34448807976dc82fc151d76c3e0e03958f34770286278c1/flexparser-0.4-py3-none-any.whl", hash = "sha256:3738b456192dcb3e15620f324c447721023c0293f6af9955b481e91d00179846", size = 27625 }, ] [[package]] @@ -413,20 +413,20 @@ dependencies = [ { name = "typing-extensions" }, { name = "validators" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/11/d0/c94675a1c1b8c12fd68489e2b4a924f80a2b122199cd986c58a5136197d2/frictionless-5.18.1.tar.gz", hash = "sha256:daeaf55f896eeb52b43e62600466af9528fe0aeeebd28b1b917e13322f370a8b", size = 74372478, upload_time = "2025-03-25T21:32:50.081Z" } +sdist = { url = "https://files.pythonhosted.org/packages/11/d0/c94675a1c1b8c12fd68489e2b4a924f80a2b122199cd986c58a5136197d2/frictionless-5.18.1.tar.gz", hash = "sha256:daeaf55f896eeb52b43e62600466af9528fe0aeeebd28b1b917e13322f370a8b", size = 74372478 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a9/7a/dac76d31584bb4f874ae860490c9465f5b59bd8c110f68fbbb07aba48845/frictionless-5.18.1-py3-none-any.whl", hash = "sha256:3f4c87469a89bdb88e9cc318088553a26f3d14839098f95c183ea01fc89628dd", size = 531615, upload_time = "2025-03-25T21:32:45.534Z" }, + { url = "https://files.pythonhosted.org/packages/a9/7a/dac76d31584bb4f874ae860490c9465f5b59bd8c110f68fbbb07aba48845/frictionless-5.18.1-py3-none-any.whl", hash = "sha256:3f4c87469a89bdb88e9cc318088553a26f3d14839098f95c183ea01fc89628dd", size = 531615 }, ] [[package]] name = "frozendict" version = "2.4.6" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/bb/59/19eb300ba28e7547538bdf603f1c6c34793240a90e1a7b61b65d8517e35e/frozendict-2.4.6.tar.gz", hash = "sha256:df7cd16470fbd26fc4969a208efadc46319334eb97def1ddf48919b351192b8e", size = 316416, upload_time = "2024-10-13T12:15:32.449Z" } +sdist = { url = "https://files.pythonhosted.org/packages/bb/59/19eb300ba28e7547538bdf603f1c6c34793240a90e1a7b61b65d8517e35e/frozendict-2.4.6.tar.gz", hash = "sha256:df7cd16470fbd26fc4969a208efadc46319334eb97def1ddf48919b351192b8e", size = 316416 } wheels = [ - { url = "https://files.pythonhosted.org/packages/04/13/d9839089b900fa7b479cce495d62110cddc4bd5630a04d8469916c0e79c5/frozendict-2.4.6-py311-none-any.whl", hash = "sha256:d065db6a44db2e2375c23eac816f1a022feb2fa98cbb50df44a9e83700accbea", size = 16148, upload_time = "2024-10-13T12:15:26.839Z" }, - { url = "https://files.pythonhosted.org/packages/ba/d0/d482c39cee2ab2978a892558cf130681d4574ea208e162da8958b31e9250/frozendict-2.4.6-py312-none-any.whl", hash = "sha256:49344abe90fb75f0f9fdefe6d4ef6d4894e640fadab71f11009d52ad97f370b9", size = 16146, upload_time = "2024-10-13T12:15:28.16Z" }, - { url = "https://files.pythonhosted.org/packages/a5/8e/b6bf6a0de482d7d7d7a2aaac8fdc4a4d0bb24a809f5ddd422aa7060eb3d2/frozendict-2.4.6-py313-none-any.whl", hash = "sha256:7134a2bb95d4a16556bb5f2b9736dceb6ea848fa5b6f3f6c2d6dba93b44b4757", size = 16146, upload_time = "2024-10-13T12:15:29.495Z" }, + { url = "https://files.pythonhosted.org/packages/04/13/d9839089b900fa7b479cce495d62110cddc4bd5630a04d8469916c0e79c5/frozendict-2.4.6-py311-none-any.whl", hash = "sha256:d065db6a44db2e2375c23eac816f1a022feb2fa98cbb50df44a9e83700accbea", size = 16148 }, + { url = "https://files.pythonhosted.org/packages/ba/d0/d482c39cee2ab2978a892558cf130681d4574ea208e162da8958b31e9250/frozendict-2.4.6-py312-none-any.whl", hash = "sha256:49344abe90fb75f0f9fdefe6d4ef6d4894e640fadab71f11009d52ad97f370b9", size = 16146 }, + { url = "https://files.pythonhosted.org/packages/a5/8e/b6bf6a0de482d7d7d7a2aaac8fdc4a4d0bb24a809f5ddd422aa7060eb3d2/frozendict-2.4.6-py313-none-any.whl", hash = "sha256:7134a2bb95d4a16556bb5f2b9736dceb6ea848fa5b6f3f6c2d6dba93b44b4757", size = 16146 }, ] [[package]] @@ -436,9 +436,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "python-dateutil" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d9/29/d40217cbe2f6b1359e00c6c307bb3fc876ba74068cbab3dde77f03ca0dc4/ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343", size = 10943, upload_time = "2022-05-02T15:47:16.11Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d9/29/d40217cbe2f6b1359e00c6c307bb3fc876ba74068cbab3dde77f03ca0dc4/ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343", size = 10943 } wheels = [ - { url = "https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619", size = 11034, upload_time = "2022-05-02T15:47:14.552Z" }, + { url = "https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619", size = 11034 }, ] [[package]] @@ -448,9 +448,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "smmap" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/72/94/63b0fc47eb32792c7ba1fe1b694daec9a63620db1e313033d18140c2320a/gitdb-4.0.12.tar.gz", hash = "sha256:5ef71f855d191a3326fcfbc0d5da835f26b13fbcba60c32c21091c349ffdb571", size = 394684, upload_time = "2025-01-02T07:20:46.413Z" } +sdist = { url = "https://files.pythonhosted.org/packages/72/94/63b0fc47eb32792c7ba1fe1b694daec9a63620db1e313033d18140c2320a/gitdb-4.0.12.tar.gz", hash = "sha256:5ef71f855d191a3326fcfbc0d5da835f26b13fbcba60c32c21091c349ffdb571", size = 394684 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl", hash = "sha256:67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf", size = 62794, upload_time = "2025-01-02T07:20:43.624Z" }, + { url = "https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl", hash = "sha256:67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf", size = 62794 }, ] [[package]] @@ -460,9 +460,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "gitdb" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c0/89/37df0b71473153574a5cdef8f242de422a0f5d26d7a9e231e6f169b4ad14/gitpython-3.1.44.tar.gz", hash = "sha256:c87e30b26253bf5418b01b0660f818967f3c503193838337fe5e573331249269", size = 214196, upload_time = "2025-01-02T07:32:43.59Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c0/89/37df0b71473153574a5cdef8f242de422a0f5d26d7a9e231e6f169b4ad14/gitpython-3.1.44.tar.gz", hash = "sha256:c87e30b26253bf5418b01b0660f818967f3c503193838337fe5e573331249269", size = 214196 } wheels = [ - { url = "https://files.pythonhosted.org/packages/1d/9a/4114a9057db2f1462d5c8f8390ab7383925fe1ac012eaa42402ad65c2963/GitPython-3.1.44-py3-none-any.whl", hash = "sha256:9e0e10cda9bed1ee64bc9a6de50e7e38a9c9943241cd7f585f6df3ed28011110", size = 207599, upload_time = "2025-01-02T07:32:40.731Z" }, + { url = "https://files.pythonhosted.org/packages/1d/9a/4114a9057db2f1462d5c8f8390ab7383925fe1ac012eaa42402ad65c2963/GitPython-3.1.44-py3-none-any.whl", hash = "sha256:9e0e10cda9bed1ee64bc9a6de50e7e38a9c9943241cd7f585f6df3ed28011110", size = 207599 }, ] [[package]] @@ -472,9 +472,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a9/3e/5aa9a61f7c3c47b0b52a1d930302992229d191bf4bc76447b324b731510a/griffe-1.7.3.tar.gz", hash = "sha256:52ee893c6a3a968b639ace8015bec9d36594961e156e23315c8e8e51401fa50b", size = 395137, upload_time = "2025-04-23T11:29:09.147Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a9/3e/5aa9a61f7c3c47b0b52a1d930302992229d191bf4bc76447b324b731510a/griffe-1.7.3.tar.gz", hash = "sha256:52ee893c6a3a968b639ace8015bec9d36594961e156e23315c8e8e51401fa50b", size = 395137 } wheels = [ - { url = "https://files.pythonhosted.org/packages/58/c6/5c20af38c2a57c15d87f7f38bee77d63c1d2a3689f74fefaf35915dd12b2/griffe-1.7.3-py3-none-any.whl", hash = "sha256:c6b3ee30c2f0f17f30bcdef5068d6ab7a2a4f1b8bf1a3e74b56fffd21e1c5f75", size = 129303, upload_time = "2025-04-23T11:29:07.145Z" }, + { url = "https://files.pythonhosted.org/packages/58/c6/5c20af38c2a57c15d87f7f38bee77d63c1d2a3689f74fefaf35915dd12b2/griffe-1.7.3-py3-none-any.whl", hash = "sha256:c6b3ee30c2f0f17f30bcdef5068d6ab7a2a4f1b8bf1a3e74b56fffd21e1c5f75", size = 129303 }, ] [[package]] @@ -486,9 +486,9 @@ dependencies = [ { name = "libhxl" }, { name = "tenacity" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/88/96/ac55b204699cd216a22a943f64aafac32bba818f624a5d44879d60368fad/hdx_python_country-3.9.6.tar.gz", hash = "sha256:7791f4b9c5ae3e62e82795c266a3ca6ee23c7bab706c91533844edf2ebd9bb18", size = 529232, upload_time = "2025-07-09T22:56:32.162Z" } +sdist = { url = "https://files.pythonhosted.org/packages/88/96/ac55b204699cd216a22a943f64aafac32bba818f624a5d44879d60368fad/hdx_python_country-3.9.6.tar.gz", hash = "sha256:7791f4b9c5ae3e62e82795c266a3ca6ee23c7bab706c91533844edf2ebd9bb18", size = 529232 } wheels = [ - { url = "https://files.pythonhosted.org/packages/45/90/646b56ec12df459799510d6d0869ada210ad9f765ad104e50dae4867eb50/hdx_python_country-3.9.6-py3-none-any.whl", hash = "sha256:4c1833bdf3cbd14dfff0146e0bdcae5763931d344fce5f1b42493dc8751e3d4a", size = 55554, upload_time = "2025-07-09T22:56:30.128Z" }, + { url = "https://files.pythonhosted.org/packages/45/90/646b56ec12df459799510d6d0869ada210ad9f765ad104e50dae4867eb50/hdx_python_country-3.9.6-py3-none-any.whl", hash = "sha256:4c1833bdf3cbd14dfff0146e0bdcae5763931d344fce5f1b42493dc8751e3d4a", size = 55554 }, ] [[package]] @@ -511,9 +511,9 @@ dependencies = [ { name = "xlsx2csv" }, { name = "xlwt" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/66/de/b812b6b242f47db98ed043b7f3211c81443f0e59959377e97a93915331c0/hdx_python_utilities-3.8.7.tar.gz", hash = "sha256:41212cd5b682777d393ee991b546f1b4326665d981714a829e5483101fd15a60", size = 656009, upload_time = "2025-05-14T02:31:28.578Z" } +sdist = { url = "https://files.pythonhosted.org/packages/66/de/b812b6b242f47db98ed043b7f3211c81443f0e59959377e97a93915331c0/hdx_python_utilities-3.8.7.tar.gz", hash = "sha256:41212cd5b682777d393ee991b546f1b4326665d981714a829e5483101fd15a60", size = 656009 } wheels = [ - { url = "https://files.pythonhosted.org/packages/db/38/44f2a0b83e103bb3d47dbc66dfaa4aaa65c34c60fd26d5445fb2bbd3c09a/hdx_python_utilities-3.8.7-py3-none-any.whl", hash = "sha256:47e67810e81a481504b8653c429b31b8c237da594dc27604075c8e79077c8640", size = 60787, upload_time = "2025-05-14T02:31:26.794Z" }, + { url = "https://files.pythonhosted.org/packages/db/38/44f2a0b83e103bb3d47dbc66dfaa4aaa65c34c60fd26d5445fb2bbd3c09a/hdx_python_utilities-3.8.7-py3-none-any.whl", hash = "sha256:47e67810e81a481504b8653c429b31b8c237da594dc27604075c8e79077c8640", size = 60787 }, ] [[package]] @@ -521,75 +521,75 @@ name = "htmlmin2" version = "0.1.13" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/be/31/a76f4bfa885f93b8167cb4c85cf32b54d1f64384d0b897d45bc6d19b7b45/htmlmin2-0.1.13-py3-none-any.whl", hash = "sha256:75609f2a42e64f7ce57dbff28a39890363bde9e7e5885db633317efbdf8c79a2", size = 34486, upload_time = "2023-03-14T21:28:30.388Z" }, + { url = "https://files.pythonhosted.org/packages/be/31/a76f4bfa885f93b8167cb4c85cf32b54d1f64384d0b897d45bc6d19b7b45/htmlmin2-0.1.13-py3-none-any.whl", hash = "sha256:75609f2a42e64f7ce57dbff28a39890363bde9e7e5885db633317efbdf8c79a2", size = 34486 }, ] [[package]] name = "humanize" version = "4.12.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/22/d1/bbc4d251187a43f69844f7fd8941426549bbe4723e8ff0a7441796b0789f/humanize-4.12.3.tar.gz", hash = "sha256:8430be3a615106fdfceb0b2c1b41c4c98c6b0fc5cc59663a5539b111dd325fb0", size = 80514, upload_time = "2025-04-30T11:51:07.98Z" } +sdist = { url = "https://files.pythonhosted.org/packages/22/d1/bbc4d251187a43f69844f7fd8941426549bbe4723e8ff0a7441796b0789f/humanize-4.12.3.tar.gz", hash = "sha256:8430be3a615106fdfceb0b2c1b41c4c98c6b0fc5cc59663a5539b111dd325fb0", size = 80514 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/1e/62a2ec3104394a2975a2629eec89276ede9dbe717092f6966fcf963e1bf0/humanize-4.12.3-py3-none-any.whl", hash = "sha256:2cbf6370af06568fa6d2da77c86edb7886f3160ecd19ee1ffef07979efc597f6", size = 128487, upload_time = "2025-04-30T11:51:06.468Z" }, + { url = "https://files.pythonhosted.org/packages/a0/1e/62a2ec3104394a2975a2629eec89276ede9dbe717092f6966fcf963e1bf0/humanize-4.12.3-py3-none-any.whl", hash = "sha256:2cbf6370af06568fa6d2da77c86edb7886f3160ecd19ee1ffef07979efc597f6", size = 128487 }, ] [[package]] name = "identify" version = "2.6.12" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a2/88/d193a27416618628a5eea64e3223acd800b40749a96ffb322a9b55a49ed1/identify-2.6.12.tar.gz", hash = "sha256:d8de45749f1efb108badef65ee8386f0f7bb19a7f26185f74de6367bffbaf0e6", size = 99254, upload_time = "2025-05-23T20:37:53.3Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/88/d193a27416618628a5eea64e3223acd800b40749a96ffb322a9b55a49ed1/identify-2.6.12.tar.gz", hash = "sha256:d8de45749f1efb108badef65ee8386f0f7bb19a7f26185f74de6367bffbaf0e6", size = 99254 } wheels = [ - { url = "https://files.pythonhosted.org/packages/7a/cd/18f8da995b658420625f7ef13f037be53ae04ec5ad33f9b718240dcfd48c/identify-2.6.12-py2.py3-none-any.whl", hash = "sha256:ad9672d5a72e0d2ff7c5c8809b62dfa60458626352fb0eb7b55e69bdc45334a2", size = 99145, upload_time = "2025-05-23T20:37:51.495Z" }, + { url = "https://files.pythonhosted.org/packages/7a/cd/18f8da995b658420625f7ef13f037be53ae04ec5ad33f9b718240dcfd48c/identify-2.6.12-py2.py3-none-any.whl", hash = "sha256:ad9672d5a72e0d2ff7c5c8809b62dfa60458626352fb0eb7b55e69bdc45334a2", size = 99145 }, ] [[package]] name = "idna" version = "3.10" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490, upload_time = "2024-09-15T18:07:39.745Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490 } wheels = [ - { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442, upload_time = "2024-09-15T18:07:37.964Z" }, + { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 }, ] [[package]] name = "ijson" version = "3.4.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a3/4f/1cfeada63f5fce87536651268ddf5cca79b8b4bbb457aee4e45777964a0a/ijson-3.4.0.tar.gz", hash = "sha256:5f74dcbad9d592c428d3ca3957f7115a42689ee7ee941458860900236ae9bb13", size = 65782, upload_time = "2025-05-08T02:37:20.135Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f8/ec/317ee5b2d13e50448833ead3aa906659a32b376191f6abc2a7c6112d2b27/ijson-3.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:956b148f88259a80a9027ffbe2d91705fae0c004fbfba3e5a24028fbe72311a9", size = 87212, upload_time = "2025-05-08T02:35:51.835Z" }, - { url = "https://files.pythonhosted.org/packages/f8/43/b06c96ced30cacecc5d518f89b0fd1c98c294a30ff88848b70ed7b7f72a1/ijson-3.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:06b89960f5c721106394c7fba5760b3f67c515b8eb7d80f612388f5eca2f4621", size = 59175, upload_time = "2025-05-08T02:35:52.988Z" }, - { url = "https://files.pythonhosted.org/packages/e9/df/b4aeafb7ecde463130840ee9be36130823ec94a00525049bf700883378b8/ijson-3.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9a0bb591cf250dd7e9dfab69d634745a7f3272d31cfe879f9156e0a081fd97ee", size = 59011, upload_time = "2025-05-08T02:35:54.394Z" }, - { url = "https://files.pythonhosted.org/packages/e3/7c/a80b8e361641609507f62022089626d4b8067f0826f51e1c09e4ba86eba8/ijson-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:72e92de999977f4c6b660ffcf2b8d59604ccd531edcbfde05b642baf283e0de8", size = 146094, upload_time = "2025-05-08T02:35:55.601Z" }, - { url = "https://files.pythonhosted.org/packages/01/44/fa416347b9a802e3646c6ff377fc3278bd7d6106e17beb339514b6a3184e/ijson-3.4.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e9602157a5b869d44b6896e64f502c712a312fcde044c2e586fccb85d3e316e", size = 137903, upload_time = "2025-05-08T02:35:56.814Z" }, - { url = "https://files.pythonhosted.org/packages/24/c6/41a9ad4d42df50ff6e70fdce79b034f09b914802737ebbdc141153d8d791/ijson-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e83660edb931a425b7ff662eb49db1f10d30ca6d4d350e5630edbed098bc01", size = 148339, upload_time = "2025-05-08T02:35:58.595Z" }, - { url = "https://files.pythonhosted.org/packages/5f/6f/7d01efda415b8502dce67e067ed9e8a124f53e763002c02207e542e1a2f1/ijson-3.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:49bf8eac1c7b7913073865a859c215488461f7591b4fa6a33c14b51cb73659d0", size = 149383, upload_time = "2025-05-08T02:36:00.197Z" }, - { url = "https://files.pythonhosted.org/packages/95/6c/0d67024b9ecb57916c5e5ab0350251c9fe2f86dc9c8ca2b605c194bdad6a/ijson-3.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:160b09273cb42019f1811469508b0a057d19f26434d44752bde6f281da6d3f32", size = 141580, upload_time = "2025-05-08T02:36:01.998Z" }, - { url = "https://files.pythonhosted.org/packages/06/43/e10edcc1c6a3b619294de835e7678bfb3a1b8a75955f3689fd66a1e9e7b4/ijson-3.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2019ff4e6f354aa00c76c8591bd450899111c61f2354ad55cc127e2ce2492c44", size = 150280, upload_time = "2025-05-08T02:36:03.926Z" }, - { url = "https://files.pythonhosted.org/packages/07/84/1cbeee8e8190a1ebe6926569a92cf1fa80ddb380c129beb6f86559e1bb24/ijson-3.4.0-cp312-cp312-win32.whl", hash = "sha256:931c007bf6bb8330705429989b2deed6838c22b63358a330bf362b6e458ba0bf", size = 51512, upload_time = "2025-05-08T02:36:05.595Z" }, - { url = "https://files.pythonhosted.org/packages/66/13/530802bc391c95be6fe9f96e9aa427d94067e7c0b7da7a9092344dc44c4b/ijson-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:71523f2b64cb856a820223e94d23e88369f193017ecc789bb4de198cc9d349eb", size = 54081, upload_time = "2025-05-08T02:36:07.099Z" }, - { url = "https://files.pythonhosted.org/packages/77/b3/b1d2eb2745e5204ec7a25365a6deb7868576214feb5e109bce368fb692c9/ijson-3.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e8d96f88d75196a61c9d9443de2b72c2d4a7ba9456ff117b57ae3bba23a54256", size = 87216, upload_time = "2025-05-08T02:36:08.414Z" }, - { url = "https://files.pythonhosted.org/packages/b1/cd/cd6d340087617f8cc9bedbb21d974542fe2f160ed0126b8288d3499a469b/ijson-3.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c45906ce2c1d3b62f15645476fc3a6ca279549127f01662a39ca5ed334a00cf9", size = 59170, upload_time = "2025-05-08T02:36:09.604Z" }, - { url = "https://files.pythonhosted.org/packages/3e/4d/32d3a9903b488d3306e3c8288f6ee4217d2eea82728261db03a1045eb5d1/ijson-3.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4ab4bc2119b35c4363ea49f29563612237cae9413d2fbe54b223be098b97bc9e", size = 59013, upload_time = "2025-05-08T02:36:10.696Z" }, - { url = "https://files.pythonhosted.org/packages/d5/c8/db15465ab4b0b477cee5964c8bfc94bf8c45af8e27a23e1ad78d1926e587/ijson-3.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97b0a9b5a15e61dfb1f14921ea4e0dba39f3a650df6d8f444ddbc2b19b479ff1", size = 146564, upload_time = "2025-05-08T02:36:11.916Z" }, - { url = "https://files.pythonhosted.org/packages/c4/d8/0755545bc122473a9a434ab90e0f378780e603d75495b1ca3872de757873/ijson-3.4.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e3047bb994dabedf11de11076ed1147a307924b6e5e2df6784fb2599c4ad8c60", size = 137917, upload_time = "2025-05-08T02:36:13.532Z" }, - { url = "https://files.pythonhosted.org/packages/d0/c6/aeb89c8939ebe3f534af26c8c88000c5e870dbb6ae33644c21a4531f87d2/ijson-3.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68c83161b052e9f5dc8191acbc862bb1e63f8a35344cb5cd0db1afd3afd487a6", size = 148897, upload_time = "2025-05-08T02:36:14.813Z" }, - { url = "https://files.pythonhosted.org/packages/be/0e/7ef6e9b372106f2682a4a32b3c65bf86bb471a1670e4dac242faee4a7d3f/ijson-3.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1eebd9b6c20eb1dffde0ae1f0fbb4aeacec2eb7b89adb5c7c0449fc9fd742760", size = 149711, upload_time = "2025-05-08T02:36:16.476Z" }, - { url = "https://files.pythonhosted.org/packages/d1/5d/9841c3ed75bcdabf19b3202de5f862a9c9c86ce5c7c9d95fa32347fdbf5f/ijson-3.4.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:13fb6d5c35192c541421f3ee81239d91fc15a8d8f26c869250f941f4b346a86c", size = 141691, upload_time = "2025-05-08T02:36:18.044Z" }, - { url = "https://files.pythonhosted.org/packages/d5/d2/ce74e17218dba292e9be10a44ed0c75439f7958cdd263adb0b5b92d012d5/ijson-3.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:28b7196ff7b37c4897c547a28fa4876919696739fc91c1f347651c9736877c69", size = 150738, upload_time = "2025-05-08T02:36:19.483Z" }, - { url = "https://files.pythonhosted.org/packages/4e/43/dcc480f94453b1075c9911d4755b823f3ace275761bb37b40139f22109ca/ijson-3.4.0-cp313-cp313-win32.whl", hash = "sha256:3c2691d2da42629522140f77b99587d6f5010440d58d36616f33bc7bdc830cc3", size = 51512, upload_time = "2025-05-08T02:36:20.99Z" }, - { url = "https://files.pythonhosted.org/packages/35/dd/d8c5f15efd85ba51e6e11451ebe23d779361a9ec0d192064c2a8c3cdfcb8/ijson-3.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:c4554718c275a044c47eb3874f78f2c939f300215d9031e785a6711cc51b83fc", size = 54074, upload_time = "2025-05-08T02:36:22.075Z" }, - { url = "https://files.pythonhosted.org/packages/79/73/24ad8cd106203419c4d22bed627e02e281d66b83e91bc206a371893d0486/ijson-3.4.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:915a65e3f3c0eee2ea937bc62aaedb6c14cc1e8f0bb9f3f4fb5a9e2bbfa4b480", size = 91694, upload_time = "2025-05-08T02:36:23.289Z" }, - { url = "https://files.pythonhosted.org/packages/17/2d/f7f680984bcb7324a46a4c2df3bd73cf70faef0acfeb85a3f811abdfd590/ijson-3.4.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:afbe9748707684b6c5adc295c4fdcf27765b300aec4d484e14a13dca4e5c0afa", size = 61390, upload_time = "2025-05-08T02:36:24.42Z" }, - { url = "https://files.pythonhosted.org/packages/09/a1/f3ca7bab86f95bdb82494739e71d271410dfefce4590785d511669127145/ijson-3.4.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:d823f8f321b4d8d5fa020d0a84f089fec5d52b7c0762430476d9f8bf95bbc1a9", size = 61140, upload_time = "2025-05-08T02:36:26.708Z" }, - { url = "https://files.pythonhosted.org/packages/51/79/dd340df3d4fc7771c95df29997956b92ed0570fe7b616d1792fea9ad93f2/ijson-3.4.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8a0a2c54f3becf76881188beefd98b484b1d3bd005769a740d5b433b089fa23", size = 214739, upload_time = "2025-05-08T02:36:27.973Z" }, - { url = "https://files.pythonhosted.org/packages/59/f0/85380b7f51d1f5fb7065d76a7b623e02feca920cc678d329b2eccc0011e0/ijson-3.4.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ced19a83ab09afa16257a0b15bc1aa888dbc555cb754be09d375c7f8d41051f2", size = 198338, upload_time = "2025-05-08T02:36:29.496Z" }, - { url = "https://files.pythonhosted.org/packages/a5/cd/313264cf2ec42e0f01d198c49deb7b6fadeb793b3685e20e738eb6b3fa13/ijson-3.4.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8100f9885eff1f38d35cef80ef759a1bbf5fc946349afa681bd7d0e681b7f1a0", size = 207515, upload_time = "2025-05-08T02:36:30.981Z" }, - { url = "https://files.pythonhosted.org/packages/12/94/bf14457aa87ea32641f2db577c9188ef4e4ae373478afef422b31fc7f309/ijson-3.4.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d7bcc3f7f21b0f703031ecd15209b1284ea51b2a329d66074b5261de3916c1eb", size = 210081, upload_time = "2025-05-08T02:36:32.403Z" }, - { url = "https://files.pythonhosted.org/packages/7d/b4/eaee39e290e40e52d665db9bd1492cfdce86bd1e47948e0440db209c6023/ijson-3.4.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:2dcb190227b09dd171bdcbfe4720fddd574933c66314818dfb3960c8a6246a77", size = 199253, upload_time = "2025-05-08T02:36:33.861Z" }, - { url = "https://files.pythonhosted.org/packages/c5/9c/e09c7b9ac720a703ab115b221b819f149ed54c974edfff623c1e925e57da/ijson-3.4.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:eda4cfb1d49c6073a901735aaa62e39cb7ab47f3ad7bb184862562f776f1fa8a", size = 203816, upload_time = "2025-05-08T02:36:35.348Z" }, - { url = "https://files.pythonhosted.org/packages/7c/14/acd304f412e32d16a2c12182b9d78206bb0ae35354d35664f45db05c1b3b/ijson-3.4.0-cp313-cp313t-win32.whl", hash = "sha256:0772638efa1f3b72b51736833404f1cbd2f5beeb9c1a3d392e7d385b9160cba7", size = 53760, upload_time = "2025-05-08T02:36:36.608Z" }, - { url = "https://files.pythonhosted.org/packages/2f/24/93dd0a467191590a5ed1fc2b35842bca9d09900d001e00b0b497c0208ef6/ijson-3.4.0-cp313-cp313t-win_amd64.whl", hash = "sha256:3d8a0d67f36e4fb97c61a724456ef0791504b16ce6f74917a31c2e92309bbeb9", size = 56948, upload_time = "2025-05-08T02:36:37.849Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/a3/4f/1cfeada63f5fce87536651268ddf5cca79b8b4bbb457aee4e45777964a0a/ijson-3.4.0.tar.gz", hash = "sha256:5f74dcbad9d592c428d3ca3957f7115a42689ee7ee941458860900236ae9bb13", size = 65782 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f8/ec/317ee5b2d13e50448833ead3aa906659a32b376191f6abc2a7c6112d2b27/ijson-3.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:956b148f88259a80a9027ffbe2d91705fae0c004fbfba3e5a24028fbe72311a9", size = 87212 }, + { url = "https://files.pythonhosted.org/packages/f8/43/b06c96ced30cacecc5d518f89b0fd1c98c294a30ff88848b70ed7b7f72a1/ijson-3.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:06b89960f5c721106394c7fba5760b3f67c515b8eb7d80f612388f5eca2f4621", size = 59175 }, + { url = "https://files.pythonhosted.org/packages/e9/df/b4aeafb7ecde463130840ee9be36130823ec94a00525049bf700883378b8/ijson-3.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9a0bb591cf250dd7e9dfab69d634745a7f3272d31cfe879f9156e0a081fd97ee", size = 59011 }, + { url = "https://files.pythonhosted.org/packages/e3/7c/a80b8e361641609507f62022089626d4b8067f0826f51e1c09e4ba86eba8/ijson-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:72e92de999977f4c6b660ffcf2b8d59604ccd531edcbfde05b642baf283e0de8", size = 146094 }, + { url = "https://files.pythonhosted.org/packages/01/44/fa416347b9a802e3646c6ff377fc3278bd7d6106e17beb339514b6a3184e/ijson-3.4.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e9602157a5b869d44b6896e64f502c712a312fcde044c2e586fccb85d3e316e", size = 137903 }, + { url = "https://files.pythonhosted.org/packages/24/c6/41a9ad4d42df50ff6e70fdce79b034f09b914802737ebbdc141153d8d791/ijson-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e83660edb931a425b7ff662eb49db1f10d30ca6d4d350e5630edbed098bc01", size = 148339 }, + { url = "https://files.pythonhosted.org/packages/5f/6f/7d01efda415b8502dce67e067ed9e8a124f53e763002c02207e542e1a2f1/ijson-3.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:49bf8eac1c7b7913073865a859c215488461f7591b4fa6a33c14b51cb73659d0", size = 149383 }, + { url = "https://files.pythonhosted.org/packages/95/6c/0d67024b9ecb57916c5e5ab0350251c9fe2f86dc9c8ca2b605c194bdad6a/ijson-3.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:160b09273cb42019f1811469508b0a057d19f26434d44752bde6f281da6d3f32", size = 141580 }, + { url = "https://files.pythonhosted.org/packages/06/43/e10edcc1c6a3b619294de835e7678bfb3a1b8a75955f3689fd66a1e9e7b4/ijson-3.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2019ff4e6f354aa00c76c8591bd450899111c61f2354ad55cc127e2ce2492c44", size = 150280 }, + { url = "https://files.pythonhosted.org/packages/07/84/1cbeee8e8190a1ebe6926569a92cf1fa80ddb380c129beb6f86559e1bb24/ijson-3.4.0-cp312-cp312-win32.whl", hash = "sha256:931c007bf6bb8330705429989b2deed6838c22b63358a330bf362b6e458ba0bf", size = 51512 }, + { url = "https://files.pythonhosted.org/packages/66/13/530802bc391c95be6fe9f96e9aa427d94067e7c0b7da7a9092344dc44c4b/ijson-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:71523f2b64cb856a820223e94d23e88369f193017ecc789bb4de198cc9d349eb", size = 54081 }, + { url = "https://files.pythonhosted.org/packages/77/b3/b1d2eb2745e5204ec7a25365a6deb7868576214feb5e109bce368fb692c9/ijson-3.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e8d96f88d75196a61c9d9443de2b72c2d4a7ba9456ff117b57ae3bba23a54256", size = 87216 }, + { url = "https://files.pythonhosted.org/packages/b1/cd/cd6d340087617f8cc9bedbb21d974542fe2f160ed0126b8288d3499a469b/ijson-3.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c45906ce2c1d3b62f15645476fc3a6ca279549127f01662a39ca5ed334a00cf9", size = 59170 }, + { url = "https://files.pythonhosted.org/packages/3e/4d/32d3a9903b488d3306e3c8288f6ee4217d2eea82728261db03a1045eb5d1/ijson-3.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4ab4bc2119b35c4363ea49f29563612237cae9413d2fbe54b223be098b97bc9e", size = 59013 }, + { url = "https://files.pythonhosted.org/packages/d5/c8/db15465ab4b0b477cee5964c8bfc94bf8c45af8e27a23e1ad78d1926e587/ijson-3.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97b0a9b5a15e61dfb1f14921ea4e0dba39f3a650df6d8f444ddbc2b19b479ff1", size = 146564 }, + { url = "https://files.pythonhosted.org/packages/c4/d8/0755545bc122473a9a434ab90e0f378780e603d75495b1ca3872de757873/ijson-3.4.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e3047bb994dabedf11de11076ed1147a307924b6e5e2df6784fb2599c4ad8c60", size = 137917 }, + { url = "https://files.pythonhosted.org/packages/d0/c6/aeb89c8939ebe3f534af26c8c88000c5e870dbb6ae33644c21a4531f87d2/ijson-3.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68c83161b052e9f5dc8191acbc862bb1e63f8a35344cb5cd0db1afd3afd487a6", size = 148897 }, + { url = "https://files.pythonhosted.org/packages/be/0e/7ef6e9b372106f2682a4a32b3c65bf86bb471a1670e4dac242faee4a7d3f/ijson-3.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1eebd9b6c20eb1dffde0ae1f0fbb4aeacec2eb7b89adb5c7c0449fc9fd742760", size = 149711 }, + { url = "https://files.pythonhosted.org/packages/d1/5d/9841c3ed75bcdabf19b3202de5f862a9c9c86ce5c7c9d95fa32347fdbf5f/ijson-3.4.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:13fb6d5c35192c541421f3ee81239d91fc15a8d8f26c869250f941f4b346a86c", size = 141691 }, + { url = "https://files.pythonhosted.org/packages/d5/d2/ce74e17218dba292e9be10a44ed0c75439f7958cdd263adb0b5b92d012d5/ijson-3.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:28b7196ff7b37c4897c547a28fa4876919696739fc91c1f347651c9736877c69", size = 150738 }, + { url = "https://files.pythonhosted.org/packages/4e/43/dcc480f94453b1075c9911d4755b823f3ace275761bb37b40139f22109ca/ijson-3.4.0-cp313-cp313-win32.whl", hash = "sha256:3c2691d2da42629522140f77b99587d6f5010440d58d36616f33bc7bdc830cc3", size = 51512 }, + { url = "https://files.pythonhosted.org/packages/35/dd/d8c5f15efd85ba51e6e11451ebe23d779361a9ec0d192064c2a8c3cdfcb8/ijson-3.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:c4554718c275a044c47eb3874f78f2c939f300215d9031e785a6711cc51b83fc", size = 54074 }, + { url = "https://files.pythonhosted.org/packages/79/73/24ad8cd106203419c4d22bed627e02e281d66b83e91bc206a371893d0486/ijson-3.4.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:915a65e3f3c0eee2ea937bc62aaedb6c14cc1e8f0bb9f3f4fb5a9e2bbfa4b480", size = 91694 }, + { url = "https://files.pythonhosted.org/packages/17/2d/f7f680984bcb7324a46a4c2df3bd73cf70faef0acfeb85a3f811abdfd590/ijson-3.4.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:afbe9748707684b6c5adc295c4fdcf27765b300aec4d484e14a13dca4e5c0afa", size = 61390 }, + { url = "https://files.pythonhosted.org/packages/09/a1/f3ca7bab86f95bdb82494739e71d271410dfefce4590785d511669127145/ijson-3.4.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:d823f8f321b4d8d5fa020d0a84f089fec5d52b7c0762430476d9f8bf95bbc1a9", size = 61140 }, + { url = "https://files.pythonhosted.org/packages/51/79/dd340df3d4fc7771c95df29997956b92ed0570fe7b616d1792fea9ad93f2/ijson-3.4.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8a0a2c54f3becf76881188beefd98b484b1d3bd005769a740d5b433b089fa23", size = 214739 }, + { url = "https://files.pythonhosted.org/packages/59/f0/85380b7f51d1f5fb7065d76a7b623e02feca920cc678d329b2eccc0011e0/ijson-3.4.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ced19a83ab09afa16257a0b15bc1aa888dbc555cb754be09d375c7f8d41051f2", size = 198338 }, + { url = "https://files.pythonhosted.org/packages/a5/cd/313264cf2ec42e0f01d198c49deb7b6fadeb793b3685e20e738eb6b3fa13/ijson-3.4.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8100f9885eff1f38d35cef80ef759a1bbf5fc946349afa681bd7d0e681b7f1a0", size = 207515 }, + { url = "https://files.pythonhosted.org/packages/12/94/bf14457aa87ea32641f2db577c9188ef4e4ae373478afef422b31fc7f309/ijson-3.4.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d7bcc3f7f21b0f703031ecd15209b1284ea51b2a329d66074b5261de3916c1eb", size = 210081 }, + { url = "https://files.pythonhosted.org/packages/7d/b4/eaee39e290e40e52d665db9bd1492cfdce86bd1e47948e0440db209c6023/ijson-3.4.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:2dcb190227b09dd171bdcbfe4720fddd574933c66314818dfb3960c8a6246a77", size = 199253 }, + { url = "https://files.pythonhosted.org/packages/c5/9c/e09c7b9ac720a703ab115b221b819f149ed54c974edfff623c1e925e57da/ijson-3.4.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:eda4cfb1d49c6073a901735aaa62e39cb7ab47f3ad7bb184862562f776f1fa8a", size = 203816 }, + { url = "https://files.pythonhosted.org/packages/7c/14/acd304f412e32d16a2c12182b9d78206bb0ae35354d35664f45db05c1b3b/ijson-3.4.0-cp313-cp313t-win32.whl", hash = "sha256:0772638efa1f3b72b51736833404f1cbd2f5beeb9c1a3d392e7d385b9160cba7", size = 53760 }, + { url = "https://files.pythonhosted.org/packages/2f/24/93dd0a467191590a5ed1fc2b35842bca9d09900d001e00b0b497c0208ef6/ijson-3.4.0-cp313-cp313t-win_amd64.whl", hash = "sha256:3d8a0d67f36e4fb97c61a724456ef0791504b16ce6f74917a31c2e92309bbeb9", size = 56948 }, ] [[package]] @@ -602,18 +602,18 @@ dependencies = [ { name = "pandas" }, { name = "requests" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/af/45/24521d229aec5c058d998510794567788bc7b1b764dfaa02fb8e0aeda4b7/imf_reader-1.3.0.tar.gz", hash = "sha256:3f3130dd793a112fdd5913a7c7b733847a5a07fd70dee14d57624ae4e021a141", size = 12990, upload_time = "2025-02-06T09:16:10.723Z" } +sdist = { url = "https://files.pythonhosted.org/packages/af/45/24521d229aec5c058d998510794567788bc7b1b764dfaa02fb8e0aeda4b7/imf_reader-1.3.0.tar.gz", hash = "sha256:3f3130dd793a112fdd5913a7c7b733847a5a07fd70dee14d57624ae4e021a141", size = 12990 } wheels = [ - { url = "https://files.pythonhosted.org/packages/fd/5b/3a063116950f2aa2b450120e78162bb5b87098dde3b75ae90210c6f2c099/imf_reader-1.3.0-py3-none-any.whl", hash = "sha256:3515c6644dfef44d5fda89f5bb3786b4f83da20f49184911f0df2386782106f1", size = 16520, upload_time = "2025-02-06T09:16:09.042Z" }, + { url = "https://files.pythonhosted.org/packages/fd/5b/3a063116950f2aa2b450120e78162bb5b87098dde3b75ae90210c6f2c099/imf_reader-1.3.0-py3-none-any.whl", hash = "sha256:3515c6644dfef44d5fda89f5bb3786b4f83da20f49184911f0df2386782106f1", size = 16520 }, ] [[package]] name = "iniconfig" version = "2.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f2/97/ebf4da567aa6827c909642694d71c9fcf53e5b504f2d96afea02718862f3/iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", size = 4793, upload_time = "2025-03-19T20:09:59.721Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f2/97/ebf4da567aa6827c909642694d71c9fcf53e5b504f2d96afea02718862f3/iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", size = 4793 } wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050, upload_time = "2025-03-19T20:10:01.071Z" }, + { url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050 }, ] [[package]] @@ -635,9 +635,9 @@ dependencies = [ { name = "tornado" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/e9/5c/67594cb0c7055dc50814b21731c22a601101ea3b1b50a9a1b090e11f5d0f/ipykernel-6.29.5.tar.gz", hash = "sha256:f093a22c4a40f8828f8e330a9c297cb93dcab13bd9678ded6de8e5cf81c56215", size = 163367, upload_time = "2024-07-01T14:07:22.543Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e9/5c/67594cb0c7055dc50814b21731c22a601101ea3b1b50a9a1b090e11f5d0f/ipykernel-6.29.5.tar.gz", hash = "sha256:f093a22c4a40f8828f8e330a9c297cb93dcab13bd9678ded6de8e5cf81c56215", size = 163367 } wheels = [ - { url = "https://files.pythonhosted.org/packages/94/5c/368ae6c01c7628438358e6d337c19b05425727fbb221d2a3c4303c372f42/ipykernel-6.29.5-py3-none-any.whl", hash = "sha256:afdb66ba5aa354b09b91379bac28ae4afebbb30e8b39510c9690afb7a10421b5", size = 117173, upload_time = "2024-07-01T14:07:19.603Z" }, + { url = "https://files.pythonhosted.org/packages/94/5c/368ae6c01c7628438358e6d337c19b05425727fbb221d2a3c4303c372f42/ipykernel-6.29.5-py3-none-any.whl", hash = "sha256:afdb66ba5aa354b09b91379bac28ae4afebbb30e8b39510c9690afb7a10421b5", size = 117173 }, ] [[package]] @@ -656,9 +656,9 @@ dependencies = [ { name = "stack-data" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/54/80/406f9e3bde1c1fd9bf5a0be9d090f8ae623e401b7670d8f6fdf2ab679891/ipython-9.4.0.tar.gz", hash = "sha256:c033c6d4e7914c3d9768aabe76bbe87ba1dc66a92a05db6bfa1125d81f2ee270", size = 4385338, upload_time = "2025-07-01T11:11:30.606Z" } +sdist = { url = "https://files.pythonhosted.org/packages/54/80/406f9e3bde1c1fd9bf5a0be9d090f8ae623e401b7670d8f6fdf2ab679891/ipython-9.4.0.tar.gz", hash = "sha256:c033c6d4e7914c3d9768aabe76bbe87ba1dc66a92a05db6bfa1125d81f2ee270", size = 4385338 } wheels = [ - { url = "https://files.pythonhosted.org/packages/63/f8/0031ee2b906a15a33d6bfc12dd09c3dfa966b3cb5b284ecfb7549e6ac3c4/ipython-9.4.0-py3-none-any.whl", hash = "sha256:25850f025a446d9b359e8d296ba175a36aedd32e83ca9b5060430fe16801f066", size = 611021, upload_time = "2025-07-01T11:11:27.85Z" }, + { url = "https://files.pythonhosted.org/packages/63/f8/0031ee2b906a15a33d6bfc12dd09c3dfa966b3cb5b284ecfb7549e6ac3c4/ipython-9.4.0-py3-none-any.whl", hash = "sha256:25850f025a446d9b359e8d296ba175a36aedd32e83ca9b5060430fe16801f066", size = 611021 }, ] [[package]] @@ -668,18 +668,18 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pygments" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ef/4c/5dd1d8af08107f88c7f741ead7a40854b8ac24ddf9ae850afbcf698aa552/ipython_pygments_lexers-1.1.1.tar.gz", hash = "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81", size = 8393, upload_time = "2025-01-17T11:24:34.505Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ef/4c/5dd1d8af08107f88c7f741ead7a40854b8ac24ddf9ae850afbcf698aa552/ipython_pygments_lexers-1.1.1.tar.gz", hash = "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81", size = 8393 } wheels = [ - { url = "https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl", hash = "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c", size = 8074, upload_time = "2025-01-17T11:24:33.271Z" }, + { url = "https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl", hash = "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c", size = 8074 }, ] [[package]] name = "isodate" version = "0.7.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/54/4d/e940025e2ce31a8ce1202635910747e5a87cc3a6a6bb2d00973375014749/isodate-0.7.2.tar.gz", hash = "sha256:4cd1aa0f43ca76f4a6c6c0292a85f40b35ec2e43e315b59f06e6d32171a953e6", size = 29705, upload_time = "2024-10-08T23:04:11.5Z" } +sdist = { url = "https://files.pythonhosted.org/packages/54/4d/e940025e2ce31a8ce1202635910747e5a87cc3a6a6bb2d00973375014749/isodate-0.7.2.tar.gz", hash = "sha256:4cd1aa0f43ca76f4a6c6c0292a85f40b35ec2e43e315b59f06e6d32171a953e6", size = 29705 } wheels = [ - { url = "https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl", hash = "sha256:28009937d8031054830160fce6d409ed342816b543597cece116d966c6d99e15", size = 22320, upload_time = "2024-10-08T23:04:09.501Z" }, + { url = "https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl", hash = "sha256:28009937d8031054830160fce6d409ed342816b543597cece116d966c6d99e15", size = 22320 }, ] [[package]] @@ -689,9 +689,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "parso" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/72/3a/79a912fbd4d8dd6fbb02bf69afd3bb72cf0c729bb3063c6f4498603db17a/jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0", size = 1231287, upload_time = "2024-11-11T01:41:42.873Z" } +sdist = { url = "https://files.pythonhosted.org/packages/72/3a/79a912fbd4d8dd6fbb02bf69afd3bb72cf0c729bb3063c6f4498603db17a/jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0", size = 1231287 } wheels = [ - { url = "https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9", size = 1572278, upload_time = "2024-11-11T01:41:40.175Z" }, + { url = "https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9", size = 1572278 }, ] [[package]] @@ -701,25 +701,25 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "markupsafe" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload_time = "2025-03-05T20:05:02.478Z" } +sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115 } wheels = [ - { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload_time = "2025-03-05T20:05:00.369Z" }, + { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899 }, ] [[package]] name = "joblib" version = "1.5.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/dc/fe/0f5a938c54105553436dbff7a61dc4fed4b1b2c98852f8833beaf4d5968f/joblib-1.5.1.tar.gz", hash = "sha256:f4f86e351f39fe3d0d32a9f2c3d8af1ee4cec285aafcb27003dda5205576b444", size = 330475, upload_time = "2025-05-23T12:04:37.097Z" } +sdist = { url = "https://files.pythonhosted.org/packages/dc/fe/0f5a938c54105553436dbff7a61dc4fed4b1b2c98852f8833beaf4d5968f/joblib-1.5.1.tar.gz", hash = "sha256:f4f86e351f39fe3d0d32a9f2c3d8af1ee4cec285aafcb27003dda5205576b444", size = 330475 } wheels = [ - { url = "https://files.pythonhosted.org/packages/7d/4f/1195bbac8e0c2acc5f740661631d8d750dc38d4a32b23ee5df3cde6f4e0d/joblib-1.5.1-py3-none-any.whl", hash = "sha256:4719a31f054c7d766948dcd83e9613686b27114f190f717cec7eaa2084f8a74a", size = 307746, upload_time = "2025-05-23T12:04:35.124Z" }, + { url = "https://files.pythonhosted.org/packages/7d/4f/1195bbac8e0c2acc5f740661631d8d750dc38d4a32b23ee5df3cde6f4e0d/joblib-1.5.1-py3-none-any.whl", hash = "sha256:4719a31f054c7d766948dcd83e9613686b27114f190f717cec7eaa2084f8a74a", size = 307746 }, ] [[package]] name = "jsmin" version = "3.0.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5e/73/e01e4c5e11ad0494f4407a3f623ad4d87714909f50b17a06ed121034ff6e/jsmin-3.0.1.tar.gz", hash = "sha256:c0959a121ef94542e807a674142606f7e90214a2b3d1eb17300244bbb5cc2bfc", size = 13925, upload_time = "2022-01-16T20:35:59.13Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5e/73/e01e4c5e11ad0494f4407a3f623ad4d87714909f50b17a06ed121034ff6e/jsmin-3.0.1.tar.gz", hash = "sha256:c0959a121ef94542e807a674142606f7e90214a2b3d1eb17300244bbb5cc2bfc", size = 13925 } [[package]] name = "jsonlines" @@ -728,9 +728,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "attrs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/35/87/bcda8e46c88d0e34cad2f09ee2d0c7f5957bccdb9791b0b934ec84d84be4/jsonlines-4.0.0.tar.gz", hash = "sha256:0c6d2c09117550c089995247f605ae4cf77dd1533041d366351f6f298822ea74", size = 11359, upload_time = "2023-09-01T12:34:44.187Z" } +sdist = { url = "https://files.pythonhosted.org/packages/35/87/bcda8e46c88d0e34cad2f09ee2d0c7f5957bccdb9791b0b934ec84d84be4/jsonlines-4.0.0.tar.gz", hash = "sha256:0c6d2c09117550c089995247f605ae4cf77dd1533041d366351f6f298822ea74", size = 11359 } wheels = [ - { url = "https://files.pythonhosted.org/packages/f8/62/d9ba6323b9202dd2fe166beab8a86d29465c41a0288cbe229fac60c1ab8d/jsonlines-4.0.0-py3-none-any.whl", hash = "sha256:185b334ff2ca5a91362993f42e83588a360cf95ce4b71a73548502bda52a7c55", size = 8701, upload_time = "2023-09-01T12:34:42.563Z" }, + { url = "https://files.pythonhosted.org/packages/f8/62/d9ba6323b9202dd2fe166beab8a86d29465c41a0288cbe229fac60c1ab8d/jsonlines-4.0.0-py3-none-any.whl", hash = "sha256:185b334ff2ca5a91362993f42e83588a360cf95ce4b71a73548502bda52a7c55", size = 8701 }, ] [[package]] @@ -740,9 +740,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "ply" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/6d/86/08646239a313f895186ff0a4573452038eed8c86f54380b3ebac34d32fb2/jsonpath-ng-1.7.0.tar.gz", hash = "sha256:f6f5f7fd4e5ff79c785f1573b394043b39849fb2bb47bcead935d12b00beab3c", size = 37838, upload_time = "2024-10-11T15:41:42.404Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6d/86/08646239a313f895186ff0a4573452038eed8c86f54380b3ebac34d32fb2/jsonpath-ng-1.7.0.tar.gz", hash = "sha256:f6f5f7fd4e5ff79c785f1573b394043b39849fb2bb47bcead935d12b00beab3c", size = 37838 } wheels = [ - { url = "https://files.pythonhosted.org/packages/35/5a/73ecb3d82f8615f32ccdadeb9356726d6cae3a4bbc840b437ceb95708063/jsonpath_ng-1.7.0-py3-none-any.whl", hash = "sha256:f3d7f9e848cba1b6da28c55b1c26ff915dc9e0b1ba7e752a53d6da8d5cbd00b6", size = 30105, upload_time = "2024-11-20T17:58:30.418Z" }, + { url = "https://files.pythonhosted.org/packages/35/5a/73ecb3d82f8615f32ccdadeb9356726d6cae3a4bbc840b437ceb95708063/jsonpath_ng-1.7.0-py3-none-any.whl", hash = "sha256:f3d7f9e848cba1b6da28c55b1c26ff915dc9e0b1ba7e752a53d6da8d5cbd00b6", size = 30105 }, ] [[package]] @@ -755,9 +755,9 @@ dependencies = [ { name = "referencing" }, { name = "rpds-py" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/bf/d3/1cf5326b923a53515d8f3a2cd442e6d7e94fcc444716e879ea70a0ce3177/jsonschema-4.24.0.tar.gz", hash = "sha256:0b4e8069eb12aedfa881333004bccaec24ecef5a8a6a4b6df142b2cc9599d196", size = 353480, upload_time = "2025-05-26T18:48:10.459Z" } +sdist = { url = "https://files.pythonhosted.org/packages/bf/d3/1cf5326b923a53515d8f3a2cd442e6d7e94fcc444716e879ea70a0ce3177/jsonschema-4.24.0.tar.gz", hash = "sha256:0b4e8069eb12aedfa881333004bccaec24ecef5a8a6a4b6df142b2cc9599d196", size = 353480 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a2/3d/023389198f69c722d039351050738d6755376c8fd343e91dc493ea485905/jsonschema-4.24.0-py3-none-any.whl", hash = "sha256:a462455f19f5faf404a7902952b6f0e3ce868f3ee09a359b05eca6673bd8412d", size = 88709, upload_time = "2025-05-26T18:48:08.417Z" }, + { url = "https://files.pythonhosted.org/packages/a2/3d/023389198f69c722d039351050738d6755376c8fd343e91dc493ea485905/jsonschema-4.24.0-py3-none-any.whl", hash = "sha256:a462455f19f5faf404a7902952b6f0e3ce868f3ee09a359b05eca6673bd8412d", size = 88709 }, ] [[package]] @@ -767,9 +767,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "referencing" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/bf/ce/46fbd9c8119cfc3581ee5643ea49464d168028cfb5caff5fc0596d0cf914/jsonschema_specifications-2025.4.1.tar.gz", hash = "sha256:630159c9f4dbea161a6a2205c3011cc4f18ff381b189fff48bb39b9bf26ae608", size = 15513, upload_time = "2025-04-23T12:34:07.418Z" } +sdist = { url = "https://files.pythonhosted.org/packages/bf/ce/46fbd9c8119cfc3581ee5643ea49464d168028cfb5caff5fc0596d0cf914/jsonschema_specifications-2025.4.1.tar.gz", hash = "sha256:630159c9f4dbea161a6a2205c3011cc4f18ff381b189fff48bb39b9bf26ae608", size = 15513 } wheels = [ - { url = "https://files.pythonhosted.org/packages/01/0e/b27cdbaccf30b890c40ed1da9fd4a3593a5cf94dae54fb34f8a4b74fcd3f/jsonschema_specifications-2025.4.1-py3-none-any.whl", hash = "sha256:4653bffbd6584f7de83a67e0d620ef16900b390ddc7939d56684d6c81e33f1af", size = 18437, upload_time = "2025-04-23T12:34:05.422Z" }, + { url = "https://files.pythonhosted.org/packages/01/0e/b27cdbaccf30b890c40ed1da9fd4a3593a5cf94dae54fb34f8a4b74fcd3f/jsonschema_specifications-2025.4.1-py3-none-any.whl", hash = "sha256:4653bffbd6584f7de83a67e0d620ef16900b390ddc7939d56684d6c81e33f1af", size = 18437 }, ] [[package]] @@ -783,9 +783,9 @@ dependencies = [ { name = "tornado" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/71/22/bf9f12fdaeae18019a468b68952a60fe6dbab5d67cd2a103cac7659b41ca/jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419", size = 342019, upload_time = "2024-09-17T10:44:17.613Z" } +sdist = { url = "https://files.pythonhosted.org/packages/71/22/bf9f12fdaeae18019a468b68952a60fe6dbab5d67cd2a103cac7659b41ca/jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419", size = 342019 } wheels = [ - { url = "https://files.pythonhosted.org/packages/11/85/b0394e0b6fcccd2c1eeefc230978a6f8cb0c5df1e4cd3e7625735a0d7d1e/jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f", size = 106105, upload_time = "2024-09-17T10:44:15.218Z" }, + { url = "https://files.pythonhosted.org/packages/11/85/b0394e0b6fcccd2c1eeefc230978a6f8cb0c5df1e4cd3e7625735a0d7d1e/jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f", size = 106105 }, ] [[package]] @@ -797,9 +797,9 @@ dependencies = [ { name = "pywin32", marker = "platform_python_implementation != 'PyPy' and sys_platform == 'win32'" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/99/1b/72906d554acfeb588332eaaa6f61577705e9ec752ddb486f302dafa292d9/jupyter_core-5.8.1.tar.gz", hash = "sha256:0a5f9706f70e64786b75acba995988915ebd4601c8a52e534a40b51c95f59941", size = 88923, upload_time = "2025-05-27T07:38:16.655Z" } +sdist = { url = "https://files.pythonhosted.org/packages/99/1b/72906d554acfeb588332eaaa6f61577705e9ec752ddb486f302dafa292d9/jupyter_core-5.8.1.tar.gz", hash = "sha256:0a5f9706f70e64786b75acba995988915ebd4601c8a52e534a40b51c95f59941", size = 88923 } wheels = [ - { url = "https://files.pythonhosted.org/packages/2f/57/6bffd4b20b88da3800c5d691e0337761576ee688eb01299eae865689d2df/jupyter_core-5.8.1-py3-none-any.whl", hash = "sha256:c28d268fc90fb53f1338ded2eb410704c5449a358406e8a948b75706e24863d0", size = 28880, upload_time = "2025-05-27T07:38:15.137Z" }, + { url = "https://files.pythonhosted.org/packages/2f/57/6bffd4b20b88da3800c5d691e0337761576ee688eb01299eae865689d2df/jupyter_core-5.8.1-py3-none-any.whl", hash = "sha256:c28d268fc90fb53f1338ded2eb410704c5449a358406e8a948b75706e24863d0", size = 28880 }, ] [[package]] @@ -818,7 +818,7 @@ dependencies = [ { name = "wheel" }, { name = "xlrd3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/63/ad/c1dafb7c59e685692a2eeafce83245b7c5f46e05881fdb77a0cbb7c19c74/libhxl-5.2.2.tar.gz", hash = "sha256:3a74d9f23561bfcefd20e5229c574bc68dfc114fdb6ba1ba684d9e9d7ea52483", size = 127736, upload_time = "2024-10-25T09:19:11.202Z" } +sdist = { url = "https://files.pythonhosted.org/packages/63/ad/c1dafb7c59e685692a2eeafce83245b7c5f46e05881fdb77a0cbb7c19c74/libhxl-5.2.2.tar.gz", hash = "sha256:3a74d9f23561bfcefd20e5229c574bc68dfc114fdb6ba1ba684d9e9d7ea52483", size = 127736 } [[package]] name = "license-expression" @@ -827,9 +827,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "boolean-py" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/40/71/d89bb0e71b1415453980fd32315f2a037aad9f7f70f695c7cec7035feb13/license_expression-30.4.4.tar.gz", hash = "sha256:73448f0aacd8d0808895bdc4b2c8e01a8d67646e4188f887375398c761f340fd", size = 186402, upload_time = "2025-07-22T11:13:32.17Z" } +sdist = { url = "https://files.pythonhosted.org/packages/40/71/d89bb0e71b1415453980fd32315f2a037aad9f7f70f695c7cec7035feb13/license_expression-30.4.4.tar.gz", hash = "sha256:73448f0aacd8d0808895bdc4b2c8e01a8d67646e4188f887375398c761f340fd", size = 186402 } wheels = [ - { url = "https://files.pythonhosted.org/packages/af/40/791891d4c0c4dab4c5e187c17261cedc26285fd41541577f900470a45a4d/license_expression-30.4.4-py3-none-any.whl", hash = "sha256:421788fdcadb41f049d2dc934ce666626265aeccefddd25e162a26f23bcbf8a4", size = 120615, upload_time = "2025-07-22T11:13:31.217Z" }, + { url = "https://files.pythonhosted.org/packages/af/40/791891d4c0c4dab4c5e187c17261cedc26285fd41541577f900470a45a4d/license_expression-30.4.4-py3-none-any.whl", hash = "sha256:421788fdcadb41f049d2dc934ce666626265aeccefddd25e162a26f23bcbf8a4", size = 120615 }, ] [[package]] @@ -840,18 +840,18 @@ dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, { name = "win32-setctime", marker = "sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/3a/05/a1dae3dffd1116099471c643b8924f5aa6524411dc6c63fdae648c4f1aca/loguru-0.7.3.tar.gz", hash = "sha256:19480589e77d47b8d85b2c827ad95d49bf31b0dcde16593892eb51dd18706eb6", size = 63559, upload_time = "2024-12-06T11:20:56.608Z" } +sdist = { url = "https://files.pythonhosted.org/packages/3a/05/a1dae3dffd1116099471c643b8924f5aa6524411dc6c63fdae648c4f1aca/loguru-0.7.3.tar.gz", hash = "sha256:19480589e77d47b8d85b2c827ad95d49bf31b0dcde16593892eb51dd18706eb6", size = 63559 } wheels = [ - { url = "https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl", hash = "sha256:31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c", size = 61595, upload_time = "2024-12-06T11:20:54.538Z" }, + { url = "https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl", hash = "sha256:31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c", size = 61595 }, ] [[package]] name = "markdown" version = "3.8.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d7/c2/4ab49206c17f75cb08d6311171f2d65798988db4360c4d1485bd0eedd67c/markdown-3.8.2.tar.gz", hash = "sha256:247b9a70dd12e27f67431ce62523e675b866d254f900c4fe75ce3dda62237c45", size = 362071, upload_time = "2025-06-19T17:12:44.483Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/c2/4ab49206c17f75cb08d6311171f2d65798988db4360c4d1485bd0eedd67c/markdown-3.8.2.tar.gz", hash = "sha256:247b9a70dd12e27f67431ce62523e675b866d254f900c4fe75ce3dda62237c45", size = 362071 } wheels = [ - { url = "https://files.pythonhosted.org/packages/96/2b/34cc11786bc00d0f04d0f5fdc3a2b1ae0b6239eef72d3d345805f9ad92a1/markdown-3.8.2-py3-none-any.whl", hash = "sha256:5c83764dbd4e00bdd94d85a19b8d55ccca20fe35b2e678a1422b380324dd5f24", size = 106827, upload_time = "2025-06-19T17:12:42.994Z" }, + { url = "https://files.pythonhosted.org/packages/96/2b/34cc11786bc00d0f04d0f5fdc3a2b1ae0b6239eef72d3d345805f9ad92a1/markdown-3.8.2-py3-none-any.whl", hash = "sha256:5c83764dbd4e00bdd94d85a19b8d55ccca20fe35b2e678a1422b380324dd5f24", size = 106827 }, ] [[package]] @@ -861,56 +861,56 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "mdurl" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596, upload_time = "2023-06-03T06:41:14.443Z" } +sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596 } wheels = [ - { url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528, upload_time = "2023-06-03T06:41:11.019Z" }, + { url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528 }, ] [[package]] name = "marko" version = "2.1.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/72/dc/c8cadbd83de1b38d95a48568b445a5553005ebdd32e00a333ca940113db4/marko-2.1.4.tar.gz", hash = "sha256:dd7d66f3706732bf8f994790e674649a4fd0a6c67f16b80246f30de8e16a1eac", size = 142795, upload_time = "2025-06-13T03:25:50.857Z" } +sdist = { url = "https://files.pythonhosted.org/packages/72/dc/c8cadbd83de1b38d95a48568b445a5553005ebdd32e00a333ca940113db4/marko-2.1.4.tar.gz", hash = "sha256:dd7d66f3706732bf8f994790e674649a4fd0a6c67f16b80246f30de8e16a1eac", size = 142795 } wheels = [ - { url = "https://files.pythonhosted.org/packages/c3/66/49e3691d14898fb6e34ccb337c7677dfb7e18269ed170f12e4b85315eae6/marko-2.1.4-py3-none-any.whl", hash = "sha256:81c2b9f570ca485bc356678d9ba1a1b3eb78b4a315d01f3ded25442fdc796990", size = 42186, upload_time = "2025-06-13T03:25:49.858Z" }, + { url = "https://files.pythonhosted.org/packages/c3/66/49e3691d14898fb6e34ccb337c7677dfb7e18269ed170f12e4b85315eae6/marko-2.1.4-py3-none-any.whl", hash = "sha256:81c2b9f570ca485bc356678d9ba1a1b3eb78b4a315d01f3ded25442fdc796990", size = 42186 }, ] [[package]] name = "markupsafe" version = "3.0.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537, upload_time = "2024-10-18T15:21:54.129Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/22/09/d1f21434c97fc42f09d290cbb6350d44eb12f09cc62c9476effdb33a18aa/MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", size = 14274, upload_time = "2024-10-18T15:21:13.777Z" }, - { url = "https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", size = 12348, upload_time = "2024-10-18T15:21:14.822Z" }, - { url = "https://files.pythonhosted.org/packages/e0/25/dd5c0f6ac1311e9b40f4af06c78efde0f3b5cbf02502f8ef9501294c425b/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", size = 24149, upload_time = "2024-10-18T15:21:15.642Z" }, - { url = "https://files.pythonhosted.org/packages/f3/f0/89e7aadfb3749d0f52234a0c8c7867877876e0a20b60e2188e9850794c17/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", size = 23118, upload_time = "2024-10-18T15:21:17.133Z" }, - { url = "https://files.pythonhosted.org/packages/d5/da/f2eeb64c723f5e3777bc081da884b414671982008c47dcc1873d81f625b6/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", size = 22993, upload_time = "2024-10-18T15:21:18.064Z" }, - { url = "https://files.pythonhosted.org/packages/da/0e/1f32af846df486dce7c227fe0f2398dc7e2e51d4a370508281f3c1c5cddc/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", size = 24178, upload_time = "2024-10-18T15:21:18.859Z" }, - { url = "https://files.pythonhosted.org/packages/c4/f6/bb3ca0532de8086cbff5f06d137064c8410d10779c4c127e0e47d17c0b71/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", size = 23319, upload_time = "2024-10-18T15:21:19.671Z" }, - { url = "https://files.pythonhosted.org/packages/a2/82/8be4c96ffee03c5b4a034e60a31294daf481e12c7c43ab8e34a1453ee48b/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", size = 23352, upload_time = "2024-10-18T15:21:20.971Z" }, - { url = "https://files.pythonhosted.org/packages/51/ae/97827349d3fcffee7e184bdf7f41cd6b88d9919c80f0263ba7acd1bbcb18/MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", size = 15097, upload_time = "2024-10-18T15:21:22.646Z" }, - { url = "https://files.pythonhosted.org/packages/c1/80/a61f99dc3a936413c3ee4e1eecac96c0da5ed07ad56fd975f1a9da5bc630/MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", size = 15601, upload_time = "2024-10-18T15:21:23.499Z" }, - { url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274, upload_time = "2024-10-18T15:21:24.577Z" }, - { url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352, upload_time = "2024-10-18T15:21:25.382Z" }, - { url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122, upload_time = "2024-10-18T15:21:26.199Z" }, - { url = "https://files.pythonhosted.org/packages/0c/91/96cf928db8236f1bfab6ce15ad070dfdd02ed88261c2afafd4b43575e9e9/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", size = 23085, upload_time = "2024-10-18T15:21:27.029Z" }, - { url = "https://files.pythonhosted.org/packages/c2/cf/c9d56af24d56ea04daae7ac0940232d31d5a8354f2b457c6d856b2057d69/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", size = 22978, upload_time = "2024-10-18T15:21:27.846Z" }, - { url = "https://files.pythonhosted.org/packages/2a/9f/8619835cd6a711d6272d62abb78c033bda638fdc54c4e7f4272cf1c0962b/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", size = 24208, upload_time = "2024-10-18T15:21:28.744Z" }, - { url = "https://files.pythonhosted.org/packages/f9/bf/176950a1792b2cd2102b8ffeb5133e1ed984547b75db47c25a67d3359f77/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", size = 23357, upload_time = "2024-10-18T15:21:29.545Z" }, - { url = "https://files.pythonhosted.org/packages/ce/4f/9a02c1d335caabe5c4efb90e1b6e8ee944aa245c1aaaab8e8a618987d816/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", size = 23344, upload_time = "2024-10-18T15:21:30.366Z" }, - { url = "https://files.pythonhosted.org/packages/ee/55/c271b57db36f748f0e04a759ace9f8f759ccf22b4960c270c78a394f58be/MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", size = 15101, upload_time = "2024-10-18T15:21:31.207Z" }, - { url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", size = 15603, upload_time = "2024-10-18T15:21:32.032Z" }, - { url = "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", size = 14510, upload_time = "2024-10-18T15:21:33.625Z" }, - { url = "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", size = 12486, upload_time = "2024-10-18T15:21:34.611Z" }, - { url = "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", size = 25480, upload_time = "2024-10-18T15:21:35.398Z" }, - { url = "https://files.pythonhosted.org/packages/0c/e3/90e9651924c430b885468b56b3d597cabf6d72be4b24a0acd1fa0e12af67/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", size = 23914, upload_time = "2024-10-18T15:21:36.231Z" }, - { url = "https://files.pythonhosted.org/packages/66/8c/6c7cf61f95d63bb866db39085150df1f2a5bd3335298f14a66b48e92659c/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", size = 23796, upload_time = "2024-10-18T15:21:37.073Z" }, - { url = "https://files.pythonhosted.org/packages/bb/35/cbe9238ec3f47ac9a7c8b3df7a808e7cb50fe149dc7039f5f454b3fba218/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", size = 25473, upload_time = "2024-10-18T15:21:37.932Z" }, - { url = "https://files.pythonhosted.org/packages/e6/32/7621a4382488aa283cc05e8984a9c219abad3bca087be9ec77e89939ded9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", size = 24114, upload_time = "2024-10-18T15:21:39.799Z" }, - { url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098, upload_time = "2024-10-18T15:21:40.813Z" }, - { url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208, upload_time = "2024-10-18T15:21:41.814Z" }, - { url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739, upload_time = "2024-10-18T15:21:42.784Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/09/d1f21434c97fc42f09d290cbb6350d44eb12f09cc62c9476effdb33a18aa/MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", size = 14274 }, + { url = "https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", size = 12348 }, + { url = "https://files.pythonhosted.org/packages/e0/25/dd5c0f6ac1311e9b40f4af06c78efde0f3b5cbf02502f8ef9501294c425b/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", size = 24149 }, + { url = "https://files.pythonhosted.org/packages/f3/f0/89e7aadfb3749d0f52234a0c8c7867877876e0a20b60e2188e9850794c17/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", size = 23118 }, + { url = "https://files.pythonhosted.org/packages/d5/da/f2eeb64c723f5e3777bc081da884b414671982008c47dcc1873d81f625b6/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", size = 22993 }, + { url = "https://files.pythonhosted.org/packages/da/0e/1f32af846df486dce7c227fe0f2398dc7e2e51d4a370508281f3c1c5cddc/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", size = 24178 }, + { url = "https://files.pythonhosted.org/packages/c4/f6/bb3ca0532de8086cbff5f06d137064c8410d10779c4c127e0e47d17c0b71/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", size = 23319 }, + { url = "https://files.pythonhosted.org/packages/a2/82/8be4c96ffee03c5b4a034e60a31294daf481e12c7c43ab8e34a1453ee48b/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", size = 23352 }, + { url = "https://files.pythonhosted.org/packages/51/ae/97827349d3fcffee7e184bdf7f41cd6b88d9919c80f0263ba7acd1bbcb18/MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", size = 15097 }, + { url = "https://files.pythonhosted.org/packages/c1/80/a61f99dc3a936413c3ee4e1eecac96c0da5ed07ad56fd975f1a9da5bc630/MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", size = 15601 }, + { url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274 }, + { url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352 }, + { url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122 }, + { url = "https://files.pythonhosted.org/packages/0c/91/96cf928db8236f1bfab6ce15ad070dfdd02ed88261c2afafd4b43575e9e9/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", size = 23085 }, + { url = "https://files.pythonhosted.org/packages/c2/cf/c9d56af24d56ea04daae7ac0940232d31d5a8354f2b457c6d856b2057d69/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", size = 22978 }, + { url = "https://files.pythonhosted.org/packages/2a/9f/8619835cd6a711d6272d62abb78c033bda638fdc54c4e7f4272cf1c0962b/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", size = 24208 }, + { url = "https://files.pythonhosted.org/packages/f9/bf/176950a1792b2cd2102b8ffeb5133e1ed984547b75db47c25a67d3359f77/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", size = 23357 }, + { url = "https://files.pythonhosted.org/packages/ce/4f/9a02c1d335caabe5c4efb90e1b6e8ee944aa245c1aaaab8e8a618987d816/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", size = 23344 }, + { url = "https://files.pythonhosted.org/packages/ee/55/c271b57db36f748f0e04a759ace9f8f759ccf22b4960c270c78a394f58be/MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", size = 15101 }, + { url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", size = 15603 }, + { url = "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", size = 14510 }, + { url = "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", size = 12486 }, + { url = "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", size = 25480 }, + { url = "https://files.pythonhosted.org/packages/0c/e3/90e9651924c430b885468b56b3d597cabf6d72be4b24a0acd1fa0e12af67/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", size = 23914 }, + { url = "https://files.pythonhosted.org/packages/66/8c/6c7cf61f95d63bb866db39085150df1f2a5bd3335298f14a66b48e92659c/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", size = 23796 }, + { url = "https://files.pythonhosted.org/packages/bb/35/cbe9238ec3f47ac9a7c8b3df7a808e7cb50fe149dc7039f5f454b3fba218/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", size = 25473 }, + { url = "https://files.pythonhosted.org/packages/e6/32/7621a4382488aa283cc05e8984a9c219abad3bca087be9ec77e89939ded9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", size = 24114 }, + { url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098 }, + { url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208 }, + { url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739 }, ] [[package]] @@ -920,27 +920,27 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/99/5b/a36a337438a14116b16480db471ad061c36c3694df7c2084a0da7ba538b7/matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90", size = 8159, upload_time = "2024-04-15T13:44:44.803Z" } +sdist = { url = "https://files.pythonhosted.org/packages/99/5b/a36a337438a14116b16480db471ad061c36c3694df7c2084a0da7ba538b7/matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90", size = 8159 } wheels = [ - { url = "https://files.pythonhosted.org/packages/8f/8e/9ad090d3553c280a8060fbf6e24dc1c0c29704ee7d1c372f0c174aa59285/matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca", size = 9899, upload_time = "2024-04-15T13:44:43.265Z" }, + { url = "https://files.pythonhosted.org/packages/8f/8e/9ad090d3553c280a8060fbf6e24dc1c0c29704ee7d1c372f0c174aa59285/matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca", size = 9899 }, ] [[package]] name = "mdurl" version = "0.1.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload_time = "2022-08-14T12:40:10.846Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729 } wheels = [ - { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload_time = "2022-08-14T12:40:09.779Z" }, + { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979 }, ] [[package]] name = "mergedeep" version = "1.3.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/3a/41/580bb4006e3ed0361b8151a01d324fb03f420815446c7def45d02f74c270/mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8", size = 4661, upload_time = "2021-02-05T18:55:30.623Z" } +sdist = { url = "https://files.pythonhosted.org/packages/3a/41/580bb4006e3ed0361b8151a01d324fb03f420815446c7def45d02f74c270/mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8", size = 4661 } wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307", size = 6354, upload_time = "2021-02-05T18:55:29.583Z" }, + { url = "https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307", size = 6354 }, ] [[package]] @@ -962,9 +962,9 @@ dependencies = [ { name = "pyyaml-env-tag" }, { name = "watchdog" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/bc/c6/bbd4f061bd16b378247f12953ffcb04786a618ce5e904b8c5a01a0309061/mkdocs-1.6.1.tar.gz", hash = "sha256:7b432f01d928c084353ab39c57282f29f92136665bdd6abf7c1ec8d822ef86f2", size = 3889159, upload_time = "2024-08-30T12:24:06.899Z" } +sdist = { url = "https://files.pythonhosted.org/packages/bc/c6/bbd4f061bd16b378247f12953ffcb04786a618ce5e904b8c5a01a0309061/mkdocs-1.6.1.tar.gz", hash = "sha256:7b432f01d928c084353ab39c57282f29f92136665bdd6abf7c1ec8d822ef86f2", size = 3889159 } wheels = [ - { url = "https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl", hash = "sha256:db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e", size = 3864451, upload_time = "2024-08-30T12:24:05.054Z" }, + { url = "https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl", hash = "sha256:db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e", size = 3864451 }, ] [[package]] @@ -974,9 +974,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "mkdocs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/63/b7/efc75b7870a4fecbc9a05ba94ce622462a40b5a13670d00036c5b47bf82f/mkdocs-autolinks-plugin-0.7.1.tar.gz", hash = "sha256:445ddb9b417b7795856c30801bb430773186c1daf210bdeecf8305f55a47d151", size = 4375, upload_time = "2023-08-04T14:42:25.67Z" } +sdist = { url = "https://files.pythonhosted.org/packages/63/b7/efc75b7870a4fecbc9a05ba94ce622462a40b5a13670d00036c5b47bf82f/mkdocs-autolinks-plugin-0.7.1.tar.gz", hash = "sha256:445ddb9b417b7795856c30801bb430773186c1daf210bdeecf8305f55a47d151", size = 4375 } wheels = [ - { url = "https://files.pythonhosted.org/packages/d4/9c/ee3d81a799b8b0b73a89625bcbf3c58cd369c8a26a1b415413edea9bf259/mkdocs_autolinks_plugin-0.7.1-py3-none-any.whl", hash = "sha256:5c6c17f6649b68e79a9ef0b2648d59f3072e18002b90ee1586a64c505f11ab12", size = 4235, upload_time = "2023-08-04T14:42:23.955Z" }, + { url = "https://files.pythonhosted.org/packages/d4/9c/ee3d81a799b8b0b73a89625bcbf3c58cd369c8a26a1b415413edea9bf259/mkdocs_autolinks_plugin-0.7.1-py3-none-any.whl", hash = "sha256:5c6c17f6649b68e79a9ef0b2648d59f3072e18002b90ee1586a64c505f11ab12", size = 4235 }, ] [[package]] @@ -988,9 +988,9 @@ dependencies = [ { name = "markupsafe" }, { name = "mkdocs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/47/0c/c9826f35b99c67fa3a7cddfa094c1a6c43fafde558c309c6e4403e5b37dc/mkdocs_autorefs-1.4.2.tar.gz", hash = "sha256:e2ebe1abd2b67d597ed19378c0fff84d73d1dbce411fce7a7cc6f161888b6749", size = 54961, upload_time = "2025-05-20T13:09:09.886Z" } +sdist = { url = "https://files.pythonhosted.org/packages/47/0c/c9826f35b99c67fa3a7cddfa094c1a6c43fafde558c309c6e4403e5b37dc/mkdocs_autorefs-1.4.2.tar.gz", hash = "sha256:e2ebe1abd2b67d597ed19378c0fff84d73d1dbce411fce7a7cc6f161888b6749", size = 54961 } wheels = [ - { url = "https://files.pythonhosted.org/packages/87/dc/fc063b78f4b769d1956319351704e23ebeba1e9e1d6a41b4b602325fd7e4/mkdocs_autorefs-1.4.2-py3-none-any.whl", hash = "sha256:83d6d777b66ec3c372a1aad4ae0cf77c243ba5bcda5bf0c6b8a2c5e7a3d89f13", size = 24969, upload_time = "2025-05-20T13:09:08.237Z" }, + { url = "https://files.pythonhosted.org/packages/87/dc/fc063b78f4b769d1956319351704e23ebeba1e9e1d6a41b4b602325fd7e4/mkdocs_autorefs-1.4.2-py3-none-any.whl", hash = "sha256:83d6d777b66ec3c372a1aad4ae0cf77c243ba5bcda5bf0c6b8a2c5e7a3d89f13", size = 24969 }, ] [[package]] @@ -1002,9 +1002,9 @@ dependencies = [ { name = "platformdirs" }, { name = "pyyaml" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/98/f5/ed29cd50067784976f25ed0ed6fcd3c2ce9eb90650aa3b2796ddf7b6870b/mkdocs_get_deps-0.2.0.tar.gz", hash = "sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c", size = 10239, upload_time = "2023-11-20T17:51:09.981Z" } +sdist = { url = "https://files.pythonhosted.org/packages/98/f5/ed29cd50067784976f25ed0ed6fcd3c2ce9eb90650aa3b2796ddf7b6870b/mkdocs_get_deps-0.2.0.tar.gz", hash = "sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c", size = 10239 } wheels = [ - { url = "https://files.pythonhosted.org/packages/9f/d4/029f984e8d3f3b6b726bd33cafc473b75e9e44c0f7e80a5b29abc466bdea/mkdocs_get_deps-0.2.0-py3-none-any.whl", hash = "sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134", size = 9521, upload_time = "2023-11-20T17:51:08.587Z" }, + { url = "https://files.pythonhosted.org/packages/9f/d4/029f984e8d3f3b6b726bd33cafc473b75e9e44c0f7e80a5b29abc466bdea/mkdocs_get_deps-0.2.0-py3-none-any.whl", hash = "sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134", size = 9521 }, ] [[package]] @@ -1017,9 +1017,9 @@ dependencies = [ { name = "mkdocs" }, { name = "pytz" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/5e/f8/a17ec39a4fc314d40cc96afdc1d401e393ebd4f42309d454cc940a2cf38a/mkdocs_git_revision_date_localized_plugin-1.4.7.tar.gz", hash = "sha256:10a49eff1e1c3cb766e054b9d8360c904ce4fe8c33ac3f6cc083ac6459c91953", size = 450473, upload_time = "2025-05-28T18:26:20.697Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5e/f8/a17ec39a4fc314d40cc96afdc1d401e393ebd4f42309d454cc940a2cf38a/mkdocs_git_revision_date_localized_plugin-1.4.7.tar.gz", hash = "sha256:10a49eff1e1c3cb766e054b9d8360c904ce4fe8c33ac3f6cc083ac6459c91953", size = 450473 } wheels = [ - { url = "https://files.pythonhosted.org/packages/53/b6/106fcc15287e7228658fbd0ad9e8b0d775becced0a089cc39984641f4a0f/mkdocs_git_revision_date_localized_plugin-1.4.7-py3-none-any.whl", hash = "sha256:056c0a90242409148f1dc94d5c9d2c25b5b8ddd8de45489fa38f7fa7ccad2bc4", size = 25382, upload_time = "2025-05-28T18:26:18.907Z" }, + { url = "https://files.pythonhosted.org/packages/53/b6/106fcc15287e7228658fbd0ad9e8b0d775becced0a089cc39984641f4a0f/mkdocs_git_revision_date_localized_plugin-1.4.7-py3-none-any.whl", hash = "sha256:056c0a90242409148f1dc94d5c9d2c25b5b8ddd8de45489fa38f7fa7ccad2bc4", size = 25382 }, ] [[package]] @@ -1039,18 +1039,18 @@ dependencies = [ { name = "pymdown-extensions" }, { name = "requests" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/95/c1/f804ba2db2ddc2183e900befe7dad64339a34fa935034e1ab405289d0a97/mkdocs_material-9.6.15.tar.gz", hash = "sha256:64adf8fa8dba1a17905b6aee1894a5aafd966d4aeb44a11088519b0f5ca4f1b5", size = 3951836, upload_time = "2025-07-01T10:14:15.671Z" } +sdist = { url = "https://files.pythonhosted.org/packages/95/c1/f804ba2db2ddc2183e900befe7dad64339a34fa935034e1ab405289d0a97/mkdocs_material-9.6.15.tar.gz", hash = "sha256:64adf8fa8dba1a17905b6aee1894a5aafd966d4aeb44a11088519b0f5ca4f1b5", size = 3951836 } wheels = [ - { url = "https://files.pythonhosted.org/packages/1d/30/dda19f0495a9096b64b6b3c07c4bfcff1c76ee0fc521086d53593f18b4c0/mkdocs_material-9.6.15-py3-none-any.whl", hash = "sha256:ac969c94d4fe5eb7c924b6d2f43d7db41159ea91553d18a9afc4780c34f2717a", size = 8716840, upload_time = "2025-07-01T10:14:13.18Z" }, + { url = "https://files.pythonhosted.org/packages/1d/30/dda19f0495a9096b64b6b3c07c4bfcff1c76ee0fc521086d53593f18b4c0/mkdocs_material-9.6.15-py3-none-any.whl", hash = "sha256:ac969c94d4fe5eb7c924b6d2f43d7db41159ea91553d18a9afc4780c34f2717a", size = 8716840 }, ] [[package]] name = "mkdocs-material-extensions" version = "1.3.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/79/9b/9b4c96d6593b2a541e1cb8b34899a6d021d208bb357042823d4d2cabdbe7/mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443", size = 11847, upload_time = "2023-11-22T19:09:45.208Z" } +sdist = { url = "https://files.pythonhosted.org/packages/79/9b/9b4c96d6593b2a541e1cb8b34899a6d021d208bb357042823d4d2cabdbe7/mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443", size = 11847 } wheels = [ - { url = "https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31", size = 8728, upload_time = "2023-11-22T19:09:43.465Z" }, + { url = "https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31", size = 8728 }, ] [[package]] @@ -1063,9 +1063,9 @@ dependencies = [ { name = "jsmin" }, { name = "mkdocs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/52/67/fe4b77e7a8ae7628392e28b14122588beaf6078b53eb91c7ed000fd158ac/mkdocs-minify-plugin-0.8.0.tar.gz", hash = "sha256:bc11b78b8120d79e817308e2b11539d790d21445eb63df831e393f76e52e753d", size = 8366, upload_time = "2024-01-29T16:11:32.982Z" } +sdist = { url = "https://files.pythonhosted.org/packages/52/67/fe4b77e7a8ae7628392e28b14122588beaf6078b53eb91c7ed000fd158ac/mkdocs-minify-plugin-0.8.0.tar.gz", hash = "sha256:bc11b78b8120d79e817308e2b11539d790d21445eb63df831e393f76e52e753d", size = 8366 } wheels = [ - { url = "https://files.pythonhosted.org/packages/1b/cd/2e8d0d92421916e2ea4ff97f10a544a9bd5588eb747556701c983581df13/mkdocs_minify_plugin-0.8.0-py3-none-any.whl", hash = "sha256:5fba1a3f7bd9a2142c9954a6559a57e946587b21f133165ece30ea145c66aee6", size = 6723, upload_time = "2024-01-29T16:11:31.851Z" }, + { url = "https://files.pythonhosted.org/packages/1b/cd/2e8d0d92421916e2ea4ff97f10a544a9bd5588eb747556701c983581df13/mkdocs_minify_plugin-0.8.0-py3-none-any.whl", hash = "sha256:5fba1a3f7bd9a2142c9954a6559a57e946587b21f133165ece30ea145c66aee6", size = 6723 }, ] [[package]] @@ -1075,9 +1075,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "mkdocs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/0a/0e/f72a506a21bdb27b807124e00c688226848a388d1fd3980b80ae3cc27203/mkdocs_open_in_new_tab-1.0.8.tar.gz", hash = "sha256:3e0dad08cc9938b0b13097be8e0aa435919de1eeb2d1a648e66b5dee8d57e048", size = 5791, upload_time = "2024-11-18T13:15:13.977Z" } +sdist = { url = "https://files.pythonhosted.org/packages/0a/0e/f72a506a21bdb27b807124e00c688226848a388d1fd3980b80ae3cc27203/mkdocs_open_in_new_tab-1.0.8.tar.gz", hash = "sha256:3e0dad08cc9938b0b13097be8e0aa435919de1eeb2d1a648e66b5dee8d57e048", size = 5791 } wheels = [ - { url = "https://files.pythonhosted.org/packages/21/94/44f3c868495481c868d08eea065c82803f1affd8553d3383b782f497613c/mkdocs_open_in_new_tab-1.0.8-py3-none-any.whl", hash = "sha256:051d767a4467b12d89827e1fea0ec660b05b027c726317fe4fceee5456e36ad2", size = 7717, upload_time = "2024-11-18T13:15:12.286Z" }, + { url = "https://files.pythonhosted.org/packages/21/94/44f3c868495481c868d08eea065c82803f1affd8553d3383b782f497613c/mkdocs_open_in_new_tab-1.0.8-py3-none-any.whl", hash = "sha256:051d767a4467b12d89827e1fea0ec660b05b027c726317fe4fceee5456e36ad2", size = 7717 }, ] [[package]] @@ -1092,9 +1092,9 @@ dependencies = [ { name = "mkdocs-autorefs" }, { name = "pymdown-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/41/e8/d22922664a627a0d3d7ff4a6ca95800f5dde54f411982591b4621a76225d/mkdocstrings-0.29.1.tar.gz", hash = "sha256:8722f8f8c5cd75da56671e0a0c1bbed1df9946c0cef74794d6141b34011abd42", size = 1212686, upload_time = "2025-03-31T08:33:11.997Z" } +sdist = { url = "https://files.pythonhosted.org/packages/41/e8/d22922664a627a0d3d7ff4a6ca95800f5dde54f411982591b4621a76225d/mkdocstrings-0.29.1.tar.gz", hash = "sha256:8722f8f8c5cd75da56671e0a0c1bbed1df9946c0cef74794d6141b34011abd42", size = 1212686 } wheels = [ - { url = "https://files.pythonhosted.org/packages/98/14/22533a578bf8b187e05d67e2c1721ce10e3f526610eebaf7a149d557ea7a/mkdocstrings-0.29.1-py3-none-any.whl", hash = "sha256:37a9736134934eea89cbd055a513d40a020d87dfcae9e3052c2a6b8cd4af09b6", size = 1631075, upload_time = "2025-03-31T08:33:09.661Z" }, + { url = "https://files.pythonhosted.org/packages/98/14/22533a578bf8b187e05d67e2c1721ce10e3f526610eebaf7a149d557ea7a/mkdocstrings-0.29.1-py3-none-any.whl", hash = "sha256:37a9736134934eea89cbd055a513d40a020d87dfcae9e3052c2a6b8cd4af09b6", size = 1631075 }, ] [[package]] @@ -1106,9 +1106,9 @@ dependencies = [ { name = "mkdocs-autorefs" }, { name = "mkdocstrings" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/bf/ed/b886f8c714fd7cccc39b79646b627dbea84cd95c46be43459ef46852caf0/mkdocstrings_python-1.16.12.tar.gz", hash = "sha256:9b9eaa066e0024342d433e332a41095c4e429937024945fea511afe58f63175d", size = 206065, upload_time = "2025-06-03T12:52:49.276Z" } +sdist = { url = "https://files.pythonhosted.org/packages/bf/ed/b886f8c714fd7cccc39b79646b627dbea84cd95c46be43459ef46852caf0/mkdocstrings_python-1.16.12.tar.gz", hash = "sha256:9b9eaa066e0024342d433e332a41095c4e429937024945fea511afe58f63175d", size = 206065 } wheels = [ - { url = "https://files.pythonhosted.org/packages/3b/dd/a24ee3de56954bfafb6ede7cd63c2413bb842cc48eb45e41c43a05a33074/mkdocstrings_python-1.16.12-py3-none-any.whl", hash = "sha256:22ded3a63b3d823d57457a70ff9860d5a4de9e8b1e482876fc9baabaf6f5f374", size = 124287, upload_time = "2025-06-03T12:52:47.819Z" }, + { url = "https://files.pythonhosted.org/packages/3b/dd/a24ee3de56954bfafb6ede7cd63c2413bb842cc48eb45e41c43a05a33074/mkdocstrings_python-1.16.12-py3-none-any.whl", hash = "sha256:22ded3a63b3d823d57457a70ff9860d5a4de9e8b1e482876fc9baabaf6f5f374", size = 124287 }, ] [[package]] @@ -1120,89 +1120,89 @@ dependencies = [ { name = "pathspec" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/81/69/92c7fa98112e4d9eb075a239caa4ef4649ad7d441545ccffbd5e34607cbb/mypy-1.16.1.tar.gz", hash = "sha256:6bd00a0a2094841c5e47e7374bb42b83d64c527a502e3334e1173a0c24437bab", size = 3324747, upload_time = "2025-06-16T16:51:35.145Z" } +sdist = { url = "https://files.pythonhosted.org/packages/81/69/92c7fa98112e4d9eb075a239caa4ef4649ad7d441545ccffbd5e34607cbb/mypy-1.16.1.tar.gz", hash = "sha256:6bd00a0a2094841c5e47e7374bb42b83d64c527a502e3334e1173a0c24437bab", size = 3324747 } wheels = [ - { url = "https://files.pythonhosted.org/packages/b4/d6/39482e5fcc724c15bf6280ff5806548c7185e0c090712a3736ed4d07e8b7/mypy-1.16.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:af4792433f09575d9eeca5c63d7d90ca4aeceda9d8355e136f80f8967639183d", size = 11066493, upload_time = "2025-06-16T16:47:01.683Z" }, - { url = "https://files.pythonhosted.org/packages/e6/e5/26c347890efc6b757f4d5bb83f4a0cf5958b8cf49c938ac99b8b72b420a6/mypy-1.16.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:66df38405fd8466ce3517eda1f6640611a0b8e70895e2a9462d1d4323c5eb4b9", size = 10081687, upload_time = "2025-06-16T16:48:19.367Z" }, - { url = "https://files.pythonhosted.org/packages/44/c7/b5cb264c97b86914487d6a24bd8688c0172e37ec0f43e93b9691cae9468b/mypy-1.16.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:44e7acddb3c48bd2713994d098729494117803616e116032af192871aed80b79", size = 11839723, upload_time = "2025-06-16T16:49:20.912Z" }, - { url = "https://files.pythonhosted.org/packages/15/f8/491997a9b8a554204f834ed4816bda813aefda31cf873bb099deee3c9a99/mypy-1.16.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0ab5eca37b50188163fa7c1b73c685ac66c4e9bdee4a85c9adac0e91d8895e15", size = 12722980, upload_time = "2025-06-16T16:37:40.929Z" }, - { url = "https://files.pythonhosted.org/packages/df/f0/2bd41e174b5fd93bc9de9a28e4fb673113633b8a7f3a607fa4a73595e468/mypy-1.16.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dedb6229b2c9086247e21a83c309754b9058b438704ad2f6807f0d8227f6ebdd", size = 12903328, upload_time = "2025-06-16T16:34:35.099Z" }, - { url = "https://files.pythonhosted.org/packages/61/81/5572108a7bec2c46b8aff7e9b524f371fe6ab5efb534d38d6b37b5490da8/mypy-1.16.1-cp312-cp312-win_amd64.whl", hash = "sha256:1f0435cf920e287ff68af3d10a118a73f212deb2ce087619eb4e648116d1fe9b", size = 9562321, upload_time = "2025-06-16T16:48:58.823Z" }, - { url = "https://files.pythonhosted.org/packages/28/e3/96964af4a75a949e67df4b95318fe2b7427ac8189bbc3ef28f92a1c5bc56/mypy-1.16.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ddc91eb318c8751c69ddb200a5937f1232ee8efb4e64e9f4bc475a33719de438", size = 11063480, upload_time = "2025-06-16T16:47:56.205Z" }, - { url = "https://files.pythonhosted.org/packages/f5/4d/cd1a42b8e5be278fab7010fb289d9307a63e07153f0ae1510a3d7b703193/mypy-1.16.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:87ff2c13d58bdc4bbe7dc0dedfe622c0f04e2cb2a492269f3b418df2de05c536", size = 10090538, upload_time = "2025-06-16T16:46:43.92Z" }, - { url = "https://files.pythonhosted.org/packages/c9/4f/c3c6b4b66374b5f68bab07c8cabd63a049ff69796b844bc759a0ca99bb2a/mypy-1.16.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a7cfb0fe29fe5a9841b7c8ee6dffb52382c45acdf68f032145b75620acfbd6f", size = 11836839, upload_time = "2025-06-16T16:36:28.039Z" }, - { url = "https://files.pythonhosted.org/packages/b4/7e/81ca3b074021ad9775e5cb97ebe0089c0f13684b066a750b7dc208438403/mypy-1.16.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:051e1677689c9d9578b9c7f4d206d763f9bbd95723cd1416fad50db49d52f359", size = 12715634, upload_time = "2025-06-16T16:50:34.441Z" }, - { url = "https://files.pythonhosted.org/packages/e9/95/bdd40c8be346fa4c70edb4081d727a54d0a05382d84966869738cfa8a497/mypy-1.16.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d5d2309511cc56c021b4b4e462907c2b12f669b2dbeb68300110ec27723971be", size = 12895584, upload_time = "2025-06-16T16:34:54.857Z" }, - { url = "https://files.pythonhosted.org/packages/5a/fd/d486a0827a1c597b3b48b1bdef47228a6e9ee8102ab8c28f944cb83b65dc/mypy-1.16.1-cp313-cp313-win_amd64.whl", hash = "sha256:4f58ac32771341e38a853c5d0ec0dfe27e18e27da9cdb8bbc882d2249c71a3ee", size = 9573886, upload_time = "2025-06-16T16:36:43.589Z" }, - { url = "https://files.pythonhosted.org/packages/cf/d3/53e684e78e07c1a2bf7105715e5edd09ce951fc3f47cf9ed095ec1b7a037/mypy-1.16.1-py3-none-any.whl", hash = "sha256:5fc2ac4027d0ef28d6ba69a0343737a23c4d1b83672bf38d1fe237bdc0643b37", size = 2265923, upload_time = "2025-06-16T16:48:02.366Z" }, + { url = "https://files.pythonhosted.org/packages/b4/d6/39482e5fcc724c15bf6280ff5806548c7185e0c090712a3736ed4d07e8b7/mypy-1.16.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:af4792433f09575d9eeca5c63d7d90ca4aeceda9d8355e136f80f8967639183d", size = 11066493 }, + { url = "https://files.pythonhosted.org/packages/e6/e5/26c347890efc6b757f4d5bb83f4a0cf5958b8cf49c938ac99b8b72b420a6/mypy-1.16.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:66df38405fd8466ce3517eda1f6640611a0b8e70895e2a9462d1d4323c5eb4b9", size = 10081687 }, + { url = "https://files.pythonhosted.org/packages/44/c7/b5cb264c97b86914487d6a24bd8688c0172e37ec0f43e93b9691cae9468b/mypy-1.16.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:44e7acddb3c48bd2713994d098729494117803616e116032af192871aed80b79", size = 11839723 }, + { url = "https://files.pythonhosted.org/packages/15/f8/491997a9b8a554204f834ed4816bda813aefda31cf873bb099deee3c9a99/mypy-1.16.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0ab5eca37b50188163fa7c1b73c685ac66c4e9bdee4a85c9adac0e91d8895e15", size = 12722980 }, + { url = "https://files.pythonhosted.org/packages/df/f0/2bd41e174b5fd93bc9de9a28e4fb673113633b8a7f3a607fa4a73595e468/mypy-1.16.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dedb6229b2c9086247e21a83c309754b9058b438704ad2f6807f0d8227f6ebdd", size = 12903328 }, + { url = "https://files.pythonhosted.org/packages/61/81/5572108a7bec2c46b8aff7e9b524f371fe6ab5efb534d38d6b37b5490da8/mypy-1.16.1-cp312-cp312-win_amd64.whl", hash = "sha256:1f0435cf920e287ff68af3d10a118a73f212deb2ce087619eb4e648116d1fe9b", size = 9562321 }, + { url = "https://files.pythonhosted.org/packages/28/e3/96964af4a75a949e67df4b95318fe2b7427ac8189bbc3ef28f92a1c5bc56/mypy-1.16.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ddc91eb318c8751c69ddb200a5937f1232ee8efb4e64e9f4bc475a33719de438", size = 11063480 }, + { url = "https://files.pythonhosted.org/packages/f5/4d/cd1a42b8e5be278fab7010fb289d9307a63e07153f0ae1510a3d7b703193/mypy-1.16.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:87ff2c13d58bdc4bbe7dc0dedfe622c0f04e2cb2a492269f3b418df2de05c536", size = 10090538 }, + { url = "https://files.pythonhosted.org/packages/c9/4f/c3c6b4b66374b5f68bab07c8cabd63a049ff69796b844bc759a0ca99bb2a/mypy-1.16.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a7cfb0fe29fe5a9841b7c8ee6dffb52382c45acdf68f032145b75620acfbd6f", size = 11836839 }, + { url = "https://files.pythonhosted.org/packages/b4/7e/81ca3b074021ad9775e5cb97ebe0089c0f13684b066a750b7dc208438403/mypy-1.16.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:051e1677689c9d9578b9c7f4d206d763f9bbd95723cd1416fad50db49d52f359", size = 12715634 }, + { url = "https://files.pythonhosted.org/packages/e9/95/bdd40c8be346fa4c70edb4081d727a54d0a05382d84966869738cfa8a497/mypy-1.16.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d5d2309511cc56c021b4b4e462907c2b12f669b2dbeb68300110ec27723971be", size = 12895584 }, + { url = "https://files.pythonhosted.org/packages/5a/fd/d486a0827a1c597b3b48b1bdef47228a6e9ee8102ab8c28f944cb83b65dc/mypy-1.16.1-cp313-cp313-win_amd64.whl", hash = "sha256:4f58ac32771341e38a853c5d0ec0dfe27e18e27da9cdb8bbc882d2249c71a3ee", size = 9573886 }, + { url = "https://files.pythonhosted.org/packages/cf/d3/53e684e78e07c1a2bf7105715e5edd09ce951fc3f47cf9ed095ec1b7a037/mypy-1.16.1-py3-none-any.whl", hash = "sha256:5fc2ac4027d0ef28d6ba69a0343737a23c4d1b83672bf38d1fe237bdc0643b37", size = 2265923 }, ] [[package]] name = "mypy-extensions" version = "1.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a2/6e/371856a3fb9d31ca8dac321cda606860fa4548858c0cc45d9d1d4ca2628b/mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558", size = 6343, upload_time = "2025-04-22T14:54:24.164Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/6e/371856a3fb9d31ca8dac321cda606860fa4548858c0cc45d9d1d4ca2628b/mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558", size = 6343 } wheels = [ - { url = "https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505", size = 4963, upload_time = "2025-04-22T14:54:22.983Z" }, + { url = "https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505", size = 4963 }, ] [[package]] name = "nest-asyncio" version = "1.6.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/83/f8/51569ac65d696c8ecbee95938f89d4abf00f47d58d48f6fbabfe8f0baefe/nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe", size = 7418, upload_time = "2024-01-21T14:25:19.227Z" } +sdist = { url = "https://files.pythonhosted.org/packages/83/f8/51569ac65d696c8ecbee95938f89d4abf00f47d58d48f6fbabfe8f0baefe/nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe", size = 7418 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c", size = 5195, upload_time = "2024-01-21T14:25:17.223Z" }, + { url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c", size = 5195 }, ] [[package]] name = "nodeenv" version = "1.9.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/43/16/fc88b08840de0e0a72a2f9d8c6bae36be573e475a6326ae854bcc549fc45/nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f", size = 47437, upload_time = "2024-06-04T18:44:11.171Z" } +sdist = { url = "https://files.pythonhosted.org/packages/43/16/fc88b08840de0e0a72a2f9d8c6bae36be573e475a6326ae854bcc549fc45/nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f", size = 47437 } wheels = [ - { url = "https://files.pythonhosted.org/packages/d2/1d/1b658dbd2b9fa9c4c9f32accbfc0205d532c8c6194dc0f2a4c0428e7128a/nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9", size = 22314, upload_time = "2024-06-04T18:44:08.352Z" }, + { url = "https://files.pythonhosted.org/packages/d2/1d/1b658dbd2b9fa9c4c9f32accbfc0205d532c8c6194dc0f2a4c0428e7128a/nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9", size = 22314 }, ] [[package]] name = "numpy" version = "2.3.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2e/19/d7c972dfe90a353dbd3efbbe1d14a5951de80c99c9dc1b93cd998d51dc0f/numpy-2.3.1.tar.gz", hash = "sha256:1ec9ae20a4226da374362cca3c62cd753faf2f951440b0e3b98e93c235441d2b", size = 20390372, upload_time = "2025-06-21T12:28:33.469Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c6/56/71ad5022e2f63cfe0ca93559403d0edef14aea70a841d640bd13cdba578e/numpy-2.3.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2959d8f268f3d8ee402b04a9ec4bb7604555aeacf78b360dc4ec27f1d508177d", size = 20896664, upload_time = "2025-06-21T12:15:30.845Z" }, - { url = "https://files.pythonhosted.org/packages/25/65/2db52ba049813670f7f987cc5db6dac9be7cd95e923cc6832b3d32d87cef/numpy-2.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:762e0c0c6b56bdedfef9a8e1d4538556438288c4276901ea008ae44091954e29", size = 14131078, upload_time = "2025-06-21T12:15:52.23Z" }, - { url = "https://files.pythonhosted.org/packages/57/dd/28fa3c17b0e751047ac928c1e1b6990238faad76e9b147e585b573d9d1bd/numpy-2.3.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:867ef172a0976aaa1f1d1b63cf2090de8b636a7674607d514505fb7276ab08fc", size = 5112554, upload_time = "2025-06-21T12:16:01.434Z" }, - { url = "https://files.pythonhosted.org/packages/c9/fc/84ea0cba8e760c4644b708b6819d91784c290288c27aca916115e3311d17/numpy-2.3.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:4e602e1b8682c2b833af89ba641ad4176053aaa50f5cacda1a27004352dde943", size = 6646560, upload_time = "2025-06-21T12:16:11.895Z" }, - { url = "https://files.pythonhosted.org/packages/61/b2/512b0c2ddec985ad1e496b0bd853eeb572315c0f07cd6997473ced8f15e2/numpy-2.3.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:8e333040d069eba1652fb08962ec5b76af7f2c7bce1df7e1418c8055cf776f25", size = 14260638, upload_time = "2025-06-21T12:16:32.611Z" }, - { url = "https://files.pythonhosted.org/packages/6e/45/c51cb248e679a6c6ab14b7a8e3ead3f4a3fe7425fc7a6f98b3f147bec532/numpy-2.3.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:e7cbf5a5eafd8d230a3ce356d892512185230e4781a361229bd902ff403bc660", size = 16632729, upload_time = "2025-06-21T12:16:57.439Z" }, - { url = "https://files.pythonhosted.org/packages/e4/ff/feb4be2e5c09a3da161b412019caf47183099cbea1132fd98061808c2df2/numpy-2.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5f1b8f26d1086835f442286c1d9b64bb3974b0b1e41bb105358fd07d20872952", size = 15565330, upload_time = "2025-06-21T12:17:20.638Z" }, - { url = "https://files.pythonhosted.org/packages/bc/6d/ceafe87587101e9ab0d370e4f6e5f3f3a85b9a697f2318738e5e7e176ce3/numpy-2.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ee8340cb48c9b7a5899d1149eece41ca535513a9698098edbade2a8e7a84da77", size = 18361734, upload_time = "2025-06-21T12:17:47.938Z" }, - { url = "https://files.pythonhosted.org/packages/2b/19/0fb49a3ea088be691f040c9bf1817e4669a339d6e98579f91859b902c636/numpy-2.3.1-cp312-cp312-win32.whl", hash = "sha256:e772dda20a6002ef7061713dc1e2585bc1b534e7909b2030b5a46dae8ff077ab", size = 6320411, upload_time = "2025-06-21T12:17:58.475Z" }, - { url = "https://files.pythonhosted.org/packages/b1/3e/e28f4c1dd9e042eb57a3eb652f200225e311b608632bc727ae378623d4f8/numpy-2.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:cfecc7822543abdea6de08758091da655ea2210b8ffa1faf116b940693d3df76", size = 12734973, upload_time = "2025-06-21T12:18:17.601Z" }, - { url = "https://files.pythonhosted.org/packages/04/a8/8a5e9079dc722acf53522b8f8842e79541ea81835e9b5483388701421073/numpy-2.3.1-cp312-cp312-win_arm64.whl", hash = "sha256:7be91b2239af2658653c5bb6f1b8bccafaf08226a258caf78ce44710a0160d30", size = 10191491, upload_time = "2025-06-21T12:18:33.585Z" }, - { url = "https://files.pythonhosted.org/packages/d4/bd/35ad97006d8abff8631293f8ea6adf07b0108ce6fec68da3c3fcca1197f2/numpy-2.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:25a1992b0a3fdcdaec9f552ef10d8103186f5397ab45e2d25f8ac51b1a6b97e8", size = 20889381, upload_time = "2025-06-21T12:19:04.103Z" }, - { url = "https://files.pythonhosted.org/packages/f1/4f/df5923874d8095b6062495b39729178eef4a922119cee32a12ee1bd4664c/numpy-2.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7dea630156d39b02a63c18f508f85010230409db5b2927ba59c8ba4ab3e8272e", size = 14152726, upload_time = "2025-06-21T12:19:25.599Z" }, - { url = "https://files.pythonhosted.org/packages/8c/0f/a1f269b125806212a876f7efb049b06c6f8772cf0121139f97774cd95626/numpy-2.3.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:bada6058dd886061f10ea15f230ccf7dfff40572e99fef440a4a857c8728c9c0", size = 5105145, upload_time = "2025-06-21T12:19:34.782Z" }, - { url = "https://files.pythonhosted.org/packages/6d/63/a7f7fd5f375b0361682f6ffbf686787e82b7bbd561268e4f30afad2bb3c0/numpy-2.3.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:a894f3816eb17b29e4783e5873f92faf55b710c2519e5c351767c51f79d8526d", size = 6639409, upload_time = "2025-06-21T12:19:45.228Z" }, - { url = "https://files.pythonhosted.org/packages/bf/0d/1854a4121af895aab383f4aa233748f1df4671ef331d898e32426756a8a6/numpy-2.3.1-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:18703df6c4a4fee55fd3d6e5a253d01c5d33a295409b03fda0c86b3ca2ff41a1", size = 14257630, upload_time = "2025-06-21T12:20:06.544Z" }, - { url = "https://files.pythonhosted.org/packages/50/30/af1b277b443f2fb08acf1c55ce9d68ee540043f158630d62cef012750f9f/numpy-2.3.1-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:5902660491bd7a48b2ec16c23ccb9124b8abfd9583c5fdfa123fe6b421e03de1", size = 16627546, upload_time = "2025-06-21T12:20:31.002Z" }, - { url = "https://files.pythonhosted.org/packages/6e/ec/3b68220c277e463095342d254c61be8144c31208db18d3fd8ef02712bcd6/numpy-2.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:36890eb9e9d2081137bd78d29050ba63b8dab95dff7912eadf1185e80074b2a0", size = 15562538, upload_time = "2025-06-21T12:20:54.322Z" }, - { url = "https://files.pythonhosted.org/packages/77/2b/4014f2bcc4404484021c74d4c5ee8eb3de7e3f7ac75f06672f8dcf85140a/numpy-2.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a780033466159c2270531e2b8ac063704592a0bc62ec4a1b991c7c40705eb0e8", size = 18360327, upload_time = "2025-06-21T12:21:21.053Z" }, - { url = "https://files.pythonhosted.org/packages/40/8d/2ddd6c9b30fcf920837b8672f6c65590c7d92e43084c25fc65edc22e93ca/numpy-2.3.1-cp313-cp313-win32.whl", hash = "sha256:39bff12c076812595c3a306f22bfe49919c5513aa1e0e70fac756a0be7c2a2b8", size = 6312330, upload_time = "2025-06-21T12:25:07.447Z" }, - { url = "https://files.pythonhosted.org/packages/dd/c8/beaba449925988d415efccb45bf977ff8327a02f655090627318f6398c7b/numpy-2.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:8d5ee6eec45f08ce507a6570e06f2f879b374a552087a4179ea7838edbcbfa42", size = 12731565, upload_time = "2025-06-21T12:25:26.444Z" }, - { url = "https://files.pythonhosted.org/packages/0b/c3/5c0c575d7ec78c1126998071f58facfc124006635da75b090805e642c62e/numpy-2.3.1-cp313-cp313-win_arm64.whl", hash = "sha256:0c4d9e0a8368db90f93bd192bfa771ace63137c3488d198ee21dfb8e7771916e", size = 10190262, upload_time = "2025-06-21T12:25:42.196Z" }, - { url = "https://files.pythonhosted.org/packages/ea/19/a029cd335cf72f79d2644dcfc22d90f09caa86265cbbde3b5702ccef6890/numpy-2.3.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:b0b5397374f32ec0649dd98c652a1798192042e715df918c20672c62fb52d4b8", size = 20987593, upload_time = "2025-06-21T12:21:51.664Z" }, - { url = "https://files.pythonhosted.org/packages/25/91/8ea8894406209107d9ce19b66314194675d31761fe2cb3c84fe2eeae2f37/numpy-2.3.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:c5bdf2015ccfcee8253fb8be695516ac4457c743473a43290fd36eba6a1777eb", size = 14300523, upload_time = "2025-06-21T12:22:13.583Z" }, - { url = "https://files.pythonhosted.org/packages/a6/7f/06187b0066eefc9e7ce77d5f2ddb4e314a55220ad62dd0bfc9f2c44bac14/numpy-2.3.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:d70f20df7f08b90a2062c1f07737dd340adccf2068d0f1b9b3d56e2038979fee", size = 5227993, upload_time = "2025-06-21T12:22:22.53Z" }, - { url = "https://files.pythonhosted.org/packages/e8/ec/a926c293c605fa75e9cfb09f1e4840098ed46d2edaa6e2152ee35dc01ed3/numpy-2.3.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:2fb86b7e58f9ac50e1e9dd1290154107e47d1eef23a0ae9145ded06ea606f992", size = 6736652, upload_time = "2025-06-21T12:22:33.629Z" }, - { url = "https://files.pythonhosted.org/packages/e3/62/d68e52fb6fde5586650d4c0ce0b05ff3a48ad4df4ffd1b8866479d1d671d/numpy-2.3.1-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:23ab05b2d241f76cb883ce8b9a93a680752fbfcbd51c50eff0b88b979e471d8c", size = 14331561, upload_time = "2025-06-21T12:22:55.056Z" }, - { url = "https://files.pythonhosted.org/packages/fc/ec/b74d3f2430960044bdad6900d9f5edc2dc0fb8bf5a0be0f65287bf2cbe27/numpy-2.3.1-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:ce2ce9e5de4703a673e705183f64fd5da5bf36e7beddcb63a25ee2286e71ca48", size = 16693349, upload_time = "2025-06-21T12:23:20.53Z" }, - { url = "https://files.pythonhosted.org/packages/0d/15/def96774b9d7eb198ddadfcbd20281b20ebb510580419197e225f5c55c3e/numpy-2.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c4913079974eeb5c16ccfd2b1f09354b8fed7e0d6f2cab933104a09a6419b1ee", size = 15642053, upload_time = "2025-06-21T12:23:43.697Z" }, - { url = "https://files.pythonhosted.org/packages/2b/57/c3203974762a759540c6ae71d0ea2341c1fa41d84e4971a8e76d7141678a/numpy-2.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:010ce9b4f00d5c036053ca684c77441f2f2c934fd23bee058b4d6f196efd8280", size = 18434184, upload_time = "2025-06-21T12:24:10.708Z" }, - { url = "https://files.pythonhosted.org/packages/22/8a/ccdf201457ed8ac6245187850aff4ca56a79edbea4829f4e9f14d46fa9a5/numpy-2.3.1-cp313-cp313t-win32.whl", hash = "sha256:6269b9edfe32912584ec496d91b00b6d34282ca1d07eb10e82dfc780907d6c2e", size = 6440678, upload_time = "2025-06-21T12:24:21.596Z" }, - { url = "https://files.pythonhosted.org/packages/f1/7e/7f431d8bd8eb7e03d79294aed238b1b0b174b3148570d03a8a8a8f6a0da9/numpy-2.3.1-cp313-cp313t-win_amd64.whl", hash = "sha256:2a809637460e88a113e186e87f228d74ae2852a2e0c44de275263376f17b5bdc", size = 12870697, upload_time = "2025-06-21T12:24:40.644Z" }, - { url = "https://files.pythonhosted.org/packages/d4/ca/af82bf0fad4c3e573c6930ed743b5308492ff19917c7caaf2f9b6f9e2e98/numpy-2.3.1-cp313-cp313t-win_arm64.whl", hash = "sha256:eccb9a159db9aed60800187bc47a6d3451553f0e1b08b068d8b277ddfbb9b244", size = 10260376, upload_time = "2025-06-21T12:24:56.884Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/2e/19/d7c972dfe90a353dbd3efbbe1d14a5951de80c99c9dc1b93cd998d51dc0f/numpy-2.3.1.tar.gz", hash = "sha256:1ec9ae20a4226da374362cca3c62cd753faf2f951440b0e3b98e93c235441d2b", size = 20390372 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c6/56/71ad5022e2f63cfe0ca93559403d0edef14aea70a841d640bd13cdba578e/numpy-2.3.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2959d8f268f3d8ee402b04a9ec4bb7604555aeacf78b360dc4ec27f1d508177d", size = 20896664 }, + { url = "https://files.pythonhosted.org/packages/25/65/2db52ba049813670f7f987cc5db6dac9be7cd95e923cc6832b3d32d87cef/numpy-2.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:762e0c0c6b56bdedfef9a8e1d4538556438288c4276901ea008ae44091954e29", size = 14131078 }, + { url = "https://files.pythonhosted.org/packages/57/dd/28fa3c17b0e751047ac928c1e1b6990238faad76e9b147e585b573d9d1bd/numpy-2.3.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:867ef172a0976aaa1f1d1b63cf2090de8b636a7674607d514505fb7276ab08fc", size = 5112554 }, + { url = "https://files.pythonhosted.org/packages/c9/fc/84ea0cba8e760c4644b708b6819d91784c290288c27aca916115e3311d17/numpy-2.3.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:4e602e1b8682c2b833af89ba641ad4176053aaa50f5cacda1a27004352dde943", size = 6646560 }, + { url = "https://files.pythonhosted.org/packages/61/b2/512b0c2ddec985ad1e496b0bd853eeb572315c0f07cd6997473ced8f15e2/numpy-2.3.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:8e333040d069eba1652fb08962ec5b76af7f2c7bce1df7e1418c8055cf776f25", size = 14260638 }, + { url = "https://files.pythonhosted.org/packages/6e/45/c51cb248e679a6c6ab14b7a8e3ead3f4a3fe7425fc7a6f98b3f147bec532/numpy-2.3.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:e7cbf5a5eafd8d230a3ce356d892512185230e4781a361229bd902ff403bc660", size = 16632729 }, + { url = "https://files.pythonhosted.org/packages/e4/ff/feb4be2e5c09a3da161b412019caf47183099cbea1132fd98061808c2df2/numpy-2.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5f1b8f26d1086835f442286c1d9b64bb3974b0b1e41bb105358fd07d20872952", size = 15565330 }, + { url = "https://files.pythonhosted.org/packages/bc/6d/ceafe87587101e9ab0d370e4f6e5f3f3a85b9a697f2318738e5e7e176ce3/numpy-2.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ee8340cb48c9b7a5899d1149eece41ca535513a9698098edbade2a8e7a84da77", size = 18361734 }, + { url = "https://files.pythonhosted.org/packages/2b/19/0fb49a3ea088be691f040c9bf1817e4669a339d6e98579f91859b902c636/numpy-2.3.1-cp312-cp312-win32.whl", hash = "sha256:e772dda20a6002ef7061713dc1e2585bc1b534e7909b2030b5a46dae8ff077ab", size = 6320411 }, + { url = "https://files.pythonhosted.org/packages/b1/3e/e28f4c1dd9e042eb57a3eb652f200225e311b608632bc727ae378623d4f8/numpy-2.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:cfecc7822543abdea6de08758091da655ea2210b8ffa1faf116b940693d3df76", size = 12734973 }, + { url = "https://files.pythonhosted.org/packages/04/a8/8a5e9079dc722acf53522b8f8842e79541ea81835e9b5483388701421073/numpy-2.3.1-cp312-cp312-win_arm64.whl", hash = "sha256:7be91b2239af2658653c5bb6f1b8bccafaf08226a258caf78ce44710a0160d30", size = 10191491 }, + { url = "https://files.pythonhosted.org/packages/d4/bd/35ad97006d8abff8631293f8ea6adf07b0108ce6fec68da3c3fcca1197f2/numpy-2.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:25a1992b0a3fdcdaec9f552ef10d8103186f5397ab45e2d25f8ac51b1a6b97e8", size = 20889381 }, + { url = "https://files.pythonhosted.org/packages/f1/4f/df5923874d8095b6062495b39729178eef4a922119cee32a12ee1bd4664c/numpy-2.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7dea630156d39b02a63c18f508f85010230409db5b2927ba59c8ba4ab3e8272e", size = 14152726 }, + { url = "https://files.pythonhosted.org/packages/8c/0f/a1f269b125806212a876f7efb049b06c6f8772cf0121139f97774cd95626/numpy-2.3.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:bada6058dd886061f10ea15f230ccf7dfff40572e99fef440a4a857c8728c9c0", size = 5105145 }, + { url = "https://files.pythonhosted.org/packages/6d/63/a7f7fd5f375b0361682f6ffbf686787e82b7bbd561268e4f30afad2bb3c0/numpy-2.3.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:a894f3816eb17b29e4783e5873f92faf55b710c2519e5c351767c51f79d8526d", size = 6639409 }, + { url = "https://files.pythonhosted.org/packages/bf/0d/1854a4121af895aab383f4aa233748f1df4671ef331d898e32426756a8a6/numpy-2.3.1-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:18703df6c4a4fee55fd3d6e5a253d01c5d33a295409b03fda0c86b3ca2ff41a1", size = 14257630 }, + { url = "https://files.pythonhosted.org/packages/50/30/af1b277b443f2fb08acf1c55ce9d68ee540043f158630d62cef012750f9f/numpy-2.3.1-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:5902660491bd7a48b2ec16c23ccb9124b8abfd9583c5fdfa123fe6b421e03de1", size = 16627546 }, + { url = "https://files.pythonhosted.org/packages/6e/ec/3b68220c277e463095342d254c61be8144c31208db18d3fd8ef02712bcd6/numpy-2.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:36890eb9e9d2081137bd78d29050ba63b8dab95dff7912eadf1185e80074b2a0", size = 15562538 }, + { url = "https://files.pythonhosted.org/packages/77/2b/4014f2bcc4404484021c74d4c5ee8eb3de7e3f7ac75f06672f8dcf85140a/numpy-2.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a780033466159c2270531e2b8ac063704592a0bc62ec4a1b991c7c40705eb0e8", size = 18360327 }, + { url = "https://files.pythonhosted.org/packages/40/8d/2ddd6c9b30fcf920837b8672f6c65590c7d92e43084c25fc65edc22e93ca/numpy-2.3.1-cp313-cp313-win32.whl", hash = "sha256:39bff12c076812595c3a306f22bfe49919c5513aa1e0e70fac756a0be7c2a2b8", size = 6312330 }, + { url = "https://files.pythonhosted.org/packages/dd/c8/beaba449925988d415efccb45bf977ff8327a02f655090627318f6398c7b/numpy-2.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:8d5ee6eec45f08ce507a6570e06f2f879b374a552087a4179ea7838edbcbfa42", size = 12731565 }, + { url = "https://files.pythonhosted.org/packages/0b/c3/5c0c575d7ec78c1126998071f58facfc124006635da75b090805e642c62e/numpy-2.3.1-cp313-cp313-win_arm64.whl", hash = "sha256:0c4d9e0a8368db90f93bd192bfa771ace63137c3488d198ee21dfb8e7771916e", size = 10190262 }, + { url = "https://files.pythonhosted.org/packages/ea/19/a029cd335cf72f79d2644dcfc22d90f09caa86265cbbde3b5702ccef6890/numpy-2.3.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:b0b5397374f32ec0649dd98c652a1798192042e715df918c20672c62fb52d4b8", size = 20987593 }, + { url = "https://files.pythonhosted.org/packages/25/91/8ea8894406209107d9ce19b66314194675d31761fe2cb3c84fe2eeae2f37/numpy-2.3.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:c5bdf2015ccfcee8253fb8be695516ac4457c743473a43290fd36eba6a1777eb", size = 14300523 }, + { url = "https://files.pythonhosted.org/packages/a6/7f/06187b0066eefc9e7ce77d5f2ddb4e314a55220ad62dd0bfc9f2c44bac14/numpy-2.3.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:d70f20df7f08b90a2062c1f07737dd340adccf2068d0f1b9b3d56e2038979fee", size = 5227993 }, + { url = "https://files.pythonhosted.org/packages/e8/ec/a926c293c605fa75e9cfb09f1e4840098ed46d2edaa6e2152ee35dc01ed3/numpy-2.3.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:2fb86b7e58f9ac50e1e9dd1290154107e47d1eef23a0ae9145ded06ea606f992", size = 6736652 }, + { url = "https://files.pythonhosted.org/packages/e3/62/d68e52fb6fde5586650d4c0ce0b05ff3a48ad4df4ffd1b8866479d1d671d/numpy-2.3.1-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:23ab05b2d241f76cb883ce8b9a93a680752fbfcbd51c50eff0b88b979e471d8c", size = 14331561 }, + { url = "https://files.pythonhosted.org/packages/fc/ec/b74d3f2430960044bdad6900d9f5edc2dc0fb8bf5a0be0f65287bf2cbe27/numpy-2.3.1-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:ce2ce9e5de4703a673e705183f64fd5da5bf36e7beddcb63a25ee2286e71ca48", size = 16693349 }, + { url = "https://files.pythonhosted.org/packages/0d/15/def96774b9d7eb198ddadfcbd20281b20ebb510580419197e225f5c55c3e/numpy-2.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c4913079974eeb5c16ccfd2b1f09354b8fed7e0d6f2cab933104a09a6419b1ee", size = 15642053 }, + { url = "https://files.pythonhosted.org/packages/2b/57/c3203974762a759540c6ae71d0ea2341c1fa41d84e4971a8e76d7141678a/numpy-2.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:010ce9b4f00d5c036053ca684c77441f2f2c934fd23bee058b4d6f196efd8280", size = 18434184 }, + { url = "https://files.pythonhosted.org/packages/22/8a/ccdf201457ed8ac6245187850aff4ca56a79edbea4829f4e9f14d46fa9a5/numpy-2.3.1-cp313-cp313t-win32.whl", hash = "sha256:6269b9edfe32912584ec496d91b00b6d34282ca1d07eb10e82dfc780907d6c2e", size = 6440678 }, + { url = "https://files.pythonhosted.org/packages/f1/7e/7f431d8bd8eb7e03d79294aed238b1b0b174b3148570d03a8a8a8f6a0da9/numpy-2.3.1-cp313-cp313t-win_amd64.whl", hash = "sha256:2a809637460e88a113e186e87f228d74ae2852a2e0c44de275263376f17b5bdc", size = 12870697 }, + { url = "https://files.pythonhosted.org/packages/d4/ca/af82bf0fad4c3e573c6930ed743b5308492ff19917c7caaf2f9b6f9e2e98/numpy-2.3.1-cp313-cp313t-win_arm64.whl", hash = "sha256:eccb9a159db9aed60800187bc47a6d3451553f0e1b08b068d8b277ddfbb9b244", size = 10260376 }, ] [[package]] @@ -1216,9 +1216,9 @@ dependencies = [ { name = "pyarrow" }, { name = "requests" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/1a/d1/5c0bb2a714ebea7df131b8e87010eab39d0df75878f6785f2a214ff66bb2/oda_reader-1.2.2.tar.gz", hash = "sha256:55be081e1744e75184eca3d09e794fad71958201d08b48fb497aac97a95f3685", size = 35630, upload_time = "2025-06-16T16:15:05.49Z" } +sdist = { url = "https://files.pythonhosted.org/packages/1a/d1/5c0bb2a714ebea7df131b8e87010eab39d0df75878f6785f2a214ff66bb2/oda_reader-1.2.2.tar.gz", hash = "sha256:55be081e1744e75184eca3d09e794fad71958201d08b48fb497aac97a95f3685", size = 35630 } wheels = [ - { url = "https://files.pythonhosted.org/packages/d8/ec/59338ec9108848dc53f50e7381b9817595bf98f414f4a732100a06828a3b/oda_reader-1.2.2-py3-none-any.whl", hash = "sha256:7f7b854ab1e9bc2cf64b6c63bd56a2ac64cb90ec054518fd01b741fd518cf007", size = 45314, upload_time = "2025-06-16T16:15:04.328Z" }, + { url = "https://files.pythonhosted.org/packages/d8/ec/59338ec9108848dc53f50e7381b9817595bf98f414f4a732100a06828a3b/oda_reader-1.2.2-py3-none-any.whl", hash = "sha256:7f7b854ab1e9bc2cf64b6c63bd56a2ac64cb90ec054518fd01b741fd518cf007", size = 45314 }, ] [[package]] @@ -1228,27 +1228,27 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "et-xmlfile" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/3d/f9/88d94a75de065ea32619465d2f77b29a0469500e99012523b91cc4141cd1/openpyxl-3.1.5.tar.gz", hash = "sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050", size = 186464, upload_time = "2024-06-28T14:03:44.161Z" } +sdist = { url = "https://files.pythonhosted.org/packages/3d/f9/88d94a75de065ea32619465d2f77b29a0469500e99012523b91cc4141cd1/openpyxl-3.1.5.tar.gz", hash = "sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050", size = 186464 } wheels = [ - { url = "https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl", hash = "sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2", size = 250910, upload_time = "2024-06-28T14:03:41.161Z" }, + { url = "https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl", hash = "sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2", size = 250910 }, ] [[package]] name = "packaging" version = "25.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727, upload_time = "2025-04-19T11:48:59.673Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727 } wheels = [ - { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469, upload_time = "2025-04-19T11:48:57.875Z" }, + { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469 }, ] [[package]] name = "paginate" version = "0.5.7" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ec/46/68dde5b6bc00c1296ec6466ab27dddede6aec9af1b99090e1107091b3b84/paginate-0.5.7.tar.gz", hash = "sha256:22bd083ab41e1a8b4f3690544afb2c60c25e5c9a63a30fa2f483f6c60c8e5945", size = 19252, upload_time = "2024-08-25T14:17:24.139Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ec/46/68dde5b6bc00c1296ec6466ab27dddede6aec9af1b99090e1107091b3b84/paginate-0.5.7.tar.gz", hash = "sha256:22bd083ab41e1a8b4f3690544afb2c60c25e5c9a63a30fa2f483f6c60c8e5945", size = 19252 } wheels = [ - { url = "https://files.pythonhosted.org/packages/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl", hash = "sha256:b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591", size = 13746, upload_time = "2024-08-25T14:17:22.55Z" }, + { url = "https://files.pythonhosted.org/packages/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl", hash = "sha256:b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591", size = 13746 }, ] [[package]] @@ -1261,53 +1261,53 @@ dependencies = [ { name = "pytz" }, { name = "tzdata" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d1/6f/75aa71f8a14267117adeeed5d21b204770189c0a0025acbdc03c337b28fc/pandas-2.3.1.tar.gz", hash = "sha256:0a95b9ac964fe83ce317827f80304d37388ea77616b1425f0ae41c9d2d0d7bb2", size = 4487493, upload_time = "2025-07-07T19:20:04.079Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/46/de/b8445e0f5d217a99fe0eeb2f4988070908979bec3587c0633e5428ab596c/pandas-2.3.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:689968e841136f9e542020698ee1c4fbe9caa2ed2213ae2388dc7b81721510d3", size = 11588172, upload_time = "2025-07-07T19:18:52.054Z" }, - { url = "https://files.pythonhosted.org/packages/1e/e0/801cdb3564e65a5ac041ab99ea6f1d802a6c325bb6e58c79c06a3f1cd010/pandas-2.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:025e92411c16cbe5bb2a4abc99732a6b132f439b8aab23a59fa593eb00704232", size = 10717365, upload_time = "2025-07-07T19:18:54.785Z" }, - { url = "https://files.pythonhosted.org/packages/51/a5/c76a8311833c24ae61a376dbf360eb1b1c9247a5d9c1e8b356563b31b80c/pandas-2.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b7ff55f31c4fcb3e316e8f7fa194566b286d6ac430afec0d461163312c5841e", size = 11280411, upload_time = "2025-07-07T19:18:57.045Z" }, - { url = "https://files.pythonhosted.org/packages/da/01/e383018feba0a1ead6cf5fe8728e5d767fee02f06a3d800e82c489e5daaf/pandas-2.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7dcb79bf373a47d2a40cf7232928eb7540155abbc460925c2c96d2d30b006eb4", size = 11988013, upload_time = "2025-07-07T19:18:59.771Z" }, - { url = "https://files.pythonhosted.org/packages/5b/14/cec7760d7c9507f11c97d64f29022e12a6cc4fc03ac694535e89f88ad2ec/pandas-2.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:56a342b231e8862c96bdb6ab97170e203ce511f4d0429589c8ede1ee8ece48b8", size = 12767210, upload_time = "2025-07-07T19:19:02.944Z" }, - { url = "https://files.pythonhosted.org/packages/50/b9/6e2d2c6728ed29fb3d4d4d302504fb66f1a543e37eb2e43f352a86365cdf/pandas-2.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ca7ed14832bce68baef331f4d7f294411bed8efd032f8109d690df45e00c4679", size = 13440571, upload_time = "2025-07-07T19:19:06.82Z" }, - { url = "https://files.pythonhosted.org/packages/80/a5/3a92893e7399a691bad7664d977cb5e7c81cf666c81f89ea76ba2bff483d/pandas-2.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:ac942bfd0aca577bef61f2bc8da8147c4ef6879965ef883d8e8d5d2dc3e744b8", size = 10987601, upload_time = "2025-07-07T19:19:09.589Z" }, - { url = "https://files.pythonhosted.org/packages/32/ed/ff0a67a2c5505e1854e6715586ac6693dd860fbf52ef9f81edee200266e7/pandas-2.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9026bd4a80108fac2239294a15ef9003c4ee191a0f64b90f170b40cfb7cf2d22", size = 11531393, upload_time = "2025-07-07T19:19:12.245Z" }, - { url = "https://files.pythonhosted.org/packages/c7/db/d8f24a7cc9fb0972adab0cc80b6817e8bef888cfd0024eeb5a21c0bb5c4a/pandas-2.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6de8547d4fdb12421e2d047a2c446c623ff4c11f47fddb6b9169eb98ffba485a", size = 10668750, upload_time = "2025-07-07T19:19:14.612Z" }, - { url = "https://files.pythonhosted.org/packages/0f/b0/80f6ec783313f1e2356b28b4fd8d2148c378370045da918c73145e6aab50/pandas-2.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:782647ddc63c83133b2506912cc6b108140a38a37292102aaa19c81c83db2928", size = 11342004, upload_time = "2025-07-07T19:19:16.857Z" }, - { url = "https://files.pythonhosted.org/packages/e9/e2/20a317688435470872885e7fc8f95109ae9683dec7c50be29b56911515a5/pandas-2.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ba6aff74075311fc88504b1db890187a3cd0f887a5b10f5525f8e2ef55bfdb9", size = 12050869, upload_time = "2025-07-07T19:19:19.265Z" }, - { url = "https://files.pythonhosted.org/packages/55/79/20d746b0a96c67203a5bee5fb4e00ac49c3e8009a39e1f78de264ecc5729/pandas-2.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e5635178b387bd2ba4ac040f82bc2ef6e6b500483975c4ebacd34bec945fda12", size = 12750218, upload_time = "2025-07-07T19:19:21.547Z" }, - { url = "https://files.pythonhosted.org/packages/7c/0f/145c8b41e48dbf03dd18fdd7f24f8ba95b8254a97a3379048378f33e7838/pandas-2.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6f3bf5ec947526106399a9e1d26d40ee2b259c66422efdf4de63c848492d91bb", size = 13416763, upload_time = "2025-07-07T19:19:23.939Z" }, - { url = "https://files.pythonhosted.org/packages/b2/c0/54415af59db5cdd86a3d3bf79863e8cc3fa9ed265f0745254061ac09d5f2/pandas-2.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:1c78cf43c8fde236342a1cb2c34bcff89564a7bfed7e474ed2fffa6aed03a956", size = 10987482, upload_time = "2025-07-07T19:19:42.699Z" }, - { url = "https://files.pythonhosted.org/packages/48/64/2fd2e400073a1230e13b8cd604c9bc95d9e3b962e5d44088ead2e8f0cfec/pandas-2.3.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:8dfc17328e8da77be3cf9f47509e5637ba8f137148ed0e9b5241e1baf526e20a", size = 12029159, upload_time = "2025-07-07T19:19:26.362Z" }, - { url = "https://files.pythonhosted.org/packages/d8/0a/d84fd79b0293b7ef88c760d7dca69828d867c89b6d9bc52d6a27e4d87316/pandas-2.3.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:ec6c851509364c59a5344458ab935e6451b31b818be467eb24b0fe89bd05b6b9", size = 11393287, upload_time = "2025-07-07T19:19:29.157Z" }, - { url = "https://files.pythonhosted.org/packages/50/ae/ff885d2b6e88f3c7520bb74ba319268b42f05d7e583b5dded9837da2723f/pandas-2.3.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:911580460fc4884d9b05254b38a6bfadddfcc6aaef856fb5859e7ca202e45275", size = 11309381, upload_time = "2025-07-07T19:19:31.436Z" }, - { url = "https://files.pythonhosted.org/packages/85/86/1fa345fc17caf5d7780d2699985c03dbe186c68fee00b526813939062bb0/pandas-2.3.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f4d6feeba91744872a600e6edbbd5b033005b431d5ae8379abee5bcfa479fab", size = 11883998, upload_time = "2025-07-07T19:19:34.267Z" }, - { url = "https://files.pythonhosted.org/packages/81/aa/e58541a49b5e6310d89474333e994ee57fea97c8aaa8fc7f00b873059bbf/pandas-2.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:fe37e757f462d31a9cd7580236a82f353f5713a80e059a29753cf938c6775d96", size = 12704705, upload_time = "2025-07-07T19:19:36.856Z" }, - { url = "https://files.pythonhosted.org/packages/d5/f9/07086f5b0f2a19872554abeea7658200824f5835c58a106fa8f2ae96a46c/pandas-2.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5db9637dbc24b631ff3707269ae4559bce4b7fd75c1c4d7e13f40edc42df4444", size = 13189044, upload_time = "2025-07-07T19:19:39.999Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/d1/6f/75aa71f8a14267117adeeed5d21b204770189c0a0025acbdc03c337b28fc/pandas-2.3.1.tar.gz", hash = "sha256:0a95b9ac964fe83ce317827f80304d37388ea77616b1425f0ae41c9d2d0d7bb2", size = 4487493 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/46/de/b8445e0f5d217a99fe0eeb2f4988070908979bec3587c0633e5428ab596c/pandas-2.3.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:689968e841136f9e542020698ee1c4fbe9caa2ed2213ae2388dc7b81721510d3", size = 11588172 }, + { url = "https://files.pythonhosted.org/packages/1e/e0/801cdb3564e65a5ac041ab99ea6f1d802a6c325bb6e58c79c06a3f1cd010/pandas-2.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:025e92411c16cbe5bb2a4abc99732a6b132f439b8aab23a59fa593eb00704232", size = 10717365 }, + { url = "https://files.pythonhosted.org/packages/51/a5/c76a8311833c24ae61a376dbf360eb1b1c9247a5d9c1e8b356563b31b80c/pandas-2.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b7ff55f31c4fcb3e316e8f7fa194566b286d6ac430afec0d461163312c5841e", size = 11280411 }, + { url = "https://files.pythonhosted.org/packages/da/01/e383018feba0a1ead6cf5fe8728e5d767fee02f06a3d800e82c489e5daaf/pandas-2.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7dcb79bf373a47d2a40cf7232928eb7540155abbc460925c2c96d2d30b006eb4", size = 11988013 }, + { url = "https://files.pythonhosted.org/packages/5b/14/cec7760d7c9507f11c97d64f29022e12a6cc4fc03ac694535e89f88ad2ec/pandas-2.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:56a342b231e8862c96bdb6ab97170e203ce511f4d0429589c8ede1ee8ece48b8", size = 12767210 }, + { url = "https://files.pythonhosted.org/packages/50/b9/6e2d2c6728ed29fb3d4d4d302504fb66f1a543e37eb2e43f352a86365cdf/pandas-2.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ca7ed14832bce68baef331f4d7f294411bed8efd032f8109d690df45e00c4679", size = 13440571 }, + { url = "https://files.pythonhosted.org/packages/80/a5/3a92893e7399a691bad7664d977cb5e7c81cf666c81f89ea76ba2bff483d/pandas-2.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:ac942bfd0aca577bef61f2bc8da8147c4ef6879965ef883d8e8d5d2dc3e744b8", size = 10987601 }, + { url = "https://files.pythonhosted.org/packages/32/ed/ff0a67a2c5505e1854e6715586ac6693dd860fbf52ef9f81edee200266e7/pandas-2.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9026bd4a80108fac2239294a15ef9003c4ee191a0f64b90f170b40cfb7cf2d22", size = 11531393 }, + { url = "https://files.pythonhosted.org/packages/c7/db/d8f24a7cc9fb0972adab0cc80b6817e8bef888cfd0024eeb5a21c0bb5c4a/pandas-2.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6de8547d4fdb12421e2d047a2c446c623ff4c11f47fddb6b9169eb98ffba485a", size = 10668750 }, + { url = "https://files.pythonhosted.org/packages/0f/b0/80f6ec783313f1e2356b28b4fd8d2148c378370045da918c73145e6aab50/pandas-2.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:782647ddc63c83133b2506912cc6b108140a38a37292102aaa19c81c83db2928", size = 11342004 }, + { url = "https://files.pythonhosted.org/packages/e9/e2/20a317688435470872885e7fc8f95109ae9683dec7c50be29b56911515a5/pandas-2.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ba6aff74075311fc88504b1db890187a3cd0f887a5b10f5525f8e2ef55bfdb9", size = 12050869 }, + { url = "https://files.pythonhosted.org/packages/55/79/20d746b0a96c67203a5bee5fb4e00ac49c3e8009a39e1f78de264ecc5729/pandas-2.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e5635178b387bd2ba4ac040f82bc2ef6e6b500483975c4ebacd34bec945fda12", size = 12750218 }, + { url = "https://files.pythonhosted.org/packages/7c/0f/145c8b41e48dbf03dd18fdd7f24f8ba95b8254a97a3379048378f33e7838/pandas-2.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6f3bf5ec947526106399a9e1d26d40ee2b259c66422efdf4de63c848492d91bb", size = 13416763 }, + { url = "https://files.pythonhosted.org/packages/b2/c0/54415af59db5cdd86a3d3bf79863e8cc3fa9ed265f0745254061ac09d5f2/pandas-2.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:1c78cf43c8fde236342a1cb2c34bcff89564a7bfed7e474ed2fffa6aed03a956", size = 10987482 }, + { url = "https://files.pythonhosted.org/packages/48/64/2fd2e400073a1230e13b8cd604c9bc95d9e3b962e5d44088ead2e8f0cfec/pandas-2.3.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:8dfc17328e8da77be3cf9f47509e5637ba8f137148ed0e9b5241e1baf526e20a", size = 12029159 }, + { url = "https://files.pythonhosted.org/packages/d8/0a/d84fd79b0293b7ef88c760d7dca69828d867c89b6d9bc52d6a27e4d87316/pandas-2.3.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:ec6c851509364c59a5344458ab935e6451b31b818be467eb24b0fe89bd05b6b9", size = 11393287 }, + { url = "https://files.pythonhosted.org/packages/50/ae/ff885d2b6e88f3c7520bb74ba319268b42f05d7e583b5dded9837da2723f/pandas-2.3.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:911580460fc4884d9b05254b38a6bfadddfcc6aaef856fb5859e7ca202e45275", size = 11309381 }, + { url = "https://files.pythonhosted.org/packages/85/86/1fa345fc17caf5d7780d2699985c03dbe186c68fee00b526813939062bb0/pandas-2.3.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f4d6feeba91744872a600e6edbbd5b033005b431d5ae8379abee5bcfa479fab", size = 11883998 }, + { url = "https://files.pythonhosted.org/packages/81/aa/e58541a49b5e6310d89474333e994ee57fea97c8aaa8fc7f00b873059bbf/pandas-2.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:fe37e757f462d31a9cd7580236a82f353f5713a80e059a29753cf938c6775d96", size = 12704705 }, + { url = "https://files.pythonhosted.org/packages/d5/f9/07086f5b0f2a19872554abeea7658200824f5835c58a106fa8f2ae96a46c/pandas-2.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5db9637dbc24b631ff3707269ae4559bce4b7fd75c1c4d7e13f40edc42df4444", size = 13189044 }, ] [[package]] name = "parso" version = "0.8.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/66/94/68e2e17afaa9169cf6412ab0f28623903be73d1b32e208d9e8e541bb086d/parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d", size = 400609, upload_time = "2024-04-05T09:43:55.897Z" } +sdist = { url = "https://files.pythonhosted.org/packages/66/94/68e2e17afaa9169cf6412ab0f28623903be73d1b32e208d9e8e541bb086d/parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d", size = 400609 } wheels = [ - { url = "https://files.pythonhosted.org/packages/c6/ac/dac4a63f978e4dcb3c6d3a78c4d8e0192a113d288502a1216950c41b1027/parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18", size = 103650, upload_time = "2024-04-05T09:43:53.299Z" }, + { url = "https://files.pythonhosted.org/packages/c6/ac/dac4a63f978e4dcb3c6d3a78c4d8e0192a113d288502a1216950c41b1027/parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18", size = 103650 }, ] [[package]] name = "pathspec" version = "0.12.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ca/bc/f35b8446f4531a7cb215605d100cd88b7ac6f44ab3fc94870c120ab3adbf/pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712", size = 51043, upload_time = "2023-12-10T22:30:45Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ca/bc/f35b8446f4531a7cb215605d100cd88b7ac6f44ab3fc94870c120ab3adbf/pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712", size = 51043 } wheels = [ - { url = "https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", size = 31191, upload_time = "2023-12-10T22:30:43.14Z" }, + { url = "https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", size = 31191 }, ] [[package]] name = "petl" version = "1.7.16" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/99/28/ce7321fbd3b981fd9c212adf7455e0e4e42babebd83b92e24f8265d13dd3/petl-1.7.16.tar.gz", hash = "sha256:9c2fea64d859da45e120fd86d471e5387396cc45d5d4986efa79679f18eb8752", size = 420780, upload_time = "2025-04-04T23:54:50.921Z" } +sdist = { url = "https://files.pythonhosted.org/packages/99/28/ce7321fbd3b981fd9c212adf7455e0e4e42babebd83b92e24f8265d13dd3/petl-1.7.16.tar.gz", hash = "sha256:9c2fea64d859da45e120fd86d471e5387396cc45d5d4986efa79679f18eb8752", size = 420780 } [[package]] name = "pexpect" @@ -1316,9 +1316,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "ptyprocess" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450, upload_time = "2023-11-25T09:07:26.339Z" } +sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450 } wheels = [ - { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772, upload_time = "2023-11-25T06:56:14.81Z" }, + { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772 }, ] [[package]] @@ -1331,36 +1331,36 @@ dependencies = [ { name = "platformdirs" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/20/bb/52b15ddf7b7706ed591134a895dbf6e41c8348171fb635e655e0a4bbb0ea/pint-0.24.4.tar.gz", hash = "sha256:35275439b574837a6cd3020a5a4a73645eb125ce4152a73a2f126bf164b91b80", size = 342225, upload_time = "2024-11-07T16:29:46.061Z" } +sdist = { url = "https://files.pythonhosted.org/packages/20/bb/52b15ddf7b7706ed591134a895dbf6e41c8348171fb635e655e0a4bbb0ea/pint-0.24.4.tar.gz", hash = "sha256:35275439b574837a6cd3020a5a4a73645eb125ce4152a73a2f126bf164b91b80", size = 342225 } wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/16/bd2f5904557265882108dc2e04f18abc05ab0c2b7082ae9430091daf1d5c/Pint-0.24.4-py3-none-any.whl", hash = "sha256:aa54926c8772159fcf65f82cc0d34de6768c151b32ad1deb0331291c38fe7659", size = 302029, upload_time = "2024-11-07T16:29:43.976Z" }, + { url = "https://files.pythonhosted.org/packages/b7/16/bd2f5904557265882108dc2e04f18abc05ab0c2b7082ae9430091daf1d5c/Pint-0.24.4-py3-none-any.whl", hash = "sha256:aa54926c8772159fcf65f82cc0d34de6768c151b32ad1deb0331291c38fe7659", size = 302029 }, ] [[package]] name = "platformdirs" version = "4.3.8" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/fe/8b/3c73abc9c759ecd3f1f7ceff6685840859e8070c4d947c93fae71f6a0bf2/platformdirs-4.3.8.tar.gz", hash = "sha256:3d512d96e16bcb959a814c9f348431070822a6496326a4be0911c40b5a74c2bc", size = 21362, upload_time = "2025-05-07T22:47:42.121Z" } +sdist = { url = "https://files.pythonhosted.org/packages/fe/8b/3c73abc9c759ecd3f1f7ceff6685840859e8070c4d947c93fae71f6a0bf2/platformdirs-4.3.8.tar.gz", hash = "sha256:3d512d96e16bcb959a814c9f348431070822a6496326a4be0911c40b5a74c2bc", size = 21362 } wheels = [ - { url = "https://files.pythonhosted.org/packages/fe/39/979e8e21520d4e47a0bbe349e2713c0aac6f3d853d0e5b34d76206c439aa/platformdirs-4.3.8-py3-none-any.whl", hash = "sha256:ff7059bb7eb1179e2685604f4aaf157cfd9535242bd23742eadc3c13542139b4", size = 18567, upload_time = "2025-05-07T22:47:40.376Z" }, + { url = "https://files.pythonhosted.org/packages/fe/39/979e8e21520d4e47a0bbe349e2713c0aac6f3d853d0e5b34d76206c439aa/platformdirs-4.3.8-py3-none-any.whl", hash = "sha256:ff7059bb7eb1179e2685604f4aaf157cfd9535242bd23742eadc3c13542139b4", size = 18567 }, ] [[package]] name = "pluggy" version = "1.6.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload_time = "2025-05-15T12:30:07.975Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412 } wheels = [ - { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload_time = "2025-05-15T12:30:06.134Z" }, + { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538 }, ] [[package]] name = "ply" version = "3.11" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e5/69/882ee5c9d017149285cab114ebeab373308ef0f874fcdac9beb90e0ac4da/ply-3.11.tar.gz", hash = "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3", size = 159130, upload_time = "2018-02-15T19:01:31.097Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e5/69/882ee5c9d017149285cab114ebeab373308ef0f874fcdac9beb90e0ac4da/ply-3.11.tar.gz", hash = "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3", size = 159130 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a3/58/35da89ee790598a0700ea49b2a66594140f44dec458c07e8e3d4979137fc/ply-3.11-py2.py3-none-any.whl", hash = "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce", size = 49567, upload_time = "2018-02-15T19:01:27.172Z" }, + { url = "https://files.pythonhosted.org/packages/a3/58/35da89ee790598a0700ea49b2a66594140f44dec458c07e8e3d4979137fc/ply-3.11-py2.py3-none-any.whl", hash = "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce", size = 49567 }, ] [[package]] @@ -1374,9 +1374,9 @@ dependencies = [ { name = "pyyaml" }, { name = "virtualenv" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/08/39/679ca9b26c7bb2999ff122d50faa301e49af82ca9c066ec061cfbc0c6784/pre_commit-4.2.0.tar.gz", hash = "sha256:601283b9757afd87d40c4c4a9b2b5de9637a8ea02eaff7adc2d0fb4e04841146", size = 193424, upload_time = "2025-03-18T21:35:20.987Z" } +sdist = { url = "https://files.pythonhosted.org/packages/08/39/679ca9b26c7bb2999ff122d50faa301e49af82ca9c066ec061cfbc0c6784/pre_commit-4.2.0.tar.gz", hash = "sha256:601283b9757afd87d40c4c4a9b2b5de9637a8ea02eaff7adc2d0fb4e04841146", size = 193424 } wheels = [ - { url = "https://files.pythonhosted.org/packages/88/74/a88bf1b1efeae488a0c0b7bdf71429c313722d1fc0f377537fbe554e6180/pre_commit-4.2.0-py2.py3-none-any.whl", hash = "sha256:a009ca7205f1eb497d10b845e52c838a98b6cdd2102a6c8e4540e94ee75c58bd", size = 220707, upload_time = "2025-03-18T21:35:19.343Z" }, + { url = "https://files.pythonhosted.org/packages/88/74/a88bf1b1efeae488a0c0b7bdf71429c313722d1fc0f377537fbe554e6180/pre_commit-4.2.0-py2.py3-none-any.whl", hash = "sha256:a009ca7205f1eb497d10b845e52c838a98b6cdd2102a6c8e4540e94ee75c58bd", size = 220707 }, ] [[package]] @@ -1386,86 +1386,86 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "wcwidth" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/bb/6e/9d084c929dfe9e3bfe0c6a47e31f78a25c54627d64a66e884a8bf5474f1c/prompt_toolkit-3.0.51.tar.gz", hash = "sha256:931a162e3b27fc90c86f1b48bb1fb2c528c2761475e57c9c06de13311c7b54ed", size = 428940, upload_time = "2025-04-15T09:18:47.731Z" } +sdist = { url = "https://files.pythonhosted.org/packages/bb/6e/9d084c929dfe9e3bfe0c6a47e31f78a25c54627d64a66e884a8bf5474f1c/prompt_toolkit-3.0.51.tar.gz", hash = "sha256:931a162e3b27fc90c86f1b48bb1fb2c528c2761475e57c9c06de13311c7b54ed", size = 428940 } wheels = [ - { url = "https://files.pythonhosted.org/packages/ce/4f/5249960887b1fbe561d9ff265496d170b55a735b76724f10ef19f9e40716/prompt_toolkit-3.0.51-py3-none-any.whl", hash = "sha256:52742911fde84e2d423e2f9a4cf1de7d7ac4e51958f648d9540e0fb8db077b07", size = 387810, upload_time = "2025-04-15T09:18:44.753Z" }, + { url = "https://files.pythonhosted.org/packages/ce/4f/5249960887b1fbe561d9ff265496d170b55a735b76724f10ef19f9e40716/prompt_toolkit-3.0.51-py3-none-any.whl", hash = "sha256:52742911fde84e2d423e2f9a4cf1de7d7ac4e51958f648d9540e0fb8db077b07", size = 387810 }, ] [[package]] name = "psutil" version = "7.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2a/80/336820c1ad9286a4ded7e845b2eccfcb27851ab8ac6abece774a6ff4d3de/psutil-7.0.0.tar.gz", hash = "sha256:7be9c3eba38beccb6495ea33afd982a44074b78f28c434a1f51cc07fd315c456", size = 497003, upload_time = "2025-02-13T21:54:07.946Z" } +sdist = { url = "https://files.pythonhosted.org/packages/2a/80/336820c1ad9286a4ded7e845b2eccfcb27851ab8ac6abece774a6ff4d3de/psutil-7.0.0.tar.gz", hash = "sha256:7be9c3eba38beccb6495ea33afd982a44074b78f28c434a1f51cc07fd315c456", size = 497003 } wheels = [ - { url = "https://files.pythonhosted.org/packages/ed/e6/2d26234410f8b8abdbf891c9da62bee396583f713fb9f3325a4760875d22/psutil-7.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:101d71dc322e3cffd7cea0650b09b3d08b8e7c4109dd6809fe452dfd00e58b25", size = 238051, upload_time = "2025-02-13T21:54:12.36Z" }, - { url = "https://files.pythonhosted.org/packages/04/8b/30f930733afe425e3cbfc0e1468a30a18942350c1a8816acfade80c005c4/psutil-7.0.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:39db632f6bb862eeccf56660871433e111b6ea58f2caea825571951d4b6aa3da", size = 239535, upload_time = "2025-02-13T21:54:16.07Z" }, - { url = "https://files.pythonhosted.org/packages/2a/ed/d362e84620dd22876b55389248e522338ed1bf134a5edd3b8231d7207f6d/psutil-7.0.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fcee592b4c6f146991ca55919ea3d1f8926497a713ed7faaf8225e174581e91", size = 275004, upload_time = "2025-02-13T21:54:18.662Z" }, - { url = "https://files.pythonhosted.org/packages/bf/b9/b0eb3f3cbcb734d930fdf839431606844a825b23eaf9a6ab371edac8162c/psutil-7.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b1388a4f6875d7e2aff5c4ca1cc16c545ed41dd8bb596cefea80111db353a34", size = 277986, upload_time = "2025-02-13T21:54:21.811Z" }, - { url = "https://files.pythonhosted.org/packages/eb/a2/709e0fe2f093556c17fbafda93ac032257242cabcc7ff3369e2cb76a97aa/psutil-7.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5f098451abc2828f7dc6b58d44b532b22f2088f4999a937557b603ce72b1993", size = 279544, upload_time = "2025-02-13T21:54:24.68Z" }, - { url = "https://files.pythonhosted.org/packages/50/e6/eecf58810b9d12e6427369784efe814a1eec0f492084ce8eb8f4d89d6d61/psutil-7.0.0-cp37-abi3-win32.whl", hash = "sha256:ba3fcef7523064a6c9da440fc4d6bd07da93ac726b5733c29027d7dc95b39d99", size = 241053, upload_time = "2025-02-13T21:54:34.31Z" }, - { url = "https://files.pythonhosted.org/packages/50/1b/6921afe68c74868b4c9fa424dad3be35b095e16687989ebbb50ce4fceb7c/psutil-7.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:4cf3d4eb1aa9b348dec30105c55cd9b7d4629285735a102beb4441e38db90553", size = 244885, upload_time = "2025-02-13T21:54:37.486Z" }, + { url = "https://files.pythonhosted.org/packages/ed/e6/2d26234410f8b8abdbf891c9da62bee396583f713fb9f3325a4760875d22/psutil-7.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:101d71dc322e3cffd7cea0650b09b3d08b8e7c4109dd6809fe452dfd00e58b25", size = 238051 }, + { url = "https://files.pythonhosted.org/packages/04/8b/30f930733afe425e3cbfc0e1468a30a18942350c1a8816acfade80c005c4/psutil-7.0.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:39db632f6bb862eeccf56660871433e111b6ea58f2caea825571951d4b6aa3da", size = 239535 }, + { url = "https://files.pythonhosted.org/packages/2a/ed/d362e84620dd22876b55389248e522338ed1bf134a5edd3b8231d7207f6d/psutil-7.0.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fcee592b4c6f146991ca55919ea3d1f8926497a713ed7faaf8225e174581e91", size = 275004 }, + { url = "https://files.pythonhosted.org/packages/bf/b9/b0eb3f3cbcb734d930fdf839431606844a825b23eaf9a6ab371edac8162c/psutil-7.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b1388a4f6875d7e2aff5c4ca1cc16c545ed41dd8bb596cefea80111db353a34", size = 277986 }, + { url = "https://files.pythonhosted.org/packages/eb/a2/709e0fe2f093556c17fbafda93ac032257242cabcc7ff3369e2cb76a97aa/psutil-7.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5f098451abc2828f7dc6b58d44b532b22f2088f4999a937557b603ce72b1993", size = 279544 }, + { url = "https://files.pythonhosted.org/packages/50/e6/eecf58810b9d12e6427369784efe814a1eec0f492084ce8eb8f4d89d6d61/psutil-7.0.0-cp37-abi3-win32.whl", hash = "sha256:ba3fcef7523064a6c9da440fc4d6bd07da93ac726b5733c29027d7dc95b39d99", size = 241053 }, + { url = "https://files.pythonhosted.org/packages/50/1b/6921afe68c74868b4c9fa424dad3be35b095e16687989ebbb50ce4fceb7c/psutil-7.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:4cf3d4eb1aa9b348dec30105c55cd9b7d4629285735a102beb4441e38db90553", size = 244885 }, ] [[package]] name = "ptyprocess" version = "0.7.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220", size = 70762, upload_time = "2020-12-28T15:15:30.155Z" } +sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220", size = 70762 } wheels = [ - { url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", size = 13993, upload_time = "2020-12-28T15:15:28.35Z" }, + { url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", size = 13993 }, ] [[package]] name = "pure-eval" version = "0.2.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/cd/05/0a34433a064256a578f1783a10da6df098ceaa4a57bbeaa96a6c0352786b/pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42", size = 19752, upload_time = "2024-07-21T12:58:21.801Z" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/05/0a34433a064256a578f1783a10da6df098ceaa4a57bbeaa96a6c0352786b/pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42", size = 19752 } wheels = [ - { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842, upload_time = "2024-07-21T12:58:20.04Z" }, + { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842 }, ] [[package]] name = "pyarrow" version = "20.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a2/ee/a7810cb9f3d6e9238e61d312076a9859bf3668fd21c69744de9532383912/pyarrow-20.0.0.tar.gz", hash = "sha256:febc4a913592573c8d5805091a6c2b5064c8bd6e002131f01061797d91c783c1", size = 1125187, upload_time = "2025-04-27T12:34:23.264Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a1/d6/0c10e0d54f6c13eb464ee9b67a68b8c71bcf2f67760ef5b6fbcddd2ab05f/pyarrow-20.0.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:75a51a5b0eef32727a247707d4755322cb970be7e935172b6a3a9f9ae98404ba", size = 30815067, upload_time = "2025-04-27T12:29:44.384Z" }, - { url = "https://files.pythonhosted.org/packages/7e/e2/04e9874abe4094a06fd8b0cbb0f1312d8dd7d707f144c2ec1e5e8f452ffa/pyarrow-20.0.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:211d5e84cecc640c7a3ab900f930aaff5cd2702177e0d562d426fb7c4f737781", size = 32297128, upload_time = "2025-04-27T12:29:52.038Z" }, - { url = "https://files.pythonhosted.org/packages/31/fd/c565e5dcc906a3b471a83273039cb75cb79aad4a2d4a12f76cc5ae90a4b8/pyarrow-20.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ba3cf4182828be7a896cbd232aa8dd6a31bd1f9e32776cc3796c012855e1199", size = 41334890, upload_time = "2025-04-27T12:29:59.452Z" }, - { url = "https://files.pythonhosted.org/packages/af/a9/3bdd799e2c9b20c1ea6dc6fa8e83f29480a97711cf806e823f808c2316ac/pyarrow-20.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c3a01f313ffe27ac4126f4c2e5ea0f36a5fc6ab51f8726cf41fee4b256680bd", size = 42421775, upload_time = "2025-04-27T12:30:06.875Z" }, - { url = "https://files.pythonhosted.org/packages/10/f7/da98ccd86354c332f593218101ae56568d5dcedb460e342000bd89c49cc1/pyarrow-20.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:a2791f69ad72addd33510fec7bb14ee06c2a448e06b649e264c094c5b5f7ce28", size = 40687231, upload_time = "2025-04-27T12:30:13.954Z" }, - { url = "https://files.pythonhosted.org/packages/bb/1b/2168d6050e52ff1e6cefc61d600723870bf569cbf41d13db939c8cf97a16/pyarrow-20.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:4250e28a22302ce8692d3a0e8ec9d9dde54ec00d237cff4dfa9c1fbf79e472a8", size = 42295639, upload_time = "2025-04-27T12:30:21.949Z" }, - { url = "https://files.pythonhosted.org/packages/b2/66/2d976c0c7158fd25591c8ca55aee026e6d5745a021915a1835578707feb3/pyarrow-20.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:89e030dc58fc760e4010148e6ff164d2f44441490280ef1e97a542375e41058e", size = 42908549, upload_time = "2025-04-27T12:30:29.551Z" }, - { url = "https://files.pythonhosted.org/packages/31/a9/dfb999c2fc6911201dcbf348247f9cc382a8990f9ab45c12eabfd7243a38/pyarrow-20.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6102b4864d77102dbbb72965618e204e550135a940c2534711d5ffa787df2a5a", size = 44557216, upload_time = "2025-04-27T12:30:36.977Z" }, - { url = "https://files.pythonhosted.org/packages/a0/8e/9adee63dfa3911be2382fb4d92e4b2e7d82610f9d9f668493bebaa2af50f/pyarrow-20.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:96d6a0a37d9c98be08f5ed6a10831d88d52cac7b13f5287f1e0f625a0de8062b", size = 25660496, upload_time = "2025-04-27T12:30:42.809Z" }, - { url = "https://files.pythonhosted.org/packages/9b/aa/daa413b81446d20d4dad2944110dcf4cf4f4179ef7f685dd5a6d7570dc8e/pyarrow-20.0.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:a15532e77b94c61efadde86d10957950392999503b3616b2ffcef7621a002893", size = 30798501, upload_time = "2025-04-27T12:30:48.351Z" }, - { url = "https://files.pythonhosted.org/packages/ff/75/2303d1caa410925de902d32ac215dc80a7ce7dd8dfe95358c165f2adf107/pyarrow-20.0.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:dd43f58037443af715f34f1322c782ec463a3c8a94a85fdb2d987ceb5658e061", size = 32277895, upload_time = "2025-04-27T12:30:55.238Z" }, - { url = "https://files.pythonhosted.org/packages/92/41/fe18c7c0b38b20811b73d1bdd54b1fccba0dab0e51d2048878042d84afa8/pyarrow-20.0.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa0d288143a8585806e3cc7c39566407aab646fb9ece164609dac1cfff45f6ae", size = 41327322, upload_time = "2025-04-27T12:31:05.587Z" }, - { url = "https://files.pythonhosted.org/packages/da/ab/7dbf3d11db67c72dbf36ae63dcbc9f30b866c153b3a22ef728523943eee6/pyarrow-20.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6953f0114f8d6f3d905d98e987d0924dabce59c3cda380bdfaa25a6201563b4", size = 42411441, upload_time = "2025-04-27T12:31:15.675Z" }, - { url = "https://files.pythonhosted.org/packages/90/c3/0c7da7b6dac863af75b64e2f827e4742161128c350bfe7955b426484e226/pyarrow-20.0.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:991f85b48a8a5e839b2128590ce07611fae48a904cae6cab1f089c5955b57eb5", size = 40677027, upload_time = "2025-04-27T12:31:24.631Z" }, - { url = "https://files.pythonhosted.org/packages/be/27/43a47fa0ff9053ab5203bb3faeec435d43c0d8bfa40179bfd076cdbd4e1c/pyarrow-20.0.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:97c8dc984ed09cb07d618d57d8d4b67a5100a30c3818c2fb0b04599f0da2de7b", size = 42281473, upload_time = "2025-04-27T12:31:31.311Z" }, - { url = "https://files.pythonhosted.org/packages/bc/0b/d56c63b078876da81bbb9ba695a596eabee9b085555ed12bf6eb3b7cab0e/pyarrow-20.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9b71daf534f4745818f96c214dbc1e6124d7daf059167330b610fc69b6f3d3e3", size = 42893897, upload_time = "2025-04-27T12:31:39.406Z" }, - { url = "https://files.pythonhosted.org/packages/92/ac/7d4bd020ba9145f354012838692d48300c1b8fe5634bfda886abcada67ed/pyarrow-20.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e8b88758f9303fa5a83d6c90e176714b2fd3852e776fc2d7e42a22dd6c2fb368", size = 44543847, upload_time = "2025-04-27T12:31:45.997Z" }, - { url = "https://files.pythonhosted.org/packages/9d/07/290f4abf9ca702c5df7b47739c1b2c83588641ddfa2cc75e34a301d42e55/pyarrow-20.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:30b3051b7975801c1e1d387e17c588d8ab05ced9b1e14eec57915f79869b5031", size = 25653219, upload_time = "2025-04-27T12:31:54.11Z" }, - { url = "https://files.pythonhosted.org/packages/95/df/720bb17704b10bd69dde086e1400b8eefb8f58df3f8ac9cff6c425bf57f1/pyarrow-20.0.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:ca151afa4f9b7bc45bcc791eb9a89e90a9eb2772767d0b1e5389609c7d03db63", size = 30853957, upload_time = "2025-04-27T12:31:59.215Z" }, - { url = "https://files.pythonhosted.org/packages/d9/72/0d5f875efc31baef742ba55a00a25213a19ea64d7176e0fe001c5d8b6e9a/pyarrow-20.0.0-cp313-cp313t-macosx_12_0_x86_64.whl", hash = "sha256:4680f01ecd86e0dd63e39eb5cd59ef9ff24a9d166db328679e36c108dc993d4c", size = 32247972, upload_time = "2025-04-27T12:32:05.369Z" }, - { url = "https://files.pythonhosted.org/packages/d5/bc/e48b4fa544d2eea72f7844180eb77f83f2030b84c8dad860f199f94307ed/pyarrow-20.0.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f4c8534e2ff059765647aa69b75d6543f9fef59e2cd4c6d18015192565d2b70", size = 41256434, upload_time = "2025-04-27T12:32:11.814Z" }, - { url = "https://files.pythonhosted.org/packages/c3/01/974043a29874aa2cf4f87fb07fd108828fc7362300265a2a64a94965e35b/pyarrow-20.0.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e1f8a47f4b4ae4c69c4d702cfbdfe4d41e18e5c7ef6f1bb1c50918c1e81c57b", size = 42353648, upload_time = "2025-04-27T12:32:20.766Z" }, - { url = "https://files.pythonhosted.org/packages/68/95/cc0d3634cde9ca69b0e51cbe830d8915ea32dda2157560dda27ff3b3337b/pyarrow-20.0.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:a1f60dc14658efaa927f8214734f6a01a806d7690be4b3232ba526836d216122", size = 40619853, upload_time = "2025-04-27T12:32:28.1Z" }, - { url = "https://files.pythonhosted.org/packages/29/c2/3ad40e07e96a3e74e7ed7cc8285aadfa84eb848a798c98ec0ad009eb6bcc/pyarrow-20.0.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:204a846dca751428991346976b914d6d2a82ae5b8316a6ed99789ebf976551e6", size = 42241743, upload_time = "2025-04-27T12:32:35.792Z" }, - { url = "https://files.pythonhosted.org/packages/eb/cb/65fa110b483339add6a9bc7b6373614166b14e20375d4daa73483755f830/pyarrow-20.0.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:f3b117b922af5e4c6b9a9115825726cac7d8b1421c37c2b5e24fbacc8930612c", size = 42839441, upload_time = "2025-04-27T12:32:46.64Z" }, - { url = "https://files.pythonhosted.org/packages/98/7b/f30b1954589243207d7a0fbc9997401044bf9a033eec78f6cb50da3f304a/pyarrow-20.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e724a3fd23ae5b9c010e7be857f4405ed5e679db5c93e66204db1a69f733936a", size = 44503279, upload_time = "2025-04-27T12:32:56.503Z" }, - { url = "https://files.pythonhosted.org/packages/37/40/ad395740cd641869a13bcf60851296c89624662575621968dcfafabaa7f6/pyarrow-20.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:82f1ee5133bd8f49d31be1299dc07f585136679666b502540db854968576faf9", size = 25944982, upload_time = "2025-04-27T12:33:04.72Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/a2/ee/a7810cb9f3d6e9238e61d312076a9859bf3668fd21c69744de9532383912/pyarrow-20.0.0.tar.gz", hash = "sha256:febc4a913592573c8d5805091a6c2b5064c8bd6e002131f01061797d91c783c1", size = 1125187 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a1/d6/0c10e0d54f6c13eb464ee9b67a68b8c71bcf2f67760ef5b6fbcddd2ab05f/pyarrow-20.0.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:75a51a5b0eef32727a247707d4755322cb970be7e935172b6a3a9f9ae98404ba", size = 30815067 }, + { url = "https://files.pythonhosted.org/packages/7e/e2/04e9874abe4094a06fd8b0cbb0f1312d8dd7d707f144c2ec1e5e8f452ffa/pyarrow-20.0.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:211d5e84cecc640c7a3ab900f930aaff5cd2702177e0d562d426fb7c4f737781", size = 32297128 }, + { url = "https://files.pythonhosted.org/packages/31/fd/c565e5dcc906a3b471a83273039cb75cb79aad4a2d4a12f76cc5ae90a4b8/pyarrow-20.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ba3cf4182828be7a896cbd232aa8dd6a31bd1f9e32776cc3796c012855e1199", size = 41334890 }, + { url = "https://files.pythonhosted.org/packages/af/a9/3bdd799e2c9b20c1ea6dc6fa8e83f29480a97711cf806e823f808c2316ac/pyarrow-20.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c3a01f313ffe27ac4126f4c2e5ea0f36a5fc6ab51f8726cf41fee4b256680bd", size = 42421775 }, + { url = "https://files.pythonhosted.org/packages/10/f7/da98ccd86354c332f593218101ae56568d5dcedb460e342000bd89c49cc1/pyarrow-20.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:a2791f69ad72addd33510fec7bb14ee06c2a448e06b649e264c094c5b5f7ce28", size = 40687231 }, + { url = "https://files.pythonhosted.org/packages/bb/1b/2168d6050e52ff1e6cefc61d600723870bf569cbf41d13db939c8cf97a16/pyarrow-20.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:4250e28a22302ce8692d3a0e8ec9d9dde54ec00d237cff4dfa9c1fbf79e472a8", size = 42295639 }, + { url = "https://files.pythonhosted.org/packages/b2/66/2d976c0c7158fd25591c8ca55aee026e6d5745a021915a1835578707feb3/pyarrow-20.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:89e030dc58fc760e4010148e6ff164d2f44441490280ef1e97a542375e41058e", size = 42908549 }, + { url = "https://files.pythonhosted.org/packages/31/a9/dfb999c2fc6911201dcbf348247f9cc382a8990f9ab45c12eabfd7243a38/pyarrow-20.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6102b4864d77102dbbb72965618e204e550135a940c2534711d5ffa787df2a5a", size = 44557216 }, + { url = "https://files.pythonhosted.org/packages/a0/8e/9adee63dfa3911be2382fb4d92e4b2e7d82610f9d9f668493bebaa2af50f/pyarrow-20.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:96d6a0a37d9c98be08f5ed6a10831d88d52cac7b13f5287f1e0f625a0de8062b", size = 25660496 }, + { url = "https://files.pythonhosted.org/packages/9b/aa/daa413b81446d20d4dad2944110dcf4cf4f4179ef7f685dd5a6d7570dc8e/pyarrow-20.0.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:a15532e77b94c61efadde86d10957950392999503b3616b2ffcef7621a002893", size = 30798501 }, + { url = "https://files.pythonhosted.org/packages/ff/75/2303d1caa410925de902d32ac215dc80a7ce7dd8dfe95358c165f2adf107/pyarrow-20.0.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:dd43f58037443af715f34f1322c782ec463a3c8a94a85fdb2d987ceb5658e061", size = 32277895 }, + { url = "https://files.pythonhosted.org/packages/92/41/fe18c7c0b38b20811b73d1bdd54b1fccba0dab0e51d2048878042d84afa8/pyarrow-20.0.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa0d288143a8585806e3cc7c39566407aab646fb9ece164609dac1cfff45f6ae", size = 41327322 }, + { url = "https://files.pythonhosted.org/packages/da/ab/7dbf3d11db67c72dbf36ae63dcbc9f30b866c153b3a22ef728523943eee6/pyarrow-20.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6953f0114f8d6f3d905d98e987d0924dabce59c3cda380bdfaa25a6201563b4", size = 42411441 }, + { url = "https://files.pythonhosted.org/packages/90/c3/0c7da7b6dac863af75b64e2f827e4742161128c350bfe7955b426484e226/pyarrow-20.0.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:991f85b48a8a5e839b2128590ce07611fae48a904cae6cab1f089c5955b57eb5", size = 40677027 }, + { url = "https://files.pythonhosted.org/packages/be/27/43a47fa0ff9053ab5203bb3faeec435d43c0d8bfa40179bfd076cdbd4e1c/pyarrow-20.0.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:97c8dc984ed09cb07d618d57d8d4b67a5100a30c3818c2fb0b04599f0da2de7b", size = 42281473 }, + { url = "https://files.pythonhosted.org/packages/bc/0b/d56c63b078876da81bbb9ba695a596eabee9b085555ed12bf6eb3b7cab0e/pyarrow-20.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9b71daf534f4745818f96c214dbc1e6124d7daf059167330b610fc69b6f3d3e3", size = 42893897 }, + { url = "https://files.pythonhosted.org/packages/92/ac/7d4bd020ba9145f354012838692d48300c1b8fe5634bfda886abcada67ed/pyarrow-20.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e8b88758f9303fa5a83d6c90e176714b2fd3852e776fc2d7e42a22dd6c2fb368", size = 44543847 }, + { url = "https://files.pythonhosted.org/packages/9d/07/290f4abf9ca702c5df7b47739c1b2c83588641ddfa2cc75e34a301d42e55/pyarrow-20.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:30b3051b7975801c1e1d387e17c588d8ab05ced9b1e14eec57915f79869b5031", size = 25653219 }, + { url = "https://files.pythonhosted.org/packages/95/df/720bb17704b10bd69dde086e1400b8eefb8f58df3f8ac9cff6c425bf57f1/pyarrow-20.0.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:ca151afa4f9b7bc45bcc791eb9a89e90a9eb2772767d0b1e5389609c7d03db63", size = 30853957 }, + { url = "https://files.pythonhosted.org/packages/d9/72/0d5f875efc31baef742ba55a00a25213a19ea64d7176e0fe001c5d8b6e9a/pyarrow-20.0.0-cp313-cp313t-macosx_12_0_x86_64.whl", hash = "sha256:4680f01ecd86e0dd63e39eb5cd59ef9ff24a9d166db328679e36c108dc993d4c", size = 32247972 }, + { url = "https://files.pythonhosted.org/packages/d5/bc/e48b4fa544d2eea72f7844180eb77f83f2030b84c8dad860f199f94307ed/pyarrow-20.0.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f4c8534e2ff059765647aa69b75d6543f9fef59e2cd4c6d18015192565d2b70", size = 41256434 }, + { url = "https://files.pythonhosted.org/packages/c3/01/974043a29874aa2cf4f87fb07fd108828fc7362300265a2a64a94965e35b/pyarrow-20.0.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e1f8a47f4b4ae4c69c4d702cfbdfe4d41e18e5c7ef6f1bb1c50918c1e81c57b", size = 42353648 }, + { url = "https://files.pythonhosted.org/packages/68/95/cc0d3634cde9ca69b0e51cbe830d8915ea32dda2157560dda27ff3b3337b/pyarrow-20.0.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:a1f60dc14658efaa927f8214734f6a01a806d7690be4b3232ba526836d216122", size = 40619853 }, + { url = "https://files.pythonhosted.org/packages/29/c2/3ad40e07e96a3e74e7ed7cc8285aadfa84eb848a798c98ec0ad009eb6bcc/pyarrow-20.0.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:204a846dca751428991346976b914d6d2a82ae5b8316a6ed99789ebf976551e6", size = 42241743 }, + { url = "https://files.pythonhosted.org/packages/eb/cb/65fa110b483339add6a9bc7b6373614166b14e20375d4daa73483755f830/pyarrow-20.0.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:f3b117b922af5e4c6b9a9115825726cac7d8b1421c37c2b5e24fbacc8930612c", size = 42839441 }, + { url = "https://files.pythonhosted.org/packages/98/7b/f30b1954589243207d7a0fbc9997401044bf9a033eec78f6cb50da3f304a/pyarrow-20.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e724a3fd23ae5b9c010e7be857f4405ed5e679db5c93e66204db1a69f733936a", size = 44503279 }, + { url = "https://files.pythonhosted.org/packages/37/40/ad395740cd641869a13bcf60851296c89624662575621968dcfafabaa7f6/pyarrow-20.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:82f1ee5133bd8f49d31be1299dc07f585136679666b502540db854968576faf9", size = 25944982 }, ] [[package]] name = "pycparser" version = "2.22" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1d/b2/31537cf4b1ca988837256c910a668b553fceb8f069bedc4b1c826024b52c/pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", size = 172736, upload_time = "2024-03-30T13:22:22.564Z" } +sdist = { url = "https://files.pythonhosted.org/packages/1d/b2/31537cf4b1ca988837256c910a668b553fceb8f069bedc4b1c826024b52c/pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", size = 172736 } wheels = [ - { url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552, upload_time = "2024-03-30T13:22:20.476Z" }, + { url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552 }, ] [[package]] @@ -1478,9 +1478,9 @@ dependencies = [ { name = "typing-extensions" }, { name = "typing-inspection" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/00/dd/4325abf92c39ba8623b5af936ddb36ffcfe0beae70405d456ab1fb2f5b8c/pydantic-2.11.7.tar.gz", hash = "sha256:d989c3c6cb79469287b1569f7447a17848c998458d49ebe294e975b9baf0f0db", size = 788350, upload_time = "2025-06-14T08:33:17.137Z" } +sdist = { url = "https://files.pythonhosted.org/packages/00/dd/4325abf92c39ba8623b5af936ddb36ffcfe0beae70405d456ab1fb2f5b8c/pydantic-2.11.7.tar.gz", hash = "sha256:d989c3c6cb79469287b1569f7447a17848c998458d49ebe294e975b9baf0f0db", size = 788350 } wheels = [ - { url = "https://files.pythonhosted.org/packages/6a/c0/ec2b1c8712ca690e5d61979dee872603e92b8a32f94cc1b72d53beab008a/pydantic-2.11.7-py3-none-any.whl", hash = "sha256:dde5df002701f6de26248661f6835bbe296a47bf73990135c7d07ce741b9623b", size = 444782, upload_time = "2025-06-14T08:33:14.905Z" }, + { url = "https://files.pythonhosted.org/packages/6a/c0/ec2b1c8712ca690e5d61979dee872603e92b8a32f94cc1b72d53beab008a/pydantic-2.11.7-py3-none-any.whl", hash = "sha256:dde5df002701f6de26248661f6835bbe296a47bf73990135c7d07ce741b9623b", size = 444782 }, ] [[package]] @@ -1490,39 +1490,39 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ad/88/5f2260bdfae97aabf98f1778d43f69574390ad787afb646292a638c923d4/pydantic_core-2.33.2.tar.gz", hash = "sha256:7cb8bc3605c29176e1b105350d2e6474142d7c1bd1d9327c4a9bdb46bf827acc", size = 435195, upload_time = "2025-04-23T18:33:52.104Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/18/8a/2b41c97f554ec8c71f2a8a5f85cb56a8b0956addfe8b0efb5b3d77e8bdc3/pydantic_core-2.33.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a7ec89dc587667f22b6a0b6579c249fca9026ce7c333fc142ba42411fa243cdc", size = 2009000, upload_time = "2025-04-23T18:31:25.863Z" }, - { url = "https://files.pythonhosted.org/packages/a1/02/6224312aacb3c8ecbaa959897af57181fb6cf3a3d7917fd44d0f2917e6f2/pydantic_core-2.33.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3c6db6e52c6d70aa0d00d45cdb9b40f0433b96380071ea80b09277dba021ddf7", size = 1847996, upload_time = "2025-04-23T18:31:27.341Z" }, - { url = "https://files.pythonhosted.org/packages/d6/46/6dcdf084a523dbe0a0be59d054734b86a981726f221f4562aed313dbcb49/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e61206137cbc65e6d5256e1166f88331d3b6238e082d9f74613b9b765fb9025", size = 1880957, upload_time = "2025-04-23T18:31:28.956Z" }, - { url = "https://files.pythonhosted.org/packages/ec/6b/1ec2c03837ac00886ba8160ce041ce4e325b41d06a034adbef11339ae422/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb8c529b2819c37140eb51b914153063d27ed88e3bdc31b71198a198e921e011", size = 1964199, upload_time = "2025-04-23T18:31:31.025Z" }, - { url = "https://files.pythonhosted.org/packages/2d/1d/6bf34d6adb9debd9136bd197ca72642203ce9aaaa85cfcbfcf20f9696e83/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c52b02ad8b4e2cf14ca7b3d918f3eb0ee91e63b3167c32591e57c4317e134f8f", size = 2120296, upload_time = "2025-04-23T18:31:32.514Z" }, - { url = "https://files.pythonhosted.org/packages/e0/94/2bd0aaf5a591e974b32a9f7123f16637776c304471a0ab33cf263cf5591a/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96081f1605125ba0855dfda83f6f3df5ec90c61195421ba72223de35ccfb2f88", size = 2676109, upload_time = "2025-04-23T18:31:33.958Z" }, - { url = "https://files.pythonhosted.org/packages/f9/41/4b043778cf9c4285d59742281a769eac371b9e47e35f98ad321349cc5d61/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f57a69461af2a5fa6e6bbd7a5f60d3b7e6cebb687f55106933188e79ad155c1", size = 2002028, upload_time = "2025-04-23T18:31:39.095Z" }, - { url = "https://files.pythonhosted.org/packages/cb/d5/7bb781bf2748ce3d03af04d5c969fa1308880e1dca35a9bd94e1a96a922e/pydantic_core-2.33.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:572c7e6c8bb4774d2ac88929e3d1f12bc45714ae5ee6d9a788a9fb35e60bb04b", size = 2100044, upload_time = "2025-04-23T18:31:41.034Z" }, - { url = "https://files.pythonhosted.org/packages/fe/36/def5e53e1eb0ad896785702a5bbfd25eed546cdcf4087ad285021a90ed53/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:db4b41f9bd95fbe5acd76d89920336ba96f03e149097365afe1cb092fceb89a1", size = 2058881, upload_time = "2025-04-23T18:31:42.757Z" }, - { url = "https://files.pythonhosted.org/packages/01/6c/57f8d70b2ee57fc3dc8b9610315949837fa8c11d86927b9bb044f8705419/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:fa854f5cf7e33842a892e5c73f45327760bc7bc516339fda888c75ae60edaeb6", size = 2227034, upload_time = "2025-04-23T18:31:44.304Z" }, - { url = "https://files.pythonhosted.org/packages/27/b9/9c17f0396a82b3d5cbea4c24d742083422639e7bb1d5bf600e12cb176a13/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5f483cfb75ff703095c59e365360cb73e00185e01aaea067cd19acffd2ab20ea", size = 2234187, upload_time = "2025-04-23T18:31:45.891Z" }, - { url = "https://files.pythonhosted.org/packages/b0/6a/adf5734ffd52bf86d865093ad70b2ce543415e0e356f6cacabbc0d9ad910/pydantic_core-2.33.2-cp312-cp312-win32.whl", hash = "sha256:9cb1da0f5a471435a7bc7e439b8a728e8b61e59784b2af70d7c169f8dd8ae290", size = 1892628, upload_time = "2025-04-23T18:31:47.819Z" }, - { url = "https://files.pythonhosted.org/packages/43/e4/5479fecb3606c1368d496a825d8411e126133c41224c1e7238be58b87d7e/pydantic_core-2.33.2-cp312-cp312-win_amd64.whl", hash = "sha256:f941635f2a3d96b2973e867144fde513665c87f13fe0e193c158ac51bfaaa7b2", size = 1955866, upload_time = "2025-04-23T18:31:49.635Z" }, - { url = "https://files.pythonhosted.org/packages/0d/24/8b11e8b3e2be9dd82df4b11408a67c61bb4dc4f8e11b5b0fc888b38118b5/pydantic_core-2.33.2-cp312-cp312-win_arm64.whl", hash = "sha256:cca3868ddfaccfbc4bfb1d608e2ccaaebe0ae628e1416aeb9c4d88c001bb45ab", size = 1888894, upload_time = "2025-04-23T18:31:51.609Z" }, - { url = "https://files.pythonhosted.org/packages/46/8c/99040727b41f56616573a28771b1bfa08a3d3fe74d3d513f01251f79f172/pydantic_core-2.33.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:1082dd3e2d7109ad8b7da48e1d4710c8d06c253cbc4a27c1cff4fbcaa97a9e3f", size = 2015688, upload_time = "2025-04-23T18:31:53.175Z" }, - { url = "https://files.pythonhosted.org/packages/3a/cc/5999d1eb705a6cefc31f0b4a90e9f7fc400539b1a1030529700cc1b51838/pydantic_core-2.33.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f517ca031dfc037a9c07e748cefd8d96235088b83b4f4ba8939105d20fa1dcd6", size = 1844808, upload_time = "2025-04-23T18:31:54.79Z" }, - { url = "https://files.pythonhosted.org/packages/6f/5e/a0a7b8885c98889a18b6e376f344da1ef323d270b44edf8174d6bce4d622/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a9f2c9dd19656823cb8250b0724ee9c60a82f3cdf68a080979d13092a3b0fef", size = 1885580, upload_time = "2025-04-23T18:31:57.393Z" }, - { url = "https://files.pythonhosted.org/packages/3b/2a/953581f343c7d11a304581156618c3f592435523dd9d79865903272c256a/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2b0a451c263b01acebe51895bfb0e1cc842a5c666efe06cdf13846c7418caa9a", size = 1973859, upload_time = "2025-04-23T18:31:59.065Z" }, - { url = "https://files.pythonhosted.org/packages/e6/55/f1a813904771c03a3f97f676c62cca0c0a4138654107c1b61f19c644868b/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ea40a64d23faa25e62a70ad163571c0b342b8bf66d5fa612ac0dec4f069d916", size = 2120810, upload_time = "2025-04-23T18:32:00.78Z" }, - { url = "https://files.pythonhosted.org/packages/aa/c3/053389835a996e18853ba107a63caae0b9deb4a276c6b472931ea9ae6e48/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fb2d542b4d66f9470e8065c5469ec676978d625a8b7a363f07d9a501a9cb36a", size = 2676498, upload_time = "2025-04-23T18:32:02.418Z" }, - { url = "https://files.pythonhosted.org/packages/eb/3c/f4abd740877a35abade05e437245b192f9d0ffb48bbbbd708df33d3cda37/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdac5d6ffa1b5a83bca06ffe7583f5576555e6c8b3a91fbd25ea7780f825f7d", size = 2000611, upload_time = "2025-04-23T18:32:04.152Z" }, - { url = "https://files.pythonhosted.org/packages/59/a7/63ef2fed1837d1121a894d0ce88439fe3e3b3e48c7543b2a4479eb99c2bd/pydantic_core-2.33.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04a1a413977ab517154eebb2d326da71638271477d6ad87a769102f7c2488c56", size = 2107924, upload_time = "2025-04-23T18:32:06.129Z" }, - { url = "https://files.pythonhosted.org/packages/04/8f/2551964ef045669801675f1cfc3b0d74147f4901c3ffa42be2ddb1f0efc4/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c8e7af2f4e0194c22b5b37205bfb293d166a7344a5b0d0eaccebc376546d77d5", size = 2063196, upload_time = "2025-04-23T18:32:08.178Z" }, - { url = "https://files.pythonhosted.org/packages/26/bd/d9602777e77fc6dbb0c7db9ad356e9a985825547dce5ad1d30ee04903918/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:5c92edd15cd58b3c2d34873597a1e20f13094f59cf88068adb18947df5455b4e", size = 2236389, upload_time = "2025-04-23T18:32:10.242Z" }, - { url = "https://files.pythonhosted.org/packages/42/db/0e950daa7e2230423ab342ae918a794964b053bec24ba8af013fc7c94846/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:65132b7b4a1c0beded5e057324b7e16e10910c106d43675d9bd87d4f38dde162", size = 2239223, upload_time = "2025-04-23T18:32:12.382Z" }, - { url = "https://files.pythonhosted.org/packages/58/4d/4f937099c545a8a17eb52cb67fe0447fd9a373b348ccfa9a87f141eeb00f/pydantic_core-2.33.2-cp313-cp313-win32.whl", hash = "sha256:52fb90784e0a242bb96ec53f42196a17278855b0f31ac7c3cc6f5c1ec4811849", size = 1900473, upload_time = "2025-04-23T18:32:14.034Z" }, - { url = "https://files.pythonhosted.org/packages/a0/75/4a0a9bac998d78d889def5e4ef2b065acba8cae8c93696906c3a91f310ca/pydantic_core-2.33.2-cp313-cp313-win_amd64.whl", hash = "sha256:c083a3bdd5a93dfe480f1125926afcdbf2917ae714bdb80b36d34318b2bec5d9", size = 1955269, upload_time = "2025-04-23T18:32:15.783Z" }, - { url = "https://files.pythonhosted.org/packages/f9/86/1beda0576969592f1497b4ce8e7bc8cbdf614c352426271b1b10d5f0aa64/pydantic_core-2.33.2-cp313-cp313-win_arm64.whl", hash = "sha256:e80b087132752f6b3d714f041ccf74403799d3b23a72722ea2e6ba2e892555b9", size = 1893921, upload_time = "2025-04-23T18:32:18.473Z" }, - { url = "https://files.pythonhosted.org/packages/a4/7d/e09391c2eebeab681df2b74bfe6c43422fffede8dc74187b2b0bf6fd7571/pydantic_core-2.33.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:61c18fba8e5e9db3ab908620af374db0ac1baa69f0f32df4f61ae23f15e586ac", size = 1806162, upload_time = "2025-04-23T18:32:20.188Z" }, - { url = "https://files.pythonhosted.org/packages/f1/3d/847b6b1fed9f8ed3bb95a9ad04fbd0b212e832d4f0f50ff4d9ee5a9f15cf/pydantic_core-2.33.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95237e53bb015f67b63c91af7518a62a8660376a6a0db19b89acc77a4d6199f5", size = 1981560, upload_time = "2025-04-23T18:32:22.354Z" }, - { url = "https://files.pythonhosted.org/packages/6f/9a/e73262f6c6656262b5fdd723ad90f518f579b7bc8622e43a942eec53c938/pydantic_core-2.33.2-cp313-cp313t-win_amd64.whl", hash = "sha256:c2fc0a768ef76c15ab9238afa6da7f69895bb5d1ee83aeea2e3509af4472d0b9", size = 1935777, upload_time = "2025-04-23T18:32:25.088Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/ad/88/5f2260bdfae97aabf98f1778d43f69574390ad787afb646292a638c923d4/pydantic_core-2.33.2.tar.gz", hash = "sha256:7cb8bc3605c29176e1b105350d2e6474142d7c1bd1d9327c4a9bdb46bf827acc", size = 435195 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/8a/2b41c97f554ec8c71f2a8a5f85cb56a8b0956addfe8b0efb5b3d77e8bdc3/pydantic_core-2.33.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a7ec89dc587667f22b6a0b6579c249fca9026ce7c333fc142ba42411fa243cdc", size = 2009000 }, + { url = "https://files.pythonhosted.org/packages/a1/02/6224312aacb3c8ecbaa959897af57181fb6cf3a3d7917fd44d0f2917e6f2/pydantic_core-2.33.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3c6db6e52c6d70aa0d00d45cdb9b40f0433b96380071ea80b09277dba021ddf7", size = 1847996 }, + { url = "https://files.pythonhosted.org/packages/d6/46/6dcdf084a523dbe0a0be59d054734b86a981726f221f4562aed313dbcb49/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e61206137cbc65e6d5256e1166f88331d3b6238e082d9f74613b9b765fb9025", size = 1880957 }, + { url = "https://files.pythonhosted.org/packages/ec/6b/1ec2c03837ac00886ba8160ce041ce4e325b41d06a034adbef11339ae422/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb8c529b2819c37140eb51b914153063d27ed88e3bdc31b71198a198e921e011", size = 1964199 }, + { url = "https://files.pythonhosted.org/packages/2d/1d/6bf34d6adb9debd9136bd197ca72642203ce9aaaa85cfcbfcf20f9696e83/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c52b02ad8b4e2cf14ca7b3d918f3eb0ee91e63b3167c32591e57c4317e134f8f", size = 2120296 }, + { url = "https://files.pythonhosted.org/packages/e0/94/2bd0aaf5a591e974b32a9f7123f16637776c304471a0ab33cf263cf5591a/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96081f1605125ba0855dfda83f6f3df5ec90c61195421ba72223de35ccfb2f88", size = 2676109 }, + { url = "https://files.pythonhosted.org/packages/f9/41/4b043778cf9c4285d59742281a769eac371b9e47e35f98ad321349cc5d61/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f57a69461af2a5fa6e6bbd7a5f60d3b7e6cebb687f55106933188e79ad155c1", size = 2002028 }, + { url = "https://files.pythonhosted.org/packages/cb/d5/7bb781bf2748ce3d03af04d5c969fa1308880e1dca35a9bd94e1a96a922e/pydantic_core-2.33.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:572c7e6c8bb4774d2ac88929e3d1f12bc45714ae5ee6d9a788a9fb35e60bb04b", size = 2100044 }, + { url = "https://files.pythonhosted.org/packages/fe/36/def5e53e1eb0ad896785702a5bbfd25eed546cdcf4087ad285021a90ed53/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:db4b41f9bd95fbe5acd76d89920336ba96f03e149097365afe1cb092fceb89a1", size = 2058881 }, + { url = "https://files.pythonhosted.org/packages/01/6c/57f8d70b2ee57fc3dc8b9610315949837fa8c11d86927b9bb044f8705419/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:fa854f5cf7e33842a892e5c73f45327760bc7bc516339fda888c75ae60edaeb6", size = 2227034 }, + { url = "https://files.pythonhosted.org/packages/27/b9/9c17f0396a82b3d5cbea4c24d742083422639e7bb1d5bf600e12cb176a13/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5f483cfb75ff703095c59e365360cb73e00185e01aaea067cd19acffd2ab20ea", size = 2234187 }, + { url = "https://files.pythonhosted.org/packages/b0/6a/adf5734ffd52bf86d865093ad70b2ce543415e0e356f6cacabbc0d9ad910/pydantic_core-2.33.2-cp312-cp312-win32.whl", hash = "sha256:9cb1da0f5a471435a7bc7e439b8a728e8b61e59784b2af70d7c169f8dd8ae290", size = 1892628 }, + { url = "https://files.pythonhosted.org/packages/43/e4/5479fecb3606c1368d496a825d8411e126133c41224c1e7238be58b87d7e/pydantic_core-2.33.2-cp312-cp312-win_amd64.whl", hash = "sha256:f941635f2a3d96b2973e867144fde513665c87f13fe0e193c158ac51bfaaa7b2", size = 1955866 }, + { url = "https://files.pythonhosted.org/packages/0d/24/8b11e8b3e2be9dd82df4b11408a67c61bb4dc4f8e11b5b0fc888b38118b5/pydantic_core-2.33.2-cp312-cp312-win_arm64.whl", hash = "sha256:cca3868ddfaccfbc4bfb1d608e2ccaaebe0ae628e1416aeb9c4d88c001bb45ab", size = 1888894 }, + { url = "https://files.pythonhosted.org/packages/46/8c/99040727b41f56616573a28771b1bfa08a3d3fe74d3d513f01251f79f172/pydantic_core-2.33.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:1082dd3e2d7109ad8b7da48e1d4710c8d06c253cbc4a27c1cff4fbcaa97a9e3f", size = 2015688 }, + { url = "https://files.pythonhosted.org/packages/3a/cc/5999d1eb705a6cefc31f0b4a90e9f7fc400539b1a1030529700cc1b51838/pydantic_core-2.33.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f517ca031dfc037a9c07e748cefd8d96235088b83b4f4ba8939105d20fa1dcd6", size = 1844808 }, + { url = "https://files.pythonhosted.org/packages/6f/5e/a0a7b8885c98889a18b6e376f344da1ef323d270b44edf8174d6bce4d622/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a9f2c9dd19656823cb8250b0724ee9c60a82f3cdf68a080979d13092a3b0fef", size = 1885580 }, + { url = "https://files.pythonhosted.org/packages/3b/2a/953581f343c7d11a304581156618c3f592435523dd9d79865903272c256a/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2b0a451c263b01acebe51895bfb0e1cc842a5c666efe06cdf13846c7418caa9a", size = 1973859 }, + { url = "https://files.pythonhosted.org/packages/e6/55/f1a813904771c03a3f97f676c62cca0c0a4138654107c1b61f19c644868b/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ea40a64d23faa25e62a70ad163571c0b342b8bf66d5fa612ac0dec4f069d916", size = 2120810 }, + { url = "https://files.pythonhosted.org/packages/aa/c3/053389835a996e18853ba107a63caae0b9deb4a276c6b472931ea9ae6e48/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fb2d542b4d66f9470e8065c5469ec676978d625a8b7a363f07d9a501a9cb36a", size = 2676498 }, + { url = "https://files.pythonhosted.org/packages/eb/3c/f4abd740877a35abade05e437245b192f9d0ffb48bbbbd708df33d3cda37/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdac5d6ffa1b5a83bca06ffe7583f5576555e6c8b3a91fbd25ea7780f825f7d", size = 2000611 }, + { url = "https://files.pythonhosted.org/packages/59/a7/63ef2fed1837d1121a894d0ce88439fe3e3b3e48c7543b2a4479eb99c2bd/pydantic_core-2.33.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04a1a413977ab517154eebb2d326da71638271477d6ad87a769102f7c2488c56", size = 2107924 }, + { url = "https://files.pythonhosted.org/packages/04/8f/2551964ef045669801675f1cfc3b0d74147f4901c3ffa42be2ddb1f0efc4/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c8e7af2f4e0194c22b5b37205bfb293d166a7344a5b0d0eaccebc376546d77d5", size = 2063196 }, + { url = "https://files.pythonhosted.org/packages/26/bd/d9602777e77fc6dbb0c7db9ad356e9a985825547dce5ad1d30ee04903918/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:5c92edd15cd58b3c2d34873597a1e20f13094f59cf88068adb18947df5455b4e", size = 2236389 }, + { url = "https://files.pythonhosted.org/packages/42/db/0e950daa7e2230423ab342ae918a794964b053bec24ba8af013fc7c94846/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:65132b7b4a1c0beded5e057324b7e16e10910c106d43675d9bd87d4f38dde162", size = 2239223 }, + { url = "https://files.pythonhosted.org/packages/58/4d/4f937099c545a8a17eb52cb67fe0447fd9a373b348ccfa9a87f141eeb00f/pydantic_core-2.33.2-cp313-cp313-win32.whl", hash = "sha256:52fb90784e0a242bb96ec53f42196a17278855b0f31ac7c3cc6f5c1ec4811849", size = 1900473 }, + { url = "https://files.pythonhosted.org/packages/a0/75/4a0a9bac998d78d889def5e4ef2b065acba8cae8c93696906c3a91f310ca/pydantic_core-2.33.2-cp313-cp313-win_amd64.whl", hash = "sha256:c083a3bdd5a93dfe480f1125926afcdbf2917ae714bdb80b36d34318b2bec5d9", size = 1955269 }, + { url = "https://files.pythonhosted.org/packages/f9/86/1beda0576969592f1497b4ce8e7bc8cbdf614c352426271b1b10d5f0aa64/pydantic_core-2.33.2-cp313-cp313-win_arm64.whl", hash = "sha256:e80b087132752f6b3d714f041ccf74403799d3b23a72722ea2e6ba2e892555b9", size = 1893921 }, + { url = "https://files.pythonhosted.org/packages/a4/7d/e09391c2eebeab681df2b74bfe6c43422fffede8dc74187b2b0bf6fd7571/pydantic_core-2.33.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:61c18fba8e5e9db3ab908620af374db0ac1baa69f0f32df4f61ae23f15e586ac", size = 1806162 }, + { url = "https://files.pythonhosted.org/packages/f1/3d/847b6b1fed9f8ed3bb95a9ad04fbd0b212e832d4f0f50ff4d9ee5a9f15cf/pydantic_core-2.33.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95237e53bb015f67b63c91af7518a62a8660376a6a0db19b89acc77a4d6199f5", size = 1981560 }, + { url = "https://files.pythonhosted.org/packages/6f/9a/e73262f6c6656262b5fdd723ad90f518f579b7bc8622e43a942eec53c938/pydantic_core-2.33.2-cp313-cp313t-win_amd64.whl", hash = "sha256:c2fc0a768ef76c15ab9238afa6da7f69895bb5d1ee83aeea2e3509af4472d0b9", size = 1935777 }, ] [[package]] @@ -1538,18 +1538,18 @@ dependencies = [ { name = "requests" }, { name = "wbgapi" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/5e/72/3e56d8166ca4b366a4e37c85711a706bba66768f70ba690bdb279f728d8d/pydeflate-2.1.3.tar.gz", hash = "sha256:48a2b74ad900dd8c50dfb1e4cdfcea8ca11cbd2d3a713bf9208f2028fea4cf4f", size = 26586, upload_time = "2025-06-03T09:38:12.25Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5e/72/3e56d8166ca4b366a4e37c85711a706bba66768f70ba690bdb279f728d8d/pydeflate-2.1.3.tar.gz", hash = "sha256:48a2b74ad900dd8c50dfb1e4cdfcea8ca11cbd2d3a713bf9208f2028fea4cf4f", size = 26586 } wheels = [ - { url = "https://files.pythonhosted.org/packages/31/31/e703ab5bc311c58e4dc00759d7a48a850877b8bbcd64c9778e2315e06bd5/pydeflate-2.1.3-py3-none-any.whl", hash = "sha256:09ebdde04eb2fea1c4b6712889cb2a9d4c2dd22ce0204aaeae64f4335667354f", size = 32540, upload_time = "2025-06-03T09:38:10.858Z" }, + { url = "https://files.pythonhosted.org/packages/31/31/e703ab5bc311c58e4dc00759d7a48a850877b8bbcd64c9778e2315e06bd5/pydeflate-2.1.3-py3-none-any.whl", hash = "sha256:09ebdde04eb2fea1c4b6712889cb2a9d4c2dd22ce0204aaeae64f4335667354f", size = 32540 }, ] [[package]] name = "pygments" version = "2.19.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b0/77/a5b8c569bf593b0140bde72ea885a803b82086995367bf2037de0159d924/pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", size = 4968631, upload_time = "2025-06-21T13:39:12.283Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b0/77/a5b8c569bf593b0140bde72ea885a803b82086995367bf2037de0159d924/pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", size = 4968631 } wheels = [ - { url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217, upload_time = "2025-06-21T13:39:07.939Z" }, + { url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217 }, ] [[package]] @@ -1560,9 +1560,9 @@ dependencies = [ { name = "markdown" }, { name = "pyyaml" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/1a/0a/c06b542ac108bfc73200677309cd9188a3a01b127a63f20cadc18d873d88/pymdown_extensions-10.16.tar.gz", hash = "sha256:71dac4fca63fabeffd3eb9038b756161a33ec6e8d230853d3cecf562155ab3de", size = 853197, upload_time = "2025-06-21T17:56:36.974Z" } +sdist = { url = "https://files.pythonhosted.org/packages/1a/0a/c06b542ac108bfc73200677309cd9188a3a01b127a63f20cadc18d873d88/pymdown_extensions-10.16.tar.gz", hash = "sha256:71dac4fca63fabeffd3eb9038b756161a33ec6e8d230853d3cecf562155ab3de", size = 853197 } wheels = [ - { url = "https://files.pythonhosted.org/packages/98/d4/10bb14004d3c792811e05e21b5e5dcae805aacb739bd12a0540967b99592/pymdown_extensions-10.16-py3-none-any.whl", hash = "sha256:f5dd064a4db588cb2d95229fc4ee63a1b16cc8b4d0e6145c0899ed8723da1df2", size = 266143, upload_time = "2025-06-21T17:56:35.356Z" }, + { url = "https://files.pythonhosted.org/packages/98/d4/10bb14004d3c792811e05e21b5e5dcae805aacb739bd12a0540967b99592/pymdown_extensions-10.16-py3-none-any.whl", hash = "sha256:f5dd064a4db588cb2d95229fc4ee63a1b16cc8b4d0e6145c0899ed8723da1df2", size = 266143 }, ] [[package]] @@ -1572,9 +1572,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "unidecode" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d6/7c/7c45a9e9bf6ddb57b67e66cf4e8076a7baf3a790a3411daac1a7a2df0c5b/pyphonetics-0.5.3.tar.gz", hash = "sha256:2d3c2e359fde91a3c57914f0b5468bba7a5daf38e7927fd999992ea68990fbe4", size = 10314, upload_time = "2020-02-25T12:08:31.049Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d6/7c/7c45a9e9bf6ddb57b67e66cf4e8076a7baf3a790a3411daac1a7a2df0c5b/pyphonetics-0.5.3.tar.gz", hash = "sha256:2d3c2e359fde91a3c57914f0b5468bba7a5daf38e7927fd999992ea68990fbe4", size = 10314 } wheels = [ - { url = "https://files.pythonhosted.org/packages/bd/dd/a7d0a860efd3d4335d538b4361b8e9af8311f2aba2e8c7e4c7a47d623b6e/pyphonetics-0.5.3-py2.py3-none-any.whl", hash = "sha256:e6b29671d0d624dda1cac59c0c5a8a7216d8db504bae4941bfc482e04a0621d1", size = 10729, upload_time = "2020-02-25T12:08:25.368Z" }, + { url = "https://files.pythonhosted.org/packages/bd/dd/a7d0a860efd3d4335d538b4361b8e9af8311f2aba2e8c7e4c7a47d623b6e/pyphonetics-0.5.3-py2.py3-none-any.whl", hash = "sha256:e6b29671d0d624dda1cac59c0c5a8a7216d8db504bae4941bfc482e04a0621d1", size = 10729 }, ] [[package]] @@ -1588,9 +1588,9 @@ dependencies = [ { name = "pluggy" }, { name = "pygments" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/08/ba/45911d754e8eba3d5a841a5ce61a65a685ff1798421ac054f85aa8747dfb/pytest-8.4.1.tar.gz", hash = "sha256:7c67fd69174877359ed9371ec3af8a3d2b04741818c51e5e99cc1742251fa93c", size = 1517714, upload_time = "2025-06-18T05:48:06.109Z" } +sdist = { url = "https://files.pythonhosted.org/packages/08/ba/45911d754e8eba3d5a841a5ce61a65a685ff1798421ac054f85aa8747dfb/pytest-8.4.1.tar.gz", hash = "sha256:7c67fd69174877359ed9371ec3af8a3d2b04741818c51e5e99cc1742251fa93c", size = 1517714 } wheels = [ - { url = "https://files.pythonhosted.org/packages/29/16/c8a903f4c4dffe7a12843191437d7cd8e32751d5de349d45d3fe69544e87/pytest-8.4.1-py3-none-any.whl", hash = "sha256:539c70ba6fcead8e78eebbf1115e8b589e7565830d7d006a8723f19ac8a0afb7", size = 365474, upload_time = "2025-06-18T05:48:03.955Z" }, + { url = "https://files.pythonhosted.org/packages/29/16/c8a903f4c4dffe7a12843191437d7cd8e32751d5de349d45d3fe69544e87/pytest-8.4.1-py3-none-any.whl", hash = "sha256:539c70ba6fcead8e78eebbf1115e8b589e7565830d7d006a8723f19ac8a0afb7", size = 365474 }, ] [[package]] @@ -1602,9 +1602,9 @@ dependencies = [ { name = "pluggy" }, { name = "pytest" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/18/99/668cade231f434aaa59bbfbf49469068d2ddd945000621d3d165d2e7dd7b/pytest_cov-6.2.1.tar.gz", hash = "sha256:25cc6cc0a5358204b8108ecedc51a9b57b34cc6b8c967cc2c01a4e00d8a67da2", size = 69432, upload_time = "2025-06-12T10:47:47.684Z" } +sdist = { url = "https://files.pythonhosted.org/packages/18/99/668cade231f434aaa59bbfbf49469068d2ddd945000621d3d165d2e7dd7b/pytest_cov-6.2.1.tar.gz", hash = "sha256:25cc6cc0a5358204b8108ecedc51a9b57b34cc6b8c967cc2c01a4e00d8a67da2", size = 69432 } wheels = [ - { url = "https://files.pythonhosted.org/packages/bc/16/4ea354101abb1287856baa4af2732be351c7bee728065aed451b678153fd/pytest_cov-6.2.1-py3-none-any.whl", hash = "sha256:f5bc4c23f42f1cdd23c70b1dab1bbaef4fc505ba950d53e0081d0730dd7e86d5", size = 24644, upload_time = "2025-06-12T10:47:45.932Z" }, + { url = "https://files.pythonhosted.org/packages/bc/16/4ea354101abb1287856baa4af2732be351c7bee728065aed451b678153fd/pytest_cov-6.2.1-py3-none-any.whl", hash = "sha256:f5bc4c23f42f1cdd23c70b1dab1bbaef4fc505ba950d53e0081d0730dd7e86d5", size = 24644 }, ] [[package]] @@ -1615,9 +1615,9 @@ dependencies = [ { name = "execnet" }, { name = "pytest" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/78/b4/439b179d1ff526791eb921115fca8e44e596a13efeda518b9d845a619450/pytest_xdist-3.8.0.tar.gz", hash = "sha256:7e578125ec9bc6050861aa93f2d59f1d8d085595d6551c2c90b6f4fad8d3a9f1", size = 88069, upload_time = "2025-07-01T13:30:59.346Z" } +sdist = { url = "https://files.pythonhosted.org/packages/78/b4/439b179d1ff526791eb921115fca8e44e596a13efeda518b9d845a619450/pytest_xdist-3.8.0.tar.gz", hash = "sha256:7e578125ec9bc6050861aa93f2d59f1d8d085595d6551c2c90b6f4fad8d3a9f1", size = 88069 } wheels = [ - { url = "https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl", hash = "sha256:202ca578cfeb7370784a8c33d6d05bc6e13b4f25b5053c30a152269fd10f0b88", size = 46396, upload_time = "2025-07-01T13:30:56.632Z" }, + { url = "https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl", hash = "sha256:202ca578cfeb7370784a8c33d6d05bc6e13b4f25b5053c30a152269fd10f0b88", size = 46396 }, ] [[package]] @@ -1627,9 +1627,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "six" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload_time = "2024-03-01T18:36:20.211Z" } +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432 } 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" }, + { 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 }, ] [[package]] @@ -1639,16 +1639,16 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "charset-normalizer" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/bf/4b/3c4cf635311b6203f17c2d693dc15e898969983dd3f729bee3c428aa60d4/python-debian-1.0.1.tar.gz", hash = "sha256:3ada9b83a3d671b58081782c0969cffa0102f6ce433fbbc7cf21275b8b5cc771", size = 127249, upload_time = "2025-03-11T12:27:27.245Z" } +sdist = { url = "https://files.pythonhosted.org/packages/bf/4b/3c4cf635311b6203f17c2d693dc15e898969983dd3f729bee3c428aa60d4/python-debian-1.0.1.tar.gz", hash = "sha256:3ada9b83a3d671b58081782c0969cffa0102f6ce433fbbc7cf21275b8b5cc771", size = 127249 } wheels = [ - { url = "https://files.pythonhosted.org/packages/ba/15/e8096189b18dda72e4923622abc10b021ecff723b397e22eff29fb86637b/python_debian-1.0.1-py3-none-any.whl", hash = "sha256:8f137c230c1d9279c2ac892b35915068b2aca090c9fd3da5671ff87af32af12c", size = 137453, upload_time = "2025-03-11T12:27:25.014Z" }, + { url = "https://files.pythonhosted.org/packages/ba/15/e8096189b18dda72e4923622abc10b021ecff723b397e22eff29fb86637b/python_debian-1.0.1-py3-none-any.whl", hash = "sha256:8f137c230c1d9279c2ac892b35915068b2aca090c9fd3da5671ff87af32af12c", size = 137453 }, ] [[package]] name = "python-io-wrapper" version = "0.3.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d7/74/8dc5f7d0b7cc1a0ca9e5c320abf11adee2094998c93ae8c9c80d9a8323ff/python-io-wrapper-0.3.1.tar.gz", hash = "sha256:e3391787ff0d9870e739294c6392437915502153e695a017450aa46b6d091762", size = 3271, upload_time = "2022-11-14T15:00:10.932Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/74/8dc5f7d0b7cc1a0ca9e5c320abf11adee2094998c93ae8c9c80d9a8323ff/python-io-wrapper-0.3.1.tar.gz", hash = "sha256:e3391787ff0d9870e739294c6392437915502153e695a017450aa46b6d091762", size = 3271 } [[package]] name = "python-slugify" @@ -1657,18 +1657,18 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "text-unidecode" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/87/c7/5e1547c44e31da50a460df93af11a535ace568ef89d7a811069ead340c4a/python-slugify-8.0.4.tar.gz", hash = "sha256:59202371d1d05b54a9e7720c5e038f928f45daaffe41dd10822f3907b937c856", size = 10921, upload_time = "2024-02-08T18:32:45.488Z" } +sdist = { url = "https://files.pythonhosted.org/packages/87/c7/5e1547c44e31da50a460df93af11a535ace568ef89d7a811069ead340c4a/python-slugify-8.0.4.tar.gz", hash = "sha256:59202371d1d05b54a9e7720c5e038f928f45daaffe41dd10822f3907b937c856", size = 10921 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a4/62/02da182e544a51a5c3ccf4b03ab79df279f9c60c5e82d5e8bec7ca26ac11/python_slugify-8.0.4-py2.py3-none-any.whl", hash = "sha256:276540b79961052b66b7d116620b36518847f52d5fd9e3a70164fc8c50faa6b8", size = 10051, upload_time = "2024-02-08T18:32:43.911Z" }, + { url = "https://files.pythonhosted.org/packages/a4/62/02da182e544a51a5c3ccf4b03ab79df279f9c60c5e82d5e8bec7ca26ac11/python_slugify-8.0.4-py2.py3-none-any.whl", hash = "sha256:276540b79961052b66b7d116620b36518847f52d5fd9e3a70164fc8c50faa6b8", size = 10051 }, ] [[package]] name = "pytz" version = "2025.2" 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/f8/bf/abbd3cdfb8fbc7fb3d4d38d320f2441b1e7cbe29be4f23797b4a2b5d8aac/pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3", size = 320884 } 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/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00", size = 509225 }, ] [[package]] @@ -1676,38 +1676,38 @@ name = "pywin32" version = "310" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6b/ec/4fdbe47932f671d6e348474ea35ed94227fb5df56a7c30cbbb42cd396ed0/pywin32-310-cp312-cp312-win32.whl", hash = "sha256:8a75a5cc3893e83a108c05d82198880704c44bbaee4d06e442e471d3c9ea4f3d", size = 8796239, upload_time = "2025-03-17T00:55:58.807Z" }, - { url = "https://files.pythonhosted.org/packages/e3/e5/b0627f8bb84e06991bea89ad8153a9e50ace40b2e1195d68e9dff6b03d0f/pywin32-310-cp312-cp312-win_amd64.whl", hash = "sha256:bf5c397c9a9a19a6f62f3fb821fbf36cac08f03770056711f765ec1503972060", size = 9503839, upload_time = "2025-03-17T00:56:00.8Z" }, - { url = "https://files.pythonhosted.org/packages/1f/32/9ccf53748df72301a89713936645a664ec001abd35ecc8578beda593d37d/pywin32-310-cp312-cp312-win_arm64.whl", hash = "sha256:2349cc906eae872d0663d4d6290d13b90621eaf78964bb1578632ff20e152966", size = 8459470, upload_time = "2025-03-17T00:56:02.601Z" }, - { url = "https://files.pythonhosted.org/packages/1c/09/9c1b978ffc4ae53999e89c19c77ba882d9fce476729f23ef55211ea1c034/pywin32-310-cp313-cp313-win32.whl", hash = "sha256:5d241a659c496ada3253cd01cfaa779b048e90ce4b2b38cd44168ad555ce74ab", size = 8794384, upload_time = "2025-03-17T00:56:04.383Z" }, - { url = "https://files.pythonhosted.org/packages/45/3c/b4640f740ffebadd5d34df35fecba0e1cfef8fde9f3e594df91c28ad9b50/pywin32-310-cp313-cp313-win_amd64.whl", hash = "sha256:667827eb3a90208ddbdcc9e860c81bde63a135710e21e4cb3348968e4bd5249e", size = 9503039, upload_time = "2025-03-17T00:56:06.207Z" }, - { url = "https://files.pythonhosted.org/packages/b4/f4/f785020090fb050e7fb6d34b780f2231f302609dc964672f72bfaeb59a28/pywin32-310-cp313-cp313-win_arm64.whl", hash = "sha256:e308f831de771482b7cf692a1f308f8fca701b2d8f9dde6cc440c7da17e47b33", size = 8458152, upload_time = "2025-03-17T00:56:07.819Z" }, + { url = "https://files.pythonhosted.org/packages/6b/ec/4fdbe47932f671d6e348474ea35ed94227fb5df56a7c30cbbb42cd396ed0/pywin32-310-cp312-cp312-win32.whl", hash = "sha256:8a75a5cc3893e83a108c05d82198880704c44bbaee4d06e442e471d3c9ea4f3d", size = 8796239 }, + { url = "https://files.pythonhosted.org/packages/e3/e5/b0627f8bb84e06991bea89ad8153a9e50ace40b2e1195d68e9dff6b03d0f/pywin32-310-cp312-cp312-win_amd64.whl", hash = "sha256:bf5c397c9a9a19a6f62f3fb821fbf36cac08f03770056711f765ec1503972060", size = 9503839 }, + { url = "https://files.pythonhosted.org/packages/1f/32/9ccf53748df72301a89713936645a664ec001abd35ecc8578beda593d37d/pywin32-310-cp312-cp312-win_arm64.whl", hash = "sha256:2349cc906eae872d0663d4d6290d13b90621eaf78964bb1578632ff20e152966", size = 8459470 }, + { url = "https://files.pythonhosted.org/packages/1c/09/9c1b978ffc4ae53999e89c19c77ba882d9fce476729f23ef55211ea1c034/pywin32-310-cp313-cp313-win32.whl", hash = "sha256:5d241a659c496ada3253cd01cfaa779b048e90ce4b2b38cd44168ad555ce74ab", size = 8794384 }, + { url = "https://files.pythonhosted.org/packages/45/3c/b4640f740ffebadd5d34df35fecba0e1cfef8fde9f3e594df91c28ad9b50/pywin32-310-cp313-cp313-win_amd64.whl", hash = "sha256:667827eb3a90208ddbdcc9e860c81bde63a135710e21e4cb3348968e4bd5249e", size = 9503039 }, + { url = "https://files.pythonhosted.org/packages/b4/f4/f785020090fb050e7fb6d34b780f2231f302609dc964672f72bfaeb59a28/pywin32-310-cp313-cp313-win_arm64.whl", hash = "sha256:e308f831de771482b7cf692a1f308f8fca701b2d8f9dde6cc440c7da17e47b33", size = 8458152 }, ] [[package]] name = "pyyaml" version = "6.0.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631, upload_time = "2024-08-06T20:33:50.674Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/86/0c/c581167fc46d6d6d7ddcfb8c843a4de25bdd27e4466938109ca68492292c/PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", size = 183873, upload_time = "2024-08-06T20:32:25.131Z" }, - { url = "https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", size = 173302, upload_time = "2024-08-06T20:32:26.511Z" }, - { url = "https://files.pythonhosted.org/packages/c3/93/9916574aa8c00aa06bbac729972eb1071d002b8e158bd0e83a3b9a20a1f7/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", size = 739154, upload_time = "2024-08-06T20:32:28.363Z" }, - { url = "https://files.pythonhosted.org/packages/95/0f/b8938f1cbd09739c6da569d172531567dbcc9789e0029aa070856f123984/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", size = 766223, upload_time = "2024-08-06T20:32:30.058Z" }, - { url = "https://files.pythonhosted.org/packages/b9/2b/614b4752f2e127db5cc206abc23a8c19678e92b23c3db30fc86ab731d3bd/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", size = 767542, upload_time = "2024-08-06T20:32:31.881Z" }, - { url = "https://files.pythonhosted.org/packages/d4/00/dd137d5bcc7efea1836d6264f049359861cf548469d18da90cd8216cf05f/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", size = 731164, upload_time = "2024-08-06T20:32:37.083Z" }, - { url = "https://files.pythonhosted.org/packages/c9/1f/4f998c900485e5c0ef43838363ba4a9723ac0ad73a9dc42068b12aaba4e4/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", size = 756611, upload_time = "2024-08-06T20:32:38.898Z" }, - { url = "https://files.pythonhosted.org/packages/df/d1/f5a275fdb252768b7a11ec63585bc38d0e87c9e05668a139fea92b80634c/PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", size = 140591, upload_time = "2024-08-06T20:32:40.241Z" }, - { url = "https://files.pythonhosted.org/packages/0c/e8/4f648c598b17c3d06e8753d7d13d57542b30d56e6c2dedf9c331ae56312e/PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", size = 156338, upload_time = "2024-08-06T20:32:41.93Z" }, - { url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309, upload_time = "2024-08-06T20:32:43.4Z" }, - { url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679, upload_time = "2024-08-06T20:32:44.801Z" }, - { url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428, upload_time = "2024-08-06T20:32:46.432Z" }, - { url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361, upload_time = "2024-08-06T20:32:51.188Z" }, - { url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523, upload_time = "2024-08-06T20:32:53.019Z" }, - { url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660, upload_time = "2024-08-06T20:32:54.708Z" }, - { url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597, upload_time = "2024-08-06T20:32:56.985Z" }, - { url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527, upload_time = "2024-08-06T20:33:03.001Z" }, - { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446, upload_time = "2024-08-06T20:33:04.33Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/86/0c/c581167fc46d6d6d7ddcfb8c843a4de25bdd27e4466938109ca68492292c/PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", size = 183873 }, + { url = "https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", size = 173302 }, + { url = "https://files.pythonhosted.org/packages/c3/93/9916574aa8c00aa06bbac729972eb1071d002b8e158bd0e83a3b9a20a1f7/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", size = 739154 }, + { url = "https://files.pythonhosted.org/packages/95/0f/b8938f1cbd09739c6da569d172531567dbcc9789e0029aa070856f123984/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", size = 766223 }, + { url = "https://files.pythonhosted.org/packages/b9/2b/614b4752f2e127db5cc206abc23a8c19678e92b23c3db30fc86ab731d3bd/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", size = 767542 }, + { url = "https://files.pythonhosted.org/packages/d4/00/dd137d5bcc7efea1836d6264f049359861cf548469d18da90cd8216cf05f/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", size = 731164 }, + { url = "https://files.pythonhosted.org/packages/c9/1f/4f998c900485e5c0ef43838363ba4a9723ac0ad73a9dc42068b12aaba4e4/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", size = 756611 }, + { url = "https://files.pythonhosted.org/packages/df/d1/f5a275fdb252768b7a11ec63585bc38d0e87c9e05668a139fea92b80634c/PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", size = 140591 }, + { url = "https://files.pythonhosted.org/packages/0c/e8/4f648c598b17c3d06e8753d7d13d57542b30d56e6c2dedf9c331ae56312e/PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", size = 156338 }, + { url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309 }, + { url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679 }, + { url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428 }, + { url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361 }, + { url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523 }, + { url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660 }, + { url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597 }, + { url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527 }, + { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446 }, ] [[package]] @@ -1717,9 +1717,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pyyaml" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/eb/2e/79c822141bfd05a853236b504869ebc6b70159afc570e1d5a20641782eaa/pyyaml_env_tag-1.1.tar.gz", hash = "sha256:2eb38b75a2d21ee0475d6d97ec19c63287a7e140231e4214969d0eac923cd7ff", size = 5737, upload_time = "2025-05-13T15:24:01.64Z" } +sdist = { url = "https://files.pythonhosted.org/packages/eb/2e/79c822141bfd05a853236b504869ebc6b70159afc570e1d5a20641782eaa/pyyaml_env_tag-1.1.tar.gz", hash = "sha256:2eb38b75a2d21ee0475d6d97ec19c63287a7e140231e4214969d0eac923cd7ff", size = 5737 } wheels = [ - { url = "https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl", hash = "sha256:17109e1a528561e32f026364712fee1264bc2ea6715120891174ed1b980d2e04", size = 4722, upload_time = "2025-05-13T15:23:59.629Z" }, + { url = "https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl", hash = "sha256:17109e1a528561e32f026364712fee1264bc2ea6715120891174ed1b980d2e04", size = 4722 }, ] [[package]] @@ -1729,34 +1729,34 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cffi", marker = "implementation_name == 'pypy'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f1/06/50a4e9648b3e8b992bef8eb632e457307553a89d294103213cfd47b3da69/pyzmq-27.0.0.tar.gz", hash = "sha256:b1f08eeb9ce1510e6939b6e5dcd46a17765e2333daae78ecf4606808442e52cf", size = 280478, upload_time = "2025-06-13T14:09:07.087Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/93/a7/9ad68f55b8834ede477842214feba6a4c786d936c022a67625497aacf61d/pyzmq-27.0.0-cp312-abi3-macosx_10_15_universal2.whl", hash = "sha256:cbabc59dcfaac66655c040dfcb8118f133fb5dde185e5fc152628354c1598e52", size = 1305438, upload_time = "2025-06-13T14:07:31.676Z" }, - { url = "https://files.pythonhosted.org/packages/ba/ee/26aa0f98665a22bc90ebe12dced1de5f3eaca05363b717f6fb229b3421b3/pyzmq-27.0.0-cp312-abi3-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:cb0ac5179cba4b2f94f1aa208fbb77b62c4c9bf24dd446278b8b602cf85fcda3", size = 895095, upload_time = "2025-06-13T14:07:33.104Z" }, - { url = "https://files.pythonhosted.org/packages/cf/85/c57e7ab216ecd8aa4cc7e3b83b06cc4e9cf45c87b0afc095f10cd5ce87c1/pyzmq-27.0.0-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:53a48f0228eab6cbf69fde3aa3c03cbe04e50e623ef92ae395fce47ef8a76152", size = 651826, upload_time = "2025-06-13T14:07:34.831Z" }, - { url = "https://files.pythonhosted.org/packages/69/9a/9ea7e230feda9400fb0ae0d61d7d6ddda635e718d941c44eeab22a179d34/pyzmq-27.0.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:111db5f395e09f7e775f759d598f43cb815fc58e0147623c4816486e1a39dc22", size = 839750, upload_time = "2025-06-13T14:07:36.553Z" }, - { url = "https://files.pythonhosted.org/packages/08/66/4cebfbe71f3dfbd417011daca267539f62ed0fbc68105357b68bbb1a25b7/pyzmq-27.0.0-cp312-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:c8878011653dcdc27cc2c57e04ff96f0471e797f5c19ac3d7813a245bcb24371", size = 1641357, upload_time = "2025-06-13T14:07:38.21Z" }, - { url = "https://files.pythonhosted.org/packages/ac/f6/b0f62578c08d2471c791287149cb8c2aaea414ae98c6e995c7dbe008adfb/pyzmq-27.0.0-cp312-abi3-musllinux_1_2_i686.whl", hash = "sha256:c0ed2c1f335ba55b5fdc964622254917d6b782311c50e138863eda409fbb3b6d", size = 2020281, upload_time = "2025-06-13T14:07:39.599Z" }, - { url = "https://files.pythonhosted.org/packages/37/b9/4f670b15c7498495da9159edc374ec09c88a86d9cd5a47d892f69df23450/pyzmq-27.0.0-cp312-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:e918d70862d4cfd4b1c187310015646a14e1f5917922ab45b29f28f345eeb6be", size = 1877110, upload_time = "2025-06-13T14:07:41.027Z" }, - { url = "https://files.pythonhosted.org/packages/66/31/9dee25c226295b740609f0d46db2fe972b23b6f5cf786360980524a3ba92/pyzmq-27.0.0-cp312-abi3-win32.whl", hash = "sha256:88b4e43cab04c3c0f0d55df3b1eef62df2b629a1a369b5289a58f6fa8b07c4f4", size = 559297, upload_time = "2025-06-13T14:07:42.533Z" }, - { url = "https://files.pythonhosted.org/packages/9b/12/52da5509800f7ff2d287b2f2b4e636e7ea0f001181cba6964ff6c1537778/pyzmq-27.0.0-cp312-abi3-win_amd64.whl", hash = "sha256:dce4199bf5f648a902ce37e7b3afa286f305cd2ef7a8b6ec907470ccb6c8b371", size = 619203, upload_time = "2025-06-13T14:07:43.843Z" }, - { url = "https://files.pythonhosted.org/packages/93/6d/7f2e53b19d1edb1eb4f09ec7c3a1f945ca0aac272099eab757d15699202b/pyzmq-27.0.0-cp312-abi3-win_arm64.whl", hash = "sha256:56e46bbb85d52c1072b3f809cc1ce77251d560bc036d3a312b96db1afe76db2e", size = 551927, upload_time = "2025-06-13T14:07:45.51Z" }, - { url = "https://files.pythonhosted.org/packages/19/62/876b27c4ff777db4ceba1c69ea90d3c825bb4f8d5e7cd987ce5802e33c55/pyzmq-27.0.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:c36ad534c0c29b4afa088dc53543c525b23c0797e01b69fef59b1a9c0e38b688", size = 1340826, upload_time = "2025-06-13T14:07:46.881Z" }, - { url = "https://files.pythonhosted.org/packages/43/69/58ef8f4f59d3bcd505260c73bee87b008850f45edca40ddaba54273c35f4/pyzmq-27.0.0-cp313-cp313t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:67855c14173aec36395d7777aaba3cc527b393821f30143fd20b98e1ff31fd38", size = 897283, upload_time = "2025-06-13T14:07:49.562Z" }, - { url = "https://files.pythonhosted.org/packages/43/15/93a0d0396700a60475ad3c5d42c5f1c308d3570bc94626b86c71ef9953e0/pyzmq-27.0.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8617c7d43cd8ccdb62aebe984bfed77ca8f036e6c3e46dd3dddda64b10f0ab7a", size = 660567, upload_time = "2025-06-13T14:07:51.364Z" }, - { url = "https://files.pythonhosted.org/packages/0e/b3/fe055513e498ca32f64509abae19b9c9eb4d7c829e02bd8997dd51b029eb/pyzmq-27.0.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:67bfbcbd0a04c575e8103a6061d03e393d9f80ffdb9beb3189261e9e9bc5d5e9", size = 847681, upload_time = "2025-06-13T14:07:52.77Z" }, - { url = "https://files.pythonhosted.org/packages/b6/4f/ff15300b00b5b602191f3df06bbc8dd4164e805fdd65bb77ffbb9c5facdc/pyzmq-27.0.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:5cd11d46d7b7e5958121b3eaf4cd8638eff3a720ec527692132f05a57f14341d", size = 1650148, upload_time = "2025-06-13T14:07:54.178Z" }, - { url = "https://files.pythonhosted.org/packages/c4/6f/84bdfff2a224a6f26a24249a342e5906993c50b0761e311e81b39aef52a7/pyzmq-27.0.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:b801c2e40c5aa6072c2f4876de8dccd100af6d9918d4d0d7aa54a1d982fd4f44", size = 2023768, upload_time = "2025-06-13T14:07:55.714Z" }, - { url = "https://files.pythonhosted.org/packages/64/39/dc2db178c26a42228c5ac94a9cc595030458aa64c8d796a7727947afbf55/pyzmq-27.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:20d5cb29e8c5f76a127c75b6e7a77e846bc4b655c373baa098c26a61b7ecd0ef", size = 1885199, upload_time = "2025-06-13T14:07:57.166Z" }, - { url = "https://files.pythonhosted.org/packages/c7/21/dae7b06a1f8cdee5d8e7a63d99c5d129c401acc40410bef2cbf42025e26f/pyzmq-27.0.0-cp313-cp313t-win32.whl", hash = "sha256:a20528da85c7ac7a19b7384e8c3f8fa707841fd85afc4ed56eda59d93e3d98ad", size = 575439, upload_time = "2025-06-13T14:07:58.959Z" }, - { url = "https://files.pythonhosted.org/packages/eb/bc/1709dc55f0970cf4cb8259e435e6773f9946f41a045c2cb90e870b7072da/pyzmq-27.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:d8229f2efece6a660ee211d74d91dbc2a76b95544d46c74c615e491900dc107f", size = 639933, upload_time = "2025-06-13T14:08:00.777Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/f1/06/50a4e9648b3e8b992bef8eb632e457307553a89d294103213cfd47b3da69/pyzmq-27.0.0.tar.gz", hash = "sha256:b1f08eeb9ce1510e6939b6e5dcd46a17765e2333daae78ecf4606808442e52cf", size = 280478 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/93/a7/9ad68f55b8834ede477842214feba6a4c786d936c022a67625497aacf61d/pyzmq-27.0.0-cp312-abi3-macosx_10_15_universal2.whl", hash = "sha256:cbabc59dcfaac66655c040dfcb8118f133fb5dde185e5fc152628354c1598e52", size = 1305438 }, + { url = "https://files.pythonhosted.org/packages/ba/ee/26aa0f98665a22bc90ebe12dced1de5f3eaca05363b717f6fb229b3421b3/pyzmq-27.0.0-cp312-abi3-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:cb0ac5179cba4b2f94f1aa208fbb77b62c4c9bf24dd446278b8b602cf85fcda3", size = 895095 }, + { url = "https://files.pythonhosted.org/packages/cf/85/c57e7ab216ecd8aa4cc7e3b83b06cc4e9cf45c87b0afc095f10cd5ce87c1/pyzmq-27.0.0-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:53a48f0228eab6cbf69fde3aa3c03cbe04e50e623ef92ae395fce47ef8a76152", size = 651826 }, + { url = "https://files.pythonhosted.org/packages/69/9a/9ea7e230feda9400fb0ae0d61d7d6ddda635e718d941c44eeab22a179d34/pyzmq-27.0.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:111db5f395e09f7e775f759d598f43cb815fc58e0147623c4816486e1a39dc22", size = 839750 }, + { url = "https://files.pythonhosted.org/packages/08/66/4cebfbe71f3dfbd417011daca267539f62ed0fbc68105357b68bbb1a25b7/pyzmq-27.0.0-cp312-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:c8878011653dcdc27cc2c57e04ff96f0471e797f5c19ac3d7813a245bcb24371", size = 1641357 }, + { url = "https://files.pythonhosted.org/packages/ac/f6/b0f62578c08d2471c791287149cb8c2aaea414ae98c6e995c7dbe008adfb/pyzmq-27.0.0-cp312-abi3-musllinux_1_2_i686.whl", hash = "sha256:c0ed2c1f335ba55b5fdc964622254917d6b782311c50e138863eda409fbb3b6d", size = 2020281 }, + { url = "https://files.pythonhosted.org/packages/37/b9/4f670b15c7498495da9159edc374ec09c88a86d9cd5a47d892f69df23450/pyzmq-27.0.0-cp312-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:e918d70862d4cfd4b1c187310015646a14e1f5917922ab45b29f28f345eeb6be", size = 1877110 }, + { url = "https://files.pythonhosted.org/packages/66/31/9dee25c226295b740609f0d46db2fe972b23b6f5cf786360980524a3ba92/pyzmq-27.0.0-cp312-abi3-win32.whl", hash = "sha256:88b4e43cab04c3c0f0d55df3b1eef62df2b629a1a369b5289a58f6fa8b07c4f4", size = 559297 }, + { url = "https://files.pythonhosted.org/packages/9b/12/52da5509800f7ff2d287b2f2b4e636e7ea0f001181cba6964ff6c1537778/pyzmq-27.0.0-cp312-abi3-win_amd64.whl", hash = "sha256:dce4199bf5f648a902ce37e7b3afa286f305cd2ef7a8b6ec907470ccb6c8b371", size = 619203 }, + { url = "https://files.pythonhosted.org/packages/93/6d/7f2e53b19d1edb1eb4f09ec7c3a1f945ca0aac272099eab757d15699202b/pyzmq-27.0.0-cp312-abi3-win_arm64.whl", hash = "sha256:56e46bbb85d52c1072b3f809cc1ce77251d560bc036d3a312b96db1afe76db2e", size = 551927 }, + { url = "https://files.pythonhosted.org/packages/19/62/876b27c4ff777db4ceba1c69ea90d3c825bb4f8d5e7cd987ce5802e33c55/pyzmq-27.0.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:c36ad534c0c29b4afa088dc53543c525b23c0797e01b69fef59b1a9c0e38b688", size = 1340826 }, + { url = "https://files.pythonhosted.org/packages/43/69/58ef8f4f59d3bcd505260c73bee87b008850f45edca40ddaba54273c35f4/pyzmq-27.0.0-cp313-cp313t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:67855c14173aec36395d7777aaba3cc527b393821f30143fd20b98e1ff31fd38", size = 897283 }, + { url = "https://files.pythonhosted.org/packages/43/15/93a0d0396700a60475ad3c5d42c5f1c308d3570bc94626b86c71ef9953e0/pyzmq-27.0.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8617c7d43cd8ccdb62aebe984bfed77ca8f036e6c3e46dd3dddda64b10f0ab7a", size = 660567 }, + { url = "https://files.pythonhosted.org/packages/0e/b3/fe055513e498ca32f64509abae19b9c9eb4d7c829e02bd8997dd51b029eb/pyzmq-27.0.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:67bfbcbd0a04c575e8103a6061d03e393d9f80ffdb9beb3189261e9e9bc5d5e9", size = 847681 }, + { url = "https://files.pythonhosted.org/packages/b6/4f/ff15300b00b5b602191f3df06bbc8dd4164e805fdd65bb77ffbb9c5facdc/pyzmq-27.0.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:5cd11d46d7b7e5958121b3eaf4cd8638eff3a720ec527692132f05a57f14341d", size = 1650148 }, + { url = "https://files.pythonhosted.org/packages/c4/6f/84bdfff2a224a6f26a24249a342e5906993c50b0761e311e81b39aef52a7/pyzmq-27.0.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:b801c2e40c5aa6072c2f4876de8dccd100af6d9918d4d0d7aa54a1d982fd4f44", size = 2023768 }, + { url = "https://files.pythonhosted.org/packages/64/39/dc2db178c26a42228c5ac94a9cc595030458aa64c8d796a7727947afbf55/pyzmq-27.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:20d5cb29e8c5f76a127c75b6e7a77e846bc4b655c373baa098c26a61b7ecd0ef", size = 1885199 }, + { url = "https://files.pythonhosted.org/packages/c7/21/dae7b06a1f8cdee5d8e7a63d99c5d129c401acc40410bef2cbf42025e26f/pyzmq-27.0.0-cp313-cp313t-win32.whl", hash = "sha256:a20528da85c7ac7a19b7384e8c3f8fa707841fd85afc4ed56eda59d93e3d98ad", size = 575439 }, + { url = "https://files.pythonhosted.org/packages/eb/bc/1709dc55f0970cf4cb8259e435e6773f9946f41a045c2cb90e870b7072da/pyzmq-27.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:d8229f2efece6a660ee211d74d91dbc2a76b95544d46c74c615e491900dc107f", size = 639933 }, ] [[package]] name = "ratelimit" version = "2.2.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ab/38/ff60c8fc9e002d50d48822cc5095deb8ebbc5f91a6b8fdd9731c87a147c9/ratelimit-2.2.1.tar.gz", hash = "sha256:af8a9b64b821529aca09ebaf6d8d279100d766f19e90b5059ac6a718ca6dee42", size = 5251, upload_time = "2018-12-17T18:55:49.675Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ab/38/ff60c8fc9e002d50d48822cc5095deb8ebbc5f91a6b8fdd9731c87a147c9/ratelimit-2.2.1.tar.gz", hash = "sha256:af8a9b64b821529aca09ebaf6d8d279100d766f19e90b5059ac6a718ca6dee42", size = 5251 } [[package]] name = "referencing" @@ -1767,9 +1767,9 @@ dependencies = [ { name = "rpds-py" }, { name = "typing-extensions", marker = "python_full_version < '3.13'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/2f/db/98b5c277be99dd18bfd91dd04e1b759cad18d1a338188c936e92f921c7e2/referencing-0.36.2.tar.gz", hash = "sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa", size = 74744, upload_time = "2025-01-25T08:48:16.138Z" } +sdist = { url = "https://files.pythonhosted.org/packages/2f/db/98b5c277be99dd18bfd91dd04e1b759cad18d1a338188c936e92f921c7e2/referencing-0.36.2.tar.gz", hash = "sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa", size = 74744 } wheels = [ - { url = "https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0", size = 26775, upload_time = "2025-01-25T08:48:14.241Z" }, + { url = "https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0", size = 26775 }, ] [[package]] @@ -1782,9 +1782,9 @@ dependencies = [ { name = "idna" }, { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/e1/0a/929373653770d8a0d7ea76c37de6e41f11eb07559b103b1c02cafb3f7cf8/requests-2.32.4.tar.gz", hash = "sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422", size = 135258, upload_time = "2025-06-09T16:43:07.34Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e1/0a/929373653770d8a0d7ea76c37de6e41f11eb07559b103b1c02cafb3f7cf8/requests-2.32.4.tar.gz", hash = "sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422", size = 135258 } wheels = [ - { url = "https://files.pythonhosted.org/packages/7c/e4/56027c4a6b4ae70ca9de302488c5ca95ad4a39e190093d6c1a8ace08341b/requests-2.32.4-py3-none-any.whl", hash = "sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c", size = 64847, upload_time = "2025-06-09T16:43:05.728Z" }, + { url = "https://files.pythonhosted.org/packages/7c/e4/56027c4a6b4ae70ca9de302488c5ca95ad4a39e190093d6c1a8ace08341b/requests-2.32.4-py3-none-any.whl", hash = "sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c", size = 64847 }, ] [[package]] @@ -1794,9 +1794,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "requests" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/72/97/bf44e6c6bd8ddbb99943baf7ba8b1a8485bcd2fe0e55e5708d7fee4ff1ae/requests_file-2.1.0.tar.gz", hash = "sha256:0f549a3f3b0699415ac04d167e9cb39bccfb730cb832b4d20be3d9867356e658", size = 6891, upload_time = "2024-05-21T16:28:00.24Z" } +sdist = { url = "https://files.pythonhosted.org/packages/72/97/bf44e6c6bd8ddbb99943baf7ba8b1a8485bcd2fe0e55e5708d7fee4ff1ae/requests_file-2.1.0.tar.gz", hash = "sha256:0f549a3f3b0699415ac04d167e9cb39bccfb730cb832b4d20be3d9867356e658", size = 6891 } wheels = [ - { url = "https://files.pythonhosted.org/packages/d7/25/dd878a121fcfdf38f52850f11c512e13ec87c2ea72385933818e5b6c15ce/requests_file-2.1.0-py2.py3-none-any.whl", hash = "sha256:cf270de5a4c5874e84599fc5778303d496c10ae5e870bfa378818f35d21bda5c", size = 4244, upload_time = "2024-05-21T16:27:57.733Z" }, + { url = "https://files.pythonhosted.org/packages/d7/25/dd878a121fcfdf38f52850f11c512e13ec87c2ea72385933818e5b6c15ce/requests_file-2.1.0-py2.py3-none-any.whl", hash = "sha256:cf270de5a4c5874e84599fc5778303d496c10ae5e870bfa378818f35d21bda5c", size = 4244 }, ] [[package]] @@ -1813,18 +1813,18 @@ dependencies = [ { name = "python-debian" }, { name = "tomlkit" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/08/43/35421efe0e69823787b331362e11cc16bb697cd6f19cbed284d421615f14/reuse-5.0.2.tar.gz", hash = "sha256:878016ae5dd29c10bad4606d6676c12a268c12aa9fcfea66403598e16eed085c", size = 358798, upload_time = "2024-11-14T09:33:17.512Z" } +sdist = { url = "https://files.pythonhosted.org/packages/08/43/35421efe0e69823787b331362e11cc16bb697cd6f19cbed284d421615f14/reuse-5.0.2.tar.gz", hash = "sha256:878016ae5dd29c10bad4606d6676c12a268c12aa9fcfea66403598e16eed085c", size = 358798 } wheels = [ - { url = "https://files.pythonhosted.org/packages/0a/2f/73de654df9e7e5f67d742c1d949b5c0c7c1203e84b2272d9e34a91faaf5c/reuse-5.0.2-cp313-cp313-manylinux_2_40_x86_64.whl", hash = "sha256:7a680f00324e87a72061677a892d8cbabfddf7adcf7a5376aeeed2d78995bbbb", size = 184309, upload_time = "2024-11-14T09:33:15.047Z" }, + { url = "https://files.pythonhosted.org/packages/0a/2f/73de654df9e7e5f67d742c1d949b5c0c7c1203e84b2272d9e34a91faaf5c/reuse-5.0.2-cp313-cp313-manylinux_2_40_x86_64.whl", hash = "sha256:7a680f00324e87a72061677a892d8cbabfddf7adcf7a5376aeeed2d78995bbbb", size = 184309 }, ] [[package]] name = "rfc3986" version = "2.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/85/40/1520d68bfa07ab5a6f065a186815fb6610c86fe957bc065754e47f7b0840/rfc3986-2.0.0.tar.gz", hash = "sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c", size = 49026, upload_time = "2022-01-10T00:52:30.832Z" } +sdist = { url = "https://files.pythonhosted.org/packages/85/40/1520d68bfa07ab5a6f065a186815fb6610c86fe957bc065754e47f7b0840/rfc3986-2.0.0.tar.gz", hash = "sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c", size = 49026 } wheels = [ - { url = "https://files.pythonhosted.org/packages/ff/9a/9afaade874b2fa6c752c36f1548f718b5b83af81ed9b76628329dab81c1b/rfc3986-2.0.0-py2.py3-none-any.whl", hash = "sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd", size = 31326, upload_time = "2022-01-10T00:52:29.594Z" }, + { url = "https://files.pythonhosted.org/packages/ff/9a/9afaade874b2fa6c752c36f1548f718b5b83af81ed9b76628329dab81c1b/rfc3986-2.0.0-py2.py3-none-any.whl", hash = "sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd", size = 31326 }, ] [[package]] @@ -1835,85 +1835,85 @@ dependencies = [ { name = "markdown-it-py" }, { name = "pygments" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a1/53/830aa4c3066a8ab0ae9a9955976fb770fe9c6102117c8ec4ab3ea62d89e8/rich-14.0.0.tar.gz", hash = "sha256:82f1bc23a6a21ebca4ae0c45af9bdbc492ed20231dcb63f297d6d1021a9d5725", size = 224078, upload_time = "2025-03-30T14:15:14.23Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a1/53/830aa4c3066a8ab0ae9a9955976fb770fe9c6102117c8ec4ab3ea62d89e8/rich-14.0.0.tar.gz", hash = "sha256:82f1bc23a6a21ebca4ae0c45af9bdbc492ed20231dcb63f297d6d1021a9d5725", size = 224078 } wheels = [ - { url = "https://files.pythonhosted.org/packages/0d/9b/63f4c7ebc259242c89b3acafdb37b41d1185c07ff0011164674e9076b491/rich-14.0.0-py3-none-any.whl", hash = "sha256:1c9491e1951aac09caffd42f448ee3d04e58923ffe14993f6e83068dc395d7e0", size = 243229, upload_time = "2025-03-30T14:15:12.283Z" }, + { url = "https://files.pythonhosted.org/packages/0d/9b/63f4c7ebc259242c89b3acafdb37b41d1185c07ff0011164674e9076b491/rich-14.0.0-py3-none-any.whl", hash = "sha256:1c9491e1951aac09caffd42f448ee3d04e58923ffe14993f6e83068dc395d7e0", size = 243229 }, ] [[package]] name = "rpds-py" version = "0.26.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a5/aa/4456d84bbb54adc6a916fb10c9b374f78ac840337644e4a5eda229c81275/rpds_py-0.26.0.tar.gz", hash = "sha256:20dae58a859b0906f0685642e591056f1e787f3a8b39c8e8749a45dc7d26bdb0", size = 27385, upload_time = "2025-07-01T15:57:13.958Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ea/86/90eb87c6f87085868bd077c7a9938006eb1ce19ed4d06944a90d3560fce2/rpds_py-0.26.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:894514d47e012e794f1350f076c427d2347ebf82f9b958d554d12819849a369d", size = 363933, upload_time = "2025-07-01T15:54:15.734Z" }, - { url = "https://files.pythonhosted.org/packages/63/78/4469f24d34636242c924626082b9586f064ada0b5dbb1e9d096ee7a8e0c6/rpds_py-0.26.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc921b96fa95a097add244da36a1d9e4f3039160d1d30f1b35837bf108c21136", size = 350447, upload_time = "2025-07-01T15:54:16.922Z" }, - { url = "https://files.pythonhosted.org/packages/ad/91/c448ed45efdfdade82348d5e7995e15612754826ea640afc20915119734f/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e1157659470aa42a75448b6e943c895be8c70531c43cb78b9ba990778955582", size = 384711, upload_time = "2025-07-01T15:54:18.101Z" }, - { url = "https://files.pythonhosted.org/packages/ec/43/e5c86fef4be7f49828bdd4ecc8931f0287b1152c0bb0163049b3218740e7/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:521ccf56f45bb3a791182dc6b88ae5f8fa079dd705ee42138c76deb1238e554e", size = 400865, upload_time = "2025-07-01T15:54:19.295Z" }, - { url = "https://files.pythonhosted.org/packages/55/34/e00f726a4d44f22d5c5fe2e5ddd3ac3d7fd3f74a175607781fbdd06fe375/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9def736773fd56b305c0eef698be5192c77bfa30d55a0e5885f80126c4831a15", size = 517763, upload_time = "2025-07-01T15:54:20.858Z" }, - { url = "https://files.pythonhosted.org/packages/52/1c/52dc20c31b147af724b16104500fba13e60123ea0334beba7b40e33354b4/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cdad4ea3b4513b475e027be79e5a0ceac8ee1c113a1a11e5edc3c30c29f964d8", size = 406651, upload_time = "2025-07-01T15:54:22.508Z" }, - { url = "https://files.pythonhosted.org/packages/2e/77/87d7bfabfc4e821caa35481a2ff6ae0b73e6a391bb6b343db2c91c2b9844/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82b165b07f416bdccf5c84546a484cc8f15137ca38325403864bfdf2b5b72f6a", size = 386079, upload_time = "2025-07-01T15:54:23.987Z" }, - { url = "https://files.pythonhosted.org/packages/e3/d4/7f2200c2d3ee145b65b3cddc4310d51f7da6a26634f3ac87125fd789152a/rpds_py-0.26.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d04cab0a54b9dba4d278fe955a1390da3cf71f57feb78ddc7cb67cbe0bd30323", size = 421379, upload_time = "2025-07-01T15:54:25.073Z" }, - { url = "https://files.pythonhosted.org/packages/ae/13/9fdd428b9c820869924ab62236b8688b122baa22d23efdd1c566938a39ba/rpds_py-0.26.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:79061ba1a11b6a12743a2b0f72a46aa2758613d454aa6ba4f5a265cc48850158", size = 562033, upload_time = "2025-07-01T15:54:26.225Z" }, - { url = "https://files.pythonhosted.org/packages/f3/e1/b69686c3bcbe775abac3a4c1c30a164a2076d28df7926041f6c0eb5e8d28/rpds_py-0.26.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:f405c93675d8d4c5ac87364bb38d06c988e11028a64b52a47158a355079661f3", size = 591639, upload_time = "2025-07-01T15:54:27.424Z" }, - { url = "https://files.pythonhosted.org/packages/5c/c9/1e3d8c8863c84a90197ac577bbc3d796a92502124c27092413426f670990/rpds_py-0.26.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dafd4c44b74aa4bed4b250f1aed165b8ef5de743bcca3b88fc9619b6087093d2", size = 557105, upload_time = "2025-07-01T15:54:29.93Z" }, - { url = "https://files.pythonhosted.org/packages/9f/c5/90c569649057622959f6dcc40f7b516539608a414dfd54b8d77e3b201ac0/rpds_py-0.26.0-cp312-cp312-win32.whl", hash = "sha256:3da5852aad63fa0c6f836f3359647870e21ea96cf433eb393ffa45263a170d44", size = 223272, upload_time = "2025-07-01T15:54:31.128Z" }, - { url = "https://files.pythonhosted.org/packages/7d/16/19f5d9f2a556cfed454eebe4d354c38d51c20f3db69e7b4ce6cff904905d/rpds_py-0.26.0-cp312-cp312-win_amd64.whl", hash = "sha256:cf47cfdabc2194a669dcf7a8dbba62e37a04c5041d2125fae0233b720da6f05c", size = 234995, upload_time = "2025-07-01T15:54:32.195Z" }, - { url = "https://files.pythonhosted.org/packages/83/f0/7935e40b529c0e752dfaa7880224771b51175fce08b41ab4a92eb2fbdc7f/rpds_py-0.26.0-cp312-cp312-win_arm64.whl", hash = "sha256:20ab1ae4fa534f73647aad289003f1104092890849e0266271351922ed5574f8", size = 223198, upload_time = "2025-07-01T15:54:33.271Z" }, - { url = "https://files.pythonhosted.org/packages/6a/67/bb62d0109493b12b1c6ab00de7a5566aa84c0e44217c2d94bee1bd370da9/rpds_py-0.26.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:696764a5be111b036256c0b18cd29783fab22154690fc698062fc1b0084b511d", size = 363917, upload_time = "2025-07-01T15:54:34.755Z" }, - { url = "https://files.pythonhosted.org/packages/4b/f3/34e6ae1925a5706c0f002a8d2d7f172373b855768149796af87bd65dcdb9/rpds_py-0.26.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1e6c15d2080a63aaed876e228efe4f814bc7889c63b1e112ad46fdc8b368b9e1", size = 350073, upload_time = "2025-07-01T15:54:36.292Z" }, - { url = "https://files.pythonhosted.org/packages/75/83/1953a9d4f4e4de7fd0533733e041c28135f3c21485faaef56a8aadbd96b5/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:390e3170babf42462739a93321e657444f0862c6d722a291accc46f9d21ed04e", size = 384214, upload_time = "2025-07-01T15:54:37.469Z" }, - { url = "https://files.pythonhosted.org/packages/48/0e/983ed1b792b3322ea1d065e67f4b230f3b96025f5ce3878cc40af09b7533/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7da84c2c74c0f5bc97d853d9e17bb83e2dcafcff0dc48286916001cc114379a1", size = 400113, upload_time = "2025-07-01T15:54:38.954Z" }, - { url = "https://files.pythonhosted.org/packages/69/7f/36c0925fff6f660a80be259c5b4f5e53a16851f946eb080351d057698528/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4c5fe114a6dd480a510b6d3661d09d67d1622c4bf20660a474507aaee7eeeee9", size = 515189, upload_time = "2025-07-01T15:54:40.57Z" }, - { url = "https://files.pythonhosted.org/packages/13/45/cbf07fc03ba7a9b54662c9badb58294ecfb24f828b9732970bd1a431ed5c/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3100b3090269f3a7ea727b06a6080d4eb7439dca4c0e91a07c5d133bb1727ea7", size = 406998, upload_time = "2025-07-01T15:54:43.025Z" }, - { url = "https://files.pythonhosted.org/packages/6c/b0/8fa5e36e58657997873fd6a1cf621285ca822ca75b4b3434ead047daa307/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c03c9b0c64afd0320ae57de4c982801271c0c211aa2d37f3003ff5feb75bb04", size = 385903, upload_time = "2025-07-01T15:54:44.752Z" }, - { url = "https://files.pythonhosted.org/packages/4b/f7/b25437772f9f57d7a9fbd73ed86d0dcd76b4c7c6998348c070d90f23e315/rpds_py-0.26.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5963b72ccd199ade6ee493723d18a3f21ba7d5b957017607f815788cef50eaf1", size = 419785, upload_time = "2025-07-01T15:54:46.043Z" }, - { url = "https://files.pythonhosted.org/packages/a7/6b/63ffa55743dfcb4baf2e9e77a0b11f7f97ed96a54558fcb5717a4b2cd732/rpds_py-0.26.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9da4e873860ad5bab3291438525cae80169daecbfafe5657f7f5fb4d6b3f96b9", size = 561329, upload_time = "2025-07-01T15:54:47.64Z" }, - { url = "https://files.pythonhosted.org/packages/2f/07/1f4f5e2886c480a2346b1e6759c00278b8a69e697ae952d82ae2e6ee5db0/rpds_py-0.26.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5afaddaa8e8c7f1f7b4c5c725c0070b6eed0228f705b90a1732a48e84350f4e9", size = 590875, upload_time = "2025-07-01T15:54:48.9Z" }, - { url = "https://files.pythonhosted.org/packages/cc/bc/e6639f1b91c3a55f8c41b47d73e6307051b6e246254a827ede730624c0f8/rpds_py-0.26.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4916dc96489616a6f9667e7526af8fa693c0fdb4f3acb0e5d9f4400eb06a47ba", size = 556636, upload_time = "2025-07-01T15:54:50.619Z" }, - { url = "https://files.pythonhosted.org/packages/05/4c/b3917c45566f9f9a209d38d9b54a1833f2bb1032a3e04c66f75726f28876/rpds_py-0.26.0-cp313-cp313-win32.whl", hash = "sha256:2a343f91b17097c546b93f7999976fd6c9d5900617aa848c81d794e062ab302b", size = 222663, upload_time = "2025-07-01T15:54:52.023Z" }, - { url = "https://files.pythonhosted.org/packages/e0/0b/0851bdd6025775aaa2365bb8de0697ee2558184c800bfef8d7aef5ccde58/rpds_py-0.26.0-cp313-cp313-win_amd64.whl", hash = "sha256:0a0b60701f2300c81b2ac88a5fb893ccfa408e1c4a555a77f908a2596eb875a5", size = 234428, upload_time = "2025-07-01T15:54:53.692Z" }, - { url = "https://files.pythonhosted.org/packages/ed/e8/a47c64ed53149c75fb581e14a237b7b7cd18217e969c30d474d335105622/rpds_py-0.26.0-cp313-cp313-win_arm64.whl", hash = "sha256:257d011919f133a4746958257f2c75238e3ff54255acd5e3e11f3ff41fd14256", size = 222571, upload_time = "2025-07-01T15:54:54.822Z" }, - { url = "https://files.pythonhosted.org/packages/89/bf/3d970ba2e2bcd17d2912cb42874107390f72873e38e79267224110de5e61/rpds_py-0.26.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:529c8156d7506fba5740e05da8795688f87119cce330c244519cf706a4a3d618", size = 360475, upload_time = "2025-07-01T15:54:56.228Z" }, - { url = "https://files.pythonhosted.org/packages/82/9f/283e7e2979fc4ec2d8ecee506d5a3675fce5ed9b4b7cb387ea5d37c2f18d/rpds_py-0.26.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f53ec51f9d24e9638a40cabb95078ade8c99251945dad8d57bf4aabe86ecee35", size = 346692, upload_time = "2025-07-01T15:54:58.561Z" }, - { url = "https://files.pythonhosted.org/packages/e3/03/7e50423c04d78daf391da3cc4330bdb97042fc192a58b186f2d5deb7befd/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab504c4d654e4a29558eaa5bb8cea5fdc1703ea60a8099ffd9c758472cf913f", size = 379415, upload_time = "2025-07-01T15:54:59.751Z" }, - { url = "https://files.pythonhosted.org/packages/57/00/d11ee60d4d3b16808432417951c63df803afb0e0fc672b5e8d07e9edaaae/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fd0641abca296bc1a00183fe44f7fced8807ed49d501f188faa642d0e4975b83", size = 391783, upload_time = "2025-07-01T15:55:00.898Z" }, - { url = "https://files.pythonhosted.org/packages/08/b3/1069c394d9c0d6d23c5b522e1f6546b65793a22950f6e0210adcc6f97c3e/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:69b312fecc1d017b5327afa81d4da1480f51c68810963a7336d92203dbb3d4f1", size = 512844, upload_time = "2025-07-01T15:55:02.201Z" }, - { url = "https://files.pythonhosted.org/packages/08/3b/c4fbf0926800ed70b2c245ceca99c49f066456755f5d6eb8863c2c51e6d0/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c741107203954f6fc34d3066d213d0a0c40f7bb5aafd698fb39888af277c70d8", size = 402105, upload_time = "2025-07-01T15:55:03.698Z" }, - { url = "https://files.pythonhosted.org/packages/1c/b0/db69b52ca07413e568dae9dc674627a22297abb144c4d6022c6d78f1e5cc/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc3e55a7db08dc9a6ed5fb7103019d2c1a38a349ac41901f9f66d7f95750942f", size = 383440, upload_time = "2025-07-01T15:55:05.398Z" }, - { url = "https://files.pythonhosted.org/packages/4c/e1/c65255ad5b63903e56b3bb3ff9dcc3f4f5c3badde5d08c741ee03903e951/rpds_py-0.26.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9e851920caab2dbcae311fd28f4313c6953993893eb5c1bb367ec69d9a39e7ed", size = 412759, upload_time = "2025-07-01T15:55:08.316Z" }, - { url = "https://files.pythonhosted.org/packages/e4/22/bb731077872377a93c6e93b8a9487d0406c70208985831034ccdeed39c8e/rpds_py-0.26.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:dfbf280da5f876d0b00c81f26bedce274e72a678c28845453885a9b3c22ae632", size = 556032, upload_time = "2025-07-01T15:55:09.52Z" }, - { url = "https://files.pythonhosted.org/packages/e0/8b/393322ce7bac5c4530fb96fc79cc9ea2f83e968ff5f6e873f905c493e1c4/rpds_py-0.26.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:1cc81d14ddfa53d7f3906694d35d54d9d3f850ef8e4e99ee68bc0d1e5fed9a9c", size = 585416, upload_time = "2025-07-01T15:55:11.216Z" }, - { url = "https://files.pythonhosted.org/packages/49/ae/769dc372211835bf759319a7aae70525c6eb523e3371842c65b7ef41c9c6/rpds_py-0.26.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dca83c498b4650a91efcf7b88d669b170256bf8017a5db6f3e06c2bf031f57e0", size = 554049, upload_time = "2025-07-01T15:55:13.004Z" }, - { url = "https://files.pythonhosted.org/packages/6b/f9/4c43f9cc203d6ba44ce3146246cdc38619d92c7bd7bad4946a3491bd5b70/rpds_py-0.26.0-cp313-cp313t-win32.whl", hash = "sha256:4d11382bcaf12f80b51d790dee295c56a159633a8e81e6323b16e55d81ae37e9", size = 218428, upload_time = "2025-07-01T15:55:14.486Z" }, - { url = "https://files.pythonhosted.org/packages/7e/8b/9286b7e822036a4a977f2f1e851c7345c20528dbd56b687bb67ed68a8ede/rpds_py-0.26.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ff110acded3c22c033e637dd8896e411c7d3a11289b2edf041f86663dbc791e9", size = 231524, upload_time = "2025-07-01T15:55:15.745Z" }, - { url = "https://files.pythonhosted.org/packages/55/07/029b7c45db910c74e182de626dfdae0ad489a949d84a468465cd0ca36355/rpds_py-0.26.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:da619979df60a940cd434084355c514c25cf8eb4cf9a508510682f6c851a4f7a", size = 364292, upload_time = "2025-07-01T15:55:17.001Z" }, - { url = "https://files.pythonhosted.org/packages/13/d1/9b3d3f986216b4d1f584878dca15ce4797aaf5d372d738974ba737bf68d6/rpds_py-0.26.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ea89a2458a1a75f87caabefe789c87539ea4e43b40f18cff526052e35bbb4fdf", size = 350334, upload_time = "2025-07-01T15:55:18.922Z" }, - { url = "https://files.pythonhosted.org/packages/18/98/16d5e7bc9ec715fa9668731d0cf97f6b032724e61696e2db3d47aeb89214/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:feac1045b3327a45944e7dcbeb57530339f6b17baff154df51ef8b0da34c8c12", size = 384875, upload_time = "2025-07-01T15:55:20.399Z" }, - { url = "https://files.pythonhosted.org/packages/f9/13/aa5e2b1ec5ab0e86a5c464d53514c0467bec6ba2507027d35fc81818358e/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b818a592bd69bfe437ee8368603d4a2d928c34cffcdf77c2e761a759ffd17d20", size = 399993, upload_time = "2025-07-01T15:55:21.729Z" }, - { url = "https://files.pythonhosted.org/packages/17/03/8021810b0e97923abdbab6474c8b77c69bcb4b2c58330777df9ff69dc559/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a8b0dd8648709b62d9372fc00a57466f5fdeefed666afe3fea5a6c9539a0331", size = 516683, upload_time = "2025-07-01T15:55:22.918Z" }, - { url = "https://files.pythonhosted.org/packages/dc/b1/da8e61c87c2f3d836954239fdbbfb477bb7b54d74974d8f6fcb34342d166/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6d3498ad0df07d81112aa6ec6c95a7e7b1ae00929fb73e7ebee0f3faaeabad2f", size = 408825, upload_time = "2025-07-01T15:55:24.207Z" }, - { url = "https://files.pythonhosted.org/packages/38/bc/1fc173edaaa0e52c94b02a655db20697cb5fa954ad5a8e15a2c784c5cbdd/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24a4146ccb15be237fdef10f331c568e1b0e505f8c8c9ed5d67759dac58ac246", size = 387292, upload_time = "2025-07-01T15:55:25.554Z" }, - { url = "https://files.pythonhosted.org/packages/7c/eb/3a9bb4bd90867d21916f253caf4f0d0be7098671b6715ad1cead9fe7bab9/rpds_py-0.26.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a9a63785467b2d73635957d32a4f6e73d5e4df497a16a6392fa066b753e87387", size = 420435, upload_time = "2025-07-01T15:55:27.798Z" }, - { url = "https://files.pythonhosted.org/packages/cd/16/e066dcdb56f5632713445271a3f8d3d0b426d51ae9c0cca387799df58b02/rpds_py-0.26.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:de4ed93a8c91debfd5a047be327b7cc8b0cc6afe32a716bbbc4aedca9e2a83af", size = 562410, upload_time = "2025-07-01T15:55:29.057Z" }, - { url = "https://files.pythonhosted.org/packages/60/22/ddbdec7eb82a0dc2e455be44c97c71c232983e21349836ce9f272e8a3c29/rpds_py-0.26.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:caf51943715b12af827696ec395bfa68f090a4c1a1d2509eb4e2cb69abbbdb33", size = 590724, upload_time = "2025-07-01T15:55:30.719Z" }, - { url = "https://files.pythonhosted.org/packages/2c/b4/95744085e65b7187d83f2fcb0bef70716a1ea0a9e5d8f7f39a86e5d83424/rpds_py-0.26.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:4a59e5bc386de021f56337f757301b337d7ab58baa40174fb150accd480bc953", size = 558285, upload_time = "2025-07-01T15:55:31.981Z" }, - { url = "https://files.pythonhosted.org/packages/37/37/6309a75e464d1da2559446f9c811aa4d16343cebe3dbb73701e63f760caa/rpds_py-0.26.0-cp314-cp314-win32.whl", hash = "sha256:92c8db839367ef16a662478f0a2fe13e15f2227da3c1430a782ad0f6ee009ec9", size = 223459, upload_time = "2025-07-01T15:55:33.312Z" }, - { url = "https://files.pythonhosted.org/packages/d9/6f/8e9c11214c46098b1d1391b7e02b70bb689ab963db3b19540cba17315291/rpds_py-0.26.0-cp314-cp314-win_amd64.whl", hash = "sha256:b0afb8cdd034150d4d9f53926226ed27ad15b7f465e93d7468caaf5eafae0d37", size = 236083, upload_time = "2025-07-01T15:55:34.933Z" }, - { url = "https://files.pythonhosted.org/packages/47/af/9c4638994dd623d51c39892edd9d08e8be8220a4b7e874fa02c2d6e91955/rpds_py-0.26.0-cp314-cp314-win_arm64.whl", hash = "sha256:ca3f059f4ba485d90c8dc75cb5ca897e15325e4e609812ce57f896607c1c0867", size = 223291, upload_time = "2025-07-01T15:55:36.202Z" }, - { url = "https://files.pythonhosted.org/packages/4d/db/669a241144460474aab03e254326b32c42def83eb23458a10d163cb9b5ce/rpds_py-0.26.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:5afea17ab3a126006dc2f293b14ffc7ef3c85336cf451564a0515ed7648033da", size = 361445, upload_time = "2025-07-01T15:55:37.483Z" }, - { url = "https://files.pythonhosted.org/packages/3b/2d/133f61cc5807c6c2fd086a46df0eb8f63a23f5df8306ff9f6d0fd168fecc/rpds_py-0.26.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:69f0c0a3df7fd3a7eec50a00396104bb9a843ea6d45fcc31c2d5243446ffd7a7", size = 347206, upload_time = "2025-07-01T15:55:38.828Z" }, - { url = "https://files.pythonhosted.org/packages/05/bf/0e8fb4c05f70273469eecf82f6ccf37248558526a45321644826555db31b/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:801a71f70f9813e82d2513c9a96532551fce1e278ec0c64610992c49c04c2dad", size = 380330, upload_time = "2025-07-01T15:55:40.175Z" }, - { url = "https://files.pythonhosted.org/packages/d4/a8/060d24185d8b24d3923322f8d0ede16df4ade226a74e747b8c7c978e3dd3/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:df52098cde6d5e02fa75c1f6244f07971773adb4a26625edd5c18fee906fa84d", size = 392254, upload_time = "2025-07-01T15:55:42.015Z" }, - { url = "https://files.pythonhosted.org/packages/b9/7b/7c2e8a9ee3e6bc0bae26bf29f5219955ca2fbb761dca996a83f5d2f773fe/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9bc596b30f86dc6f0929499c9e574601679d0341a0108c25b9b358a042f51bca", size = 516094, upload_time = "2025-07-01T15:55:43.603Z" }, - { url = "https://files.pythonhosted.org/packages/75/d6/f61cafbed8ba1499b9af9f1777a2a199cd888f74a96133d8833ce5eaa9c5/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9dfbe56b299cf5875b68eb6f0ebaadc9cac520a1989cac0db0765abfb3709c19", size = 402889, upload_time = "2025-07-01T15:55:45.275Z" }, - { url = "https://files.pythonhosted.org/packages/92/19/c8ac0a8a8df2dd30cdec27f69298a5c13e9029500d6d76718130f5e5be10/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac64f4b2bdb4ea622175c9ab7cf09444e412e22c0e02e906978b3b488af5fde8", size = 384301, upload_time = "2025-07-01T15:55:47.098Z" }, - { url = "https://files.pythonhosted.org/packages/41/e1/6b1859898bc292a9ce5776016c7312b672da00e25cec74d7beced1027286/rpds_py-0.26.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:181ef9b6bbf9845a264f9aa45c31836e9f3c1f13be565d0d010e964c661d1e2b", size = 412891, upload_time = "2025-07-01T15:55:48.412Z" }, - { url = "https://files.pythonhosted.org/packages/ef/b9/ceb39af29913c07966a61367b3c08b4f71fad841e32c6b59a129d5974698/rpds_py-0.26.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:49028aa684c144ea502a8e847d23aed5e4c2ef7cadfa7d5eaafcb40864844b7a", size = 557044, upload_time = "2025-07-01T15:55:49.816Z" }, - { url = "https://files.pythonhosted.org/packages/2f/27/35637b98380731a521f8ec4f3fd94e477964f04f6b2f8f7af8a2d889a4af/rpds_py-0.26.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:e5d524d68a474a9688336045bbf76cb0def88549c1b2ad9dbfec1fb7cfbe9170", size = 585774, upload_time = "2025-07-01T15:55:51.192Z" }, - { url = "https://files.pythonhosted.org/packages/52/d9/3f0f105420fecd18551b678c9a6ce60bd23986098b252a56d35781b3e7e9/rpds_py-0.26.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:c1851f429b822831bd2edcbe0cfd12ee9ea77868f8d3daf267b189371671c80e", size = 554886, upload_time = "2025-07-01T15:55:52.541Z" }, - { url = "https://files.pythonhosted.org/packages/6b/c5/347c056a90dc8dd9bc240a08c527315008e1b5042e7a4cf4ac027be9d38a/rpds_py-0.26.0-cp314-cp314t-win32.whl", hash = "sha256:7bdb17009696214c3b66bb3590c6d62e14ac5935e53e929bcdbc5a495987a84f", size = 219027, upload_time = "2025-07-01T15:55:53.874Z" }, - { url = "https://files.pythonhosted.org/packages/75/04/5302cea1aa26d886d34cadbf2dc77d90d7737e576c0065f357b96dc7a1a6/rpds_py-0.26.0-cp314-cp314t-win_amd64.whl", hash = "sha256:f14440b9573a6f76b4ee4770c13f0b5921f71dde3b6fcb8dabbefd13b7fe05d7", size = 232821, upload_time = "2025-07-01T15:55:55.167Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/a5/aa/4456d84bbb54adc6a916fb10c9b374f78ac840337644e4a5eda229c81275/rpds_py-0.26.0.tar.gz", hash = "sha256:20dae58a859b0906f0685642e591056f1e787f3a8b39c8e8749a45dc7d26bdb0", size = 27385 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ea/86/90eb87c6f87085868bd077c7a9938006eb1ce19ed4d06944a90d3560fce2/rpds_py-0.26.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:894514d47e012e794f1350f076c427d2347ebf82f9b958d554d12819849a369d", size = 363933 }, + { url = "https://files.pythonhosted.org/packages/63/78/4469f24d34636242c924626082b9586f064ada0b5dbb1e9d096ee7a8e0c6/rpds_py-0.26.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc921b96fa95a097add244da36a1d9e4f3039160d1d30f1b35837bf108c21136", size = 350447 }, + { url = "https://files.pythonhosted.org/packages/ad/91/c448ed45efdfdade82348d5e7995e15612754826ea640afc20915119734f/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e1157659470aa42a75448b6e943c895be8c70531c43cb78b9ba990778955582", size = 384711 }, + { url = "https://files.pythonhosted.org/packages/ec/43/e5c86fef4be7f49828bdd4ecc8931f0287b1152c0bb0163049b3218740e7/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:521ccf56f45bb3a791182dc6b88ae5f8fa079dd705ee42138c76deb1238e554e", size = 400865 }, + { url = "https://files.pythonhosted.org/packages/55/34/e00f726a4d44f22d5c5fe2e5ddd3ac3d7fd3f74a175607781fbdd06fe375/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9def736773fd56b305c0eef698be5192c77bfa30d55a0e5885f80126c4831a15", size = 517763 }, + { url = "https://files.pythonhosted.org/packages/52/1c/52dc20c31b147af724b16104500fba13e60123ea0334beba7b40e33354b4/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cdad4ea3b4513b475e027be79e5a0ceac8ee1c113a1a11e5edc3c30c29f964d8", size = 406651 }, + { url = "https://files.pythonhosted.org/packages/2e/77/87d7bfabfc4e821caa35481a2ff6ae0b73e6a391bb6b343db2c91c2b9844/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82b165b07f416bdccf5c84546a484cc8f15137ca38325403864bfdf2b5b72f6a", size = 386079 }, + { url = "https://files.pythonhosted.org/packages/e3/d4/7f2200c2d3ee145b65b3cddc4310d51f7da6a26634f3ac87125fd789152a/rpds_py-0.26.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d04cab0a54b9dba4d278fe955a1390da3cf71f57feb78ddc7cb67cbe0bd30323", size = 421379 }, + { url = "https://files.pythonhosted.org/packages/ae/13/9fdd428b9c820869924ab62236b8688b122baa22d23efdd1c566938a39ba/rpds_py-0.26.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:79061ba1a11b6a12743a2b0f72a46aa2758613d454aa6ba4f5a265cc48850158", size = 562033 }, + { url = "https://files.pythonhosted.org/packages/f3/e1/b69686c3bcbe775abac3a4c1c30a164a2076d28df7926041f6c0eb5e8d28/rpds_py-0.26.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:f405c93675d8d4c5ac87364bb38d06c988e11028a64b52a47158a355079661f3", size = 591639 }, + { url = "https://files.pythonhosted.org/packages/5c/c9/1e3d8c8863c84a90197ac577bbc3d796a92502124c27092413426f670990/rpds_py-0.26.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dafd4c44b74aa4bed4b250f1aed165b8ef5de743bcca3b88fc9619b6087093d2", size = 557105 }, + { url = "https://files.pythonhosted.org/packages/9f/c5/90c569649057622959f6dcc40f7b516539608a414dfd54b8d77e3b201ac0/rpds_py-0.26.0-cp312-cp312-win32.whl", hash = "sha256:3da5852aad63fa0c6f836f3359647870e21ea96cf433eb393ffa45263a170d44", size = 223272 }, + { url = "https://files.pythonhosted.org/packages/7d/16/19f5d9f2a556cfed454eebe4d354c38d51c20f3db69e7b4ce6cff904905d/rpds_py-0.26.0-cp312-cp312-win_amd64.whl", hash = "sha256:cf47cfdabc2194a669dcf7a8dbba62e37a04c5041d2125fae0233b720da6f05c", size = 234995 }, + { url = "https://files.pythonhosted.org/packages/83/f0/7935e40b529c0e752dfaa7880224771b51175fce08b41ab4a92eb2fbdc7f/rpds_py-0.26.0-cp312-cp312-win_arm64.whl", hash = "sha256:20ab1ae4fa534f73647aad289003f1104092890849e0266271351922ed5574f8", size = 223198 }, + { url = "https://files.pythonhosted.org/packages/6a/67/bb62d0109493b12b1c6ab00de7a5566aa84c0e44217c2d94bee1bd370da9/rpds_py-0.26.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:696764a5be111b036256c0b18cd29783fab22154690fc698062fc1b0084b511d", size = 363917 }, + { url = "https://files.pythonhosted.org/packages/4b/f3/34e6ae1925a5706c0f002a8d2d7f172373b855768149796af87bd65dcdb9/rpds_py-0.26.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1e6c15d2080a63aaed876e228efe4f814bc7889c63b1e112ad46fdc8b368b9e1", size = 350073 }, + { url = "https://files.pythonhosted.org/packages/75/83/1953a9d4f4e4de7fd0533733e041c28135f3c21485faaef56a8aadbd96b5/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:390e3170babf42462739a93321e657444f0862c6d722a291accc46f9d21ed04e", size = 384214 }, + { url = "https://files.pythonhosted.org/packages/48/0e/983ed1b792b3322ea1d065e67f4b230f3b96025f5ce3878cc40af09b7533/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7da84c2c74c0f5bc97d853d9e17bb83e2dcafcff0dc48286916001cc114379a1", size = 400113 }, + { url = "https://files.pythonhosted.org/packages/69/7f/36c0925fff6f660a80be259c5b4f5e53a16851f946eb080351d057698528/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4c5fe114a6dd480a510b6d3661d09d67d1622c4bf20660a474507aaee7eeeee9", size = 515189 }, + { url = "https://files.pythonhosted.org/packages/13/45/cbf07fc03ba7a9b54662c9badb58294ecfb24f828b9732970bd1a431ed5c/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3100b3090269f3a7ea727b06a6080d4eb7439dca4c0e91a07c5d133bb1727ea7", size = 406998 }, + { url = "https://files.pythonhosted.org/packages/6c/b0/8fa5e36e58657997873fd6a1cf621285ca822ca75b4b3434ead047daa307/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c03c9b0c64afd0320ae57de4c982801271c0c211aa2d37f3003ff5feb75bb04", size = 385903 }, + { url = "https://files.pythonhosted.org/packages/4b/f7/b25437772f9f57d7a9fbd73ed86d0dcd76b4c7c6998348c070d90f23e315/rpds_py-0.26.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5963b72ccd199ade6ee493723d18a3f21ba7d5b957017607f815788cef50eaf1", size = 419785 }, + { url = "https://files.pythonhosted.org/packages/a7/6b/63ffa55743dfcb4baf2e9e77a0b11f7f97ed96a54558fcb5717a4b2cd732/rpds_py-0.26.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9da4e873860ad5bab3291438525cae80169daecbfafe5657f7f5fb4d6b3f96b9", size = 561329 }, + { url = "https://files.pythonhosted.org/packages/2f/07/1f4f5e2886c480a2346b1e6759c00278b8a69e697ae952d82ae2e6ee5db0/rpds_py-0.26.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5afaddaa8e8c7f1f7b4c5c725c0070b6eed0228f705b90a1732a48e84350f4e9", size = 590875 }, + { url = "https://files.pythonhosted.org/packages/cc/bc/e6639f1b91c3a55f8c41b47d73e6307051b6e246254a827ede730624c0f8/rpds_py-0.26.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4916dc96489616a6f9667e7526af8fa693c0fdb4f3acb0e5d9f4400eb06a47ba", size = 556636 }, + { url = "https://files.pythonhosted.org/packages/05/4c/b3917c45566f9f9a209d38d9b54a1833f2bb1032a3e04c66f75726f28876/rpds_py-0.26.0-cp313-cp313-win32.whl", hash = "sha256:2a343f91b17097c546b93f7999976fd6c9d5900617aa848c81d794e062ab302b", size = 222663 }, + { url = "https://files.pythonhosted.org/packages/e0/0b/0851bdd6025775aaa2365bb8de0697ee2558184c800bfef8d7aef5ccde58/rpds_py-0.26.0-cp313-cp313-win_amd64.whl", hash = "sha256:0a0b60701f2300c81b2ac88a5fb893ccfa408e1c4a555a77f908a2596eb875a5", size = 234428 }, + { url = "https://files.pythonhosted.org/packages/ed/e8/a47c64ed53149c75fb581e14a237b7b7cd18217e969c30d474d335105622/rpds_py-0.26.0-cp313-cp313-win_arm64.whl", hash = "sha256:257d011919f133a4746958257f2c75238e3ff54255acd5e3e11f3ff41fd14256", size = 222571 }, + { url = "https://files.pythonhosted.org/packages/89/bf/3d970ba2e2bcd17d2912cb42874107390f72873e38e79267224110de5e61/rpds_py-0.26.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:529c8156d7506fba5740e05da8795688f87119cce330c244519cf706a4a3d618", size = 360475 }, + { url = "https://files.pythonhosted.org/packages/82/9f/283e7e2979fc4ec2d8ecee506d5a3675fce5ed9b4b7cb387ea5d37c2f18d/rpds_py-0.26.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f53ec51f9d24e9638a40cabb95078ade8c99251945dad8d57bf4aabe86ecee35", size = 346692 }, + { url = "https://files.pythonhosted.org/packages/e3/03/7e50423c04d78daf391da3cc4330bdb97042fc192a58b186f2d5deb7befd/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab504c4d654e4a29558eaa5bb8cea5fdc1703ea60a8099ffd9c758472cf913f", size = 379415 }, + { url = "https://files.pythonhosted.org/packages/57/00/d11ee60d4d3b16808432417951c63df803afb0e0fc672b5e8d07e9edaaae/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fd0641abca296bc1a00183fe44f7fced8807ed49d501f188faa642d0e4975b83", size = 391783 }, + { url = "https://files.pythonhosted.org/packages/08/b3/1069c394d9c0d6d23c5b522e1f6546b65793a22950f6e0210adcc6f97c3e/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:69b312fecc1d017b5327afa81d4da1480f51c68810963a7336d92203dbb3d4f1", size = 512844 }, + { url = "https://files.pythonhosted.org/packages/08/3b/c4fbf0926800ed70b2c245ceca99c49f066456755f5d6eb8863c2c51e6d0/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c741107203954f6fc34d3066d213d0a0c40f7bb5aafd698fb39888af277c70d8", size = 402105 }, + { url = "https://files.pythonhosted.org/packages/1c/b0/db69b52ca07413e568dae9dc674627a22297abb144c4d6022c6d78f1e5cc/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc3e55a7db08dc9a6ed5fb7103019d2c1a38a349ac41901f9f66d7f95750942f", size = 383440 }, + { url = "https://files.pythonhosted.org/packages/4c/e1/c65255ad5b63903e56b3bb3ff9dcc3f4f5c3badde5d08c741ee03903e951/rpds_py-0.26.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9e851920caab2dbcae311fd28f4313c6953993893eb5c1bb367ec69d9a39e7ed", size = 412759 }, + { url = "https://files.pythonhosted.org/packages/e4/22/bb731077872377a93c6e93b8a9487d0406c70208985831034ccdeed39c8e/rpds_py-0.26.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:dfbf280da5f876d0b00c81f26bedce274e72a678c28845453885a9b3c22ae632", size = 556032 }, + { url = "https://files.pythonhosted.org/packages/e0/8b/393322ce7bac5c4530fb96fc79cc9ea2f83e968ff5f6e873f905c493e1c4/rpds_py-0.26.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:1cc81d14ddfa53d7f3906694d35d54d9d3f850ef8e4e99ee68bc0d1e5fed9a9c", size = 585416 }, + { url = "https://files.pythonhosted.org/packages/49/ae/769dc372211835bf759319a7aae70525c6eb523e3371842c65b7ef41c9c6/rpds_py-0.26.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dca83c498b4650a91efcf7b88d669b170256bf8017a5db6f3e06c2bf031f57e0", size = 554049 }, + { url = "https://files.pythonhosted.org/packages/6b/f9/4c43f9cc203d6ba44ce3146246cdc38619d92c7bd7bad4946a3491bd5b70/rpds_py-0.26.0-cp313-cp313t-win32.whl", hash = "sha256:4d11382bcaf12f80b51d790dee295c56a159633a8e81e6323b16e55d81ae37e9", size = 218428 }, + { url = "https://files.pythonhosted.org/packages/7e/8b/9286b7e822036a4a977f2f1e851c7345c20528dbd56b687bb67ed68a8ede/rpds_py-0.26.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ff110acded3c22c033e637dd8896e411c7d3a11289b2edf041f86663dbc791e9", size = 231524 }, + { url = "https://files.pythonhosted.org/packages/55/07/029b7c45db910c74e182de626dfdae0ad489a949d84a468465cd0ca36355/rpds_py-0.26.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:da619979df60a940cd434084355c514c25cf8eb4cf9a508510682f6c851a4f7a", size = 364292 }, + { url = "https://files.pythonhosted.org/packages/13/d1/9b3d3f986216b4d1f584878dca15ce4797aaf5d372d738974ba737bf68d6/rpds_py-0.26.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ea89a2458a1a75f87caabefe789c87539ea4e43b40f18cff526052e35bbb4fdf", size = 350334 }, + { url = "https://files.pythonhosted.org/packages/18/98/16d5e7bc9ec715fa9668731d0cf97f6b032724e61696e2db3d47aeb89214/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:feac1045b3327a45944e7dcbeb57530339f6b17baff154df51ef8b0da34c8c12", size = 384875 }, + { url = "https://files.pythonhosted.org/packages/f9/13/aa5e2b1ec5ab0e86a5c464d53514c0467bec6ba2507027d35fc81818358e/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b818a592bd69bfe437ee8368603d4a2d928c34cffcdf77c2e761a759ffd17d20", size = 399993 }, + { url = "https://files.pythonhosted.org/packages/17/03/8021810b0e97923abdbab6474c8b77c69bcb4b2c58330777df9ff69dc559/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a8b0dd8648709b62d9372fc00a57466f5fdeefed666afe3fea5a6c9539a0331", size = 516683 }, + { url = "https://files.pythonhosted.org/packages/dc/b1/da8e61c87c2f3d836954239fdbbfb477bb7b54d74974d8f6fcb34342d166/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6d3498ad0df07d81112aa6ec6c95a7e7b1ae00929fb73e7ebee0f3faaeabad2f", size = 408825 }, + { url = "https://files.pythonhosted.org/packages/38/bc/1fc173edaaa0e52c94b02a655db20697cb5fa954ad5a8e15a2c784c5cbdd/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24a4146ccb15be237fdef10f331c568e1b0e505f8c8c9ed5d67759dac58ac246", size = 387292 }, + { url = "https://files.pythonhosted.org/packages/7c/eb/3a9bb4bd90867d21916f253caf4f0d0be7098671b6715ad1cead9fe7bab9/rpds_py-0.26.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a9a63785467b2d73635957d32a4f6e73d5e4df497a16a6392fa066b753e87387", size = 420435 }, + { url = "https://files.pythonhosted.org/packages/cd/16/e066dcdb56f5632713445271a3f8d3d0b426d51ae9c0cca387799df58b02/rpds_py-0.26.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:de4ed93a8c91debfd5a047be327b7cc8b0cc6afe32a716bbbc4aedca9e2a83af", size = 562410 }, + { url = "https://files.pythonhosted.org/packages/60/22/ddbdec7eb82a0dc2e455be44c97c71c232983e21349836ce9f272e8a3c29/rpds_py-0.26.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:caf51943715b12af827696ec395bfa68f090a4c1a1d2509eb4e2cb69abbbdb33", size = 590724 }, + { url = "https://files.pythonhosted.org/packages/2c/b4/95744085e65b7187d83f2fcb0bef70716a1ea0a9e5d8f7f39a86e5d83424/rpds_py-0.26.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:4a59e5bc386de021f56337f757301b337d7ab58baa40174fb150accd480bc953", size = 558285 }, + { url = "https://files.pythonhosted.org/packages/37/37/6309a75e464d1da2559446f9c811aa4d16343cebe3dbb73701e63f760caa/rpds_py-0.26.0-cp314-cp314-win32.whl", hash = "sha256:92c8db839367ef16a662478f0a2fe13e15f2227da3c1430a782ad0f6ee009ec9", size = 223459 }, + { url = "https://files.pythonhosted.org/packages/d9/6f/8e9c11214c46098b1d1391b7e02b70bb689ab963db3b19540cba17315291/rpds_py-0.26.0-cp314-cp314-win_amd64.whl", hash = "sha256:b0afb8cdd034150d4d9f53926226ed27ad15b7f465e93d7468caaf5eafae0d37", size = 236083 }, + { url = "https://files.pythonhosted.org/packages/47/af/9c4638994dd623d51c39892edd9d08e8be8220a4b7e874fa02c2d6e91955/rpds_py-0.26.0-cp314-cp314-win_arm64.whl", hash = "sha256:ca3f059f4ba485d90c8dc75cb5ca897e15325e4e609812ce57f896607c1c0867", size = 223291 }, + { url = "https://files.pythonhosted.org/packages/4d/db/669a241144460474aab03e254326b32c42def83eb23458a10d163cb9b5ce/rpds_py-0.26.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:5afea17ab3a126006dc2f293b14ffc7ef3c85336cf451564a0515ed7648033da", size = 361445 }, + { url = "https://files.pythonhosted.org/packages/3b/2d/133f61cc5807c6c2fd086a46df0eb8f63a23f5df8306ff9f6d0fd168fecc/rpds_py-0.26.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:69f0c0a3df7fd3a7eec50a00396104bb9a843ea6d45fcc31c2d5243446ffd7a7", size = 347206 }, + { url = "https://files.pythonhosted.org/packages/05/bf/0e8fb4c05f70273469eecf82f6ccf37248558526a45321644826555db31b/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:801a71f70f9813e82d2513c9a96532551fce1e278ec0c64610992c49c04c2dad", size = 380330 }, + { url = "https://files.pythonhosted.org/packages/d4/a8/060d24185d8b24d3923322f8d0ede16df4ade226a74e747b8c7c978e3dd3/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:df52098cde6d5e02fa75c1f6244f07971773adb4a26625edd5c18fee906fa84d", size = 392254 }, + { url = "https://files.pythonhosted.org/packages/b9/7b/7c2e8a9ee3e6bc0bae26bf29f5219955ca2fbb761dca996a83f5d2f773fe/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9bc596b30f86dc6f0929499c9e574601679d0341a0108c25b9b358a042f51bca", size = 516094 }, + { url = "https://files.pythonhosted.org/packages/75/d6/f61cafbed8ba1499b9af9f1777a2a199cd888f74a96133d8833ce5eaa9c5/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9dfbe56b299cf5875b68eb6f0ebaadc9cac520a1989cac0db0765abfb3709c19", size = 402889 }, + { url = "https://files.pythonhosted.org/packages/92/19/c8ac0a8a8df2dd30cdec27f69298a5c13e9029500d6d76718130f5e5be10/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac64f4b2bdb4ea622175c9ab7cf09444e412e22c0e02e906978b3b488af5fde8", size = 384301 }, + { url = "https://files.pythonhosted.org/packages/41/e1/6b1859898bc292a9ce5776016c7312b672da00e25cec74d7beced1027286/rpds_py-0.26.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:181ef9b6bbf9845a264f9aa45c31836e9f3c1f13be565d0d010e964c661d1e2b", size = 412891 }, + { url = "https://files.pythonhosted.org/packages/ef/b9/ceb39af29913c07966a61367b3c08b4f71fad841e32c6b59a129d5974698/rpds_py-0.26.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:49028aa684c144ea502a8e847d23aed5e4c2ef7cadfa7d5eaafcb40864844b7a", size = 557044 }, + { url = "https://files.pythonhosted.org/packages/2f/27/35637b98380731a521f8ec4f3fd94e477964f04f6b2f8f7af8a2d889a4af/rpds_py-0.26.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:e5d524d68a474a9688336045bbf76cb0def88549c1b2ad9dbfec1fb7cfbe9170", size = 585774 }, + { url = "https://files.pythonhosted.org/packages/52/d9/3f0f105420fecd18551b678c9a6ce60bd23986098b252a56d35781b3e7e9/rpds_py-0.26.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:c1851f429b822831bd2edcbe0cfd12ee9ea77868f8d3daf267b189371671c80e", size = 554886 }, + { url = "https://files.pythonhosted.org/packages/6b/c5/347c056a90dc8dd9bc240a08c527315008e1b5042e7a4cf4ac027be9d38a/rpds_py-0.26.0-cp314-cp314t-win32.whl", hash = "sha256:7bdb17009696214c3b66bb3590c6d62e14ac5935e53e929bcdbc5a495987a84f", size = 219027 }, + { url = "https://files.pythonhosted.org/packages/75/04/5302cea1aa26d886d34cadbf2dc77d90d7737e576c0065f357b96dc7a1a6/rpds_py-0.26.0-cp314-cp314t-win_amd64.whl", hash = "sha256:f14440b9573a6f76b4ee4770c13f0b5921f71dde3b6fcb8dabbefd13b7fe05d7", size = 232821 }, ] [[package]] @@ -1923,35 +1923,35 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "ruamel-yaml-clib", marker = "python_full_version < '3.14' and platform_python_implementation == 'CPython'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/39/87/6da0df742a4684263261c253f00edd5829e6aca970fff69e75028cccc547/ruamel.yaml-0.18.14.tar.gz", hash = "sha256:7227b76aaec364df15936730efbf7d72b30c0b79b1d578bbb8e3dcb2d81f52b7", size = 145511, upload_time = "2025-06-09T08:51:09.828Z" } +sdist = { url = "https://files.pythonhosted.org/packages/39/87/6da0df742a4684263261c253f00edd5829e6aca970fff69e75028cccc547/ruamel.yaml-0.18.14.tar.gz", hash = "sha256:7227b76aaec364df15936730efbf7d72b30c0b79b1d578bbb8e3dcb2d81f52b7", size = 145511 } wheels = [ - { url = "https://files.pythonhosted.org/packages/af/6d/6fe4805235e193aad4aaf979160dd1f3c487c57d48b810c816e6e842171b/ruamel.yaml-0.18.14-py3-none-any.whl", hash = "sha256:710ff198bb53da66718c7db27eec4fbcc9aa6ca7204e4c1df2f282b6fe5eb6b2", size = 118570, upload_time = "2025-06-09T08:51:06.348Z" }, + { url = "https://files.pythonhosted.org/packages/af/6d/6fe4805235e193aad4aaf979160dd1f3c487c57d48b810c816e6e842171b/ruamel.yaml-0.18.14-py3-none-any.whl", hash = "sha256:710ff198bb53da66718c7db27eec4fbcc9aa6ca7204e4c1df2f282b6fe5eb6b2", size = 118570 }, ] [[package]] name = "ruamel-yaml-clib" version = "0.2.12" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/20/84/80203abff8ea4993a87d823a5f632e4d92831ef75d404c9fc78d0176d2b5/ruamel.yaml.clib-0.2.12.tar.gz", hash = "sha256:6c8fbb13ec503f99a91901ab46e0b07ae7941cd527393187039aec586fdfd36f", size = 225315, upload_time = "2024-10-20T10:10:56.22Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/48/41/e7a405afbdc26af961678474a55373e1b323605a4f5e2ddd4a80ea80f628/ruamel.yaml.clib-0.2.12-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:20b0f8dc160ba83b6dcc0e256846e1a02d044e13f7ea74a3d1d56ede4e48c632", size = 133433, upload_time = "2024-10-20T10:12:55.657Z" }, - { url = "https://files.pythonhosted.org/packages/ec/b0/b850385604334c2ce90e3ee1013bd911aedf058a934905863a6ea95e9eb4/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:943f32bc9dedb3abff9879edc134901df92cfce2c3d5c9348f172f62eb2d771d", size = 647362, upload_time = "2024-10-20T10:12:57.155Z" }, - { url = "https://files.pythonhosted.org/packages/44/d0/3f68a86e006448fb6c005aee66565b9eb89014a70c491d70c08de597f8e4/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95c3829bb364fdb8e0332c9931ecf57d9be3519241323c5274bd82f709cebc0c", size = 754118, upload_time = "2024-10-20T10:12:58.501Z" }, - { url = "https://files.pythonhosted.org/packages/52/a9/d39f3c5ada0a3bb2870d7db41901125dbe2434fa4f12ca8c5b83a42d7c53/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:749c16fcc4a2b09f28843cda5a193e0283e47454b63ec4b81eaa2242f50e4ccd", size = 706497, upload_time = "2024-10-20T10:13:00.211Z" }, - { url = "https://files.pythonhosted.org/packages/b0/fa/097e38135dadd9ac25aecf2a54be17ddf6e4c23e43d538492a90ab3d71c6/ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bf165fef1f223beae7333275156ab2022cffe255dcc51c27f066b4370da81e31", size = 698042, upload_time = "2024-10-21T11:26:46.038Z" }, - { url = "https://files.pythonhosted.org/packages/ec/d5/a659ca6f503b9379b930f13bc6b130c9f176469b73b9834296822a83a132/ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:32621c177bbf782ca5a18ba4d7af0f1082a3f6e517ac2a18b3974d4edf349680", size = 745831, upload_time = "2024-10-21T11:26:47.487Z" }, - { url = "https://files.pythonhosted.org/packages/db/5d/36619b61ffa2429eeaefaab4f3374666adf36ad8ac6330d855848d7d36fd/ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b82a7c94a498853aa0b272fd5bc67f29008da798d4f93a2f9f289feb8426a58d", size = 715692, upload_time = "2024-12-11T19:58:17.252Z" }, - { url = "https://files.pythonhosted.org/packages/b1/82/85cb92f15a4231c89b95dfe08b09eb6adca929ef7df7e17ab59902b6f589/ruamel.yaml.clib-0.2.12-cp312-cp312-win32.whl", hash = "sha256:e8c4ebfcfd57177b572e2040777b8abc537cdef58a2120e830124946aa9b42c5", size = 98777, upload_time = "2024-10-20T10:13:01.395Z" }, - { url = "https://files.pythonhosted.org/packages/d7/8f/c3654f6f1ddb75daf3922c3d8fc6005b1ab56671ad56ffb874d908bfa668/ruamel.yaml.clib-0.2.12-cp312-cp312-win_amd64.whl", hash = "sha256:0467c5965282c62203273b838ae77c0d29d7638c8a4e3a1c8bdd3602c10904e4", size = 115523, upload_time = "2024-10-20T10:13:02.768Z" }, - { url = "https://files.pythonhosted.org/packages/29/00/4864119668d71a5fa45678f380b5923ff410701565821925c69780356ffa/ruamel.yaml.clib-0.2.12-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:4c8c5d82f50bb53986a5e02d1b3092b03622c02c2eb78e29bec33fd9593bae1a", size = 132011, upload_time = "2024-10-20T10:13:04.377Z" }, - { url = "https://files.pythonhosted.org/packages/7f/5e/212f473a93ae78c669ffa0cb051e3fee1139cb2d385d2ae1653d64281507/ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux2014_aarch64.whl", hash = "sha256:e7e3736715fbf53e9be2a79eb4db68e4ed857017344d697e8b9749444ae57475", size = 642488, upload_time = "2024-10-20T10:13:05.906Z" }, - { url = "https://files.pythonhosted.org/packages/1f/8f/ecfbe2123ade605c49ef769788f79c38ddb1c8fa81e01f4dbf5cf1a44b16/ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b7e75b4965e1d4690e93021adfcecccbca7d61c7bddd8e22406ef2ff20d74ef", size = 745066, upload_time = "2024-10-20T10:13:07.26Z" }, - { url = "https://files.pythonhosted.org/packages/e2/a9/28f60726d29dfc01b8decdb385de4ced2ced9faeb37a847bd5cf26836815/ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96777d473c05ee3e5e3c3e999f5d23c6f4ec5b0c38c098b3a5229085f74236c6", size = 701785, upload_time = "2024-10-20T10:13:08.504Z" }, - { url = "https://files.pythonhosted.org/packages/84/7e/8e7ec45920daa7f76046578e4f677a3215fe8f18ee30a9cb7627a19d9b4c/ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:3bc2a80e6420ca8b7d3590791e2dfc709c88ab9152c00eeb511c9875ce5778bf", size = 693017, upload_time = "2024-10-21T11:26:48.866Z" }, - { url = "https://files.pythonhosted.org/packages/c5/b3/d650eaade4ca225f02a648321e1ab835b9d361c60d51150bac49063b83fa/ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:e188d2699864c11c36cdfdada94d781fd5d6b0071cd9c427bceb08ad3d7c70e1", size = 741270, upload_time = "2024-10-21T11:26:50.213Z" }, - { url = "https://files.pythonhosted.org/packages/87/b8/01c29b924dcbbed75cc45b30c30d565d763b9c4d540545a0eeecffb8f09c/ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4f6f3eac23941b32afccc23081e1f50612bdbe4e982012ef4f5797986828cd01", size = 709059, upload_time = "2024-12-11T19:58:18.846Z" }, - { url = "https://files.pythonhosted.org/packages/30/8c/ed73f047a73638257aa9377ad356bea4d96125b305c34a28766f4445cc0f/ruamel.yaml.clib-0.2.12-cp313-cp313-win32.whl", hash = "sha256:6442cb36270b3afb1b4951f060eccca1ce49f3d087ca1ca4563a6eb479cb3de6", size = 98583, upload_time = "2024-10-20T10:13:09.658Z" }, - { url = "https://files.pythonhosted.org/packages/b0/85/e8e751d8791564dd333d5d9a4eab0a7a115f7e349595417fd50ecae3395c/ruamel.yaml.clib-0.2.12-cp313-cp313-win_amd64.whl", hash = "sha256:e5b8daf27af0b90da7bb903a876477a9e6d7270be6146906b276605997c7e9a3", size = 115190, upload_time = "2024-10-20T10:13:10.66Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/20/84/80203abff8ea4993a87d823a5f632e4d92831ef75d404c9fc78d0176d2b5/ruamel.yaml.clib-0.2.12.tar.gz", hash = "sha256:6c8fbb13ec503f99a91901ab46e0b07ae7941cd527393187039aec586fdfd36f", size = 225315 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/48/41/e7a405afbdc26af961678474a55373e1b323605a4f5e2ddd4a80ea80f628/ruamel.yaml.clib-0.2.12-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:20b0f8dc160ba83b6dcc0e256846e1a02d044e13f7ea74a3d1d56ede4e48c632", size = 133433 }, + { url = "https://files.pythonhosted.org/packages/ec/b0/b850385604334c2ce90e3ee1013bd911aedf058a934905863a6ea95e9eb4/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:943f32bc9dedb3abff9879edc134901df92cfce2c3d5c9348f172f62eb2d771d", size = 647362 }, + { url = "https://files.pythonhosted.org/packages/44/d0/3f68a86e006448fb6c005aee66565b9eb89014a70c491d70c08de597f8e4/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95c3829bb364fdb8e0332c9931ecf57d9be3519241323c5274bd82f709cebc0c", size = 754118 }, + { url = "https://files.pythonhosted.org/packages/52/a9/d39f3c5ada0a3bb2870d7db41901125dbe2434fa4f12ca8c5b83a42d7c53/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:749c16fcc4a2b09f28843cda5a193e0283e47454b63ec4b81eaa2242f50e4ccd", size = 706497 }, + { url = "https://files.pythonhosted.org/packages/b0/fa/097e38135dadd9ac25aecf2a54be17ddf6e4c23e43d538492a90ab3d71c6/ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bf165fef1f223beae7333275156ab2022cffe255dcc51c27f066b4370da81e31", size = 698042 }, + { url = "https://files.pythonhosted.org/packages/ec/d5/a659ca6f503b9379b930f13bc6b130c9f176469b73b9834296822a83a132/ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:32621c177bbf782ca5a18ba4d7af0f1082a3f6e517ac2a18b3974d4edf349680", size = 745831 }, + { url = "https://files.pythonhosted.org/packages/db/5d/36619b61ffa2429eeaefaab4f3374666adf36ad8ac6330d855848d7d36fd/ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b82a7c94a498853aa0b272fd5bc67f29008da798d4f93a2f9f289feb8426a58d", size = 715692 }, + { url = "https://files.pythonhosted.org/packages/b1/82/85cb92f15a4231c89b95dfe08b09eb6adca929ef7df7e17ab59902b6f589/ruamel.yaml.clib-0.2.12-cp312-cp312-win32.whl", hash = "sha256:e8c4ebfcfd57177b572e2040777b8abc537cdef58a2120e830124946aa9b42c5", size = 98777 }, + { url = "https://files.pythonhosted.org/packages/d7/8f/c3654f6f1ddb75daf3922c3d8fc6005b1ab56671ad56ffb874d908bfa668/ruamel.yaml.clib-0.2.12-cp312-cp312-win_amd64.whl", hash = "sha256:0467c5965282c62203273b838ae77c0d29d7638c8a4e3a1c8bdd3602c10904e4", size = 115523 }, + { url = "https://files.pythonhosted.org/packages/29/00/4864119668d71a5fa45678f380b5923ff410701565821925c69780356ffa/ruamel.yaml.clib-0.2.12-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:4c8c5d82f50bb53986a5e02d1b3092b03622c02c2eb78e29bec33fd9593bae1a", size = 132011 }, + { url = "https://files.pythonhosted.org/packages/7f/5e/212f473a93ae78c669ffa0cb051e3fee1139cb2d385d2ae1653d64281507/ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux2014_aarch64.whl", hash = "sha256:e7e3736715fbf53e9be2a79eb4db68e4ed857017344d697e8b9749444ae57475", size = 642488 }, + { url = "https://files.pythonhosted.org/packages/1f/8f/ecfbe2123ade605c49ef769788f79c38ddb1c8fa81e01f4dbf5cf1a44b16/ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b7e75b4965e1d4690e93021adfcecccbca7d61c7bddd8e22406ef2ff20d74ef", size = 745066 }, + { url = "https://files.pythonhosted.org/packages/e2/a9/28f60726d29dfc01b8decdb385de4ced2ced9faeb37a847bd5cf26836815/ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96777d473c05ee3e5e3c3e999f5d23c6f4ec5b0c38c098b3a5229085f74236c6", size = 701785 }, + { url = "https://files.pythonhosted.org/packages/84/7e/8e7ec45920daa7f76046578e4f677a3215fe8f18ee30a9cb7627a19d9b4c/ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:3bc2a80e6420ca8b7d3590791e2dfc709c88ab9152c00eeb511c9875ce5778bf", size = 693017 }, + { url = "https://files.pythonhosted.org/packages/c5/b3/d650eaade4ca225f02a648321e1ab835b9d361c60d51150bac49063b83fa/ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:e188d2699864c11c36cdfdada94d781fd5d6b0071cd9c427bceb08ad3d7c70e1", size = 741270 }, + { url = "https://files.pythonhosted.org/packages/87/b8/01c29b924dcbbed75cc45b30c30d565d763b9c4d540545a0eeecffb8f09c/ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4f6f3eac23941b32afccc23081e1f50612bdbe4e982012ef4f5797986828cd01", size = 709059 }, + { url = "https://files.pythonhosted.org/packages/30/8c/ed73f047a73638257aa9377ad356bea4d96125b305c34a28766f4445cc0f/ruamel.yaml.clib-0.2.12-cp313-cp313-win32.whl", hash = "sha256:6442cb36270b3afb1b4951f060eccca1ce49f3d087ca1ca4563a6eb479cb3de6", size = 98583 }, + { url = "https://files.pythonhosted.org/packages/b0/85/e8e751d8791564dd333d5d9a4eab0a7a115f7e349595417fd50ecae3395c/ruamel.yaml.clib-0.2.12-cp313-cp313-win_amd64.whl", hash = "sha256:e5b8daf27af0b90da7bb903a876477a9e6d7270be6146906b276605997c7e9a3", size = 115190 }, ] [[package]] @@ -1962,54 +1962,54 @@ dependencies = [ { name = "click" }, { name = "requests" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/84/a4/b61c6e7a13b848fd985c9ed9acd525ccb1c2675e6cfa0d62292ae8015792/savepagenow-1.3.0.tar.gz", hash = "sha256:d0bc6bbe4606c700315015c3defcfab3c329208002b2b8cdc59f9b52996c6d3f", size = 42927, upload_time = "2023-07-01T13:31:49.607Z" } +sdist = { url = "https://files.pythonhosted.org/packages/84/a4/b61c6e7a13b848fd985c9ed9acd525ccb1c2675e6cfa0d62292ae8015792/savepagenow-1.3.0.tar.gz", hash = "sha256:d0bc6bbe4606c700315015c3defcfab3c329208002b2b8cdc59f9b52996c6d3f", size = 42927 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a6/8f/aea39979f8a7091ad2242a038a0e4c2b463593923ce598a914255dfba9ef/savepagenow-1.3.0-py2.py3-none-any.whl", hash = "sha256:4b0a4fff47254c160a37a20868ab53bb90da3d3f9f96086a9255b2375e39fcbf", size = 5649, upload_time = "2023-07-01T13:31:48.005Z" }, + { url = "https://files.pythonhosted.org/packages/a6/8f/aea39979f8a7091ad2242a038a0e4c2b463593923ce598a914255dfba9ef/savepagenow-1.3.0-py2.py3-none-any.whl", hash = "sha256:4b0a4fff47254c160a37a20868ab53bb90da3d3f9f96086a9255b2375e39fcbf", size = 5649 }, ] [[package]] name = "shellingham" version = "1.5.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310, upload_time = "2023-10-24T04:13:40.426Z" } +sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310 } wheels = [ - { url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755, upload_time = "2023-10-24T04:13:38.866Z" }, + { url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755 }, ] [[package]] name = "simpleeval" version = "1.0.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ff/6f/15be211749430f52f2c8f0c69158a6fc961c03aac93fa28d44d1a6f5ebc7/simpleeval-1.0.3.tar.gz", hash = "sha256:67bbf246040ac3b57c29cf048657b9cf31d4e7b9d6659684daa08ca8f1e45829", size = 24358, upload_time = "2024-11-02T10:29:46.912Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ff/6f/15be211749430f52f2c8f0c69158a6fc961c03aac93fa28d44d1a6f5ebc7/simpleeval-1.0.3.tar.gz", hash = "sha256:67bbf246040ac3b57c29cf048657b9cf31d4e7b9d6659684daa08ca8f1e45829", size = 24358 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/e9/e58082fbb8cecbb6fb4133033c40cc50c248b1a331582be3a0f39138d65b/simpleeval-1.0.3-py3-none-any.whl", hash = "sha256:e3bdbb8c82c26297c9a153902d0fd1858a6c3774bf53ff4f134788c3f2035c38", size = 15762, upload_time = "2024-11-02T10:29:45.706Z" }, + { url = "https://files.pythonhosted.org/packages/a0/e9/e58082fbb8cecbb6fb4133033c40cc50c248b1a331582be3a0f39138d65b/simpleeval-1.0.3-py3-none-any.whl", hash = "sha256:e3bdbb8c82c26297c9a153902d0fd1858a6c3774bf53ff4f134788c3f2035c38", size = 15762 }, ] [[package]] name = "six" version = "1.17.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload_time = "2024-12-04T17:35:28.174Z" } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031 } wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload_time = "2024-12-04T17:35:26.475Z" }, + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050 }, ] [[package]] name = "smmap" version = "5.0.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/44/cd/a040c4b3119bbe532e5b0732286f805445375489fceaec1f48306068ee3b/smmap-5.0.2.tar.gz", hash = "sha256:26ea65a03958fa0c8a1c7e8c7a58fdc77221b8910f6be2131affade476898ad5", size = 22329, upload_time = "2025-01-02T07:14:40.909Z" } +sdist = { url = "https://files.pythonhosted.org/packages/44/cd/a040c4b3119bbe532e5b0732286f805445375489fceaec1f48306068ee3b/smmap-5.0.2.tar.gz", hash = "sha256:26ea65a03958fa0c8a1c7e8c7a58fdc77221b8910f6be2131affade476898ad5", size = 22329 } wheels = [ - { url = "https://files.pythonhosted.org/packages/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-py3-none-any.whl", hash = "sha256:b30115f0def7d7531d22a0fb6502488d879e75b260a9db4d0819cfb25403af5e", size = 24303, upload_time = "2025-01-02T07:14:38.724Z" }, + { url = "https://files.pythonhosted.org/packages/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-py3-none-any.whl", hash = "sha256:b30115f0def7d7531d22a0fb6502488d879e75b260a9db4d0819cfb25403af5e", size = 24303 }, ] [[package]] name = "soupsieve" version = "2.7" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/3f/f4/4a80cd6ef364b2e8b65b15816a843c0980f7a5a2b4dc701fc574952aa19f/soupsieve-2.7.tar.gz", hash = "sha256:ad282f9b6926286d2ead4750552c8a6142bc4c783fd66b0293547c8fe6ae126a", size = 103418, upload_time = "2025-04-20T18:50:08.518Z" } +sdist = { url = "https://files.pythonhosted.org/packages/3f/f4/4a80cd6ef364b2e8b65b15816a843c0980f7a5a2b4dc701fc574952aa19f/soupsieve-2.7.tar.gz", hash = "sha256:ad282f9b6926286d2ead4750552c8a6142bc4c783fd66b0293547c8fe6ae126a", size = 103418 } wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/9c/0e6afc12c269578be5c0c1c9f4b49a8d32770a080260c333ac04cc1c832d/soupsieve-2.7-py3-none-any.whl", hash = "sha256:6e60cc5c1ffaf1cebcc12e8188320b72071e922c2e897f737cadce79ad5d30c4", size = 36677, upload_time = "2025-04-20T18:50:07.196Z" }, + { url = "https://files.pythonhosted.org/packages/e7/9c/0e6afc12c269578be5c0c1c9f4b49a8d32770a080260c333ac04cc1c832d/soupsieve-2.7-py3-none-any.whl", hash = "sha256:6e60cc5c1ffaf1cebcc12e8188320b72071e922c2e897f737cadce79ad5d30c4", size = 36677 }, ] [[package]] @@ -2021,18 +2021,18 @@ dependencies = [ { name = "executing" }, { name = "pure-eval" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/28/e3/55dcc2cfbc3ca9c29519eb6884dd1415ecb53b0e934862d3559ddcb7e20b/stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9", size = 44707, upload_time = "2023-09-30T13:58:05.479Z" } +sdist = { url = "https://files.pythonhosted.org/packages/28/e3/55dcc2cfbc3ca9c29519eb6884dd1415ecb53b0e934862d3559ddcb7e20b/stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9", size = 44707 } wheels = [ - { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521, upload_time = "2023-09-30T13:58:03.53Z" }, + { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521 }, ] [[package]] name = "structlog" version = "25.4.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/79/b9/6e672db4fec07349e7a8a8172c1a6ae235c58679ca29c3f86a61b5e59ff3/structlog-25.4.0.tar.gz", hash = "sha256:186cd1b0a8ae762e29417095664adf1d6a31702160a46dacb7796ea82f7409e4", size = 1369138, upload_time = "2025-06-02T08:21:12.971Z" } +sdist = { url = "https://files.pythonhosted.org/packages/79/b9/6e672db4fec07349e7a8a8172c1a6ae235c58679ca29c3f86a61b5e59ff3/structlog-25.4.0.tar.gz", hash = "sha256:186cd1b0a8ae762e29417095664adf1d6a31702160a46dacb7796ea82f7409e4", size = 1369138 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/4a/97ee6973e3a73c74c8120d59829c3861ea52210667ec3e7a16045c62b64d/structlog-25.4.0-py3-none-any.whl", hash = "sha256:fe809ff5c27e557d14e613f45ca441aabda051d119ee5a0102aaba6ce40eed2c", size = 68720, upload_time = "2025-06-02T08:21:11.43Z" }, + { url = "https://files.pythonhosted.org/packages/a0/4a/97ee6973e3a73c74c8120d59829c3861ea52210667ec3e7a16045c62b64d/structlog-25.4.0-py3-none-any.whl", hash = "sha256:fe809ff5c27e557d14e613f45ca441aabda051d119ee5a0102aaba6ce40eed2c", size = 68720 }, ] [[package]] @@ -2044,18 +2044,18 @@ dependencies = [ { name = "pyyaml" }, { name = "xlsxwriter" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/23/2d/5b5c0127e959a715c5365b3b491846fba5bc1fb7f94370cc3a4fb3f51f68/tableschema-to-template-0.0.13.tar.gz", hash = "sha256:2d8d2250efb840e0ecb9012c5e879a82ef68f65dd86bdff574200fdfc978ff1c", size = 13564, upload_time = "2023-02-01T21:53:17.238Z" } +sdist = { url = "https://files.pythonhosted.org/packages/23/2d/5b5c0127e959a715c5365b3b491846fba5bc1fb7f94370cc3a4fb3f51f68/tableschema-to-template-0.0.13.tar.gz", hash = "sha256:2d8d2250efb840e0ecb9012c5e879a82ef68f65dd86bdff574200fdfc978ff1c", size = 13564 } wheels = [ - { url = "https://files.pythonhosted.org/packages/9f/7f/3c129377d9b815c0bb92b8c24bbecabe5e6b13b831f38924f80d2e5b40b2/tableschema_to_template-0.0.13-py3-none-any.whl", hash = "sha256:4905500a4235740654230c3223629d26fdccb7a0457ec1d0110ea102c4f1146c", size = 14860, upload_time = "2023-02-01T21:53:16.02Z" }, + { url = "https://files.pythonhosted.org/packages/9f/7f/3c129377d9b815c0bb92b8c24bbecabe5e6b13b831f38924f80d2e5b40b2/tableschema_to_template-0.0.13-py3-none-any.whl", hash = "sha256:4905500a4235740654230c3223629d26fdccb7a0457ec1d0110ea102c4f1146c", size = 14860 }, ] [[package]] name = "tabulate" version = "0.9.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ec/fe/802052aecb21e3797b8f7902564ab6ea0d60ff8ca23952079064155d1ae1/tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c", size = 81090, upload_time = "2022-10-06T17:21:48.54Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ec/fe/802052aecb21e3797b8f7902564ab6ea0d60ff8ca23952079064155d1ae1/tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c", size = 81090 } wheels = [ - { url = "https://files.pythonhosted.org/packages/40/44/4a5f08c96eb108af5cb50b41f76142f0afa346dfa99d5296fe7202a11854/tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f", size = 35252, upload_time = "2022-10-06T17:21:44.262Z" }, + { url = "https://files.pythonhosted.org/packages/40/44/4a5f08c96eb108af5cb50b41f76142f0afa346dfa99d5296fe7202a11854/tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f", size = 35252 }, ] [[package]] @@ -2064,22 +2064,25 @@ source = { editable = "." } dependencies = [ { name = "frozendict" }, { name = "hdx-python-country" }, - { name = "ipykernel" }, { name = "mypy" }, { name = "pandas" }, { name = "pint" }, - { name = "pre-commit" }, { name = "pydantic" }, { name = "pydeflate" }, + { name = "requests" }, + { name = "savepagenow" }, +] + +[package.dev-dependencies] +dev = [ + { name = "ipykernel" }, + { name = "pre-commit" }, { name = "pytest" }, { name = "pytest-cov" }, { name = "pytest-xdist" }, - { name = "requests" }, { name = "reuse" }, - { name = "savepagenow" }, + { name = "technologydata" }, ] - -[package.optional-dependencies] docs = [ { name = "mkdocs-autolinks-plugin" }, { name = "mkdocs-git-revision-date-localized-plugin" }, @@ -2094,82 +2097,88 @@ docs = [ requires-dist = [ { name = "frozendict", specifier = ">=2.4.6" }, { name = "hdx-python-country", specifier = ">=3.9.6" }, - { name = "ipykernel", specifier = ">=6.29.5" }, - { name = "mkdocs-autolinks-plugin", marker = "extra == 'docs'", specifier = ">=0.7.1" }, - { name = "mkdocs-git-revision-date-localized-plugin", marker = "extra == 'docs'", specifier = ">=1.4.7" }, - { name = "mkdocs-material", marker = "extra == 'docs'", specifier = ">=9.6.14" }, - { name = "mkdocs-minify-plugin", marker = "extra == 'docs'", specifier = ">=0.8.0" }, - { name = "mkdocs-open-in-new-tab", marker = "extra == 'docs'", specifier = ">=1.0.8" }, - { name = "mkdocstrings", marker = "extra == 'docs'", specifier = ">=0.29.1" }, - { name = "mkdocstrings-python", marker = "extra == 'docs'", specifier = ">=1.16.11" }, { name = "mypy", specifier = ">=1.15.0" }, { name = "pandas", specifier = ">=2.2.3" }, { name = "pint", specifier = ">=0.24.4" }, - { name = "pre-commit", specifier = ">=4.2.0" }, { name = "pydantic", specifier = ">=2.11.7" }, { name = "pydeflate", specifier = ">=2.1.3" }, - { name = "pytest", specifier = ">=8.3.5" }, + { name = "requests", specifier = ">=2.32.3" }, + { name = "savepagenow", specifier = ">=1.3.0" }, +] + +[package.metadata.requires-dev] +dev = [ + { name = "ipykernel", specifier = ">=6.29.5" }, + { name = "pre-commit", specifier = ">=4.2.0" }, + { name = "pytest", specifier = ">=8.4.1" }, { name = "pytest-cov", specifier = ">=6.2.1" }, { name = "pytest-xdist", specifier = ">=3.8.0" }, - { name = "requests", specifier = ">=2.32.3" }, { name = "reuse", specifier = ">=5.0.2" }, - { name = "savepagenow", specifier = ">=1.3.0" }, + { name = "technologydata", editable = "." }, +] +docs = [ + { name = "mkdocs-autolinks-plugin", specifier = ">=0.7.1" }, + { name = "mkdocs-git-revision-date-localized-plugin", specifier = ">=1.4.7" }, + { name = "mkdocs-material", specifier = ">=9.6.14" }, + { name = "mkdocs-minify-plugin", specifier = ">=0.8.0" }, + { name = "mkdocs-open-in-new-tab", specifier = ">=1.0.8" }, + { name = "mkdocstrings", specifier = ">=0.29.1" }, + { name = "mkdocstrings-python", specifier = ">=1.16.11" }, ] -provides-extras = ["docs"] [[package]] name = "tenacity" version = "9.1.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0a/d4/2b0cd0fe285e14b36db076e78c93766ff1d529d70408bd1d2a5a84f1d929/tenacity-9.1.2.tar.gz", hash = "sha256:1169d376c297e7de388d18b4481760d478b0e99a777cad3a9c86e556f4b697cb", size = 48036, upload_time = "2025-04-02T08:25:09.966Z" } +sdist = { url = "https://files.pythonhosted.org/packages/0a/d4/2b0cd0fe285e14b36db076e78c93766ff1d529d70408bd1d2a5a84f1d929/tenacity-9.1.2.tar.gz", hash = "sha256:1169d376c297e7de388d18b4481760d478b0e99a777cad3a9c86e556f4b697cb", size = 48036 } wheels = [ - { url = "https://files.pythonhosted.org/packages/e5/30/643397144bfbfec6f6ef821f36f33e57d35946c44a2352d3c9f0ae847619/tenacity-9.1.2-py3-none-any.whl", hash = "sha256:f77bf36710d8b73a50b2dd155c97b870017ad21afe6ab300326b0371b3b05138", size = 28248, upload_time = "2025-04-02T08:25:07.678Z" }, + { url = "https://files.pythonhosted.org/packages/e5/30/643397144bfbfec6f6ef821f36f33e57d35946c44a2352d3c9f0ae847619/tenacity-9.1.2-py3-none-any.whl", hash = "sha256:f77bf36710d8b73a50b2dd155c97b870017ad21afe6ab300326b0371b3b05138", size = 28248 }, ] [[package]] name = "text-unidecode" version = "1.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ab/e2/e9a00f0ccb71718418230718b3d900e71a5d16e701a3dae079a21e9cd8f8/text-unidecode-1.3.tar.gz", hash = "sha256:bad6603bb14d279193107714b288be206cac565dfa49aa5b105294dd5c4aab93", size = 76885, upload_time = "2019-08-30T21:36:45.405Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ab/e2/e9a00f0ccb71718418230718b3d900e71a5d16e701a3dae079a21e9cd8f8/text-unidecode-1.3.tar.gz", hash = "sha256:bad6603bb14d279193107714b288be206cac565dfa49aa5b105294dd5c4aab93", size = 76885 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a6/a5/c0b6468d3824fe3fde30dbb5e1f687b291608f9473681bbf7dabbf5a87d7/text_unidecode-1.3-py2.py3-none-any.whl", hash = "sha256:1311f10e8b895935241623731c2ba64f4c455287888b18189350b67134a822e8", size = 78154, upload_time = "2019-08-30T21:37:03.543Z" }, + { url = "https://files.pythonhosted.org/packages/a6/a5/c0b6468d3824fe3fde30dbb5e1f687b291608f9473681bbf7dabbf5a87d7/text_unidecode-1.3-py2.py3-none-any.whl", hash = "sha256:1311f10e8b895935241623731c2ba64f4c455287888b18189350b67134a822e8", size = 78154 }, ] [[package]] name = "tomlkit" version = "0.13.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/cc/18/0bbf3884e9eaa38819ebe46a7bd25dcd56b67434402b66a58c4b8e552575/tomlkit-0.13.3.tar.gz", hash = "sha256:430cf247ee57df2b94ee3fbe588e71d362a941ebb545dec29b53961d61add2a1", size = 185207, upload_time = "2025-06-05T07:13:44.947Z" } +sdist = { url = "https://files.pythonhosted.org/packages/cc/18/0bbf3884e9eaa38819ebe46a7bd25dcd56b67434402b66a58c4b8e552575/tomlkit-0.13.3.tar.gz", hash = "sha256:430cf247ee57df2b94ee3fbe588e71d362a941ebb545dec29b53961d61add2a1", size = 185207 } wheels = [ - { url = "https://files.pythonhosted.org/packages/bd/75/8539d011f6be8e29f339c42e633aae3cb73bffa95dd0f9adec09b9c58e85/tomlkit-0.13.3-py3-none-any.whl", hash = "sha256:c89c649d79ee40629a9fda55f8ace8c6a1b42deb912b2a8fd8d942ddadb606b0", size = 38901, upload_time = "2025-06-05T07:13:43.546Z" }, + { url = "https://files.pythonhosted.org/packages/bd/75/8539d011f6be8e29f339c42e633aae3cb73bffa95dd0f9adec09b9c58e85/tomlkit-0.13.3-py3-none-any.whl", hash = "sha256:c89c649d79ee40629a9fda55f8ace8c6a1b42deb912b2a8fd8d942ddadb606b0", size = 38901 }, ] [[package]] name = "tornado" version = "6.5.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/51/89/c72771c81d25d53fe33e3dca61c233b665b2780f21820ba6fd2c6793c12b/tornado-6.5.1.tar.gz", hash = "sha256:84ceece391e8eb9b2b95578db65e920d2a61070260594819589609ba9bc6308c", size = 509934, upload_time = "2025-05-22T18:15:38.788Z" } +sdist = { url = "https://files.pythonhosted.org/packages/51/89/c72771c81d25d53fe33e3dca61c233b665b2780f21820ba6fd2c6793c12b/tornado-6.5.1.tar.gz", hash = "sha256:84ceece391e8eb9b2b95578db65e920d2a61070260594819589609ba9bc6308c", size = 509934 } wheels = [ - { url = "https://files.pythonhosted.org/packages/77/89/f4532dee6843c9e0ebc4e28d4be04c67f54f60813e4bf73d595fe7567452/tornado-6.5.1-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:d50065ba7fd11d3bd41bcad0825227cc9a95154bad83239357094c36708001f7", size = 441948, upload_time = "2025-05-22T18:15:20.862Z" }, - { url = "https://files.pythonhosted.org/packages/15/9a/557406b62cffa395d18772e0cdcf03bed2fff03b374677348eef9f6a3792/tornado-6.5.1-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:9e9ca370f717997cb85606d074b0e5b247282cf5e2e1611568b8821afe0342d6", size = 440112, upload_time = "2025-05-22T18:15:22.591Z" }, - { url = "https://files.pythonhosted.org/packages/55/82/7721b7319013a3cf881f4dffa4f60ceff07b31b394e459984e7a36dc99ec/tornado-6.5.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b77e9dfa7ed69754a54c89d82ef746398be82f749df69c4d3abe75c4d1ff4888", size = 443672, upload_time = "2025-05-22T18:15:24.027Z" }, - { url = "https://files.pythonhosted.org/packages/7d/42/d11c4376e7d101171b94e03cef0cbce43e823ed6567ceda571f54cf6e3ce/tornado-6.5.1-cp39-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:253b76040ee3bab8bcf7ba9feb136436a3787208717a1fb9f2c16b744fba7331", size = 443019, upload_time = "2025-05-22T18:15:25.735Z" }, - { url = "https://files.pythonhosted.org/packages/7d/f7/0c48ba992d875521ac761e6e04b0a1750f8150ae42ea26df1852d6a98942/tornado-6.5.1-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:308473f4cc5a76227157cdf904de33ac268af770b2c5f05ca6c1161d82fdd95e", size = 443252, upload_time = "2025-05-22T18:15:27.499Z" }, - { url = "https://files.pythonhosted.org/packages/89/46/d8d7413d11987e316df4ad42e16023cd62666a3c0dfa1518ffa30b8df06c/tornado-6.5.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:caec6314ce8a81cf69bd89909f4b633b9f523834dc1a352021775d45e51d9401", size = 443930, upload_time = "2025-05-22T18:15:29.299Z" }, - { url = "https://files.pythonhosted.org/packages/78/b2/f8049221c96a06df89bed68260e8ca94beca5ea532ffc63b1175ad31f9cc/tornado-6.5.1-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:13ce6e3396c24e2808774741331638ee6c2f50b114b97a55c5b442df65fd9692", size = 443351, upload_time = "2025-05-22T18:15:31.038Z" }, - { url = "https://files.pythonhosted.org/packages/76/ff/6a0079e65b326cc222a54720a748e04a4db246870c4da54ece4577bfa702/tornado-6.5.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:5cae6145f4cdf5ab24744526cc0f55a17d76f02c98f4cff9daa08ae9a217448a", size = 443328, upload_time = "2025-05-22T18:15:32.426Z" }, - { url = "https://files.pythonhosted.org/packages/49/18/e3f902a1d21f14035b5bc6246a8c0f51e0eef562ace3a2cea403c1fb7021/tornado-6.5.1-cp39-abi3-win32.whl", hash = "sha256:e0a36e1bc684dca10b1aa75a31df8bdfed656831489bc1e6a6ebed05dc1ec365", size = 444396, upload_time = "2025-05-22T18:15:34.205Z" }, - { url = "https://files.pythonhosted.org/packages/7b/09/6526e32bf1049ee7de3bebba81572673b19a2a8541f795d887e92af1a8bc/tornado-6.5.1-cp39-abi3-win_amd64.whl", hash = "sha256:908e7d64567cecd4c2b458075589a775063453aeb1d2a1853eedb806922f568b", size = 444840, upload_time = "2025-05-22T18:15:36.1Z" }, - { url = "https://files.pythonhosted.org/packages/55/a7/535c44c7bea4578e48281d83c615219f3ab19e6abc67625ef637c73987be/tornado-6.5.1-cp39-abi3-win_arm64.whl", hash = "sha256:02420a0eb7bf617257b9935e2b754d1b63897525d8a289c9d65690d580b4dcf7", size = 443596, upload_time = "2025-05-22T18:15:37.433Z" }, + { url = "https://files.pythonhosted.org/packages/77/89/f4532dee6843c9e0ebc4e28d4be04c67f54f60813e4bf73d595fe7567452/tornado-6.5.1-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:d50065ba7fd11d3bd41bcad0825227cc9a95154bad83239357094c36708001f7", size = 441948 }, + { url = "https://files.pythonhosted.org/packages/15/9a/557406b62cffa395d18772e0cdcf03bed2fff03b374677348eef9f6a3792/tornado-6.5.1-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:9e9ca370f717997cb85606d074b0e5b247282cf5e2e1611568b8821afe0342d6", size = 440112 }, + { url = "https://files.pythonhosted.org/packages/55/82/7721b7319013a3cf881f4dffa4f60ceff07b31b394e459984e7a36dc99ec/tornado-6.5.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b77e9dfa7ed69754a54c89d82ef746398be82f749df69c4d3abe75c4d1ff4888", size = 443672 }, + { url = "https://files.pythonhosted.org/packages/7d/42/d11c4376e7d101171b94e03cef0cbce43e823ed6567ceda571f54cf6e3ce/tornado-6.5.1-cp39-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:253b76040ee3bab8bcf7ba9feb136436a3787208717a1fb9f2c16b744fba7331", size = 443019 }, + { url = "https://files.pythonhosted.org/packages/7d/f7/0c48ba992d875521ac761e6e04b0a1750f8150ae42ea26df1852d6a98942/tornado-6.5.1-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:308473f4cc5a76227157cdf904de33ac268af770b2c5f05ca6c1161d82fdd95e", size = 443252 }, + { url = "https://files.pythonhosted.org/packages/89/46/d8d7413d11987e316df4ad42e16023cd62666a3c0dfa1518ffa30b8df06c/tornado-6.5.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:caec6314ce8a81cf69bd89909f4b633b9f523834dc1a352021775d45e51d9401", size = 443930 }, + { url = "https://files.pythonhosted.org/packages/78/b2/f8049221c96a06df89bed68260e8ca94beca5ea532ffc63b1175ad31f9cc/tornado-6.5.1-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:13ce6e3396c24e2808774741331638ee6c2f50b114b97a55c5b442df65fd9692", size = 443351 }, + { url = "https://files.pythonhosted.org/packages/76/ff/6a0079e65b326cc222a54720a748e04a4db246870c4da54ece4577bfa702/tornado-6.5.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:5cae6145f4cdf5ab24744526cc0f55a17d76f02c98f4cff9daa08ae9a217448a", size = 443328 }, + { url = "https://files.pythonhosted.org/packages/49/18/e3f902a1d21f14035b5bc6246a8c0f51e0eef562ace3a2cea403c1fb7021/tornado-6.5.1-cp39-abi3-win32.whl", hash = "sha256:e0a36e1bc684dca10b1aa75a31df8bdfed656831489bc1e6a6ebed05dc1ec365", size = 444396 }, + { url = "https://files.pythonhosted.org/packages/7b/09/6526e32bf1049ee7de3bebba81572673b19a2a8541f795d887e92af1a8bc/tornado-6.5.1-cp39-abi3-win_amd64.whl", hash = "sha256:908e7d64567cecd4c2b458075589a775063453aeb1d2a1853eedb806922f568b", size = 444840 }, + { url = "https://files.pythonhosted.org/packages/55/a7/535c44c7bea4578e48281d83c615219f3ab19e6abc67625ef637c73987be/tornado-6.5.1-cp39-abi3-win_arm64.whl", hash = "sha256:02420a0eb7bf617257b9935e2b754d1b63897525d8a289c9d65690d580b4dcf7", size = 443596 }, ] [[package]] name = "traitlets" version = "5.14.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/eb/79/72064e6a701c2183016abbbfedaba506d81e30e232a68c9f0d6f6fcd1574/traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7", size = 161621, upload_time = "2024-04-19T11:11:49.746Z" } +sdist = { url = "https://files.pythonhosted.org/packages/eb/79/72064e6a701c2183016abbbfedaba506d81e30e232a68c9f0d6f6fcd1574/traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7", size = 161621 } wheels = [ - { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359, upload_time = "2024-04-19T11:11:46.763Z" }, + { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359 }, ] [[package]] @@ -2182,18 +2191,18 @@ dependencies = [ { name = "shellingham" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c5/8c/7d682431efca5fd290017663ea4588bf6f2c6aad085c7f108c5dbc316e70/typer-0.16.0.tar.gz", hash = "sha256:af377ffaee1dbe37ae9440cb4e8f11686ea5ce4e9bae01b84ae7c63b87f1dd3b", size = 102625, upload_time = "2025-05-26T14:30:31.824Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c5/8c/7d682431efca5fd290017663ea4588bf6f2c6aad085c7f108c5dbc316e70/typer-0.16.0.tar.gz", hash = "sha256:af377ffaee1dbe37ae9440cb4e8f11686ea5ce4e9bae01b84ae7c63b87f1dd3b", size = 102625 } wheels = [ - { url = "https://files.pythonhosted.org/packages/76/42/3efaf858001d2c2913de7f354563e3a3a2f0decae3efe98427125a8f441e/typer-0.16.0-py3-none-any.whl", hash = "sha256:1f79bed11d4d02d4310e3c1b7ba594183bcedb0ac73b27a9e5f28f6fb5b98855", size = 46317, upload_time = "2025-05-26T14:30:30.523Z" }, + { url = "https://files.pythonhosted.org/packages/76/42/3efaf858001d2c2913de7f354563e3a3a2f0decae3efe98427125a8f441e/typer-0.16.0-py3-none-any.whl", hash = "sha256:1f79bed11d4d02d4310e3c1b7ba594183bcedb0ac73b27a9e5f28f6fb5b98855", size = 46317 }, ] [[package]] name = "typing-extensions" version = "4.14.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/98/5a/da40306b885cc8c09109dc2e1abd358d5684b1425678151cdaed4731c822/typing_extensions-4.14.1.tar.gz", hash = "sha256:38b39f4aeeab64884ce9f74c94263ef78f3c22467c8724005483154c26648d36", size = 107673, upload_time = "2025-07-04T13:28:34.16Z" } +sdist = { url = "https://files.pythonhosted.org/packages/98/5a/da40306b885cc8c09109dc2e1abd358d5684b1425678151cdaed4731c822/typing_extensions-4.14.1.tar.gz", hash = "sha256:38b39f4aeeab64884ce9f74c94263ef78f3c22467c8724005483154c26648d36", size = 107673 } wheels = [ - { url = "https://files.pythonhosted.org/packages/b5/00/d631e67a838026495268c2f6884f3711a15a9a2a96cd244fdaea53b823fb/typing_extensions-4.14.1-py3-none-any.whl", hash = "sha256:d1e1e3b58374dc93031d6eda2420a48ea44a36c2b4766a4fdeb3710755731d76", size = 43906, upload_time = "2025-07-04T13:28:32.743Z" }, + { url = "https://files.pythonhosted.org/packages/b5/00/d631e67a838026495268c2f6884f3711a15a9a2a96cd244fdaea53b823fb/typing_extensions-4.14.1-py3-none-any.whl", hash = "sha256:d1e1e3b58374dc93031d6eda2420a48ea44a36c2b4766a4fdeb3710755731d76", size = 43906 }, ] [[package]] @@ -2203,45 +2212,45 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f8/b1/0c11f5058406b3af7609f121aaa6b609744687f1d158b3c3a5bf4cc94238/typing_inspection-0.4.1.tar.gz", hash = "sha256:6ae134cc0203c33377d43188d4064e9b357dba58cff3185f22924610e70a9d28", size = 75726, upload_time = "2025-05-21T18:55:23.885Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f8/b1/0c11f5058406b3af7609f121aaa6b609744687f1d158b3c3a5bf4cc94238/typing_inspection-0.4.1.tar.gz", hash = "sha256:6ae134cc0203c33377d43188d4064e9b357dba58cff3185f22924610e70a9d28", size = 75726 } wheels = [ - { url = "https://files.pythonhosted.org/packages/17/69/cd203477f944c353c31bade965f880aa1061fd6bf05ded0726ca845b6ff7/typing_inspection-0.4.1-py3-none-any.whl", hash = "sha256:389055682238f53b04f7badcb49b989835495a96700ced5dab2d8feae4b26f51", size = 14552, upload_time = "2025-05-21T18:55:22.152Z" }, + { url = "https://files.pythonhosted.org/packages/17/69/cd203477f944c353c31bade965f880aa1061fd6bf05ded0726ca845b6ff7/typing_inspection-0.4.1-py3-none-any.whl", hash = "sha256:389055682238f53b04f7badcb49b989835495a96700ced5dab2d8feae4b26f51", size = 14552 }, ] [[package]] name = "tzdata" version = "2025.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/95/32/1a225d6164441be760d75c2c42e2780dc0873fe382da3e98a2e1e48361e5/tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9", size = 196380, upload_time = "2025-03-23T13:54:43.652Z" } +sdist = { url = "https://files.pythonhosted.org/packages/95/32/1a225d6164441be760d75c2c42e2780dc0873fe382da3e98a2e1e48361e5/tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9", size = 196380 } wheels = [ - { url = "https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8", size = 347839, upload_time = "2025-03-23T13:54:41.845Z" }, + { url = "https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8", size = 347839 }, ] [[package]] name = "unidecode" version = "1.4.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/94/7d/a8a765761bbc0c836e397a2e48d498305a865b70a8600fd7a942e85dcf63/Unidecode-1.4.0.tar.gz", hash = "sha256:ce35985008338b676573023acc382d62c264f307c8f7963733405add37ea2b23", size = 200149, upload_time = "2025-04-24T08:45:03.798Z" } +sdist = { url = "https://files.pythonhosted.org/packages/94/7d/a8a765761bbc0c836e397a2e48d498305a865b70a8600fd7a942e85dcf63/Unidecode-1.4.0.tar.gz", hash = "sha256:ce35985008338b676573023acc382d62c264f307c8f7963733405add37ea2b23", size = 200149 } wheels = [ - { url = "https://files.pythonhosted.org/packages/8f/b7/559f59d57d18b44c6d1250d2eeaa676e028b9c527431f5d0736478a73ba1/Unidecode-1.4.0-py3-none-any.whl", hash = "sha256:c3c7606c27503ad8d501270406e345ddb480a7b5f38827eafe4fa82a137f0021", size = 235837, upload_time = "2025-04-24T08:45:01.609Z" }, + { url = "https://files.pythonhosted.org/packages/8f/b7/559f59d57d18b44c6d1250d2eeaa676e028b9c527431f5d0736478a73ba1/Unidecode-1.4.0-py3-none-any.whl", hash = "sha256:c3c7606c27503ad8d501270406e345ddb480a7b5f38827eafe4fa82a137f0021", size = 235837 }, ] [[package]] name = "urllib3" version = "2.5.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/15/22/9ee70a2574a4f4599c47dd506532914ce044817c7752a79b6a51286319bc/urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760", size = 393185, upload_time = "2025-06-18T14:07:41.644Z" } +sdist = { url = "https://files.pythonhosted.org/packages/15/22/9ee70a2574a4f4599c47dd506532914ce044817c7752a79b6a51286319bc/urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760", size = 393185 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795, upload_time = "2025-06-18T14:07:40.39Z" }, + { url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795 }, ] [[package]] name = "validators" version = "0.35.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/53/66/a435d9ae49850b2f071f7ebd8119dd4e84872b01630d6736761e6e7fd847/validators-0.35.0.tar.gz", hash = "sha256:992d6c48a4e77c81f1b4daba10d16c3a9bb0dbb79b3a19ea847ff0928e70497a", size = 73399, upload_time = "2025-05-01T05:42:06.7Z" } +sdist = { url = "https://files.pythonhosted.org/packages/53/66/a435d9ae49850b2f071f7ebd8119dd4e84872b01630d6736761e6e7fd847/validators-0.35.0.tar.gz", hash = "sha256:992d6c48a4e77c81f1b4daba10d16c3a9bb0dbb79b3a19ea847ff0928e70497a", size = 73399 } wheels = [ - { url = "https://files.pythonhosted.org/packages/fa/6e/3e955517e22cbdd565f2f8b2e73d52528b14b8bcfdb04f62466b071de847/validators-0.35.0-py3-none-any.whl", hash = "sha256:e8c947097eae7892cb3d26868d637f79f47b4a0554bc6b80065dfe5aac3705dd", size = 44712, upload_time = "2025-05-01T05:42:04.203Z" }, + { url = "https://files.pythonhosted.org/packages/fa/6e/3e955517e22cbdd565f2f8b2e73d52528b14b8bcfdb04f62466b071de847/validators-0.35.0-py3-none-any.whl", hash = "sha256:e8c947097eae7892cb3d26868d637f79f47b4a0554bc6b80065dfe5aac3705dd", size = 44712 }, ] [[package]] @@ -2253,33 +2262,33 @@ dependencies = [ { name = "filelock" }, { name = "platformdirs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/56/2c/444f465fb2c65f40c3a104fd0c495184c4f2336d65baf398e3c75d72ea94/virtualenv-20.31.2.tar.gz", hash = "sha256:e10c0a9d02835e592521be48b332b6caee6887f332c111aa79a09b9e79efc2af", size = 6076316, upload_time = "2025-05-08T17:58:23.811Z" } +sdist = { url = "https://files.pythonhosted.org/packages/56/2c/444f465fb2c65f40c3a104fd0c495184c4f2336d65baf398e3c75d72ea94/virtualenv-20.31.2.tar.gz", hash = "sha256:e10c0a9d02835e592521be48b332b6caee6887f332c111aa79a09b9e79efc2af", size = 6076316 } wheels = [ - { url = "https://files.pythonhosted.org/packages/f3/40/b1c265d4b2b62b58576588510fc4d1fe60a86319c8de99fd8e9fec617d2c/virtualenv-20.31.2-py3-none-any.whl", hash = "sha256:36efd0d9650ee985f0cad72065001e66d49a6f24eb44d98980f630686243cf11", size = 6057982, upload_time = "2025-05-08T17:58:21.15Z" }, + { url = "https://files.pythonhosted.org/packages/f3/40/b1c265d4b2b62b58576588510fc4d1fe60a86319c8de99fd8e9fec617d2c/virtualenv-20.31.2-py3-none-any.whl", hash = "sha256:36efd0d9650ee985f0cad72065001e66d49a6f24eb44d98980f630686243cf11", size = 6057982 }, ] [[package]] name = "watchdog" version = "6.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/db/7d/7f3d619e951c88ed75c6037b246ddcf2d322812ee8ea189be89511721d54/watchdog-6.0.0.tar.gz", hash = "sha256:9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282", size = 131220, upload_time = "2024-11-01T14:07:13.037Z" } +sdist = { url = "https://files.pythonhosted.org/packages/db/7d/7f3d619e951c88ed75c6037b246ddcf2d322812ee8ea189be89511721d54/watchdog-6.0.0.tar.gz", hash = "sha256:9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282", size = 131220 } wheels = [ - { url = "https://files.pythonhosted.org/packages/39/ea/3930d07dafc9e286ed356a679aa02d777c06e9bfd1164fa7c19c288a5483/watchdog-6.0.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:bdd4e6f14b8b18c334febb9c4425a878a2ac20efd1e0b231978e7b150f92a948", size = 96471, upload_time = "2024-11-01T14:06:37.745Z" }, - { url = "https://files.pythonhosted.org/packages/12/87/48361531f70b1f87928b045df868a9fd4e253d9ae087fa4cf3f7113be363/watchdog-6.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c7c15dda13c4eb00d6fb6fc508b3c0ed88b9d5d374056b239c4ad1611125c860", size = 88449, upload_time = "2024-11-01T14:06:39.748Z" }, - { url = "https://files.pythonhosted.org/packages/5b/7e/8f322f5e600812e6f9a31b75d242631068ca8f4ef0582dd3ae6e72daecc8/watchdog-6.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6f10cb2d5902447c7d0da897e2c6768bca89174d0c6e1e30abec5421af97a5b0", size = 89054, upload_time = "2024-11-01T14:06:41.009Z" }, - { url = "https://files.pythonhosted.org/packages/68/98/b0345cabdce2041a01293ba483333582891a3bd5769b08eceb0d406056ef/watchdog-6.0.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:490ab2ef84f11129844c23fb14ecf30ef3d8a6abafd3754a6f75ca1e6654136c", size = 96480, upload_time = "2024-11-01T14:06:42.952Z" }, - { url = "https://files.pythonhosted.org/packages/85/83/cdf13902c626b28eedef7ec4f10745c52aad8a8fe7eb04ed7b1f111ca20e/watchdog-6.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:76aae96b00ae814b181bb25b1b98076d5fc84e8a53cd8885a318b42b6d3a5134", size = 88451, upload_time = "2024-11-01T14:06:45.084Z" }, - { url = "https://files.pythonhosted.org/packages/fe/c4/225c87bae08c8b9ec99030cd48ae9c4eca050a59bf5c2255853e18c87b50/watchdog-6.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a175f755fc2279e0b7312c0035d52e27211a5bc39719dd529625b1930917345b", size = 89057, upload_time = "2024-11-01T14:06:47.324Z" }, - { url = "https://files.pythonhosted.org/packages/a9/c7/ca4bf3e518cb57a686b2feb4f55a1892fd9a3dd13f470fca14e00f80ea36/watchdog-6.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7607498efa04a3542ae3e05e64da8202e58159aa1fa4acddf7678d34a35d4f13", size = 79079, upload_time = "2024-11-01T14:06:59.472Z" }, - { url = "https://files.pythonhosted.org/packages/5c/51/d46dc9332f9a647593c947b4b88e2381c8dfc0942d15b8edc0310fa4abb1/watchdog-6.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:9041567ee8953024c83343288ccc458fd0a2d811d6a0fd68c4c22609e3490379", size = 79078, upload_time = "2024-11-01T14:07:01.431Z" }, - { url = "https://files.pythonhosted.org/packages/d4/57/04edbf5e169cd318d5f07b4766fee38e825d64b6913ca157ca32d1a42267/watchdog-6.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:82dc3e3143c7e38ec49d61af98d6558288c415eac98486a5c581726e0737c00e", size = 79076, upload_time = "2024-11-01T14:07:02.568Z" }, - { url = "https://files.pythonhosted.org/packages/ab/cc/da8422b300e13cb187d2203f20b9253e91058aaf7db65b74142013478e66/watchdog-6.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:212ac9b8bf1161dc91bd09c048048a95ca3a4c4f5e5d4a7d1b1a7d5752a7f96f", size = 79077, upload_time = "2024-11-01T14:07:03.893Z" }, - { url = "https://files.pythonhosted.org/packages/2c/3b/b8964e04ae1a025c44ba8e4291f86e97fac443bca31de8bd98d3263d2fcf/watchdog-6.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:e3df4cbb9a450c6d49318f6d14f4bbc80d763fa587ba46ec86f99f9e6876bb26", size = 79078, upload_time = "2024-11-01T14:07:05.189Z" }, - { url = "https://files.pythonhosted.org/packages/62/ae/a696eb424bedff7407801c257d4b1afda455fe40821a2be430e173660e81/watchdog-6.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:2cce7cfc2008eb51feb6aab51251fd79b85d9894e98ba847408f662b3395ca3c", size = 79077, upload_time = "2024-11-01T14:07:06.376Z" }, - { url = "https://files.pythonhosted.org/packages/b5/e8/dbf020b4d98251a9860752a094d09a65e1b436ad181faf929983f697048f/watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:20ffe5b202af80ab4266dcd3e91aae72bf2da48c0d33bdb15c66658e685e94e2", size = 79078, upload_time = "2024-11-01T14:07:07.547Z" }, - { url = "https://files.pythonhosted.org/packages/07/f6/d0e5b343768e8bcb4cda79f0f2f55051bf26177ecd5651f84c07567461cf/watchdog-6.0.0-py3-none-win32.whl", hash = "sha256:07df1fdd701c5d4c8e55ef6cf55b8f0120fe1aef7ef39a1c6fc6bc2e606d517a", size = 79065, upload_time = "2024-11-01T14:07:09.525Z" }, - { url = "https://files.pythonhosted.org/packages/db/d9/c495884c6e548fce18a8f40568ff120bc3a4b7b99813081c8ac0c936fa64/watchdog-6.0.0-py3-none-win_amd64.whl", hash = "sha256:cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680", size = 79070, upload_time = "2024-11-01T14:07:10.686Z" }, - { url = "https://files.pythonhosted.org/packages/33/e8/e40370e6d74ddba47f002a32919d91310d6074130fe4e17dabcafc15cbf1/watchdog-6.0.0-py3-none-win_ia64.whl", hash = "sha256:a1914259fa9e1454315171103c6a30961236f508b9b623eae470268bbcc6a22f", size = 79067, upload_time = "2024-11-01T14:07:11.845Z" }, + { url = "https://files.pythonhosted.org/packages/39/ea/3930d07dafc9e286ed356a679aa02d777c06e9bfd1164fa7c19c288a5483/watchdog-6.0.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:bdd4e6f14b8b18c334febb9c4425a878a2ac20efd1e0b231978e7b150f92a948", size = 96471 }, + { url = "https://files.pythonhosted.org/packages/12/87/48361531f70b1f87928b045df868a9fd4e253d9ae087fa4cf3f7113be363/watchdog-6.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c7c15dda13c4eb00d6fb6fc508b3c0ed88b9d5d374056b239c4ad1611125c860", size = 88449 }, + { url = "https://files.pythonhosted.org/packages/5b/7e/8f322f5e600812e6f9a31b75d242631068ca8f4ef0582dd3ae6e72daecc8/watchdog-6.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6f10cb2d5902447c7d0da897e2c6768bca89174d0c6e1e30abec5421af97a5b0", size = 89054 }, + { url = "https://files.pythonhosted.org/packages/68/98/b0345cabdce2041a01293ba483333582891a3bd5769b08eceb0d406056ef/watchdog-6.0.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:490ab2ef84f11129844c23fb14ecf30ef3d8a6abafd3754a6f75ca1e6654136c", size = 96480 }, + { url = "https://files.pythonhosted.org/packages/85/83/cdf13902c626b28eedef7ec4f10745c52aad8a8fe7eb04ed7b1f111ca20e/watchdog-6.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:76aae96b00ae814b181bb25b1b98076d5fc84e8a53cd8885a318b42b6d3a5134", size = 88451 }, + { url = "https://files.pythonhosted.org/packages/fe/c4/225c87bae08c8b9ec99030cd48ae9c4eca050a59bf5c2255853e18c87b50/watchdog-6.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a175f755fc2279e0b7312c0035d52e27211a5bc39719dd529625b1930917345b", size = 89057 }, + { url = "https://files.pythonhosted.org/packages/a9/c7/ca4bf3e518cb57a686b2feb4f55a1892fd9a3dd13f470fca14e00f80ea36/watchdog-6.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7607498efa04a3542ae3e05e64da8202e58159aa1fa4acddf7678d34a35d4f13", size = 79079 }, + { url = "https://files.pythonhosted.org/packages/5c/51/d46dc9332f9a647593c947b4b88e2381c8dfc0942d15b8edc0310fa4abb1/watchdog-6.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:9041567ee8953024c83343288ccc458fd0a2d811d6a0fd68c4c22609e3490379", size = 79078 }, + { url = "https://files.pythonhosted.org/packages/d4/57/04edbf5e169cd318d5f07b4766fee38e825d64b6913ca157ca32d1a42267/watchdog-6.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:82dc3e3143c7e38ec49d61af98d6558288c415eac98486a5c581726e0737c00e", size = 79076 }, + { url = "https://files.pythonhosted.org/packages/ab/cc/da8422b300e13cb187d2203f20b9253e91058aaf7db65b74142013478e66/watchdog-6.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:212ac9b8bf1161dc91bd09c048048a95ca3a4c4f5e5d4a7d1b1a7d5752a7f96f", size = 79077 }, + { url = "https://files.pythonhosted.org/packages/2c/3b/b8964e04ae1a025c44ba8e4291f86e97fac443bca31de8bd98d3263d2fcf/watchdog-6.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:e3df4cbb9a450c6d49318f6d14f4bbc80d763fa587ba46ec86f99f9e6876bb26", size = 79078 }, + { url = "https://files.pythonhosted.org/packages/62/ae/a696eb424bedff7407801c257d4b1afda455fe40821a2be430e173660e81/watchdog-6.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:2cce7cfc2008eb51feb6aab51251fd79b85d9894e98ba847408f662b3395ca3c", size = 79077 }, + { url = "https://files.pythonhosted.org/packages/b5/e8/dbf020b4d98251a9860752a094d09a65e1b436ad181faf929983f697048f/watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:20ffe5b202af80ab4266dcd3e91aae72bf2da48c0d33bdb15c66658e685e94e2", size = 79078 }, + { url = "https://files.pythonhosted.org/packages/07/f6/d0e5b343768e8bcb4cda79f0f2f55051bf26177ecd5651f84c07567461cf/watchdog-6.0.0-py3-none-win32.whl", hash = "sha256:07df1fdd701c5d4c8e55ef6cf55b8f0120fe1aef7ef39a1c6fc6bc2e606d517a", size = 79065 }, + { url = "https://files.pythonhosted.org/packages/db/d9/c495884c6e548fce18a8f40568ff120bc3a4b7b99813081c8ac0c936fa64/watchdog-6.0.0-py3-none-win_amd64.whl", hash = "sha256:cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680", size = 79070 }, + { url = "https://files.pythonhosted.org/packages/33/e8/e40370e6d74ddba47f002a32919d91310d6074130fe4e17dabcafc15cbf1/watchdog-6.0.0-py3-none-win_ia64.whl", hash = "sha256:a1914259fa9e1454315171103c6a30961236f508b9b623eae470268bbcc6a22f", size = 79067 }, ] [[package]] @@ -2291,79 +2300,79 @@ dependencies = [ { name = "requests" }, { name = "tabulate" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d7/4a/f55695bd1c9f1996b675b6e9e980eef40ebdb5e4bf8774c059c31af6ade1/wbgapi-1.0.12.tar.gz", hash = "sha256:338c3c768bd120b80596b48fa0449ecabc93513ac989c55671dce579dbb3a5be", size = 33590, upload_time = "2022-07-05T15:07:22.772Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/4a/f55695bd1c9f1996b675b6e9e980eef40ebdb5e4bf8774c059c31af6ade1/wbgapi-1.0.12.tar.gz", hash = "sha256:338c3c768bd120b80596b48fa0449ecabc93513ac989c55671dce579dbb3a5be", size = 33590 } wheels = [ - { url = "https://files.pythonhosted.org/packages/00/12/224030af4886e119a3d03b709f7130e9601a4d15332e1d6a35671b25a4de/wbgapi-1.0.12-py3-none-any.whl", hash = "sha256:c5a1e1683b03d4264d287627c2562932f30e7f5c65509b812cb2e3de7d32633f", size = 36385, upload_time = "2022-07-05T15:07:20.606Z" }, + { url = "https://files.pythonhosted.org/packages/00/12/224030af4886e119a3d03b709f7130e9601a4d15332e1d6a35671b25a4de/wbgapi-1.0.12-py3-none-any.whl", hash = "sha256:c5a1e1683b03d4264d287627c2562932f30e7f5c65509b812cb2e3de7d32633f", size = 36385 }, ] [[package]] name = "wcwidth" version = "0.2.13" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6c/63/53559446a878410fc5a5974feb13d31d78d752eb18aeba59c7fef1af7598/wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5", size = 101301, upload_time = "2024-01-06T02:10:57.829Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6c/63/53559446a878410fc5a5974feb13d31d78d752eb18aeba59c7fef1af7598/wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5", size = 101301 } wheels = [ - { url = "https://files.pythonhosted.org/packages/fd/84/fd2ba7aafacbad3c4201d395674fc6348826569da3c0937e75505ead3528/wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859", size = 34166, upload_time = "2024-01-06T02:10:55.763Z" }, + { url = "https://files.pythonhosted.org/packages/fd/84/fd2ba7aafacbad3c4201d395674fc6348826569da3c0937e75505ead3528/wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859", size = 34166 }, ] [[package]] name = "wheel" version = "0.45.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8a/98/2d9906746cdc6a6ef809ae6338005b3f21bb568bea3165cfc6a243fdc25c/wheel-0.45.1.tar.gz", hash = "sha256:661e1abd9198507b1409a20c02106d9670b2576e916d58f520316666abca6729", size = 107545, upload_time = "2024-11-23T00:18:23.513Z" } +sdist = { url = "https://files.pythonhosted.org/packages/8a/98/2d9906746cdc6a6ef809ae6338005b3f21bb568bea3165cfc6a243fdc25c/wheel-0.45.1.tar.gz", hash = "sha256:661e1abd9198507b1409a20c02106d9670b2576e916d58f520316666abca6729", size = 107545 } wheels = [ - { url = "https://files.pythonhosted.org/packages/0b/2c/87f3254fd8ffd29e4c02732eee68a83a1d3c346ae39bc6822dcbcb697f2b/wheel-0.45.1-py3-none-any.whl", hash = "sha256:708e7481cc80179af0e556bbf0cc00b8444c7321e2700b8d8580231d13017248", size = 72494, upload_time = "2024-11-23T00:18:21.207Z" }, + { url = "https://files.pythonhosted.org/packages/0b/2c/87f3254fd8ffd29e4c02732eee68a83a1d3c346ae39bc6822dcbcb697f2b/wheel-0.45.1-py3-none-any.whl", hash = "sha256:708e7481cc80179af0e556bbf0cc00b8444c7321e2700b8d8580231d13017248", size = 72494 }, ] [[package]] name = "win32-setctime" version = "1.2.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b3/8f/705086c9d734d3b663af0e9bb3d4de6578d08f46b1b101c2442fd9aecaa2/win32_setctime-1.2.0.tar.gz", hash = "sha256:ae1fdf948f5640aae05c511ade119313fb6a30d7eabe25fef9764dca5873c4c0", size = 4867, upload_time = "2024-12-07T15:28:28.314Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b3/8f/705086c9d734d3b663af0e9bb3d4de6578d08f46b1b101c2442fd9aecaa2/win32_setctime-1.2.0.tar.gz", hash = "sha256:ae1fdf948f5640aae05c511ade119313fb6a30d7eabe25fef9764dca5873c4c0", size = 4867 } wheels = [ - { url = "https://files.pythonhosted.org/packages/e1/07/c6fe3ad3e685340704d314d765b7912993bcb8dc198f0e7a89382d37974b/win32_setctime-1.2.0-py3-none-any.whl", hash = "sha256:95d644c4e708aba81dc3704a116d8cbc974d70b3bdb8be1d150e36be6e9d1390", size = 4083, upload_time = "2024-12-07T15:28:26.465Z" }, + { url = "https://files.pythonhosted.org/packages/e1/07/c6fe3ad3e685340704d314d765b7912993bcb8dc198f0e7a89382d37974b/win32_setctime-1.2.0-py3-none-any.whl", hash = "sha256:95d644c4e708aba81dc3704a116d8cbc974d70b3bdb8be1d150e36be6e9d1390", size = 4083 }, ] [[package]] name = "xlrd" version = "2.0.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/07/5a/377161c2d3538d1990d7af382c79f3b2372e880b65de21b01b1a2b78691e/xlrd-2.0.2.tar.gz", hash = "sha256:08b5e25de58f21ce71dc7db3b3b8106c1fa776f3024c54e45b45b374e89234c9", size = 100167, upload_time = "2025-06-14T08:46:39.039Z" } +sdist = { url = "https://files.pythonhosted.org/packages/07/5a/377161c2d3538d1990d7af382c79f3b2372e880b65de21b01b1a2b78691e/xlrd-2.0.2.tar.gz", hash = "sha256:08b5e25de58f21ce71dc7db3b3b8106c1fa776f3024c54e45b45b374e89234c9", size = 100167 } wheels = [ - { url = "https://files.pythonhosted.org/packages/1a/62/c8d562e7766786ba6587d09c5a8ba9f718ed3fa8af7f4553e8f91c36f302/xlrd-2.0.2-py2.py3-none-any.whl", hash = "sha256:ea762c3d29f4cca48d82df517b6d89fbce4db3107f9d78713e48cd321d5c9aa9", size = 96555, upload_time = "2025-06-14T08:46:37.766Z" }, + { url = "https://files.pythonhosted.org/packages/1a/62/c8d562e7766786ba6587d09c5a8ba9f718ed3fa8af7f4553e8f91c36f302/xlrd-2.0.2-py2.py3-none-any.whl", hash = "sha256:ea762c3d29f4cca48d82df517b6d89fbce4db3107f9d78713e48cd321d5c9aa9", size = 96555 }, ] [[package]] name = "xlrd3" version = "1.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/79/db/88d8d49ddacc203956ecb98dc86c6ffeee6e933ef1f50da9b369de518f7f/xlrd3-1.1.0.tar.gz", hash = "sha256:20e6ed2e5f7f8b4ab61e30faffebceff6fab348332b4c915373f0a72742dc177", size = 58919847, upload_time = "2021-04-25T12:27:10.03Z" } +sdist = { url = "https://files.pythonhosted.org/packages/79/db/88d8d49ddacc203956ecb98dc86c6ffeee6e933ef1f50da9b369de518f7f/xlrd3-1.1.0.tar.gz", hash = "sha256:20e6ed2e5f7f8b4ab61e30faffebceff6fab348332b4c915373f0a72742dc177", size = 58919847 } wheels = [ - { url = "https://files.pythonhosted.org/packages/5d/08/fce745025e58f160e7dcb5a45d4d43eb0bd44c0d8851425be87ef90271fa/xlrd3-1.1.0-py2.py3-none-any.whl", hash = "sha256:8e8e808f938144e7936a6e07c1d57be7a0f6c6f5b37c9c67974b43246d8aacb6", size = 105268, upload_time = "2021-04-25T12:26:55.264Z" }, + { url = "https://files.pythonhosted.org/packages/5d/08/fce745025e58f160e7dcb5a45d4d43eb0bd44c0d8851425be87ef90271fa/xlrd3-1.1.0-py2.py3-none-any.whl", hash = "sha256:8e8e808f938144e7936a6e07c1d57be7a0f6c6f5b37c9c67974b43246d8aacb6", size = 105268 }, ] [[package]] name = "xlsx2csv" version = "0.8.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/36/20/94860286a308a4213581c1beacd4fc7be724250c03583fcff23aaa6107bb/xlsx2csv-0.8.4.tar.gz", hash = "sha256:2aa809888826f6af5b26c77fc7f613f2bbeada0d8cc09e5a58e0f59684bb6911", size = 221390, upload_time = "2024-11-19T17:06:07.818Z" } +sdist = { url = "https://files.pythonhosted.org/packages/36/20/94860286a308a4213581c1beacd4fc7be724250c03583fcff23aaa6107bb/xlsx2csv-0.8.4.tar.gz", hash = "sha256:2aa809888826f6af5b26c77fc7f613f2bbeada0d8cc09e5a58e0f59684bb6911", size = 221390 } wheels = [ - { url = "https://files.pythonhosted.org/packages/c4/c0/15c21556362c67f1155f3643a375d50ac67559b82c768e64e800a42a2577/xlsx2csv-0.8.4-py3-none-any.whl", hash = "sha256:52ab873fc7b2f2ca75d14aee8bd1985a9f5c1bcb3cc7b80df7a5d57a40a67473", size = 15904, upload_time = "2024-11-19T17:06:05.362Z" }, + { url = "https://files.pythonhosted.org/packages/c4/c0/15c21556362c67f1155f3643a375d50ac67559b82c768e64e800a42a2577/xlsx2csv-0.8.4-py3-none-any.whl", hash = "sha256:52ab873fc7b2f2ca75d14aee8bd1985a9f5c1bcb3cc7b80df7a5d57a40a67473", size = 15904 }, ] [[package]] name = "xlsxwriter" version = "3.2.5" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a7/47/7704bac42ac6fe1710ae099b70e6a1e68ed173ef14792b647808c357da43/xlsxwriter-3.2.5.tar.gz", hash = "sha256:7e88469d607cdc920151c0ab3ce9cf1a83992d4b7bc730c5ffdd1a12115a7dbe", size = 213306, upload_time = "2025-06-17T08:59:14.619Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a7/47/7704bac42ac6fe1710ae099b70e6a1e68ed173ef14792b647808c357da43/xlsxwriter-3.2.5.tar.gz", hash = "sha256:7e88469d607cdc920151c0ab3ce9cf1a83992d4b7bc730c5ffdd1a12115a7dbe", size = 213306 } wheels = [ - { url = "https://files.pythonhosted.org/packages/fa/34/a22e6664211f0c8879521328000bdcae9bf6dbafa94a923e531f6d5b3f73/xlsxwriter-3.2.5-py3-none-any.whl", hash = "sha256:4f4824234e1eaf9d95df9a8fe974585ff91d0f5e3d3f12ace5b71e443c1c6abd", size = 172347, upload_time = "2025-06-17T08:59:13.453Z" }, + { url = "https://files.pythonhosted.org/packages/fa/34/a22e6664211f0c8879521328000bdcae9bf6dbafa94a923e531f6d5b3f73/xlsxwriter-3.2.5-py3-none-any.whl", hash = "sha256:4f4824234e1eaf9d95df9a8fe974585ff91d0f5e3d3f12ace5b71e443c1c6abd", size = 172347 }, ] [[package]] name = "xlwt" version = "1.3.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/06/97/56a6f56ce44578a69343449aa5a0d98eefe04085d69da539f3034e2cd5c1/xlwt-1.3.0.tar.gz", hash = "sha256:c59912717a9b28f1a3c2a98fd60741014b06b043936dcecbc113eaaada156c88", size = 153929, upload_time = "2017-08-22T06:47:16.498Z" } +sdist = { url = "https://files.pythonhosted.org/packages/06/97/56a6f56ce44578a69343449aa5a0d98eefe04085d69da539f3034e2cd5c1/xlwt-1.3.0.tar.gz", hash = "sha256:c59912717a9b28f1a3c2a98fd60741014b06b043936dcecbc113eaaada156c88", size = 153929 } wheels = [ - { url = "https://files.pythonhosted.org/packages/44/48/def306413b25c3d01753603b1a222a011b8621aed27cd7f89cbc27e6b0f4/xlwt-1.3.0-py2.py3-none-any.whl", hash = "sha256:a082260524678ba48a297d922cc385f58278b8aa68741596a87de01a9c628b2e", size = 99981, upload_time = "2017-08-22T06:47:15.281Z" }, + { url = "https://files.pythonhosted.org/packages/44/48/def306413b25c3d01753603b1a222a011b8621aed27cd7f89cbc27e6b0f4/xlwt-1.3.0-py2.py3-none-any.whl", hash = "sha256:a082260524678ba48a297d922cc385f58278b8aa68741596a87de01a9c628b2e", size = 99981 }, ] From 6dcd24a3d2c30cc36f5737132cccc1158833ebaf Mon Sep 17 00:00:00 2001 From: Johannes HAMPP <42553970+euronion@users.noreply.github.com> Date: Thu, 21 Aug 2025 14:43:47 +0200 Subject: [PATCH 10/43] code: Harmonise type hints (#36) --- src/technologydata/datapackage.py | 8 +++--- src/technologydata/parameter.py | 23 ++++++++--------- src/technologydata/source.py | 24 ++++++++---------- src/technologydata/source_collection.py | 13 +++++----- src/technologydata/technology.py | 28 +++++++++------------ src/technologydata/technology_collection.py | 10 ++++---- src/technologydata/utils/commons.py | 4 +-- src/technologydata/utils/units.py | 6 ++--- 8 files changed, 54 insertions(+), 62 deletions(-) diff --git a/src/technologydata/datapackage.py b/src/technologydata/datapackage.py index ca450ff0..d52e8361 100644 --- a/src/technologydata/datapackage.py +++ b/src/technologydata/datapackage.py @@ -13,7 +13,7 @@ import logging import pathlib -import typing +from typing import Annotated, Self import pydantic @@ -36,11 +36,11 @@ class DataPackage(pydantic.BaseModel): # type: ignore """ - technologies: typing.Annotated[ + technologies: Annotated[ TechnologyCollection | None, pydantic.Field(description="List of Technology objects."), ] = None - sources: typing.Annotated[ + sources: Annotated[ SourceCollection | None, pydantic.Field(description="List of Source objects.") ] = None @@ -70,7 +70,7 @@ def get_source_collection(self) -> None: self.sources = SourceCollection(sources=list(sources_set)) @classmethod - def from_json(cls, path_to_folder: pathlib.Path | str) -> "DataPackage": + def from_json(cls, path_to_folder: pathlib.Path | str) -> Self: """ Load a DataPackage from a JSON file. diff --git a/src/technologydata/parameter.py b/src/technologydata/parameter.py index 82a747ce..338634fc 100644 --- a/src/technologydata/parameter.py +++ b/src/technologydata/parameter.py @@ -15,8 +15,7 @@ """ import logging -import typing -from typing import Annotated +from typing import Annotated, Any, Self import pint from pydantic import BaseModel, Field, PrivateAttr @@ -144,7 +143,7 @@ def _update_pint_attributes(self) -> None: else: self._pint_heating_value = None - def to(self, units: str) -> "Parameter": + def to(self, units: str) -> Self: """Convert the parameter's quantity to new units.""" self._update_pint_attributes() @@ -170,7 +169,7 @@ def to(self, units: str) -> "Parameter": def change_currency( self, to_currency: str, country: str, source: str = "worldbank" - ) -> "Parameter": + ) -> Self: """ Change the currency of the parameter. @@ -279,7 +278,7 @@ def change_currency( sources=self.sources, ) - def change_heating_value(self, to_heating_value: str) -> "Parameter": + def change_heating_value(self, to_heating_value: str) -> Self: """ Change the heating value of the parameter. @@ -373,7 +372,7 @@ def change_heating_value(self, to_heating_value: str) -> "Parameter": sources=self.sources, ) - def _check_parameter_compatibility(self, other: "Parameter") -> None: + def _check_parameter_compatibility(self, other: Self) -> None: """ Check if two parameters are compatible in terms of units, carrier, and heating value. @@ -400,7 +399,7 @@ def _check_parameter_compatibility(self, other: "Parameter") -> None: f"'{self._pint_heating_value}' and '{other._pint_heating_value}'." ) - def __add__(self, other: "Parameter") -> "Parameter": + def __add__(self, other: Self) -> Self: """ Add this Parameter to another Parameter. @@ -436,7 +435,7 @@ def __add__(self, other: "Parameter") -> "Parameter": ), ) - def __sub__(self, other: "Parameter") -> "Parameter": + def __sub__(self, other: Self) -> Self: """ Subtract another Parameter from this Parameter. @@ -471,7 +470,7 @@ def __sub__(self, other: "Parameter") -> "Parameter": ), ) - def __truediv__(self, other: "Parameter") -> "Parameter": + def __truediv__(self, other: Self) -> Self: """ Divide this Parameter by another Parameter. @@ -529,7 +528,7 @@ def __truediv__(self, other: "Parameter") -> "Parameter": ), ) - def __mul__(self, other: "Parameter") -> "Parameter": + def __mul__(self, other: Self) -> Self: """ Multiply two Parameter instances. @@ -617,7 +616,7 @@ def __eq__(self, other: object) -> bool: return False return True - def __pow__(self, exponent: float | int) -> "Parameter": + def __pow__(self, exponent: float | int) -> Self: """ Raise the parameter's value to a specified power. @@ -651,7 +650,7 @@ def __pow__(self, exponent: float | int) -> "Parameter": ) @classmethod - def from_dict(cls, data: dict[str, typing.Any]) -> "Parameter": + def from_dict(cls, data: dict[str, Any]) -> Self: """ Create an instance of the class from a dictionary. diff --git a/src/technologydata/source.py b/src/technologydata/source.py index 03911d41..c7e3643a 100644 --- a/src/technologydata/source.py +++ b/src/technologydata/source.py @@ -15,7 +15,7 @@ import logging import pathlib -import typing +from typing import Annotated, Any import pydantic import requests @@ -47,18 +47,16 @@ class Source(pydantic.BaseModel): # type: ignore """ - title: typing.Annotated[str, pydantic.Field(description="Title of the source.")] - authors: typing.Annotated[str, pydantic.Field(description="Authors of the source.")] - url: typing.Annotated[ - str | None, pydantic.Field(description="URL of the source.") - ] = None - url_archive: typing.Annotated[ - str | None, pydantic.Field(description="Archived URL.") - ] = None - url_date: typing.Annotated[ + title: Annotated[str, pydantic.Field(description="Title of the source.")] + authors: Annotated[str, pydantic.Field(description="Authors of the source.")] + url: Annotated[str | None, pydantic.Field(description="URL of the source.")] = None + url_archive: Annotated[str | None, pydantic.Field(description="Archived URL.")] = ( + None + ) + url_date: Annotated[ str | None, pydantic.Field(description="Date the URL was accessed.") ] = None - url_date_archive: typing.Annotated[ + url_date_archive: Annotated[ str | None, pydantic.Field(description="Date the URL was archived.") ] = None @@ -191,7 +189,7 @@ def ensure_in_wayback(self) -> None: @staticmethod def store_in_wayback( url_to_archive: str, - ) -> tuple[typing.Any, bool | None, str | None] | None: + ) -> tuple[Any, bool | None, str | None] | None: """ Store a snapshot of the given URL on the Wayback Machine and extract the timestamp. @@ -355,7 +353,7 @@ def _get_save_path( return None @staticmethod - def _get_content_type(url_archived: str) -> typing.Any: + def _get_content_type(url_archived: str) -> Any: """ Fetch the content type of the archived URL. diff --git a/src/technologydata/source_collection.py b/src/technologydata/source_collection.py index 702c4f96..31c4e7b4 100644 --- a/src/technologydata/source_collection.py +++ b/src/technologydata/source_collection.py @@ -8,7 +8,8 @@ import json import pathlib import re -import typing +from collections.abc import Iterator +from typing import Annotated, Any, Self import pandas import pydantic @@ -27,11 +28,11 @@ class SourceCollection(pydantic.BaseModel): # type: ignore """ - sources: typing.Annotated[ + sources: Annotated[ list[Source], pydantic.Field(description="List of Source objects.") ] - def __iter__(self) -> typing.Iterator["Source"]: + def __iter__(self) -> Iterator["Source"]: """ Return an iterator over the list of Source objects. @@ -68,7 +69,7 @@ def __str__(self) -> str: sources_str = ", ".join(str(source) for source in self.sources) return f"SourceCollection with {len(self.sources)} sources: {sources_str}" - def get(self, title: str, authors: str) -> "SourceCollection": + def get(self, title: str, authors: str) -> Self: """ Filter sources based on regex patterns for non-optional attributes. @@ -206,8 +207,8 @@ def to_json( def from_json( cls, file_path: pathlib.Path | str | None = None, - from_str: list[dict[str, typing.Any]] | None = None, - ) -> "SourceCollection": + from_str: list[dict[str, Any]] | None = None, + ) -> Self: """ Import the SourceCollection from a JSON file. diff --git a/src/technologydata/technology.py b/src/technologydata/technology.py index 2963a968..771b0e7b 100644 --- a/src/technologydata/technology.py +++ b/src/technologydata/technology.py @@ -7,7 +7,7 @@ """Technology class for representing a technology with parameters and transformation methods.""" -import typing +from typing import Annotated, Any, Self import pydantic @@ -35,17 +35,15 @@ class Technology(pydantic.BaseModel): # type: ignore """ - name: typing.Annotated[str, pydantic.Field(description="Name of the technology.")] - region: typing.Annotated[str, pydantic.Field(description="Region identifier.")] - year: typing.Annotated[int, pydantic.Field(description="Year of the data.")] - parameters: typing.Annotated[ + name: Annotated[str, pydantic.Field(description="Name of the technology.")] + region: Annotated[str, pydantic.Field(description="Region identifier.")] + year: Annotated[int, pydantic.Field(description="Year of the data.")] + parameters: Annotated[ dict[str, Parameter], pydantic.Field(default_factory=dict, description="Parameters."), ] - case: typing.Annotated[ - str, pydantic.Field(description="Case or scenario identifier.") - ] - detailed_technology: typing.Annotated[ + case: Annotated[str, pydantic.Field(description="Case or scenario identifier.")] + detailed_technology: Annotated[ str, pydantic.Field(description="Detailed technology name.") ] @@ -95,9 +93,7 @@ def check_consistency(self) -> bool: missing = [p for p in required if p not in self.parameters] return len(missing) == 0 - def calculate_parameters( - self, parameters: typing.Any | None = None - ) -> "Technology": + def calculate_parameters(self, parameters: Any | None = None) -> Self: """ Calculate missing or derived parameters. @@ -115,7 +111,7 @@ def calculate_parameters( # Placeholder: implement calculation logic as needed return self - def adjust_currency(self, target_currency: str) -> "Technology": + def adjust_currency(self, target_currency: str) -> Self: """ Adjust all currency parameters to a target currency. @@ -133,7 +129,7 @@ def adjust_currency(self, target_currency: str) -> "Technology": # Placeholder: implement currency adjustment logic return self - def adjust_region(self, target_region: str) -> "Technology": + def adjust_region(self, target_region: str) -> Self: """ Adjust technology parameters to match a different region. @@ -151,7 +147,7 @@ def adjust_region(self, target_region: str) -> "Technology": # Placeholder: implement region adjustment logic return self - def adjust_scale(self, scaling_factor: float) -> "Technology": + def adjust_scale(self, scaling_factor: float) -> Self: """ Scale parameter values by a scaling factor. @@ -170,7 +166,7 @@ def adjust_scale(self, scaling_factor: float) -> "Technology": return self @classmethod - def from_dict(cls, data: dict[str, typing.Any]) -> "Technology": + def from_dict(cls, data: dict[str, Any]) -> Self: """ Create an instance of the class from a dictionary. diff --git a/src/technologydata/technology_collection.py b/src/technologydata/technology_collection.py index 4d28dd1b..85dd3f61 100644 --- a/src/technologydata/technology_collection.py +++ b/src/technologydata/technology_collection.py @@ -8,8 +8,8 @@ import json import pathlib import re -import typing from collections.abc import Iterator +from typing import Annotated, Self import pandas import pydantic @@ -28,11 +28,11 @@ class TechnologyCollection(pydantic.BaseModel): # type: ignore """ - technologies: typing.Annotated[ + technologies: Annotated[ list[Technology], pydantic.Field(description="List of Technology objects.") ] - def __iter__(self) -> Iterator["Technology"]: + def __iter__(self) -> Iterator[Technology]: """ Return an iterator over the list of Technology objects. @@ -58,7 +58,7 @@ def __len__(self) -> int: def get( self, name: str, region: str, year: int, case: str, detailed_technology: str - ) -> "TechnologyCollection": + ) -> Self: """ Filter technologies based on regex patterns for non-optional attributes. @@ -200,7 +200,7 @@ def to_json( jsonfile.write(json_data) @classmethod - def from_json(cls, file_path: pathlib.Path | str) -> "TechnologyCollection": + def from_json(cls, file_path: pathlib.Path | str) -> Self: """ Load a TechnologyCollection instance from a JSON file. diff --git a/src/technologydata/utils/commons.py b/src/technologydata/utils/commons.py index cb9b2cf1..9e91398f 100644 --- a/src/technologydata/utils/commons.py +++ b/src/technologydata/utils/commons.py @@ -7,7 +7,7 @@ import enum import logging import re -import typing +from typing import Any import dateutil @@ -186,7 +186,7 @@ class Commons: def change_datetime_format( input_datetime_string: str, output_datetime_format: DateFormatEnum, - ) -> str | typing.Any: + ) -> str | Any: """ Change the format of a given datetime string to a specified output format. diff --git a/src/technologydata/utils/units.py b/src/technologydata/utils/units.py index 78351a6c..8e91272d 100644 --- a/src/technologydata/utils/units.py +++ b/src/technologydata/utils/units.py @@ -6,9 +6,9 @@ import json import logging import re -import typing from functools import lru_cache from pathlib import Path +from typing import Any import pandas as pd import pint @@ -312,9 +312,7 @@ def get_iso3_from_currency_code( class SpecialUnitRegistry(pint.UnitRegistry): # type: ignore """A special pint.UnitRegistry subclass that includes methods for handling currency units and conversion using pydeflate.""" - def __init__( - self, *args: tuple[typing.Any, ...], **kwargs: dict[str, typing.Any] - ) -> None: + def __init__(self, *args: tuple[Any, ...], **kwargs: dict[str, Any]) -> None: """ Initialize a SpecialUnitRegistry instance. From 1a1ae6b3bd577736b0e45303d7184623983e8387 Mon Sep 17 00:00:00 2001 From: Johannes HAMPP <42553970+euronion@users.noreply.github.com> Date: Thu, 28 Aug 2025 14:41:31 +0200 Subject: [PATCH 11/43] code: Allow parameter mul and div with scalars (#37) * code: Allow parameter mul and div with scalars * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * code: Fix missing imports * code: Fix int not allowed as scalar factor --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- src/technologydata/parameter.py | 38 ++++++++++++++++++++++++++------- test/test_parameter.py | 35 ++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+), 8 deletions(-) diff --git a/src/technologydata/parameter.py b/src/technologydata/parameter.py index 338634fc..f3748013 100644 --- a/src/technologydata/parameter.py +++ b/src/technologydata/parameter.py @@ -42,7 +42,7 @@ class Parameter(BaseModel): # type: ignore Attributes ---------- - magnitude : float + magnitude : int | float The numerical value of the parameter. units : Optional[str] The unit of the parameter. @@ -60,7 +60,7 @@ class Parameter(BaseModel): # type: ignore """ magnitude: Annotated[ - float, Field(description="The numerical value of the parameter.") + int | float, Field(description="The numerical value of the parameter.") ] units: Annotated[str | None, Field(description="The unit of the parameter.")] = None carrier: Annotated[ @@ -470,14 +470,14 @@ def __sub__(self, other: Self) -> Self: ), ) - def __truediv__(self, other: Self) -> Self: + def __truediv__(self, other: int | float | Self) -> Self: """ Divide this Parameter by another Parameter. Parameters ---------- - other : Parameter - The Parameter instance to divide by. + other : float | Parameter + A scalar or a Parameter instance to divide by. Returns ------- @@ -495,6 +495,17 @@ def __truediv__(self, other: Self) -> Self: It also handles the division of carriers and heating values if present. """ + if isinstance(other, (int | float)): + return Parameter( + magnitude=self.magnitude / other, + units=self.units, + carrier=self.carrier, + heating_value=self.heating_value, + provenance=self.provenance, + note=self.note, + sources=self.sources, + ) + # We don't check general compatibility here, as division is not a common operation for parameters. # Only ensure that the heating values are compatible. if self._pint_heating_value != other._pint_heating_value: @@ -528,14 +539,14 @@ def __truediv__(self, other: Self) -> Self: ), ) - def __mul__(self, other: Self) -> Self: + def __mul__(self, other: int | float | Self) -> Self: """ Multiply two Parameter instances. Parameters ---------- - other : Parameter - The other Parameter instance to multiply with. + other : int | float | Parameter + A scalar or a Parameter instance to multiply with. Returns ------- @@ -556,6 +567,17 @@ def __mul__(self, other: Self) -> Self: - Compatibility checks beyond heating values are not performed. """ + if isinstance(other, int | float): + return Parameter( + magnitude=self.magnitude * other, + units=self.units, + carrier=self.carrier, + heating_value=self.heating_value, + provenance=self.provenance, + note=self.note, + sources=self.sources, + ) + # We don't check general compatibility here, as multiplication is not a common operation for parameters. # Only ensure that the heating values are compatible. if self._pint_heating_value != other._pint_heating_value: diff --git a/test/test_parameter.py b/test/test_parameter.py index 30cc6da5..7c945da4 100644 --- a/test/test_parameter.py +++ b/test/test_parameter.py @@ -540,6 +540,41 @@ def test_example_parameter( """Test that the fixture example_parameter yields a parameter object.""" assert isinstance(example_parameter, technologydata.Parameter) + def test_parameter_mul_scalar(self) -> None: + """Test multiplication of a Parameter by a scalar.""" + factor = 3.0 + param = technologydata.Parameter(magnitude=2, units="kW") + result = param * factor + assert isinstance(result, technologydata.Parameter) + assert result.magnitude == param.magnitude * factor + assert result.units == param.units + + # Test multiplication by an integer + factor = int(3.0) + param = technologydata.Parameter(magnitude=2, units="kW") + result = param * factor + assert isinstance(result, technologydata.Parameter) + assert result.magnitude == param.magnitude * factor + assert result.units == param.units + + def test_parameter_div_scalar(self) -> None: + """Test division of a Parameter by a scalar.""" + # Test division by an float + divisor = 3.0 + param = technologydata.Parameter(magnitude=6, units="kW") + result = param / divisor + assert isinstance(result, technologydata.Parameter) + assert result.magnitude == param.magnitude / divisor + assert result.units == param.units + + # Test division by an integer + divisor = int(3.0) + param = technologydata.Parameter(magnitude=6, units="kW") + result = param / divisor + assert isinstance(result, technologydata.Parameter) + assert result.magnitude == param.magnitude / divisor + assert result.units == param.units + def test_parameter_pow_basic(self) -> None: """Test integer exponentiation.""" param = technologydata.Parameter(magnitude=2, units="kW") From a67d3798a02658e4ba04f349c41d526f0268dcf1 Mon Sep 17 00:00:00 2001 From: Fabrizio Finozzi <167071962+finozzifa@users.noreply.github.com> Date: Tue, 9 Sep 2025 10:01:57 +0200 Subject: [PATCH 12/43] Solve issues in test_sources.py (#40) * code: solve test issue introducing Engineering Toolbox * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- test/test_source.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/test/test_source.py b/test/test_source.py index 038dfe8f..8b0f0807 100644 --- a/test/test_source.py +++ b/test/test_source.py @@ -153,7 +153,9 @@ def test_retrieve_from_wayback(self, example_source: technologydata.Source) -> N def test_store_in_wayback(self) -> None: """Check if a given url is correctly stored as a snapshot on Internet Archive Wayback Machine.""" - url_to_archive = "https://openenergytransition.org/outputs.html" + url_to_archive = ( + "https://www.engineeringtoolbox.com/co2-emission-fuels-d_1085.html" + ) archived_info = technologydata.Source.store_in_wayback(url_to_archive) # Check if archived_info is None @@ -177,9 +179,9 @@ def test_store_in_wayback(self) -> None: "example_source", [ { - "source_title": "OET project page", - "source_authors": "Open Energy Transition gGmbH", - "source_url": "https://openenergytransition.org/outputs.html", + "source_title": "Engineering Toolbox", + "source_authors": "The Engineering ToolBox (2009). Combustion of Fuels - Carbon Dioxide Emission", + "source_url": "https://www.engineeringtoolbox.com/co2-emission-fuels-d_1085.html", }, ], indirect=["example_source"], From c1e49367a7244b8ffe4b8d0f4ce41f04a36aa936 Mon Sep 17 00:00:00 2001 From: Fabrizio Finozzi <167071962+finozzifa@users.noreply.github.com> Date: Mon, 15 Sep 2025 11:35:58 +0200 Subject: [PATCH 13/43] Issue 24: LHV and HHV (#39) * modify energy_density.py to include SourceCollection for methane * code: add natural_gas * code: add ammonia * code: add wood (dry) * add HHV for carbon * code: add HHV for lignite * code: add coal * code: add methanol * add HHV for jet A * code: add gasoline * Update src/technologydata/constants/energy_density.py Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update src/technologydata/constants/energy_density.py Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * Update src/technologydata/constants/energy_density.py Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update src/technologydata/constants/energy_density.py Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * Update src/technologydata/constants/energy_density.py Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * Update src/technologydata/constants/energy_density.py Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * Update src/technologydata/constants/energy_density.py Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * Update src/technologydata/constants/energy_density.py Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * Update src/technologydata/constants/energy_density.py Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * Update src/technologydata/constants/energy_density.py Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * Update src/technologydata/constants/energy_density.py Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * Update src/technologydata/constants/energy_density.py Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * Update src/technologydata/constants/energy_density.py Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * Update src/technologydata/constants/energy_density.py Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * Update src/technologydata/constants/energy_density.py Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * Update src/technologydata/constants/energy_density.py Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * Update src/technologydata/constants/energy_density.py Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * Update src/technologydata/constants/energy_density.py Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * Update src/technologydata/constants/energy_density.py Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * Update src/technologydata/constants/energy_density.py Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * Update src/technologydata/constants/energy_density.py Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * Update src/technologydata/constants/energy_density.py Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * Update src/technologydata/constants/energy_density.py Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * Update src/technologydata/constants/energy_density.py Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * updates to energy_density.py * code: solve unit tests in test_parameter.py * code: Fix unit test * Update src/technologydata/constants/energy_density.py Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * Update src/technologydata/utils/carriers.txt Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * Update src/technologydata/utils/carriers.txt Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> --------- Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: euronion --- .../constants/energy_density.py | 285 +++++++++++++++++- src/technologydata/utils/carriers.txt | 6 +- test/test_parameter.py | 9 +- 3 files changed, 283 insertions(+), 17 deletions(-) diff --git a/src/technologydata/constants/energy_density.py b/src/technologydata/constants/energy_density.py index 2c98b246..51b005c7 100644 --- a/src/technologydata/constants/energy_density.py +++ b/src/technologydata/constants/energy_density.py @@ -26,36 +26,299 @@ """ -from technologydata import Parameter +from technologydata import Parameter, Source, SourceCollection EnergyDensityLHV: dict[str, Parameter] = dict( hydrogen=Parameter( - magnitude=119.6, - unit="GJ/t", + magnitude=120, + units="MJ/kg", carrier="hydrogen", - # source= # TODO + sources=SourceCollection( + sources=[ + Source( + title="Higher Calorific Values of Common Fuels: Reference & Data", + authors="The Engineering ToolBox (2003)", + url="https://www.engineeringtoolbox.com/fuels-higher-calorific-values-d_169.html", + url_date="2025-09-06", + ), + ], + ), ), methane=Parameter( magnitude=50.0, - unit="GJ/t", + units="MJ/kg", carrier="methane", - # source= # TODO + sources=SourceCollection( + sources=[ + Source( + title="Higher Calorific Values of Common Fuels: Reference & Data", + authors="The Engineering ToolBox (2003)", + url="https://www.engineeringtoolbox.com/fuels-higher-calorific-values-d_169.html", + url_date="2025-09-06", + ), + ], + ), + ), + natural_gas=Parameter( + magnitude=47.1, + units="MJ/kg", + carrier="natural_gas", + note="Value for natural gas in the US market", + sources=SourceCollection( + sources=[ + Source( + title="Higher Calorific Values of Common Fuels: Reference & Data", + authors="The Engineering ToolBox (2003)", + url="https://www.engineeringtoolbox.com/fuels-higher-calorific-values-d_169.html", + url_date="2025-09-06", + ), + ], + ), + ), + ammonia=Parameter( + magnitude=18.646, + units="MJ/kg", + carrier="ammonia", + sources=SourceCollection( + sources=[ + Source( + title="Heat of combustion", + authors="Wikipedia contributors", + url="https://en.wikipedia.org/w/index.php?title=Heat_of_combustion&oldid=1307512525", + url_date="2025-09-09", + ), + ], + ), + ), + wood=Parameter( + magnitude=15.4, + units="MJ/kg", + carrier="wood", + sources=SourceCollection( + sources=[ + Source( + title="Higher Calorific Values of Common Fuels: Reference & Data", + authors="The Engineering ToolBox (2003)", + url="https://www.engineeringtoolbox.com/fuels-higher-calorific-values-d_169.html", + url_date="2025-09-06", + ), + ], + ), + ), + carbon=Parameter( + magnitude=32.8, + units="MJ/kg", + carrier="carbon", + note="For pure carbon we assume LHV=HHV", + sources=SourceCollection( + sources=[ + Source( + title="Higher Calorific Values of Common Fuels: Reference & Data", + authors="The Engineering ToolBox (2003)", + url="https://www.engineeringtoolbox.com/fuels-higher-calorific-values-d_169.html", + url_date="2025-09-06", + ), + ], + ), + ), + methanol=Parameter( + magnitude=19.9, + units="MJ/kg", + carrier="methanol", + sources=SourceCollection( + sources=[ + Source( + title="Higher Calorific Values of Common Fuels: Reference & Data", + authors="The Engineering ToolBox (2003)", + url="https://www.engineeringtoolbox.com/fuels-higher-calorific-values-d_169.html", + url_date="2025-09-06", + ), + ], + ), + ), + gasoline=Parameter( + magnitude=43.4, + units="MJ/kg", + carrier="gasoline", + sources=SourceCollection( + sources=[ + Source( + title="Higher Calorific Values of Common Fuels: Reference & Data", + authors="The Engineering ToolBox (2003)", + url="https://www.engineeringtoolbox.com/fuels-higher-calorific-values-d_169.html", + url_date="2025-09-06", + ), + ], + ), ), # Add more energy densities as needed ) EnergyDensityHHV: dict[str, Parameter] = dict( hydrogen=Parameter( - magnitude=141.8, - unit="GJ/t", + magnitude=141.7, + units="MJ/kg", carrier="hydrogen", - # source= # TODO + sources=SourceCollection( + sources=[ + Source( + title="The Engineering ToolBox", + authors="The Engineering ToolBox (2003). Higher Calorific Values of Common Fuels: Reference & Data. [online] Available at:https://www.engineeringtoolbox.com/fuels-higher-calorific-values-d_169.html [Accessed 6 September 2025].", + url="https://www.engineeringtoolbox.com/fuels-higher-calorific-values-d_169.html", + ), + ], + ), ), methane=Parameter( magnitude=55.5, - unit="GJ/t", + units="MJ/kg", carrier="methane", - # source= # TODO + sources=SourceCollection( + sources=[ + Source( + title="Higher Calorific Values of Common Fuels: Reference & Data", + authors="The Engineering ToolBox (2003)", + url="https://www.engineeringtoolbox.com/fuels-higher-calorific-values-d_169.html", + url_date="2025-09-06", + ), + ], + ), + ), + natural_gas=Parameter( + magnitude=52.2, + units="MJ/kg", + carrier="natural_gas", + note="Value for natural gas in the US market", + sources=SourceCollection( + sources=[ + Source( + title="Higher Calorific Values of Common Fuels: Reference & Data", + authors="The Engineering ToolBox (2003)", + url="https://www.engineeringtoolbox.com/fuels-higher-calorific-values-d_169.html", + url_date="2025-09-06", + ), + ], + ), + ), + ammonia=Parameter( + magnitude=22.5, + units="MJ/kg", + carrier="ammonia", + sources=SourceCollection( + sources=[ + Source( + title="Higher Calorific Values of Common Fuels: Reference & Data", + authors="The Engineering ToolBox (2003)", + url="https://www.engineeringtoolbox.com/fuels-higher-calorific-values-d_169.html", + url_date="2025-09-06", + ), + ], + ), + ), + wood=Parameter( + magnitude=16.2, + units="MJ/kg", + carrier="wood", + sources=SourceCollection( + sources=[ + Source( + title="Higher Calorific Values of Common Fuels: Reference & Data", + authors="The Engineering ToolBox (2003)", + url="https://www.engineeringtoolbox.com/fuels-higher-calorific-values-d_169.html", + url_date="2025-09-06", + ), + ], + ), + ), + carbon=Parameter( + magnitude=32.8, + units="MJ/kg", + carrier="carbon", + sources=SourceCollection( + sources=[ + Source( + title="Higher Calorific Values of Common Fuels: Reference & Data", + authors="The Engineering ToolBox (2003)", + url="https://www.engineeringtoolbox.com/fuels-higher-calorific-values-d_169.html", + url_date="2025-09-06", + ), + ], + ), + ), + lignite=Parameter( + magnitude=14.0, + units="MJ/kg", + carrier="lignite", + sources=SourceCollection( + sources=[ + Source( + title="Higher Calorific Values of Common Fuels: Reference & Data", + authors="The Engineering ToolBox (2003)", + url="https://www.engineeringtoolbox.com/fuels-higher-calorific-values-d_169.html", + url_date="2025-09-06", + ), + ], + ), + ), + coal=Parameter( + magnitude=32.6, + units="MJ/kg", + carrier="coal", + sources=SourceCollection( + sources=[ + Source( + title="Higher Calorific Values of Common Fuels: Reference & Data", + authors="The Engineering ToolBox (2003)", + url="https://www.engineeringtoolbox.com/fuels-higher-calorific-values-d_169.html", + url_date="2025-09-06", + ), + ], + ), + ), + methanol=Parameter( + magnitude=23.0, + units="MJ/kg", + carrier="methanol", + sources=SourceCollection( + sources=[ + Source( + title="Higher Calorific Values of Common Fuels: Reference & Data", + authors="The Engineering ToolBox (2003)", + url="https://www.engineeringtoolbox.com/fuels-higher-calorific-values-d_169.html", + url_date="2025-09-06", + ), + ], + ), + ), + jet_fuel_a1=Parameter( + magnitude=46.2, + units="MJ/kg", + carrier="jet_fuel_a1", + sources=SourceCollection( + sources=[ + Source( + title="Jet fuel", + authors="Wikipedia contributors", + url="https://en.wikipedia.org/w/index.php?title=Jet_fuel&oldid=1310114781", + url_date="2025-09-07", + ), + ], + ), + ), + gasoline=Parameter( + magnitude=46.4, + units="MJ/kg", + carrier="gasoline", + sources=SourceCollection( + sources=[ + Source( + title="Higher Calorific Values of Common Fuels: Reference & Data", + authors="The Engineering ToolBox (2003)", + url="https://www.engineeringtoolbox.com/fuels-higher-calorific-values-d_169.html", + url_date="2025-09-06", + ), + ], + ), ), # Add more energy densities as needed ) diff --git a/src/technologydata/utils/carriers.txt b/src/technologydata/utils/carriers.txt index 62c526e7..41108aa5 100644 --- a/src/technologydata/utils/carriers.txt +++ b/src/technologydata/utils/carriers.txt @@ -13,17 +13,21 @@ # Format: # = [] [= ] +ammonia = [ammonia] = NH3 carbon = [carbon] = C carbon_dioxide = [carbon_dioxide] = CO2 carbon_monoxide = [carbon_monoxide] = CO -coal = [coal] +coal = [coal] = anthracite = hard_coal = black_coal diesel = [diesel] +gasoline = [gasoline] = petrol jet_fuel_a1 = [jet_fuel_a1] = JETA1 electricity = [electricity] = e = el hydrogen = [hydrogen] = H2 +lignite = [lignite] methane = [methane] = CH4 methanol = [methanol] = CH3OH = MeOH natural_gas = [natural_gas] = NG nitrogen = [nitrogen] = N2 oxygen = [oxygen] = O2 water = [water] = H2O +wood = [wood] diff --git a/test/test_parameter.py b/test/test_parameter.py index 7c945da4..99ed45e2 100644 --- a/test/test_parameter.py +++ b/test/test_parameter.py @@ -642,7 +642,7 @@ def test_change_heating_value_h2_lhv_to_hhv(self) -> None: heating_value="lower_heating_value", ) p2 = p.change_heating_value("higher_heating_value") - assert pytest.approx(p2.magnitude) == 141.8 + assert pytest.approx(p2.magnitude) == 141.2278 assert p2.heating_value == "higher_heating_value" assert p2.carrier == "hydrogen" assert p2.units == "kilowatt_hour" @@ -656,7 +656,7 @@ def test_change_heating_value_h2_hhv_to_lhv(self) -> None: heating_value="higher_heating_value", ) p2 = p.change_heating_value("lower_heating_value") - assert pytest.approx(p2.magnitude) == 119.6 + assert pytest.approx(p2.magnitude) == 120.0848 assert p2.heating_value == "lower_heating_value" assert p2.carrier == "hydrogen" assert p2.units == "kilowatt_hour" @@ -694,13 +694,12 @@ def test_change_heating_value_no_carrier_in_units(self) -> None: p = technologydata.Parameter( magnitude=1, units="kilowatt_hour", - carrier="hydrogen", + carrier="electricity", heating_value="lower_heating_value", ) p2 = p.change_heating_value("higher_heating_value") - assert pytest.approx(p2.magnitude) == 1.418 / 1.196 + assert p2.magnitude == p.magnitude assert p2.heating_value == "higher_heating_value" - assert p2.carrier == "hydrogen" assert p2.units == "kilowatt_hour" def test_change_heating_value_same_hv(self) -> None: From 0d15d3e35a73d865f959b6663e28688667beaeae Mon Sep 17 00:00:00 2001 From: Fabrizio Finozzi <167071962+finozzifa@users.noreply.github.com> Date: Tue, 16 Sep 2025 11:33:51 +0200 Subject: [PATCH 14/43] skip tests that usually fail (#41) * skip tests that usually fail * code: type ignore pytest.mark.skip_test * code: change name of pytest marker * code: add automatic skip for webarchive tests * doc: modify the docstring in conftest --- test/conftest.py | 63 +++++++++++++++++++++++++++++++++++++++++++++ test/test_source.py | 3 +++ 2 files changed, 66 insertions(+) diff --git a/test/conftest.py b/test/conftest.py index 08d231e7..a1f77a9d 100644 --- a/test/conftest.py +++ b/test/conftest.py @@ -25,6 +25,69 @@ path_cwd = pathlib.Path.cwd() +def pytest_addoption(parser: pytest.Parser) -> None: + """ + Add custom command-line options to pytest. + + This function adds a custom option `--run_webarchive` to the pytest command line. + When this option is specified, it allows the execution of tests marked with the `webarchive` marker. + + Parameters + ---------- + parser : argparse.ArgumentParser + The parser object used to add custom options. + + """ + parser.addoption( + "--run_webarchive", + action="store_true", + default=False, + help="run the webarchive tests", + ) + + +def pytest_configure(config: pytest.Config) -> None: + """ + Configure pytest with custom markers. + + This function adds a custom marker `webarchive` to pytest. Tests marked with this marker + will only be run if the `--run_webarchive` option is specified. + + Parameters + ---------- + config : pytest.Config + The pytest configuration object. + + """ + config.addinivalue_line("markers", "webarchive: mark test as webarchive to run") + + +def pytest_collection_modifyitems(config: pytest.Config, items: pytest.Item) -> None: + """ + Modify the test items collection based on command-line options. + + This function modifies the collection of test items. If the `--run_webarchive` option is not specified, + it skips tests marked with the `webarchive` marker. + By default, tests marked with `webarchive` will be skipped unless the option `--run_webarchive` is provided. + This is because the CI was failing due to rate limits on anonymous capture webarchive requests using savepagenow. + For further details, see https://github.com/open-energy-transition/technology-data/pull/41. + + Parameters + ---------- + config : pytest.Config + The pytest configuration object. + items : list + The list of test items collected by pytest. + + """ + if config.getoption("--run_webarchive"): + return + skip_webarchive = pytest.mark.skip(reason="need --run_webarchive option to run") + for item in items: + if "webarchive" in item.keywords: + item.add_marker(skip_webarchive) + + def create_source_from_params(params: dict[str, str]) -> technologydata.Source: """ Create a Source object from a parameter dictionary with validation. diff --git a/test/test_source.py b/test/test_source.py index 8b0f0807..5522cf13 100644 --- a/test/test_source.py +++ b/test/test_source.py @@ -114,6 +114,7 @@ def test_str( # Ensure the snapshot is created assert str(example_source) == expected_string + @pytest.mark.webarchive # type: ignore @pytest.mark.parametrize( "example_source", [ @@ -151,6 +152,7 @@ def test_retrieve_from_wayback(self, example_source: technologydata.Source) -> N # Delete the downloaded file storage_path.unlink(missing_ok=True) + @pytest.mark.webarchive # type: ignore def test_store_in_wayback(self) -> None: """Check if a given url is correctly stored as a snapshot on Internet Archive Wayback Machine.""" url_to_archive = ( @@ -175,6 +177,7 @@ def test_store_in_wayback(self) -> None: except ValueError: pytest.fail("Valid date-time string did not match the format") + @pytest.mark.webarchive # type: ignore @pytest.mark.parametrize( "example_source", [ From 9c6aadc99e11456ccd9660e0075d51ff45f5dc59 Mon Sep 17 00:00:00 2001 From: Fabrizio Finozzi <167071962+finozzifa@users.noreply.github.com> Date: Tue, 16 Sep 2025 11:38:47 +0200 Subject: [PATCH 15/43] Prototype documentation - v1 (#38) * doc: first draft of doc * new updates to docs * new update on docs * docs: update the contributing.md * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * extend doc and rename files * add linter for markdown * managed to exclude docs from mypy * Update docs/home/license.md Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * Update docs/home/license.md Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * Update docs/design.md Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * Update docs/faq.md Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * doc: delete overrides/main.html * docs: remove api folder and its content * doc: update to documentation * re-work REUSE.toml * update logo * docs: update REUSE.toml, minor typos * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> --- .codespell.ignore | 1 + .github/instructions/copilot-instructions.md | 5 +- .pre-commit-config.yaml | 9 +- .readthedocs.yaml | 24 + REUSE.toml | 4 +- docs/assets/extensions/dynamic_inspect.py | 32 + docs/assets/javascripts/matjax.js | 21 + docs/assets/javascripts/readthedocs.js | 24 + docs/assets/logo/technology_data_logo.png | Bin 0 -> 501579 bytes docs/assets/overrides/hooks/shortcodes.py | 274 ++ docs/assets/stylesheets/extra.css | 60 + docs/contributing.md | 35 - docs/contributing/CODE_OF_CONDUCT.md | 136 + docs/contributing/contributors.md | 8 + docs/contributing/instructions.md | 188 ++ docs/home/citing.md | 3 + docs/home/contacts.md | 7 + docs/home/faq.md | 26 + docs/home/installation.md | 21 + docs/home/license.md | 26 + docs/home/release-notes.md | 9 + docs/home/users.md | 19 + docs/index.md | 6 + docs/{ => user_guide}/class-diagram.puml | 0 docs/{ => user_guide}/design.md | 144 +- docs/{ => user_guide}/parameter.md | 6 +- mkdocs.yaml | 175 ++ pyproject.toml | 18 +- uv.lock | 2361 ++++++++++++------ 29 files changed, 2745 insertions(+), 897 deletions(-) create mode 100644 .readthedocs.yaml create mode 100644 docs/assets/extensions/dynamic_inspect.py create mode 100644 docs/assets/javascripts/matjax.js create mode 100644 docs/assets/javascripts/readthedocs.js create mode 100644 docs/assets/logo/technology_data_logo.png create mode 100644 docs/assets/overrides/hooks/shortcodes.py create mode 100644 docs/assets/stylesheets/extra.css delete mode 100644 docs/contributing.md create mode 100644 docs/contributing/CODE_OF_CONDUCT.md create mode 100644 docs/contributing/contributors.md create mode 100644 docs/contributing/instructions.md create mode 100644 docs/home/citing.md create mode 100644 docs/home/contacts.md create mode 100644 docs/home/faq.md create mode 100644 docs/home/installation.md create mode 100644 docs/home/license.md create mode 100644 docs/home/release-notes.md create mode 100644 docs/home/users.md create mode 100644 docs/index.md rename docs/{ => user_guide}/class-diagram.puml (100%) rename docs/{ => user_guide}/design.md (76%) rename docs/{ => user_guide}/parameter.md (100%) create mode 100644 mkdocs.yaml diff --git a/.codespell.ignore b/.codespell.ignore index cf2749ba..a292ceee 100644 --- a/.codespell.ignore +++ b/.codespell.ignore @@ -1,3 +1,4 @@ # SPDX-FileCopyrightText: The technology-data authors # # SPDX-License-Identifier: MIT +CAF diff --git a/.github/instructions/copilot-instructions.md b/.github/instructions/copilot-instructions.md index a7a7955a..2d93e54e 100644 --- a/.github/instructions/copilot-instructions.md +++ b/.github/instructions/copilot-instructions.md @@ -1,10 +1,11 @@ +# Copilot Coding Agent Instructions for `technologydata` + -# Copilot Coding Agent Instructions for `technologydata` +--> ## Project Overview - `technologydata` is a Python package for energy system modellers to screen, harmonize, and transform techno-economic input data for energy system models. diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 60665819..30c759f0 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -18,7 +18,7 @@ repos: # Ruff: Python linter and formatter - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.11.8 + rev: v0.12.10 hooks: - id: ruff args: [--fix] @@ -53,6 +53,7 @@ repos: - id: mypy args: [--strict, --ignore-missing-imports, --config-file=pyproject.toml] additional_dependencies: [tokenize-rt==3.2.0] + exclude: ^docs/ # Pyupgrade: Automatically upgrades Python syntax - repo: https://github.com/asottile/pyupgrade @@ -66,3 +67,9 @@ repos: rev: v5.0.2 hooks: - id: reuse + +- repo: https://github.com/rvben/rumdl-pre-commit + rev: v0.0.99 # Use the latest release tag + hooks: + - id: rumdl + args: ["--fix", "--disable=MD013, MD024, MD030"] diff --git a/.readthedocs.yaml b/.readthedocs.yaml new file mode 100644 index 00000000..0906dd5c --- /dev/null +++ b/.readthedocs.yaml @@ -0,0 +1,24 @@ +version: 2 + +build: + os: ubuntu-24.04 + tools: + python: "3.13" + jobs: + pre_system_dependencies: + - git fetch --unshallow # Needed to get version tags + pre_install: + - pip install mkdocs-material + +mkdocs: + configuration: mkdocs.yaml + # fail_on_warning: true # TODO: Enable + +python: + install: + - method: pip + path: . + extra_requirements: + - docs + - dev + - cartopy diff --git a/REUSE.toml b/REUSE.toml index 79009ed1..4633211e 100644 --- a/REUSE.toml +++ b/REUSE.toml @@ -4,12 +4,12 @@ SPDX-PackageSupplier = "The technology-data authors" SPDX-PackageDownloadLocation = "https://github.com/pypsa/technology-data" [[annotations]] -path = ["uv.lock"] +path = ["uv.lock", "*.yaml", "docs/**",] SPDX-FileCopyrightText = "The technology-data authors" SPDX-License-Identifier = "MIT" [[annotations]] -path = ["test/test_data/*/*", "test/test_data/*/*/*"] +path = ["test/test_data/**",] SPDX-FileCopyrightText = "The technology-data authors" SPDX-License-Identifier = "CC-BY-4.0" diff --git a/docs/assets/extensions/dynamic_inspect.py b/docs/assets/extensions/dynamic_inspect.py new file mode 100644 index 00000000..da077055 --- /dev/null +++ b/docs/assets/extensions/dynamic_inspect.py @@ -0,0 +1,32 @@ +""" +Retrieve docstrings from runtime objects instead of static analysis (default). + +See https://mkdocstrings.github.io/griffe/guide/users/how-to/selectively-inspect/ +""" + +import griffe + +logger = griffe.get_logger("griffe_inspect_specific_objects") + + +class InspectSpecificObjects(griffe.Extension): + """An extension to inspect just a few specific objects.""" + + def __init__(self, objects: list[str]) -> None: + self.objects = objects + + def on_instance(self, *, obj: griffe.Object) -> None: + if obj.path not in self.objects: + return + logger.info("Using InspectSpecificObjects for %s", obj.path) + + try: + runtime_obj = griffe.dynamic_import(obj.path) + except ImportError as error: + logger.warning("Could not import %s: %s", obj.path, error) + return + + if obj.docstring: + obj.docstring.value = runtime_obj.__doc__ + else: + obj.docstring = griffe.Docstring(runtime_obj.__doc__) diff --git a/docs/assets/javascripts/matjax.js b/docs/assets/javascripts/matjax.js new file mode 100644 index 00000000..c20d5fdb --- /dev/null +++ b/docs/assets/javascripts/matjax.js @@ -0,0 +1,21 @@ +window.MathJax = { + tex: { + inlineMath: [["\\(", "\\)"]], + displayMath: [["\\[", "\\]"]], + processEscapes: true, + processEnvironments: true + }, + options: { + ignoreHtmlClass: ".*|", + processHtmlClass: "arithmatex" + } + }; + + document$.subscribe(() => { + + + MathJax.startup.output.clearCache() + MathJax.typesetClear() + MathJax.texReset() + MathJax.typesetPromise() + }) diff --git a/docs/assets/javascripts/readthedocs.js b/docs/assets/javascripts/readthedocs.js new file mode 100644 index 00000000..8036eaba --- /dev/null +++ b/docs/assets/javascripts/readthedocs.js @@ -0,0 +1,24 @@ +// Use CustomEvent to generate the version selector +document.addEventListener( + "readthedocs-addons-data-ready", + function (event) { + const config = event.detail.data(); + const versioning = ` +
+ + + +
`; + + document.querySelector(".md-header__topic").insertAdjacentHTML("beforeend", versioning); + }); diff --git a/docs/assets/logo/technology_data_logo.png b/docs/assets/logo/technology_data_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..32d9a3119bd13f39aa4ea301cd90f0198ecfd96f GIT binary patch literal 501579 zcmV(-K-|BHP)imiPb)g$F4r|NZa(WkyxRpTFbJkMaGe|Ni`y z@ALQP&nJI=eShBN?_b@h@BcK=zv-5*;iD_Rzy5q(H{2oDr5l`1zMiYc^j%DYsS)VD zDBbh*{O7N#`tx6&KOKCXyhgg|@7gz-ug%I@jbwL6AK%x1T6lwxxZO5iXclqn{qrQy z_x)-4zNysv>J7jC%r;soBc!jr^X|6*^;IF?l5Eg1 zTK>8`W_fQ`q@tU5y5*GBmoUp6p)UAQ?wI+1GSm0!JEbwV?D`=%z~7F*)Id zM*W)=R?*Vd@bZoJHQpmn4Y)<#qcSL@pl{sQpAW3N#ZTi*{8MeJeU1Ibj8yp5PqLp} z(_Av_Ta%B#iLd0t?yM3U<(o##`@BxYO$PYqhCdKE)h3Xr&y)Q`aG$vHCa7Bz!kVS^ zu|EMG;boj?#Gl5&O!3bk?(`g|t?p~*ATtEz8*_}^0O+3XH@y$nLhRv|zOH4zY%jo) z?8xd*KwptRYI#PTVuH_n8p$a&&cp({{qxhQdo8jkLA=1BNi;C;)c66vxiEo*Xra4( z^x0Hqcz|Q$^tBOkn)?nW;D19ADu|1Eo=tUO+nZ?tn z5+i(l+IP9P<}nfG4>a3UFokXwAGt=+EcEWm4-hwd3a#eKx$GP4ZD`oCP_krk{z$K3 zHR7)6tb2bGDVbWr)inf`%>DCh5P3d@%fgzv)YzKO$1FEM52hpY2x-#pyKPngmTs#F ztUPLLUaEh6*XZyAqQ+PrPAl~_pW`1N=Y6g&t=0EOK?dSXjj5p&GuWWzKU4en`}<;r zwE>XsphRz}+pCtTZzK|?m%SY4? zH>C%IwHjgF`sbP&nE}0@8tZlBp`kqeUk&HY>sscw5uYQBNGaW7s>^t=pPtyWj%#n5 z_^CIYF9>Uo03bSGS#2E$01|=8?S*2JMf1#G$aiG_ znn06cg(L-uLfF|>^#TY|W*AJEd0IbGK|HzG@|;nMGQ#pOF!j%@~gu_T`F9 zv*W6kR)V5x{!{dAW00|b?)6K`4fb0tV z9f3K@PH6c*23x<`r=p^`gptauKHCk<>oK;uK$MB+%p>vEP$|Nj8TVN4k58&bsHEO; z^#RG>cUSY`Vzg*;Z$%%Oka}-Gohm!@0wP?|LB=vSit5p~KdjTt_;sz+~X_F z&^-?JqA5%@A?{p8^(J$2Y^+T`NDl>1qCMGhj=gx!I75B$ldkd!46V3qi54^r#sVr1 z97DQ@anpB4s!G%{AYByBgE^M6UJTWUO56G4q|>1c+>$vV+6sMMHKuTzM|43TLq(>Y z0R@b5j|ReNtE5gABR>mRofhcA`$?*NxZrB%myb$9KNLeC_xc&rMbBpffwsw4CbNc7 zPRi@G9+NqCAd(1JMSyf9FdVYS65=9W?Bx4knmh1+5smTia z*VhISSfU%LaVi*+>||NhkpQAg)0MzH5}JAS{BJ$YC;_ac~tqcmnJO zcEP+(kZ=H+BB@$K%z?n28M;=~V|lVT7QIaV1-Awv*7;fjRIk%pph5IjCf*4(zB^Bt zEt)&ZU%CgZjB==mT1vUf<5#$djYQZt3$2S;s1^bshnNcfEb!)lfByMD%2A%gRKf)= z0>W-Poh?nlhgPLZg$C4-RFrO|3yg3_ElM`)QB`Wy7JySnBDkcWFmw7mLfsQcKiyuK ze;gFo>e5!i7plK{fR3PYE}9#@i?3UvXf^ycWhGGOGL7!;lCgq#ymU@WGO?Ue$dAlJ zg`b8|cA3)H9UWoY_osfQoFg42A%n2MXUcZ&s&t~6RQq!+@aW+9yp*OW+fp-X3#?@p z9!0qlj7I*LqYI}XNJ3)3UC`_ndIBezjf4{coPKp9++IP1q|5` zBC%EeRf^j78@*t6r%gKpgc&kHOHeSX?)OP2DOc9306PU8FJHKWUP=rYwL0Q4;%wRz zCWlywEMdmDX`qYVj5$3)nRKZ_Q8PB1YoQP#ZHu@j>D{1^bG4S^q5ljWj%uQ-A*JGu zLaH~Ww>nrO9T4(;Pk3K|Nil^k&6abiGAQOwWP~qU#a6s4;(R4D)rCjrWg-Ymar9Cn z>wNZHw#URh!iwe@>p|;Qre5Qyf%Qig7Y88Jw<-RS(@iizCu!SR*f2&XO=-X_2atqv z%MPgQs`}km--xS3r@DDfYqBnrubiB;Ej%3v57ZnY>Ug9FFH6l zFZ$T(nm&6)YbgE4i^y8YrkrHTl{WF+=mkhL0PCXdOISDv*yG66YyK=)L!-Tr&9|(tid&E*O%*!`sa4*3zhcZm9R^wNLe~^upF}e!ij;f%0W3WJMZx|K_k)?)T0d zp$iS;>E7juutCcUeEtVlE=6eA2;%6^u z<5Var!6F4mlq(}w#S>SC;1CVCX)2M5B<}RH#w3G;=gz`H%085_=M=TxG6LCr zR`DB^a59+ppQYtwDWGCR_muNf-EAS*-X8xKS+v|rPsqx^thIH~@f~qDd;|TGpeWVu zWuI%Ze40ArCx~xe6TK~tCf@F?o)~n>E~+I62StmkwRGQXl5P^q#zV`?(mae!8Fh&9 zaq~&rsLG{JJC__-XhYqBGc8P@GEF>ARR;HVs{#^{kr6*ijaY`A?NW$RcYIzHn!!X< zjd?QG2eZYk+bQ`h$znNuDjts!h)c}-a<=BOnPJy$Pdj)G*G1^w6r{Pnp&kP_M^LW; z4Y?PDq)J)VAKE-l7QP;i#YDDWZ@r|!lC%AT5?p)X=Q>&iN-ITq34J#buB0Yy6$o8! zPBOKH&Qu-^s;a6%yfsaB1b!Etlyc=yqC<@oMH7Pb`dFj;MUo_7-OHhd@ODqI=dVWT zSeNZ7d(gQd7nsqHd2v#b)u2EUQ;}tTGBCTiEFv6$s@EVPd#FI z-~}Yf&UMk-4MGR|m#={vE13HPqY7auF}8=69LXwP6wy`iWU(qRC;U_8U*TvQoC!%u zV>fe_b;>ByG7pEuhLb>^YgcT~tn=BTx^=`g@-h%v!a)nAX7pm7Jpt1FHqsIDz|&P8 z2AhfqNMCOqhK<({9$;aGaBNtH3ZlIPnjhHpj3qS0v?%yOC(Q~|$w9sdzEJGpUcwJK z%JKkIFqV}l2~(uniJkdZ14lk@Ro!cuctIRh(WyP)4^J54nv5YuXiW&Ux#+_d0p~4P z^=2-;H|2R!1wZ#U-Z9Be2UewP5FM}nGlR5WC5VW*tOQn|E4J+`^JQ@I4n&|_o4)9p1pvY9$i%pK3GO%YUs9CLhK zDnn5|iMNxbP`1$GkT73^@9SksD6^q*Mct}gO4>&$t+pq~vG(pSrdh96{boZ5N03<- z0lf9Cc}jHntL9%*@w@YiQA$bj7iFI~$);8KC3dkR!VzW=KU%rzCBdX(} z*GgsDxnp)_9a<)zl6jF3>u>#*rapOu&smiGQ2QqEo2g=7hi!R)W#T_mBhb3vF=Yi|WfMb!A^2;sEk3Q99j@r4FXXc<=wI@w9PtgIZ7 zj+a)11ZHKxs!k3Ebr*Fa%6B#Q(8+ zkkcA0LP#{9%$Yp0)MwkX5?)jL#1x>)Rg{jJZyPH?tNKJS#~qLV&$VWV;ec%m6$&KX zt5k-Ee7hd*A2P zOp{?(vaZn5IL-;Uy6ua8Sx-?!S3d~@n~HVC!=WK1((kNj_*76 ziO=I^tI=%LsPHtaI=Ntr4#Olw_!`!-T57pcS$=6dbjcs3?LT^T!B0_)Fk(0Whu#~% z?)Y@qPfHkYn6XE{uecpuum4X;lT_VZNoM#i0|{8%Gg_$V923{c;RzoEStAq7wc6h;<$sVu1>4Zfsu!R+DeW` zv8DC>a;%O}0&?F{>g!TJeYItW&DR+$5!NEpv|8Is`w@yE{}(;7lR8zwR|N(Py2{Xk zdR+fX2<;}TV*otM6LCvD*?WOlrSYI9*u2Li3&k#KOY3$*hF3IJv`uc)8QO7hDOa3b z2MoNIZgwf9{TQ_YCq3Gh@gQ}Ayw0w7@(&?qfxp#Nm~JiAj+rihp$$QaElK#k%lfs$biud=q%Vi(BIxC7M?q&e24D)Gq>fgQ3%Nx%6_M{?wvYo^>pnqcF6^wd zm`Gm!$A@U=2X&g^Sp~w5omN^IfjeHw>lD_BeKkYmitYpnO`8RQuOLBYQmS$BD|FYg z$#F?NakKyi+Vmf_X!k!5Mb$MRS~1N)j2}AV+*`58skciC3cy!x#iMIJOPob$!>&sb zKV0Q(k;S_R(~8(ku@>w4A`4-JnD*L{fh5;SdRLCB0oCOVqW7twko)1$0PfI^qG+gR zjXaEwy%HU&A&mN5O zsN<(bYf)9W@7Zcu@X`BL1bdDh=f8F?Zc^D))?Z?BFtzhG_+%@*w?(y)2_rCu%_mcf zbWyHMELKmYw%&9ootWOBMV&yisHQOaO{!|s!7J{k+4#HtOo*OchER|&S*c-QofuWb zO4@~B5p^)4r~v3?c+9FPOwK-kG-^k~G0gJgQ;ns5@S{$E-YM*Uh z{Yc0x8Zk!EacQx#%#DRH>9z~Ir?!R{U^G!9;Ev*ywTxt1WQtpHqNQ?AQ&SQ%yvh8B zTB4MCkrX-IkN2d^TK!B(xy1k#wTwkI!_&J&+1H_3U1CcaPN1E7wqSdM*ug%?^;4cA zw_)NS*=|uXaSY^-@9{-gMk=G|)_Tuq5Uo1KD+JoJjY6Rm zr@LtO7F(}Go>r2R6*2O2z-0`j2&OBagpXv&xxla0-8;!*`!i*ZxpEBhauj7!iMKaUG z_k?xZ96O%{HYcV5J-Em5h4R_yJkoFpuqKAnf`q^-##mJo;)r35D*wMboVrQZhd}(0 ztYBe|*#Z|)7sFhsO)S3^IxEhs*%+4YL)F2RPPav@R4CQYPY^(_-E7*I976umOsszR zfDpl>beP7jYiB)7f{BvE$Ix~`dex`Hky@ckTd9K8ay5g@N;{JUrj=ecH|D?p{8wR5 z(vEZ^&!bkVt8w8}y_2d`UI=>8x;CPf@`RS(DFfB=fBpJ2Cv7BY>DvfGgdm-aPfVxn znsTRIHowGx3i4Bc5T>12KbUhoJYA4ZKJ4JqvQK2TI`z1NOmO&sl0bsD!8M=Q$^A*R z*$(4FfwuHU5D?`Uekf2JG02!<_)A!)!ie-IkEGd3!Hojkl@zS}JNJ{WJ;febvDttj z&+yETX5aKE@fZ_qz`Wxu(ELa)!y)*agB~+4szMF=QyqlCtK}O>&RuTM&2O-M5V6X^ z)kjr04^yW}U?7xws$gh2(kZ`4=_0_?DvJ(!XPCYaStj$WX)DW7Y8qEig}TEMf74Ko zP#%`H6bRD1nc%D=hnFcnNpbYYvR$j$nrpDxDchn7dlr)x<1}W&0L!%FGOj%Jv9TY6 zjh|uU%f^mlkd?{Kg=MV zDz?(2+E&JO z*h~sIJZ13m4QHsaq&lXVkkjccG+EQ|vLQ710tg*$jym^+o<@w| zoh@;GYYu56|E7774e3aQi{*AUJ!2`*HX8CjXBeykr|`Wz0AbKlUD_ z7H^CA)b@TYKjmW~BA4TTRVR~zyKStHu|AJjBQMfZkVg3q1A!U?o;Ol^3MZ9Z$^tW{ z7BOBvKv1`P5kL*RV6k`03q0E|zArfnn0z;2G!14lYOx@}da!5?7;5OOoWyFv3X9xm z5r96R^je=vp(j|ZXysfd_1`kzw-uPwOIH7viNvtO&JQ@dX<4+@$P7{XlZ)oAOnVj4 z#_aADLh1$y$SQqwWYeZ*1uK5}Iyf3>jrkC>)$iyHsLra3=zRf=47`oExTICz)&lldV#7iZKk^~2W5hpJi z88#S_%&v5dUjegKO9?59E_QlE0$)P|rHWD+Gb(7t`ks0B>D0!WK*6Zf*8zfgacO8WXH|g-KG{HQwhA6a=*r})tVlXEPIC6 z&w;h5ORFI&bU%W*3RN5^A?V^5?Cb&!Mm3NHfy`DhPrJQ`Qx4)-FWi6{sz%z>5$r6> zb7Ta5zmCa4J3{P9d@Iz3ayVE64$;eHHWusSa^BU*kdZ9^#@Kiwxd-BoHjzl8(3|S-*<4$ z(ZFqC_dT@c62UOv2c=Wa^d2|AE)MP|H7Kckf_k|})081(?+~FUdbC3aqjOeO0mIcw z?#q#AVuNMDPxk4n(Z0rVCnYp1UM)z3f|(Us1?1S<_=t#A6)E10qN6iie-jD)M-!l8 zM=hlRA)|Kf;CjZXOk7a8UEwHY@X}2!{NaW9rq38T!P4#}!qHaaSb#9E2NkjYUqhsU zH_t~up;L`0v5honQx5_#?H$0y960$~H~GIP*GYeJu?1o1u#CzcUn=FWyrVoA;9J7b zso6Id3=Vh%#hlfC7-6Nrw*jH#po>K*kATTkP#RQ(kS<((e@-ejvoSnnbjdd%t^$Eb zWV5DJc*Df&5RW_KuOis=XL;%(x!yJXfIw42%Pq$r`Qsd2zIxXjy#!;#+#M7ZF#Hi= z;PW;wAR-V~8}2rLI_>%)g*tjjENWm-p9Hbg001BWNkl5D?Swq9x(LGk zmr-23+US2wsYaD)JPlY_n^06pj`Mtk&K1_1_|kzC0GzmLxuf4}V!@0CIwew#M#<{` zR6sra^#h>lVV>EqWwKZfPcIeC{27&U#p2GIH}(X$NUW^%f)`}Z_G?YG3Wl06xIdqA zugnn%X$EWP(u@TXG#PFbc!#=OC@k3V!8tKx#5ZEt|n%7k2ZtOM`$E ziyE5vaodX6Ory4iO#yMIdNlHpTeZnIV4-qTc7_4%6x!9b$pbE<&NOEv!f5FNEI$kB zhho(D-{uLJ<~7~ZxG}`VBg7(5F)lX7e|GNjK4#+h0e2=0CF*^i`Xrp#20I=h5l0xE zud;odY|J+Auq_&w4l_FZI9XHK3=pIeHFz2qt4!16&cVmdX6+BB1wgyn2X04a3WbwHwB1%OBc@MNUNJ|2FgHQrhJ@C*-~ZI%d~^=)@^nEipegfM(=KUS<=^TS*P$^v4%0P159C zF>iJ}GocBoG3TigbzplLKJ5>OI*S>nMjQm7xN7>ZN7-pu*P4ZArR>(82yM-Pg?AE&6FP5MI1y%B?U~d0QkjF@NA1 zaq%yTIh4Ol;-j=D6p8~WSgn(Dv7u)@9bMbYJXNh?F7$Q zxZL(pY<9p#ggMn_9BHWBVFk7huLxTI4Fwhiovx&&jWdSN(2qE3rGWBDHWEBaDB?)g zqj#91%+{NJ<_NHvZqKgkhJlmjg2bvqciOI!hLFDau4Yf^e zH*6_E+CAV#{z0lOWlZ4j@VZ>1Qx+p{;0;7Ar3XX~%S}R-!dx^Ujy76eHkR^iL6ew{ zImn|a4#LeQe0Iir1<}6%_jgeNf{+ZJ$}U(;4+>YXmyL!s*!O99%B{RQF`DY4l(N$r zOxGMH<2C&>a&vFVPa>m2Md`|=T#KMf1ogmWt~Wu-k3r9)1IKu#`$hLgt0abI9Q;~snEEd*TX)-wn&}a zF^L2;(Ufw!BBs$Y;s*2?gORJxb0!{G&*unUEjd5mZ+=hssUS@*j>O;M+s$c$fXe@V zI_u}acQxJx`f`rrEUzMlVT7k0s{1SyubX8O+6RuUuD(IaF9swx#9p*Mbf9EQ^EN%pc?ykvd|-12GO9xfS7o1 zfLx@Jq6LYAin*zsU_o4RJX2dtcxIwRXtP8bil$^IOw~7J{R}kOsiWSDXT88G2b46a zGyuNq&-XY%npPwL_ojrqch%^558<=AhWc0H+R_FX{l+wJJ{@8v1%Br9??3;SE3hLK zt*+j}zyKQqEBO%ZntDvoxFNIEpRhI=~6a&QI_ zHVhZCRy0*f7(HU^AScbJBP`Ic9?;o_yvzuTBXini;pwX4b2 z(&?qs>ceF=x&%NwkS64GzGH7F8R*r!i+sXRv)0IoI(=6ANo3B+!xixZQFl>8Wrbp- zGwY8SiUp7lKZ8ClaBZ~23GcTf^ZxVUe?sYABHkTdiV%ztJ@|stv&lmiROWX|=ogH} zP*5RvOa?Jz@;aYWa7}2+p{jw~Tk?QLY)ZC^$K+Tcrolr-=$u)+277a~IZF$U`;R$y z&pYsy0)m}S%cFP3sk5$^%@YOQ;Gl8)|dJTDS`Ax@51pV#S%BMm7>mDQ|r; z;oxt?vq}Ty!H)f+*HTsG`{stC#e4Mld%g+slrHNLn6p-c&?Q3|hhszWROx+1H#y@A z+l+7dHMPa;wk%omj^}%(3Fint+DG)>v8+Q}bCz!x`CE|U6DbsDTMn-Jl52NX51~gz z{8WxDo1}y!9~qRm1{J_Yn9%|d#wyvqX79fp{$nhe^Wa&$Me5tTGBGu8UaNk8DK6Z8 z*vZ5Z=^+WS17*!7kRn^s6#LuIKEM1aYZG!g$dIv9Bb@L)H5A-NhFfNXUe`?rDv}BN zRtO;U`Xk0IJ0l#$1d*8tEavKWLzbyUg{*C58VDGd*Dl95p^>Zr4Y`K0&{x*M1k;QN z$O*d}209U@SWn^oymE8)y3lvF0>2fr(uOf*bVW*FR{s86>#?MR?GGm3w4CP*EZAi6 z92K2}k*lXm%#hYKk``inhxltmF+wOUv~E;O0RSBzIImu@q5@x|>nsG|CQ@!+G{KWV zAYF*&mVWz@q?Zam9ec{M)q3& zm3tDQYS)+#4SN|RFtsPb_p*VoHw+>ha!X&VyyV(IUrYk*^uqjZ5n+6euu4*=s zbQ|(nO%`)+ksLDk3JHg){FUpgq~P?ag(=lAT>Ck(f^g*dHYdWz-xY_tP*bIt)?PCR z2K$raAY}O*qeyzcIja$J9?SRwc9dk&@d?+5jOe}5q0;VaibSa-x6?f@y@MBD;yT6a zj$mL0KCJfY$~pB7fn2`JekH+Szr(A|<8x^hBad3_uK?5*~Zq z`Vo~bt=q$tOi=}(V~5s*jO{VV(+EnYeiP-|WwA4NS$OzKs=zHbfA#q|)c*7W`i?a~ zeLvixH*M$geBT%j=_ZLb#gQnIfgw)Ya#2d2;>^fmRUNS#Qnzrlk?oF3@A1Y|l`I9E zRzJO;K~6fAc64ulleE+mC?*TEwR(!|b3ph4ra76kvfuX`ezy*j56ef>hZWla9jZ05 zQ81AWknY%JFy*pLOnrb?Ih-dq-rl0jdK%}>S^-1bJP`Sj3u%`Ogeu#N5nP*GHgiwf)fb5=0Klt`6m&1h2kA8s1Zgg9uUQsnS;Bq zwQ3O9xmd4lX8>AnEte|gSx#X=)dcB6T!FOFVldbz%j;MPSauzQMc|&Krpl{+V5{ZE zk#`cFj!lG?b-u}URa;vCqgU)~#@*G$iIho8kZX1t?BV5Fm{LHi{yJFNP85&)t_c4g zi`(1BC(h>ilK0v1vXoPqCumqd@VC&Q|E)p|DpOfry*?X$%lp=m{ISM3!Jk-E0-W3w zQ_N{22{S9^s-C3|56vJX3xc?@B9J0slTi)=q(fYsoqj}xsM%-XYhS}vh9HGc_ zN^g#H^p~e`8VxeZEnBbN9;@4(734_RGzE3`S zC1a7X=qlAuZ+BLhzAee&@P0)ESZQxlG?>UOY=oj3G7ZM8!(xPu<|Niq|3PF1L zoMIcp$_XKcIfMOL)uvN8QMU8MdEu84Yv_n@9QrHkq*fG6`@ydCA1FpsNmqBn7(6Ui zghCax;}!SuZ%m>8sT;YXr`I4m`m2}hY#Ro=P+P2w-=YAeUtiZ0wV*f2P~|F|hQ;#J zgemV`w^owy#yQ@^Me3=yj_ z>nSrfUF8Z$IBkrTgXVLhoOoBNQBzqb3nmizf|8Rw(X?c9V!U+^j&S{Ar}7VC#Bc6; ztCUU8s#;8`(o)}sjz;uJ0#P=iT;SP3MN#k%BRGCx@MCo`Rpy5`d}raEex4>Mv0y|i zuDl*9k_MkaKo)NoYSq>cj(&QcsWI7gL(A~`wVFi@rsMpZepN@#Ngxyln23LpE!Dtq zp-b2?CFvIDrwHpwwTnuU8bIwvNyGdHEurQq1%w0_jmau+H}VXU36+gHLeF^qM z;VS{E)b}mVS;ZisxlL+{=CE@A^@E7Sypn+9f9F9yZ>e_+qV<*69d4?ery~BBTLQ%> z2sKgJ@n+i}8NXZkYw2njZBm>l9O?2l9{(!o6nIdlsj#DXy4c*A_My2)!xR^t@q`7Y zV}=(%&H6`0A_7P+ndyO>CGmlD18s-Y?|`&-(RH;>?mrPvjVaPp?!kWB{T(DOEpJ>x zGX7&6buFUyXkk%YB%uIKY589x@9hKqTG89O6)aX7*n0JdqOu^wYwNr(l-6^U6UgaA z{q>?rkV+Y_Ld&P$ha7mI@ioWKi;^u2j44Vr=LPG*c(k(K?Onbehl`at%=e%SShZoi z5u5$S_uum-@`=ghTYjgPpLoe-QPg-Xy-7La)L0hTcN+y-lCd)O8v8S)H=AcbRs}%1 z+Su;`cu1MUK0?J4tb|Ri<8$A?(yQweQiyZcF5-HTA$#|N6=`R*sv?mSia1M8wA;Tl zjyZi#!sr+z1^qSM4mJ~y}HZ+9p9E!f%=+Na`8%JhO*mJH^uev8+ovXIzu zDw(s*q{?oVan7Ow&99P!&KOC^k~)Qpx4xmBs50!36EG6rcm$Q4{lB_Zp%7eMh{Rm{ zeaA^xy^0|`&3xY_Z8vaBi3Z1kK6FCJ)o-yqF@|o+hY9UnA`6oW)@ZK*=X}OGeqf`CK!tV zL8V{C*2T&nj)VLc$beoHC2tPOq3U3D;&sL@dkF>ym{fG~T+6Nl%Dm ztoH&nLdy8`T-k3O^Tq~$dU2;#9DisfN@wQfv3 zCP)cY|--}^86e6RSCEg}rhUz23BJ~h3S0B}$e&Yl)`U>jSlNadXRJ!iUuBe+Q>ehMq>4-m^u1nqh_Mu#3ZzenCx)*!0dS9gk>J=+$ z*L}#@_B1_OuY-wsv38#bV}Z?%Z=7qOJJIv`45bfkAV>-l6_q$eEKIVmJFO>WN-+-Z zE+?w4ZctoOj#p*|Tb1OXv!rU=!sj8|MjD3ioUSI`FomU1J4xu6M#4O`Oc$0eHY(ex zrUOeC=YB#>&DYUJc^*4B8gM9k){_EkxZl;bOwgupW?^6-5@V^dSD+7hYeb7!Det6= zVUcAxWOYo@d^^WF%5xAgCzwlzWf87*daWY*wF?T=iBBw=;#Cw$s%^Q+{>W3()fuEW zya}LkQ}J95{reuY6}x4Eg4gI_O)hQd_8bX-1*Ds~9(cdUB5#3W|untz(PdF|hM5I6vp(A-H+lI(y z4MNQ^o1Xm7(%>eDj(ZwU9Zjpabf{S$34$74<7Na9x9R0 zJWN5&eVM^8T)CHI3m3L^ADDkX##1ao>HD#L7QSoR-Tzv1AKiP>N>V1v7+MnQ@AB#9#z<9Q#f$uzQo>Bn}9zj3X{l4dDU41!WaE3C|SN6wc zw5Tpe06yVrNo?aLL}^YNLM~#VJXERyl6>tnC_*nhkH|5r3>(ktN%4CHOU?M!;3#D_yHS75=aY-+j9Hbd(TJrz7S>Osmwn%h@#sQMdViI+(k=DALob@0&h;2{6ApSVuWg)I-Z7FI_)8#YP;VMp(pWW zjJE|wef4qG^UvS^;()$ekFD1Gtwm)P3&$0S^3pOaV~$!74-!v%2nYU~hso7GLn1oR?~05? zI0|}Xed%4Mvz?YD8qr?r+`N_prA9e=ro+2@Cgy}R@tDP<*f|&r%5cPDMbRK(bn{tv zf?K2S;x2KrJa!L|aRv%4#eagFGmvye@_TE*h`f-Lgp#zTeG}v#>w0-pU#XLA+rW?b zRQmKzx}Ig%M8WaN|BoLul^d1c_R2L zOxByl7`BdooEREuTDEGXPZlVp)G3y$;bkdBgf}t30F<>wYt7MS?^A{uAfajejj}_) zbO(WLwN?0B>UL(S=jf7}1g0AHlV#xOuiOovQ6faV` zi8z2ov7slYsTl51@5IMWK?2|RbDn2QqfvH@Gff^wj$z)|VoA;=X$u|M(5j<7!I#^` z$>|hWT2}U0%Ea0DU{^BikV%!L=U9vRQ^9r278oNi5-;7v0l?ZdXn7|s_fpL zfAigxRP3VywvBCH1eHa3IlVa)+TN_*2R>?hVL_VOP5AwKmpM#=UyNl2vh0lTz3uXN z)gw4_{f9so4=+zC+f&jaBA5a!<&BPE*WSupl?)5rmT<&YPR4?~PgbGtK!SWw8o;jm zWH|c@XUJ){E3>0?z(|sF4kPVwD6`Nn7T|WsNIJoRMy-@H5 zRU6c%Dbq%moLrKD7e!>6_!P}-0lNnUtjFajYY!KhT_)bT=`IgU zHStknXTN%gq2alBAd*g-P^XuoxLTXIY`#@_20X^`fi;9nB4YIO#?%qg9n* z_%6rE7g6zFIL~x}vx?e79KSNn$vCwUrx5M#@P3%wU4h%G9Kg$3FTo$<)U|3>kzPYi zf?F5pBQOyC-5V8ouUyIr0*3FeGli%*s+$z>2wBG1vK?9Sy)_pdX-HFP1+?>1igAP3 zS}+@sY8T7%Z#HDt5rRild16r>DG0(ojf|qsk;k3&$BOFyU#sgLOF)3W{x>wiTP&T0T(q@vYxfw__tYwn2dvTE0 zu$Ju;0Q9#l-+n9XMHUiIv4XXEkwclNBlSK|joO#`qDVsQTmvCG`w?<%(b-0d*}G{o zd%D07j@M?(*!|rQBnhg9<@h8y3xL>7&Me7_e%#2OR6|$8s`4`|t*En>;S9?0>TTv} zkVN_9me~er{Z6H-#Zf$YrlJ$ZqG>XEW;nAZf6xvx^)Lx*0Chw<cxc!POCdp4UbccXZqD{-900P3BI8kvP z*Gy!bbY=4mn_FAx=ttj#Usj7AGh}~-CDl*h+e4qeRK&-z; zKw@M6Ms#|!f$2ehG1HjFvpI6;ZU6uv07*naR4ztdXb?TN6FuGF@|mNFLYC=}@5c>& zU-7oyS}2O`|J54)9{gf?=1S*Q8xfF3=KAYzEe`~ZUja1yk}Z@!xTZD&M^v)XHgSUC zWyku(87c^g{drsLyLI+z%R_0rR3;%JSk~y?hA`ZLV~1nrl&pcEsci|bTh{_oox}Q1 zqM%9-CZ^Xm1~DnW+D>r2Y010ZF{ozheRFJexfpTbY7wOwhwC1Kg@2pBx zF@;XYULLSW4x+dVDGgD2YV3852_p~ z7XI_P@YJI)pl7N}nXA8vR%9cdK6(d01em$d;xmY~%ET;l`m}G64PP*v$p6=f##h+> zf8bs2p3y%rUtqSmxkomMg*8{!S5FUg4vE(9=#{eN(lhP5i0svkf++jeEOVwJz#o+i_xli%>m_f#ION=XRGw zLt3++jj+G`p=%B4mR?W1M!zqt!B*|@!B%#L`g5Fj+uPVT^*r>Z?4H{=iUGIMpuc>P z{1L2OYjQ*7pGh1>Gm2y{mYj_na0blmttQn>a03$@D%8r452-=D`Bwg#Eby=duXs5H|;QFBz z__ia&+AXc@2A7S@fnkd-2;_#_pD9>t*-=RUs48<=-+e1ETlCKF?$OL>Y^2cg4T-_`A77xCyV+V?)bf`XuAKyTQ{2eDy31Bh!#i zKen}=*dZd&eIvgYXZ-VDD-I28fVcj6FG$F;nf4NHbHGoYxRd~P;3xi2|k6Mp^umm;IA;}5km1W*VD#r03{3j6W>yt3o33`o4!2x zVSik}1_onHY$dF)QhGDVUwX`e*H@|RuSL)B?8fQ!Jy3N!c8_ovF4tIz5m$=YG2x1r z`7Z362dp^)*#3s#hno$Csx43JHOBaY?YATQiLz^`=p3Kl1hYf4<`;F1I&oR1 zgveJ^=umyROCo%XLEB3^7OduMT?|_ak9}4^{wn+XXSN9iHIfdLHF9zG(u9e+P{E8P&=~ejXRbEaYKhGuCl$GE`e$V3!i6X-XtfNGs=DKUoa)z(Z0z(##?U6bG)@I*^sa?PIp~~p@f-gc0jDcf$jq+82J|3vDY22o z7r<3nnAuhUL(_U&!F@YFTnj&X_CKetgoBgxZ6Vi!>wad#yC(gG&E0Yl2M(}OYrqhQ zhLK7m%7w2CxBJl&k4m7NHrnsAn@%)4%LPsEU)`ryAE zt^foq{ly#|nj`ujfi|nj{vL>Rs9fS;JyWc^=CXEwZ~Xm zC}KLNR~!_pj?Qc#kzUk5sFiMc%y?UJH~3Rx4}p;_&4tByUqGpZ;*c@iy{x}=r?XQx zn~Q~X^jxbXv6{hU%?%zo&o)F6%%D6?@F#@IX<%p;4o!i>)(yFbI#0uWNW3Yh2JSgy z>1ozPtf^N+bQ511`_DiBZOOKHT|lbqQ|qJBX6#I@7qabpgo z7YqJQu-L*n1-;lVf2K)mA*pNCymm5xCT+iR|d^}~E>2ZikkMr^a~Vcxam04itRF{O}&e);65&9$Fl z*^5hBXmJYJ-?!{N)38c4@;gpk%K0euXcxocUr()U=`lYf{`xN`GJggW@^;&ks4$I? z)HtMH>L~)6a2@7{fwLK9{LvNTj=168uxz|3J0yZQdxw#1!e@>y*9RRBXc`R^jS=)X zwdNw%uD*Z&qmz{8Ps>jAh#A?q2!0)ggbBK6se21^?#A-|^M3`~vCU&F`?YgYf#3Cd z;}AjF*+jVV%KSSfeJ|1sWoc&69I9Mm@8=>}arGw0(7_W$2;J>>>PFGd;AnY)DN?== zUW-P~{oX3spIa;l5&|pZe8uv^SNLj$;C{OvLDt}Dafxk38hJlAQ-=w1#8Nmixm!Pz zqkARKSPuTZ+!Qr3eoW5o5`JGeaSS*8bHofCbO_rzLDI}LatXyLZz&A62~&|g?(K&( z8A*)37EKJBdytszYsin;&Mo7umsLQkX#*M;)G<)g)!Tr{T0%qK{Iz^?B@YdS&1-;9 zCBU#+W@&G2&XHuoWte~42aT`5j17yvZ;t66me}D(4jIonlbrSP17??=)hX>53SZSP zJ7_zmcOB*Ir_BE{z>YHYM(QaR)Ed7<4R}j!(PRYi{D6hj0Ud}~te@q;2IY9CNi}Ro zbA9xC$W=&MnwOlnLZg0$?-GKq%{|nad^Gj@cp*JwTWaGt&x#o=o*n^c#OoPc2h@S= zXO*_tj5+OD53YSI6gn#Ek%hd2AtpH(# z(J`_~7Wwn@plSTJbvn4_V7D5e-AT9mkZ~aze1b)Jt+Pw``=uX?(yKy#a!)Rs)K{RvQ{y0oK}xx zrS_0pQ1N`_57Ib`E|)lRhWriWF!L%;K3oxV*svHo{{F0qpzHYO#|x!7PGu+D;);@t zTtJbo-s0f2u)<>Iex_^u3F0SfifLlW@i)c}$Kuo02}hbxNHpgVKTKZ!gQA*$8~?u% z2PU{Zr7U@Z0ljyof6?Zjh9}66P(a-RNpx5<^RXdxw@?B$%jUVPG9!N!4Km@bz0>Zx3eF+npD z^0;~GdxWi;wCHzp?aJD6qLY+0Scas=ng))yYF2Uua{**>EXgr&7&g}oqO-yZ42RhH z@rdHgkSyLFz@%o-(ST?WM=23Z!yiK`1v--034Onok81%5-DPhOuPH_7Q2&~)6SI?i z2br(@pinEw&&MBWzNg>aYo{TP(vT^+d`MBcE_81GK?~i0SwCf?EqBFrrOjPE{0G$s z*J4;m?oHhWm1&K*E+Z?*Fm4)>m9t6GjL4;JY2qouqc*Pp#XY7YMEav)|LA8|hJBVK zkHchv8e{S^C2dm(rW?Pi)Q9;&R$c~UbJG1QKMW`H08z7zy_-gZV=&UAS$7sZ^lvUP zC`_IT;usDFCH6RJV{|``^JGgYY=zcj?G}Fc8tcI*-)Cp$eAXckG#oZi`x3#xCKm0& zip&SAMd&#*XS$wJl(rkb-ww4Cb%dqB6bfa9DvhLy_t`MSY!~8Syy}W!zcaBsKq@%62Omq%%sPDe}c#Xm_@B8-AB0e=d zS9xiQ=3(pC?UQ%6jH-F01Y@{k=s*|tf4UvR7drSJqxuv!)`4`JJKRqA>4Rbw=Lx2BZjj<8;0;l&L_ z-nNc~Y=^W!r0~SA;h#sA6+%P+45G|*4hGK$mOdXPKCl;h`=t-z;%VAk~B*$ zqQ`dN8sI9U>X*2Qf{m4I(PJY?DclGq96JNAv2Y}V;~l}LB13cCzA$U%FG3xh0e?a_Zy<;x-iXJF36?>p~Z znE){a@h_=kX#3*C4}qLfW1wIB%QzsgutZryel&9}C{*zNlwO-w3Y^D1fzKaD>ZR>I zJbnTJyAWd|t={tr*0*Kc@3hOBnCt84ozo@ibS!8s4Eg?yZ>Tu``lgnn?Wz+a&9{zd z_eL*sbIdlx4up$BPH@WK>tPN6?du%PlTp^Bpp!lP%BuKj#R$y&HFxn}S9WN7xxRc$ zOfqLZC4eJ46v-2QwgPP%?A8JURBqRY&b=w{WN`x-h>XZ*hD)UAuH};pgA~8ACP%L| znD7PO=@3d^C?1q=;h|x{JPkoRUvjHi!O(`Mn)-H{)|S)?e=sBUR27bjQFUSr8E+=V z-LRXn8?fK;-~a>O#PFQ4LFu_CW+Gxw@l<@d+eMhM9~}lrrTC6oG@@`w6&N=Ka>2cI zy4I@+jbzJV8O%(};(pt`nJ(4PR-KGiv532iDGD#F1>pG6%6HXqB!u4`JOa_NRPtRX zo6bsQC^j}`r+)n^fEN34f6@2D`aU0WWzrH<~W6$4b@010wgaQ0m zE?kR?tQ7YsbB{FT1ar4HhwXivv-UKKmI!&_AMVY5Tw=T`g>CkhiUyn&KT<>3b#*ebLC}m}l z@0F?@I3dTr)Mo<2z#Wp-hN9T$T)lf2{XGFE1u>h3TcM&}yM!a8Ne72&BoaFgGdg`< z%=oV2Aw!^I0wuPosXZ$2AyBCPfLQWa{)_s^*X_?%{vQ-+4x#POpQN0t?8HpeRwGXG ziti!9rN4PZDi*6*?JgvA!FRwTfhD!U7M_yS*lc-%Yl`a71LG~`N?CNgdRt2!+;i*e z(Y-*|P(X(nQx1>x$6h}(mqPKFVKaBi^t^ezlg3_8$y7E7TyrEvU&5qAdHKEZ zhq&SmU2+(Qh{`F0o4Bs!rW=R|tMMu%ur?K8gwX>L)-PV}AC< z`bPXpEm#$tiZc4ia%KK&1By%wHtq_yQSvTO;+i34sdF z)r1T~N>znar&=(?VMV>3uHLI2^%lq0)yP%uRH{yjbUET1LZ zB5q}_y67_{F)V6$zxesgpQN;OSls8^eJq{cp7%a{Yb)f6O#?0c^tl+9Uo!X-ezxakWSBe1pXx8Cx`oV>)pE znMabA<7vRn37Aj6{r+GQu-C6^&r23P;b#AStBv7i)P`{BC@}|rGTKfNT=uEr0eqLk zI0*>>V;RiaJ43EK0$yv^0-sPc+ytaQQJq9vs^GKrolpl^?V;7n>z&1R`b_=lQ$ zdTicgnV_T1MX&N|LrXxbW}c2m>gQ*_1qPHYESDcSNnx3eg!b9h& z=3)sm>S06B^lm#V`$A2w+eq*FH+Y#7zC%^vlszRp2B9ybho|kUTII^Ep@A~|(km^k zl#g|Y^!4du5 zW=4Jo_Q`wpmO3QBtLPu~gd!fjgSS~1fBQ9a!zHVjy~Z4@Y(Aw%vtKC}aI(V}Q*b(h z4g$4AAYFm6sL4C($$4ddMi&_9vFqrJT;^BQ<=fB7g`}%E7@A^fxR54@GLuh(UF|M4ZN7h1NDm!dpp>Nz{%C`4BNUd=;F_ z66vIC1yR%vd)lR_*Vo*20i^Sf@V90J3GJu8A^p9U z@90fF$x@mE-7F3eTzHzXCE~W_{(fjuO5MTnQSP_DDxIaqxC>1zNRh$x?4HIV zJodrKqv?0-@IdUxeun6D&kQ`43MnQlA=JCHc#I_zmxCsjG;Z3AElBu6Vf5*0UQM}i zjy4M;e3o1oyh~CuyZ;XxhieJlM)}_1l4~uXY0!)zPT56(Fsi~~3jlc^`L&eGKvU=o zU|Kw+3d$XTjELyjRYO-omUI>YUozNQ)^9jd_!?!+*qgOFBXj_!(W^%@!sme|v)M>) zMa`{ki7^%wR6wjVvaOHG538{h@_FVd^o(%Qb`33$D7`ERBy7W?Bq_+rqhr~k#Ab>YcM_9e7hF}* zPrbHc2rJUgdHM$-?Ifb#`qhpyP-O$@tVRZbQjsT5R=uWiG>QAD1k?2Wr&E%+eYE6mv}F{RmX2p3%^ z@04OcH|C#icsq&Wn^*0!$xUUW)ucuagDG|MlLxE*(KC~FoW!T**6<^WVG$4)Ox9v8Ur`0T3f+pl=>3ZzN7jDor?_2_K4NaNgl}f*0d%sU}njvN%~u4cb~I>!iE^ zu*nBxbl~xf#XiU#qvgBWS=eK5V5V-^Yhlm7oS7Nh#hRDfG^pNo&F$ z!glUBD5O(!C<)IocoWrIi*207-T#bz{UH^$#+J=H{OLiIve$K2mg5}BAeR7Y$eMN( z8YR(WSbQ!~%vioF4n^|r^KDcDq|67v#Z*mVxBS@x(NUj4u*!jel4gd683 zBy{t~_YB}N_nBgz<;+6n7Z}3WckWy;*q@wEekA37_iIu$p$vnncPfk=-BQKC8ya7g5d46O*pYItWj@ zVloLeh>6(v!KuTBR^Tcd;RmAJ&p^)H+ixX|l~ex>n9+FsfZruKido!hlGcq4>17ZK z&E5yv3p|Z8(EtD-07*naRGj30n9C?VSgC)4y)`B-=lcp5naln3PaEm_uym;IDmQE^ z`OyoLYqqeb{5`nLb~g?uruC(ywFbK^ZZ;4lp~Hj^C0U)dUYjFWDUswspIAH`~HfV*U)NA66(rT@dJ?hdN?_`Q7TGJ zX0OUr>i|y6K4qXUPlVjPLVXVQ{f#nYyn@Pr12@mVsZ!52c6$>D!JXfAIy&#T`J6!n zr3q-L>?H(RO;n)BAzb!o)Eav-x-(Hn_N#2VuR5$b3jaMqv`DI2qZuGp&?@VKPx;C6 zfip~ut*BOyGgBrWG3ncxXF{#of-w&+eMu}GR|89|Lk@mJFc0;jb*m!K-2pYAg z(Hj$-%i#s1j&V-!_2uEUnHqAVEH4*JuMqt($WI#I-^ z4Y80>ID;u#Jh8UaXoxl-<0U7ZX=71YDydp%TVDUs!!Suj*VR5`0oP0=RQS4qpmTG_ zn71MR>t(_{V20pD_qQNqTiKPa-x@?@KVefSD$rvaI1uL)@~yp(H=PPe`uILgswv9VsTOs;jSG~XN5GxUPKEA9g!_l( z#w+tK-LWwpUY%-R5Jn1BsvSDxr#hAnXF6G2%|<+ z2Fs)}7Ac`mE7;*pIj&}tfNKoks^7kff}(W#?QYz|aMRJI9-cD+yGuLEZ6qlUzLSXz z))GC(R8L2M(2Uty*p_rpM-y1T1Ha1A%V4@eKGWX_i8W(fM%c>-B?a@B2z0XPzzY+L z)DLD9C{TU#S;(do2W6(eF$<$d#vgW3mIRQRTg<}!L1Q^RV^@HyoQc`nCV6bkP%3yl zc=uko2I1WJ*M8Htv zm}8IrFvD`=Mz`SU=&e7z^5=F%XBDe|HsqpZa*^dwdS-aV1itLNkxqJ-Cq<&hzm!ok zhE$~1XK9j5@NV#5jwqn)ggpS6(>X-~tlcdi7d40fJl&ZS#`93ES+o}}-dwwuhU2LC ziUYjig#@OzmrG29^ipqWAvxc3&DHT*;y>W(<`$t$B^6@ebj#CVgz@PRDhWkX7C@-y z0+Vf@#5Smog~f#SYb_aaG|Sc~P8YV)P?mNRo%Bt~B4jRmzBo4}FFXzl*Os=8n10{y z&#(HO(o(6CO7)H#x8sR1e^vkJ1uUr{aL&^ZxTyDxn*}VpoyT`IB8e2N<9?)!2RI+y zTbQ*>QAG#`I`3+Y?H!a}cwSX3Oa#OoaGR{^Dd_S*v8#|Rl-r}WE%n%WH%_JV0V&y! zBEMdG|FnYR;?wPPYpfYOv}}bUm$fR{D@-aGL~g1ajJdAFNz+;dzP3aep|b~`p%&MJ zF9JRloeboM*E?<^d4d6a5HKz8769v0E--^lp+)?C^0LKc!NbtP z&w0_BwAeNR`sW*dg}2a75E;x1Sw!az^Nx+~g;L7*r-etbFi&JuQT}ou)pPEoQx6+< zJlURD?dz$SnNz-vf&B>Ty^uo0(!mBE{;D&3-7+evGf+~2k5ZR`%}&YI_v2IGd$m0$Da!jf&aJKedpPN<8w zzNz$Pg|t&Uz5&H zUNc#5bO==1>JU~z^wUVjo;0YHxO5rNCR%F_(P(gqw{=bwvuct0&I>#a24f^~sSCyW zJTRYNZ}jkj=e)$~Ji976^2AorHj9Ti$s>1HndY#d=?Gamo>sw*lzrLNcgtDA_+sapi-fe`8wuli=LLB!*R976%7sehyhp9eKU3!@ zyiBX*$>7+xPTY%@V|QTG#(GOtBn)I?9KkxlXJXf>V=lE5zv-<{VZkQS&hmqA7UTpB zgqba*Ywx$NCtx@~Wnw$y)t%}M6rn&!l~OPndf72u`yAth=C(0N!Z=7EilEYtE##$M z{8Wb>6f4}-YJXd%pVX0cRBvuqTe4o3U~TXn_1!D^$j7Xoh{$nPe-*Tt zNRA_5E;MrRDOK}M*{#O|M1P#whDD8|DQj`Or2WF0&4d`Vcd-F|!uGgWd#eTv!-&(= z;9~s2)Mh;6epIX`0Le9DtZu2#B)A7ALPxVELjnsZ;Rh0fN$q_6+qDTU4iAx!>M^-x z4hNw3)Yvu^j9o7~&=qe_<6_$X$JV(h%8lE~7U2B<59h?hohE7(Am=(6d+%TMxHP8etmD3l544;)tPot&rL zs>7fviyAf#ODvB!w(M6hB=h2V7SQcL0>w*=)qvu)9Xu;NFrg-AnB!4#zeb{77&-aO zCkTkO#(0CPE0wPo2Qq9}4vg2OMt8-6A4#E0WyRWnLO6<>w8$62B(U{D;#adgZ&yGg z@Z^y1&LSOM4-`D8<)mU}TnH>2KLwhEEu29EkA{%Ee8&?e)iz2_(P-(MJiP$LK{^R@ zSZw%-`m#^?-`otcWhph+zFVw895mq(6l_{q_VyPCdc9}a^iriImELPI(v6*Nz*Wz# zeNY_nU%H$6az7^ZT-fSs0d-IR?NoD77tXtbE{Pj?DKRDjC{%>9QDeL8u-v;PB>)}y!_m62 z*IMAmbz_YxYo1X&qx&>&w-tqx!I6|E5wJ#yN@M5lt%tJZ^|IBRps0t{wjc^SR%BTv z3_Ounu4qCh_`;r-;(Juse*t7?hB zfp7sQHAOt0=}6!kWQZSSZ;XW~__OZEj;tZbnh@#^n!sPb zBMK8KhFP&@^wHtOP2nH|BgPQTX9fG*kvrGDwl!&3f=<~S0#v|mC4iN5%d$yqeo#RF z7BS^kuc=bUjD-OqO26b!BwP~SKzN)}DJH3TV!`o!_2bi2mshd7{%E|V#$8b>f(f3d z=~R5Jf(*oIk`qFoSVss4dbcx}H^!3EnLf_4L}qp;%1?WqB=`eVNuZZ=eU;`aGA)l@ zF<`ay@uwX3kiO8`E`?J!hq=X`KHq!y;vENd+|%AV#?i>QS{F%h(CkAglGtCtVxL!Q zW5>(A`xT45)Tv;QCMGy*OVfPsvI2U zxGQVW<0%I|GS=n6Cb<{im%Iw*?tFz&wvh>TnE*qKCDM?Al#N4NYe$Hiev;rIhg9qG zfIj-F7WSQxh}-ey!T3Jj#Y79|rHu!M`P4|b!|SKIlL_2Kiu2(l0pSVn@Z^@VFGILL zXbqO5ntHE(OhB3tSwK(bv4Be8_3cq>ApJT)9y-Ho*SyImiHrTxkBaq5&|bt+*n)%4 zlX%!sZSrs@{Q(!1^=7(?HVvC@s>T*rbnP^i;C5>lEL)rb z^#`pxfc3JJ;CkK-36yy$VU7?NeF`VAQLA|R6suX*Jo@=1XRi&!b967VM1iW*^>bkg zsYhnUh^L9Tpd>|&1LOWHw^G&Odst$mMT6*%`iT<42&Lvhtg}?zx%9ZMRx{L|{m|?) z;_EIdw9LvwUg_HquLRXc2{^)jmuM$d!@FtW))IRD5-h8ADFA5b#yJ*y5U&n*&x$M;GB5W_W=2EZ8v^hV9a8PPEC(E=|G_X-gO4Qd$4^ishw3cv=@HqtHeB%Aw2N$`Dtob#>+CmnO zEMaC2<|hI`W(ruEGy-1Rnu}FidrTysrT~se@6&Bb`7Zi(XtS2vJLV9&f`9^{i>neb z$z5CsI##(spQU9e>cDV=D7?CS)H?+-vF8?kITVn2YLGJUBD%d2@R({t`{asD6lSMN z5`|ETRhV0Bizu}PvzSTA_BAVR)ojqSv)85~BJ`;RzB1`|9EX$LS;42y9c4Jq<3$!N zp9xH5`9Z}S`x17JoFNvGE?vn4(t`xkl6(kzD``Y)2~$iv6}pDX34Ga;a!5` z7m4K$?Z=Jhgi<8wq7$aphC+vtMugbSMYSnCs>T{qg`xgZ7LgzX)en`)YJ|ODIe8s+Q`c`_nICYpYdQ)H8%<$3YFsHj7-`8i?a38_rCq zw^*#x83kTxHzOZAJ_hBsGDE9Ad9P!nPWVDz9UUf7xya9|m}Z5(3XY?f2SEfF7^-X> z))*f8W}2N90iz1gl;TVQ-IV2llnT|7KzTaJW`N5wI=_fz+l7QtirE-cyyloj8uHsqLsc`l8o4lwKVO zJG@Tn!u+jl&6GW-jsaJCGp+&@uBww~F$yP4qNWSBvkOnxiKql)o83^X!tYMGTjPm2 z686^lt3!Bi$0ah35#5;fN0t_Gzg3yZYgtr!wR~!+l)fnN$A;9O{?40o*YQQPtnPMCU<3_L(0Cse}6MZ zM`uQ>yT3oYA4L)fw_qEQ?>R{!Fa=H+!qWmx>y#k{wWdcKUPHy>X|2k2_7>Pf{Hj=k zQ$o_R3BCNRLFO3v_xEAAa#dhu!ixd3JQ*%%&A%)&h6OX28J%{ z$7ImmR~26Tr1|6Y!cOJM?YFw;)IYg421&k7b0Y@?GR0;DLc$78yz514zen}oV_5B; z&gzT^?1z;@D9riOxSD>Yyk3dmaJNa$Zq;M5+#PfGjE$X3$w&zW%%dV@muv`mxInCk z`zyoPGz_pB^Y6|#ZGEQFZB$a4)U)M}*kK8WC^-;1PS|W}2M5LY)_7jm-rE6&vTF;7 zfO5g4Wx{U5n8y3dX`oo4%k1A7`;6I_!t^9XUKb`tz0Ao_0XOvo5i{;YDpu_rCr zF3)rbffeL`|NLJ%W9=2)uM5RtyNk6_%9|;@S=TqgX6wxRdozk%7j!ja_WvKBV!vEZ$WX?JlIaU^eQ*$ zp;{ao7xgpXC0C8x#pp&BNPX_fA@jv(lsXbPbI#Ika`Dw;5l?S^o@I8+m|n-kkb>o= zQzy90V$jEJH#ojLdXKDmoU3sk<)j;-)%1KFbwn>ZP*&^HH@OF$0IaukP~ z$Xsi1M&NE=KF97w*5_y&f!1VFe+_0ym>^qm^2uBnU2+zqv7txdyZpQrUXEP=UE;KZ z^->PSkjcW(>&3~z{w-Ima|`ziA{0?4y*WUG>ym?#2o7ytRyOo9ktC2aQD0J>lZxIp zE2_BI)$&77h<<`tqTJ7Z=R#5Vo8S%xmM=6aX-%2!YTgpyyRi;=0nC5Dr_Q1WBE|bc zhSA1#kJ*o{iIXrloYr!=%X~=z+{|iFlD(&=BOdvNcTP@&J##832-3bW8tm&VE{>R#ozPu)ZgNkT8* z=pU@$UzaY~?Q9NcE9l_*X^t{kxtAcq#?(U@DpPE%2FqmZKb>T$x220jF2~bXIvU81 z1+sQ^Q)ajZ#Tw2&_xg9?y>fLp!yK28P*X}!0I?JUVYH66(nfqD$xYG<3F~o6Sc<{k zSv}*A9KlX(1Wkm_<u)cv3;RJ` zWX+h7Z3Is4By#$(sE`*!)f#U%bL zD^?LdmV#q>(s-_iNbf%*=}T? z`>8_I$AX6CCdgR9Ai~{&gFrPkBm4E?2<}YpS`(Bmf!i;Jq+&z1snah)vwTq z^~cOUdzAy1eg@cUN@tSuY4rCVHEhMZjl%YAn|JR1lkR<0ik$c!JlSHd55^Rtz2Hjk zfx!jIDEx?)*DZ&3w-=GzGetv~*R_bzU17NFA?jYwi;1gz{m@6ZQGOYCm9L1oLW3>8 z-dS9=hh6qhpL*zk1^CmxCIi9ZQwZL;w`mE%SY1A!?^ZU$h#}S27@W^5i zJkp=XW@;^0SRpBOtAy|oc+P&I#C5iEgFX5~y|MupK!TvcrAh%SxXU=vlqtToOMo^`7HZYnd{3KeQ;JV>_` z&i+nTs8;z~@8v?I)MCGAS@lpgllAz=U$D49nJI-zv-D!L*TTHeEUm-{3PS`Qy^!Bf zw~ioH5seO0Yw6A5RP@|5fWb-~p^y?fyqR*p8I4WEY1}5Z+7+Z@P<5--z!L!OarkTQM49L`L z2wdX)+e)nL54Gz&H0SQ=O!3L=+6}%XLtw1g#JkKjwc-=nL{JXfCKyJt(Lg|~Kc3;- zINdVLsZ+T67`FE0on!L==YQk0?+no%VRfD7naj^6TE)Hu}E7Lx_=b3jZNRb#vm?Sd@aE@|AAA4_xHLF!M>IeHpi56IpIo78 zrp~@?St@5&h+>Z#D>YnpAhK1>Y83(Wsf7Dz?eGMRZd_w~sulNy=A-qD99ndEFkVW{ zrm2Z%rrtbQa7%8a8DYy*WI&sS%EL4o+ww~9kMELQy4Yu14YIqyVyZzu2T!3|m#IEJ z$WutB03$qW%VL4?&1JFR^tLx2ejD#&oH+O4nJKn@6OunyuF#gU!Mo}Jxa~+LV1Lb| z*R5_*DA#8NK*ur!IDMY)C56B>#5#SKzseAbaia(~#FLXt1P&%0>!E#D2TUQVOaPZo zX0tJg6LZMY;1gMWA|FR9Q{}`bm?vEe^m3l?TWKmi(o6 z;7i-7jg*~D+i@ZRcL60a`ZMaH@ZPz6C&3=SMge?B0igg$K)1g!OD^L1M%^J3&7|bUHEGOwXk~*JEvBtWH>F0-rzzl znOFQMX?(jjDxmd6faF$X)0Xag2uB;=yVb~=%EEHkPe^w}uKnGCuT2wMl%ooCJ_(lh zq!64HZb0_&+xoWaQayHJ3zHzd>sj&QNwRB#DR&}P56k2fiZ46$M)=+p1AUhRPMeEj zml#g7tu63{HV$ok*?GymA(6dk&7Qn0`rr+N&Iz`siWzyk7Cd`}`kwfk-$5%ebkXkV zceOSL$$_OJ40gT~k9aFohJ4#FwA}^b5aniQ&kEhd#nW{Dlc{(ZqVWD!}Bm3Nvfh-snPgeFPB&& zxHOmT^xrwkTPDFrPr=(C)7IaFz6j0jb5yU`Md`$J?tL|D>)gKqxEatDs#CTaBvb7> zTF7glIN}j-5`lAxOs5>bjO*!+G&Sfr2S_6^fEca~_vjKCgyVJFL}|yz>*%3gGpqyF zI_QAYPWJYwt{-_`#C}*}A{jad^sV$GRrPs2(;3_7kiwDc8}IosMM1GiIODlEjVBx# z1?TW-O|gvtto*1gJe6m%V(bUtiOFRbXV+6vP&v&0hmcRk-Rc9{kr| z99cs0IQiGt>PZZ?FV_eRO*+J44Vt?0znYlb*C$hzmimHC5RbiRlTyn|G7nZ+>eDH^ z3>5%tg>bt4{CNqhwCdx-XrK*sL0DQOVFOR9@Ah}xccym3R5?v`s zuZS*;%0W;=ZW70iD8$4??3XOaU}Z-4LPCkt>-(feo3&`G#>yf$ZzIyN5#u*rd^&|N z$~#pbrBbcZH;#!cH5x5K3`IUFJtgONm7S5~u=0|^k{l{Ih5dD_7mf*6Mfb}CCwvxB z5!GYJZ%w(KWK&q`b7HuL$kH)ijP9EOCqd0EQIeS8#{NrK}$k^rO4`e zmENr`gBWgEOBgaOR|N|#@2k|Q?ROUGL~W?p`O;(g`B^F57Ri87r;KRzp7{7zYW91? z_>-L!I(I3(;YVw@N#6Hd9(`TVmhjUSL%>%YkEZZWiGD}4rGS8KsK5Ik1~}fR!F1G7 z^GlNJE&*d;5MaGk8p+!#bL7;XtYT2*(6HW{2gWEw3}%926>s1lh0P2eJmn-irGCbT zOLTh;BfZaD<_XnbrAO9MSCYIY9;k-?!BK&B0U|L?{t)7(yi9NpO%6R8y;|!iEiLyl zTq&M-Lo>yjqpCLZsAN-);(nkgPjliwKWX%PtNLFy_56;KW$rQlyRvk}LLEGjQt5lDU2J2X)b0g?<@E41$gVMAE#tbKgifmqw z4r>h{lQGDnsS}0v>RcZmVJ@vs>Pi&T0K`)~&9HH}WpR}qfM=4~N?f05Pv4gpc+kn{ z(~?{?>bAwEy1Sdj=ESc_WLL|JA;)e@8HxoJxDS;S`fM&3QmmDVbQ5}VhO4!Fh{ec3 zyQ0>XgAKvHlRoXPk{KqN(y_4%au`R zaYX!SITz)xYTmdQc3t948nh#C?HtG82zmlQY0k=roW+Qp?&@U~t=ywGhl?A+RA>V) zWdZ)}8yfV1v^Blyga?SkBs4jd1Hl4qS}x9pCW21N#QwswoQTryG-ElajtvU+$r#Mt z1A(0NydbtKZZ1q#I5*O~uRBHbJRVj$wHh393j-uMZE`nZpOQ_igywfQTZdeH9SXJj zLAc_jWfL*wzV3?@94L2e#}hAE+G0Q-gZThG)06(stdC)13${IY%wtVanyR$>JiDN> z{6f)VvYk~=la+zlbnYPcOvEO`zaREAesyDMn~4JoK=O8HF!VQQpTl#MaLgZJtail{+_ z^J$bLj}ms}nIn*~>2|_3rX&eu2Xm)fQ@LRAq2iJ~c+%_$<-b|X3IE)%JC^;SL#hf* zXwUqcG%3gIFVfOPe?sAS8z)q~px3k!{eraP=?DKH=1U4Tu7|Z?pT*`JZQU?$H#(`6 zV5DSIGU@Dnr2?UBMoA^uj)^Sg5;);I`&l?UlGNAaRV>}I@)_+~wyZ>;moV5drzQ@W zcR&j@2B}+vQ(_4V%x9CR72A{LEATQ$HLQ3(MfA=S-_e(NxRx}u*@3@eSJ>qU9i{X3v@g@1(xV%* zZ>0%E$AsQr1Dh@m&=8vlwKTjCw0tBK|V z7vz;qUsLjUg|K7x7dnK#1$lQBG1YdLek*kBSnHK4NsGW^BjJri!|{(^z>6b!uQe3c zmB6UnKE@4jQZH@c89OqlaXbA~S7=Gxs2=O6`fxOvF=*^@VP|@CUZ%kWT-r@i^QwJQ zj{;l9w!h5gjZLnNODrGTt$t^tpH?Ra84@wo zf!O09u&s$B0{oB7>$OyC(YjOQ1HzBg{tC7wPQ2MWdKY#vHI{%~+l`R=G zNq9h|Me_U#1C(7@D?} zegu)v3{Mx-eDK+CvShGsuE5Jr+B{#%u-k}co1m^s$`gqrcb~ieC@2`);fvUR+|PcO zP47rR&lR5`j>$S>ChS`aTdleR1JPaL}#TrCP7|mf)Y|Ty6wcy zA`!R^w2(}X+O_}`>xBiCT9vM9iJea-?-tj{YnRbF(u0wR>X4kpz59?WDeKlmCcV(P zVk943*?q%&KbQzQEVxL&VliTt^AclPQG{LWM5JC`jSQO^>~6|oOFC_M9dp5f*$TE# z7u}h1n0;vlMq_xUoDJOiM)!$=BNypRQeo2?E(EO~lTwKG?qf@IjmWS!(V-bn3QOp) z{RLXI+@vXCS2pU+RQ3dqklxo$a)$4(@4 z8q9JDEz{qx#~req0zA%ZQt&;qdfgEN6@Zdg{zQI3S`w`FB}Yvmr7iquxRSeYr5wo= zrK}3G_R*7Rr=VB}DN+&_?1~FhwHb&-emRx2TiMaCttaonADHRNg9~?`YJ_T`{X@p0 zT8b;FE=Ac-+BziMoTa$A{lM$btA1(0dVHrRj^1w4t5bBG$0|{bMSps?rvfo7{CyER*F>ScX zzzg2zo+YF2ZN%T=XixEJU0hHJ08haZ$>zT!n`i#-#VqBg!xOI&RsJQLB$pOPGF)N6 zg}C4UPMgeM{gB;@R!G#R(paxs3RNWorP{dyLOmygNy^aP&%jkNj3PH<98(f11dMOh z8faaRdT#mcYQL=l(^8p<34{BbmCdqt>Prt^0@M zaLeZ4#t~a2BOF`=?TcVAsDU0`ai*SF*b}xKUNs$cFM2_u*XgKuYFqtGhf@Y((6u^9 zF0*4#2-W_|RSDuNPD57|42srb^( zkBo4Jr5?V96LT#`xy1rUa2V!Mm+<>gbnWO$*@K4i#NUNkouw-F8hNya-Zc}RrNaSY zM`}8#z=>Z!-R!QZF3FraM88j6M!qsc33n3dEq01FOZ7hEd?rl`I2YXf!0v4({ajp? zY*CRzKTKtyJ$UyA9U?P1`f~APK*=(ew-fhw&F!Qc7jF2;<&2>x0!#Hesc5~`U}~6y zpE4**wIzDD2XBSM{a3FIE^*tnOH**$XiWP&12dO7IFwLoTviI)I|+6KPPXsWG;(Vw ztu9)K0rQ0O9dH8>ZKsfZwqt2`VezlfFBI=AR!BwC9sQ&z%Slf5!uF-m1>+AD2hPGZ zg2@w2AV|x#6r@^y!tGbzl3L(qdg4)w_ zAo3zS9uNCIe25Y1MB)^F-uTxBlq}{APFWODd-f0Yl^@bDkRRdH)o`GOx9TLP*MA-I zH8{1a0yS&YLoroZ5AfXU9gGMtiIZF41LkRO3N*xhlU^&NKe`!=xGDu>g6`6n-b0?Y zuT=x^AJ>1P33;N14gv&{ML}6hK*>N94_ANy0h*g;!ak=DWi8^B%btcwOqCjXl*NLV zUuW(fvKD1HE47qWj~D?N?UqV9{SWZhYGR7|H+rvTOpjDKj*3PtO&-wt(N>C-b6D@u zZ6QgrVzn&Xu44A|KwKEGyL#I+vYZqudy%E!a+Ej{mZXU}lNv%2UwxR?l73A%R8zz! ze}RXI&@05IjWU@R@l?NTqe$51aSbq>xIQ*@=f2K!TSRfpcf(IPN>0(iKZ#0Im7-Ys z#HhiTa*vLwQfw{j#}t(lzp7=H<^N^o|n(#?N790f-1_|^%?esb}l|L!D z_tG-!P&wFu(dt``*KqMuxDs$XU(r$8-K6cRf1@X$|o15{F50e_4w$ z;Ai;*AX!6-xBFT3suJPS+VBpUGx9DQB36Ej^zfIz=*9FdH`umZUMrbk z7fKQ{ly~cpVzxZ?@JSC6Xym9Bfh=r9uSXKh#xkyujZ5P&rFV17vdaSYcCXEgops~~ zl)Ew6Q&~#*pN>(?j(tZiu`f19;j(D%#z4|5j#6$2j~DZkpK*LH0vfkdkZ`0Hl`sNQ zC8;jT4B(}7CRC923Vf@yt&}iDVT?lJc8@nN!{AP2vuP!~=Tlb4;mY1&Vs8CUi>~ zL0f+k-Hf*lS1Nh)$|WU}3z1%&LZ`DHsqEQxOuZoJojr?AeZ;(?(|&D4#$Z%lLJEFj z_hY{d4WzRU9?aUx7E-OP1Yero$XbT-$mhTR{XbY0rIvjF6t;fLp?)mJxR@XMdw{kK zjR1dckk-5|1JkDXhG}ty{+jeeHkcr2QihJ;Fj_r+Ncd7wbj|#!!f#|k#?2fBqme&J z&3$AK2PhYf3Ex?Iw-DjSwCV>OzLdR`?j1ea%_Ae$wG!>b+!+qZf7`hG7(CZq14EMN z&YG_sKGyIG1>|m`E?b zskzC;yR{N3MqU_#ftXta^NcfuoeTl+83txSW2=j0iu(xXW(8>DlYstx#K}(y9gHqM z;A!OaR$ZU$4|awZgs#lp#rK>(IIVv>9pXJ4_&|5tmW}6KC-)qR3QxaB9w;T27rN9i zq*qn_4wrF?zn<9!OF3=uCP(ANh?ZZ=uo?oCj1@#^fcVluqsK+3?w)iOnm7bmjgKnE zcZ7Lpj01}+-#M{5A<+WspfqNhqqfn1NHmOJunSt-yWKUf5q`%)?%^X#IeJG8H7BOy zIKxf7-d@`i*<#w_byDrah>x+BzG2mNV)xIR!M ztbpmPEJlNPYZX001P%&x<7!q`@rQ?b5q-uT=AyI!>>YzdjOT_*3@7EA-zoFH@>D)wj z-xBZC*6tL2fcNtpua++&#vWafj=~d(9dgtTAKoclNBj^iBQley*B! zQEbR5iQ!{hZZ%S#3hv6X1lo>IR&*UXLk^hreQ~a`i{aJ1715nF%)6Krz2!s``d8I~Da3dn6-$A^f{WnV>qhgP7nsnw!XpQ!MNllFE{G(Z zQ@hOeZoL{&NRnf?g4TQCk(d;70$gpv9&uTFr$Gp9J_-2ULHxOBMEIFCHQ@q$7n;MF zezS7%40%Z{p;qaGoly>dC1ljKEx2ub)}u0ODX&C3*4Yyc+>jJC_vi5g-8#R z>eun5mI;F+h1m_yOReg6=XDA-k+;ma<-oaCzps4W%T%sDp5A`cXOD%;1(Hlas*My3 zUm>C^y+dq4K!B>$A87;nG7|b$r7EFoV6~4I#cE7o`X)iOKA=wyLj*PFGQF5!>>7li z6aj?%mGU= z6A)FbzAm|Ce2PR{3MasCQ8aZ`xyJpcl|u07jBJf?suX1ul-!!K$(av>OI>4+hKs7& zT1i4WgsHWt1&>*ahWF1!U7l8RwcShT^mgls86HV4gpOg$lu6wDakySU?N2M4(r#$S z2NG1;n3m7OerU%ob{tyj=z@P~PP-6CY!x2NXoX?P9H;zjesx&j5Ij(?R4m^#d1g30 z!>kICn=6|-Wh;5GB6z8$(u1DXEQ`p1#aUW@p5T+!sI0}w#W_nQrFBpQmPZTm%ucPX zuD1pL7+x+t_cYnDAi5kwjT`=TcTQb^YXmc~S^f3C0{F1Q|6Aw><%vD`owCY~V`H3? ziclR8zI*=Zh|cR?o<83+t4OBft*#ry*3DDmt)$N0S!et) zTKNg?-s;18iwZ5Z&XkA@2{i_#RO{_`+u^-5)tmqIU7yVG-c++>obOR z7f+f-R>8o{Xe*p1YEt97g==*krYp zfp$I%^ntHSy*1szNz2MI5bate-kv0a90xx;S>A8A-NFCc<&H5pw^P@9;OKf!aTrcv z6sqf`{XF;zroKdeLwkb5yX-(%T1v#I1SCNMiEkp}=LMCPsa`~iYgsdJf#T8eDDYo@ zq->dPj&PR+F*0vr;nMp%i3IKSy~WQ<t4I!hw1+b7VaS zx=g5ltu?g@NYuGf{^Z&7*k~{JL&o&`bxIR*SZiX1@>3{0QoW^u1uBZ>F`F_V7DPf2 zB7LjzjD67u#&&PO%lb8gr9wZ&^jUJnQ*`ytXDR^}Ebrmm(Y|oiuAUE=-PP&vhh;=~FQaHes|nDjOxzks@!{@|ZmG zmx>MAEl_Ekw|@jNur2cD6`W)PK!w)0pHR z&~{>y!mWnpjU{sWN_dgSE2lehA}}_b^ypSl!7WzcyI(Fdx<>PB>zD;bkVXH;zsp+6 zkEGJ6Y^PO|0xOl-o8Z$Tv~hP!1zHzg;nqQ858|Zq<)7Yq zRgvZMoX!*g%j}r*BcqqwrF&%1Cgq3u>(F8tI`GFe^KP)Z7CAM-z^QQF6K>1y88$`f z@Ee~kRe}sZ+~(VD>41SM-c;a9 zL(t;2sgO*)U-gc+&Arw-l(v2;Zplb#OU+1Ri%!}IGe#5o6v-0gmKYrvZ|0}qB!r&A z0njEYrFf8jEon3lsVR*-s89sC0-=P!M3B2lzG_~(KCJN44|RF{e) zIpRgeiL_AsYHMlD@xLfTs37v{Zk}*jY&J)+uFQ(S-_Hku=sMn+Cb`itwCb-@uX(Y{ zAqNdn@p$jcjDiLxS-FA>ciERU|JG7#Q(0%Wo|}htJA0z6nz4YWj)_#-dCRL^IC!)m zx?6*isGq@{m|FYtToE?EhdP~&TqNJ27(#>Uq`6yle#+8b zgOu{+G3C39h4EH?1I6cJY2c1e{H{Cvw_V5>z=v1mqC~G9ll6A#zTL@Psz4zOkh~H3 zt;D_Ai|E>rLLTt;)0T1}*+J=DmIY*G{OSO%PMt`-s!*m%rfM+{bb1$)U7c6*h_@7v zl!w+XqmwhjosQy-2S7n)QNI z#O3R7q!;yf8m{_^A|MKys?9)3?KQ9t4KQ6KG20I~6H;bkbg+{#3+#D15A!I@{jF(4 zLO<e1Le*Ds#8m+{dk`IL9E=vV_-CFYG=fywed~lYaYC z$C%kmtzQPtRn0_KxSKph&NQumTu%osLPkM6`p(H*CfKRL)LY4YXr$F??Q<4rYvE{d z7depexey9KI2b7KK9oKRl)Cl+!K*NehE2gio#hiLM~;QGAe*a~?k0x~`5s&^(>0_0 zpS)CL3P((HL7g?a*bdvaPpJl8iduma6*p!*94S6hI(F-pcS|Dk0r9N&vrq@5@#h=yZ^3{BLCc zm|6tTx54tzQ$n@UcSXu3OdT_O# zgcT(q&`m=xnwu;SKT!HO@o zP8j8ibNB??MRvOxlJ^s&LkxH9Acl^r~2V0ZUqe8A#uwARf%;N>4p1EiUCgQ zT1eq5!#2uLUDy%3L-BfP9(TgVIF_BnX}n#e=y9YVVSU@$Eh#MX395+Jo&7{oDI}m> z;tr@1@#c!xXIWGdNMoEi(9!zGRq5r}?)h?` zU`G!uL{^|3LssmP7>EoGCxr@HfcGYF>W9uaL(W2gX}8I$DR;5%bgzQNCJ-|QWF)Ml zJ!3}oemtvPTU-#8DOb&Q&emSJ!m>2cD8bpKn1{G-n4^!riQcL41~+S#&>n_}M(~No zBmk5Lhwo5E`w_)V+=Lsbb?ig_=w59N`k zz%8Wl`*VPZfb7Z_1s@rc!weHw4!R>aFH43D>!iC|MADdfhhWvIQS+ZA%g zPQJH+F@GEede>EL(ol3D$dsQh8(v_avGj+Xr>J89SGH&X(%A<3g|G%0hstq>yJ8tR zNeyjPeZ?fErLb6oSj@-ImtqzT9WL^uRob!gO-)!O=C58#Gg*PUROK!%h{r?`xS=Fb zDa-6VR?{4Xa^(ms9SJ5UO|{A;4ZHpKMd!YKP^Jcm#*g00G()8+0Tm78=ldW(El!50 zAS)*8t5KiGcsN7x#3aY|obvXFDrRQonmY_RSERwxx)Rrw@qtsWl0a!{;M;_36&Btop$Jw%q$;3m_$4pE2$P4)Gl(`% zl31s@_M^mnyQx^Es=(1aRc7d<<$zP% zw4g-}ol_RFm8j`=^jmsPcCw-guN5mR#&N}j3;8$}f?NYzrbZ=^UpQ^f%;dwZLvld>*J%l6t_p1|RW%IIOmq|!SjI?n&G~MJz+9i7oIa#AvLU3%L zxM*C8TXnb|9YCk1OD744?M+%u!Iwvz*hSfVT_G39Ev4AsL8~c$~4&x6@-UH-C0s09d#?mrZq;Hwi1o~ zK&(OK+j8+Z3`bJE?gMqUj#KWRhC4Lq@W{}YO8Q4}zM_!=;jvRTC1>h6m?sSp%zppV z9M4r)MQ(pSE5~{)$HPLjPN=fQ*>mbS_cQ=py&1)ju_@4Iz%~C0tGxwG_NA6Pd`)(O zIx?Zj$Q(4iCJ#Lt<5g3wb7y+HI2_6|6f%e#dLo=KF3O9=LXJ@ORj`iTVmH$ZX0`9N zoHiv^FNJ@?1l+3Sq{giLAq?Oyf{=40hhm*^JGAoquJM#2lTo`>{cbMe(^qwUrgS7i zXjz;`lB(`W&t1WCSM7}wQln04NB0K7(s01#|I*&KZ9jGBy4_Grr()cE42_98d*#h3 zEi*w4IJXwFR*o9v*=Y_TqktWsz@b^`z>WK=P=epBId;(#uuu>zU?S6`Xf>vl6Xb#i zZdRhNjRHz?`M-ZuG34f^AiRvN7%2z)HJ=o)N`( z{J+Yj)YxZ0S<iB8=n{=@6Tq_#DNi^J21sxu(;C4iMtcV# z;k#GD9wt&LOb#vdSQivWoL)jm%laWThjXRTz!UmzqeK52i%C$^hi)#)4kGoOCYtt; z=Rp<)nDkg8W~F9t@`QZiWqx;cCq@4RGUA{bO@^KJ@7n8#m?M`0{d6abdr)?*)h?eu*dx6_h{mOZ875J0_~Rms`mgw2N6NM zzao+jL>l<`yw{nV)>Ro=;T;hf30Hhv~xH`)N*tua&BLrV>~Lq2`XLrshBO6pU4zi*x8uYD zh8ATAO^?NTYq(;lc9k{oORF3s23Tr1QvAHIdKGQJOjGQcMTb|%{l700CQBX zV}c4lw@;)|Wj-9+3nAgUqsk`=D+y`J7L~!OIE1I;hrN#m{S}HLeNJW!6_a-NsUeIu z`MBN*h`-COy5P*m&mV>VE+ZQ($2qwIpcb({flSKJw7XUD((?H=cNlj-_eucL{Z)39 zMn;eOI;%`bv!m6?8e_DvR3mx!Er*gU9}W>pemEI@bcywgNZUpqbk-wQsuF*R)xPpj z*Ra0TsqQQ-0t)i_oK_#cxhDVBwWuGqasKH!40LKEA zE%IOepH%$!ua^2)XmAqr5x?%grhG%wD{nN$C&~ysjKWmgelg1r{~&(22VJ{zQoVs= zfDooIC{tFuBV9mXuj6^Ac6UkPS(C|*V=VI{J5t@SnK>sbdv=_>@MiIxyQxuSYg1u6 z!>^INw0*J3MI(f@^_Jz-j6pmg?^nE$joL%37+Y%K?FG_&2j8w*x!h4C7IFvimE^J= zO@Ou!v)bBINeh=Sd4TD-iK6`!^?kuPRvOVe}e~TKcV)p?brZ zn$h#Wc0OOhh$KG>xs)Cl*#HfDBf^k26%YO8S;1fWqgcL0+!kWn+F>9H3|7=cIf*mx z+SL(#)yOl-hMUv3l9*$prkpvRHh#wO}MK8v9#RzMhF*>O{2apf;8O z=NfCF28eo3S}+my9c!?!inQgFyvRoBC<7 z;E&`goi^DWdhGd*c95b*ygNvUPz*H=$FgqTbR`FzLE*2{ya982zsVgY>u({|@}y0J zGSjZv%v^89b{%#>tA;@L4eZHWV(lyuhBx;v@h%5TkUT!>8_(pBm4OrnZI$Q;9Z5M) z93uO{AD&M<{8pv+;f;$Cq|I0vM7%PozbM*AbS3UlXpoj%xV$GO(E0+!if&ZmY9y+x%7jsWEdY)45EA?-9BR0M zAPp@tWAdqT364T@P^n*a!|=O~Y4?44@y1BeVy>5X^VZhhf+3P<2W_hEp@IPz+umMI zNTk%eYa*2?1Pk*@ZumL3vPb^?e&;L;D8HTEmG>;0+jVVtaVXrite{AApSzUGOO80j z@27|7q{V9pj_@?`ru|Fswxz~`tzwl7cv?qsZK#S(6om>RrtwmJPhG!Ok@x2d_0X0L zj=^xC!=Q|D4n!=1H!;F4zNBe8FwOV8My1UiZa3>ScW%VKp5N#qxu`Kc>D=ed&r;4H z0;q9y<_EDRH<*pF5Mq1ZN8V;@ubwbP?b0qY{(BouzqzqA&6;Ww6dH0I)-`)S{ zlXee!7<4Rd!L<>amG!G#JWmhn+rCL!awuS@!E8)WkU)CBPF|hLBfN!ZIR9$N`Zc|d z|LETLoT&B{W=xyV{1o@=*fEQ|fhDw^v=`Fxr=Hopa?B)e2=`{9Afci=*PEG&L)oqf zj$&bZFKk1E=H#~Id7!hviwxR|u-vOb>|Z&=Kz^3{y^^vcjcgP7IquQFf$_XPYi*Dxfs!X_$u3Bp7cWza-fj-w7q2*wc5oeWp%u!O2*8Ls5nlcD4w zAxW%kJ;sQXa211t2n}DtgA>KD^jN<*B;(8t#XwEr+oRNsoaBmXyJSP{a8T)b*E~m7 zUbB=aM4HIKt|%zVk#@1x@neYiQp~R$#H7gfq!;{#r#EIfLQP~!?vu;a8RmpxD|f!A z=Jn$i+Z1DrL1TUNe2R#u47CvsWrrebM?Qmaz{BQqu4!MkZrwP@gD7H$tYdp1eLF&IH{i-%>yjUZ)E8DfneV z6&f;*yb9`>6t6#3cWS9Zy5iPr!SvegR5;=E(a`OPb_PuWq={+H{wKh~w`bxwWkARQq+&rGX;aJN6bIu1N3F=YbZAZWnW zyUD568kZHsyW`Q!NivBhZei$MSd#&CZ6OG|n#01ichoN7aBQ)fSuVgX;`hz@$JS8T zIyw=P{Ra28e;;gDPY=z$=cokdd8W!NTdBmx6;y_Vej;&IK^1fgYKl=}I$ubh@ZmLF zv((&nt(I(ucuFiLqjyr8x3PJ)RTJ3Oj9TNCYr^dgp&S9OkD)`UaYX)uk!_wU@9Dpe zqS{p8b0!ML%}&+j{e9CJ2d1MUP#IwgOLwZo#aCRvV*nzicUk$_Vp3b;Pl0Fkg`qiD zD_qN}G~+kv<(>0C@ezSJ8vLV##2i9<8x#m{BOTnxXTK>nhM66cJL2!DsepeKm#s)y z5LTvm$MQ!fx>SnoYPtrWhX^DoNtT;@N?9^1Tuih1#86)0?%WuIwH?TmvtM|bovSJ% znX?w(szRi=)#`0_;xQ_b5b4ArHIxUQrHMm&v$IeTsIrwbVPYoyc6Jj!3iZ3PM^7__riuS#akwd5y74`UB zQ0T_bEXvB;nX4I6w?i zGmF#OZEwCBVLT0~1eS2Q!oq_#&p7-jvP}VP_`*swUp+@6#H6G)#kueaY(mT8Ix|vD z9M1Ce$=aGZlX^*%-Ic(tPN(VzheO|$)n!up2wou@@O+K8cx~v+@1ig?pad|BW>W)^ z{FvIy-KQj$48DJKe{5!@xFrBI{D!^aa3JH3yuV{es1)Q6Flvv)|i4^klx*)_B9vA(IG zEVb!e!y9O-Q{}3uXhqop;_jzhEcX_>3zfOY2I##Yv3#>BU)Ecg^D+WLBVBi*S42$) zRnEkcLIW+c$Ha_h(_NH!yo;k=l$-YCw;Xw>^6?9sug?^W@ih9eRA0!6rUoRVW&KNJ zKH+MM{zyRiac7A?6+&?_id^4(2&2=!u9!@cG||4WH9DoA$&ZjlF6~9IdWDTt)zqM# z3L3~gP_TVnKSogrU`hiFWuh)?ii$&uiO1QjmitL1@f2b@n1}3@i0|s_x$`$?b>U&oHf_zT$T}>+w2=6326t zxox8?$JN4Hcf>TLz9iABu!8U~1#C-42*Iw%Z2I_qJ(>aUei9(0iZVm^A^!Oh#6L|y z$fy`aBJ>Rmk)Obmd?NOncLJx&q$QM{Vts>#aJ{Y2#+&BRGl@^dI6x$N+jC;`@>cK3 zw}!aVjxNWk^r(+^B6vGhlw0etQsT|Z=@@oc5*v&GpJtTyKzg?OAj@Ezd&*r1;oS9LaHTw*J9LI$IulXw+(|uq}0g5yU9PM#-{UUo0 zVUMrxdLNyNg>dn-d~TH$UFj_&+Z(qT@buGF`W{owVp9B4nnuGx0|B`(S=vS`9hSpo z#gV;1>wqxlewlLM3D(vV6zljK(VV6BX zta-ZLfu2u%3ddIZX$7pn#I}$wFt4;K)LkM9fj)A{CJY~33L2T1V%a1Oz~sK8O{`DL z)Cc2js?i!%UukqvWnRejk6sG@>GfA4(m z4N=>$Wv>ofNaIXx_E0sdU@niTe_%2x_wpj+S?C`~?-e@^ZixGyFe7l(eiETTYfTvYgyX=p`2wfDdS#_TX(bMtQ$hH>-CZ+VOr%YXRsAO0P5^7ha5Sg}-0u-r zD~aH$6#kR*MqiJtBRQ&<-;fIW0u#_B3(eK(Vo*3a-uj((*A5Gy=*;PU3wX$|hiZEh zY-xWuwxAQZ5X()z`2BfjI^QylxDwL02o$fe^nonYj^P^*4%O9J^tAkOjwo9$Pd}7fT)O1s^&VPF>Da2^mIK^tp-Jk8JMm*Wm2FB7;Srw;*u z+P&A6(Mb(^lYuW*&WTau6P1%BmMf)5tId1q5yZdCZaV+(khnVRbW6Rdm>7?a~Y_;p@>Su)>|)KKZA#meV5`OW;+-0 zSt=GeSkA$SKHx=x>7K_F$a1oxd;uc(0#v6?8FMZCA`kh6$;ngsspoL8(Tg z$Zx$?Qk3f&0?)d1RqcAtp^-LGaE!^U#UslZ*bD3;W4%4SX@_RfwXEL*`pA+L3uWOB zBi1c%r8F?=T=QuITL_cmI6m4KZ24at&)biQt5OtXz8o%=U)1kc@fP%l)UpF=XVNw{FJ~CK$%IBz z!c6gut=ss#3>XgTxL2OIl+c9#KZaF`f5*F)b;BxkI8FT_rS3qhUxW^Ckh;+^TXGV4 zn7Oo|UHQv!!y44b0&&~W74un&yAau1)sr?3{=uy2IEI>CD;(stRP;~>@HzP9J+<;W ziTP4!YAQygmA?P?pVsD~BBie;*V2-rfMUc-&nX@k3P@ZvUm@SOa)Xs6W557aSf6*+ z%e;h^j$cJj+LV&Ez-CS!NK?3>Y#O-ZqNfdY9AN+eAOJ~3K~z-OF$Jl2%lFt;WS&HU zFpkn9vtSw@-4BK91P6sb9THY0)JdG6(ghDD^F(&=MhkVEJJtyKNa+f2TS;1Jxu_sz z9g|_S9`WDN$LEd!ML@d0xugdE`{C;CmkvEkYMJ?71Wb@gP{6Z!_ez$-?y}#7Z4ety z$1!(XX3i$FL`o&U zDOyvYEh>pQ3!9v;;|~{MY`j>Yx}nlgk<@5R_=Kvd2}Fq*{DO6leTpu8(pOv@IZRtY zjtPUYy-iQfe#hq|<3LBID`LmfrFO$h2-jbfI^%juA}CQ}7UI_2iEpsK+s+3Jcel+R zqPsetEK(CBw=%(whK%k~wiD$9p+7DMs1tDxe#MtycG2;jlMuK+WxLqLz*JA< zYgbVxdeLAmK2iR@R~le~{a9sh@0Wwubqo}t{4o^$Hdj_BtF1|u%ogkG?LTtl?cM4) ztq}lg4Haj?h!ebEs?AX~f!f0BeAE+Zy`M{cb(>tRJlllB=sGvEqnU_-u}gMmc>@zp z>)nD&&8Em_C3RMHY*Kr|?LI|^W|PgjS3iPo@UtEyY4D zPg-cl8gPa99vby9TZY#@9)LR~Ybo^l1Y}#b2wtYZv_(({dOz_-YWY0dtHU~-HlFFt zy)Debzd(0Rt870zZZZM3m7{FwzG=})Ap)V2+2P%Zg`CD)Zw&J0o@)Dee(F-9My+jT zLtbQI&@8pH{wxt<4p`Db2mBVMYz@*)ikIZDa)e7I;oqnAd7z5m_dK^QPK&T81QbDo zBNx^;>Q~dys*#Kge%Bq$JDj>ZvJOlKMO1ic6aM%ryYLj%NceY(EGf_BrYtO-MujmM z0g%DyBPQ2q5Yf2`vO-2vYiYxDB81x_Ux|HV;d!_JSdZfuvCp_$75vhVSgW{FC$1;M@aM~# zrZt&5VO4BB_UI=Io~%4=mVQ1R8iEvKpGKv*mgS> zp$`&!nF8;}{*obsFMW!XFG*K$mme8AudUQeDv}aaxh1pABAe&OU=NN4z(I7-Ta@#v9GN%g)PyIU2Lue< z|2sH=F!8MV0zO#1Vy%e*u;@fBWUzbX{pM5>v+YZCoZBa4Q($+dt79_tmJ_w4WiEXJM*Vnw|hb$ zW1q1A-%tUt$-5=>up(N(@!I;e+~ICp8b!q@*&@7iVN-MB7}B>ZYR|+umqQXJNW-tX zZJZ@$MTM$&V?ErPH(nti`Tv`eB)M8Z?v(9thj?m?o1F68*Kc7J)yzPio0mSfx z9LrE7&H^q|KIL5uDzHV4>|~26d)9Wr1J56(8xosdOe|g7OJ1mDg$e8QVlOY9Xrbpb zfX-*DJY@ZQfTBkQbks2QqA-=!`)!E!Z#Cv1=g|EPW0?M74id!_xCSoQl?(L(zVyd3~hHnt!O>5 zsDSVVhD%oDNP0_z9Xc5k4eq$LG^Xgvl&ah;-x0V~I%`inV-M$x3OgGqE#gbwqNp$1 z$gU=vTjo$@61BD%^`ej)fhBzFHmC!GnNu2zib9_NC@79djqqr6W5plT3gJu8?|y+z?Nc)3Yrx(Yi{{OXKrJw??D z=srgY@!@x&NWP}JwX-_YuJ-sa=)~HMC7AAu9JsDF6j>WOfrWT6c|pul(Juq>DOcOf z1AV$Da6}FxtY>E|C^|J?w8W=!f)=abvlIYm`q%OhMp*fkHSziKHO={1BN`h?#gfT# z81<<8XQN$La>C)7-(Y$v6E5uM^+74x-N*~MOsF$=AzPl8+W--J*h3U@{WaQY7VJYM z6R0X^t^y#J^mNQa8hA{lvQt0gkxL(T2q|@-Z99IrBjre;lqC5eg^%+13h?(Sj%>rrIOUhGk zAn3f69xo>76|joxfzi6+0is{7!e`6i$J#cBPZy|BHBBZ7^Y&()A0>&A&NGE{YqZp1 zg6<`{IE#4NLR>w4|L43#*SztT)qi5@I013VR2;Fig43R6w=afB60=l2@%?kZlxWPd}fheeJp_24>`8+TdoZBbPkJ&YJ~ z`XVOIVYKec+fuOXZmi`LYs!6ARG5p^NqZn!TaiH6u%ZvwtSOfK{ylnP zX&N_PK2+&dxUv#ptvkz;e9+g|PY>rtpXyu)!$x#mon!E>GT1pa`Z~m*Na^Qn-rUY8 zcCSW?Pp)!izfZK$t492bOPNv2&kEtq4$VCF8!138$u~!Kca|`RC7nuxk+Y#&Y1Y zRjm13L>!m~qNE*Ol}d(R^Im3k#B;0)(}^|IbWG5dsdqp{reE%Cya1%BZ6xoF7LRH* zsy>)gRUN|zix<5DqT}M~xu_*Sa}OJagNZO~DTiXnG}&^mJSdc`HeB7@(wf z(gg|m_t8;Y@+w|_#pdihhY;&sBL{P$^=qqvB6GRwH5IN?_vY>vms6?hHNfevrDCA!NK`KZb<}T(+ z5>Mtw_@4-8Bxp@iIbvevPyqPY>Js$vLb8&l3}4`MFbE&9oG!}b5=m=-qGl{$D+z#T zl$3NRb2oyAZPKXF)u47d5!1x0JrR(2|){E3iwNzpN-n zI*COMrgxu(_(K{2t}3)P(k&Y|lS;gPtz*7nywY0z0e3(=+!xB6o#wREMQ10KP*9_2 zO;nDu>Qn2Axto3zm9_{{1{WI?nTDZV%h2j$$E(DS4Gn{>>Q4@PPMW&1?FjU(5$W|- z5hAWsQpXs`&%7eO=$tykXq*jugPm$&;(X6CL{LaBBdbF0w%*Yd_kIqO*FFEnyjtZ9 zx^rEn5oU}JzQ(TOE&iPVY!W#o!8!ux73w|}-Gej-iLvTabl_vjNv7J5bT+J@K;7jj z0lH~z9#)hc+S(9^0z1)r!tIYrP60-3{|jT2;jo$=@X$!Cmwg@(riI z>RIMgNMgPNiJom))u5703c)RxXcHW&*BIX*ooqGMeviIDGz`BcVz{^@?+FJL{;fF8 zp^_w+rZaVD3fy)nib(ozBvpolbOqL0lP&1 zwxK~rk{5xBMa-f*7=qs9YCZvlR<_7XKuzI)y1R?p!Pb&VT!r`!W zU{UAlPqPjV>?!>7dXDh<3woa%>u&27HMJUl+!?k?FHI@);yZ{#WMA7f4?l!GrozJ_ z$?G%+*YdlDIs3^4Q_4%Z$FwE0Eu=AvTH0UB#Jg}rIFh0H;j%{%;xP3Lwl9TQPof@a zJ5oK^1!R#@iqmGht_hSK#6+&J(|my88W ziW3#VRQsZeEZKJW-ioC3@Q z_Hv5AIX{o>z~Om}KJ9(neKWd^pSVhSMT)X`LU}16@pkgfm|jT{j(P|gBwX>{rOXBD zMX3EEs!eUrvM4q8CXdQKnY#x#UC}UBm_T-DHzCJGtTd4Qx{K#q->+AGs^meB2lE=c zyrdKFp;URtXh^I~G_qI>555Bbn7eOhI&-kfYvKTvf zKJ_YKgo%5Y)O*9|N`|ZJOJJe|yP4Q2Le1v`Yrj%*C23J+sqBe;XgXFgxMH%Gz<&Gj zNPV_%__&A&aTaVSu@p#XXH)X4u>kCPZndX)W_4k=$QcJxX7Jt=A-)m-+y{Xh3JI!G zE4pnVcD7y@*6mtJkv}yd=7<=^O-or-X_?~ZWVJyoQGb`%Qz`f^ATbh*wd8!XAc2A8 z!_==EXRJtIKxOg)F?FBB#8mBYrDf8p>{z0$LMf2m(nPvLyVd&=a9Z+~N$Au5B8A__cJALu-w+O$f6Ll&c7=BY&oOOKaq7`$ zyW4r+dw7Mtr1Ps)bZ$ss42472W~kS?Y2%U$kMF?xw$ts!A%wFtT4gFNT}6d5dQ$c> z;dd06BQAr)^@r{pq!NAznzAj(^$@`{AqN|YfnU5X8C%VRLg8UipE(^RiIl+aBYG>B2LCILfg*ax=Q^wg)ZZo8lkQ6fH z>dUs!eSbM9Zc&~l@tGM@30f=-SX+o~lp!7womQz>2d(x?Y#R>*5qgDcZX^1Cti5Tl zW!Y68xb`{s-Z$oZSvgcz)}SiYAgMHzH6aN}%mN`p07A40+1SQyXq$%UrXxDq{jWQs zhX{Vy(a{)(!GUQ43=LQ^Aepid2o<9w&{U-XP1IbOmGjGdu zWxl-k412HPTi;rHDh)v?DVbLpvcp3xfZ=5@7VCPSXi-^Q6*TEwohlm@SMMyFpn3U5 zTWJ&0;q`EPDp~!F)+yjzbNajNu3dupCUJHWQnxS{!5sheK=N{T`#-cTGv==(#S3G$|XX z80)YIpk&__VE5@mGUK>_uv*WQ!VuL|Hrk~g<*i^F_#-j+m=7m*D6s?H7MPG8C=b*( z$j(>=;GnHvV0}=iZrYc{i?E9%@E+9_Q%JJ3o~6MQI*>pwNa}$Z2Ky)hxFm@`83CO0 za)lvP*eS9bamHd$MSM}P0~EUM*iO5nM|?#23v61zj*|ORBFA$>W*RK8rVJMm0&A`H z!W>~z8pE|XZHQvHjx7@n=ER0;0`#QN1>@Mkl#(~yB83G&Lc!#35^W22c%o*2mh^TGN&# z;x@V4?{KuoE;8@-)(6DU>0iwJe2B*?=Zf3`}<@KXLg~ogUNokOJC}(80_= zmb|>h+*TlVRMBd~8W@=c6f~XI4&@rL^=KB{hA%{{ka(vK2=$3lvf66{w@!3E`!m^! z3e$-0Twu{MWx#9Ihp&3}?V-GJ3Ei+us&E>=g_e;MhUYPBO4yBLWm$)jte%#$J5YvI zHzkntdQp-PRG6%o^_ax0kmWuDyTS|@h`C24&wv5OD2XJE@MLfAVQCgq1n;j;!Fm6H)^Erg|k&QOTYi4W+j;OA! zPdJ%bd#3hQt3|e&+?+xbI{AxPrR6?uG|B5^0@|lqs@~k_Hia3hB2<*HnS^MFaOaJ( z)-%At4ixpBeD=ur8YZcUhFbq+@lRigyfQkkfL&u^SF&9y6w(9{Sl!t+aV2G`ht~^6 z76g94xo_2%t&CA<9!9D&sV@llhkT@VoP zWK1ff>w1VWFnGd9p#cRQW%EK5dEN(HX1b?&MXLi|&7B+sA6Q6~7 zV_u9!CoSHIA9`S#GJRVTNi2=0}9NOjRP53)nBJNv69bE)Xya349});EhXU z;6B<|{kmbT6Ta;OVJ z%89I)&KQX{XCr2wY?_vISSx29)?jxSgi{YjF?1j+IXW=IaOlWj9|_xfN={w4F3>>70Z&cO4C?NPIlajKCltwxcZA1?$HcmvSv~Aqf9ns z^0Ph0Xkf;~Y_EIfT;>T3<#aKO%&Pbp0;&Y+GC7QUd5FrwcVdjJW>7FPYeocFf#Xw} zWOz0CNSJfn<5g&p7=o)+;{D}LJGVTuAdtW(R2F(*ML&w_g3ug)7~~DflEo8?D0Sdf zl2u3WEFz0`J{^0Y%S@c$Ar_))p&1y98G-;8gKL6;BN&)b=q#K*kQ=rF4qqGBhcF-& zN_#VHv%rkZGTRz_CxXbC)$_8$gngbYnxnA^^>HLf*~>m5L@;SIgl45o6lF5Y2gYm} z=WxnaUBHPcE8-e61tn_LfC$4)&`;K6xR=aeYf;%O6H!Ui!sH+%&J=`^I>GK6Acjqb zW%^-#O)x~%yUZd(5Kg)v2QPqi_8`(`+{tDDTi#Ii#cl**OtfhP*3>7%Oa+Kc8?z{f zZ_PY~l@?P0hyG0GdgdG<)eNtvl#`ZWdME^0U;VZhm#}DN9%RF;u2xG@PYLS34SAhD zXh4KNRpd$`^#JAxkQ-Z+7{aP2s<&ngQJBq{tWYh~dqA$NaO5x7!{W_PvPsoCF3>`YbVyzTn%0dcn!ZjI~10{q-%%W44kVBmnjdq7cKw?BP zGK3fanK@k`R4cOdg5nV|TVqA-W3{PbpiRss!Rb+VO9+?7G0gEBUdqTBsBnFG9Wb=` z+$7J)+{Z*%9>N?xQilY_FNVAN4tT4mjb@-<8cDD;tB?2?5lY)97~C4ca;=?_@@9+t zur)P1?E}CuflN!EK~u)OC2Gk94XSLKP)pZWW#O)78N#=#9qg-6=wfyvSVpB9CI}d* z@HsxWjwdV94=>g zduoDP8m+0bER_^z%U>l!CxViCP%`?I%>w#kd%@|r1}c{+>waONf#xmaCt7P7d=8}< zb*En%v}Kf0Ozpkfj_L~HL=bPA55*?W81;{1DYKj0K zW)lG8D=0cr4t*&%Lbn_U`zYe##An(gd=8uTHR3_Wooo$n6ZPt3bLLgtw!xufVI4d} zE;(b^pEN1M*DW8BjEx+{AlZNuD?N_?)M*=@D!{)-_N|e1h^c!1LKXoDN@mV%o(Nv= z%SA|;Ey*sMGF3NEPFQ1SGKhjYBWJOi)+w1R*a;N|kae3_#Jgl0y2hSR1y(mR#*q<{ zGXf_Kopn0lx&t%N`h_VaQ!n5Xy}J`bYqEZ-$dZ|Gh}tlWlrgQD7^>0076TXMzJF0{#Z z-cAO-Nu9Zl&Dk>5TEA+!K(fj`8J*O#Da>b$8FYtqNmh%XS>!oqcWWo;4DS$0>rPL(#*l{vP+M{DTww-9!JuiX} z!cw4N8v$;t!h&FDL<5mlh>8f=rp9Cd03ZNKL_t(g)+6A&YPR>@DzI{g7zVQhEH{** zCE$oD!yC$1VxS5t5X&#EeF;kqlbL0Fh(SN1rSRGIdwpJ$F);w#5hhc+*(C7*ES}n` zX(fOr1DeB+>AKE4VR23AHI$vGa(vj$o#WO&=^A?(!1~(pchae)=Y7ZV;=y!sZmotz{?`C-D#g? zpigZPr-BLdaeY(am{{LY&&AAw`EwxDVqpuW7KL57hz9ZYe96^9)BJy90fXi+wH zEd&YmjBGVQHC7#uPlo+ELM#q;Lepe`w_-4`kU_!*YYaFzp;BekB-!Wa16S6nrce^2J*)eqyEr z0^Iu*BD7TmjQY=p&Yx|*eqzv2?P_mo`q9HioUta@tSOJ=7;jEM!9)hiu&LMhj>bDSwBP0RDsz(5S!)?Qb%#36pm^7?_ zuBYBlKFgz4tVU(9BdAY>euuO+p`Jmyr&K6#x9o=M^u*qeq(ke26|c<71DS>-E#mi=^fx4BUS?iWV_Q=OQBG0qKsEIo6Eq zOH=QtlB9yDpESu1(=``DzUL}K?&bs``SVk7JESI=4-Yw!r(h{0VB&JMuqVg^UHvF2 zs;E=6ScshzH^G22{ey<4J1{1cL|Ma@r~~=PsE@RTR3MWTa@#a1TlUuBNo|0_Wp{mgx;(BwO2up6j0l-X2R)0u7RV4Ur-S>exF?TZ)5b5m4N!DH_m=i6LnnpQQ z2&BNTL^mprX_IGC0jLNq$uW=KZLUeE7B7{h_z?m%eA5Jr*5-_<2RYzq^2Qq%l*;im<;o62rirVOWo1C&pM3(#+I4rq4A?vz?m3r=wYl9!yHrQwj?rw>EJmW zipa#|h={<`o`4%77ZFk4S<4zta??>xRCI)M)KrkLsnRVR%zzd!cID*zcjJMuCdDDk zKXH*msC%vT0-WDii@+Q$&{$ljm63G{!&f$4^wbS)O<6KStLZ&xD58W!BS|{L07V7y z_EC$_q-1Po4sw??(Zl3E>_S~`)Ja4@tN>#6v^oG@Geitk7%sr4js>q^YI)3HM%*L; zocdlJF0{+9%5}w6ne8)KkRb5P#gw6@Boww*6iTe;L_D3a*|w!x(M~2sZaz>5aqH`HH$0^4lpJUT z?2#Cjy2Wykb>A0EY}#r|rHPFRb$D>HGE1Z7mnJ20`0!(?!|=Gpvg^9ufMW>xrRrhN zgm5jIC1?b7u{;u~sl`Cb1uHf2Y=Zi-dy-m0C>y{JxygH+bIH7mQqLLNGC0ohCjoj8 zGY~pLWgG!8v2DbXoKcjwoHWM-B4K#cQYni9L@Q7kaP~yTtsTiQL4c?mxbp$xtVd>` zh-Fa5pe$?zYs~~Ly*)Kfolw|kjE43SOv5?=1rqT<%TNonZyLVW@?g(T5Q>0_AaZXvoJ61T97Zad=pG#%I%c(Hk9f-$?yRKWy*OeBEy zBq85(PX!9ur@V<4J+`(KoWufZa;HMz^+N|(+hOknnC2ggS6My8hvysKz>E826LLuy zvv>>%bU`F_vp%b!>Kb14<~k?4+&A!v1{0x?b)=gIN7rxe z-`d-~wR?21x1SFW=JRg(q&@6B{dQ zn;Wy0>H6wyb$xYxZRPCQQ`_rn6A#2rKM-nZZCW=%15t5GM*R%Hfln|~ zD)Tj(8Tag%*fVRvqhb62G?4R$Oi1rUZYI%etsNd-63jNCrvf}l0w%;)sc%JxX3R>~ zKS9TQZzluE42M(cA_;SU#Ip=J1+_9sfjuyFw}LY$sRFqxRoK(`fEc%q(J?@7$b^}W z*&kZ(XU3d@Z&Px*O_-I1>uQrsbu~y(j3dQU!?NHsE|01T-^r1Xl$4GkBroU-P+nO6 z1+~aQnuzvaho9CXGdw)o#!VQhwN@Lsg;1q#p8y7iS@@+z&BQu_jGlx3)=7&!Gdt^) z(}rL+Udc16-IzORzi>Km$nA*{Ilh;kWyq^4@)xO7WUIc_r-IsOUS}$%p+SybSFt0Z zZ3lrso%J4jno_vy7Ct!;6{A7o`bb{06UH)Xop>H&OtrJ$9Q_YoGU3Ri(Qz>dU zysGb(gKd`oWOX)a+i9#B=r8kb`Rs*jpa1H!&t1I!!qb%=lN?lFWxx3 zvUjk5u*e68(k;v6jPk}jZ3m*zHf!s(1m32}bbz$BJbu>qU23ytq)pwxNw-VH;6Rzp z(Ji|Yk%#tmUBB!~^M+cJzwge~m6cEkVYOwsm@m5;gqyY&KPHp0cRZH$#og=gq%L4?UiU^fCy0mj51^H4qcYB zclD$TwL;XLg~^W2V+v)p^3c8q>1|l}6C`qpGY%vLR)eZEyF*!~#F!6^63~+P1-d|Y z4PR&X1a0_nOtxzX<|xJ_^cB~Li#U8yW!W=rj&y`sU}N(QvLGXdldECi^$f|LkPAkM zKxx7dg1-SYrVhUdNb-nfnX(zYDX)y_ve_wNfL9e77x;jGCkAD$aAc%oRum8`X*j%U zv&y(?LTY4Y4Y@hgst|1NCjeVeQgSo5D4_r~I4`76Dge$H`O4T>n6)}3BIgJ{+M*m4 zi-1fE(K{861+_TGfeczj9%{Tts3hP!%__Qa)@f)YWc# zVn7vu#l$2#bn@66)y#$T)>)eVLnog(Rj6-Nb%g$-ha*dX_MJgwvuw_<7)5*+Fr&Ik z8dN%Aej&-XJr<9PPo3(@yFFvVCUO6*bW-O#{a-#<<^>wmjt+tma z(KPL3IzcPa?)>Q5m7BM&-@3WK_rw>TdF)eP`syp+}k-kTI?Jy50=#x2F@^> zuFTrm+H7^UGM%+Uu%9+%>9TF!~618RC^vqE*w1Q^5v z)ZRi#%x%%AqvI%nA&(6L@iKTy2)1VHn!Y_;D$Fg6RRE=S{e5}YI1fLvf-BGJ_Y zbT`?OQ86*nqgl~&PDDH)@S3aveC#Iat4Z6?LUTo;f>^-JP7aV<)97F-fB+Ag*^Wl@+d1ZKZFsx5G6x7v}cgGpkD)2Qmulgy356o zgxIk4NQ9ADg@~oy&Y?}r4IwJ$7(qEMsmMhdydlGc^zQ`g1(Il4C)xJc$Z=eCnXxvQ zwuHC)EzXT1$(GPv{F{?xF?{djmi0wpJAA=sD$M{x66Lcc;;n}XzPmR23t_EY){*ltb zO_K!Ux3`Sso4}|-zfe;}M`C)1s-8UrkJFSv6&rHsTvLzYjJR5TE?9-}QO-eAxYEpU(c+GTk?ve$)(&nzm%x@i7tYv%~ z0zw4r9j~ov#`;UopLy-8 z?t8`Ex36z)zvRI?-}Ks7JapHYFl14ryj*t6ekpYWp4Pe#Ak|%2I2qXK17aN^!_A%s z<|Y?H0CH764r~M4y?fk-Gsb$T&o-72a>)c_1pMwL8kY=iGn3^E(67ud^HBBLlUj-D z;aj@M4KuC0NS@g}Lj#syyxM@Ts>HYezUrU+%>-n7RnwCZP%Kvx)rPxzMZZKcW)U3j zPVo1*RQ~{12MY*Hscv!A7$xazbj(moM%dLAq&kL)s);0~k&r)fmq1%k@8P6`1ePI8 zf8CESF2muNb$FmA+Nwz)owkuq0D4MZ<()*q|jxkwR>M;`(-O!y;_A{bwi` z6{#7Eoe`_}D50Sec?FQLB*XnH!g`+_-W5*~`~<4@w-JZLY7cudZ&c&(>FEGD-D8 zWr0Ttw1q=-(l>TGfMs1au4AKYWmRjHP;aL?X<1cbVr-sQ$10UA=ui$fsg=YbEt4Oo zi+Dbj9btdWX(ym(`9xZqGclQqtZyogW zMLTWJ-*)1T)7!HXCtmrghraC_U-8yQ9z3zVwYIskKA9?L^vk28WqIVJlseiHYjf6F z5Shg-tCll92B>jcg1OQqmB^;x6%LtZ1Q{0Ofs})C!QUKUh0$9w?C+Rwf>Hp-cM{X zM`Ipj&rd$v(~zY>(}h`C)&RkF2kAy)!el#B=~=f}Z`3+DX_q?6qlVX)qKa#=A>kz% zYzx8Ef5Mbwgoca~hfaNEWJgoS@ju=RY0^fNGv(s(^nSlS`Ew;&wbjFFIn@g)FiqoP z*$o&Og;1rE1U8wv#X=AcjLnSlVk1f}GqWlmvy)>Pe}a_6>vTlf9<>@5D4di88>T3u zZslxKPLV&EnQB1M$p(BVWLsy&SKCA3J|iOt))mkqC@KXdg^=qy4ncbyzY&4d9F@sn zjO1^N+Q~T{nE(N}J2&sCyWYP_z z(^oHCe&UI*U3>1uC!TuY10VV9Gf%$IHj8f3_Otcb+VsSUwUv#vc2dvODKngMH(&IN zqP#jfnHGK54zHe0>~z1}*c6f4`U<~2Q(22ceJxKnn6>Q_#)D(l?j*snaG{c_UdSbH zX0{P^wO~_SuSy#ej1e+Wzv~CiL8r@or{8p49zL#HnzX4cvohMYPL0dm!BMxrf3$yV zHyR#B|&hlDD3h0!!k+cb1nry0;W z2DwR*5*(DaM>umJhY@g&0YSnY$Fq75#rfEZUUOa%EV8mDDgDRhO^mpPa&Se2h=e1M zQAraH`Y{sVoO%y4+>Xy56>+goC=QIR8yP))iT)0@fe>!EBp6*N2V7?Z8M|59)(ek;dcetN@YmDZ$m>E~ulry*e%gb%}nGzYu@Wo86;DW9Zr zYOrRfho!petmWepPL4`4k@)mW=26LniEd=U;|;fjh-Ik68m@rfi6dP@FK{i3MB5Dt zGGnqv3Q8LZV+Iykt!a|Es*F;1qGBU;eO{J5uJU9ynM|gYaSS>4^2IARKKRF<`tv_~ z{L-_}eg3(t&pv;(+`F~1d17m0^Tc$0Rub{$vg~rvrM@q}r8*K>=2B?grffXfr7|dq zgr!zThJeZwJr9tu~7^ZR>*5lK4$_R z-re=J5Lb!{-1^^QfFVQO^G?4TuIf9jc;vR;Woqvfr3Tlz1LV_>#oGG%Bln-XX2iOu4Hnquw=n<}{28;q~_1)wx9Qz66jK3y3;3(USc!t4HWk~Mx36V8J)RYH^kIi}xMW8U>BK#i&N_%AM z2*^EjHtGy$(oafQiJ_!zAOd%iVtrrgOwzGmsdW z#)X$89Cc+zE_u9cr#z_4&roS+-#^CR++fOt0!;O0QE@)K%CqNE~O&5tEAtYkJ}_rBv&ZA^pB zEIhCA?qnNn0>Iecy>m<(nGKbhjE5ww)%K}x089^ACdcH6r+A9TT*8A@$NZrUy{n?<4jL&Ilvy2Nnh z?&0C*zWB`5i=4n{>R?f?jn#{hI1PVxb(gQonXH4Q+bCqBl%-wK zfAxbd>Qp;vX9Me~MWTVy9WHJTl;hTZckA%Pw4X|Q-$VDj``h2}4d3waT`xKR;5~P) zPRl`d%SG9+tTMU2(6&0lQYU8RGM80)+w@u~PZ$^=^>xor$n$e>zFZFtMrn^}R`%PN z4+ZB>Vq3t8L7E;-Fp8>#JIf1nV6O@5J3I)by2q=atXo~ha&7n?;u3;c2;@oVmS$eI zh?Nd!j=?J}r3}7o8WT(q%3z|5t{z!ZkXXH<$4E#BeIwkD5guV5vC;4cm@3AIfS!y- zu@ekwpk>e*LsRzLPJqMEDkGVr8yF9Aeb2lQ+`V{^9koc~M)erAL>#cj+B07X%S={^ zv3W8*2LxQQ=B98d3FhU}6fHX>=9%#k6izLcgj8ECNk1*gM^_84CU91(NCa?~6gb8g2UQ8dzK1NF8b;(-?NjPD8J=G>0FplLx zEAJ6ytdC*%#7%>24DGjAY|Tl?$>36B%M9=BancD&J@#~^HN6k@)qv9WI>AI_zU&4) zudb{D=F)|$Hy{1|zxebg9{IwHw4`$iaVv53iO^&^mD+R52=de%=|f~B?xq6cXAnkVs0uv!N0LF+DKMrWfruET2nc3y#Dcl> zLm*zJv@)Hul8*lX03ZNKL_t*45lngE(zO>aT>X!ae(ZNX{HND1UcG!{zL=(yXSX)D zPqeG6MWXXXE-OsRvnKV_=nDT93RqROdMRpR^|QK{xNu69MIbaxCEqhPO9*yK56TlJ z!=ICqySD>-nCQ71c3Mr-+hNXLa zmGAY#RjJG!)uV2hfnyqk1m6wyE^uMXp0cM2;4081T$ZV|Wmho19vi@@u{l(URc6)n zodsneQxdqN2%JjHLL2uvPNT_ieKH>lCE1P;V>BWbi+Eom!r+^LC+arppjfqTwh4Br zpw{aVT`m}vW?dAXZEg{e)f`>7i??c8jDprnBnD&OHaJK)tqqJJdjQsFp&14>xKE5F zs>meA@$~qkKq|--2w9`T0i_BFx)L%#5aS~Oj2L1_Ffw{9fJ0tSoW{g$TB zHKD|wVYhY-6r06INqX1PvEozfE3aeRGwSr7D4A0FS`);_VeX&Pl zzV1Lkk&oq>St%6SF0Ft#MnvQ1UNTI!Zvg|TWt7}u!^pXXp9a1R=?Lc4=)O-b&Nx-f zSWFnfqwi-QkV(A7%_UJv>G+G$lJbZK7Me%ADvf9dWOBSr5epiID+t0E7Yu^T;H7{Z zx9P_GVO&Rwd0~}z<{bW+T=?Cv#?m}auF(hMACR(A1d+LfUt(`nMZJcr+N zXW4nDc3Whb6W5?vm?$i&FY9PjVRe>=p68?;7O%Hi6|t_J?Uab<(xQ5lY>7*ynPm)X zc=7K3(ajq-x*I#)QGW1c_q_Yt9(mPkAO4LnjXc+dtg#J9s_UU9X^+w1Y zF^h~ja*Ro2dZblOkQm{un<&!eWf2TMR4@wz?(jR@$0 z?gyHWNiYXx!BSDP0Y5;eMnujdOyWge8gL4gVj2K%RIS>?e3v>1snG`5Zwgg!AwkCc zM}9{77N#God0-w=D4|;AXL01q3I`s(!L_WEsSPTak-m;?SRvh!!o-+S&K{qT2v@3*~Sb8BO5wlX|?X!CIEblSp|)MbK2n4cK>u!12yriFX@ zmw+HNWyd%Y`7H@25L1Nk;{D` z`PhZ|<%pYu-B|fHOlwI%04*stoaL&$Di=0ZsH&Z;+z=z47A3Tf0pjH&;$BfraCpH1 zJOoQ4DS}>jFkw^{@zw@FMe1wF=-k6Cz(W;MEVyo@LAf53uFHo6+nOBX6$}B@-ojcK zXo_R~3`q*B;7azo5VWF}QPD+UHqgloeK54zf}VQ~;5|9C7NYf!SOloAF7qnNxQPkI zi)l`?VW$+CKML#tp&H#ttXH|~fOFYbc-E*@FkB~>pf;c?`l#N<8a1h9lI2>O()Q%G(>&(KN&EG0+RF#w@^}m26}xhmuVQ z?&u-NJ?)-bV6=bpJdfzuT{7ua^xj5 z^}^tTPbdLDbt1xxz$=49t)9g?m*5G4cFDNV6@+R-UP%MH@{kl&uidFh;j+%moRx(R zIxRB&$)~^k_{SdqjsNnokA3>DhYY&8ZEO4d_UddkcV#(ASGSE)>FYVDb+=9IePwV= zlby%byM7Os; zzkGG)nafw7zjE`rr!QW*c=h_FYu$XYbL-ZHE4zR5;`JL>ZWIfgrs-t5vavB+UtL*W znQU%0lhpQQy-t}{GGKs`4>R$)vbwMFDK{|HF6lyI(R9*~r}u=ld|Vc~mdBJylx;g5 z$WEWS-JOG-E4P~c-9b-pfAg#V-aFs?`ZvAijjw)bTQ>#iyRzt~jH-rkH6L_I< z#A=tAu+;K)>#Cvy4=2)cVKQj36>h{zcb03^!^a1K79 z-;;S`+Lt%NN0~L5%XRdt!O(3qDaR5IfLQ|JV*X}ZC7VApH%gp{BakD~d{%vcbDX?H zNQvcbh{x+5))C}uz%Xk7Us=Cn3X?;`^8t(;x;yH<{yh#H6mej#qrRZHnK>q6MLQJl zoCz^pMrISj?=eCU!+6w)TbCIQ4a(v-O)mr%iTl4<;o2Bd8gjBgBuEHRj;W8Q3eg78 zLp@oM0m0*~MmMs=INBtr&-B3;C?K^LDh;!X;6c!Hf>mc40iKeAcc>L1)=0LM5MxQZ zz|8J?;H?+hyiQXu?sGW#*$Re46=!9_1lzAQ42Y)Zu;8kzZ#-@%qQkhh0y!U-AFgsJ z1H%@7H>-LkN|IuzvC8lm)pM{it3)GvVP%$SQO3l>Kymk>P`6IMt&DXsK4^T*?Qsl>M)IS(!~0?w-7O2S5FZ z$N%#2C--*ux9>W=apv@FWg^RNu_$vcT5R`Q!%(gZC~akg&0T10dzVzNEGJNuVnnSo z)NAH_SN8gBb&R2$H!?}3lE1%yba-&McWW>2?XPrs(xzo#JV!%KPs= zadLZYedFBS=gyzoKC^vd)-+x((kN1P0JqY4eS0rDl4G#u$*Qgl(UMXk3}`ypW#p>{ z=gGiQfAsNn9*0fxt)uC6iY6UO4XaOi=V0;lb1%N|{PPF9`v(U{7hbsXvB#hK)U?(z2AA)xsxh}K?ei1nao;S zIb(oT2fwi5irF!pE8C(Rj!x3Kg?u1^rKo-o>cgzrMDHaiEA#hV?n6p=thO9@0o^kk zhY4^R`H@$+S)@e@9?>)eD6n|&0|`EB*Kqj*IYS&rf=o$y#9t~ZrqEEk$mdF-j)hQW zSA`hK!UKo-6NE!v!UPz#D0WcWgVU`8-uHIeU+?H&{9d=sGY8_?8>1(ZL81HAW3ZQu zBvi3b+_Zp(^jb_hlP@<$T4V;|H znjrx)=r`sX=9s}FeI!BI2{U<9-AJ0?Sk_1j*F9MY>x4%Ak`?ch_PH+gbSwjTLVZI> zx=CPRT^8muSg4UgU1Ve5Bsiha)k51rq7plng4+QBwMSV8#W2K;^o`Y9ZIhkBRU5mk zG;@enlXg1%{>866^~t~b(!ct5A9(Vqr}z4%Ik|cM?8(V&rI&7bxPVJkoh3b6Aa`K- zwQQhRm{izW_|hp3MKfLM>uQhbaKUWSOxiv-LnIxT#s1BkyEk`bzi(#Ey{9(sJiWDY zYWv~WJouJ3yy7hnKXCi0tu&jg%qFwxGy^D8nRB^Z)|Ij9!i}a4jV(N>WUBEjYJ{!~ z8<|#1&|yF#)ywn~I#zado3mK#*L!L!>(q*YzqPGQ%WfD`%hKvwy0RJ9;o`8rxpV6? zfBob~|Kf{Z{PI%=H+C*xxcb!fgM-7PwAQR|Z*Huwm+i||SIV-PQs~g>FB}ypx~!Y8 zCp-8puX+Q5FRhZ7+hcL#i2y z+8T)%t_M^aP~$vvpI+fEuON&PQ7lk{eSl}EP-};n@GwdvFj)OOTZx-_VUW$JTH*rC zFaVXfivg|hQE8xcVrQ({VmTR0P@JO^V;-k0j1IZh$TE=H)}mp;HV2N-a99gK$%mO^ z{B4>bEC4u^8Df9rF;>^lI&P9I@pb#+M>aU2>&7J8Za+W~rhh0RjdR!_83g*AFoDQe zP1Zdb=uUM4m<0pcdSGYP1Ga(j1>w=Sg_TQb^KLEPQ3mZ1O5!DS6nK!P@F;e|t6|*< zl)_0?LV=4Buz^LA7zN9BngV4S{=gv`qu;buFaU_hHg+(u@OBdTLM4DRWayh_-Qq(% zNicZ@MwE2R14Yk1ryx)KrJWehlx9^Po@ctX4~>eEQ{xm%a2_`W`#1b3bG(Emq1Kqh zb)EeQ4g@$C0sK@5Y$YWvD^%zGa@J0D*UsxVcYpQ$kNwGGpL+DMPwyV=Z`^Te>&&T@ zX*)Q%vq{P;o6W|`%KGYwtQ`OV{=tV z>NmaR^*{b2?_8Trhlh2`?r5On_*1LvZtEN?lL$W%*K{JL)6*((npIWl`(rlN6Q9aP@f63-=$ z>oarj5OD}Emp3-*t({Ub0|>Ws;Sqq1+~f??4`UeiI#nwS!Gonm^`7hetQDbWuz876 z;Yoxc#ja2wih;F14HZL8j7%Y*m`7JcKle^m3{RHlr~#t1SuAYIh6bD|mTPplhs4v; z(Lm7<91)~lb{VFfJTAi+(f1}&D27QQx|m8c^mOS08KAY!gj)aAKXrzC(ety0$KfU>homX2I(FHWs&ATUnzWOh!=tCa_T2yd%OCo^M<2Vivn!h$cieGivbL7X zDuf|`bq%(#uG`^g_|zE~4SKEFaYj<3huD_2ti#{!qy(_0E(6)Uv3K+O&f@0&+BBU% zxxR7o_Sd}eGF%$uP-ERteiNpwsCTM zb!}A&4_MBRj%t0dYN9Tb)uoY1%RQy7O<4d_4ML|%_SN<$wGK5HMq!dG)7fNpv~%my zg&o=3J9ldBJKpi;|KXqh!2S2%xwXFDl|$ebWoB+;gD169y*r!77eZqnhy}Tb4~=T% zPgwVg0RtmO^f$Tz>LbaM3OInk?UFf>MO`Bs4lx$rGSX;1-mXxFV(se@&NT=nBs%OW zfeP#?c&S5BLV9C}fax`v1<_y__Zn3)!#dQ_be)Q|)U3K?FH(;k?=rhvj3A_F9s z^0Qa#Lm|e5;A3Nf9-$qHwed(lVBWcIahUV?xn+Ka@)&LdKw>kx+cm(Pn}N&S#LU0$ zB$%yOD=0MKJ%R|T&(QK_0~-LXaqfV+EpiN4hS3Cuo6OYSZ8uykA%;qP&ZwJEI!s*` zgdvVbk_So==wos%;d}i!od52EQ!jzXBdga%`r#V1F)(X?TS6TyxnYeEC1u-=03HC? zVW|!cVtdK|Ol4;O%=skyaEh=4R#meDGuX}gd?laN+4{g#5Lrwyf;<~+A!Abk2|Uz? z$(Wu1a_pVX_0WzW&Lp-$o?h25aCT)yWk19)oe=T##mn!1-yi(HkN)K+KJmnKd*j6U zb0@Yp2AM36%0ke(wL)cZp43>eQELc8H(T8%+ahWmp3QaM_9RW)5{Ztw<-w33U%z#@ zv(xW)_uYT~9dCN*^!f8|{>DeX<4v#GIZy2i4pr;+J-r@H<` zIZf?sqXlW~Suk=S@Skz)ft=KBLrR1^SH$y2>?cda2UDqyMON;~ySb*Wxz&itrJx33 zL%(!SuR4%Ilu-$^^^}u3q@;C^a%SAJkc2i3Q9ofybSm>#y1#tDKDTsWWBq%*v!3iK~-2mc5Zo(FW9hratq$%f6htQloO2$fmBc$azx! zZl=?Lh&I=+?eAT>aJ0L4+c&=EJ>UI?zx&R&zx>`iwJt%$_DGf=_$bS_{(>^QvGOT}?uw)|J=4$?^#IDQr4uoc(=TyY&y@=(2Z#8#CmaAyZeR0hrgE?7McvV4D!eK;{af3XYxmYtv1;*{oDZR zGhYYtYIo+8B5RFVMK|@Tu>{^zW{JaL7n-e@OTM)DD zeZy)kL2Lsydtpmp{iZwPS;+1C?gT@6E<(Kjf5r14g@R3%X}7D#}1Ot)YF3|$U(5++Q6J{UZv z#3H)R{;JbwZJBSafK19PPOEn8A02(|sSB4bT>bE$fA;-<^r@ZaU$}X&Je1?Y3c}gmYirfgW!m#1yV2w zDu&^Oqk*8K0p5ne>g5PVe$S;7=dl|1;d=ERVT z1i~MN*|Uc#OaTf@h@810`l2+5e?q=oJqZs4bxbVZ;T{#LmQsye)Kt;7%(ZE)+VK?p zv&zWexXGif)Z8Lm?OtHw{hq)ZcOm+)lPr-~4GI$#5co-5Bn3`|x)0zf{G0aD0B!6; z<>7dskchBig&2-UK?NRN00h7ikSNtVdYU+g8#kI8up=Q2W-Ueec|c}23IGIyoQC0A zT}58QY54X?QOfmc5C4}S35U-i)4 ztkRUtu@>`kLTOtTt|pu{iNSQ?|80Lns8uK&s>g#9HEomxQy@(^rUBKDSRpB)a)B9! zvGSBLBxJEG`CA20je5MN!{X_XnhZ8)3aO*VJ^~=%h3GgoWpRW?ODe}J`)(AED|0yO z=4mS78@F!#=f^(%M}PFmC%^PJfBuE%4)=D~&YWC7eR^|yH7|=Xl%iH+Tp*Xt$5U5! zQ15O0u-akG4lE;-N>Vjfo=k_IbaVIM#&cH&F8Sa?_x|KRe%HI+^|lAjpDlBJx-KpA zbb<}lfYVL1?NE0D;Uf1p^?DqKjfXXE8P$;h@;*5U=uQCe*dExPsX3zpE2u6wxkrH+ z8+Fkz-FqufwOk8DFv1jDgIj1j0j?5imVLqv0<;5Z4b~nWKv+U?BGvkO6Xcw2Edo4_6)F%)1~IIs z1tb?*oD&1@7u$6kyGw`IL*W_IW2=L9ETE&-1fd7DCZvy|=e4GwV!evR9n@~YY(ZUo zzk{*ekWiyi#QIahk+qpK^$d8@=smPIs49{bddQ}G+Pvq?_FZ?h zd9gg2*JDSqo3|NOADd&ilqMW-@*b8z&s*JdhvUNqw3LqVN0ubl_d>rm85n(4CRhQ#D# zLLd{fGM8Yy%*&Fj+5#RZZx&b?8=Vudik_U@0El4D@N+}m40FhK><)dhwwUdy^N#(_ z#=@9ACOPh+`-(?pJgn?9QdYc9+WN$FxLADV3txNcYtMh+!+-UG-~V{Gm>*16H_x0n zFE0^0001BWNklD!eyXtz@T7;ZU~Z)4V&GcNb1SerS()_G>|MHk z{h5pR-gEXH-|>e3?!S4@BM;s)T;44f%jI%9o6?sUQCV}3w2iVRwII`g+hjuo%y~dO zXgu2a`MB^DtnaszxD}skLC|<7Ax4!8x01N@B;=wD93i@7ZiIvmB6lhWdih z#sDguqPtwo6$wmLLVFTnQOh3!I>EIHFom4iAX*+;rlu3O`J@2Qp5Aj(7)u^YNCb?V zd6+293v}Q?89prTdw>TB#mkL3N|3BY3_izoEn1vfjmC6SAj>E0g1Gzy0}>>pBVE~V z8TJ*xy=>`REA+O5L3X?&C_^p~k3Fn=!e;x{d)uZluh3v(H6w+_y75JY>n`=Pb~;^| z4pie{Z~yv*ON+hvL-(A$@7_DU=Us38!FRp=_OmC-OoD>@-NAgJJ9jp@FQ>01O}gqn zbEp{0F{C%^dQ6Hi?@I9hI;J9+Z-$#%Aq7mKdzMEPb}x>}^!Ake_dQH86} zJOrv@Vofgdd#BTzJGZVs|KeUr6MTC`~~>dARA$!rBO~ zfFBtKIyx2r)n74h$;P#8l!(jdve@)POKw!%f1^Z#LCL*fbNG!^I!b+5550C{^3VH{`uK$Cr;db_txr= z#V&@hQntvQ*7=nt^RU)j!g@fhHtGzGS=p9*X!?~~hl?xMk8WH$bNd}X^6t03`qdA8 z=eNG`?%Pi*2Vdk)=B1int`?ipSly@Tsw9#9(ex-*&stS3j$1uC4Phhd(n(<<2py~; zc*Tg|0;dfW+)NTt3chOI6K>*H(eVMeR;6~o4D;FTu7vaCg*N1%Ut>!`Q3{Vw;@O~9 z?pVtbCfuN^I+rHZWs>D*_;b1J24*-bt9Z&w2j2PE$G`B|&wlCmKKjXz{>2k*)2^J{ z+CHyu)RY^7XST>m#vwBD9FPqW7C#sa z%sp}7QMRx|@>t}oYjnq{bv2>BmIHJHcqZ!xDfTo*p}LQW*#N!^!6kc30Y64D>fUFX z(ODH2(T}#kfg{Kw7-9+u5{N9aLY1iPb(QK2X1bEc>BJCg#RwgScSiS{!t)QlpLr_p8%IDgbSU?`&6ZL)9VaV)g)7j0ROcj79qf(TL% zS7l}KMKrDMSjogyfB}VPSX8i`LOrL9DJ_5|#q^%0$SB<-n0jhOUr1PE?A~KpSuL}L zN)$oR!*fa?X#mN3Zxb^MiT-76tsSzd1^w|+HOZ7D?I01DQ8@_KlOfd+LD|OB^?#6h;{^CA|Q$3yXH4yu`b7_lq$Hw}t+33?;xcNJbjL z6$&qjBf=cvpd%ofh~eevW8wa(Fccm3?j0ok4hSMdVA{Wxui2x_uhi+vgUdndc~W-T znq0ea^H+c44}SLNf9IKtm)p}P&)s!)K>GgRuoU6VmP#101HlbUbIm)kA3{}SDaL16 z-CS#Xxpiab%EjyL;_#(sPrvn>UiagF|Jz^w;C-i0oh%CN`yqNw>JX;x{FQWr`;2X~ z&G_n~aO~@sbsjhn8hO2;KyY~C10!%Y8-U6(q6ljX$SHuiC^Uv)082#-T$!@5hK0fg zf8YT8I25Y=FOkq{=upD0i2y(Po4*djc!2N}j2d>5pm0Va$j3)>NE~}zOD1&mq9)Pc zmRf14NS(`+-oA{6t*s0>=k@2V9$dV7_Z{0m@ni4#uiyJ!x1Zh~$nU^z%lsf7|Loq$ z&WKBdn^UO>dQ*>j>S$4?>xcZ2Am)Q(9%9TsC^G;TA|>#P^W;2OLFFk#@66K*zs_co zYlaqFf5jZclspzN#0yIu38MsHO~^bFP_`E?U1y|`z}Y3 zHNb{QniI+yW`$fKW=|HOM+wwz(H3}ZCW0nbo?&{_uWHoSI=y3zQzvHS$Z};|C#&+R z=cL;rTMPU(pwVl9_uwDWJAQZ1)^!gl;M1 zJ9Oj>_d^pIMe1{`KUrYv

T`2@6<|<3!d@Lgh5TBfv3<00zv>!iA}^6%wvX=Qm(d z2Ad3+_Hw5owq1ymxC(V`m2F+L(N89`rfr^j;mR-l`Uijh7ax7`#?Gmi-nD)5MBnAb zVo`Fnwjua}ag}$}8hNfOSnJX4P1%~WZJU)z+qILO{iDUj7Z0!8eECE7yyIIQdDGio z_rvdc+lnT~(v{t{$}wS+hA~mKoCJ|Ou!n#Nm5SKOQISx@{2qD{V~5pONg?zmGtrDn zYKA8U@Qn<>ZO{~om#aa#at%9zyO{eVT9cR}Xm|kghMiZ-P2}9cyN>Y~Mov5w#AH8nX0Kc{XlfpsRnzPv~uO@ty@pOaL3s*KlTsb@uPqL zdmgy!>>!54Vm_F1+fK5tM$xchGhKx2%AMZbAW#7q20jb%h*^Y9H?ewxr6tg6X5>m9 zU`1S0+2Ekw;zeoCMhLgwSc_`57|tH)Xf8oBv~?M}ZHdHTO7~#pnK_A*Ah@JHp z+YdTY0H;h2hT+*B<;+iV^0EQ#ink}W6m!eW6wp3sByfb}iy}r;MvXdSqcI6_$9R>A z9IFmocpxVurHOkl9~B8h7&S15!<<>)0geuqwA^0HgSszU-e-{;ssIK_|9=U>PJCswJx^1V=%$MxczZ2n3S-|DymJb1zPu z#p7ufG0QR6DmZS10t6$++l1!v0MI-(Fm01BOrV*sWS223d^J{UgkT`l%fx3I1-(3R8Ir{xgx=F*j$Kl5|H`5V9W;R`#v zx8HZ?`pNC((P7u=iHX2NJM&Xa{(YGfQzs2JrDoe#s~ED~m03TZU$}HFU%9@uG5hAX zzWyhF^t&H<^~=tkIaz$IuRAl8^_7h!Mv2Kayf@kDIL<~x=fRaAS*97$k+S8892C$V zj7uD_7}Ka?eBh#ujsF3~CftB7|v7B_$9L^VC`ts9%@W-G0h5zv3=U=$E zpH@!Yaog5yn@f@9Kqzyes%qA4DkrU!XL2{N-Vz0y*PmrFo3yjp?v3l$o_g{2jg=pI z_jmozKlPrw3fm|r-wyXpQVXYO6rdVZ4nY77$4y7*h8Y6Z1$vaBO@u0cgULpbGt#3O z@zk+tmx?M(ce7U>IJ?28hydw0q!aZ<)OE0dFKU9OA~g~f@AbYKr#9sSFo>cf4x(<< zWZR!gzeY2X_bvsCFd61r`yde0SV+wxmJ;(l41u1Eok;7{%sa9CeU ziVQk|oh9H9AUlJ)m|-LScbA6o3Pks9mAf95bshigTi7plF`YeNf1Z`BuAqR>j}9M6B3J>(xfP~3OEwXnJBH#;|BdI zx|kl0rx;~V8Vs$DR|bz?Yv2>=zTsQ_%`w&X638(QB-Aj3H4^?VkwnnLqZ^t1XoGb| z3uMKp8EY;`PaUp**Es4UW|k{wwnX-N*A)0kk~haT}>wY`v+H^zBKF8kNt!1 z_=z9?frszEYiRItUe*AnNj=<`6FlAP0tzMANOG0{FQS|9-=ld46ny?Vx#{1w1xG%n z7Fae5q2iJSnj=^PKXm(5(L!>9a?B&(3VA%NzK+A+kI7}jpWM~JxP!&?<2pje} zPAAqsK>3sjm^6Dg49hq{8mK)BKB3`OG)6r{LW-;VdP_Rynaa4Tf*H<3W+*ih`7hj1)l~ks&C7PuT{ym?F$ZSj4vi=275}jst6nZpja%_O@hm5 zLk*fEC3CPH&lI3X`WwM9QX~zKriW=b0k~IK5>q9e8hfqEI-$4+YmGjNw|WhYMu(Rg zr-qA&joD;3m`n}@${Nkl&6Z=w-U!z|ksuSF8W$$%On5Mkyi-8Y&Nhq_h*92chPsBT z3<99JSR`X)g5#l@o<@OCsWh_W1c(Hr)U^QfWw$ad2XbAxcJqJxnP2(!-+t`!!QmbE zpI=>DTXtQ)SeA>c6YC}h!qpCX&<`t73St8J3(SVC<*VKCFwYze3lYuz%rLlPaEw&BzqQ?VL|5w61;HlZUW0 z5;Lzr!2{(oht*&KB&Bv`9}1oZ5c+6WvZr>0Bcp;OM^198afR)c9NEA#a(EhDBGG5? zKwpP2x)7n?!;V(!+MfK7VRwW$o`K+`;$$(ukaAUTHyHSej!g-pLwzS8JSS$(9$mzbdh*5)9AM`OxZ)29(|MfK zn=Eb19M7PMN+K@4i~wL4v#M7=F6VJJ?Q}YM{^Het`%54A*T3+-8@-%;>D}vFYm2?3 zIxHd~tuXP_d0(g&Auk{Po35-#oA$2VxboD+bKBELUitF>_Mg4yyTA4ID`me8na__z z+NLezBh{p=&%IlZ>Dubu8Dg-;XYZA36FejFR3Dqc6DpzR!n8{3Kj-Sj6gK0iaN-Dv zn_G?qaEv;3T4T>3uVYMOU(7At?2;N$4p9a-vz7xM!d;l+kJB)QQlJJhWoC5-S+TK_ zak=x0kzJbE349aq%26AJAwAQim`Gb@?ly%M6mB`t*}4N**L7E}-1xtK{y#nX2Os(T^gsWv ze)^w&-?_7=%f4-OWwl0yIzicc!;i68G%Xh)e}zzp#41UHK0y zbKUB}5=5cT62=t0`S_0~@y>E!-Lx)5$V4ZsBB^Htc%54i4%qQ}6e22g8PJSZkAIJG zJ9|Q7%m)!I+BuX(!LT8bYbV>a6=>0ux_QmCfp20?hE2cmQWu;xb;~20onvJr8!b(= z4(()*NWylz>=?)E8gdB`1IE}Bu!5_5vXn-nHP*wBs01|$n6y3vlYw=|H^Mf+%Iu(a zrv}=LX)XR>9gnxgSus>+vp5^$sMG_o(T$8Iq>YJd37FV3V@vY1`|gho54DdC3~Q&^{T+T#7UpS(da<}@{wSlkpptXsyRacc(52}ZV)DptH&dr=oCO7ww{>?AG@8^E;cb>btd+x#e*EVPK z!+Gwyx?^)i4nZJ;mo3UN6ffZ$QL}Kc@&W-=HSb;W_@)$r+?}_8LWy8czU52K}1r5s?$Yf&L-N~DPBxS0-u zv>9fDWvuvAEM3UsgO?In>o`fm>#P+PtuyABIGj2%s9yAtX7%nQZt3NshT~iMczYAZ zmOWdlgbr0o51WMCP;jFkWtb1SNkT=2t_YkT9^6T89I}$Oz_2r#bU%i9RxPR|k%cAW zcjLQ5MT4CawLt9jZw5}Xn)A1B4jQ{9o$_^Sg zYPx8Rg&S2|Ci(luR1N?IJ=&JIW45yokRCeg}S z>fJkF9tlOe3W~<5ol6t+a};+HEYAi4u~W(EjXo?90!*g~GR!%Thaz>@$Twf1K_eg< z5P3!wV^lCC^+W4~SK859;UfoEUzXX+{mOKDH1B@-H-G;w z=xqvg4obIfR8nF4N!8jx-^^C>q+Q1XDFbz~;)~ zAr>X+^CRg8#E#V8-|g0KUY63B6po$=%TW~^^YQZ7%GI1*jK~ZsgJ|uTqgl$y=t1jp zK5q|lXR-!mxHHFCf_3{I?><6n`VA#JlvXuJEW5?| zq3{2el}R(arKw3$NvP@u_y!yjpx4qEuLDrl=IdUzrPWep5LKYDhA|p4`iyx40*Pw% z8rS1edwWp5=NUO;y9)ClR#U{oMHcS@)GqM~5a;C3Nx%q`3^M4w{llx{hRI%>jm$zK zJUQm%D5Hc{XSlI|mx&3bcWPr=<|M>uo6tj!uX4!F5hN_rii{FAO!$Va8b~Rfa8-KR zmgtlT0W;ePCSL5!rVz)41~6bLpMzK62E-in&d!B*k%s7xh#kW-BbRYAH5?q_6lcPV z5;yp<$16PCc(0j0Vw$2f8pP|#9x}>3DL-%c-+*;1(-F#lh(32hJ*9#UeXlE(JBymn=0_nC|5Hn)E8-QV~R|3ALo1kkdqs1l8R?(p8rp|Yy7rmVTLCMYIFl*!Ma z0*q zz4x5>=j@2JBF-!OKc(`$JDjt3?1;5i#NKD`=X}%SAAb3eGm9X)sa{z>Vg`^w-$?c|K3M__xC^k@lX8A`u@H9E;x66 zZQ3rodVGq_pxD24Bjmt)w@&Y!Wj3EroBQs)@BW((J?<+W{<>E@=V|}fm-cA4+#Z(G zO=j5TR*C--ni~2yRFacb?lWi}bcsPsI1P{o8+t*)UrL-%Q1clzMbbwEz)@3qKMgUu zoEGm8U@4~kW@jg}i`?xv^2Uob!Ove^^0t zc^-DllF8%&A4f}CB=JQw$M2W*fX0%ol7}W$?Gyn8$EQs}fM~Y|T_74d6({J@2!b`S z0u~|@0^VH#_=ST1>iUd21a)6B(hdfaJ>{!{pprg-s_qhwR1H>2 z=`d<`rTT|G2%vfR28Hd}IqrsXO`+2ihy=H{GvPSHBry}dApdA-cqR5YNrHso!jCpg zf5s3UXa_$L65x)^8^3t@puSd0NN`P;F1%W@s`*8|6c3I^P(HYfgXC~DvMJ`#@>JJQ z?5S_okCquovz%gXK=bem?u`l!fBL%l zd1vpx@PKY@E>@km$`s_CVQz!(H#N7ZmU^nd3({FNT86Fp<~PnU-DzH=C>Fr#|($xBU8tKKijw9dDcc7oWR#-`?Teoci!8 z_6({%KCR_`XB~TlP<7c&dPkqnj@)?r_K{=H_{Jyx%&VUNkb~#1dgp9cy$tDmj96{b z9KQ@_QvgaLfowj#a@v?zDoAZz=f+X0+~lo?4Lj}{`fMtDN$ zFb@N3(;ze#P}LcIYiVnq}1Q`6yXOcoO~!%l)LV1PVWxUG;aWYA&T{Nm^Vma_JU zAh{jht((9E+bQ?r_8U?UQE-5Am1N1jTd#&v4W2jg2Bbv>`SUa!0+aOyRD#GqVigqN zhFOOgHYV5-YT*`tGJF%>MXOw*Up{8lzl z)zAw_bXcZyK@p{*!uhL_P=M%*^giyG#=KY=q@r2@I4kMNe~XD6VWVLlO%RC62OUoe zcEJ^afMZ5L5aRMuiNLj5uWwlk^%j9-gAgl!Ayp-_LKvbT$~v0H%^7=Wca93cPkYwC zXuDcXCc`F5H{N>Z8-Dh^zwz6DHb3vY^DaJX*ezo@)UF$nKRvBZ?yR(%c+?K}U)z{& zYdL=VT_^5-;E7*y@VlP!hoyxEyn&e% z$6sR;c26FCH@QsRpd+s}R*1`IG z^>VRXbT!I=vvqXCo01y#0KvXBD0$e1GwG?k#( zpx9VZvK%J4R^Rp=>(KNpku3VWCLfBRz$)1ejN6fV35FUCOG0g+F1E;ov#Ywm0h@<@ zal|WL^Fz)iqLhJED25DmjcDEPupcPI3W>+tDMTWq9-0;ijCd+vhUr4KW*ChKStwG% zC$Zl=o>MlOcgLgZ3-g7OMM*$C6(V}7PpyN%pl9GOcGxrg*c}$T#RMoZovK&%1-JG| zNmd4t0z{SGKQ5%WlXbQmK5)UfU7UOb82}JJOl<#V9A~6)3CH;NOb)*Jvj= z-gUM(-nznv?1q34CUqLOMpS@c($FO&SJY4wA>lVuD*dq;i9owe=0{R(Bn`YwMn4Pk!tpUjD*webSR3 zvwLISUw>7z%w{r3i($8|zCCrzui^{3tj7V$)Y=~05{{Jz7vN?lrZk3|)y=|c+SMe* z@E{{HS8xIW0d}5eTi(VZWa8Ljq7Q2qAxj};WPB=KCw{n; zmpoVu)4FypP(N&7)KUTxtv1SM%PT<>;bgvJV zwO_meR>Z@wLVVey0d+7Gt5XNx>G~{g)y#T_n)K*$!>xDy)*pQ2E${f?v6I_-FF5rQRn^>4RceD+yC_1fn>^P9h_|IGGc zdpa!Wu+;?}6|rkJ5%j1Chm_oum9Yq`nJ!mI&=pE+C6B2)$*2>Fq?>S%-QV6$D|XR7 zrZn!49a0^i+^imkcw(MvDTj>)`6MKJ;8m2d0aM`L4ywNLeL(aVO1pIvQsSPGz!YtJ7BKhn4(c=#Qpv5j53DO$Zb2zpsSNAO~REto-pys^t3T_qD7Aj-Jqwxmi zLkZCpV$OURC?v_hqHGZrF24^$z~2A|asW!9*2sBkI3&{dnulXIWp^elB@5=)%n%)c zBWN92hs`l1Q?TQ3R_ji+ZIeI4-wSVtjd4>I1UaM@U%ii9#lJdMe1UBC8lT&D>4RL? zxfU>^Wa*gl86}2MGO$>)WX5w*K`eHywrw|G8`f_eKXK|8-u;1Jeb^V%08&o#Vugtsho5H*qZY(7~=!doMwD?cO+i*OB{gz2j@1{OGs5=|#i7Uc=`4 zZ7-13kMc&K!6;4em4pd7aYUE}wHpVy3C$z(_>7-xhZ!8})vH@s(}sC=o@P_RF`fB5 zoRqc$2bEClTnVR=vmv1$!nZP1+~AjCw}}#W+j1 zAe2gW7cm5Ob4yf$Qrt%6B%%`@RYji?lLB|W7Z#BXuOwmFJS0d8J1;my;DK(exD$r3 z?{-m0l|sRQJDY3y92f?m7JY|#lSPOG3@>pkl#eS6yIj46ViA&kESe(_xaeuY$ha4v z6z%m18_$%q(3ApXfU_nJv9 zK=7(C>=GQ=Wg4ssz#)KHVbZ7kHVk`JJfZ63MDBLa9ZE~}-nv>0>pf?)`RBfH+bdr8 zDZJp?zOeYgNFPC9%V;nUE4y*YTOM#e(P(04+4eIb4wN)Mz4@H`Z+hYVN z6O97Oyd6G4T_Q}Gzq$E|Qic@|(j3BOO64F`NvS2DhnY6XM_^N%+;R}9Csk7(wz!kqN(AcYMtdS%=oSYUPhKF!Bi^xF*4g-F# zUc*X)L$7Z*-wcNj(Nj?xDR2;Y9S~3b5hp7-8;9r^Wuw7CmhRBjeO8Uw*$SDBQ=0$) zN<>orFv)h5C&Ml#W;&X~P~F85BP%2Xqr}x1iQMl&P2+K6Z>jA|8%btLc@tEmpr*PX zF*O|=qsvqlT{d*_b)e&+73v^v1}MkyU=bR8-mnQpNUbr|xHC8a zcZyeN|0G!f(QK)ICQuGOS+E&3stiy`+3RCXLNIZmmB#1;@6)Yg6i?QI81>zi|=G^V;8bHqFEr%JTx`Ewup=&O5$v8daGPo~v% z?CGdB6Bk{~+h;*p*SCsRncxE8LT8iM5<^|~W+cGuQXS5nu3Szt9JG#!ei1;^-0 zNT_`Eh&Z;$U9Pd?vQ%MCMeWT8%}~&|sAI8RakRE|)A1^5#&v#)sX}su2hkJ<)0^IT zD%`a)nf8iedhGbgcfR|NfBu~xxckV7{a2j7_w+NiPHq-EV!QF7XjLY~^RcEr656#x zS~*!?Uu|w3x&Dh+JmliHzwyOi_4tQxFBil2nyRow@w6N?P}IbV863QUFmAmmo!$&5^y5O?5|13QHV7o9%ZEJ!p)n}<*kxk{AtN1m?X_OVq`(gou8WlPxgL5oItWj_^_l(6oV_U zIm!e@$mM<(p28~v{z_^+AwWHP{O&QkOL6K+F|E#8zmGMwohn-8FL2@(Jwu$0*aUSg zyI{5JfX1s%r^C~vlaKuGe|Y&%yz`$v|AliO{*blx*>Y>qUvg5K7TcWqW9n+lD7+W_ zeX46HHB@%&>YC`LtB=S|H|F;qI=r~! zzUMyYt6ulg=Us62nTy4u|JH0eX@@6!S^kB|3I{jfRavO=0q|DWjy0aqScEDjRE5LB zO{_(-B7_k^VLqwe;ht8ROGqUCTlLvUr+vE-f;PxjM*fIFfH$k1^PWCOatC=+m=5pY z3yJ$xowIB zAL9) zOCw0qhzoAQ+SQZ-x+5EIKoyM`50`hKhKdU(aX3D=QtI?P64k3 zca_+rjt=M(qys<}e>Re25UK)qN5p{N{q_ppj`SGCDI!01`)X`12Kk1PdFec7Bvx3vP?oQggV_9Lqd6# ze)3#7h7+(6PYZSF0(AKhDG~J|C`I8l!Fw^zU|tM^5{V6AOGbaS=Xw=z2cV~0duO|} zdme6^xF609%8!Szo@IVM<#~}$D*B7{vA$_o*AqiYLo_M88 zZ4ddaad+@0erynv1`7^M>^!{R=x|_4uNbDov3}D#?m7Gm@A}{`{>uM6AN=F9f){U87RN51*1AJcWZS}cdt-Qp3J z2s4mzn$U#BY1VKec!fD)=nZ5$u2)LI!JPH$ZfQtvAyfb>G(rnQC_?NlOhf5v{BIf* z(km9vAigYqd4HGR9TqQff_-L-#y+KwNaN_M4^ow5Z>?ZT1f#ouEcA? z*l;?#o}Y-#%AqA&pJ35M-1b;oXXwitqyp z&*tA)o*eAzHL`-4bC%2%jc!*unihxr_|SQ zt+R2>@bKxN+&Ue01Yh5E^5_GHZ@Bp}55MxqUVQDd{^L{nHZPaUVGdo4b{| z+YL5e7*UD2UsJG1H`1u20kg}{QJpxw_QR@@L`dS()pHu3{qd7NO4t$cFk)2k&EpuE zu?m!YES`*}TlvI}Mp$Eg9(<%O1^{eZsf}j_MIN@}a1BQ>@fAAt1w1wtU|0XYVKKs7 z%gYPAnrIkRQou&yHBnGdfSXSY)Yyqz$duL3FAq-vOP{d`8 znNO@Go`XB5M~L8YhOV}3BDxx^H*8_vG`HMw?@#{pufON_KQ6o1&b#`OZq=uOZGG&i zuIB8DU$XySTmK&Rc+s{i^Yx9BNAJJyx*MPStgrv+H-7&)XAB$G4Ki`!&nRMT1)wmq z5i`2Nai%WHB$`Mq#egUtgv8`u@k6D_J_QJ?>0cNc_D$UG5DX_H0Xbc8o;}h$d)L>} z+bpL40D2`}LA*o>nLjM)ij5vht-Ge z${D#t>y<;p%Es`e4&w+HgCM28Qr`~{A~E^sn3>FEKBZ=qDN!v6k}FaBNEP=g_RJ8~ zubcD)Nw6w?6vF_oLi><5ngP3F#xu!GY)t_r!b~8%5f`deMO&4rh=@Xf3{wEl$_N1| z_%UL>kTi;Q-V_~+8}YL0cyK8zP>%w7)28@g!WK7SphUY+j7&fv>BDJ^QQ!1^MP2wY zs~x&DK%+|@JH|#P!vlcJ<=Xnj;iJcY=;d$yoj>~68JAtW@0>FhCr%Bm7&fs`Vz^@I zLoH5Ll-9DgvA%g~``(-H*uSy%njgLPdEfaBr|sTYEf-y#XGtfkkKj=_|KjhVQX=#- zwQysk(wv@QggZmLh{ks$H){UNu?5hQx{Mr z+#$gbNk@)ZwIJEJj6w#2H`*)lG+8t}5F#-LG6ZuE5#*g#d@mF6-GdP|v7iTRmDUaU zOuG6$$o2$OrX(y2D`OXRaHcURCIA|kd`9@w=@D~ke!f9Kjv(Wak2*0$>Dg~x$W98E;mC(a!a0eF7zH0=87=PBBW>=mP`^;0wO6=+Ur&AV zk#5F{QHj5^w_unJkkf#21mN)Wdh3+W(JNyE*W|14T%3ni!$WKd_-r!!{SW@-55My5 zcOT!r;9-~bz`5F9%6u}c#bC&rnHt|bvH!L0y2*U56S?=gTh`j{JHPX*U;kszJ@>4A zTic61QEVnt_&n&9`Fr6o2usKuqA?tL*qgpgfsibRR6u|n;97pFnzM9RFXdx2O5@${ zjpMOKA;D~gE;~w%$tf8P#2I`?OrloroIv1>odapra*E_7m^affvQNXu_NtiR51D|(YN{QgN$m@oExpY3C_fGzyzxdQEUiHhLzxB{LS6;kv z+Meyrt>M9_8kww9qmD$mm6c1VG#0MI|Jvcc4+wo2dvPofdGf6e2S5Q~{1*+j^CTKxEbn z@8`&t;5&>tSucfXN@pR5&|nEKf@gW83G%L708uPMW1i=6Er6XUe+s-^k_$VHx%V(R zwic0}gyl&maB?1sBv46a;~hohlB`(plx29OeJdIpB9gA{$3wFEj8KFwuYJ{8!xAJ$ z2J+?`Iy`SezrYHST-A7~AcIr>*>6@Da8EO3*z8U1Vj> zsT&WD@X-!@QJ{Yk4T2UC?4z1a9yN@cLgN|fG-C`;^vIzrO+8XtMtQjrjOl2Q65rAA z6AUjRr}{-aTs@?4ZJDi24;{Y$H9zr=-}s%6?7RB1)6dx3s{}p+j{ee^ew86UB3X#>vsTEL%|hK+$CSo^l8UwsZ*Ej zu+pfR&8J5nIQi@E`Oxcs_I)QOlXEY>a5`-kTT9!bR=9fCBxDD2Rh@0j8lBwoxf`!M zfB)~j>s60>*yY19J(c1*LN?S>!L$krkpTbf6ii-2#iIUUx2&%<_7qCkxa!&tdV`UJ ze8Vu*Czc`Q1TBN}a`H9DU5bZ$Kn_gr=COz-=hjUt8mv^LJ0a3rB6ZqM3_5R8KXy2)#=*$CqMC-Z-2oX?mW4D z;WY<`GRA6IX{hT{u#Qh_*>jk6?7O;Nf4*yD^Z3cTZ@lH|OV0ZrZ~VchJ?YE(Y;Q3v zf9pRqiQtd%_nwsC1^OJqu($)pGpH%>N&!=)k^s2})&~9}-L5--*^`n9nc}V}kHpZz zXb<`bM%#TmszToWPI+`@axn2e6|mnZArlgSP|xPv5@82pMqK&#*c_!j?DoD21|3Qf z4t$C7*iMV!I`Uxdp@H30YP;Kpgea`Qb)+fBh#K$lKxQMDHXEz4de<8Ap#xJG)4ch>DxXW&{`(5>Fnk^?s?4{-~C(f|LDenGtRl_ zz;bJ;9VUtur`o9zLR%l%9QOvSSx!r zBNw!Yv{+Do(7H20Sr=iB7)aCDF_&c%&FB3-UEX9d(8Bu^^#A}M07*naRNq1Yj7m45 z2Lsbdtl0dQEhbaNSXj!R>lqSYRWFK3CIkcsU(#lM=7V_j60RAbCh$?znMxuLWV^{yzgU> z>OeJ+Qm8u_6PH;vkyJ|{!6Y;d=#dyI=Go#DL;a-gXAQlr7LDy@>6uL2Y=r(#>Bek`^c~^4<=I`0=c61SJ5T!S?JIXXp0FD@;Hk2Ui zP7@Q05moen+VXDL1Hd52whitfZ?(3*zP)H)^15ICrC%>oFZ zRsM8HQyN=itJC>ZC(}D`xMjEM%YXQpKlnZ0vTyhLVr$WVYdR~If2UO!1$+2IkMGDv zl6OO>!@m>$wtl)0;Lw)z(pL%}krl5O@v$OsTCAPL4YM(euPr8V0}F&yC0Hs}JY1Tj zha$hGBuv-@^tGXMHL1P~BY7K}grEpos8_c6xel3h)JzlLz}7;<3W^r5q~U`RKZY#f zav4e>!)a~bdECD1`*d|IZ{qXTu$Wseg1i-mum~>@L=CeO_RTAZ-jBdXL~10t2{a@u zjZIW2Q>kTYJa(*xLux<~c6Eh&@5#fFX|s9LG#~xTPrvN-zxofK{o;X#U9rAvt#^2b zk>ZcAaaz|-nO`lt+3sDdcKfcs{mj=t{qgVnaO#EX>$O8#c;EM=^c0ku3AF(?!2G?FG=glX9-3whek0S0{k%DL9*c+ zX^CqVcs2s7cwNYHWUn`>zX2T<0kz|Pskj?28xH%;IK85UMR6Z82od{!6wA1d7`-(3 z5iHv%@Intd-^?mZK=0C^`BBgT&=7wdDQ5!O-aio4%LrbStVq&aiBWw?c#fLq!G1{$ zO%mRvL}nATS(5AuI7wQN{FVGBu&MBJf*Uq5{J;zj8M>7xkfJys4&}BZws{|C17RKn zNfH#Ptx+5V!qUe(+j)~Rs|eTII;zsm*`PS6jYG-qx?d&9N+uj#CQ2G~6;x{)pWvkD z3E4;lWl#*4kD^uG8PhP0fD*90gfTDF*~OpFA#mruDma}=MN%kv2fa|USgbZS)<1Le z?cewPKl3;L^o5HaeO2#^tF7&30^syuA2#b6_F^7l$Fh^MzGr^q?)#44c<5Wd;Va+x zUtjQ$%g$d8i#@wpGefgAp=6qRAfO0{B)OAOpY3*&9`g4c5+H_~3O)>V$0{JHS*YHs zacspW^8dow@<2$85Lq}ybG%R_T>|9b1E}HEDIk)678i}?kZO+!WK$mQrAW|Vd)Uv9i;-~8v_^3tz=@?#du zMH!|QyLz_?i(*LI6NfU;5zHbZ93`wKG3K*@q19n?!Ube=7dTl+w0Mj^Wi}yxe#Hvy3ZZCgDO#Wjyw4o8y3tRG^QPp+LIF!j6)<<$_KWiA2Di!$np4jbmJO zpg0AyUXC{htoga{2v<%hRU&ggaaHTfznzpKmLOa)=DZPXKFWg=iE5nl>3$+HRp4X= znWSEL^PL+5YJw!`&Lskv8I?6jM;gTOSP}JRe*mxdj4Sm#4x_@r`Z#+;ewFyKOjRgA zg#c_8LfRb*^vp3WQ}V=oXVsnaZ)_=;&DdVb4%z88NhK4NfR5bQGHd~(XdB-(CylJc z?dEg7T6~P*u88ZJ*SpD@(j#M;G_&dKm)`d$FMZ7~w!8KmIC$aK$y0`>L(!n5y{LWm zvX7XqU3Qc8U908t?(1)Sk~0 z9d|;=gwl+W*bit9c&pN|lIf|)aP;82< z@Z{Q_(rmAWU)I;wuD|7uSG?-2fBYAJxBtqE_w3uZed^R8&~(xf?~EiYBj|>;((Ai- z9lPhqeK#Na=~w@km%aGfVGUE)*(rf)by1^{045KT$c=NJ8WdL|>}YRA55sXwxCWP& zLi7bY;TOa@*ye!?{qVf z=)afg0nRL%f^L}Cfz>jU3%4p6>ssZr#Beo#Ow5zj8g5;~@(<8kf-T%mMWWrHj-2^t zD+GJNV|DcCJ44A}HIhvA^G&S26uXq#+7G`q>wHCF&Q!~RA4x1?!3us`Y#kx9gBlo?X&mvNy4aOT4f>Nm}u7S*u!;20i& ztBR+=gjc6y2=xhQPNFOkXowq>td0bkIjhv>xz13WGaUK0P>(7-$-07?4Dih#o~^Hd z*zIiQxINTKiet7|M=kfT!0=2gwJ`bsYf0n{!(Bx<~)!eNRDiH@wUL8OOMVZYC zN5&AYm+<%qpGjd~?6#dpfSseGqX-~Ac@`(w&x4yQuxn5h&ck7jR2I(3SBh0(zroOB zV)^%fG@uTv)kww4K_5{%K2CQBgV(R5#X{~K=B0vKRpAK7{pl6qW}~MJM0`e)mK<8z zxTVJ-UOab$I9H%VlS_#uh_IF_OS2mGJ9I@^TgJL5508NcI{$m z$HJPQO@^leaf0LU)64W(+v?r_c*8e;?c;v&%|CYD+50xPx95{dZKbsoP!*&N&=`L6 zQUPaD1hPrt#_?cJF1`sBt$)Qcok01~Xro{Ow_;hq0;FML5b(+?05t8^$TA8aWQNx8 zVS{_4UE$QVzv#b1M8u2QB|U%71!Mt#WYomsG)YAubJ;>YVYh-OSKX`3<4WOVpVpfHR9|^qDYN=S>(%zPboe z5&48r6%>dJH@LGt9H)4>hf(U-Cc+HcBbHmxODS=}Gtv^9Ee%Y|@f-1qIZ4ZXogIDb zqr!zU5quFYr`eIQ@Em=lhb6D@=W*aHC0X6;Isri@L=a!7u6XZa(V@UMMS$nLVsUI# z;JIL_ulGM{FH!#T*tPlV$Qe90)lndecis9y`A~R&kbXi*A=qRvfgp)m9HvlU!XD{n zvm0){^Vu(a)8BsfmWv;LMZ4^OR!)bNSX{*nNCD8@6TEn(LHwkf0lE97||=h66^5j6PL%z7iDyTG|c6^r!PGu1^Xu zBFRyhIp8h*m012#KL)*@n&6zd3td;5>hbA^|IskY zl_koC0UmS7EU-ujPKjO8eSth)@&qX`RMUM$qvtMyS%Om;*IFVaC73DsVkAI7Q~7b% zl;2XknfW@wjB(IrluHUf7m6Il2oQ-B0d^i$Wyk}7C?Hx4zq{GMGkq4j>a=a=8yhE& zpL*_#e&+pu@>geHb=mII_ip!+-4>kGokaT2)QyGw^r*I4y#Lmr&wb&XJ-hz!y{~=T zBd=a87n2g~LEh7Xf?Bvja!Y4^V9h9#cYcr*GJ@DHW7we=+NgwNNX&1;Nv;cu25^3Wk#Fh~4Gdfm`YFr5HUphY5A|aNxB97A>65xsa6qjGJOUlv_SK2e z5Yihtj!|2$S-8`EwP#a;8+>I@I;upfEE`Q634rTCP{)S=N?rtSkLNT-mdbkB4(fA# z-U-4L9WqF+cI3PXt(NLpw2p(P#;DN!Kzwi|VxFU@|A3)1W(WL+Hk>6Hd9+$apfUuN zWP7gz-IZk4RBiymXD1gBr&j_B;0`mwqM+un4R`bzE)7-SRVl&lTD+^xl|}Vq_{y-U zQB#yMfjJk4JbcwkC|sW$)q~o;rq;?ZW;wPM4^PscLXJ1%-c#Br2-G3nj)aI03d~0l zPoAqdTqnvJ;c_(b#pbqxs(<6y*78Zuc>Z6}?I0+Fq2Mi^Uzr&OA8=!PaQL78v=CaA(hp%8K=cP!BEATM4!_v3S&Nus zvLzBpAZm^bw_c*-+WLk|{l%%@q+6pL8GL=b;WGUovMV=vN?XU4SFF5@aA)--(Xt;? zH+)!FfxWN0@+uP!h$b7 zaRW$UUZ+4&4*h9J|0AVa9O3X!V|#lR$O3Sl_@19EWi{SYhzRBIqG18_?)wFBtModJ zidaD@NhJC-u0q7S!ms;|#fUoZqon#-@rFi~!MRFdO8p5CS23+7oJ|Z+;VJCxLYzD_x>L9KPQb*M`f3`l=KM?0~)s^Y& zw|?)>K6As}7d`ADn-82AUhee*6AOi})kXO2s$E-OTei!a{^p;bbk(K*`0;nX9 z+U2TU&L&eY%xGzKq8&O;(cqD;;W&7U2&NohkFd@^%D}Pugit1${0OVnON5uy7g`%} z%N8*I?k-Yjf4@JUlvahFsICPkKqOgPOE_O85X}!m7Tm%MI&?eO6W$(fK$mwntu6y0 z?oB9U5PY6jK)EvUL8{jPbKF**ojVRF%}mT3-fkK9VY&b>!P5F)@M ziD4AFG<`sK#0A`!cTrEBeHJiShMAM4OrNHCAwfO98q97%I3v2Gllz4z4nm^{Dl~>nHu8)8UU!k^LJ}$A_FWY$Fk$ zx%LZ&lyLi@#H;}G0DU_On)^5wd|M5DfW!nTOY1wq^?)Z@INT^5+5Z*%&B804+fl+1 z8%-jDDs;=py@TKl6RKYU)T-~{N&dtjzROBrT&`-U8QC%z1y-8x4Sg-@V{?hanHoCXvwrB-ySBb?$A5eE3;y&Ee&+H^4lK8~tVq-8%EzeF z$&hO%zKjqCm?IlfE=F}l;v`xUbc(+&lCI;!=%d4lbc^~9M846tMVotiv?VvpyU<|}u}i43PoM}R zL8>G#Ocp|pr5~;zg?I8Wt5aijV2XiC9nHqXJ$(>S01MVL@XU|VNtdYVAz$OGW97wV zg2#qaPAR^*MyHqp9H`ry&Jw07DAQY@aim2(fx-qg(vX4_)3H_!t`i$DW;5+Yc!zn- z^27U$%Pv1IzW-2LhGOQh!RKUBwzswpUU<$&KlqlPdiC?~_?LgX@2-0%^Nl__yJ}GL z#*V3I-=#^jII(%o1s8ni6E_?>eE)1d8?4@|ekoDEWTcpD`3zSXd5Q~gl==XZ*;|UM zoaAiD-$bYkH0r&s2$8wMyPV+s%Q%M&5o^rk69P{Dgq{#0 zFITY+e|LFGP7zb?+R7pJ=9RjmsX>p1-f|ZgcL(c1=ipG{(jfNQg-(RCh@OZ#AsdK7 z6$v3cUL4xPyj7$%z`pPt#1A`Z9mbHl|52?t*A>tjR6k^HQ;TyQ zhQlsYplpVZ`_f5{7RSPGq0B@}urV7M|FOsS;6q6K>o9StwD<=U$!_&R9~|mpT)YxU zRpa&5d+$3wpET3riGtm)Ykb8~f0b^fWj>o}bXO3gX17qN3`zn8@*Ce2A|XCZ3=*&HIK2o8B@n=HZ`v5wR0WCE7dywz&TSP0 zTLgTperaV3?WtPvP6;B31K=EP7^mrjfDV_80K`P@uHyu}X?-vglmZ1j{EZ{N87YN% zmmqIw2>2Ck?MihnxOgs)v<`%zF&YF*nxy{LxO((kA}Z^^;c)}&XTyj^fLVk#)F294* zXPC9p85TTw!b>apS@S{f?tAEx88Nhyi}cE@3QPtAA+$_Q*L!vVxWZ2OFfoSZ^@pR6salc5MJ@#4DefhNg273^BseN8ssLV#VBt`g2c$3aJlVvfl8_ zI267+H9f0f9;Dy`_Qg(^1G)UCa=XFk0xDclizJ zq2OvjibYnIV?IR%{nQ9%tYJU~9~@F>H1#+EUHXPKuFFyB^FXlj6a_Mr25YzGvw(ae zTKa#Gdx;(iWGSl@C}kvbrn|Y73OUAF6Ebf2c4t2Adfa3@R@Df!fJqIPHb&qcQ3WO| zo~(QOwSlrms4=rIRu=0@!+r%LX4&afg!}>7m8S>xp~__nrvS$!2o(?;hE(DA)Nk<{4JmOryfRU>l0bE_UtoOLe=h0rtNa;!t?g;Iem9)`@@w&Vu1!z__;zXNa`p) ztsJT1vr6ib08R{!!pJwojgAg2o&z{Hva(z3R95=JTvbFP9-C52HAKdNO% zFEH0Rhb9q-B1{CB3GD+KfmWhNYF%STJ%kJ+l!>!?BWVSA!Kwjoe}j(uHQ|(sln8p3 ze!?)sR;L1D_aiC&I_^A5AC92027=Q)0t%>F^SB8VV%j#AaxxK55cLr^MFX|6%=tZ7@(AI!Gvo&KxL0YEk?O85pt5SS*fjOYMmlkJ4;23;b ze4<*NzQFGV{%)D3?Yn^(DjYli65N9jt)T#N%bAKK7)}F-zZBcSV-)QsnDG)NRtt%_ zKweOMCF(0qD@wzNq_6pkNVkW;2*o2H0k*p)P#Lg+fg5LeXu@zHJ3dS~uUIY>krJ*~ z1PeH<+F=-X<(EEE?mIQHg|ZeN^`Bm0$fVoYyZg`$x9vWD@(+IVb#Hw2^XJ2o&vrVS zxI9Dl&B2400pp4nC*a=9O&reaAABS}?3-OasfGsn*AUP-GsQZi1kxJzA>9%6xEZfT z?Im5vYo+yCjdhP!O*61jsZ*dkSk>bm-c@-P$+`}-R5sf(d^t__sHuK zaAOGTMujD6K`j$W1t#VtIfq#~@=Vfo&Hl})dyQeQYI{+qYE=;%Il5kxmcg~Xz&7&xauUqmaT!XqNz4T$k`F6q=I z5GrsY^R=ee<-6AOJ@5GOpZdukeBip9j@|RX`kwXD`4nr---Z>|>$_+7-hSt|J@rxh zhck`ap*k|0R@rpnWCgjV0NAne8%?0CHRZ3~LU69N96Tf(n{fV6sHTKQ-j9JJ+BOZw zo3IvAll9`LXwj!BaRj_y8(i}Sl3d~ET@w$N?&6)$lcmnPb?SpNyxu{S(C2*uo{NlJ zLE}7^dgd;qfYuebNKc4sMZ%ei7nH*|g-!EfB?8Vk9XY2r%X$Dv)W{fP>JY&iD~#=yIdAz2I6bF-B;}64WzDsN&pkW(XBhs`6)F} zM4dxifeZ>YXbG(+3J~q$o6B_EHIF#%SMiT2mVFH zm-7)+xH1|8>W|M^#?!#FLq?VkDXrtEYn~_@(y-~r?og8uU!=>hX-q^3idrT3&01yS z;Df0ME8l56H2SY+L!*yJ6?TY-)Y;6t?6`DZ?O_Z z)@W#pd)7LAls1Bog+i?Mqa&wxA)UORi3&pYrEI^XJ-_K(UFVT(hZn_YmiQQl9B;wh zl+h9bqsf@zRe~J9B*!cyB2LEJK@e(%TSRBSNa`+4}#$Q5p=zTAC#I^H|`zz${ z&?-E?QRuP^fdsPxN#looVrv!;Wu-GBzDNZMAp$@_-V+d09m5L7!l$KrNpoh~&VU zI-+_d@Yy$w6aB6>UMwi0t0h`k{1aXxg~KR*^-Gg;VB~P6nB-GG^F}fBzWT0_z+P_% z7vFdqAAuw8YB8~ail^czhoqO?(I9{X-SjL{p_w|YUW^1D`DCJ5;G{xqyJx|e!=*Yq zrLsX32!M;%fpkPRXf1{p7MK<7rnOoSnA2zwP40 z=E-~RZ%&-}(I0x&n_l_6{)3C8rvOfl(H*d2=oI2Xe;OHvj-207*naR1ev#Ul4wt8I@6=lJ-ucPw$9O ziIZ>RTLfHK4GP6c5~V9@G=NqDQfen1BXIDDjYLW%cC^|e2g~-Y(g=lJwVEg&3oHd& zQD<&WmrRaa@}`+e>!z=$?;Yb`j4@2cK;_k`x{ey_1%zUZ5vz89^A0j_cmtbZN$4>5 zI^K|fcbdUQ0_I>Q!imdXrhLQije8~KrI^VYYeklhw;ekC?cekIPyNk5 zo_6rE>7I>NhfPE8zvZS2&f5Q*zw+9re#JwVi*1{f^uhzKD z*`5f3ro-9!tY5*1V(b*uBP{HUZ{(j3d6&I|zylzBa3~QX{9cM}G&r=#dnLDva0+r& z098P$zaLp3V#aCvKz+`2yu+lo%G-zz?3KEE4(vHcW*- z<^Nz}EqM4fjk>EI^Dbfr$_UgM#NeQA^hVvk@s8^ZWg7+KUEuG2_k^&{m%~;4Nh^D| zEwL40$aRPWZxa^~hKY#u07nPQilvfAF|kAjGl8mv9~RE&N93C9#&QaQY_ZM0LXgz5 zLF-V?Sa5e5mr}eDW@lK?4v^zw;?&T3=xt$DL?fd42qY3&KYx}P0{(DM zN4n(A7g{;^C1sH?uDGUg_lS@h{_QwZN=M5G1Shbk(n{C%>E@*Ey0^aTkAC^xA6zb0 zZC56xz5MFS-~9ULU-OVFR$H6RWYS>uPr9;aFM{?_OpJv^%BL9q3@^H+m(nWIV36{O zo9Ka9DTM>g^oQeMu3-0R5_Q-S*bmgjgcks)2;vrW^-vQ^k7F}o2zVt?o7t^qio?bZ0C8a-3wetM zzZ>Sy_odFtT0uF+Ca60>c?lp-6BDo{*nmNaRCOF;LQ{~wD02W6_*ups z!Tf^++j`TgUcl>k*Y-;%v zpdZ1>@*(?+rBWpliP6Ye`H)Vp$z=2twMSF9VMB_Pk}-yLliY~ds>huW+opS0YQO#Q znG$8_oz6VMMPgVCAwH;?>wMI7EGCIeU0!tHlEb%aH%CZUCtO(B*b8xnFYZ4I>KJb5 zo35LDaXV2m``;S;IL7_a2ozuMS*L=_WSA3?)zhzrYhh#hP=8{y;^EA(SqjOp8;M_Qi)$XybHCow6&Px_y}qdR0oc7`aa zlo&kpDz3f5hA?G-vBxkV56+p}oc?A*IZSrAEt6>r!g|=0gn}p;a=q`0JwZo)NRO=1FR;>P3eLE|EOz2*((OeDq!5;!PSImKk26eajo1S5mXjrbmR8m9Z()oR#`d^(E) zEwZ3tdqzji(y1V|PmTtkarKsvQUbBW<@&I^XgkJN6j9Nm~VkdUC{(t1PRn+t0;@T>EuqI}La@jb7P zTCZ%)L$Htlp42v;vzC$6ZNzQU;qVPqU^~Sr2PJ_K;=6t?`cw(9i^&@s#|D)ZEJ+YL zE6Sb_HEgkG>!t9-n?ml#;KdT2{_o+LsDNDs4rD%zc*x?cMBZ5duc%{@CNsJM1~bkV zFEpr-sL~K2cp~xOcA{uO{T_yLC}WIEO`|)Rbzv<0Nj;`kCmNTiF{TV`FC#<^REcZm zmBrn?jQbK?MEOw1%4b9C)scd~fR54343mDH z;!D0m#-u7zqF)*XPNahDgy^hsmnxB=T|8`~7ZS5CVI)S!C>Es^0R0FYAz&LBnI3<_GF2gt-H{AYB}Lk)q0o#%YrW zk0Odhklso3H(ng#q0ms=sJl5bD?GwJDs9+5bXmc_ni^Z+fdIC;rDUCy?OJeb|DQ?C z8&|_4T!Q_AYX_RR9?2|RRRY}0$Velrm1KIv6E^iyPc*$Nkl!vCamC^*4x1*<3r^lt z(%nO{U_phgvyH2bb2@k0OThjVbsS?Q3p2p8{}-YaXLFRHM8x!# z=KMn{8FUU&9t{XurpXYQiqDURh%I%0Cf8!LEQii$ogKQkI|rOw`@xpr1J-}=w?Oi- zJX%)EMR*I=3Ao8nhl|1jSwwx2v?;H~ACz}Xmj?$h&@)Z__|vBy#|&n+q2{B(mejuF@In_t4a; z?@Tfr%~VQAROqSVdYq+mITPdXQ z+^O|@99(0XE{=%BFjSE&*atcLVsR%ZGKgTR({Kl^z!Gm6->Zb*c%)e(>gO1N;n`51 zw0A>*x6R6+SU7eX0k?IOQAg`>zrMFl` z>lOtRYmj~l69k-DV3_(8dNKyYPS-5&{W0xE&< z@D?V6z)%+coa-L`Q`cuiK-FjO2$HxRJc>Q$v|*(ol~uc1o39Ozt99LSvApHZd#}6c_S^3| zddI!@A3eF<1I@1Wwdt^Pes|UxyDvKT%quTB@8CrTcI{p>RpKSquHD+&9u9M_vl>$3 zkqwYLP2UdFAXU}jDA04Uzi-qwyVEO&z6b5#A zwFccA^Qh?K;;^_#~pzpM^avDyo1jB_#?gbS zMTLo!Q6#OP5<%Vo8))hdV?Rkl0(_bvN+ioLO7TQLE|@$`Yn1c$F<4Ykcm1rpoOiyC zotg?)^>E>`ZgvH~2(i98wSw+<{Mb~5D-Zj=W?050fgn5q40{!fC?4#93{O~y5h%N~ z5Isr7z|*j_M7BC=%DDYrYN};7QQI4{Q;dcuIDGD*P|LtJnXoxhtk7in>vrjlH35tg zAnFCpi3@#GV;fJT08P;@Ig&jd6q&FJx3()Oh}_Fqu}zI)AOjT{*9BT5muARX9tm)& zdY9rZWjcetuL-?GC4gk%exORsP|2wCv}N14#W&c5ukgyYI{Nk~T9Cod0mU{@^3>0lh7 zNVtAUU-Cv-ABa}&BJ>NtTK#_8b<_FU&4=!M&wD@e-Vc28*pa)t?d4|ME!uX~%w#r` zNi%@^phuQ{uDmuY^Jz0F&20B+=beA{lfLxIr$6qR{RhrGc<_>QPv2|#dOOrPhR0NA zJ^$6^a8Yd_5*I8fl89~K2D~zC1h?04P7a-gT+MLsWZt_;80mT!jkE` zL0LyWyY_pG18j_O6giM6ABD-%r>0;>ZbfUxA-?J~=cIWk{48%c;3^oGeoItP777Im`b%fC?LzZAd7zA^$z1?hAs*;^kiGVVOv6QpNjy3H zc|o#6REr~<*(*bFax@jmqYmZ?JHU3s?_CCDd$Z%lOY}zCiJA#mhA|}<+p$~N@Q&<) z@=yoO;~6y2y4J`PX@XIc8f7V_DC!2GTB`z$Rar`5+jKZIp#Gl;b(0>|eYz?f>)P#M zi!DRu2IXm6_t{B0F|gWrIAF4HjSbu-5-~BeVr=N?^k<9+xWq=&I?aLe-R?RqS&wLx zgK=y3CQ>hk-FXN{p@MG^C7Ac31EEa?Oz*||P&kDHA0g#D8-l|KHu)2P&u<8nq8RIJ z5}pu1Uj^)GigQGyiPnVRHhVY}p0PF_JkJsoTr0{c$o=4h!{_~ZlQ3q)z1u{n)r)UB z(m8qO>cPlvBT?gi?xjs+iWZ(3>r^bzbaXl?^0;^o zzhsjq)Qcd_S96(AnA7-^MI0u9E&S84j+;>78&LD%!chZuMil^h7JKP!1d_zJ%z3Mc zR;zZtw)Ve1`nS)0;Tw(|-`sotf%%?Y>l?GuD}+*ur^A`i#gaI+9T!xVs;kYd<@R!M za%*w&)biw3f7xrUzU0XdyW-MET=6~M@wBr}+goLPyI3xo*>qz3ri!vFgPgJN?2d!$ z*iwv$54!lS59+g-(1F11;1|G3S}m6nL{}n8od#c~zgNjoa1we>t6*+6A7x%@i;;GU zGR{s~%fCR4<3l00kS1t8Q?qL;rA?=^H^2S&-uUysd*8A9o9Vnq_}%l#_dfd@-|~j< zALdfJb}BYM*eQ-O3I9M)kP6Kc6;Cyg5mUemEXIPJ!Ie5Q*f`q$Y9R)2171x%e+glx zga-IT(gb7Gf@|es@~CAyZWp2eVa3urF2YOpEHZ~2}23AE9C_7sKw2HsM zFMv2!V2fiZQ7*xT?+hXdks`l}xUr6)=H_m1No)gnO<7!mR3Z4A<%ynk_q<{9vJ!sX zb+Z}H4=Nz$pq{!Ie2}P3@x6G=*!6P5w@j%xaSv^&ukavEt#U(ZrJ)b>){v*gF+6a8 zMJbtST#fS%%M<+L^~N1dU)!gafx9s0lHiGAwc^V0UCsyY^E$);mjNP0oWAp^Z6cgkf@0O(unpUDi6835oo0$6o zl(d3SqeBD&s9SN+jx9k_@r~mf@I|vj6!}(902Hw^4JLQrf8q&GdCtAFJ?C6>{?_KH z;rgpp%yfh@ z%5}2zqtN9J6FYE8h$Tp;W7DSuf8mX(#3WJss6>H!Q*Ly1kVVtqZpB zWfZn)5UcGv7=GLa&=M&EGfm9zbD1VOmh@2kUYgjcgv~I~mah^mq_6L|{P?A$sDP~g zK`b)25~`3O=t)+~1&56;9w|xOT0k>q7@G@_;`@2~f7Fk#n%F+Q!+C~V#kqGySb5{cDZy;Zei9 z^K7B(!io{U3Q&M5phtkk-Htob>@+}(13p~|uMKMr|MkfTn}ra-48|=Oo$y^3@{7&r z(&4<+fI;Cyx8x4*9>S9QC303FbrUSgVkvGRAn;@%8>r;dU`bS@1eFVQx$5j5*9Atf zo%W1qtP;xJ?I=-Tz?cW_|6O5y2C6a&(`f1dy2JtnQs-1bN$uB>Jz@^Reh1f(Ld*s+ zlMh+KBn-YJd1RAjirU&(=7ekc|11kpuOMh~3gOr*L$X-ehMYs@G@aY|Y$9*R=WBM( z$^jKwsKRy9{!FQOQaG+LA&GHz1FF@rXiVI-UZB?o?fS;X+u!v+U-XJ!xZ(+qJbvuB z3@f-N7=G(^@gspOQ*|!z<1_0CH}y>S;V6X3d_L{_di?mwQ%8<&A3l2CdHY}R9nW~? zGoN11Dq)v;P0Fv_T7RahWvX=)jEHmf|Ybe z#wZE4bQN1AQOvkF?;)+>0X!LNAKa(lTPwnH88u9?i&cCX#^nScGV3--VNw}0-^i_Tsymc1y% z5;PtmGA2)NdTb6-3T6SLjX7z~!R&upjE+ej1q+T`yk8(zIGIz@ash;CWM(LVTRjb*bAH@2w1^Pmz= zJ;GDrMlO1g^C#)P14HQOUjB6lf?N3Ci|xh6uH8TTmiN8vjlX&DE3P@YxjCt4Ceh9jl2k+kSX=d~OuM@|P-+$ww{in^p`&nQ6${%{x zIcJ}-SPWBd!;>j)N-tYOADKO2C`$xI!uEI-J07|d`!cJ*dJLaawS+#YMQMSrQI!FR z?S~sl7Mnpq*+g|9w0k9j^Bw(KSR7G(|LdY*`7V8pRw=seS6P8bN5;M_nv>=S(jdP;G%Q)&8L%Iq4b|$pU>j7iD6H_ z)%Ic~HDo5k3=eWT=OIgP#~Yz?Nb}*&91~Ol=sl>uW(M}fh$w&xxW2xQ zoxq}hlC-RKwczMjDqR-mHPEiWHoiG{t!E(92rS8QhRxMoeU-USq?Z% z1cW1LZ0yG;Aw5VHMHg~siXTw3LKq37yyCc7Nn>CTl*-s+XiJoAit~KYFcq$8?KL*; zoD6y4LYfJ0HMM|M_J!aYYyc-TAM)NOjYo6Ynw-EWZ@fnt1Wg&0hL_9L+WPuO{`#}u z@~l^$bIqlL2rxqBqjHUSmI>%==qpX#Gtb*o?2!(w7&SCvHLTR?>9ARAPM+Ah@851c zZKHYZk39eR|M_e8?q1(sEGK>pBI=YdD`cvIhnhgz1RmpHFBmv=p&?#~VU+>y#Rm-Q z<*^_xE?2l5w*-`ogi0R104>RX^OAJOpu0j>co2cHhd~f-21~wr71wst$+QReZ@Tui zfA)#Lz5EG}I(71ttcFPo=&su5Nog1DeDCg~ciz44D&4xiljfNozP(`d#sbWY$t*B?v%Mn=Nr08+jI`{k!e(;bG~vl%C9o=hKG=mL}GhW!qhM z%N@7geE0GDjvl-3*r%?$>2qJa`wO?-bK=N-y=P4Oacx(_Q7OG#n9T=wna(F`(`I-C zY9j4$z+vySJs?i&j-vHk$RRapnn~|gz4Nw2*AcjzF-yRKFYYu&|3 z%5=0pajM8ZOE^va6wfxI-PCu(Wi$`yhuy3rUyNAio5c9pr$u(1H%uvVPlFk|JPd!ivhS z`h~%nQ6XT^5AUy*i;=2>v&WiKz`)3G0_EiKkSC(U|6`<}sYbBj%^meSQcOkJ#4rf; z0L_=C{J}HIg|z{RM_+8^Ev^Hj$Dp$t=z=#QNv32YW%r>N!dKyq$*H|s9Uxb)%Z+Ls z+Dg7BW=oKcYuRBzQjSfTuJ)_|Nz5I)3=*=52?5>s_z=k6-urlbfeD*5<=p_OLxd6SBg}Q+1*E zc<=sHQiP7s9mQK)s!{zUzRP5@E(+4R*e_UK1S-b?(LB8=nK@%b^4!x1QzIe?C^od} z>*pDA>Z2k#p;tW9fPpQZ&%}e&j9MRDCdIt@2*}V!W;G-#L^+zFNm3*oUGSkOXv2xj zWt+%^Wyd^LXtXHwlv;H(v)D|ah(E~KzgVY2hS`v2B5P}F2F;bA^^12M{`jXp`{}>F z?!J5PI(+2l=Wo3G-ea46ULteZ*t@>IYtLkTV>VPECX+!%Ow2u6t%ooSY~Kz458ASX zMD4i^uLF5q+nCO@lWqIgl!jp_jf2o?)ppC(_V#M~)aL5s=GLh#Sq{Urwr|hXXYal2 zqBHmGKkJf%7eD2(4}a2Q9x|IX#X+pUce}mV?r%MtPW`4m9MzLTiyyC;f>SuHXuo@6 z3j8KqARq*ip^let4ouGjQ70?|6qOi6po`NC7&oLw0btO__+9#5RdiAOJ~3K~$s;C0_-GIIGm-S$!5fr3NEOlR1mmAfT>R zOP~(H6<=Vf2~$^H3BKSYGg|FXA*fMFiaYfpwPz?mkqBM}p69XRNl!IQC?nDIX5*Cz z5O0=aY4lMxAgKUO(T2hRhvB`Z)WLHKJWTmTCpF1x1KvuRDtx$wa;S{@3^Fu_=hQhp z5#wcx!32IV(%J&orS|HXrO!5wZ+B0A$_xJW{u5^%Jb!WWR9&Ls!G_pz%IhO|dwbD` z>E2-%a9wq6=_Nypz10oWd`+Wg#6x*<)t2dOwlP0^=iyT~-TvyAKKm6fdG>nK^eSiG z->Vo72?vAihEF8@$|zumB19wU&?o`&v*5=hRO!WhPRj4iN{F~aDK>CR^-(ZMutnA? zqo2gggou*LFC0Wv;4-7v$AWq$xb5yE-}>z@{q!w|FMHHg+s98<#=wL$yb2|+p+Wt) ztgX+tPi`K${tLhU_E&!Qw?C~<8JqejKvSmb&t#f08oDwJ9b8^F|50u#om6(%F{bKa zB|Z&^U@a~J^LN8ietsQeItJg3CE@Ur;xoz@54Jfh8eCpGOIjHr=uv#%z!(27PrdtkyCIz1TqQS5$6n^Qd}~rWw1b>a$k;z4F-A#U7K| z#=2>Dw0AIH(^LX$dQme>j5Na%^=75p+nd|H@Hn-#y}8is&E1XcnogTDPJhPZANg%x z^W|qBIP20&4;ZQ~)TqyG`b!QJgMi@oc7X)`rkRmY__8r%jwr0dg$zk2UT%q6MI6u+6l~%MJykZ%r2r)l zR>nbXD37Zug(3r_UOc92cJjHzZ&!W!E-^?VIXK3^FrjXrAJl%m}jw zjM-#%^KExO_31AwYRFb72kB34uR5C^uw)R6u}}zA#Ui&eX^zWy)Q-}cOBzv7GcZ=d(jix(%hrp4#vObknd;8yi_8o72+4p_VH}=Rp9j3Yqx08f^6V0(#(aI&G zMhAkkAsR@IBk57xHSK+F&A^X}*KINh@{1vH8txog{Mic6DUv*cM@KxQiDEQ43L`8V z_&a9(4%vnJIx~N-IO5b`rN$Y}q`0OsCqY>e3?Qi~;RI-0SY-{c z`;o<66G22pLB-V-S4DIY6Dkq}6i^TZMZy5X0D}yZ^E>H{_ulTV`gYYh&#AiO@6X@p z4DWkGclD`rp7WegRZ3O>1)xKu3btTDx}!kUMjoEN88&Ovct_?;iPuq}5FjZ0MgV{S zrO1s0!v~azTyRzfhNVHj@#I7td><(7!x0M+6b`*_7>t-#U_xS=A$x;g5sLb~o$+=& zH+USS5PSw-E0G|c3fd1X*F9t9Z{fFIug-|b+)xG{m6@!iC^9@c`{ACQPOKQeTqe#i z5J+g5f$({RK#Y$%dK|wBiYwswB6mTu!eD|`n7X)Df+rVA((7)KWUYSBeGmV`J3lq; z-~%f!R4`X#O-X#?W@XHiW9_AL`hW8EkB@ELb@T5ZzU7|fd$w)cv~#?yHHH_@7@Rg; zkw(e+0Pk_?fDIZE3a>H_e82|3C0RuUYz_WTh9EY>A7m|wGF}`ot9U<8x{s{1 zRB&`M2#rcZUYbUu@w*3~I{Uq!8XK54bHS|kL?>f?rkFcqdn7&P!m`BE9_tnz*XvoK z)aD0QeBnzU`Q&+T%kv`PqgCl)<8FXp7&gK(X5ku}9g5MyA{hG6Bphrr_;uvc4DFB* z%nZE-5EuYZJh!|{o#tV|Ry@sY0}5m27GuWP0N5JV8Q0u_#r~n7i~I0fvh@&7Na6(w zu3&s(b0H(4f>O}8NYNvT>rKSXTSQHw#F6E)B{el#NRT5Wcp~r(EHiW0bJJWFN~bkf zHM5(yjXbg9h5!B0ohzPvcIW8S_*Bt1cW}nEfy6}%HJ79)^D1QEC#<6W(mhd<(q1x7 zLcC2@613L8LwuJLSIQ!*5^Ts@v9@R!fTyzTLEZkV+HFa!d}A}iBfZ62fLQwKr3}-T94>}LE-@=13&2!?HnJ_!8`3sKjRyW?H=0(zOIyTUsMQiQi`Q3Z zY5i8gnW+f16G+A?$^I$o*>~rtQM+L*5k#IMJk8ti!m0U;8Yo*7Yg)7|YI!F>h+qLv zj*8_@zmUM9-Mrxim=st}#Bw>w=brrK5*$kchJh@o7T3#Gjt)S%ER=?;*#z^vcdNxW z=+Gsr(NP4SNo~3+NFX9TWPTA~MYMoaJaEI<*)m*%-1WF=Rwv3f^?EfW;^jM4fp6KU z*S_)H8$bH#tCyT`M5moo&x5-#rx;xAw$Z3P^P2C1leu|r|=B{14+Rv~5{?(s)*V|4naz|m^ z5;Y4)U=a?}Xaz_E$qe+#;+bKtI^~@jwM?1JYL91%Sc&G_1n0x#E?O@kp9L@1;^Wy0 zdP408dia}yDDfYSb9bV~VgIGFFpXy8$2Z>dp@08sx@6YCteNH5gw%&i9{2%YS^um8}v29soDY`VUwRWgJgq)oBtpX9f;|3b|FZ0O= z5t--U5Trt)br3b&iQ+VcWi^_|PL0M<$09mcf}LnsWaO;@?_P*KTjOG=7Q5M#j_gCT zFj1gkQSL$q9?viEfkX@xa)%K4!V3iz5L)KJ0r@9P1Va{^x-^nejvMh7yPwDf0$TxM z?oU~iZV_r$uRc36I{vGh?!Ev1$8WsniK&UvY^c9At6~=eE|2IsIb8##>*=(y|O z5?o}ET8Z?j)q-J`j@LqL$O$MC18oqWC?S>_-7x%28YjJnYz8GQOhWqzQwb%*ruRmm z(f5P7VHvmEty7qi7PT5)+v@Pfoo(O9DkWEG((QJ4?;P*!+FkA)J>Zao-hBG8FMY|2 zUi0b`YhK0`{#0~4teBEhwKwmD+;mh{{I> zMK2^FR0%=2#31e`+7DDIyebaV{|r6?#2~UR=NyHJklX_4qSgD1na2>kyWCI2-4mHh z>M6vmM1Yy}Q@1(0jQ}+6cTVHzV6zVLAx5}6NzMqt6Qx67C8I$GS4fhJ-g?q29Pt7# zqt^o^#`V0D*Swkoo-fE=@pFqX0yHH|RBb321vX}*UdwRiklTJQtJTl_&;Pml+F$Me zcgIhRjV3jpop)V>>>#U)Hv9Y5{Q2>Bz2RloU-Ox6r<>I?FF(C;>(2Y{dE|4~-1OYj ztFsx?=j=D%bjq^ZRjyAgkrg;z9_~ubR-=;_+n#vl^Ot_;lOK6|wnqFrS>Veo1iUJd9t!ky;;H zIx!VlvtbJ-@{FJz#GH3T@C9zS!Tg_|Jof{y`R^}Z;0j&VW+`Qd#Ty9bsaVf-ueQo` zXo$BLRq(ThAxnwNV@o)6sRyva1^5kbso;^q7deR?xpIFL5=s|3V)nGZlzdLm#M*Ed z9TLYH&?kDr{s3Sipcw+zD2Xi63&?5_6$-=B$gWTn=q4X{Yq^L@w>EZP;owFJVV31z z6Px-o(<%Ss1d?}5tzJvhG|!8t*KYdi*Khdq1CKqoVWc_SKW*-u=CuB5x{JK<#Z0CK ziQ)}9jOKbi*uJxRzr33ZU37?#<#d>JUy*{mLU zZ0FA1J9ee2dHB-dm%Z$`kDvGE`NK2PEX}*^N*rm;pAN)rtbU^)V1w$(hsT^;$DY-O z7%rN3QhV0U*efEZ2h0eBm3~iXX&=>=tO9qJi^wOj0wNeN%6L5x=H)LfCt{@%!*O0b zXc+&&Y-Iouw&l>10gQ-+ljMpS}Eh4?VuRK5uyXyt(Dnq;sUaD1kaQjB6gSMcQaoFKu}2sn2}k{g<5o z&Q7=O8ogX)h*QGhc?`-^Bvc*cp!~*jbSi?!1h8w1=!0koA@BdaYKmjSZ{U&Kw>dm^;+&bgTJFeKFJ^{&AgjrQ4>X-t1fV_|tED z&57T*@`5?T1Kqq+OESZiXsct?^Afj_1`Xm9MPr*tPdJzkTT2Kf2?gN1sxC14Hv> zPMbMc`To39l!fuVz_gD|oMpD|utHz+bl2iA%e!~&mTCAm-O+viuC$?_U)+(n4L(z{ zQU4#O{1y919Ok&%Mg=WC$ndE~f;<;jD7WX1%`_bpohq-Tq=IfE(A@Qz`i;)r=-hsQ zr7Vv2&rS_}hN?tX*F# zpI&|HOOG9DHS^LnjJj2FJ_T(g=b%F169u|(Ye4uO1rY`SH4xQQNCrv_YGeHj$z~yw z!okFOvpsOzEPyg-0{{K2u} zsl*{9=s5JBsDe}awxS>mNdOyiO@XFC{N&JmAtjNgaxa)D>l$^>if0Ye3vsFtJ18Tb zJ)ESfBncET6eU?5^58m5Y2at9La};4wwC2igOKDTNI?uztdRoHug4aCHY zHvtz4+$TT~-;ST6Ctnupu}mfLDx>7vvI)HwYA4_eRfTM*@>*7&zTL^scCb&{<(h4? z58uBp(cL^p5rd}OZ#(Sb>D1J+jgLO{jnDquxgUH(yFFP2@&1r=0|cf@T%6K^5}!I^6s5*qC|@_`EQb(NB6A)YEL$0N!_(BEiV z3(s7Wv|hXXsvm#q((lec>99(oWxMOERM2vN!h{n*Ve75N#OP#q(}pj6=EK+i^mk7@ zw{Gc?%Q|D@Rrp5Uhq^V$+dG1m=vuS2?#bu=?$AZI{Pc>M!vmdeH%k%2uvwYFs>1Mf zgr+ib1@OC#eh77xiS=@rN|eE z4+l)CFeSZ{E>G@*bVM96UG->*NJsCpSUN%(zHJY|QvAp!)WPJcg1qe5B%dQ{##2JO zn<(AM^DNc1T4S=)`SR5_{`6;eKC@=iz=D~>b7$9*v~r%^yr3eIKZK0vF+U8?B*Gx$ zYgaCOkP%lF>wK?D(~QpyaJ0d6yG8Z?sdirGe&Jbet2?E}t+>|J4~{xmU1lmN959uh zf+U$+(Pna5+Un$&){?}Xy;%KmdCXeFW|_?rTW?fXXw_A%zppQI+jG?#wdw+e_4y0G z+Qk%wdl1(Ln)q{+_)GyqYbh{UR)xZYz3(lj zyNJszPO;V9-BzfoS1s7-V16|O2>Pv*l_i02K?;+p@pWGx4B1g7^UZgYN`&f#DDl-$ zG|#NO_A?Ld(J-MET2^dJDuS9_tuS4G6XbzVbJwD9d^yV}-LZuetXO$`Hc%z$mGD@C zDFIXAUxTal`*blg@{btfD`hmsrs#3;|9qkqE~L?mpFOic8?o{VnG8wL8TxNsaLd`Geap^Zuh{-}^7 zGcl4&S_|R2QazDlK)>K|{Z}Lp2Kkb}50#`L_? z4Q(@C^{V)xiU=n6P7Lhc`M^EjU9wRI*K3%~TkE3Ue(f5Ds? zi{^AEx=elCQ5;^A{eC(X=u~mcw#S~n{_0P@{cW$F>U8Q^#t987#DPYK9e5=Hs|AU9 zQmsrC&8Mh(rbv&wq$mvlV^#9$ZkYTFq=`e{I%`fmXAXHR^rS z2WQWoIcLVu?CE`TXU~{BXWIN(!vlS-#4QO?bF}Y`S zVsw0RWbgR;?R$3Z9Nn>bWb3w_xv}N=`1s`H$k_PKiEg)Dx{)=~)=*zxU#n65zh1XK z^H6pRH*n8^2n5Og43^PS;R5+M>o<{6g(=gDZ!{aJG26E8nA*1Eh{Kj$_Mh*4-RURQ z6ID^SGznW@25_~pMn(B70R~K>0xj2^I#OCP0TK(t5dkFNT%wu+tQd|B_l?k-seRO` zz;~5QgH}CmIHc(VY%-l;{vmM{kgq2KgV`7!H-FWH5DafbNg#n{&=JMVPebixU2DX> z{BvV#GRY-Nw9F4J+p~zvwQ#U3_fR~DDVGX44tSENi3ETcWliOiEG!5SMlBB*LzH-X zG(iM%1`>osQ%}-H{`4e}X!O(;f`iMf6aoY)!`X?EOTw6>au7e9d{l-WtCEf+B9np1 z(hvp|SID3MT?Bne<%())_S^fGpLx~=bB;Nrk){5)qX;T}pLf>R+Va;8$Ic$O>#nPZ znst}aOpK3*Qsd4^D{3wTNgi7M^heIU^05tD4>*@FbpQ|ri*#N2{pNC^YqkgO8Z z3h0&4(wKz=sYkJBoJ}G(TnVBIHyicF-l@*No`2;Hw>+@;gv0gZlndRGL_%||*!rt@ zt8ZvvWZm}q=-!)t@x>P(e^`5Js@ZDo*gf`7|9aUU{<3n>kq77PPLw&L?T@%VVT!Uo z&^NMi>kO^$y79_G4_Mfqn5;Lm5Sg&z1X$rzx|k_qonB(DBdubP1Rqh+(+e!KX9l?w zz+|~;v09&tp`(6!lBc*kad)2=w#XcZC0&-6LRzs3g$##Gv_;uSh^CIVMTIf-@KrG^ zt>Sst96^Y-g=ZEW)B&#~Izcs?jjyx+F#6Xe~zXK`50IR4=hh(XX80=K1th{?ZHj$4`=+bmL z-R86z2QQp;^ntUNEnD2*>YF}e`jVw{moA#O-;%k_ERC8H{{Q?#lQ}Ut^}^;Io3`!R zuy)&?kv(H$dsjTWcE$RU)h}$;c_-_ur;Wb)@L;ReXf^9el2mZzC`?iM*o1m(smXz$ z!6acTDK7(85lZXLM5nb~J4VLWZaM9gqrd#cbB{gjfTHVmC(W{y=TV6l4*n!eGk%NH z7@7lVD;vtlha|T~*#k7m#@;OyGjXYXFop*q1_8$v!J&^^Egd_j;7Ed!M`{iS!#Q~j z7j#I|f}Buu#%FjrM(>J15Nt&Z&WkMhl&z?p0h}Dw9F2NNgz7+ZmSY*-_W<63P6$V6~FhTKw zd&v1k+w%K>Mpxivo3+~aesbpr&iVY}7a!#|;wt?GQolW=-_EyF9P|`^YxA+u$@l-;l|TQ@{fmx0BC(a_8rm69YjEvS=~g}8y;p4= zdEmkCAGlz46}es_Dz{S(j6JMs|Io}zV82`$^B z!?OJ9JC&DJJh%OYO@pPr>*gyCJ9tSIc-0e4K+-PlhtIp>hqwN5$+3r+PPgKSiCa4}|n&U~vII*Z&7I(?VsC zV)Oro6DcrZ+d;UjV_)*%?JF-I`bU=$3yG&amg!X4{D z1thSLZ^)6l!fk+H^Z-WlLSjqS#zTtIkg!fcL;+)rXc@Nxh!E z@WQ5#Uii)1?tE-u$?Tbn=S@wvb>6LLO6e;I{$NBpt;kQINQf}Bvc)V(8(Af6)9y@+ zj_=wvW+ywd2I@10hX&`&Iqt~CZ+zu(`!Al?8XTNHeQ0Q)l}K&OKXP6cwsPq%F_}3b zrPiMutSIB1xKdr}b_Zq-=Y>wK&VKQ{CD7$kymz(6P-lnrTk88JR9%gcme-S>RQKC6 zHnC^-o{8O)cRsq}uKQPRcz*Nv*vRI+9h20WLycK8h8qK|>O!WlMLVy6D|Hwq=V5xw zQXD||O?UBdYX)^-Ing%d)_&3{L}^S?(c85JDn`^r$!0{K{a}^ma!5sD#2MP zyk+6jCAfj|Dl`BD`pmqZXf|b?5L=1U(2~_phzOukpkO{QNMz=;_>kCmmF_8EAbyU$ zi75M^b{+r#AOJ~3K~%m4!bbU+(1@%+b+~|}_{r#g#J8|zjr$*=rtj0>{)`?D7i340 zF+gdtREB4vUs@u5#1z82=o|Ell{55|a6W+#v3*Pv^Hj^La{U*9R(KTN5X~Z%bl>#5 zE?`9df_^k~$QO0j*x0#A3MNbd9uRU!LBTXwp6tJV6-*RKEA<=Uq7PDr0eW;?EFXkvvLh#kV-NY}UVkl?>HyfrIQI7wqA{mWF^MwF&K#ac)BX51* zr&p}oy5QhtMZ2TK#uRk`ct+{=iZ1KZr|o!d{hY-9;m&U?UNEQKZr5um!BSb2X)QB4 z`^1Ic_{w*Gz2x}AO<9o;m8KjJ_&yJwpej&n_BBVhk9Ie%zwH-SociM9+Ff_1u23q@ z3P>72gU^zSu>dj6AZR4X0gERgYdS1k^i2WUz&)(!Dj#R$96#@k9>Xz|93}+pf-(dR zC+(x7jzJj-A`RGkU?Oe+CZQ-uxQ0w@l&Fx*HQ$hYp?|OUG+U)&VAV=C4MoK+^dGCg zxoMA?B1h!=k=!^Ui_j1k3Dqh{3T1yIPHYv58E#=Ez(z0`t81W3BJ>* zgz`2%-eF-2WQ)UL`Y3Zpt$!k};58MrUeZj0XNK0?Dmp8=mZn*)=9@*Cyi^0(x@+{- zyB>Y|=~e4juf1#enz1e0>%#-hS+jTR>T7Tlg~)>MBQ8$@3Q#L~9H!l>r|lFo z4eS$NI6zhAOBaOP3vVXBGr?gG1zzqhKY1P!vD;Loi(9R=w8v=W{N) z;qJ#49DYz|qMOQYHf%Ar3N&n~wl06>S2uj=A5TBA-I;8p4MR~2%{=juLN%K8AN}I) zvp@8O*@qp}>Z`fa)Z9WAH#FZA>b5a&4h+8V@Dm?D?`>ba=mXtOC#Cb&f~CZcMM1eE zh?f3n8wJHNNzlR{VlKffKvOpYAu@$zHqM&F?#{+_J{A43k_WL!f@4xp4O2+jy5V#^ zpIg0l>#N^z{?2Y^#zFga$J(iD(zo6)crhWh|EscW4h?L6Ztecl2JgD*%0=^McJppl z#gPJ7-W?ggZs_x0{{DqmTtEN#BemZxBTZ@F4Z^7kZL63vHQll?kWGwsCRRRs&%M{2 zbo8>k=vHx~@e60E!G}Zi$OT&LI?7Y9Z|V{jPgcepf>I*^jaXVb!Nyat>5#@m$_2;USzP)zdoZ@wG06;d=!Vzp-A{?UwKU$Q3`k`QG_QENk|+I#ZKAG?M%BZL6=j zrAf+_JuAhiJZO^DtjTwb?4H^&HfYP{;K0jYeDu3tf6Ahz^AA37=|HPVGh0y#M@UWS zAt9mFWSZAW2NaR148P)7pkNFFvMg%>IhhlgAj*j$ZVa27iPb5~a7sO^{?ZOXTt7+T z?_A-}GcRn|vTozA?^=Gt?GH`u+P%l)hY3r5V0TygLez$Rt^ z>{%5*7$3fWw?@ zeDKZhx@h3AgPN_Z$PLv2B#15DnG5NL$DY08hA*CZ>hZ3HUVMxeClm$6>TezWzJFkj zfo}-oLPTR_(G^`AL+5FApWq!7xK#rd%y=$l3AO0)gdx`wX%v070`f+^_UMWiPJi>q z@>X;9e)Bt%lP>LC^5N+z0Vx@+v01Bc-80XEjtNW$ydnmRP46)A%Fp3Lf%BdEVQMq zH~vPMz{0~N8IU-}0KN$}#5zaOQ}mWpY83kLBe%>I((u%=5^=D>Lr8Vy{TsE~noV2Z z_RpVw&%49(=MK%9 zp_JR5%au}+gk69n(aC?f9ej*#)=iAQEV6-1(0E#_5WFDl3F!ojO+$p41bTryzU0Y-k?4?PQR4L#lF0Cq z;s%uvgPyfxtjHSMO$NPCyiI@x5L$(POdX5Jzvo)4+7uP$5gI0&6}Qv8NYWkm176lp-@K1BsERb(*$&lXv> zNOy#30vlkGpq-$1GLYCjmF0~9VMr1M1f;aws^ffrEdwaz6@+A25>ywyn8&PQTE>GB zI-?M9DvX&4o>FL_uE?dSH|o!?+jR07AI_)Em^M6EOm<bR$)Mm#Dlfn*IHIw(Xdg z6!+Zr&H1yY6=j(uAqFM=^P!PxHk&`Y@t%MB;N`QAKBSf?KG)Ij++*C@{G!&Z@7Xyv zKQ$}v|2}#_O%N)SK_t!YC`#riU_4|8Y7rPM@^r@DlhLZ3Bm;mm^Tc zyxA~^VzM;uijXy%tw*2y>#JXXellz3;DVXmiMG}hlCfSG4RA?pqdD-xRmJ-6Bod2`ea)YFj$A>@l}Fkhi;q7DLaJs1V^k=7N> zi`o!JXdDg37n5)%ngD>)3G^heZ)6$Z33S9CdY;e!;9R*cBSgtE{IR@C zO_a>(Q48{C!9F1;);8Y0)QGz!T=xjz%Zs*N%N|<3>h15na7V7@FI!Skf19O#ziyvY zp?fFXNM^mKbsfIla%B6Ssa@NL1_sW3$C)ob^@Nw4eB?m0PKkkT6+`;9%+9;Vw znPb=VYW(^e<+uJy{Nh!=e@}JghaOvX-vi6P^RwTrdtrl}HZ*7P%toVCc5-?~pZc|M zB#PF|7sjTEYWB6(Jo?;;N9=dQb)Q)}Z)T_4&eBXPQ9V2>c3}~gB!H~MN#Z=B5DKzZ zTFp%=;$K)NqCO!OIPyg>{e99)cu5qOF-|B;Pii&*9{jC%6L_%RWqZNT;R523qoj_o z8NR3uR}TM%Y$P&;>BSdaL~dEZ4jFMj;RlM81gs3sAf!5Iml^M9qs~4&sODd| z=nHEPPXgEq8z%=;qe}@rAfKVBTnncYO%XW`N{U%Nfmt(7C?&cdn$kf;M2Ipx9Uh;5 z_t%pQlLj{OV_7ED!Al}Y7CDQ^YxVku9eYi7=GnTkN*Du+^A;^)Lhb)dL-y1XJe`utCRQ5n6`fN z$eNYUz4eW+qV3Dvn+c0Jp$&bqnkmYok6boy-rx;Cy?y$^d0sKd$UW0a-5JpR(*{;Q zwPtdnea5R!Ywpy)b>5&`+E%mqyWc%@`dJs$7cCr|Gn|i4BtG#Qj6m?+ZDiC~ zw|vFfuYcK(fAHBxJuA!7ITw1$L^L^3lJ{}0Fq!JMPdWbZWe3jx)y?d=ss-z!&t1Huq}BbUjNIJtKRsIPmZ<*<}97pu81k(dH)rh z`tE_Mx7e}xM0xcl6H~s<#@(W$SgqPw8oz zzdzMhicV+N{_|JAu<4Fl?mO%Crw$MG7e&G3C=@Sr7;BFYVzERM4HpK~)%!@BRV6O&=_aX~;LWX+hxV`0}xcS$7F zhw1aUBkSecSouv51h|BKfw+pHS%88!(qF?fz|Y3_vw$?_dN4Y?hp9#?jqrxt27f0( z{z|TDd(lOO>qCMpAHUSw)@rpM-f-7D-hav0zkSPhue;;Ve|TuW1D7t_Z-F(1JClG| zf)eTSLG4=1CuoTzp2U4%K;kC(eYY;Iled>HTDV~GoS**imRU;|`{;)s(+3r9jk)dS zGZ)PN^B*3c7}ChOc-0ws zbH?=L_dRyT-=DH*!R)dyq;YMz_a8=7Y)zytVUrsk0^^47#F965g2G zO-9KnuA#G~ES%^oUMjCMMe_9((ADH9M+cZg|E} zMdPS?&N~Si(hp^8$=;FOXPkQ6D^5AerK7UYQORbY1u5t!6&Kxo&X${L0Dppn!W4qC zX^rf@KpB)V!V)D9M{=>^zXUvBGrb>`*fD;--BC`+rc z*o+B=DGTBf8h+c-vM8%Kr&iAn+<)P_-}d*XpLR;x>HP8c4^NCv_05@)x|Wxm*=n7wx0#s~lK*c;w(+CVe)t6^v~yZ|8@EQAr6XNa)DOEkLxA=fBJvt9&h zM=ww_XdoDJCrb0Pomo^vlzdt)l7xvN$fVdBegUH=Cy;2w@)9o4`|SKQcmvVX;7qvh z*k@Hk>XR)XiAQ^=yDy;3V^1JoHBiW)!^87kHUZH0|T6Br1c@CnuvE*i$#Efb=nA1sTJF($AN zRQ@9gFeK4mEAE)&4O@)0Q|UZ+=XTzB$Aka$&!1{7oHM+1;oySd=Qr*8`HyZn`Q#%H zSh}bvx~vxxxLH;hw4*RaC#-)+YzoTqtO0ky#Ef55mYecLM<2X)^T@ro-81vR#hs4p z7W6%eygtW4PEiamnRCa@_qGOFr@r`@BJU(j*Vqskxm=T@dCjX%`NJQUuUxrq+PvAW z_mDVM|O-9d&ge?+LyY6SCRze&dOB5fCbK!iWY74yeyEfW9!h|uf{Wn z*F&N#NGCW1b~o}n+d1f2NY=rLC9n+EmC~w4J^SVlZuyt1TI+0ZrT6h@eHu#J8&O7nY@jl_x=+ z34U#SEyZYnA}pg)BxVL00jPb>|FDWDQ62P;tG?^s^UUy~^RDyc<8dWzQ?xi_P&l$C_Ry_dB>eq^CV|i7e5+OiQ z#pr;~BHm2PeE=fGeM8*?6aT)fwlm9-kaqFmG~V)NL%&-#4*+bZ~s7sev z?qn^k`>hOlYQ)8psuCQb>a2x7h3G=I5r`g}F^m?JrrB%Xa>3n?K0p7k1M{h|B*{3# z?9ZxmdgJyHOg29L^zA?X{A*4-xs!KNo%!RANXd9lvl^CR zc}Xko{JBnUby=2X+n;*&!QWkd+z|&AWgh!b>xY%7(DEa_q)^B(=Rwz1Fr!E#A_Kuf z0tU_aqrIA-#FYr8wU8mp75k?1qEm&6q>?2KJd;AYyCS-t+=4`2R&Kl|PO zFFCqBF`1>Q71*I}4(;~Ht~L9+-KniB|N5#EkNni9-*eh2$GC&u-LC&Ct0lBolSn-R z?bx;yo0pOa;~|L~)V%GL#)Ozi^DP8U+plPj*(ua;QZ)(JXEZjCit@PujG1MCT-wkH zWZBl4`hbsGaEuVv(}Cs@$D`-=7^D1A3ASD_Y_0G6)03aL?3zD4{``W&52!b@&Sb|O z31o%$vd&e%rLETbKRFW6V`tU{0jP$5UEMShED`6;r3PP zVxnsrvQ|HWgd;n0rjlSKYb0^g8OykwW_t-EQIXeYb){besA%NU*oV-l(IH}ibv9^{ zrS@LAhK?ZAVyioRK@gbw$X3&J_8B=2@wt-fFV=D|0;`_uD|IWno3 zgie_Rx<_{VC~sZ2`HYhez4f}!I_FnK@dm1)_W47zXt;8Si3ysD{X@g+>|ay}e<6P@ zo8F0LMe~M?QT#1_{$A_`c;GAA<673Jf9@+ky67waH}9xJ(%hZTpsD4OlAQ^0FxMZO zHfzPivo)|-2x*&2xG8>NvTjc3ee!)bCT@ZJ%0L`|F%Y@!*hr8 zskYxdjaIU-8C8$kY&1uyKqD;;f(oMMFOyjGeq$KDg0@UF<$$>!KP~zYO2SC}>3iAzp|us;7@O*R@48z*cFF$^ESx)i;k1723x znNi50g`tVKB#Y+X!* z@F&T3!3TQ?)gZtM^@|8_p}HhJi#&|53Sm$o{lz(zh!6qwEx#RhW0V@XMo8Q1h`gr* zK3Ly(N#o;&aDLBAk&Zh?Qim)m2?LOsVS@1X}N_>|itp)8HeByV=WBC<+y zH%h699rQXz5G>fXC4TKXx3jWa&K&By{@P0hyWQ^SL{_g6{{UvX(7Zd@`o;NVviB6 zab)MEF)UF$vZrodRwUz^>u z&x{Vn#Q-8lo+xlAzDg2&AxH4;E2X!VwkbaPiLVXqw>U42a)*iWS2T zvOcxmiINb;)ngSiAUs{S-4&2auUsFL@6Ed9dfFc zDWsNEpyruNsPsl3^2J^&UMN;2k%&LBMl+$*GMQvFT-no+ui=l0U!(0gjVyE|q)38e zl-Xe|GJ)S};czrz{%3;#$-?e6Jq%5N1wg_ZXyMI00kc(L?i_va{CW#RPm6$^Og(@x z_T&n@lt#{(tb`*=%6yU#IHBZDZ+3ew)#`tF>V;>Xd}eUYjG~iozzM@4$j2;NJOyN-$h-JZ&nEux2$Q5P8-L^>`(OQ) z3${PI&g6NLxneK%9y(v)cO|dB-)*+;zUMDI8@zid#6ZeneQ2xfmoEA6Or1{c*<0DW zVpFxgQ6p(In>#1fuYUR)H{FH7OtP>PDr&*X=q~7Vr+Kof=aC~*C402|>_S~aY-~Xb zk#Gpw#@@^(KvMsv-zeNDq-sI{X_meJyf5ALz>1}ZFYS&^ zB)$pRz>_;llUFZfWv;fbTzCCdEqZC2#yBaA}h2Tpg z^GPG4+ycHBXgM;4VkH{z#DcayJ`%}`P?-(b=pBv*+el|LXL{KZf^b~r%JBk+A0 zpoV-yGdnIS5j%rXq)$BXh^FF!G*C$V315Qs&tRttQB>>KuBU13>)*cd`7OJK=MHx} zU7the=r*D9TxqgaWBt=>UwZVi`)~i+p$9MS=I&s;G^sgzbfe;f#3VKaLb=S6Q2}tJ zPaf<7Xv*YHD^d;;b8z3mb5Vjshg7pXrSgSf8|Du{8j%H1Arb^ABWaiaFd1SX6QrT+ zwyjV!egO7s5Ib>R#Src`x^{zg)>FkbSuJ(j|G(&%gYLWi>;HK2VQU^;)g0>wxmfV(6QZn#Zggy-e-eY-IurH$mWs_zLAfyV9i@%W%hUb!XqC9uBg32;w)gU7l z=L;G*S_yN&$4LD_MGVxzYeE8ph)}^t*n9=~KawPg44bVefy@cu-N;PToq~`J2{HZ_ zvNuZe#<3v{V8wG=a$+IhfYhL*Em%o$aW4qIC+5%6h7X)8vO&?rBU`M<5pNy!u;L=U zaH_4$2HLwq*^JGSwI!hoS0J00MfKGmU4P3iUGHnwDpArAinNzf1v(X=#kKzDa+Mq%NnDR?Q_^}I-Sn&@Zcr?`JNrC)@RK|VM?BE zQ_}e;vzE@i_Qv}*ZQs@G>nm)*l`|cbgJMz}z!~NMSR_5LmY2o{yHY9??$|C2JQWMe z3((*T)`nROH&^%-%$fi$5g@6=QMhDGa_4UzSU1rfoH=AVc|zN(dHHy`xt*9Rm1_+4 zjcnLBt?c~%)~~+$rAJRrw&`$c;0gdbK(BlH(jVGMvrvV+wR-(OFZti=e);?TPdcL8 zZm0Fs;~-GV9rci=6{Bd@H$Cy}_y7C+*PedTM0>K9db2T}T3X)dQbjtXf=&wTMQxBvW0(*~N|PTQTu;g&VI{UH1j^Msd~ z>aZI>h77MoX(yUK$3Cb}h4(t-7Bu(aMA&NJP%=$Svp_${l(l>+8TkC#^hFcB9-_=6k?e3cb^gWmCBWnTCRdp#HEo3e2HTAPa2&m8Li#dV)Q=gqHt z;ei!tvr)x*C8YygR$piSeAo)0h8EBH;{X0!xu&(m;4o3fIURnBV+jac3!wyuQ&d}* zFEV#i?9k}zNl3UEJfHy)0~QdE(tvsZB5&uaX(bV5yOkiD7HSKXumDpgb(VbL5^tNyVbmNGK{^Im7%w z6kh5d+Cq`YccGpn!idNwO@L*v0zsEqM~LUXRT|sZXpD@F|KWk#MH*S>8g92Je+Ppap0VA6MZ|k)fDs4=_+ey;J4*6h?|I#Ehb|o1w!L2G zEwqWVb-SIunbSsg>{zk#S)NqC0R(_t3ZMJ{jFVi4qwF$y2QC~j%huvp5Ksde6Y7st zHvFz60EK?Cwdi0zBqwoOIv6oA!mO5c%ksLL?(3U1qx4OA?(Kw4-?eor*9O}h=->MM zh6ATHZ~Ns}PB?N|d#YWl`Cd78zbriBX@()o=|k%8T>VgXO|#MX)vfn_`8&Vd|Kwvj z?T)6yHC&Ni!Nt2BmVeu=Y5j3(B?+&S~i9KoMGE%b-SX#5F7{x^IjX4p2OafS3l%FeTFLQI$ftWdpU+6=f`w zH2u^4%O70+{Om=uY$vw~%h{*&DhFtjzQ)GYTaG()@eS8}vhKFmDzhvzP~5i)LtX@qvN1+b5wQWyd)bJc`S1h|7KqQVq9aL@Pl=*G4JQkU zS=J4WS;yxIo5HAqow61J=ft5~6H`5?k@gmp)snKbd7gjg8y|nqTTk7z;;;2atAe*O z<&h_zP3DuGp@nmwUB2q6Rcn)qv-@MHEy@-^7fNsNUF8L2Ilwt-7$~DbJREC7Soo{q z({xZ`Kp1AoiYTo-CyPH`ljg5ZgvC%qiA7xORInP9_@VM^gORYHAsWMwBp9qDt0?0I z5kkt`l4T)3>v^qatD;42p)^A)rzL&}(oo@Na8!aH19M{`YmJ1R7Jo1PM{y$vXE>Pc z;nK9y$U6@M#sYoe;c=;(sXOPn**kH(Wd#&DaN!+qU{V?f_1fsMMa3h(&G2fF$)cD1 zL?!`xnFR%bX$1H(uVN;+U+$vRWckA@pLlljz>Mi-UW)6o(U_Pv<@vm04*jpseD~MC zxxdxl=VR#9A~OnZsqu`8`+c~^MNWfI21ySq$peLSJ;|}8H1qaddulc6fik=|iw}03 zPis#tUAEZ0v7$2Et@IA)bND5j>?5brjmK8G4 zjp}bLt4&RIo>;xDG0e+5CyGwosQ|n4 z#1}97NKxilqvqpI%A-kQnL&)YFksBUZ|31L5k1(XRmd2#HPA;B&eqa{7#NbE8=wPQ z^&6oR3e=%e4BouOA_WU{W#^}b?yHb%X5b)y0>3Zr2vdf3b{kwXe@DMg_ztz?RZZFA`8LCii)tG2_}pQcArgHhm-idV9=a~bf*?O z@s{7X@?$SLV(G|+&3#q;L#@}8clYwIrFwU*cJ+04`WFiu-OaN4lFmrxLW8Wa;X)5p zuz@flK$oQAaTSs}zA2|lvV8JfT$1Q#NKF9`{mpm+0E{KgYcJv;BNfSrVqhfY_zhl@1=@mv z;Epgf`dy1Nlh9k?=5aF>rc-H!$eYWqR>)oE7mxh>*83VmbtT+XlC8{-ebP?5;HEN= z>4zQkj`v)4-vi6*^+ug)A1;SNM5T8gk(AgERmk<$G82i`bq+R*sen9iuZ z-*vdT-J;5(fA;XY6|3AiioRps*}J7QfEBGleM=LaQt*yEmlB)_s6Y{c?JN!plMAZD zm>TjIR+1y&B}i08V67GCFW&cyddaQ7ymH~} zX|9RAR?Slh|D>rJ4?W{n2bse}r=_)7E!(hlKW4D)P%9h_+=?v~Zf ziqMo0ZZ0`^iTiCHG(!-J->V^?q7Y(Y`9Y|Fw2K5ShdZ*wR>O)Sk)>8qd0pzq!X??p z6@XvEhmZ)c2uOnq1U!U(k@<77C-N+Om+-2SWm-$Sd2!QS4>xBGnY>dOohEG4?7;B^5<1mF%kcXRxn%>Brx1$HsFP_s~jpI&8)HpUR*Ih6h(axl-W>Z6!nksRC9< z#3_J&I$QwZi1lE{atjzG*U?rYKdmHj8-Yy-Tmz;#v6?7DB;FC1w%~a_;*qup3%^W< z9`KALZ1G7XD$7^(-|~GxVhS3uybdN!5xD3$rYVkJd@vX}9Hx?>NBjU7c8kbB26j6&(#!o{kW!Q=%bJnP4sqhl59AQ}DPg749VA{Gfel0J9Wptqs0PulF z5lE28PE-a-K~e~ok>q+TzlvzfGQ8Sg_Tu9Sf5d4yFI3@dyW73#u18vP=bKKKRKkkx z5>iyQTvGh6x}CD#mo=6wJnOBWTJhZaX1$hob9PAvSnsMrhlNmc`U#Au7@g|ElQZM$djdr3yYO;um#ly z$+W^f7#1Yk$!5)sxtLOo`D7h17QwHLD%8O-Tj>-=v6IJF;gl(|ly^L*qjyRC^+s*m zU$>rq(xErs@Rd13gL&mqT;D;W@f5IjG4Tkod}wT}saf6b7H7ZjvTa>Gd-0s^$6H+^OPtm&P+U>B4m34sGB6>tx16F?OPViChC0$>ee1lTGe z9sX}%8>mJys`ivo16`nnOn$AL;&1?`G-*UOlJ5|W4W5SVQZwTSMu-W;dYLf$U_rnM z#XeRs>(G%XSh#!>+K68nMAIRtHVC6IjYK@SaBGc76+fVd&1rx;{cdX4?s|XArM!HL zH9bnDMzyRqzGrmN{&QdP@)s$8RJswzWEC%dOEfJVh6Eyf#XTWc(eZ#>5N3E!!M4OX z7@S;*P1X>-Djo@o%Zlk~@lr~G(p$NS=A;@gh$rz%F^%n(00J;&qgh2L%aCQI8fH0y zvuI5qeG3H_Hz=3%E6HotYFVCl&v?c0#~yR=&P^j(vtIHE56Z8=t3Fi>_P3r{w{6wB zO|5#}xTpZwVik`tVF*FHlcK^Bn3Bj>OEL`Dt~pk>;#-2q{Mu~=Q(+H8>-zCv{5vhJ zjPabkpk-wSsZ?SDF)g6=AU@k|1Gn(a^>k-Wb|Aro`H>6&7`lbpF`Y$kCQ&G)BrKnn z22Ep@6`;>j=Ff^7wqoVskN92iE+wDQoZ<_)Hyz{^UxUSuq$$UBVoI^PF<>G)p_spm zPY3}j;R-eq(Mp-J|K&umNkSmL0$l^NOy(iFBhN0~!sREDzdZTZ zsj;#C!9KT9U6NWHVS#LnR~dgyMK#Z9V)Lm^Yt~S?VD1^OzhL$Ht&L`@ilj9=H!v-j z0^>U85wQ~9ie;<#!PqV);ak$?H;)7{?KZqq^^ z!LyvuOM`}JCOU;P(RZD7YI~w%3X^K$&%P(75<-?u8TG)Qo>ZI^O?4G-(&P+vS3&E)t0TNs#~axi8e_*v#Fg7q!~QKJoPjo_&7q!ArVh z>KfdX(S@OxkYXdPp=1?v!?jluvFmARCp1y_VMMtCiT zOcz8vLe7o1lkSaREaD_QKP*O(S7d}%;%YSRDJ&-_zG8J#%>RvGv+^5ZRdcia`Hi_- zeq8fuJUZvg^-3C7B1yMz+w;29j$1l!MyK74WMw6BtCdV7#WYwF7*)|Ze1L-{du!<0YYnU{zMq&is&!%NnbB6~a;02p%trs9vEBM?_kM(m8C_gv^JH1`?7rl3t?G zaFsZUJZRW-1NxMeh=KepbiwUY?m5(l&VF6Fdr!*eI{5FS2cXexY}hridd+6Vd;e&h zm1`AO6e52|Ps*J}(!DN5#uIOmG4<9Tb6*-R1;iFqDY}g0LL#&anIQN+cCr#kYk@3Z zi=%3=Bn$YqzKayxQ4xuS#VQe?;-J(5cHN@FBxGV(UF1Q0e2T;{=Yo2-^Yz{#uAQ;; z0)8sN5QXYNBoRC{0)H8cmI0!W<9v&x$fGU+h8_#cXOF>>)Dop?*aX2QJt}t{YuQOd zasP^i_VEIRi26Vh$e~*NQ7jCNhh>D5tP5m8f{}%ElJF8AN!RDCBy;07VExHW4~(m< zo@GWcfuV1@EJQ*_uqBMZe#K8cP0Put;knayW%@1e{>;eeM6Fgg=;(l3#V!y5a>1k6 zBp@K>Mp*Q&Rbh*))_8dNs$bv#)b#l?^KRP&FX4_#Q{CK7+1LEtu{6={eu+m-1Hm%N zu>1EGRo%Wk@Q?$JJb3Z=?$M-1YcVQA_l@qQt_?J{uHWp3;LdTjsa7G=2VnCzGvM|- z`Z$%Zn5S@TWgvO}L6izM3pM6{ErT(EJt;nXodv-V{|S!i=bEqJssIU9ONiK0YhzxT z;l9SKp@D9vTTh7Khpua`wTa^}P}^!M{C(Q(yxFK<^W!_d`I9>r9)55>=J#n$*iy&{ zX`w{*vGtFyyy(LBpZ1dDCa0!c3ZoJ(B{5ia9UCz$I)5&96qzG(3cx4N&a{_z_!Wvq z=@G`4D9S;6BY!mVO*RT56r;I8)FtkP!c>5+unho#Vhsq1IVgZZoT*@O;+HIAng59K z+GWU90w3WF`I3-EkI^gf$MAk)+U)cK`%+?xA_ZV4SWoiw`Yj!F3}C5*S5~SVw)2_u z=P4CJS*>sih=uq_lMNS%(W$K!&_}G^7`R_YJq@0Wmz%+yF$nYwCZHAmS>WQp-q{?1 z%otawc(9SmlZzAJ+fxUg61NC$pirg@*QGh(xd{0K_yDEg-Q)`)012)a@t4IKl9P`; ztgGwYDp*RLAgGp^5ERuiRhV7dN4;uM=`qqbBG6WewsZK(unHMS!c0@9z;fJ4E5Cvd zWkW%Z02^v)Ar3aaDki}w6lg>zB}zvTO6170)KCgx*h)T5pTXr+m`G7#43WT*DGL!0 z%agz@B6+1T!uWcTP8<~4?!^~I zVgu;=Z*F>ijUI40iNw!@v9uQ16%^bOdDq`(WV=riNSf6;lbyNC7CyCk%XuIDqTkU| zxh;!J*;NJHLiB)- zd&3T#$bFVO49PO72yK-F9TIlIAM#&u$3CS)p|phqP{9d9v4YtEmIGD>)3-FBC`}$H z0E^ZzoN5fi_RO+4Hv(_Grz4MHWyPTkP3&3=Vlx3?w54zm1}Pqj20Ss|u@0{Amax8t{Isw`PI17dqk}_a_JYi1k{$xY9 z32#l?PLU~U5M^iQgyQdJio(m+T=8uR_tzUa6EzN8Nvcm_S zifw}eE*rUrgo8N#zAVC!j5r@;n1pBs?i)%Vyb^9q@W_KMc}Wx;ID?gF6z3SXMD^H` zF(NLJ_-9Epk~MUFz^CPkL4;{sZnsE}3S~%mg9-t89XeUbs~K%$28Haq=&PWScy2BE zGyj0h^k@$>ziUkBTB|0ezuwq6KDB=Hmg&<5+?l0*gKEEk#DyD0X|`?LzGv5jJNnsp z*X!JirsQp!r1|*NqC*b6;m(II_>Zr;tvpMFxb!@MO0X|L)|)1m>?n4%{6a-ys=I&d znmYy-%-7vKb5#^Kd(^pCtEHnm_Pq3^M-TTkJMQqq6fqwsBbDF<5J_Vpd-e08LzlV- zEByWqwA#to>V-ys|Ee`x*RR`BU67KQtn^asV3p^hhu4+xjzw!N)DC9Wql4IyP~kYu zU`cqL%N0s`TNILsmdUdXpHqYzUQ?8soa$6`sz&lQv^_;a^xYjvQ_E;pbP_rC;3;kV zv!+k#v@DChR_l?co`2{2KRfgA1F~95Xkh(54xA9K{!`j|U*G!2{`!xvKH*ze{(D)J zu6iSV=qd`*kw0bx5=#c^i9tYjkdzKssqp#{?*(-4)0C zr1$hiR&>9oh+oL(FO@)|Ixe_q8~GyQB=TDjYgAC+%!I~dGVY+huY0^bjGc7CGDot! zWW`2`5ynSf<3k+KSj3v70n6;$1BFSTnIbm6KkFI0S%P>iU(=Xt8^{riK(SF{jFv@g z;hU6|^T$O8paCj8H&2*CW<&3DD@F_?aqxuRvvNI7^K1o0u4g@YYpp8UuZWJB!m`Z#^1x+8&==eAE$Nz3#W4x#9rrN8G{|S?v|GRxaW1%|872<={LVkzhAik03ZNKL_t*bjOwK{ zbEkA^E@3IAR;2fo8-v5IMqKmZ^-;$j(qB*f{^J#^N?fAGFS<$_b(QC1V-t!J12P*J zqs2sUSA()DYVzZ(1@0EqBjm1VQgGD}5`%g2TR1d6d@_LoMGncz)KXo`J=)eCyIiI< zOT&pCN*H{p{o@*BGja2KG+!qO;NB#n4xN$Wg0at#itg(F9UGfUb(u9%S}2x? z7fQUqDyj$BdUODJK!(4dL#%P*;DZH2aN9u16f~PV6t!R!qmPd2j|#d<9#6@M>NFW# zX;2cXGxG6Ni@#C(W-uhK@Vb{oUjxb4k}j6jFLdvOL5X>U;-m`_R&+@E&Ercg_v8C&Bz5eHSO%balKI*popynEtx64|+8FU-pBLjpX+29u3I9y9ynr0vV zw=b^PxOdKeiz|{*krk&I+9U{Ws?pV&^|3vB2X%h!cRn@L*DU--x+U_+lGloYX_|Ld zP5R4505c}910x~m2y`s!(bBj!wws1l3E**2l;iB^MSgZXG~1icW@Aoyc7gI1MrTP@ z!JlZ+l<pbku|IXZ-XKyf(Y<>MeZf`Wk{dq>tr5=)S*K%$J&eTP!f7Q^#fh_x3BxvAAHA{jtyP-mP$2JC30>S1F6UHgy{g@fK{`!!cQ!_SWQWB zM8UZuNb2mM;+7>MGiDjo>B{0-S;<(l;b<@!;)TQxkOb142}gIRMK%W0!ydV0Gm0}` zTA_gyZ(y8ATKHs!1p;_T6-Q5`fxS1kn1}dFQ|PKJ(N@aH^U^dhe5=qTOb?zUIEO9B zRVk!z$hNu9kA}xP7-?CVVgp-KU@D26^TS|5(jsl~N-ERHUlCmJ|0Mecsa8IsMJ>5n zXN7(V^Yo8SrAN(YghUsEQfZ$Jpo|sV8Fwv@?%u8HhIaL{IyL^pp6ZHKEIYqdTQFx@ zYoPy@Uw*aO*}Z3UEUPz+;rf0xpww{f%ap~UlMX-s)8D-IhP#`MR$)qw9VU_lRxQAR z;8O*{tNjrsRn%S9>-FuElMg+#e0ctFnHPTRXh)X{_olU3qqBYI2jBZz_iclc94m87 z2EtDo8?Cy}7IxnBfxdyE?pQlXT>{!4U+UDT`hHrgKmFV$<+GEv#J-Ly`a>QtAV%;! zAP$mdt!I`rY?_4$>%-m_$ieCWxE9}(5C=stL=XGWB^fs0inA(8@o`BuM8WWl9<0DT zfB{G$dD{^$#+j0ezwO=-)>{OV|c4X7VF|I(U+vB(#f|7%JMB1J?qY za_FwPkb{&9&nt=>1jjUGI*|?p8fij`q8R&9jE|6(9ucGfKXYnc!fv)t_D7a; z%6$Hk%$_I#p*}yfabDAANzy6pZFl@}VD?N`ZPc`Rkia-qzNJVnp$fb1p!fdf2`8z@ z#cQi@=sZ^|LaNTfvnU8ovzxbpqG?!-@C}+}eqv@MG!<6ZhCkrI;|OQ+xUZ6}m@m#% z2=P$xn_}8LALK$odKg~u>_}?JbtU+M_2GU#jl=VpU?d#t2)byvCFbg+Guk5cs!;_A zZWvR+VzLrCTGTvb97M=)kYJ){eGRPzfk-Hc;UQTe1ma6tF(BcX$c&KP*>ET7B2yN* z%xI{J>nuv6cTaZoW95%>uZlKaqX8ndgFI45<3$8h+u(jl&G;PZv5Ah(8v6e+_ugTe z7FGIiRXxv}x~IFRr)PR{WSAidgCL86tONlAm_XOKhFw=ceg-hCt|BbBt_c@0t$|e$ zfkjx%f{KVr9?1g?!{o&DO!u3fP+wJ@bDw(J-*tWeeqUcO4Bc-(PlXfibDvYE$ZLms z@PH&tx7!;ZZtcHxQLooI?9f%;y7J@M#?AeHSJ#rz$|k%ytdrM`yzlc4J`U)q?b#8N$q`&*k-D@A(G(2<2-$5T%kv71jN!jVR zPo8|j5v+7@9?F{d*b2NRk)ZpdN_lmo)$JFlNi;+~%-z;&wWl_2Rn)CJ30{{in!p4r z7f497Oy49c3zZT35^g2Ls9+{h$H$f=qFBooEs8lU6H8UJFN|MH+zL}O$tOSc%_sI0 zL$gM>Mk*%NOMhX^)YS1O9*)PAfGhM;ggk`#y-71!o;O;x&tHAR7p}T?*^vi1B%xCZ zlcSgQm*Av{N|LSjJ#p3L=bd)knvVOJe_=@#{E<9U)0T`$Mg22rZa7Ud?7{gR zc{n)E4@i=P87?>8epa6`W7DRsH{5u;B9oCM(KT?rI2%Jar%=()rZA|k;faxrQnGx} zAVpwZF=`Bj*qkAQ#v+1B09$!1WJQ=Ea4ACAX)wd`O@m&1BB5H2Moc%DETlmPs9}c2 zy%{$8<`{*DZ4)m7wYQ4H%Q7!q4Dj*GzxBlC-7{y6cyni{q#l8_4JKK$K*8b2li|ML z{w(MS-rh(Tu=F#-9y}AnED|!5kUY0Q2GRB(XY&pma#Djahy5)cGXv`T>rD1xjB(l|*T4Vd>EpIyg=#|SB_Pd?L zpoAO}p;Sfu;gKtQ%~uqRj*qy}dVMY|>3n!esq2lM`~0B{KP63(okcVT9@rnkN2^j@!9OAVE3m-0+z01>NLxKR`)MQfsTW!e@x zBOaG{btsz(H_yUq<5WdlG)NXzWN7a0TUm82ZWd+bI@l~`5?S|jWq|ng@YzyT+^2?k z2T3bohy_h^>_-0=)_{GRp->54od*~BPwcv4Z;3pCf;GW9QFUEJ^Wjff4g6P>1k;rf zTDftDQV8^paLr@Z>yIs4a_N`9ziH?0)TF*yijwRJ0AiF-{5F?lB4xmFkHQV@k!7*+D~u#!OaywB$z{dL z#tTdrg43Hd^wfgy6UrlMvZ3LGa~9L!lrU)cAFFVfPSPz@NyrKkSt$4uR%->uPZ%CJ z-?$e*RPj&pUtkWu1;C(tVlu~6m4?R%3nDMF=@&cj&*W6~t) zXMK}~6ADG?@6PD<-gVBYmwo)b8}3@`;(kT6N8$T3`8o|x6{arg9UPj`8J_XBw_dz$ z+pbz#FGG(l0dh3QQUW#^t~b3pFLYY3Z{D`!+FS3Kxp2PI!+>EZx#pwvnzq?<-50+2 zNadTnldN+=HsEF0LT->(G1&n*B$m;_=;)9iMPfqRT)Je{YnpSx+jj0Me99z5cZ@1! zl(CIH=yAmkL%1VxC_w|_u8I~asJ)1@AV7u7Iz7TEC}M#8!oFHEJBHf+mw8!lHh%H@ z`#yTf*XOP|z*(qpywLgK%h@L%y?W)Mevx?+2g*!;;q;y5Ik}-WYmN1r zx4-=zpH7!8Or31l048HqrWZvgFm(qq9(v-nCm;3ki{6&yeTsu=k2M6)ptc)pr;w3= zdMT+u6@kYZRl-FpE31X%fc$8ULsb7))u>;tk}`W1@d*E>mW@ClZ-hd}LPNG>#W-%RAfKq@(KK0-EfB31 zJHw!l;NDw>8 z5=KF*#aE6PNQ;*A6V@9hN|SyQze9vQgQ_Zt5px4p6cM0Ny5%CZzHS zm^^Ut%r~5Mg0p?KGy$Mufn+68VtP!4)FWWaOPNjeR7o9tO~`3lU%BHynV2Ls;ap1v zr;sJWO;8q*50qJakrg3jJ>w5WIS~&-Kho1ZBgK%IRro2+rdu-6mNLzhxp9kDZ#IAb z=Lg>S=8Nl#7NxbMEG<^T*M|8znk&%_74fT2@m72jnvfqrag$9#RiY68&#me@C35i>XWE*z2Qq3ah zf}JKcL1yD%gpknuPBNe(L99vi`;}0i#$-YEFe6fyggjJr-XcOuDb!QL=io1uYvDvG z6kcXUQAwJK*W_;k5AeH~8FV^Xbb9j-TKezANhm6i>Ic#Ed1;b1CVT6mEyYNFcvH?Z7>dt>SNo`bB#H=f?}qKBmgeH5(<+2_3U=J;%7o}OT)XRk znF?Y|QCbJl8m-oE?|SgXC%tE~*&JOu-q|;)Qp2qfHBq(HWI&_Dsib##D@z^atkn9_ zf-v~NczCs>+TIdF&N9o)KQFuFC2ZV7%j}vK0~=P||7xj`2)6t^B1F_Q4xVfnhi4$+ z!hiWT6D0s0U8iguzUX`j$+S_)8Lns<6$fLwg3Guk7FRw*8j2{9RN)7Fq?NYWMwsBq zv69&ek{~wDB;bUUG!z=aCzeBjkF>BPN_>EZE?Y>6VxY&o4vdpVE=xp~CaJ0~c+H9wqD40?otHg-ZoY&l>(E!M+wFbzv+r+DwEz3oKP)+PRlD5@+Y$;6nfBG$4tpS|OO4NtG%q*XSu zbkV?2tLPUjrvVeYA@)mEZ?`}A?z4g%Bo+#;nZ?4PM6tO#ifFig!}0?A)9Mpt&G6wp zB{7(Dx^`x(t|T9)aq2fWxtzf739)+=jI)&mdyF$74LV* zsZsO#Mc3WB&C2~z{jy%KCt zZc?k2dER|?<1cRd!hVb9cG}%WBXMYzIJn>xLW3k*H9DdkVudV#m6ZjGs;Yomgo|T? z85W=Hy|^-pWGxIV+gBQh;%mCGT_}JcZ(pBgYG^|!7B6jR%@>NKxjjEc z1^$7F;RAuxE1Fn59%2A1WGj4^lW=p0BK|C52a>t6%5iZ}qbzf6A%1cLNPK0CN<*Lj zQqwJFU|K}jfKkMVC~#O7hxIk8WkaJ3KZVpodx3O3w$NbKP2Tjn{S`+YaO3a(bljO2 zeDkXxI$-JIJkOkF8%tA`X3n?4m&&J{XLm>8J^e{pne6%0Hi8t=u~1y zYj#sYxv@>sz!F+ifqvI`5TPnNuN8DQt|^QtM?$Q>Y%8^@1oc*gZrZL`cxBDH8_qo# zNFvBnek(OekCLOKWQ&Oa__l0Y{VDCBgc{a_N5X2MQq2w+Dgzu~;U(iXz+5RnfC`$i zV97$sB~}UQD@sQI$VLNIoe2`E66uK4L6Ldruw#m~tE|Ke0#d+3==h5?FT&JDN2Cz2 zxCvpDwqhn^n?Q7n30DUm8=Zn?R?BoGppEpGnQdEZlm#(gMJD z?@kh*Q~BDJAKrM@1$R99^xReZxmd>rV;A%yC|Z(CPVQTN_t|fL`GXFf zOzfT7vSrt=?|Sg}e_XqL)3)7vCLiCpJ`>QWA5 zJihMPlh3$d&%p55oZ)`E$9WzGv;I9vJI`EqXLEM@T&*ab#hVj3}bs}b|@D#lHVkqh`Zt3YblxZT{x#$w0F z8rWzG#Z{;Z5@bmcGaD+DL)Q=OPj_eG{taiZvV^GWz^#}7B`oT$sZAr!oU@Ei-JieH>HA%G!NMDi3j(?&Qy2V^Y*)M!}b@QeEz>*^4_<<_9O>0 z@+^1yo-qB&X@U@MYp(T=@m|zPjwiXy4vY}uqwp^U^z1J+ez%O+g#8uvm~@BX01SC0 z0;HW`=)g61V1orO#P3D6RaG{48KyAR#wfH=sFob*e_gMlh*3>ho5}r zy%&D*_B$V3aM)^RNxPkXxCbCCgCUtWBp$Rn(Pn6V58aq30xTW*DmzNsU=$-%rndn; zY25*58OyUrvRGjHi9|bqiW(T0zQg(zcDa;QvC|+yFtF@F0K~;Pl0}fqH6fZH@-Z=f zAN)K2$VSRQvCHPsLjkZHao^}~X~j~|k!l+zkcg46f|bQeb2tmE1gX+u+?5g#3YRJC z1yW86)DVyss1Ip(j8tN{gxj z4S9~Lkclkj8WCNUuMQutX|-_naMsTh_ZHFAe$3e#7yb6T`;7Z5>%Kp0~UHqE}U>KG^b6m$9bP=`BCv;P2gh+oq}ZuHAbdxc{lTF8W20 z)#}ZG=E%s5xvQ5t?ekXC+B|nZ$nthSpr6oz9{cE2*woWKo3?!XLvNkYY;=2l=jv3r zY)IouYG%NY!o`m9L__Qu&I0?gj9M|(sWlqZ@sOh55abz~>+xA5Vap0_6FPs&44+^Z zLkLu2W(B=tR-}wl0E1>DN>tH9iWrGSiBF4r#}Uo1001BWNkli@=#t=)qQ7ZNoZ z>z>+t;+YrjXbdb|FxG2NDN|D@NB6$1@NU5^>c)H5e(lR2Jn^W5d;NYb<+iw?-I;YJ zZ^Oo&mwoZSzx|`1_f4%aIy_@^#^Twt(_o0Zy)2jrWdTsbZ+X^taB$$M`ycqgyI=d( zH=dsLy0uzr4Hbpso(nBA;Fa)@nLEgZ-KjL1Gmvj3x`9O{BW4*ji3<9Srsv{*UXtuW z>k9u1EXPKG!c47W_p_+EC9|qQe~XYWa~?i5sZNDB{{Pn(DPu@@$2plxxn7C{YmO{L=EaN$*~;-ZYmdNG`hqog&|!eV3D1;(=4 zRS{r`XX)rp;K;**8qAZHFPc9%RV~B=S-esUl!TL2TIfO>*HnZRR?xCDRG@PaMq0$o z6~_lP=c@x~cGR`WPMdQHPnhzz8LHCq70z$!~g|<~nO34M$V+ORToOVUI#iKKv z9nq-Wb`t3?|tTFXPno5t}$bDq}OTts76{tg#GCBvU#ib|J^;0B(-GL zvNg`gnfXEiYZ;ZfWz7eXLs9OqtlY^8sX|t zuRCe0wc#%hf8>MbzVpp5&+@#MBpjwWoYz;afyTG4`_0Eb`h}fYIktLvn$~>>w4&_w zvv%Ni5*v;k7&O`mqFCCzH9YXtBTt|5q9ZQ*mv=e8LdepF)}W!a8I3cH9JUcATtV|J zQdO0_C448VZ8SfTC9OIs!=8t%9Z3L#WQ9G7{8qIXsiGE^3z9?St+JG7{MD z7oy-6Col&P6HAhh;uOUW&C5bwBx!x#e#-!$P^Yr(>>g;3x?V`8M9UpU6qTlVQ z)YPd3L=bRO@$TYplqIiaVZ5y7WE8XSm<1$+Oe~xOU_p2!+9bvxg91C4QY|(U<`76I zyuMUoZ!CPn-v%q}#bK#q$iNj4WSkLr`yYAR*7Mq$7}L+P&wcIstG;#f`lq*yAF^_A zu+i)G>9(e_(22hX$cn{Nih7Ovza^mqYus1G+QUAT5A@FoiC4X+CqTb8`+WZG#RbyUPSo|q{XlMo;Y^>`#a$@MQV zmkgeeGLtnDC&)6cqjvDvZK?zc2*mW?K-E1NV)}iOJjCWbXKN@)NeoRq7$e+^rO zQC1!hkrc1>w24rHN!B)2vuhv#5pCEt#wk@Iv$`zowj^u=)~8)DI6@M?svMYA60nIW zVKa)?1~JkVaH3Jw;Ql@`GSg;-kAg!bXc&yMqq@7&OWdxdJ=bpl}r-j zqTc+l)yr=D{^h5g`o8XJ)fgIf0j|@lMC(HF=KIpmtT$)=T>pD{k@tIf$A;dYVH9+- z*+1Dxj<8f3r*f#LnRV8G>$5vfeZl_69C<*y-EFq&+;$#l)ZVZooB0;&R0s(Z9?PX5QCNEeekW~w?wqa7FyY25gCAx zctAk@1JJG1-wF+Rrm!+uo;91z`_?{o`dJrG3=Ga$GOIh~K!%ZSa+-;1+Zbp*{pW|? z`Noqk`Pe&ihaf{Gu2Yx7=ZS1My977 zDd10V_JHcrAnv@l2q_V*`F$#|;PhQ$#x!C&hU}s7De zAO3RZj^`$QDRQFHx@p$I4+I?U#i3-Ir4uo<;hZ;uPrByP{|;SHK?h>|3MYZ_lBony zE9nv@&6m>y&M4w^{UPVDwTXXus)~M5{{Fseul>n&-~RNmFFLH-?bTAQ_(9G^sA2<) zi0I7%en$hs@@H*q+%8sEWUf)?Kj@^hc};d>U;kFA%3)~#YqkysI=qAX-kSG-F!mLO0xBIc4X zhe1TosX6>%W!ox@pJY{hE=0|}^tZDkX{M*v6#4aTQ%Y$T#D3S$(foJWnlz!rtaC3KKlFgKmZ%KJ5JSl!UAB^U`-JtJh}V4Chq1U# zAz)UgQ3bmiYkhwQUv0;{n@>Z#H*Mei`p^86`;}Tf)##>VVZ>#srg~sdGvpx5??>)l zlBz%b>7l**`m@ud=#|Xd)5bfM?-hgL3T*0tfW6k_#DVL@K#D;UD+ne_%n{HKPEtsW zL=P5AsRgL2sGLYu`4-^TfsDtV*?8tz7x#un<}H{xHQ6-=yqEDOK@wkQ=77}TGj~7m z_BXur%b&Zj^p~cF_ME{V_j7;q>ctff%sZt>A;9Jc69bUeiJAj5_YrsS|KbZFF0 z&9;nRn0lkuZFfhzlhQgM)C0KYg{9BgyRrU$0ZT7mD8 zpsm72lDr7Z7+@r;CZXFZs*EtZvDo0Z+gvX z$DHwsV_$dri^&q^dC?1vRg{-Qo)FoEP?6xZj_#iVR+dKDFy3rAZRAtg$U+ru^^@3m z#gT;|dB7R5s&1YJ$O7b-#V`;N(vX=7gdfqw{!rnJ31Ly8I$4&aX|vuS+yBS4>#qO7 zudcoM_Kn+i%vrr+>EgNlen0C>d28lxYw)UNG)o8b{?6tlnmY>FNRqDQ*G3B#I}ChzyoOsfDV}fs8;SAxk+q%Y#$$W36NIM9g!lRP>|PfX@=$A?gPR5--7r zAaN+ol6eH_Maw|uEqU(bfDG6VKje~k2tlcweL)o=D@3V99wW1)*aEUO;&LhpFG^5j zu%S^Yu&lJ7e2)a=1-LZ)rd%(}QYh)`VDea(EBFQUtCk+DsAvmc!!rl{78Vp{8FI`e z1@Mhz_vRhp35Bn?2tyC^F6ikslXiODSD*I6AAaLwZ+QD><{ovZHGOBT65uwHxDth} zbW=HSuEokk?CejJdfoMBC~abE^;&ae@R_?FIO&)p&w1rBd6oquPG@MD^P*NqRgGgM zp_^@GPjt8-N~taDH>!F4M?3MW0=n77 zAeaolNeQhOHN;=4EV@4qp*37-Ovq@o=n)vmh%R(O(s^keGM;GnKk=z=Uj6kO)L?!7 z!OL~4UUo8@=UKO>q#p_Gnx3}(&WVzVF;oLc6>gj*;cYFYW<-ZmB8GCfU~1_CGlFJ( z2BjdWEMxHIJLu_fW2Zwl{`;lvPW8uDEPnRS_kQK8*Io9B_b3m}wW3Q&cVu=)j zWo!;duGu2daDwwEcE!@KAt321X9f~)0YV{xhZv!Cuua^PQg4j9otjol4_Q(4i)(MY z``TOo_{qhy-ubpyzUH(S&KVzTH3!Nf&+~wUeN%JBTj6L=*bmO2$SEJK&?QC*OhR1C zN~=W(;Qy3Jncz;VVwQpIo-`g}|1Qsfl`vqxnEur<5aduj>`@ZpgK#3x`j*1=BpDoN zIn26g+sKEcs<6|jJhY-~;;SO$113emECLu7JET&0or69v zS};B`*vR~S-=PDbFFaSCR4B_Cvxa{0r-$F0`=aQQw=tCADM+)n^;+6(w_ktu%eHOZ zbN(lEAri$aAoD~Yf7nzdS|EFOAj{fybeW#&_#sO9$#wbz+Ec=4R2 zi{|G=pA^Zm@(^DYqH>|YAjhg=$RP8Yc`x2B*gi!E2{j`ASQ%#({HYbXEX*S@E(~fl zTN}1)KmO(K->hr%7R~NW^?W29%#hsw>W}`m1~xwM(5p{a^NlMn*1iO-2=}*mxpjYU z%^0}oU%z(671t~~@yM**)^wS1Dfu}!Bo7X`k4QLT?go<^fB%B1rO)2==;tr_r_)dR zyMC`%tEKSY(G3UwiL)Opqy&lK_(HeFkme{APScB}7i@yX1Qcbv!l)fSS(Yf80Zs`p zwaES!Xx2a*So(eWNiWNrjmCoyJ@uM*eCo;V6Z4+8s$Nffz1&VrhKdJ6Vxg)<-;7-Y z?1sP@C3qE4phgsCqe~1691S|iGWHn$VTrP+HqtzCafDp9#LFIL(w}S(E|~YDU*3D^ zC!Am>D%`RvMF~I>!l{d=pb%C(tyW4XXx=#u>+d!zb+{nUckg~~Xy(vhz0v9Qb)fly zBE5AgJmY1`slNNQ1^X{?uUfx##|JL?<_G`vTdzF+@MDi#bJ7WacgV_xIL%u)Z<-f6 z-1r#6_dsU={4lyySU$m|h;p@Pnqn)DaNo)apNd%rc@FJ@KO$Fdqf7)5DiI|@3`=ZY z*c$(5w=7KVaCVy1{9)kI){S1jdHXMab=O^Yul@c{{@ly5=J?p?$|bWJHMd+-d#4f) z5EI�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%0A@g$zpO;wg_!Vg9ExER$+OfEdg4LF5Q(_N z(+$H__+&M?cs^*#Vhj-OVOjy2bOb37suTUnL}|r-aoHu{A$0bIJuS(bWU_;tiCz}q zMNC{x1pKYOC!xlT8O%SLLaVMRao(=xWIWrrcHy%hef?Q)`}nKg z^zp^p9Jpb>O_SwelMi_pqE1V%iD+|0VT{eN@nHf$myUtBJl5f~DfG=+=pceBal_@lR<{mvJ@@Qka7~A zTbFl8H?~%=;TJnGWTgP-jZ&69&U~h0U{C z0Ufn;T~%20RU=R|5QoFsN9feq&C~5x4 zA9C$t#LjDKBJUn_>zo-Ow#_BQov#lLyoX~z&&Gj~$k)amVD=?x6eG&}9AAW3GZ&1Z zk|$^Ra>-ijM0>rpYgP^V)v(3H96P(<<=ak|m-g9l(D#4%qaXhK;yWI9*sN)=gU37D z0Kpkf<}fhWFYmce+r&nKh zOH`|B+eBjun{JDCfH;erv$zCX&Lg|*%k%_C z@SJZ|duK4o(18I2;{zZrwwj5PqVK3~Swn3Yh=4;rc-9N)3dX7{fwxwKdDtu^#|e9A zDmeyEibNMbb+a#wZ&9qI{>nCzkkSKQ6`}(?3k30GLIA}&XbI*ock^z?U)S>s z^RbODtGS3fYbVuw`!h|{pvKrJdXLjh_GnV^|tIY=i;g#q!==&?M+UO#vEX|F!>B~Lo> zj>n$yvUmRW2fx^I%weln%`J~ck}XJbl#P}V>xWo2tK(8J2zlR+Z}KKd$r-Cqz}s3g zM^%@+15>s;)Pw%QnpHYb3cU$sQ5nvbyqb|*X2r_&QMTjZ{in0(-#zAU{^|}#zT<mjEE%{a!;MHP)VvRKB%4iwROro|j84uykM zGOCsdZ0K>FzL3x%IOZW~7RD>c%^kTSjuFYf$rIE}GxgG%ujynuUY^`^=@sKDY(4m( z;belwUyQXyJ3`e9yH~A!_xsNK)CXQUo=khaI?#|H_A3Mh90Fh@#Z>J?VE`a99f%*i zE5Hvrk5`7W7kfj?Nt>rnAUWQNWJHLHk5kA3ExGFI8yZ;CPJOz|iIg~N)(mo$y}lU{ zkKt)`#q>Ln8&6R($4m!eHi>|kDBOMkb0cvb5L_~2hp(gow90v;r}j3-I#BAU_eB(o zIiP)Zgd&NiT|h?itf8|J;U8R+6_kN9Dnd~$?FtijI=Gq`i-meg&m3XnWnWA=e(iB? z1@INdN5ibuT#3o35>^@0uHGqiha2EiSXH9s?eej}cVVZrd>X4!RdkbQ}XSqg+XB%SaY!4ozxP%{*w zhgR|TSRqf1wDb{mg(w<|3>KzfbKo<|u>L!yl>wN=HXS46y5vRz?*cip?q`bOsN#uX zf$wM&0VJpyk3d5w2l1*mtCc{v7PnJM$Y?EO)Dau8#QuvXnvBNx`>WgE|9hV}^GzRm z--kYblN+o*^nk&FkK-oIq(!zIy{q#VIC%AG`cRp8oGPoXv9dNc^6S>#>309#V6MIL zFW>*!bDs9FqYm3P8IMCKRVJ`^-qB~9v;aw)b)-rpiZUsm{F^NLlkw=t!?u0+?JwvO zTmSEW6)|^ZCI9=+-OBI(#}9UYd#gvd|AULu$}9cfWQzD4uO)h>IhHkZyrx`Fl93oJqKA2I0SWA$@EYfXTchkfU+|Yz~$vf@V#1d z>zoz}Xvn{}(^w(h&W#ixP6n$8)OsnAP|5N%Rz z4dB%|U;6wNmJ&u(rz-Ki2_{mp|3apzS1XRL1dcGaUAI!$YWiL?xl9YdJ3GUFG=wxI z=II<YV2ZP=fmtDKGJl(WWIzw_PwG}CQ*HF21 zMS}wgDMPnoO}QqF%(+gkKsb*nk^$%}p~tblSP1N2!Z{-3cWeg8MS^W0B={u{B^-*4-d)obU6vy`T@ zRsgh$KBs>r2_*;HRkH0+`BT&#u1ont01~r~m!K z&wBMUr5dpcHtQ5dW9$qwnSR@fI4dERwb5o2Mt5g48meg<)ar_{Lhowv0XMQ57fP~ux?gcq>4pyO1%qyI{_n_c7yX1Ig4 zWpcEV&N$nI^Lb4KOlai_>N*PLbY%|a*LJmpmO&WC(8qauZFLBq82f)`?agCt-;(mMsJj?k#!WLe zL!f~MM>Ziw39%H#i6SM6WLc4;*useo&KxO_tVA(X2Lw9JP z8))c9&#$M~@AaGRJNKS*_WrHP{;m4Huhw}ee%R zx@e4fjffs=|V@N=m38UvV=8@=v zI|Ke8{es%cJp?^%>ajMo&l4NW$)rP*F(Dfi#28 zG0`&ytkN}%_(PNY6aC01h#==D!Psd0((o>juktc1TnG|29h8x!5jKIHGlNFFFuOXz zmT9l`*yxB{hw?Z6hadXOf9_BHr~lpm{>#7ofsZ|N>#m0%xa-0Dw>Ph^@4npk^$hCK zoUs&dT{4>vBZjX)+O}lfkyLIdA)<-^Z^Jx3+@BGTY^g}=V&wl&Y z?k{)CvaE|Ix!QpAkj6eohY;K_T(}!>W@XF>6$XxSAVHh0VVV`&q#ARR`MB= z(#u^H{#cui^~p$T6g+M>#d3#42n?LhUfBu($dlNf5 zy|%sY=FPjVT{}MBZq`G$dIS2bC5vOhz`9q#K6Xo-UF`4NIM#7+ zAN1Ee_=jqg_m7nG5rj46eR08nw7^ZY5}$LTPF%UiL`5dpI0U(6Re zZAwUBaN9vO1o=PwS#nG}C4yNrH{CX(DC<;cv znW!mZkpW{C!e;4N(3j^sAth=tx~%38K0Tg=vi=nO;kV5)`0ro+%m4aMfA{-sol3}6 zQ+W=`y8e2lT&I3Jm*}s1anso|y7SKV1ow?(D8nES)X%kv9D2#sk@T(}#27?bQ=y&2 zlMclJDLE{S;-bR{_~U^Bxf|#jG~|Kk_ZgJ>({r3_7EG_>BuO7 zH`_~PuDF){F)^sh%)vK=_->kkVzZJ&(HYNugU4+|dQ=b_b+9JkLYvN$vkE-0l)Aic zQ1c1V^pjU4Y=DtO+v=deOr6yrh>-Mf)r~-cQ%lABAO?6d5=NzJ^tBu!lY0smcnj@; zPP>#Na#O~K?!VjimyJ#uY1`j_TOUrlxOtQ8>>4$m4n z$|sUa$x951!fBp5KSqOS<=H3xO#u?{P5rA93I}3)353sCv_*wSgWNai|p z2Cjs~0GdUub5YFT+(V~fjt>k%n@jroyGskOVoBEwA?EXo5n~M4<{c2aLH^Cfk$2 zPVRIWNyZFL?r7r&Y+m-uK_A}w{3JFBr~56QsDzQTGIL9@E5#q>W=+I2r_K*+!~&Blt`@0R%)y02rF+xD^WF`4Q9# zEE=EGla~rPpd7H(T0cAf#zLVeHb+cyDlBJCm}m^Jo58-Y4QO^qThwWwOi(J&HH8K2 z`!u%-DI>TlK=3?P4G7CI0S{`U8tCyiKK8BO_*EbN?C0-&=;8gH3ud7X_w4gvwpU)c zWmtF39E(OlnKIcv5nwdRBMS`+_T{ytdtropi&8V`C?W=7KOSA7mV9Q^7zB&>Y9O~q z$DjWE3(voL>*(Ga*fC@*BMNHI{$hXkJ$FIHSBUP2iZjEP3dtIYYNA4UbVz&fkc*nQ zS)v!dCh3~sD>WCj*W-m9fS)NQE~bLIxdt*C0*Ma!KD2-XR(VY?j}6vAyTVniM^01P z@r~0%5CE|Od)9UBww`EW+wIYBeeAP;@{ieY3mapxI?3EnWoF%&&8Pu@=vCn7XqsW; z%hX+WYU}GtoHxAi!iGUIXsj08laZ$f zD=w`l0T`dTxa5SB_J@omHAwLY^B$mBiJ{HuCSf&x73nF+c@o-;(kICCs1N5oLP61! z$stU@34wU^6w7*{kNAkzNGsvp%sGjSGn-h?2K$I9d(8e%6h3XB*~M~C16s$pluZp50t>$4`_E}{^>6qc*gmC58S&h9UGm@#K*ds$l=G!%O{_D+>-dN zd%eiOd`1y38RXZKSr#*y##?AJp-~pX7}tU#rpl5O%w?A)6iMOmLH}`z5S?XI?s>v) zn!uFm63kB?1L+}b-Ji1dsQy$YJ7}*kF-sqlaGD!ivj>19yXrUks`wM z^k`lreYMOF@p!Wd9lY{xnVbwIG3za+1LfpvB|WCQ*55i3(%1@FLrNbNlUh@CCw5M3 zFIPn4ujEDAdbW+*`x@7h5zoy)Kg23Dxul>6JO?w_KCMp1s7WiyuY-FNVa*CH5ddmP z*VE{uKne!T8GE87nvur3ex8+$D#RWer5qnfe7D_lnZVbVzTIx#{k3oVj(0v?VyQo1 zu*bX z!=$T%w=#~nAc;eOXar*o6W|RwGj_Eqv~1Z(5ltd-SB|hb&zMWg01NJ9hO}cK>I8Z6zJX~r z8E;|*03_LQO}kGR6560Om2FGTLoGCA-&oh}LEjQ6u}py*Q|ENN$N*(aW@?WhTwynJ zG*LiJJaZ`~buAZ{heRweE1)aTqCGnM=Y$on)SUb<)5}WEA&aTMg34m-)10ItB4PWj zM<09WNA<``bpQsJ-%PaUd$cdI7sNRrQ*LzZoQX*m+v=h-!IT13#FjM-yL{$LSoJUl_ zh!LEwW72Zd&&zIkOnUCbMSU6zE)M!~K=Wy0y+y4p9+CJjkwp= z`kF3V2}vjW4lh;`57Ht-I28&xt{6%%^paXYOigyhF~mb)m+1(XJ?dPXI2WU0dDMlP zVTE?`(Shbp7=gg$7J;AHcK`q&07*naR0vXR9Z7~-W=t8)N;{1OM#ReobDqjXAt?>b z9C5&$l4RaDr@WTYg;&4)+Pb&>A=chiG9|tAenoBnnx~%_joWt6J)CnA462zX6cD5* znlP;XH0gS-Cvx@%7Heh05|@q^qXR{aQe`SI++o2t`&6Rk6s3`bHfo01BrWDdV1J|_ zF4_*!lNnJhaya4Yv!OWr75*ZSB-*Mm8gd}Ceq_B6xoDrpRei*;0{b0y0XriVNsroQ ze6N-dKSiTbp3)fFBKm~tgkf*&s_LcGC+|i`LV)0nz=o6u;7Sl{tSOThAwj891ok~` zjm1mrQ{M2{15e&_a<<=ZkG3O0b9xS zkU(!lz*OC+LB*J%gbOzl{n?5+S&D&jW3FsQQY#5q&3fYCaAR7F>ZDA5DLQ>W48%JkDu~a@fnEvA%8>izB2CA8Z-6P=NupT{i#Phm>mI80(Fn8cN0L3;pPPJ%&*WzS(ihY`X)|M{3DPbP(_28Nsuslqd%n- z7%qg?=;cl7bExmL4x6wclZ`1_7Zw000!M=b)j_@?f;lQb)26!x}}4P40%tf$ECcoV0Du*Q@pUB%U8s*a&BlXqSbO>!~QtN&s@1 zX5(D3b$+_CG}6ZP7bXkohPwumf*)|NV!pyICaNfPh?;xqle=qFNaZVzoyrR3due}( zFx{EJX@+v-i?iFtHO1lNbZeUro$S8!uYAMfqj}rbLr3~D)Gq8R%qD|?nqZqj}Y zaZuZ3T_cG^Ac_qBXxtvfpaxwsp6Wzx^HTAt^rA)!U6}RHj4YS_Sm zI_oI)0MsRv8VZ_OE!~a`yYTX$I`c_-P)qeD;9BKhf)jPlfOY(7qnc19|0!;o>4ut^+#v+OC1Mpc!hjyj#Gogwu4O? zWSAY9mo%omfD3596|%!#BSX{a6oiPn$Ytut&}*0DlnO zb}vt-blfT7uxRvJ#|PBo*>#`_l%1A@9sH&GktDqcfnt&vBa*a0L>?%7#^|CIjNDAu6DFdtP?$>u(YmM%r8FXR zg|4)rcy6{<8xFeE0V*OlARp)&{CpzyoV;Ed&5w#d(aAGV@v$6d08E?wZLPUZcO@>9 zak!BSurHx%VgK~S1LB%+j$=ixJ7J+!2+X>Haa&JsV)opZUh?DZ zGJ@w!l?{O$fB5bxoe4>XDO~%XhVymWdw(eRAPd>QQgl&38!zu=ATtd z!za^2xi>OspIU-u$$6#FvQrXYngmqHfNv9kUj4%qoqC)DpfXpgD26`7cha9)lF~j9 zd&~oeAO#zuG;&PY0Z}F@#}$l=<*(L@JBK@@AL+WM*4HpWdr~I?mE>-EH?=KeHFugl zfmflN&Xi)z1fX26Zy~%Xv*N){40?*zjb8=@c9&C4#c4#Lyf7D9?DqSk&Gz00@40<; z;f-(?S(3W$34HD3_}2OU{g66RGw5yb&v#XdQ8tNrJU!y@;F(1-4U zrpD4Xms+g9cO+t*lC{KmIuv(3o~|1VLE|i#fM^&yHL)5h0k15-BC?pE+2o-^7*Z-v zPexj)@gVhKtWJaI z?dO(9LM2+Fmy*JHX81UEas#m#S*`p#2wJr`83RZDq)$1h#*n5|n2I6aX(R`sE^-*C zcoBprU042`f|Ku+hSHCbX(2)xQfT>2x7>m}2m<9bO>vha&X+PAw#+EMzN>QP(N(DW4Vz+tDXI=w)Roh6Y*G>3vg z1aJaI@;Ry{T@pg;pt*9Gv;IS8u1kyp$OMJJWcfHM54JT<;`PAB5`kDGCYia;dNlKj zLwFi(S-!ONYQ_xW%WFC?D8<#`Z_1_N2B!?W73{)EzUCJ>WBGAyOxREC8HXn<#MwQ~@1S z086BXMorO|&G8Nsb$BnGDj5OejBE#nuXp{PQ69I_CpdPJJu#vn^)_&^T*19ww7uu9 zv)$#RU!N>Kbx8v4cdgb=-{{FM;Bzz)3?^)=F_IKiVNN9udGE7sadC+}_ z(t27Z7RF8DR_sR2N=dF75WF7_0;1$WS9E;!Cr3kE$ZI@}=2R}qZOVDM<#F!mJE3}O zDlHNP=mwny0YqjZg&9A%g06xZtIyIB+W~6YezASGqoV^>oNkYfb9C1&G#Ng41_g9g z@PGJ031BR0#he?oUo}hF#VIHrm(nXK#L0Fd&scg$zFVn7mi1IXlF;>&#=uD-1D?S~(AzoB^`UPIN)uN_ zV7G?UNLM?dG8}zm_4pvX6?+cIzT2e48HG}N(K4G?LWNuip`5_uG#siVbR>BS(G0^t z`5U7b69skxQv|~uBHIw7l#W$)LA{p^x6&ryWo>v>xUUdpnsWi&0iOo#(Bym@gm_%t z7_0Rl;TWOoFe<^}ChruO8orfcI&<8kYt;fdKzcQb3SywPAP+$w$$@YIPo(X@hiiTa z9(UTJg%u7QO;CS3+8(|5>T4f-_KOEH(P1aUK+~gcxBK(+#~-`@IU z4@(*{XN?3(hG3)`TDfe&jZdB;XO)sTmm^MRXiPT6M2E8YFzEg#D0dhab5J>!M!dqW zO^8EVS8BwN!f_5%V8X^V-;wX(Y#Xx~gzb8ji_S>hiH(S9fYr3Gm?h+bL6g;*v64m) z99oY#7!5mX4TpxbQC>3!=-&J9xAWb4{L;!Iavem&p@_%r_7Z>a$!Bex!<6sQpu;-l zs-?};6L3p7u$*3~K*0sYJft>-nPSDXV`?HJM~%mo|6}XFY0n&19854SkyAwC#?m-> zl7M0c5iTUR(47ibyNhD!9aN)W4n053Om~iPV;!T7jgfly{SrsV+mqv?-+tyZ|KK10 z`iDOLnWLklbxU|IsZBi``$-OEqhb^ijGsHhWZi;2bXrMVgU8Lbp<5#{j}hZM(qxjd z9+Nhg#lZH;oKux%$4C@g|Lc?Tl#ZsMR8AmFabXwDuY3^@VVsqq?2} zdU<*NN8a+t^=qfgx`43JjSs#IYT$EY*za0!J5RQ{>Ga8A2G~!7PTRSxg19K%mtUqY zQkYV*Zy3b#Tby&2Wdn^7v|xvuF{cp|mvLi4VTDL-4?}9obv7JC5e9`*IkHetCw>me zZSkGW$>B6=Iv1FFHJWWocO}B^oH{bCe#lGV;|t*Np~gsB60~$|k>Ls78Lk9%!PPe_ znA8(OFoU!>LZ(O^#AS+L3=+&fB1wu<*fA@lrDK431bdQ14#GNkPrvPr?ect`ckk=g zBuua+zd2mcUU+U@a^G2w8#fy}};5=?X0i$fj3bK<`ez}(wNe3+5NEC|q@DT66ymGz3I%dJ6fofshHM(*9P2&W55rYNQ5@hljFdM!;Hy1hQI zNfm*@)Ig|!7>Wjz%Bp=29SEyE6p*{anr1x(t)G$zxKlXMlcodqYyKzrS9T&;WB@41 zkDJKloQl`qjsin)yG(u(1x|}D^AQWp>Q7;XH37+7igvgegg_D7(C&dF`e0}7A;T&)eU=vp+v?*N*lVyL8M521dsJ?Ckct zzUnIupI+u}_&6^>5fvd(ij$m*2h_4r&iOn#7$cQPB4{|^#8cxypb(gG0W~BOlc|^t zU2jg41B8pK1XO7JrxQX2w?t^p9hf5C#9+q`vm|DUtO^-Q5%Vk6MU0+l&wCYh0Q_=#W`PqvOKPw#BlKngd}Rila6&?o0hon}iZ=a1jX{2xh^WhmH^D#~c$~THdHC{}BQiR9ntxwtS z`}X+c$A9u?f8byG^B=pt^f$iY!KdGF^wi^@I^TW&zwkqU{U?6*_~>-mGY4D!graAQ z2a0)Vk8IL&MZ)B5S}1SsQVzIF(X<2?2b8!o)HTIDRtA=?L@%YTv)XPLI?+2Jgcvc6 zT&Ud?&H7{0gacV`Qs`fZKVnvcak{8+ zXBQfchBVWC%-^nmZ<^+GW_U~=s-rCu{F}TWRF?oib4SGM>>uv!m8nntn-LCF8~n!n z3Z!808UUKBG4euy-&lxXpLzDVBkSAE2D`ZD-OZPAV4mISk3D>k84gw{Q(#C3ql7}x zV2qO+m{vny+gMvj%!#2A^hPsn84np;Zc4mytnx*S837H%Eo0A-3@Y^C;2IU3k`KZi zQfQR&?)oCAHvJ;dz)U zM{_JO3J!DSzU6n}g4gY8+a_Xp$J0+8A8mH~Wi#}099)TlkNvX0`|cYbefEWm^)SFA z3$AJ%UMKgw$ixq|M{}sgBo8#5&kzpM97KgQ=Ft(KoNWOPR4stE2N z3eKVr!JCO{BP9epvUw-Yh+IpuHnev=MeaRp+Bj{v`M@khg}``$DZ(l6ti=a$kpHK@ z@a6yfKl|_R|GKZfdGp%-@?v)woFyK5?EV|qum8m#`O$CqmaqAmw>`PLJa6mfNc5&5 zoy-E=E_0lwth|cM$Pz5iM2qt4qre*5&SGLBLPw;HTYFA?g^mV^-1T}21{IJ?QyCCf zK9(FY1w&8dT%4_d$0)eym_9=w?8tv`#h7ymF}IqqdMuGlV9sXoC!AJ6Zj*zTd}8wE z28?j2QrddVekNPZJhw|nDkjw{a#v%j1>TKa;nQFGsDA97aF&*ld(r6p)B3}j2XV`M zOc+-quY1Jr56);|^3P_!yMEL=+Y)qw>LkI#iwRxLQLj8@yY)@uN&$apqrCo8B{r(AkwXQnLBH&UG(qGP2tu1Bh92v}iD3Z~-1l#uI4i)55F8 z2%Up1f|TgAv5ybBlFmLWOkoTuG}HjMbnDon#PD38)nGzg()Me={fTx2CBXrY!yT`C zrtNkI268es9cMCQh=1ZBvs~WuzJ77%^7`qK zEvf7)3F*US-?(x5kxzc%^Iv-T%@5zb>=)qR*yshAjr=CN5dsA%D9P2(5{LU)$w%is z$tyAhi(CuW5t*#I%X4&@i3s|ToOa0V zb$cOUVB5B!!;ffJl7E$`%K*bmHaw?t{czWJ+vDqh?`MATQ!nk``V}{B-@bEz>l5?+ zrk%ZZe(m0ypZ?7L1Hb$mE6-T^>1I><;jdhL{>f0d;CfBqvcyW8!Chi;5_281=Hvjt|1MM6?A<9@rw z16mQ#ma~9ncEp5@yJ|EpKpaQZX1PA{I$6VP@g0K~U~AY$8O{7D>PLJD;%aX`T+xvCpu6v%A@Ei0CzH7)v$+F4`u9cIg#^mbBn4 z*`#6$=e?!3bSV6YfI(<_owAEvg+f#W+3;vQpvA0^1V}96z>zFL51Zk-1V#lwlj$vi zEEcWM4FiH7YE&c`-jyP6^mqAaX8zQxEF0;Xs?97wj^B3k*pm-@;>)kJyRR?jmm`)k zoXr`rIXV8~=f3pv3oqNl_bz?6*=~|%I8tgNTh_9U%(++-#G@avD_L7 zicAf_mBBda&&0{f*`_%$KaxC;W6MBTfvAdX=z&sGClMEth>_C}>6F7KP65Xi%3_qa zvnl<-Pz;04Jc{Sar}I~C*|k%EUidPAdb{od=xw|G@~xMKE%c~}494qJz$t;U;#W69 zCC1w{xqtX!zwCCG%Vu3(6dT_jt=@=UH~4sp9?u5$pyQpV%Tfm!9Vj6(?ovfN54s#! z!5jqtDD@p$1c1@C`7!{-Rnk#(9XFU&5+N6t1i>S(h}S4e&9RzyQNVL^ZYCtBcTWdWma;;z%s|iFiJ*mnj@{g(?~~DOQEkszmIsgR>1dl zrAZre!Z|MEu~8@;UQL^nD?4YvIt>6dm>$+MpTWpz{d?^O%2@{_r7Y!U0(mB>uG7&V zYa)gLS83C0Kl<@6v>VrAUBx<#ix(YUxVy7^%l&u1^{GdrAMAQX(53fMGlyaagEp#< zGZbV_M=?0OCZa{1oE}U`W|=7E=`v5aExI14rcory2t+l9@tQ^?tQv~uGipugbrkN5 z^R?&&Q|WUHd8e}sfdg;Hb@+{0YMP@P%AsPL+XXq|9MUl-SHBXM&G&jb2iP@7|;_8SdKJRkG~VBgS3(G zqjXCuJ@@{1YW+cw$J?W?dHY*F_Vd58X%AgSTQztYyKJsD6UWz1c4ud2FWd%du3ZH35U!JtsDleY+IK@@~3x*BfX&aPArtkTe`{ z$=H4UlvP{o7jjw*6rtqWglN#;hSDKG7$+EtSeQH&y5S>(!nh&f9Q$M+9RDF6>$!+& z-Pv#5u4E-Mn^glZZ(kZRQZ~6-QWYY5dL`4&0I;*ps?Yp3_DerLK0P@>zW30iLnOLo zo^kld#tr^tkOV~qE$lEDo3MIf_aT6ofn3a_-2Frz^R4u^!$QYy_zt&8(^0uP*;Xlk zRHmn>?mQ@#=YJdFX$q?3`XtO?jx2Nm^h|sdO((I%N%uw#rkcBxZ8@9fm4nKQ2H>nG z_w>Nx)9}#phx$MmO*qC_Gv_g6a3BLmo6QSn=l}el`uBeAH-6t9xPKMv;nQWDncK(z zZ9k+jB;I*~NCvU1?v4+uW?-~adtM&?*$hXzyZoR3`rrSl@BjAy<$wAs*N%>3J)a$Z z6pEqkIAyq#8)B5NA;MvSDz}irz%#-%=9#f|UmMzzUJ)DQ<4W&6{r_4V5=+cDO#M+j zI>PzVZ+K2oJrf_3W;>Hy#xz?Pk7gs~9v1_8L}n%@*yzynP^Ho>GPT2>-T5mgcVF9$ z;d7eH;ooiBymb4{*S+z9#~;4`&iS3=?RGGr=DoH9BsGF^BKgObINvs2=;RVHPKIHm zoAhj|ACbwEV3-*X1dv~(K$sQq+Uj{&R!|Bw(}YSOMIK0tX2EDHfk6VAv!-HEQ|~Gv zSYil4-Q=Aeh-|dUb>Hzp*xVd@3T8+-&Et^8&_BmS3FN{x&rGL1A4qB>eMVhyIIa9K z>fs3|aJNQE%HnUml?D?`MAKR19gRyws9eEKboqG88RFu&a^Yk+S`awhJ`Rf1m@BaM305^Rtc3y8=4S40mc@EKYUwqE&9g$fyg!!YjSXPlK3FrZb zMDz8?P-lG4U!jLO=(5@jq%Or!%EC-2lTxZYh3c93B&I@)u5!u)Kn0LfnY1F6u4NL$ zWP1~X2;|E#@hz|tW}t#C>eoODw>%0aosmQySB_<_F(zhOMnE1o#v16Cik4T=UeIK& z=ScS3i|PnO%t3t*O0_vT-u&HP_~85B_kZ^|M4$az-~FyX`90r!v0F7^qbDn7FCQ%b zSd5RIp?1=95D`W^7dBPFL6tFL!-#qE9!Z9cm?Q@(D`47)oq9-_;8|suG)B4nPB5W) zSt-H@!%P%yynqS!+*iiZr1DM%*wotq=V$4!u|>z za9Rb%7)psQ(nUe0W3G9TbPOtq(f91!1?E}C674QCr{pH2R+kRcJx3(Kg%yNb_ zl`uhUoOm-*80(oDPwuawDdxO>+xe}`3jQ1&1HA+m@7 zd&ietAEQ0T;k65`nL8MZxzY?;sFO+yLTXWW7t@*sFNayDTiWY|7Q7_iI}l|&m(~+3 zaJT|ja8v7N+tgUo8G8m?l&a<=SC*-9hi48tj5maxE|aJ_<7r(eW<8iWNJa+)C)VZR zaJavw(f|M;07*naRHEeE05iFd#)eN+)&sK{%89C-dNv`9{LGd7!S9?KM9Z!WZ7Q-b z7|d=`BM!`C58vBwA7H5;IL4Z@U%%f#UHfu!{q!Gy@R=X{7r)mVc7N$~`+!BGe>EZg z+I=i8^SKdIqO@39rO%*pz+}e?Dv|~ZvREomLUQL6Df`Km(bZ^#6WuA+AcF}`3DYz~ z+Gy~&Bf84nR_PR2tWjJrd3EPtcyBqQ>&$P_W2eg$^H`g*$%I9?%E7Sk&wNzonlw(y z1Nt3kSi{l~jy)5HjM06Zg0|iKxxe(@_x||bvC|uNy77x8-uu&k_TTuv_x@LZ-uBDN zJ8K_2O;k~W)N#68Ms&r^)ghWcj|oT>aZIl{X6&H4&VE9GHUvv#X=oAuno)8J3B;i+56Hi9{$F!{yRVQPyXtE_;22G_w{Aj z*Y2Y9s-R$nwdx6w-8B4G_AIMmYE3@6VyOJOr|(E{wAw{*?WDkUeF19U(s%UILU{_L zID}?d#y~P8)yvD3!JCHD;Q)huMRuGXk{vFDLL;v30vx&MecimTz5h2q`uy4cjoYJL zzg+X2S#`d#F;~>%{QS|kzS-8Qg3X58AOfhs)ogYyRQ2SjG6cFI1u<~UDb-?zYP<=P zsL+fE=d>bh929}H2ZgcVC|6_}OdpxbU8b+|Sm+255v!k^$rxwPC`>OD<>Q0Uf+sM+ zJeoV`xQhx&I~nHZOQ61bScsp>IIEyC^LCas0_%lCn8@M=nWKt^EpGBwR6IZMCcQLV1JND!b?}t-?;m_9Um{dES$}e zimbTUA3~yg?|t6~p9wp}z8hw~xe1R#{Ge4jg-3NllSN6qPBNfsPvg=w6=XV9kd_YA z*Z9p5o(1E4hS_vY7+`_uJg~LR zF)ZM}&+AQOceA_F5!Z>M%0DBBQi~+Jl^kTTUCvWY>s#`|jw%d%+_8?9>jZdd2FUAA zuf6=*E4O!dZ#Qk(kI>8ZSnfMkfi)wH5BGna~3PcN{C3x*pg|M%n+6)FOw? zH8hj>lQxn8nMjNzBF2YU^HU}xWEY49{8+>7B%2V8nPX3AOjo;<_csXh57J{ zpd+)%R#rx+S+dTDY)0De$tNCt;}Z{_pWSJj)y3s58SB>UzMc(t?fS{fFTAj>d_yv{ z>40N`CeYi78%|r#{*KxP2B#f$thlC@@q;GfdMdkd0Fy{=S~(2b!5B=ZPaEUxO@52r z=Z`{xEYRnaNWG2T%v_d$e=Ay&udR6;<|ncdy}rN`wGX%U-Ia{9Ob{x96~wzqED=FZEn?Jjp02QPGf_V72o z%h=V-$4}RSAF63K{G8>p05{M^b4zE9Ai{Xe*`AvlKcQ&da1zVbZKH zn*WVkI}=p3T-?}_sZFG$*pxC^Kj44tz?|(l_@fPuzFKpY0|c99;76;+5ao_P8HF^= z0mr7V6`u&jb9yT|(7HGY#{v0RRv%mQT56cX84zDOaXV+qTG80=G8 z9&Uy@XiStT<)Gy-uz}8l45W$(sb75l%SSh_A4tb2Y+a|VdgNZe?XvH$ot}L6H@$uE z`O$F9+E;p$2udkuPpL_Vk2ly47xx#nPzsaiI-qXc06iEswBZ*=e<+!KN9Zq{P{KCK6pq`SE8kov!$Gy4XyU zU<%qN@;XP|gJksJ+Yv?OOPG8`EXNR!IF!eIF zEwDor)K5;2;_UY4UU>Cjz#WJRcod?S2Nfm5kn4f~Bj$*y&vfE53{0s4hZn+8wVjT- z_(I-_tgdseSI{s~GtXr*>*9*^cT+?h@Xzq6LlZr8q^lg3iIA{HJ0mCzXhN?cG1A$+ zE6y)aPa7do4sV;>xTCksuB<=hX*>=6!sDP~e#igB|9Jl@L-~H&PeY0JHVgtJ;mP7qXGaMNg}AvwCd(CC^(*`)-?Fitey!v@SC>=~W`b zJb-a9158xRu&qPHgwV>_q|agbFZ2{%J2MYM2IFM4)|@*K0;^*R8Dt~CYjb$Qj^|Yn zXZlr;hkqN@&4a~KGM4EN%Xvprs2Dk%@>(+y8kZgn{Pgtr#k0!~e&jPZ@43F0d+wuf zz}Feqi#v;LkMFzZX2c%;0!|akNiZ!t3wjFq_7paI7lF-{8xec`lT-vK9BGQhqB^KZ zRKRU>6V?~@Ui~XOqCX8ZgDs_pNbBnz*Fl@}b&XUt)WaYt8UOaNu>(J*)RXK`L`I+= zV4C-Vt`5CaN-oJVPo5Q146zJgI--2W)aBYt>O2Oe(mlyIjJtT)q-GIH={9F%CctWNBS#~wL5 z+pVR*Yb-so4*;)&e`+t?zWn+3{l-DO%i@Y5y=cYAGP&ywimlRyaxOHZY-9`_O3i5) z>bpxwv-nMz#fLKYE*F4DjE})Zc>U;mGu}ZvG|a7)JRO4vjbnbvOWw0wjXC_a&yc43R!+eZWVdjU>`!O~dWxjE7=OW=g&!UQT z&c1K9Z6E&mmu{K#%+#-zB6ar75VpaQIg*Zz-N?4AjqU6lCc`P75^HHmWgIJ_qVhtd z13Zf8j|46YAuw=G!xc%8dn4v!k>xI7xi!{N*o!vpVOZC!&ypdFVrO)~_e!Rk{g z3to~ZSq){3bNLQMD+Mx+u`<#5CY5ibPG zY0yS5=&mKC#xtO_{M^yiKm$06>61gh&|gZGaBu22vqESCWfzH`$aAEI<=8rBKeABF ziF$zyT+(-Xo(j1Hb7V5jK#YjP<$5`ZGBQi#Zg?HzZu-ddGCm1jbZkwhuQgrwK77C3 zzC9w0f!wKN4Vl#oKmOovJ~K>Y8Fm}w0&u>rBvs(W!~*EB^OSq(T>d*{Z!FMTNb?Gt zF(*5re6IMddJhB3>~jbKfO@mmftEpbSbhe6A#Xu6Hq49TOfrGIDbNX@7PpPJW>11X zVbU@c9&tdq{tSSej~tY5oh0vUL)m{PEJdbN03*<8ct08t9N!9X%Ss3vo4gwMW>m~C z;k)yl)iepa2||k#MM?#U)i4ETWKGv+wPxIj{557gNxKq&kYNf>dZPJu28rsdh_kX5 ziCPAlrsxJ1SsS+bl`&|FNp2pfkU@E&7<%u!@!vtb(Vo2c0--s0?QTac5 zV7NoDgnXd9P8x+aSEkd{3=BMi1ShzMQYppBacGlMVlIzbNls+uN;2flTUMW?xVRNi z#g&uAF$Jla3uMNx_884aslnRePF?|Ukq(h;8xSw&?G6QrY{oo^0^_3yL@D_0Bx5cQJTDGy>o)H89q)Skdr!89*DP+^QGT&T zFzcMl=HSwfZXA8-vtJlD98l^=C!>oak-UbON~Tdc=sBff3^#*GGJ`Hu+8J{2!eefp z$v8bU4CW|-^|A%aweRD_9jBry$%3LkC=7_++E5nGNB%;s2*4dShGh06=+9kwt7x?( zt{xo5Y?tRMogs%-;s<|N|KJQ3S8Ov#GhUpi6T;k6w7t(LRQ0 z8-WpNE%z@ue06!T<0GKBP;fX+kvr2uYb5I2oY7N0fky~d6S>a_2R?Pi$rw3!>ofb< znuLOwV%`*I`Ku{Pt(ZbJ)goOOCe!rMgCE zYBoIw1YMD4*H`)Ypc1i3v|2OH3N!KzGww^342p~|G+68Zwp~U8UzaNj?bhw{^RwHd zs1QlVXo*y`*__y3p`c+$+~}Ll=H|^ChG4YknI$9ePRD6ON2kbPsH^sh!3&)Eb&|Sr z=SVF?@et%e$yX>phrrgqQ?aoT6!T)x7%h_yXQ&Hv$}t1)=0r{y%R^JHm79cd`}}n6 zC@mnjQZ^+wYVS4Zm1)3et|XTpTzHTQwSNA)pZx66UEAC@Ik%Bo)~yHD-SQ5Ab@AH8 zw~ZoD8>L-c;)UXsoAv^z$kbNk52-Q*%Q97`-oUlcz_j+IOMm5$H5h1iIyNU!PuxmQgV1f9Nq{QtEXpCPfFc#i3obxSd3Vj8 z$=|CB9rHrnr?G8@?bl$7lRBW-oJ!oWT|o(Z9K6iQYih5|XkDSUESK;8hNmCC`{rwB z=k4Ir#^ML<46yWm^WN*vJp23$x9&V}eY?ccT5f~mB5K%?lxWriN+Af9uSjk%|BkU| z;X6d_6WSWxMGi`eF2)3pJ|5 zd?cch1iaLn3OKxqti|HO7l*0paObd z#u_-sc}S+L8>fn6;gB?BhO+v=1s$bxq6dDZ3q%A$KbTNp<^hzH6cnICK-SY+WvkF5 zCKS>ZavzP*&ZN{p1REH>6t!`u=$VsQIqj5}j^(JxAZsE+lVwGj)eF$4`Ez-97{9CR zncRnFUh2e_M~W%Z3Flsm6C5{;cdpi=XEWu)Y0w&rGBE|HQt`gD?dI(4{DGU-AAI7` zv)gBf@S*3nUA|U+=6+&>eQf$Vow9DUG6GQFHfx)sPe1puZWYGC;973M z((CZIY+jpdvp^o5s3$!D-OLWp=g7M8?vX%Howc$BgClh;Lv$>@>NxO_=L}%&cS;CV zsTu)z7w9luF`S7_YQ@nGI?!TH+?{KzXbU|C;RF2>L;WkJqt0Uomvwp|Qx0n#@89~l z4;)>;z9s+;!@ubby3%5^>~}j`HV;00U%m6zU* zoew=kC&nCH_c}_V03%P14f%L-FsDTj3MY=^6*Q8;q$M`GwG0L`gv#V(j#_g@bH)<5 z>TeM{ibZWzTNqi5Ms7`wHij--LgvOj*_pGL;sfHZ!B?lWq$ zWK?PeOYAV;7w{Ovo>BR@-qL_9J*H*sLF3J?r*bj$Xk@z((&%7Icv`o;3&!_l7OoK- znYfOKZ+wb{+vvW;Mf5;gAy;A|d>Z!RQlkKbApekxI9Mu|=GqjLOlIfu$8fpm&f&*x z5~LQS>qB#LLue2UtG;!zNF$*EWYU*l6SD+dI_dRvAf|Fx$ZCUjY_e*7ch07)GBS2( zHg|`{hT~9Ec{ix2iw=$nH1}UcbGkff9zGO0_)sV4Y~%n za0D00mYOIYo16Wjv(WsdJTvOQ)`oDAX|g52?YOyd@goyGMM;B0fu_Sp25lYkDjPNi zGw8h`bb-UcK*CQs@g_twTsX}Eq2FB7kB5)8>ye&dPD8Ez`1JJIkAME({fpoCBY)-x z_xokL-Pr%jAI3}T6AxTu(>A~NvCq8yd;jfw?z?N))!^KR=%i!hyjax1KD;yr+YBOO28u?qBj|v z@U%k>R}Mqaz}PT*T~=^nG$~i+Q3wF=I1O7qa8`q^+E_sWU#O%45(gG0jZ>QenM8wG zZ)=HfH4)~Vrm2-7GmwOMk#1&vu?1(41Km~Hv?yoFsmV}scyL({^#P(pl#>mKz`6j3 zJIdV(IZq=gqUVjHhN#|*uA4)QvF9DZzsMJnR-vv0mqhej%n)Mh>6db<;4N=`({gsl zPKwd@4C9t)N5^)4=lL(ZkezMg3#^C0+TQGTE^-IwO_-R7 z=y*(^hBOBlwfc_z&ylR4k{ThV#)%9QkMlYGQ0Yq3L5*|_MIt%#o6Futr6HSS?3PBXmbh*Sj!D>L@Yi!{jog0T8ehb|j5IL`Dcvck&bx?~sx z=jmC%ZIGGasf;}!<))@0a|l^CpSw$)ryFeieaNV%Sr7WT*yaA!SI%tgd4GtBcbAuk zfA_n~Wq)yqk@tsxclqn#=fnT^hj?Rux$b|zE?(L9=G;dvVDv*=d+P5L%LEua>$A(b z6yA55E9rMP&Ok_bQGKKa4A7xrG#OArXs7W8u)Ym@3PDiq+$7|H=fow@M7EVgmV6;o znuv#Lv`8qgz5tY3Ff<;?<`_sf9^qJ9ww|%F@mFr0?Qfr7yLozGgbu@uWt81)ee>d- z+wXe%$*+9FqnGFBZNdnyfv6A0|GU7gyj(;X`=pa$v&0Rjir{I1IMhsglcbq3fU|N| z=_+~}STHt|Su!*325cWcb1hWGVi*$=ywow2?2tz})D7N;NX9yKx=xd^rguOkDz;Zk zb!`EVRR}9>B(Tyw<3&a^qzOnOu{jfppnm7Kn}uJ2g{H8x9c;1Doxp zN;L_AoA7F8Xijv=SNYVURAXx9_@dPW2K|iUHKWap_sU@8472{QuThWviSKx4zkMDX zEz^Vo9DZ7w9p8QW>mT}f-rh}v9dzp1QA`(*5V)yCF~y#{`xKLtN4Mu6n z-UgIZy$!mdQSl|09a*2#>F63yG190D(!kFph;!z`qRyP7k zSJAZ~9~f`XLV95L>nc#$CyG!Y%J++^m7=8X1YNf>oVpz_Huq9n3{gL&&P?#B6%-e8 zPp;t&5OyR4>&?j;loO*erh`NtX9^O>z%02Y7^xrcD*YJBa!{^y?PqIT5R)1|7O@OR zIkvwVX1ih9V;O4WjA~7z?_4jAG_9NhMd@?z8IOWGP_q>~&}{^9)ENVZgEzT?5;FPF zW#dmDJtV(z`W9t^a;RPU8AyR!xj*4>Ss(ZWK6KFHplQ-7Qx9hU8-jBL`s@D^LZGzc zqs51S*BZI@bHDPTTen_2JwA?Q!RiPWnr)lie)ZNHo_uVz-(GX77hRyHSn;M)8r0Q}na5PA0 zc`Y7cKn2TjBqgkDu&mZuitdHF9BW*GWTsYsHR&MjvYAF7&l2BUAEP}HTth8$x1f3n zTP9F|{TFEJH29G&!>qw;bQR`)7XXLw7FDk57-mNNM9f!O4_W z5V*tQ$uXe!{NMUrD~nD*6(b6!%X7S-293OoiX~`P6pgY<3^O7|S_wG=jh(M{F;;i( z%wWZ!CwGOBC5cAJ&DuzlhQQqrP;u9l%t-kgug!+iXfP87CWPE7w-nB8aHcE`@Xcr~ z#+Ts)Htxf-e!7-_dRT3sU{~s2y>Xjm)|C6y`D%1|Unre8b48+~{T(LJ2}?Z#m9!|x z!W-E~p6EK0Wj@a|hfo1nQjZ+PUbI5gbLd&0ajCT|6^(sG=l%aIkQ(jkYY zQ(<~)%D|0$cZnAsAI@tiLx&rq$Kx=fTSk@)#SE!bnEn+l(~x1UnpBJ(4Pp!b5T3f_ zBIu6D!eOQCbTB+arY3huJm0MXf8Vcu_|D=-L-F(e!KQN)HM2{5)bL_Dhi-%P6Uwx zrFk(P(+XK8&w_q3QlCRJLQcwx#7@->mK$@KSun@i^+d;Aa4U*zLrqYs*aYA!cJ=@O zAOJ~3K~#hDhy^pcST4(Zv9AD9Nz6i-z>D+a4ptKD(aDF;?|b-QCp=$Bm zN7>k?;_pAsvHbd){hE!h&im>H#YnuY+!5PIE0$EDjy)j7RS@Bxfi zLXyB6p!np^JXuvPb+|WdGR{_)c#MfS{MWSxZ#s|DFntg(zfrft!3Rfmj=1r3Os+Sc z@;U^!^{-A{Vrs~z6bjZ4lu0w?n79&CZ5k1%vNO^-DQaZJ%1|BSYzXxh7?B|bHiax# zP~?J~&QTH?My&PB`)1r#rz&TaOtf6_u$upp#4j^{D+^_-Qktz^g`v(p9(*SC=Ava( zhV}m>JDO%pB?hM-qtof?qn0-l{w7(I!=cO0H#jY}GA3Py(OJ#hxsw>QGNsXQnN#hi zu~UD695NeXK*W>>;AVEz4pE?&ShlM>l}Qq(40xp0W;B+$*q(cua--KMRAB@1zGHlEXnVk1!<&UGa)fA@mOiuoiy%bXAe zHEZ0^m|$NT;4Lsx=G;h8Au(@D4d~*ZuwLhrgUKTXGX&~vDkI&1gQTL2G@MHubW?e4 z=Yh@$`p^ta)hOC>QWA|k8bNcQ7|UoVr7fiVQuca4q!l>6E<}i$Sw=K)=smCAu zp0EGPJFmXBS!>3pLXr_fUpu+J-CzFRM?Z1U=cUfD|3hl)*kp%e1f0>A)s1W#37*Yf zIWKD^b`z7}HNcDYTSPTijGauhB)rBzb&gIMHAVsX83+pmKY(d1;~9lLMo;HB&?i7b z2v0fIY^F2)Vm#4{OhSOxau-$}`j=KXs?u^jxtFCebca4p+>{kVboi5&)TnfO{Yy<)uRNO@V!RM5smH@ib%Q>E_cm#CB z^Gsv*Ib0Ps!3xv7nu6i86#%690=q^T;P|!?HVd03%ntRS(M|{^qk|*X=G@|}(_S|s zx|(W7Dn;hZKptf5Ex}!px{Iyxrq7c?dHI%n(l3;Mb2hwt*Mm^!J z6^t_}g?>arG$hNyrd5r`BrFj^Rt4)wb6i*RHz_RoRQe{fm0ze}3l9}B7;Ro(zgdqu zU69%(n5@&Mxn} z`^LAu^KF;={W_REq>YpFW*m(If+=r=v ziC8{ptVnXlC(DD-X9H(Ufxk@dg8tiFZro;_K8zwX* zFwzzvPEObmp=!yIVO@Xr1kZpNdXXQrsrs4fFtQU^gN>GwSs}il+u^F$$wuTBWM2+2 zonSos7yL3S8<^!vIj!ObTuE&joN~fq*d!K4KFSrW*Yu11<;kXf+tl$wvU@F%nFi zdrZovxEf49Xq!_YMzl?cj8Z+u-^@5$;w3c7pn4Ps6$al3e_R+pi7}|M#)SH`&Tw>- z1(>FINT5eQ06ljsk{%-H^w>QIg7J`ci9=}#Sqd{Qt1Hi9Z;oeMOOCq9l{-@fOKvPJ zM$fUv*?}Bsr|YA<(X{}7%;?QQ*5m~Y#|{EWGzFc{gilELS!*agw<-48aWXhFV5DN@ zQA3lckaRG(2LERs^-9C-%EXN;jSp3F<~_t}LMthT;YlJGP-trN&9ZW%&4+*YQ_py!EHtkm%}rX7?<38lj+4k}+{iUTHf6%>iozV? zN*rTGFdVZ|W4XIe`N-lav(DL+f2Pa15)o}f=WC`;pG%usNj_PU~6}I>aCfT&d7$ zgLJ<QLK_TP-#?7)13UQ%WJ^;~Bytw^tF&IyKWJk8zBITX$v@ zU^_IBJm*1QRVYvH%Ri0SJyGehg6Rh%xPj-eVzA6c;VaaIX(`Kq#zjv^6DF3b$Mat9 zv=H*j3bOG+Oc5nxF$DgKhQdORWtgDlfZ=)w-(LL;sf_G^x#S_qkVsh|JRq9_U|?!c zzUoBGf{khHfe?AxhBkdS((aK*z?M{vkYz+YvL+;3pw?Q|#B+tvmobapB(Gs;ZLB)X z4K&bFpmzcW#%@GiM)P$ms^IkVp2uJ!=n7VS1tLUfDW@aY&BZAzbdI6;xB_(~7}w6A zlcL6?Z3fL^nB;I&rgy|V4SOy_CKfddgg_y?M7`*g~4Vaa4`B_?u!whmFfH{Lm+NFpVGjBT5!|Rdb z4fzyI9nk~x7kO(wIe5N_GX){VW0JjJ$pyhmCz_S+6;kAkyfh^h(A{v_oGW(#Xaok^ z^oI$WR4OOd1}v0`bD|AHAvYH2@K-$MbrIwqRr};iEea z!#e!4o}d=}pLy3;KXUK!?#=~KhL3RDFUte>-~7Vopa0@3w@x=lRhe)lIE2^D<;(m~ zK_R}h46#B9o+}SlP8l_OOOCv{p^es4DJjKJaORW#kmj?lu|luSpCgrXClBp>ea2gb3KF+z46LAMbVyT(*e4{H-dFL4uKr(ZYQBM~a3(kP6pk1?fg%?`)i;pvOBGFba*T`*;|fBn#bDa=H=*0-BF53 zrt5Gq1>~&aDfbDmC?v3H2@WG9H!VXRVUxzi=Z9srY7GnUn;2IQ4JUyxJ*YeQr6Fca zIoE-UQ1bQf+^-YbonJvK+O%m?PTgXWm#MO92s9Vkx(3q4wbIb0c$I<66-O_fQRC3? zpioRE(U7ciOvsdt!6OY$)wvwkI2C;3uw{s=)D-30F^ zCc&oY=%7YxDBzdp7w>%Y6Hh(#z{{_m9p`T3WM^xvz2Dz;^V&y0_u?=7(uZxcUG|HV zi7d(|J4-Q8QYk7q-7CQs6F0PUxP+b_Bg29Y)Se>i$qqt#I>C38Ikj5Gp~5r1U+CFb zOP0tI!91israA=S3fhooWFrg!Y~lkz^!#V~jiF8O75Tie|KfOVZ%MUUM=9T=my%lQ zjoe8G>A>aO#tOZ)Jb5TVEyj6TIOkyEBI2*^%9h7qu`r?-h;jCc5e$JsH30cr3Z(%S9M4{op81qm)rauO}4lg?9TUKRTG`6Ph0hFg=6jO(}Ob4@UvBqUn z)ZhS^QQ_DK4uTrjpu%LAB}VnfxJ_qv^~nr5A&;k+vJH4*5IJaPmFTd#2OI%WXb@O6 znO`~rgr%n7%;hi+6pJXK*AsT193Q`S>+BbQ^>^;N_uja?1aII9n!^p3ckcN0oA*6% z|KaMRj6dn^=yl}e3HVaip%RK&gSn#2RCsQMR77ktVWKNH2du=j&yU9tUWx9&hJ(ok zo4@lZI&VoBB4k#%vo7UX!J}yaX++KDXA77*?Xm*O+^`=#N@_;vax>J zL3?{iC_wuVyG9```iD_(A|DzC3~bJSF{=m22qG29#?ji5u_xf8Z+`O5t@C!YU3G6U z)F$;&#Izdl^4zCCV{4hxlD4J|uZ?!kUr3*zS%v~|tuM0Q0j$iA*c_hFqVoaMFW$F$&GP1 zWPF&MmDAGf`S`uz+cEo+QfY9l%@}YFj$c6@6u?X9N!T$5m~iWKwU$+x4Rg@z2Gi`Q zWMb$7BYZFn2@5g~`L_u@D)~8{MS(EUl&eKBb_gc5e$wReMnV?eb&On*2LhpTD@eaI z(I1xOsOf<+FL9Md9dp%if%nYSN0<`3~H|i9vQ$9)w z!Yes&mga?oLwlXKV@T=DX@4S3a5esCb-Y;?c99lZ) zH3-?d&p?3E8SM+VtA^1TG8W0VS+!j@n7Uhuf}|=E4`vUcB*YPyi?8V&8I&nM&Yq)_ zIf~#!o24<|{HK55yH3x~)^!N$IR}BP=w@xy()-;H-1SfXuMh8|pKP~XF)tg*+I@^9 z3!dl@oZj5kapGNS1;!as0!MD7n9cPxRTEl}RM9r@#Mz%_oDq`c z_=|JZR}3_Pj*mjg8)YYzn@9vnl)aN&_)ll(~X*{}Xg5 zHD-o2O~t6jk7IL#0hYNuE}_0>XhSNBJX~rLV=f{Cfk-G;rlx^bR;sBj>?{FIH)D@E z2m2}C$MH>#SCtWJ4}4mqCCRv0I}9m{B?ViQQq~5-zjH{8)Ersuu55&{3mo;lj3M8; zE908;X$L31+xN?TzgYU^vcFv7av%F;J;r;t#D2HzcYVL_yZ!q4Zr69a<#M+izB+tz zxN&#c4;So~zF+#XezL5$T=rd$UG)9hqn4Y*W0@W7L4E=H0H7F=0aP%{?-Z=8#TB_d z;DK4@E}3EU=o(|dbCcop%6YBQ8|<`2%U$-P0#qad$%pgv7G&Q!#1)+wvD=E_j1REg z4pbrSIXD3^>G{wKqsw2}&mT@|9zNO-=Al)9&5l!}Dw;78V)?v6QU#%f+cIicCbnml z;-ICt3&tT>O#N%{WoUK6{%)Nr`HBDY7kAsEqwQv0d%STD`1<@!Yqwu`_1)j}_Up&n z%l+OteU>ziu#!`xByJ3_ivmsdE3QiJQPo(X{vq^srQ>3vCm2CT!U7)Ljq?~8@&@uM zn6i=K$(Cu5DA2()Z$pgKCd!yRvB8d$zJ`V<=yhyFfw@^V5-`jh!0$Tg%3!Kvybf`9 zj$B5+tqO2}1o&yZk)y~{d6*lb$WBkUE_8D(N)O!nVc%{Z(zEYDWRDzcnVD<@7; zm4Rr4juql-a1jIyk3~0PY(6;zx;W1S6!i>1otadp{`@k0w7q{0QEIGo17bwUm!830L~ppt{1(ubxfo*Q=| zqf#@w0W|eVi&Jq@kb?$iz{nvSS2gD(pBW;p?xpGD&oXvE%3YCrDp=~%rl>P#zAY8H zVTyM;ILYz=t~8@md~o`-^Ntl#<2{&y8!gU!Sl`o(X!oSui6%j+n&rN~yp0R!sEL;2k?+@y3asq6$aUX$TQ z1sZ}P?%*Z*Yl@;G1jLpgnFX0+VeWX~Z~fLs?4Eo2a@h}~*^e0e53`8_X2e5pdVK9y z+h&1xHBPEJ>3se}7be#*S#q`swaI3tfvHJwxz-h+cmglgFR3rFh{x$csl1d!c>%aF z4h7qy+$D4oXy{ZPr*}7bWh#HFRi8Y88NCa~6Cp&?(}KsZjm7ObJh9buv}M6*1N#lS zTB=Zr1Ue!6Lb*68U%*m~VNv8$m{Gl=3vlr%%iJU1iL~gKPm&WKC<`}njrG??Ht3;m zTx}tEs5+gkiwxi^oipo`&O)b?AFYp|Uon=}5ES#+#RF$PL{cX=uRZm~CtrNw#k(H7 zZ$0EQddst-4-S359NoCK+&+8$v(LTpiHC<-H$(tT1Aum=wUZoVd)cQsRb5&JR|bcf z>N+myba1lRk!oomutnW5|BIvlK~?m2t^hP76AfBki@UTZ1zO$dW1C&{8Q z(r{`{&hI!+E~G5v(@Ca~*kCg0%G4|p=cxuAvKVb!4;Jk35}pPP@~o4f26kI+5H9aa zmmeO=9npRrf)-m>S&xsUv9Lr}^y%YmBO`=tZW^9Xsu3<6c04M8un03l7t!Dl&owxP zX{eli;YeZxy)%zWF9>N(cSEh6hyzi9Qt%>N#X`%FOgR*To(0nr@_UR-(maB=ktXAu zt_0}s|?EV^xWoAFt@_wMU&e9g;W^@`71XXn;7j1`+rd7BiIX*{lWnHpXES4G2O zAJYg-V9yce1d4p1RWMgP1GZmEccuV zl$@ZhW|PRUj`$|0Ta*tALPL`$bT|j3>Qm&Fvytw#vlT)%7gA@Xg}N**;#76z;L3cg z2#4JL7>6QG0h`%vH;+Gk>rHhim-+1$zzVt9SyY)y{ zl}Q*{G*BmuILXf)8_!d5QpLG>&bT~HH;;~_KcDbN7SMRe158sDIQW1sCc^?rfx6a^ z8+Y|{hRf`Or*iNHWJp5#3E*gqP7QPvYxw})u2L?8m%?$EtUabXPDvwmv7LqzEN}?B zdjXX4z)%Vn45wCbV^iT!IU$l$=axzwi!xTYiy=SH+5%*zuv43(zd1mG`YDo9xv4ShH(JH7JfTk920`WGZC%LjCm$fhe>hrG-Baj$6^C_FP0Naj5YGs7y4NoO9y6Z!QKj*o1VMlCRqa4dp%Be}t! zA%PAmYZJkRijlUPoX6-9ipN1#o3Zg31H#9J$xtU)l97T1W1mM~_0l#6AGbZ;efBet zzV$EuHy`-DKRmwYo_=7EeebAxFC8#Y;qk7XM^bSsGa*jrq{GSqQS*NI>*DEW{=!?| z^n?HF-?{Vp(Q>)q%+At%D1(fE=Rp~B;H=C?M>?@hZXdPGGi~7&OlfLbE0umsm1lB$ zWXSfT8!UwgCl5`cHj;DBCE2tC_MIaX$|aI!d98+u?}DuUjx|Lm9L z_~_&(-u;Uo{`ey=edSBeFV+GZOq+~qo1<-e^0QCA>bVbm!3!R`eRg`X-Hw>0GOl=P zrA$SI3_gXrkz)58jh4J4*;Up-ri@(=;A69tKXSVtgj$05vUO!9)Q%vYgucU``B>A> zh>NOLX$72Iuac%HbSme9m#Hz-7b&lR$wFrlr6|jtuAgt6Q5L6>AvIF69Eu9*9L$?} zEOry2N(wx8Yh#+dGffm^h9ccY&}1b#3|_8};U2pggNGpHHB{FtX%bRE8XyN1{v=59 zyvEFoQ6&~82K_UF+s?*^k-vF@FNH^ogiGVe>MQVn$tynp@|nwZ`Su9B4tU3ucl684 z?R|It(l31|t#Fg}-mqAS{0W`n2vXH!(ik(<#!@A`u2ef~qKf3hNDmyYp+dPRxg(x8 zqUyvRT(&j^>jO67_MLk!xJ@Ax5tD+h03L5AF;$qvcd2WjR>{-xRK5VGPo;a`G#h(> z=VC*rPhp(h;l#6w_4FhsE?LRBpqJGElU+juG<7|AvN$4872z?{RN+jwDPb(bOA+SN z7ywXDipxfhD`N3gM6Iu9U3L5VxBZ>p`jbz;^sC>n+`e$`8NL<;ZUyzI-^$5T4Q;SDlA_{V8{lEth| zO3vHr)GI)(CInW{PaSI{&>i~CefY<75<=EH8>2?6Y9V9t1g56hsVj&;`|1j-N?Rb` zR&Jx>0)CdxfjhDR_|^_?a*avHe!43U%1RWyp1E%;wR41lHmL`@Iqu+caJuQtWj1%h zb4)rP*|AD%zyURytn#zcZmdRGvyW?QKk<=2wv8{FP3Tye6wPrvlfz1{{0 z<0K?{0V`KB=MdV2u<)wRGypgx1GDiTES}ge<;;gP2CfCk^ek*Zo)90U1yWUaYAfcK z@O{pHyQ=U4+(?ST6euz#q-%ITuP)g|6h29P#_Y2AW1EPBQoySsZPAP%MBpit6Qg8B znz$Naczwn|7?1oNOaOQVDj@Fyz~G{pLeSa&4D<*W$-ot2Fc@3B!dk7EzRJr&2Q_~65L?@!Nsvs-h$Yo;!D+HA|d z-*v~0CqMJ(AAa)Dm%QM<%Vk-a@Dey^LW4@6&?LF?a}gT_o67(IAOJ~3K~yk3$v|)k z%BL9tuT`j5C~^I*2;U}vh}!ZObS!tonl)pl0kyX>Q$65FNDYg~r|6M28@g(t0u{!W zsf#&%F=juS18hf)qo`J3fsIg`%g9&Rl)WjwW zX<3fp2g$aE{mxbz&a+(1xl+7PsVI%;9rYXkn`6sFmTDWCqMQNUxKr+g3+QlWC=pyM zUBuiw2Ef%YG|gqaCG%uPndivFCs@9)ixv@Anyhv^IdIoRQbexPSs7oq?QZwe@BP)^ z`Q48_@5^6v`q)!2zfA6NC@`#z=_eFM?PHWt8YJAuqNPxHH<-riAJ>1j+ZVjy{hH|Ja=juOx1D*3;4@~HPTm+$LX5# zfq>&GIWD0p)T|ViX9-7Xl4;VV(iRXjkW(28qXW&cX9Q{pE;5II_mFfBH>dwLWLN8;msFm&atF zo^}w-T#zNhsieZ=8?+6U2u+#v#9>NCpF7g*o!LDMLo?xfOds_!H}=t3chGh)aA_F~q2co3ncCz^DpH6@;uOMvIk@AY*9PDHXNhslMJb7Hz0GM{^Z zb{i@H(Od^pAk4u-D4-gtsa$HS4U&2|);y#U2doSqS%!~*S!Q_FH+P~O60A9{BpROH zSt*_%@?G&$xg%s`H4kGDG| z$Y;2;d5lMs-B7g%ZrB(r7dR=O2_lJ23HfMIIHs6{b+{)YOI4KAfnh@uMGsO<4F-To zRz#=-Gv_FHZRk{zcb__(@S@$bBj{Av)A7Pw3H+Ad|M5KHYLgZA8{cf(=5Xn*wcRMv*m~P-e0%uuaMu>6wCAI?YciusH;QK61kyorzu5RK$3+FyZ6rP7K!af;2co&a{)qrBmE)5q=|IRvQeTg%GUFu7&! zRqm4iIn2|P+6bw6mfuY!baIf;fSAtO3LMxHvkJqq={=&R$qatpSS;uX_1V9+J^IX_ zeD>#m{Udii=l(dq+#uW1GP*ga(b?_OxPHeMe%=emnDoGe+n|R7{V;N@maaBfxjv>k zgsV>b;-Ruog)25jjj!eMZbsgbrLKBjLqEWL7Z?YuOnu8#OcJ&6$`I zAUKuAcQaD;S*b6n9_1Z=RhtVkgIIdxyIYkb;? zV2OjnUvL74^H9za9i^;o7DxG|R8Z+=N*<|=kxfj36?aDtGAA?QdpM5=7Bc*M8SxU&Uu zLM?8*C{Jms4Jz41HX4D+xFV3;NUu2}KX{T(`>d#LBJ3&l`XfH#6m78`<+^e zVKW_bF^NR6cy?)`CZ=dvUnfnmO3X=zIxT-nr@-kT4m1YN3Z2|%f9)X2<)!KNjO9>( z$ZQ8_$nCSsL(I7u zPd{!eJ?u5aMn=heg=LhZ14A+QjxSSaiJ&xv2{UoXsaL%R1U#iIs8>0GChHg}YGr73 zBH(C>LzYyQ$#)SUT?B?M-}!pY1{ikVXB5}U{rF{`o^b_olU!oaoB_s#Ahl#AfWD;M zxzIcNh=X0im{|^jJ3GGK)R<7F`5;6wIu|cEF(tL9ZW9Q>Tz>gOAKO{q?2eY<+Lpxt zg9qAqw0Y*SC;r?Uzxdw!@4DRY*Tp=C5OL#`@n%h&VF7z~U6YDprW_X-g;LzaRj&&O z4zR$~uoXNUMrx1?hFynN=DRw#evndV+qLm#T5~Yk!DzzALy$qI67*XszKw@;qKv>e zNjdbbTXl+Ca79-1F#Z@e?X;x8rq&~P%obB)DZHux&R^IIWUcA+lim-=i#vu3*9b4B zo(Jj!@8)dIb9Lz0P@^(*WM(?8Ss|-H%%i% z6z-jl0U)9TC@AwLl|sIZN(-*C3qS;*1`jK87|)P4n(#<_;&}lcNY; zjpL$%!HeU7TlLb7voVF=Jnqr*DS^I)9K`6+5B%^?w;Oka?MKtGO;ftjw%Ocz?CH1u znJ?X%@AsEU+#5H$%b^H5QXmKUh1T_O7(LIUb+*uH^+RFu#1di`WyN17Bt}ve93B0b zV3)AXp)s;?NSZKNT9WD*oClyi)IYV9 zqvde2HAMLWl1N(Ai0%z(wn~H0C)1e&dpHC%14a%U9XJ#`1s9-=PBk>?r^(z(E0ge?rlmtRQh$m}@T~`=c1+21iJOOw^=n?ry>}zcw{q?VW+2-W>?Wa%Ic|iff zc=odFZ`^U?Pd@(XPk!u^hmQ|j#FJE^OU!Sk(&n_8b4h~Ltd0+>_tHJVHVoVg&1-d8 zr^^oNB3*S*m_}^QUMgTUXDTRTr+jwCJx3mD?oKl{*GQYuH>P?3^}!&@g`Z! zEAg(z`4h&L<2qS*hgnGmR8Tr6cb!ZhAcSF#zzOIQX`(T8z!>WT)CMz0F{JXeeTZ(PNAgUpHA$t#gNI+SR5PQh z0MSQ4o@5luuh#!JE(Ji{Psos9X~9j3$4o$_c`(V#1MgD`eWfcCs1tD9Ugjgn`WH+Jd0y^h{llH zhPU^~Rm}l-H)QXbtum?;*kLu=k#_9B* zU`sro$|SA4QB9`MX$Y1EF498D4p@Fkf7d6EK}QeWb}O%U<^Oycs#}QN8Fa9yc~0ay zdmA)7&DKiQxh2!!ij*oU<{iZLu{rKbU=xC%4^OWWF;&t9+v)$e}dHc_NV13@!mW-u?j^9!_ zR0;=QQoP9MSK1_X9LMXV$)lvD8xnDJ(OzQ-PlbnbDD?p9Vj&g=hGeiPgwy*|(1nG`)-Hu6vg(<0nofFvVidg15714UYU|8M zPMdTbHoEq5+uG4?doZZoZr$1OXuCPuZ4SR2ZMTQd5C3frpKLbkw}&5&4}Whb;$z8h zR*I6b_|TS3j*WK)IiQ_GJX-G}nGA)^$=~FSn_+p2P119lh5{fWKO+HX9rF60b|D%| zBnCFDJKK!QwI?V>+fmD0YFOiKN)yn3ak4RQ2)Q85gR$&9EpI47M{bSfbt66Q0sDeK zD6TZhS_QTSs$sadaEV5jj28vIl`xowgN$KaE(X96^eIt;H%*!x+6rjBYQOY@ru?fP zf8QT|_Q|{MxVBu5`c57xx9(`R**y8=tv9^v;jjAgFTJ=p+iW&4`3kDC8+;+7O((4p zFi^G;9z_3kl2g!9~Nho7kOQ|d=;A{!bWo7f&+ZdjfI zxr0?&K^qY#68nSsVkEwUN<*k888r1apR^XsZ^ue7%8HqH*89`38f~z$B#y;+)MwoU zLM1(GliLwnhK!=Z=`iuS9HYj~t`Q~8sdqI!Z;GZE8B=4(7X zIF^kTGuOz;z|&OurEoe`F(r2B!o_~sZnuB!o4)eL-u|BL=f7w<&vmP=6kuO2ZanwF zAA0A{|AW8#?ag=Vv`;Us38)aRPeD*!m2q{nsERfm^5_(rIo1a;BF)BjRWH-Pi!X2& z%0Tb3^t2(oK<+3|`cKsgM&~psr%{6Kd&c@a-N+w{j|X3Zz+F0T$aLqi3`{Pj9^n`@(ioWm z9~fMupYh4CVx$2fBs8Ub4-g;(T(lN^+cSr-Z6oP7R)(yVmBWX*t!pcL^Upr{%(7pW zb?czWJxj*9W1c%wbXrU*;Xdr(X70K7#-^t=k1Z|;@RL6c#mKzc5z3HKUejce(z zWh(|scaDl0kSNHQX0WfeZg$2prD$RV`K}CKhi$>vu1hxz{*POI2$NC`om&kHAfQ)l zZ0a$9o}So+2*@08ZBD@N8ky1%DT7@L)_aYdSu7We9ow(`@^785+l*~nTsoE<#AsMt zKf3m(kA3zfuX^o`qjvlBKuR{!%v_v2o{A){;#iZ_)$T9B+`EVeiT^MLPxNhaO<^ke zEbC5l=rb$rlZntyS(oZ%=T67TE6u5I30n-kcv%3{9i%EKFY!I7uA^;CuDagg>_(f( zL6HS3!S{9l40Fyic~%Us8Z%#D_d|Z(R{A_ZtKZS3Zxpi#@)w z_q`5Ib%_B9+ZTTB3$NdO_r=XyVp~X&xF1;dUH9C0=A$3`;O~9nHDC0C{eHie#jD-) zbZJgVnB-6^!Im$|d143u1^&B;O8WNlavaYbr_>IDRHjSGB3;)yI?8D-cV)sD2&+Vj zI_c;NnX)-^^Z=fu44C%LH#QQNfr3?^hO|Ibff5WN7n}uZfp?8R1PR@TtW_gjZtz-%+tzu>`;#xT}uxX#>jB;#q^hNb(06=ebSyEx< zf!`Ec8zMm>j1O$IQ#_u96<{c(O-`nr(w=C%17ira>X>W_;TuB~0T*REg}9`61FbfB z$J)l$5L}IYGGaYqx7)_gZl1pGa~?S9eVbt7Hpn+MEQn_n5|DNZmCW9URGT7$PMo4HJ8>-&TqZ-8{c%e_rOEwg6aBbbzXi~Jkr=KjNs4@ zr!8i86qb%1avUs?r$#k;cT&qBCxws6ienZ;a+m=MhU^mJVPjqt76}%Yy4?ihv=*-o zSgDZIouJ-T$O;T349ivwCcx$g(;Dy&R@^MM=?qP6Hykb@!D~?Uluk<+YGk=kJ(tSn z4%s$I02>KfSLTO@8>pAA8+fzw?ggeBQV6>+2+HMl5(9^F3NP9#Jn z2p9}DAL0a5lP-;AoLCvq$zB*z4~o)qjW;Zh?u4n3(n83HET%;|Sd7adYTE}rPgkmdQ+Anc(bo7yreDnjq`NuDL)ypo%N@<60UOno;Xm8%U zdF_t7zWJ+P+xxP~O=6-k1TGFEZ|TJfNK5O#DHb3emlGla0~%xr0JTGNVkE&bMlj(N`=qOivtF80dy2%z7x13+I5~C zWFkvbYKS}=E(A}ZK;_mP?rd-cu6zzqDwE$5mnJ~EGc{#WL1bDSJ~&OsO*t64)~+Ta z4sU89buXKlv{_|}4ciF&6aygtqX|dmFEnSGe>z7(2{X#a=ofOMgB~`ajpPgM?zyIFf`K{kwx8C=y$#HsR>!{2~ESVr0sPA-(e1U6V z0t-#yW-V|{0&uS)WcERxmd47A4wJaDsYbaE6CI8sJpksg z(+2$6c0QiPT6Lf)i3Hys*k#YCgfn$!7otRHhPYS{@sW_OX;r)W5G|V&#UrMAjW%Uo zZ%!pFIY9yPhVJ+nX@N;M5~WH-F{mR)kOxT%q_}0W8&07d@Ya{h^Fvg6xaREa{Pg_d z?DYI}{d4>F>8;bV1DRj{Jv~3aefa3??C{ay%Ez8~DwcIi|5mx7z@HL`OxT<#-~xe2 z_^Jq7f`ufx;ce|_2VkBZ05Bs!Im(YQjB(m@zGAAqnE<$&o6t$g!S@R_p6vsvCGhPg zU*;HNsUhB(S*@h`V<@@mb@^vNA6?xAC@(N=^JtVT#*-Ozx$Vd^XSILkJepMJQvN3N}P4=^zqU8XCHg*tH0pd$uTyL%RwFLOWp`Z zG1WL)Bg*ws3aGZr&q%b{O6Ol=yh#;8J&|YyyP6&sQl-X}@&toMr*AaaP0@Wu2U!(RsIF5$xIwj7(}2m55m?o{rW ze#}Xb}H7 zUQ>Mg2cC21dp`KFpZd99Kich*l%znh3dav5eqTgX+r}OXT4IF=OCb&aPx(!8mQSn)xgywYlHy_Mc}y{^^IjUAm;m(<6gs3BF62~Zh?4xGuNvx!Qct(zTy zM&%X>f`4J6ZZgd}q%HO!wg~}>VoVUhxP~_FP;9u}7%sbAG1M&fI()QQm!qu5Vx1gs zkB+v7{~sS69q*1#cH86a?qEA7yLNQE)`T8DIb3;saxI5FvrPz2Fp?X` z_44D;hA}gll?pI{$OSM~+Lxfka^y;}TcuI+Ggdthk-_BPTM7Ci457JO66u&kAy0)| zjqH}rd7`*h(-e3#eR|b}m`bZs6q(k!J&{uR5Nqx7PQss2lbJ|LWa09=vCNap7&V_6SsbJ?Lq(-QIfq znQ!~XuUPwVdAYu@)9hw63C6oz!qZjnKUuD}Ivu*v$(l<}A>|0pg?dJ9KGQT}MY=UN zrLYYNRKAe~^iI@>oOLUi3JAEXmT~atxa!f;0cu4}ph3lgXeI`%cu>ae$j;`g;eb{E`M*I5i|!6^hET z1Z@j?B0i8P3O^^@;L`xBLEKM0&199TVKMYMzG-ufvrN<>N`tO16@SH!1D@@d{>smN z{{8pe`}EVd4)~a}b)A*po5QuoyMvqh@NbL_yE=duy^}V;Vo{-mFlUgXZgd^u$*%jw zB;2N7IFvI6Vb<5F3>nQ4t;Pcq@^eqb**Bndu9+u=bb#fQgdWxA)2UphV|2_8LxAd3 zd$OlUmN{nGt~%KD;{~^6e4Hb_ZMg+C*#z4-l`ME-h*HZHJ%N`5KVxXMezVEroW?@R z4szwvY8ptD4H^@Lw2dB92aP@=d+#MzY%LHn{g`ChP)H$(hRniHdIXb!=}=Ua{Z?{_ zIS?_sbT?@(fGL&ZAr#O3^ckhdFQ$hsgmg6A0^tSY#`20ooslQ$c;}kCACoC-E88I) z-G|pRBa>CR%Y4*O=Vmc2D^){FfH0@sOJ!PR#5lIvuQQCEfJagW0vJoKS)rWCYTcM7 zrDl1-Q#dmgCOu!ZbaK0q4lSG0xq#ZH`5l_lWWa^|6rAzO^jhLo#$FmBG%%$werer+ zvB+8CFq6^H4NapfsXfVBa!h1W-k6F>yeEKE-W=YE>ZVR5%1_uqYJqP-O)+CM{;Y@H zY&O5~+aG)E6MuaD-h0=AP`O=fHo4i~KHVK1zx?H&w|=(SWJx0R(+J=tJ8EO9#59SM zzKF^BA=>6JmNfk;VezaH;;_?+(2@y=a{m|ydeoMy1_zdMWOKe&W7_Ef>!Tzy5|N|6 z7`oyhLNnr)pePQ}ToJIChK4bJzyrY5hLe7AGp|Gz*DMlN#*7qr4%D2bFhC=*FITrG z)d^6Vd?a?VBZ&l_-GJfrv{f9J4XhZYFznk+d?M*03ZNKL_t&pg%aH1ummf=NX0fP z3EX8&pChSL*l2Y8vl}u@WSNdLL6I)%c19ECJTs}EC|I@~{x?x1xOg33(my&bmr2Vd z8vnRg^pG!HY*fyB;Vv7{n4b!k9^A%o|f~W+LiJ3P6q7bfkfTfK{bliNDPBbHGOvazcdM zJ}&#^;ivEa(Vu!Ub~|s$j&tfHne_H(_t+zkz4Z-W@ak8*^z!nuHTF+~rF=bU({zGl z)rkS@QJ}wm)`Lem8?!O|F?(I94bYEg=|-ak4Wy-Q8@O&(q_6rcy7M45B_*QPP(L8&BE)AwT)Mq z0bI~X&*ev{$t|~g#|D19svx`kD>?&Y%!MP+(I}VdFslsu+)CvrFtkS?ik{*n=E`yB ze)HDoEY~XM#o!9Y(6d0+w6dOq!Td0_JcyG9xYpSP$jy|)=1FRN+|UH>a6;8^A_?rB zF>syfT%$sZ$zd_&I!Rc(Xh@}D=|7qYpv|;7)kLCFwD8RppaxwW&<;g8HKR#zV>3D$ z2*gxrw=yS_6U>~Q$fxp5o$8cF-VON$=XyqDzuwmrVOehC-?$w`7&8UwD{@*Z;Q%A* zRCW5Lm{QmD?P#<|k%*yJEj1#z$imJ!CZA9l?s6$-AHK+++plWkO9oC4^|-@v{d*(D@O zyrdF}!uV>FF?bSnk8*x+o*27cykts}j9&v4y4l)c@q4r1{*@2kdEcFD)$qm<2qOOx z+nt|2_RJT(^5wSfj@VmFWjRbGmd?@)j1=M75re)r%=HvU;Ax?mfruLPN-UU$m%~WJ zqh^JxZP`IsB~$)F=%l_->&)&+Pr{7FxOBVR`V0L4&tjq+IuYsmFq6V1Lt`2mK*(%? zS8q^#*lF##FjHt|Oy`Bn15BoAcyhOS&H4qdz(zZyf%J>&T=pQHdsQ#Mp$sVm1vRo< zZE67xwBSA?MKbe3Ts$N1k{e>rXlkTlWu{~Y_2U`Y|E5A%Ms+n%57zUN>3_$u#xC%J+KgEo^~VSS7#V*His;OI^6zHE_uTazdr+h_0Jtu%&9?BALdD{eD*;1pSQFyu z+A>~EX~4OBVzSj{nlPeANL7uzttni=fR4Fc{fl zKsYXDSDb{QwIX-{I?J$+!D|>pR14?1vD7&_xLS>FV?n3$$)&jI8uZv2T2F%8IYRnw za(G1X$!lQD1s#P__%d`3b@n#>9lPmy;#~CvwY7=r*vG#tr6k%YWm%Bp0GIr?-;jee-Gn zE|;tBE;O{TE7lql-9?{>jSyu?i6cwiUvJVll@fW$0ftI32a@0LG#sg*(5yy|(k}22 z$K_4TDZ2%{M2uVln^hwk%w|?XkV+dq{g#-vdxrF6(*McHWG*=&0%OO3GBPkfPF7IZ_04`51JIu4i>g62(Ha>>pojz@6AH$$Ntkn;vvOd$ zo2Yyp+hP(Zm6*f>;b->4c`Pt(Z*+t8fqmtu|AcjgI*nLrVx?2Kut2#pik7|hiVapkIDrkM(8VJnzb zGMwiTp|w49{}UZ4vIpZ~j+G-8(uZIqU@~GpDM#L+cmW<1^gp2==?xenQ3isXREkk| zn5H`RPs&B{%%u?#;3)@9!~=Sk=uUCKpb`O6Rq>u;!p8jqlXkF6dDwWR+-4vPlec9L zV*0`Ac?KamQHp{`KV8ym6##jqM^FQh0FRXsbUipmW0n*hNZy)1!p9@`#<&$=5m6$@ z@o3aTIT;h_$mViqP3nRm);Zp$tzgF}55viGn6wr|Ra_o5Hu=^X>G8Bt>BP)FTL!$L z3b8s}02^uz@Y6~E#xY!@@l7k2xS!B?AIGC<+HGo0@19d)jjKb|+*MVUj-(oTq)Bax zz#4N0^=Px4HW;YL!GKtU69Fz2w&FOQ+88Cj4PTE}6GC!e791p#ehtW!;Mw?W>O^Kz zG<{-POeGx;;s9P(n&5CWuvx>LOMYG5qqH(55}C4yqwUeHTW3G;uYcyQ=RLSTyYx-t zOw6iVhhH{FM;DJh@gINdo5$F7*U6h&!hta>qzjHKfA^^m0DUu+TefmsL$FN0RG6Ci z;u!}Mi99WU@a?j%z>uSbW=fhHk)6hNMYBRTOf-+SgXSpzGM`XQ&);czL5P@~A&mk> zI5sA%3C`Zh7V?h?EEoQZb=i3fH>)WkuH^2IxUor$+C~!rW>4v4_ zIA)oBE#d@IEUr88)?mW5AvRz&zL9*1C%Fs=UFE1l6O?Er^(u#I5gLn_c$!il48&a~ z!FZ&yZ3$|a5`gjNk4}w(_VN8NEe6z?1OfGZLjwA(Ahc$IKHLRSa(WfSFtIhYa z=_vuKOpbU1mvw>?eYwB;=tRdV0VmU-7@`6n;%287*1NMWEJ^Xn;@7$9HH7VIs#Bw& zXFB|2V*E+Jaud)oNot$T&wucDAN$OscieZ!ff;SqHRdrm681g1yu3W{kH7Hd*R8*7 z)}yqoWCuALke=!sRETVYu)hAAWUX7|^s&1NC&b1mG1CA!kpIK+!hK7eMt#ePX|*+* z8&oe2H3laC2F=zYU^dg8u{CBFM#c_RtkC&}rK!OOLR*b)HvdJfrl3Aq1pAy@B?II^ zu*O%tE=J5}v}c$Lv6R{pQTuLEHb#n(z`?YO?qLo_G_7;uC5Z5(uNZ&jOiHdCfQogI1KoriV?`cI{|fVBzFFVJ+58i_6}&a)5jv8!+(QO0IR1d1IANhLqdDq z*S!AXi6?y9R+~sPax7L_&MqH%{(ay3j`w}?Gml+6KH2vSLW8clSW!x)mq$~QjS5x; zG$u6#IE9f=DAYji&zwKl^go6uO>Bi(a+~fhndfKRS-`kNNWpXk!pv?p|;# zKbE(P?$JNdX6wO$L|A^%wZNn{qM%)0d2d5B!=x9Bo)iWHWkwEmtYvV=sR>Qa<;v+M z38hglq_P?nXRT@FjB2TSj_$+g320U*uLeBm^M z)%C7Swf`?a@b=3)uWeT$HI#jig@uRP+R5gzPe1b2Z+zv8UiyN*KX0gGjR`F=j&P)w zp3!l-ubh=JfrI9x56Ztf^)PG-nz(KgX^b`18o8r8y&%8{UNAWA0ewiD(AOz@9dE`frjLQvzz3%YZby=*ppmeV(~3S|nOk(G0-*I}3`WK$(t0XLwU zTL~G>Y~u6@UGQ2BFCVwUpGzlPtOu@_NJt|Yc-0*dDdp(}e@Qav_`mb7e2rh6E&I{x zO|tm$-j#UluibOk`Qy*L|5tx!G?`1I={MnMIo?pIPAeqrCJU0P$0Q&u5otWpt5kaW zAS(Y#3(m-N^5qI1;bhC_Gm+$zJDqb-&~P*?m}ylzMT&;%H@;rV8`PWp|M**3TWIO{ zU&m?UX;7Z6+1MVHo#OkV_;U;sfs)o}n3a1gPGyWod;@~vRD z6eff<99Q^U52c(v*T-YFM#|37<&uY>5L~{n<)YE)KUI zzPvnKvXc6dE=$18%|)!@37TbDkr4udJ?11gmotaD>y^pQVnj%$ck~MWJI(ofWaH zAuCU0q{nqwfQu}fD3el~!Rdr5KxEM5{Lx*izMg4veDnvOe*CvT_#u>SLsh zLSZ@+IE^U)g%}SvZU;~8Fh)@ZSkzFOCdb3Kk#Z(THoEj+CKr`hcwp+ZYj-WF*AQT% z70rK`mmvkpU`9NiVa6I*bqZN_hXq~)a}M^T4A~qv`m(XEx*6SHio&bQ^SEVcXOwdq zyRdO1opBR96Z%aDlRxzR3t#x~=fC_5KlR9?*B`uhxm<{9Bb{@Ik1vY9g~O+AN8&~DOZ zr|pwOQK|aaZLRdUazf5t;r78Rt>D8!^*Ny^o{rHPlE?g@Qfryij%w$Xu`?AiB%Wwj z(J>y~F4iM|mgA%2IGVZ7|380Hm-dH0%d*`zIR)dW17&h}8yt6?UYhetecb?M71;vI z%vy0n_f7s5+73R2h(MY9&A5E*13T7qG`QE{=6lowWAZi38YarDpVs+E>GzziUc+Tu zsFP8xE7j~x4@^~%HB=bR(x-K4%yx9P`{Y8CZgf|ITw`ixWqeFwA(NQMgF~0I*G|-f z83myO(VPgu*p6aUq5uNcHgA|s3ZQ_8abk(1Xg=lK@I}Lt2vm_;z7%KdjvKU%ZbGwJ zFbPnrnT&r6-oQ{=)-$Z%9dvGYbo3Md=Di>P(woTR-*kA=(a{!BY(n;=P!r=Po)LP*3mi6AY`#>|Ctw0?U`~39*5E32ag`F9TEW-1 zDf1a#SQpPlsrnb?(au8ZI$_=NNIP6eS|N6>}x3lw$>({P* z$J@U0JO1uJz3buU?EB(dIk2(a+kUzG!FxXX(LesB4}JU%uXyo(f1zej>!FJkkyVmt zyf&x8Kn)dL$VpkXF9R;>1l=waTA-5<& zpQGu>4+@e4ipa)97%LI*D=2u%1k^)_KyVml72IrP{iw;8k{FYP@nig!l!l|4wV%7q z=Ca4nzW0OY=Vzd`l8Ov4d-JB0pyxdbpviKd_Gh%gE}jfaZK zoI2iiAXj4xi{S(^4T23gP-;pT7|yPRmQxuckCtXWGtO4vj&yaJO+^*}FIEs#8`oK< zxf@!8$(hGG7?4ungsF;9DHWC%VfYt}i;;Z7%xq zj(30H&WG;0?2B>D=VmaHLyu05H=lXru{XZ>b6)lNFE~3tUDy3}Y$U|Z4}~)(7^H}) zBBuEiTrFe>rPeADFac=-txw(=+eDgDR!o<QbqpRO2+)#$Qu>}wy%TYJM-y!yVouAiNr*=9RjGF{9FY>%%Ue=7Dr_G3Tw zhFARcvy01<<0J8VrEBO$*k#0CMY%#AD46X?3Pw9X43)l*%P$KGosORv(WsUr1XIR| zeGQ*7Xo8;fb%rT9jjC`2k%GHKFLz-jSO|~`lEw<>s=&VJ&RA8`$9b)J4x@H*FDsgo zy}S)C&AO6>0`xUP|J3rrT8||BH$;orATFvZM zTXPthacd0zsMRoKlzFu|JMb)?ieXuEjY$Q@ap8l5GjZuz2Rt45N1ft9i9^N=O7Our zIETT>%2KsWq;ejPG>GQk^5fp|-I$EAQH~5tT`5m$Nj|t|qY{nrqoSMvXjWFeJDNhlO{GCHVX5)di z^c7B4KnsTF0#}T(yDHJgrjxox-Y zu_wRvzxu0Y*f(!v&65I`V zJ{+e&infxlDS%^qH6tj-oh8#z0mWn3fG#j{VIjh?OtZ!S$j<#hsbKgEdvLN6p6P`MVh7n1 z81Cu>Hk-9TW8=QZvI?|g>3bYgS6YC+cx9(x@n{Wum0lw~9-Wr4ofT`D(A(w__Nj7m zIJay*AYhz?e)Qjc*FS&9&-~g;-~9Uha_LKKHrqb7O>Ns@3d>~{BCac|J*)V08~fZ7 znUky~bkdp;>K;sYWAS@`@X5dN9pClqzx4h0?siKW0J;OZVKK|wbi~U@ZBZMz9M1D# z_RSPqZPq~+oN7qmEeI05Wrf5zQE#OL>n!VfU_A1hHihO8gO|X0PJ{|Q~GqN1LYkReKoUlTchA$=W4O)MMsE$oNrP?uoA_%)NOop|tE^Q%Sxq@t%wU|%<7@-SgI2>M+ zkFO&rOw&jcXTsAMl`s+`w@VWvP0jm;mL)kEuQ4}u*OkB?YSpp(i;?TI;bm4tPo7LV zxsMzo&Np0XRT>-zA>fDB$9E^GV2oJKrj{FUxB^ODlQ8Rljq(KT1yZsWp?azaFh?oh zF;C3!dh`rCIsyudYGuNjvoAr6@X7na0D~}}*Qe9snPLu>oheC{v6Xt%!i>b~?RfS# zeaqKwZ{AEj;TfXbm}J@CasNFZ{m38x<_CXg1Z|zX6|^)+Nhf@D$~ilh1dQN;)nHk1 z%|GEt)w*2EVX`{D5j|sa9Zlxl*xV}OzAW|i312r!A8auFK@gK-}kqqacOtdTC zKddo7sjeo#XH^+Z#wV7Ka+~1*03ZNKL_t)P+D{*mW`i_S-bz4Pm22ro*RFr)qaXi) zx4-X2ulkbn)6@Ow#l^+t+0E0-o97p&XNMoopSg8<>*DP8<=L%^Dk5j@cj1r!^L_Q``O|4i(7{$+`2qHzkTcMMK6ExAAjnx|Lq6= zFWYP{_m>zd4t)03HTv0E?Kh#kRD&IN>LjmTGlN!OV{%b~n6$YycMiy+yKq32*TV>N zD(`^8OTQ|t8moXJ5RTygBllC5<-k-{1Ey_e2#|bl;J1t(o3@Of$Kn-iA2t^L$PPw* z6bvP+quCFm{uaV#x-9QisSaN!LYIz~j=Te5b2Kw&7pxwF^14drY5Sal1&3+E40NJ-0 z9DL^P;ci`&#;5!Zg z$_Xf35!0qS8e2L*e-@IdI0UMm+h4gLx+U0D+8}6ij@@}FHN8j_14%JX3I<)MAcZST z7~8rAK~|W__6i3^Ylp{Zlq3gJc>@3>O*xk_F+NnqDWgEcvIopTqnYj`<3z%w-i#E7 z`gCqW7qx}4kkr6@F$L%|TXdJT&_5-l2%us2YBIPRMu3H-cta3=*lCPH?U$pV6pjI` z2p{%b={*ZHXC%mzbrHJLJ{xI_vf zYQ{qvh*&2j+Us-ig}hNOnr?>U)Ry4ofheb-7MrSc;P6?x-sy-bD7}zYV??{A|mz z&cyVL)27j7(i56pOwQ8GxL8TfJpUWNHcqqRkvY*$XT*$$$u&wQ>57AMm2@kLc-DWL z)siNoD^07W9|H!uf;&QNBIWD^av<}gY3G5-7(rh{KG%qqMtgEi5H%hpvw(>hLr0pf za3!de`F9%P%#-h7cpWGeo{`n8T`wyPHdFMSRmzRAk z@N)`xT>$0>!h7@LKlsYmtU3v{l4G_I(&1_OYQ!b<1|W#$S&UQtsMRHfT%N!St(%;y z;n-Zz67-Y#1z7sCXaa;tpToSg+_Pz@tUOo!1(EOxV9^9_$cW5hd!To7k8k2^}NxrTEV2tFN{Yy2l;I)i$3eMi8L{TE~gBY&|#>oMcv)4O3l5xl_l2 zJnUI{0Vp7PCF7(COoMBcwHc%cF9i`+W6L9D(QWvZX%;6%5i7L1+4)SVoXr7e%Poza z5^&xfdhZIx2jo3D-u>0T^0iO>>8Cg2n0OS_=k{D4%f{`Lw%eW= z50!m6Xbm%%6}W?3bRETcMHgM7Mxvo|YvK^ZZeYk2%?&w)a`%(D$;51AxcJ~4TRp5; zI?mJ%`b`Fo1kwbsY8o5Mhp1~Qm5_n1W7x27V@$_u553~`S%MQ$)d*)+;m90DPCO2$ZasdWx#LuF?S#9lS) zyCtWOV&t3~W)g8ALRbwg5A~r2tbh%F&RET9F|_iLZV20+oIHJcYU>X0t*kWfQwlsZ z*5mNoq1VIFuGIm(V`_Zd*J>n&Y?V7NrDGh#0U9nSa+~Is0Fpp$zw8OK28pRuZpky- zLYQ#VC|BAgf6ZOUvWCT@b^*mX)>slv5S=9$gDwK z{EPdP7|kTq0{%Ysb`^Z*mz81;XGIpHJXdyn1cnBS1oSy+gpvDjUNnu6(n%udhI(mo z?ldL>B-<*rop9et34-h@)-~k55(oRKcm2ZAjXOH(!5U}PSN48jA&)=)^uPBdFMi9{ zz5W2d+s%e2;>foV_9>`>P>wzGjZ{hM2>M(20OUzkHRYLkgrSsW!rUq3A;?elub^{u z^iGx4cEb}6=d(o?VlXFR`4UIF6tja=5hKM|pPd4mX>ieq)|ic%dxKfUga_(J z5MG1du~;ubm2;T+EFNiuv*t02lbp?`m;sW38D1g4OxKwqg{}A*0-}gW zA&}r%5oZZ4td@&QT#na5^w|2_e zth74;e#zaI#)6=gQ74(`U2a9mYHR^j77OL4R}2vP$<+fMGqP6516sXihbtM1ar9s| z&q0Z((-a~|dW~u!mmVe=bZtXF$vJZhcu)l;ltMlMiq>LmqA~V`N;S_V9?IEu4tko9 z=K}YEBHY)Z@MdF0)<(gl$C0;-i($ZH?=C4FIxcE2m#Qbmm_NV(FIT((Ub}ix6()~w zaTt?JGUMB2SqmT5eS7-8jU}e*2sMO2jNs%l(bcfxx9O`(3`u?3T4OxUcWR4HV@svp zAlw?m-e7PpZwi4_2?_jXx!1s!-G`61%v;ioM}bUK0y~uzEBuW_#zZf!8XyRXTtY%8 ze|7=o&@T{?b!{*gALBU2E&OdBZzZ6iF2of0Szw8*;E>G<76ccq&~1}%V~e~<8iy_4 zxJJtR9!JMV@Bft#zy006`rz{)yg0jXBo2v~5xcf|<};7K`YT>@(l+~L-*UCIz(Y1e zh|L7JOR!9lQsFsgE$<#q+EiBIG9K!+Q}Ioti9=(R!BJ@1$oCz)&*d6rykDSB^8uV1^(Xi%r&qu*U7+TA z0v&-l!DMJup0q5xOx5RXg$WV^iqXT%Sb&&qmOapm0F{&^M7h@L@m;&TJbUA7zvvs@ z_{EQX`st&SqsXm#^6l#)iS2UH?|POcqio`d85=2I3sy=IU8X&n#bUvl4i0Rh@anraVe;wVx0hu-^|FuUq0Z@!B;{~)>$VXGo|i+7#TzkE?rdo`2Wv|` z3ui(1#+H7Od?+KXF#wD)gIZRhB{C_chE$;qre;P?5XqReER<)?2A88&F2qs%6floz zoO6HiK5%l%xPpABJPZ&ogF^7*d{I#6iR_0@mNqu1$%1j9N6-XoG|)`wmC4F!R9p(h zI+gOW1aO8s<~)>KemAF`JZW4u=llMTe|!D@JK9Jf1RlRKwq%uO7yEm||I5GrjkfGJ zE%)Ixxp|H*r|!peTQG@$Hp@QU{~xKy;MmGdn2`*c)#YJyLMX4}HF8!OMK5>dEJz`q zTFoI%$cTFofDp`BE>GcT<(d@;2X$a#)RdW8p3W~+tLfl!q$1R35=QKfl1*vTNR2mj zIDEvCp&^T42#<6`XF?*UYx$mpO;LLJTaYLZu8PVXSD7TouoB#(OaZOVq$mB0CH8QA zeQ;#>gM|hZ%!t-W>cQN!?!bFPq{|iJo4}MVHm1fo=do&E1u>N#n(CFcjp?E>iTpKh z{p#C~J~5^X$5J+yS^2sZLELrkjX(I4M}GF*??0H*eqAX*eb2lzST%z~pW2iK*`Bz- zCWTJJ(N-G9fv7A^&MQ*gHT#rL@JTP}xS+&iA?X-TmV-p8T_+xkLQoo33)izdGGEI? ztVAafLC_&HzoKaCn6DeQkIk|(hZo~;@pVu)&E~_23?e1iIbh0}+IX*c#+MOI7c<}aQw>{o&k9V8n&EeoM=LF zpwwNCOhlj~5wdnXPg)gUBqVbC3M6QwB5H)8LBqkgDhD-LpIo&O+G?5=%7~#$U|4_4 z;RzhXvIqgzs)xR=^}!3^a;b;KdSUFC3DPHYCWLruo?p2gHE4KJwj$Xh%1g9YiMLUI zEdhnLHXl|*hdOSy8m?X}%gpLz84Z~C&AKL5e}GSFbk)zaH1BP;(# zo zc7bjPRPr;IK0{T2ys}8MX{8z#6##RXMo%SmcC84KI3gN6<=*_d^%>xWkimMz()kneK#p@beuzis#M*YFpf2# ziN|ia8!{B!T|JWwkT9TKl0p+J(`T@%Z0ZSu00R{UZG|LFrH}*gHoJBAy1(&lU-v)$ zk>X2_mhO+-UP)7SmcYqpRRRX(XMx3iSQh=n#0l^U(Yn=15!bwfZ5OG|D+ zDKQ7hBtivu-1X9Ob?%a&3Ot>!`?j^)Z!WY8IJyQogX@kWL?)C>R0NX4yC`K(ePq{S zL~X6NZu>F4nXr54%VxWI&O2`` zm+P{`Guh*b9r9M|&I6*Lj|w z0m$?1*nJ8Uxe{^f6h1tdQ4U2IP{o}HM1o?$lqS2KBVmX`88%}qEBo15Dz|c=4#RAD z62d|wpkJWvWjBZ)kT9@`JxKix0udw^^cjqfWgSB3Y!0=H614Nn<@&X2fB$=b_|g6T z#djRtzID1gG?-hY2hIf8oIdjO-~RTu9B#Ud{q8`uJD`OwEDadkQ2B^ZKE}EHg{UwE zn#!_Ks|CNxXas2o$0M-a8+8m$S?-2D7w*&KQ=P8?k>jM?ge>q(=*iltP7{+`LxTws zWvluF$Ku#bkLHvuZ6@H#7{ftKpp#ycZ8;R%+-qLLGa+7%L{Q{Yg1dCyAj;qrHQYil z{YZ{P*rVD}!=0u%p4<`6T0sNP^MDh<+YlmaqM@|MW+G`tC1!$@#5Yd3aIo z$+%v1c6rA`&-wjd`_1>h|F^#GD_?W5zuW>%lM+S(G2df?LAv}9?V;Am6=TYW*Qt}) z+8p!X&}E<$Nw0VgLJGaf^*Zq`8Ub9T4Mj906o?@6M-20@(+BXfshOk@VFD#H$uGgc zXw$|@{;>dPHImI*QkZ-HlK~G-AU8|~fqV#^q>GTj#1e~w3Am9^Yhzaixc-JoxVF%X z&TwmFNdBjL zdd17W^!fLlo}F$sW2fMbAb#u+jBy$wUk>l?i(S9t`cMAy?|kys%^TNm^uBD6`5d($ z&QijZ+@z;QzU(IT=mko^t??}v8m~E`M!E+DFaW+${1Ip?6K__>iH%1z71Pln`Se&CuxCh~>UA8LhO*Q?T!F;r;Am}r9?$tyeCWr$mv zX#?W4rZflL2}>E0f*=!nf1G9?C%=@Mx|ekA8sPQdhj9MuYb2Qn}&uyp#)i3g&Jh zwU^h^eXG2ii5-uh3z|KFUSk942q8P>U>yB%!hDE4vx1OLPS^g{=pv0U!A z>*ADzOwO<{qv~8Q;LxZ5z+kAH%8=+Jzdh8UrT@$*+B0-TZ%8REL8Ot0#vGF10%mZ4 zv84)RJ5Cs(@{nRkuSj1fR?DYSph5PXs3qDlWpQGxH)-oO&YRVKM%2E^^3=5OT*g0+ z`;w86iFrYX5p_ZkJ!$Ith-I8R-$UI77tu=H&_gh6jP-$}9&p_*9))=^e|DoldPrg$ z=EnqUE-y;eg>)o^{4HHkgGY&Fjaj!x?e?QjeCs!V+qeJuuUd~L*%;H);5~QUeSV%12W{Ax9xWtZm@J&Rd{Q zJmN_zXP8!;qOVltJoJN`t4}nZ@hy`Ovx>-5<=cd@3K@9UXeUrF5H9GXiF}m1gafh4 zn6>Ic?iX6sacl$ilwHkb!1Lj0NnP^fEW~oacHE2n2TdOS)KkkjbbitI*G{gz;~npL z|A+qYMX&qfi`(a$*eqILI1+Bh+xFzAKKnI)^FO@rj_bEi&yJ6F%!Mh1V4elH;tx!) zum#>lBne|RA}}!2j%M#V!rn~YXC#DO8&s1?c}|%Gr+U}%O{LUwdiszxiJ7*7KtW`Y zUPC}?PI@a-WF!?tb52VJ<3n)NE*BSaB6uwb00YyO8^O$8hZ&TyG2W<@Qs^)bcs#3b zuw67Kzt%(uqKI;+b%J!EUI=?K@5@ADHTQFCMf zOo55`$yy25>pi=~Gmro3-WB!D@^Yq?jvuT%S=U@EAFaD3d{tb_R z;!{UQ$78#hbs=CzBb(-z=lh4AfB!Fj;P>A3zTdcZ?b_vKclt0C%Tm`FG>z#@g#=^Z z>3d|JshyyC>FciuI!T7ZruB{7g=OlDY-6$p)+)fMT8@wf)*@+`CogJI0YAb}P7?<$ zBc$r7HSF;uAEPy*Kn*+N0xMfv)-@-Ka6?;EH7pq%tj6>Q(~CAcho zdFqL04wu}zd3x*C?PqS?KKyffdi$B%r_bEJee>4MXKvoSdHCVrCse&q5aE6QmxL__JFH>RJn(5tS^`+;7YR?X~gEt03K#Brk8?ImS z^}&2oF6LPuxLJRm*Lu1MS!CW`Z=@4;k+3o`MT?`QY5t8sj_hAXt{}7|BPe%WQ-T=O z9#nM4L@-zgEP?V)Z32KHln77Lph;T5;L3vg_4eldo;^_k^Q@kB9hg8*YolIsT1Cv*Ef{`#N zy(TbZS~<{ZsvJYnJW2{}3$#uU4`@(PwQm*#XdE(CAW-~+CLYE9fA9dTYnz6scpW)<^*E8r@ETA=Iz z0VI;rA2QTtK8BTkS8r5J* zHIbCi_Sh3irIbKpHU+~nbzbek%GOf*_2Y5Ymor>Tqw=vgv@sROl0|CrJZ4570TpmC z0irVfmX&^vkyux=ES6h!)&7uS(@UfYm29AC#oUC%X>NiLrp=oNj5_wWVr=OQyvW)3 z9I}t{l^D6))^cMbpW}vw4eP%6YZ~MDczbkmbnRq!?fB?ux4U+@)~_vHHFzoVm* z-R9bEcYJ(wyzZC3n#6v;U!}b6z1>D>tPj#aB8XZGH5;;rfYS3THN29Zjx*D9?*S%# z*1CXkb6QG>=G%;zhdz34X)P-b?ef=p2weDjdX+7piqjw+n6Q|dV8C?W*QGO zHI%S!N*%)6H^XyBlC5X%9IM@imJSAF0%{PT)i5$KE*M9fs-uHofp7+rH_T|V-<-o4Hz4hKV$Hz~6`jOXs`D!nSCc|+@ITB2!TY9W8sOM~ z2LuVG4f-70$@yf8t#d(0W`!8IWFxfkfg0!;9|am3{3yF3%Oow3BLu*sObS56UMdG= zQ#@RYy5J5Kd>b7zDGiB|0;f`1@}r6{y~e$?Dr?9ct5e`&40Hy>r;FX-?O0|v-q_$4 zt|UA{IYoLzB|yS7!xP{Vjz%*xF^mkW$LMRKo?;L<-c)H}R^K85ppPa;iVhA@Dc2CU z$&1Gn_IA5HKRx@lzxb7}ed%)_`^;mz?bg7o^EK`v)KY^zPcp zzV9n{A&U@yhKCCo(S(~$kA-}-5H_a&1wT`Fvd>tYI24yjfZ_v_uSfVFNJ>agWp>0x2NktuZ((0CCp&x^@}yGh z-VT=gQS^~y8orAy?7VZPPn1ds?4|@6`Hx}cLlqBVY%u`orp7H;fr1c`Pn&{c3MU`L zmW&s3*UzBCA~1|Ut#^twrv*}ZV#LFv`90ETvHwO6nNyVjor~r2_M)U2?Gawts-Th# z2cx;H^|=d{c=joLkp`6JLHQU3<^?@t8{c4@au=-;5-S1bQ%Y2jj z(52&p0w~_KSX}gV3Ep@8&p&)|?;Qum>zFqf+LFg+ueDQl{@Ex0-hckK@wjD-P@`1q z{ZVzvL09O7UFn+r3V!iPa8VUQMa&O@c}5A3DGp+A{fd^1$K-;+7ENPk^I>G-hRip&%@y?MK4~ihKLh5Bsb0@;+#03 zCf5m39ItW*%=G*?001BWNklSR6 zs`q`@`ti`5^ACG}d#zekZ@pEkR;`*`(4OhLj1#VYq}8o)Y~oPOg=m9G*p%cf|9#Vxve5>dEd$NKkL~icfV`BPOy#>MO&)f!Wts)Hpf?d=|Av_Un`|W zv-t6`9I#K}&S0{W>!cqC|Gc#GAYC-$YkLqOoSC%_5M}kVV_nAw)2U2MhA=iv8Ka7F ztdqUCBy5B>nOONwHq^pXIgU9G&X0+;=jDQhUw<;LMd$;iO%7UF$;-=64V^_aUKxZ! zh6e@KF+U~bQuC|2pm#E?vT_DE74`>nC6$1XSB0W;;k$G(pOT}Y8&X>D?*(TK8A^d( zLl7`%j}M1U$c^E64at)Hfa=?~lq2Wx7w7}!V%YGin9kCxseP&qP_HkmG10nUYZr5? zo87fGcr0TD+7%dpp*a*Zr;p=11r$y9PZ3j@sJ`@gReDC~$`K^Lvx;QR;DA4+Mop>* zn-R-rqL0Q>K5+smysl*z?d$@dj!$7d(AWz#72Ls)jryqtC&K`@GgQdZ*RMa;zKL-) zGxJk>5=*bMnj@~qMt^PO@T75w1t`bI=+Z_staEY%3puW7+{kLT2E~J9F8^`Hb!$=4 z)uW?7{)^ZD!5{wVEswb6{Ct=Ff3uFF;{a7VIJoC6cR%aHp8me?|HR(+FW5kGT6)<7 zd_>^jvX7Ak4S@m9_&?X?at_Rxx}>Sl60(0pS~PrC1VZs)Rfx}xGIu?EU? z>?B4BwosQ`g=JBMAm|JiN^iRi@KLP}z`nR@UOdyLECvn9hX&LydzFm^@-9&L%Ezj+ zRzz{V^&QZs40S>rTaFbz6ZLu+jxl>c*wSjtGHlQtt~Mzw)}PTg9QY>B2fpBWAA9|c zH=NyfUmP4%Tegj($6wpDetLTKF%SFYU-*r;zx%$U%>nLRn7p59==G<2H@Py7zvQ8$ z%>Y#>=|CyXqQ2nJV{q?|bTA0BjpC-M&KdYh>k;pm(0oK@!3lwCOM&XO4FaTM1!dq) zAtS|IA6=tpo7JRypN8KT;yY4#?%I_I^=>knmi`3&sZ6Tk!;x#mZ1K7Cn=$%;j5F2K z6j_l%IjU2k9aXElrmWdfNGKFkq+mmHeo$6h2%ni4n-!8O80mdC+{>=x-b^r&;6cQf3@`VQv{P?VE4o{b^P$s80Ks~mZ4>8a1g(s%vmYs z%9ojL#A!BdEX#~K^7;Guky52%> zOdm6xfqIOndSlxg_-rd z_++Ek_$3T55EpHuFmaWnoCwX=qmHe^$&uJRUHNDEIR zwJKDv>?}2lLEU6t)YLiyTP3DNs7M9;5>IW~BN6yi{u@>|k@x zJMaI1M?B>7KKm1v^NWLZX9XUi1*;Xz*9wZ%6^bWy*~gsL{x@ zFbt5|WWS0;>x;D$8Vxr{7W}d-pqqLEnO-Rkyf&x+wR{rjcmne(!E%~%5cJkYH#<@X z75!Qab(_GzL{zA=mAGFY-fM|~EwxVg3yA?r0|E@nCckJJJR*Ij6(Hw9KloEesv9&w18O*InIRd!TYCd9p3_I}1-wPW!`dd(+>t~SA31Updg&bs3 z*4nTxmMM0XU-Wc0Br?PkK14H>r;%Xm+h*19LFAd9aOg*v5+S9~D$=IxjhYTd!F1aQ zd@ZKM!cnpHl8&S zY^yAl*V9FP&3JLAi>yFGbxey(d zBIPKWA}EF|McC_{olh$tP;)9b$wdmeA-5yd%p_J07JW|Ph8%8B8G{iL=a=j+ARoXK zWD}>P9y0J5J77%=mwW1XRna;ers^EHQo2@vZ)yj{G!}woDm(}yW>^Dh$bOIg0~g6v z+cCtQ^`P}EQWbN&>?eNt>|}R%{dN7kPkwlv!rDRYaC84%cl~eA`-DT=ECeP>fc5mX z6s2u~6%Q>>4WDQ)+BV49`l>#3&q_Ov-idTz>7=IU;-{` zY+Cmr&2e^v66z*_>Y!gYf>zaR$+0*=b}SNP*=f>p(+m{Kq@xoTuH0oEiw}*+^Xn=u4LcbJ4;%Qa6gajiMK6JFaoH@ur4FpyCPW0)p zNF-3X&V)*G17jMBera-(f*6lZn(N%~me&gex+r_I!5+BC-U%d%$fPbI6ZL|CZQGoj zoP5wzZ~LT=dB)rBc>Ceu!TQ4 z6m=ZGA5#sYgVU?)_ZCW$A>t3^%&Ff9ZbPgFC_BIm9y|4bd)(wT({QA3ArA}#g!H&| zhQGV)6TZdACwJW60&i)db*ScH>mVlASxYgN$2G7OPp<-7W0z zhC3}uO!O#4oNyElwLlx(z_emYnkW~+@Q71FUmfHag-BQfI&!X$_A&rju#bu#M+Jq; zuG?_qOvluJx#iPwNqZth<#KVDWU27J$A$3^wIO7V#ypYy68&zMbkeFa5aNfALmb1R zVniddW^Ns|2v#F{U2#?mScS)oVM1=~(g75Vv?(54f3qpkEyOZg*eZbpR?7^q9N}>= zv<+_LLRDieQA|=-QFA4m(+)8&YEg{cM_D^0LOlyAvs3m|yYYGm-jTa=P?!Bw7NWS1 zPe4J)y6l_!43J|^*AdJ)y&w&`>TZoe4Y;z0PJmZ>!NbwzIznz8piipYYijPh=!e_w zo8Niw&%f$7Z+_y#{o1wM`|geWV6DjB*x7xjNA2K?Uhs*w?!i^8gdhTWY=sypirn!R zS{QDeQHV{};8+4yU?JBxbGQ*%kK8QySx8&mb+(49C9cE3mOXD2ep;UWIAn#AN;HlzBEx558u#k*<5b zO4^h(ysC|350wb1Uv28hVbsBsY%=D!jeR_9EM-X>B;DkYi6z;*y>u+S!ICOo84dPL z=-{lOkY~yrpz0z@3@p+ehs}6EbcOGsPEKT{ z9zcSI3Q#0cj3GtxY9BQMCJIW9SM}mUcUZT@Fa(B!;2}S_!x46dk0686SSnzVvt@U& zm*mTT^q1az-`VvyT-{aqQqMB14#hpZdUV(8?)b9L{={1z`rz~Pb7+MJ>kI>lbb4bs z{}DnHDmh6PHlcXAQ+@ez`Kl>QmH~9R+)5r)JxQW18ARbr?_;q9-5>}>W4Mckut&vV zUb}Y4bq3KQWVc!cK{b5E#IJ+>TTF6*n-V;Gk$1b4jv-BvEL`U$qJkOtMH-nn1#JdX z#@zVdh%5$~9kob&cTd8_-q;h?6=;psA(H1mjb6}L2gCIpkD|@_)PC9PBQZO8U7xFYlmiO#6ru zIr*>xDPtzA=D=4mJ64Y|!M~h7vi23bOO26yHpcbiM4K@>L9C^98!J{Cqjff&&=CM= z*NVIU8WMNuLY@~sAV9$k31P!@bwO9C4iDP0+E}w$M6U4%1twgDbM!)$ig9i1I547s zF$ZeYV$}Xw?)Vi@dKFvs_P8l~`J-+h#H^2R-Z~ylXx$Tjs zr#n+_sI57T^}NbKJAL5f#w!P(`cFSLKW<}4TdGjiDF(+X05&?Q(VGXzpkwf z2ZI~4;}KSBK@0{4IHM=R&A6lzL=-f(oWyBLE0(9{VH_Ac)2#4T;1$g9r!=VJ;S_xd z0&AK>Yoszj56N(R=kgr$%7z=^~r#nM!OisT&MPz9(ec1YM~m zMW{GmAP^XzIoJc24*(;dX46g*)5+ROpA^Jd$Vn%~6{v$Ve5Io-%}E1LNjybP0n8TV zVfHBZB)q~AF_N16IJ+iw93{L1qopV|T*9#T;r<;HFRrkxdFB^=;d4*!z0cyJt+9Ww z{(p7qo5StJvb*t-x4i1-e(N3gKX81wU3y*Ofrm9XKYIVkf3vBE2(E^&X^*8e@F-?s zozvtKq#Q=;q!=0B!OX~L%&2}Q?@5+GayY}B4cICX$tnUl-ifBbYK%t@>8ub1lpbWE zV;`U5*3j7y3J!rG-Bq@bL*QAIf_3ofB0y`I?s_F?`t2fxm1yKh92!OHxng0pE69~v zY`tQAxBn~u-L3yD`)~K(?7!%Ne|y(o`ycM|i`~-KFP8nwE4UA>gEn}KI6BxM7i{r# zzqzgqa;B_Dkr>p{k8BPT!~5dH^LAXcLhsdNS_VuiGln==H%LN#g+xW?=+oC% zG&IVB(b#GNq)HK0F|)8P^GdCX`-{9a9MEPk0!4H%cA_dp#!SZW6?h?1*YuSj*ET67 zc@Em1PXJNR9qud{U-sod9K&dHD!L~~31S(S(f!QkV~C(|&pQX^j3-uWs!_@`%PeB4#DT_4+agK{ZkSIs250ZBchmNdzvAcq{X6b{ z*VUVE+}lrUtk|`c+wLLpU~_QS9d|wZBcAb$_j%j{C#UNz_L4sRK|WAD{#>z#JPdp= zHHWHKo+T#lGpn(l%*rI@U^D}=f^4uPSR=P6rl}MV&5K}CFJV}zkEpAHr>z1L>t|FV zcVLDT1IeLH8yszDASJCYi1to49FBe48A1yY;*ufMGq9&xK^`hc@6Gk?L-Id}W{b+ESjF%?ap{FUA=v zyq9q=7>#rXA@Eq@^|KpI3>9NqwU7^%GE{UOuA~`M7zX01a=}Z(t2mn+&U|}tc6$2Z z&wSda|Kn%g`P#Q`5A#fB1)l2@*B$YGv3tlZH~r5yy!H0me`op9BD~^ti_v^Y_SmdbOj1UL*I1vCVLRgf78p7r;%iO)N+y zW$NBeUPqN_5(TiO0LsUP!F|wPYtoVWnH&$&SVoQ@3kN7nx{)U( zBl0Re3mho4Fji`VXR}(=m6P*a}lK?lzrkrSv1O zZ%iC4(%hi_JY{7}Ui)l&!Kce2hwRi^6Ob5+T8+EeJ!)G+cOx-8ZX7)g^R zR%{FJWNJ*kh^Qrw>%(HC9I%<`*a-3<7%Hm5RkFHc!y=6SL&YHlBvJjFV6i^8+CTl6SgJ7m%DFGl71l?#n+2oiC4g>~1x?%}Y z5JdP$!xSNeaF};bGp#m%3_^xE8PfVnZbDHYIf{{(Vbta7{>V)y((5pKI3s>Qb6`6W zyoIms6e7{0VHmBO2LmWdr;{AQAbXD?lPpN9r*jcTnT)L|_wJi@?CVed#g{(+*MH|l z7dwcqw&N0wT3^=7s~-0FM}6l@U;SCn`@|crKgf}{wIS6M|4*3%q-I2fs8Z<3P1K8TTqeh&8Kf&K`@@t6cWzymw1c>ao+gwXL|`O(bucX+FG)oigLqFrit>oHF#;cvUPH(bXygO(ycVHt zX!iyqW6|LFLpme}fiRr}x3m)ps*YSQ6b$hlJc!mBK0{g$8qo{=^D0sht;Ppb;OfJC zXcboUI+;lu7r$kXw93YJTx8RMk-dYvI{Z1Cq6Q1*OTE;5cFbClvjBAcX?2W5Jp@t` zbxtG));3WojkaCqkoC>klLexOk=GdZanE*B@g9&Y!G)x*Q@`o5oi=gIlwuN zc1y!Oiw0y-m{WE*r;c=iYeAH997-C|xjFr#{1iN$Rsdd$gaFS8L_>i$88QjZomc26 zo-^&qc(8JYKC6Bi7zRfME=wN-rZk*3N5U@}Xd(EB_#%*zu8L81uL2!hLK~IX8E#Id z?Wza@HHh_Icn90ljwnDT^gd%kq7OZ?&Y}N{*nEj$Uv5zt}eOD9*JD z!-b7BZ~_0AQPf+|AG03NNlNg*UKCg@!^kp=yHC6o#n)|)j^yu zH$3>pH{9{J-}j1N`PMJ}^z+@>!A8SCl-B^)!33%jl|v&1)b+N~tU^@JV@bRw8we!3 z;(I_S$0dyAj`E5Y*J`+vhJj!jH51XThJn2**<~>0RpJEC8`fJy)Jk4UR^4e4-nMm^vOU61}8EB&eMV!7FSCZu0MC-aaj^UEoo0ull}0P!{g)M z`-4CIf-nE>d+xtj2}$2|&$b?($%ai^51OLN23zg*an;1AJWkNl-EEYG=AACikxJ22+IqXxI?TMdG?ZMU3j!3mO8m_yjfF?3tJfg2Jd0Xh%QpGQUR9Az z$98ByGCis!*IP?~j}K6l+&gYr>1D{qm6Z2iFC$WSLL=Y~`{WC5CLI2t$PM@&+gdWL zaHQFs0isXZS~kh#*_)#{{nf-LR6X0$KmsfHn`!^N9|x4>@e!<&5k;89u;Nm?#LsV%)L7@mwA2c5aHO(arnoK`X!g_7tsK%b7F z)Y}>|?*{%6g%mzzEHZDj8~&DWOR>ysCYJl6pWTOG+}q_S+SkY%qc&o=!r%0~e(nVqcad1fN> zLW%Nt-kjkV*#Z5??4D}6UYc#hysDNq3RQ6ut4Jk`7OZ<W8!e~49Er5S5bpl-Q{}TcD+Mj`!oOduikxn?Qsu!?AiUND}k&h^(sxa zqobocU-zcxe(Z;Q#514157-ViTezhT>LSADLu!TkslDKurWCc2#Tj@^8M{l1_}YrI z001BWNklJ4U zr(?Why|{kS=y2#JQl^ULTzw6xXb8SR)4|CMT$w&~kYt=wUsq{d+wG*N#*oAn`jree z%&yR94C#Ogt+Q{ajz{=nP3aT(Y@e3ga-Y?)#Ewv;_zV*^QA^SW;$i9qNQHZS`d$8Z z?Wo%>cIVIhpeH^56Q23@H{5w}-Emg4c~RhW>wd9YZhXj%uf6*{Kk?(g;BC8G)Ka1X zA0sqjq{hMn&O2Y+w2>cb!^M@TkeP$yPKVcqaVtoj>cM4KlmUJkG%z5g6ss2Uy)#oa zJNyR|pxrrddvXWKY}B$+B^ui>PI%09uyuW?BN+ot!^hF$P(mJ~k~qdq;P{xb1ps+Z zvYs&0IygX}>cm++(zxoll>Gc`50~x#{i$EM=b}CG36DBE@7WoB=@+pqak19g@i<7e zO<4~&uOGE6dwvCmpY||2!v#%;%>ywvTo#}R!H1b@1)u_aHLa| zCWW%+S8}vt{KMcfipoWdwQJZW)0*qhd+$Opri~_-UHenW9LGeriW7u12MLMD%CQDn zqHU#*(E%!o60Nj2FTEcX_&D0=LX?gt0X@fY3opuvc-!ivm0L_!W4x`2m=`1wHhvgI z>+$-EJT_G%3su;ExfR3*E3;x%M?fRoOQ9bhE?!fjH8?3lyJrI5dnK>NR}&U=HqmRg z+Y_{d!^1bd?OiYZsaN0f_{W}|oUHfRE;jDNONPED>f8HI{@E8im&z+}VD?nm0b^w_ z1hiUb17(s|gCj}(9E`Y9?ZQfCL>LE@#!K=_c#zh4bq?ebH@L8&x&szNQXSlgj^8CW z7`MZ9x+7Ty<(#m8$}-y}4KvCKOQV3-l&6rg!cO@ns|bi$v(iI3eu6C;62YE8COL?5 zq7lLKU6?48iKIQo$HU3XF>x>%A5;WT4ve)#1i;}YYGsg|roM39osNb6QQ8?!=jxbT zjS_$lpBPFM;?2#bfI8n*dsbNhfLfp0F)Crui3LKjKx!tU;iaL>jy@8D6kP;Dx^!y* zWj-Xcr7!&a=h}Vu_1#4(P**CdjQjND^wy`|_J985zq{itcO4%eFFYEPv4`uEv1?Jv zB9aa?rQ(QUYrTwSPym6bg1iJ8!>nR{t^IP-y4M=0Lt#ytX71C(onhH$ z(P|+hZah727*{@d?JusiOrQVr1C?3{)q85PTR$v!p*OMCLu|-#eAD`_ z?|=K&_nf@v-S@9$uA!KOj>ZPtkU!=*eGo7>&N9oIXq#Chqkq}W5I7R*QKx%y7c;{u zA4Xmv2Ihywjv?E!h4rDi-=)eb$79Q+A{b4;9~)i%09_*I*e>X4qx*<;m&7ptRKAEk zE{mi(dm)n91Vkm99cYaMFO5yIZFm806il!JpTvMVk`=&Js0>a> zV9aPnwK|yqv*e%LOTOzgLGK%1@_${sa`pJil{LlG&_}#-)_W7#939<#$J?Iy%%^|i zKl-54v(tlZIlN3XJF~gmN>0@VULhk@pi;Nlw@UfAsuU)X;cxCAn-;~PpU(Y=$?D%1B%a{$s#bFLEV{(1N1n^boP%D9yC3UEb}7HXy+Mlu*LgCv{N4r-80^G% zpv~fX@YOXfT(+RSaBcO=khE=t1Tl5ThamZUV?hwMWlPbzk#!RxI{jK{I+@(SxIqtm z1lOzksNv#pxEtNDaj=d~JtHk;H7cLr*4A?;o70Q4kN=1OWI&t0r+?f>KI85??%Et4 z=4Lo3*-aqMWu=lDXY_HP#|sdDTSE8_1GziLq5vy7g0A zMzUZPU4^{4gTtM;fsw{65B!2`$EM<{`X{Q+bbU&xPHmm7C4TFHRjMvu-gW8c`m}A^ z7AN(@_PSoaBDf{HN-c()mX&#O1Vx_rJ!Yb#I+68dO)@Q{izcQ(BSUjiD#dhnL=Gpn zwh+PNH`vods(VV(BI)jIyn|{%Tzm{ANT}R6$!0~}c#OlIV-7Xu&j^)3F{<*^fFU3;W9l!}p4X&qD)0v0R9~3nK?;vLR ze0;;BS7r=C`K<-jxtS^7&9SEbmn#T5g()ZqeMyG`4~~{lfb;sVc#4caZMiw?0uGaQdN~yr7+@BH+?&#Mhll_9zyIYg{mSn> z>@g4DonK%tnnS5FfZqG*+wb{~uYaK_M`eL){j>&srm6iq5gap9De3)W`Qz6L>JS*dH&T2IvC2SW7ELG^7y0uICZt+eU9Uo+GKU4IJK) z*4Yi=SN?igcJ=7hf7>Q+lR+L2*dDS;8xz5PUK*vF7F7uySY!Sk&nr3RQ+Qb$GYWOl z`5wNv`RSY8#cn^&jnjhHn9Tcn5M=$);!KUz@K!$2a2GNbZ*}bHKv$=^ta%OFw5CZ_ zkB83milD6ug?lTUZCr;|nFQ|h1zHbBooVmo{OhGW&yK{~T4&T7OMS={_CM-9uQ5Y} zbctp8P!O$Yhg^gDQZQOYm$ki1%OM=1J!ni$fdD37T?N3IQO%+RH0DS#GWlCdL&rRP zOsErQhGTigXUXEKQ7@&Db~+ZiAd?T9f_>18&a>3(ST;rPz~AfbxwBIn#4;7wu$Nso zEatr7U!T^P##G%$i2jn6Fx6L|Qw4=r%0tCu=oVvZ?0d zjvxAnx~x2yQNSzIAh`+pKP~pYqsGea?r!{k3n{9v$XA3M^q? zn@p`Gg@*^5Yu8_W`OAK`^d!%j()Qt@oeLN;Wu>W{j=AK*&_>nzf$}PPO6WKpgX=hoowsL;xMJ220B8F4r?5)95z9d z>s1!o@v$XpA#;;5gpJ=DcL7tax=kFV4OOjTP>h(HA=b6^Ld%{p$|{8cIhPlx#A|Iw ztViira-_3v^|`n+9`kNc_By{il6Y>Y8X@FYZw_PdqH8#n$s%=d21)F#)S1a(<$FyK zPi|Gl#Ss?jD@hI&tNtO+tG0c?ra+mvRpJ7i@KXfWz- zl_PGpi0)Jf3J>T|TFj&iFqi?uGm1cgh@^wvf9^%!9UUJ2&hP)p?Z5V4AN7>SoSvK& z1gh?7O|Na*?xG(pXD|5N=SahYm#frwW4p#!tx-q{**TqlgCUeQm9q?~MaWapI71Vo zHqzHHBp}wpN5D7sK+QhnSVN@rFy+BJ z^&IcFll}GB-=p_xN#+SVuJC( z+^Srdm{s>`Izj*+P;0$pZ@#N;XyXnQ4mlgqv*6&PLqJUn&*QEFQ^Rx&dfAV`4V@Mxf*){2gm!X2pLGw9aimL!^T0gh(X#Ik$Aty-tiaAPGk( zPhb9lyHfKi8Oc^iy9)GM`QUI~cH)M)T4mrWcM(qE$x#>*Hz9*yT6^QTSreMpH4Cqh z0AETaq~eYB8IVF5PhZnG9k~(h_Dygxa3ixhZ8Y=bgS!Yi)T;GM+OyOI8fm-k?UQq_ zUE^^JncK3%+c_xDBQ0qH%%Km@W+>jEppbIo9tzP9cU!wL!^qP$yq`2|%ZHaF`&l3IF(3A{le5$9_RzH7x3YHj_;yaVY@6JvzKziJ zIWTjwix}w^S%`DRb&UXj3fLc;$+YhPx271@Hw^UCWat zbciOAA*n~u`E){z9s+H;6|}K2Vg4r& zXw)z(7g|Wu3XGt|#Jlm5x)Llx+h}4enz7!B$r)&6eWtLb9;fub)$}SzWQR78fZ)2& zGV!Er91v7BCv6D=ET;fRrH`$6YQx?1_0<{M_BKHVC@<4L_)^9}cj)kvA{S8G^~A=m zxXgyKsf#Xf+g6kUq1=?7y8vm)Jxf|p4rskj@BVx5JH79|t+yrb{PJzV%POpWBz@(E z2VH;TgL=kWEu->|dnU7lw8`xTuO1_@IBs5*lbY^BfGi31WqQ70yW_SDy{cG+2q!sBi0aQk9?gM!sddq8t0CP=aP zlA6J#q%-}U8jkTfTu3FaR`j_zUG{AI$A0=(|M*W|d)o&+<>KUGPrp!P!-PiLY|eKV z2lt=8G1Ynl)f#NuM0LR{_ta_;N z+C0t0E8GiE73!!Fi-V+wT`$LHZF5Y#GFAeE#?;$N&?9Xu<(d- z*;W?3;bah*B_RYDffT!}0=tS5du7<_m~JCZ%DdIOhH(Z*9fq8MC;+c@9u{fhTp{lh za3Y8Y;j6_fJADy$@&i;I4n)ZoOdf+YM;_D0aPYC~)7!!JVE_F$f6Zt7!Y}^EYbO^+ z2b*eqkYqpBu9I!EJ3oKOtq=Vl|Lw0{{{Q^y7k$nrpPpVjJUFZ_O?3p#X;_sn$N_Za zg@eu7_*N?O#ip_(NzvR~)2Yc2Cd-3mX2>8uXN{)a<7%(&!It^5)iPRK@3T5rKV zXAm)FbO6apGT77MXHlY~7*f4_p;w{A4Fi{O?1V+|+_wNksIkV=2W{`&FDy@B?(q(g zQL$_%f{YbF2junV+s(q{Xi)1m+s!-gdEk8?{jd*v-+%aycfIG}V6&cNg=~6X;)VxZ z{iD~u?X_>Y`-U5@!&SaHoVN0XUWbUGXU@to8;deUSgS#LwD5L*q1m4bJe~DF0w9?<A{`|FH^}^>o`5!#y;^Ja&L@Au^b-)qA2^&Kq z2?MF2W8!$}@%1+7hk_!-={`ZEX?b=1r1BxeJKztH5`yzO5M`{i6^5lGTszE8^1@6V zt-<)K%OxOVh=x3w6DZvT1ul3k_Fa?_0U?i#u0QI;YoQ>DnVCZvTXc9w(5~_`x8;P% z+?gx_5fNG$bsNwu+AODD*;+KNlggM#cv2rOfZ3otuJH|`@b{!@tZ5CJduc^u=u96} ze>q4Dd7ayocBebHVgzeg(&#-(*f{kzhKAN38jDocv^u36@T3U$CY~#w2Iga$of1id zXu*zb+jbXck9*`TFZzn-e#>{i^06QM{>uX=6?Q~JC-ary@0J@L|L7n1-k*EUvp@3D zH(z%VeN*LtST2_elV*z#QT_6_mC9{G=|Ced4ywl8oO`^2(3A+y1G^TuLL$RXPSlef zt}zc-a34k3PMH}_Sdh_)rV=YCDShwof4NX=JBOvJi;^j<#h+OKpC|N?vUDWW+Q2z9 z_Q!1#*aIn&q0b-nd*ib^&g7b^r;lb7b(Cgp3-Ey$qe9I5s{_QXO`I~OO{$f30)T%U*hFEPZLMI|}MxC|V ztRtc3^U-k63yWaPkf`E3sp1n>=O6eRZC_->wN~J*-NT9~$Y~*}WxA>~LKPa7dcnii z1Vn3_=B43z|6K@{^Ld@;@wGY}mUI7rwp<(|8PNI;HmtMiRWq2wn49**SlPCYRdZwx z(lQ~J%~NW7p|@!OF7N>_DrJjmvKz><$|Mcp)utR!b_QD;=P&$iy~75wB8F4|<9Y}l z6^d4SCGiKnGbR2)R5yS-E==bZYM)LaVMeS^U~f?qOOV0>e}Zzr2Q@LDX#^Ef#K^|< zygs6@BzW`kAN$4E-F5F{-tS2#XAf+Wo~;?ai`DMd=53pH`kvEATs`{y&;KMWW#0`h z1*cCB!5}_5^Ct|7C}aZl@W)*BoGw!ZQ&>a-9V7-ceNq6|o*-tHkG4Z1Sm?Gxo}mf(R}ca=Eo#fjm9jsC-67wHYvtG7zG!@4b{TTUvO~*uaF-5EAj35j*-qb+7Hkk9|3(g zSufHOtU-&c>*!PL!VgME6^VPT#wvJs?7q@FDM^i3Xp6Z_$c+=snjnNY4X^UoWR6SpX<>90HUE zt~v(t33rK=X-YVw!R@3RcQ6yBT;t^FrcoFMNLaJ!B1Gs~O@4LTduFgBjyVshN%Y?}IGa+RY1vmVL?FYdY^*0nzJ-r}nJk?ELKPbpPM( z?DYKf^y2jF^xDb(=MUU}YNr>?H+|wjOZNJTyh_boUOB4nxYl7}4gqtll||wRVZ!9? zlMyF4Prz0B>f);s3C>$oIR#w!g3Xx#B(c|ovTR%)Lfrl*7t6ADuO0h3$yc?QeaE+A?32yX)4GkU=yS1GOp`(PJlWsh! zQ*{;e8F0zLa02Tfk6wSTU0^xsQ2P)k<1tpIO_5$RQmVhoH=0-Pncg6 z1&z^f*{W?xjt6_FbZOmipn82ZkD!xyNJu7Y)pc>{-PHSri=SB>7Nvl;7KZi1!=pd@ zn>$|mBd>bclOMa+{>{2Gn4{Xo(z42CiG!n~yZ-Kt&;QI%c*^4+eR6VwZF%wp#L^+i zqkC;q{-Rn_c@Ui|hya~XVG+p*q)RUwsuCW6Z_e9*$P_WdrW8h&1fsheLLZVm;iGBy zllcgW7x|sA5hs0?-WVOVARcSOIrTsdciyRf5&kM)@|^jJS`;S5g~z z926B;I0IcYugbN?Zh8#qRJx~lSZL6q0mgUmYoWF>BBDS7Dw)P$Nj8#eU@}Isgs1x0 z;7Sz*?eUQlD5vIDnWf>8rWG1v1}qKw##e^4Gx!$ra%T9@q^C~fcRFH-A%Bka5E(_6 zD{@BZ7zs3zA2Wb$KgH9ti(7BL;Ysoz^8CD2SzJYp7Y|%}PNfx6kiXkv**rdBdA7PsuOu!A) z%N=IWK*hLVN@Uh4JEmV`BQd4|^}@qt9|48S1nZ`*R9oMlane|5@1`RwG0norFvKV8 z)0;|FYktuSq)6>5d7#d>ik@@*Nrd);Y8#%qV{Gr2jCR|$`#+nu*={xm+wH;j;4pa- zEY+$#NU=$@@u=oCfpJF=4FEgCTul=oC(K>+st%Z55Zp|lV-gk*r)@f@v7%>;i=A^5 z1_v>a79*W2vN~cW#@b~KRppJyusp$_Cdxd37*S)K3RQg@#Za*ZfwI|_564kNWDBAS z@ypv_L0p8-WwYf(*e#^&4m}u*VW@0?X3pqUITC7v9C59Z=LL|dqYXXd9Mp$UC}*A* zzBHnibbkFvCI)yp8Gx+-m#_hUgt!LaiOewv7`@f$??mcNYCTQ_GeYY=A_2b9dF$0$!GxFP#x*{=#&cP#Wz%5>Au?4V_tQ zMs5_J%U*+AM*^&s#*t&ff1?7Hc!?**;`%}bENSVzES!+DKds0S3LxPbrfp zoeAl}FkpNMD{cZ)SEKcrXjOnC;HGBoP_xkm zO;fO73fk+GMH3E(d~q2N^?=_5!b~5FHG6%BQz_M+OvRwMR^eARuGnSOMTpha_z^=? zYEB~p2$q~RHOMFb;4%d6TRRRSbWGSn=ar!rAgOJ7&U7e0U{RgvCFvw?n*abH07*na zRQOK_StouA1P~dOcGcF&W{BHtOl2goqj z8b@La+kpD~K?BejP1vPn=bl=K(M{`U@)@{E6}2uzrEFC&QI3{*HqXXZ`Qr@9dt!5^ zfEXUCIe^m(0!-bQ`bW^{)X>R~P4TTpEUYo@8BrHp{BAM<{!`rnP@dvLK{}T<6sU5A z;Tw$+aZsxvi&~1^t{)#>`HlbZhp+y3e|YN?9(8eczNrr@HxgMx+ZVt7=&slN-M7Bz z`8Qs7Wp}Z7p9dQn>yQa=R-Rr!_H`+BJ>V#FlgK26%av99+e>?h7My;R&P)JE@HdbH z8h~WYjcu$`k~*)87pFCFLh1BbT5FG%E$bJZ+}>d_%)s#*2cXu6vf9X)Q}Rq6&prqb3MWuh zgb2PH%yf-43rNo=DsN13fq6lLfbI2ZML9=4K?@V~F!G8+F?_Juk^*}T(ae*%IU_YO zxEctwqdaq$c{ztius2Nw$mN~>woEaPF4{}J{R{4Y+g)Yct$HRIVpwVF3(HXeSfJC=+zf zjNw4N1)nyVj9tQLpC!E9Ga&#Ki44jO_GV<4@K+^FsnK$Ae4RbUE3g#y4b1`Xw< zZ>wRCF=rv<8ndrCk;Y->M~QNWm`VAuR{TR!W@d+MsqsW}WhyWVY2dn0du_MR7rrrt|z#btXqLk_VK~cM=Dq;ky6vj zkk%dT>``V&cWVPtQPkv%Q~unLt~ZrI4c|~6gYwS0I-DD#j#uy@4`aj1Y?xOLrOuv} zz!B9{LXgl!$;)_Lk0?n3sj3eg^l&XSUq{qUOy2YiB82l(joO^;aGltq+_+M;`e3m; zEgxi_xxQ;BXJ7LzKlY&89=>KDBb(k(8=RL9y zP8ANQ_i*Tvnj2Bn`K2U|^5>7Oz#WxXQ5B{wXL1pfM&^DRfpgkiRr%t)ylm1Wc`y9QI|VXhTKL{1nBosVMm2SmVE zkA$ExN+%y0ILl-@)WSTH3lhiXz=%%-|(@d7$b`XU*?gcgunOpgv6v7{p-u^1GD zHY-7d@Y@iQh4e)_LwA8)ml2C$zZaVUZfM{L-bPE8dBILx5#VgbW{&b@;9`bE9oLb# zBgHiw2xDb|1C2N(hfVw(L}P)75y6U4G@C}CrC~m|$rXh$Z(nS>E=f^%UHlV%v(?P` zWG{|kBy}nkX~1DFExCuo9`R6Ui!d^Rh+bnVYbP-sUW!RV${C+8w@Hy{F_)v=*MByv)9WaWN4g9dqfS=J)Hv05{c_}%mz*3K{V)?p`(I$MihAjb0*f!# zrBU&|GQh4geOpM(iK}3FeT}YOxnu#&{j#Zb$lL|_PK$9&7NXZkh(}-qC)cex# zgs3iFs}=GT6;!1Z3Rw+$ONq{uAD07caYI%W3yf9hoc#8CF4c>5sct>LFk}#7zT{}351AHijmC< z7hfW7@CX~c#;^k8w$_+?U;_1A1QXic3nN|O>Xv?wJ{z)+kQc+aGW_jmtH}?bXRg83 zhK-ZTdLMj4ck_r^7P=Cg%g&bn3BS1X)yAyMo-#!L0x5 zU?}jYOfuzzP>8^6nT->|=B$v{#cF2C3KT>{jMq}foImhFDHQ4{=yqDBk_?^h1<&rj z$;o}?SG?e1Z8d+_E{xGx&KPiH39c3K-77bu%ht=LA_ zT#8K=99MkpOgGVDklnJXl7{QE^^#5IQMA-tYaL>OlEVY6PutXZ*V0x%F)#LVTp3XM zB)mte!i^0FE8hTSuwR7@w7804iZWMs^nEFD1zmQP3mKT1^X}H#InUae-EKKLI{K5p ze8Z3Z=)Zl~lb^V|xH#BuL61Z=cm43n!CkL=)2DpOM}G20f564r*>-JSM;xNZx5=iA z@p-APrh!Tg%!rC~r=pGH z#U^E_pe4{9kMD*w;Ftqjh2XY|g$1TaO(VkaY@}9YOokE?t{hdl!t;S$V>$y29W~Uh z4;GK2;~ooDD^YAFYDRthh=kO|fSgWN;ge&v13ZYUmioXO$&G9@h96=^e=? zo{nkgxzlw)56|9xiA_9GQ<>64u6)b@4>$qO-&13bu&QRSVRiceO}$&Z6EG zI6s!kRhNgNyeW{p8McpY;rvsldx04U#8EU;Hw#ugS2RPZ7Bf0X<86WXVQF*TP(b^-q4dfPtI>4x-aFvsrnC^aI!hsQS@SCYJ|V|5xtJKmg}UL1S-u5bRl^~ak! z@})czbzbLtXuDd_;826BR#*~f0d|QVjO=X57b32AwHQx_wQ8ut@0m?exVBLT@x)*& zz3GE)#K>^)hEnHh8$77Tlt zq)H?$j;B>_GMo6-2!qDCzF~Cu4Y^Y#v!ijScwrfsBo|mCk`0D3z-|Fp9*dYp57DBu zXsjnNN7*N?DHI7#ayS33f{**07_gecv~<2p0G25(l18!@dNF(-^WCZHB5bzmDqRK6JL z8~roFU?nL8)dn>RTEZwgE>U>+_)dFX5ftQXDCHwMqvX{8j!O!33~Mon#teYUjHTJNnknFS0Fr%}qQ)ZL3~--^T=rb5H%2G?t12e29Ug^B0)E@U3FkZqbM8^=q8(n2JJC{{8It+JQK2_f+ z$Vj(VlO5p*9u`^QG2JxYhumhx^nTFGg`Q-Gf(!;9PdTn;L z%a5ao%7631HNVt)JPb(#t4vGPx7BI03@jRxnMkmy>~9JhY%qfCMpk>=xy6%XSXmHu z7`)bwAJ1$rGz)X;F_>@$2F_)gD2W)}q$h&7&dq`Rzitf^`Q&WrnYF4m zb{}G1{=Czeu{UM9pZ+fT_UP#6Ui~{i|LcEv>ysaQ_P|-7)jS%YM{X5wkG60B%R655 z#h?1PN8fUG?X=L(k+Kc$vk7l%s62|TCJRA$MRu_Jq)?>*18Lxg2|%PK15^hd!TXcF zB1_PfSFdHRrv*!du*Abv1$iO0h=R_4JI$$2*feJSGrms)vv=%?|8=f~IP-FpR+iw}|y#p9q}tC-PaQ6$fxSV*zUKye-MyCnhQpsP_;?!7J3yvA-iy&?g{@ z0*j&r@cjiYaS>acwc9b1ZopXh130mHBx^_)&RL8!a z<(rP17@8Ll&%#Vc9-TE1FiFWrXJ=_a^r4!g6~{0}lWtsX5;`+&EVdw(gCghVQ`8-< zv&EM#l^%B}P%{+UO-WCRGdUJ=nWc#H#=!UomXfKUh666r)?i#h8x-baMn&n@{d{AG zg5n?LE<62eNE?R=0lSdulsIi{GdSH+9hYT~03(o1&`)iEOJ12U8OQpb4(-K-IJglP zbp_ga!3fa)crb2<3D*!9t~ZGSBE&~o72R{RP9uYhaEi9xQr$n{_x41+jlh9R)Zh(K z`4yKQl2a_R!g>yd<5j+z#RYrYJUBRb=e_rT-M9VtL!bDVWp}ZE%YkhRa=b39h}dqn z_uP5U2R!xGumAGrpYN9K(Lv?K&E{NAtqT^{;nQ8^hh<4l3}o!xKp7&CHs}gA~W%)7ViupY(Ab{HDKoQkJ3$sh)wB7*faG9JJ#)2idM5FT&! z#Dno!mA*nRCarb8GT3%$uI(QWz%02A9a|+#@ql8%-_uS&P%hU-k*#BwGDo zB&d~&qKg-N1tDkb14dheG7DNbG6ik}Kt|dW% zp8+{w9_S|9`WT;lPYBN@ZG@b}MT?Z6(1u>x>3Rbpm6X0L65snu$fR~=<8IZc{_R=h zrXxNL+a27G(u}bX#JK@Xjy6Zmwe6lzww^4>ubD6I(GlS;@ z$xuT@!vN{w;W%||qH%F1E0};6kbnrQoG-KiHR@RkZuWiO@g-L-PR>rwHd~`ZD=b5G z;K6otasBmQ^Yt&=|8~RX5k|Sf0W`BwvO=9ev9*s3R}IDImyE@V0ahig^`DO9c&$Gx z)2I>Uhhb&o*n7Q>l^smRPSH7+u7vD7npDxwB?aYs)(0%br;w&w_fqPd02GZOfJ6v? z$;GPCN|T~gBt$TEWn3XnS_Ueca};)o>Q8j0RUb(J*0>I9oQ7%Rs+hb1)=Bu*a}a&WN>~^v z6C5<+@&`N;5EIHb#21xna>~1T-SU+$%FU*jvCb$fjz74bIrvh=rC@@G^Cu2qgGbcy za}%dB#GG7+2yP7l@m2@i=Utd4FbQZi8P+;evWqSfF1MSTM98RVQ+;cwW zL(eakO}2kqGJ@qs5DkqJWE%aF(>MM*QuI@9OHsU(Qvxjw!EBL8b-6*Vc!5X|OK8Yp z;9=AAu*yN7;uxv|cf1Wqi-C362T(jnH)%p9YNg_6WEw-+`%%zan{~lnOEfxWL&D3D z1CFN=Ztc6R>c$KCqkFZ_(V{_L;Y z(NSNVw_RKD|JGVRIeqk#Zu`Ce@w$Kg{jb~{9WF?fn{gv3Xi_x}pSJnh;9fK?Q}TQO zxq;2Hf^5*hfU5w4cjw~5x0^B+&Z$>>L4968rxgjMrj`#P45XxaI4}mW%sH<2-42vp zpPVm-WlBnrPtNsucpPe z*AQnxEwdc?Afb&;PN4nhE6~5p!NwpQ@(YL#7IN@c#Ni zAH2ycKMa9%+)S5L#U1BS0_JZWf;r~A-F5DOeg?Xg+|!rC!_7VK zIr-;b{exE@^T@M{zR8y7fs5ty>#TCWcJIlFDXeAxx<9!P6&> zc&gO6!`K?IrIrbu-!)#RaRgl-^~|x!fugtc1>B(<+jSXu_{LagnD8)9SohO7vO~t<8x!ECtnG7gtrypVtOz5;bq_$3-8p6VRNPaV@1;L z(Q_J~)2m{=7mJX?@Zq>~Tu$f5q)`Yc0ymPO4i=D?jK}HoAr+(yZOqJqy?K+7Uy$G#@gm z`Iq8RJRlgs3C(}7p~u|k`hx9dZ)LkL|H^;*;ZJ|+y>Gtz;3zv%Gks9St@Uq^}18$OfmIV|bmlO+c9&vhl)>>VU ze3@9(+W zB3z5^^!ZNQqVlu2Q}{OgIrajuFaRL>$*JKVjg#Q#r7)@*EgZMn(;7n69P0XFNMfuZ z5gQ?K@B~->+5w*R21H=NvCFpyg8`R|u^}xSIEbJ*xP$<@>r#1;?hMD%l(4`fw@yL@ zhcHE~m|MjTOaNj*v~dBlLk9;B6RHoBrPnGb6ft^vqYDk=$scsaiQtJt@_;ZBZ5{>W z(%B#|#U9O>@bM6E@EuHvDm$AX#soYJL@Pb%bvnZH-mg14_||{*&;4z8E_JcdNYAty z!qWS}@pifK!Jqqu-*uig(}&Ws;jRfJabC2Y-6|tHCZ2=dEDt` zQZmc|8s-do3~U7kMI#$~yXocT?6^(K=un3IlUuf|AAu{#PuMuSCDhy-2bF#qX<)=q}eWSD;{+JI*8~52dj|Re)RwQ1=%S)^YI$skTIiYa;8NsX8wEGgdh0)%5SbsF z!Q66UJYZ;ykz=X@M$P1(qa1RC94-dR8Eink9kB|xHZAi}1lftm;?V{5WjqW%I@onV z=lO0qK0N%HU-|tX`RQMI>{B0i_Q1)esr6tX`g*P2_UOtxUjOC~`M~%8($D>0FV4>o z4^T#uu!n#JyoCwk@*3%~o6&>Y90N7@TV;yYQR$9MI-p5&inuUm&Zp@IWyphQz+lE? z1Evm)hBg|aWH>>LZ0L+Q-8&q@byo#WJ{7{1WQ?E(kF)dt= zEFZzKLzMiiVckLVLZrznyg~h3_{!|Lv%^d<6~=kX%{z9Dpb|sf2oCk3+P4~#HC#Ly zxL8p!HpUS&>6(@{MVWP;Vh%&B7TRG6sawr~HtjV1{OWMKIX^pn*8lSK&->ixzTTC`p1$jP-^AN$BZ`Rg}+L_SF@a3 zu${VA*)evU@(fV67z**cmf+CJql;%!{LVNu)wOR8)~0J!KuYl#D)c}O*A!uEH)cNy1dn^BSJMO zHpDQI&JF<=>uMRIGUq?R7^hZMlypfLnp@qZVSP`q6aWAq07*naRB+#!m@eIfcB$s9 zP4gbhELC-?OIg$U73*6&_Gb7_W|{_JM)HW+9{K?*u&>^f_<%avIy&ta9yLd_cZvKJ zei40?ac0cqL`h?og6v5krawZnOB*Rs=SV|}ODJ=wX_io3hCgo0frz%z^tA|0XF)%e z*XXVFI@%D6p@1tu6gY`7PL#rS(xgB-7C_1F8Pt8MBF8QJ_76I66GI``!0_!#DrPL!SD?#g|5~7wYdnbF*p7+4;o- z*IxcTUzSW|C}hpZd9oLMvSVO<)qM@_LDRwQ4I$kaH zDlcnO8h`_aDqwIuB!Uw6!Qj_bSDf{eAXLOVM-dE^H?`Fno&=YRM2|L4)s;l)zdurqpOtSZC8(u04% zi$b62f=#2D5uIwCSRnhGbDBY_&IiPl!_^D9l|lz(dOPioV-r{6t_od4vza~TxqBZF zRRG)O91(|aq^rX$pgf#ELz8t=wuhSOt869>8))t+LHIzqeu|2ocwSVTSQx{n^5 z3Ra}r2{&US#(QK8TIR~mck2?MrDwV>N>x-b7&w55UvdHPk!0}TKs%mTDSJu*mf7>< zQ^4hN<@gaRm7*)g81~<6;Pg>c;W7vW`hn=OZjys~G}bEvyhOCsN`PpN7)Ut+1v{kK z^mgcpvaSj0L-6|zR~u^Md~PU`1&s`!mTx<<-B{HH7yKpt(w_w4i4Y? zSFeBZmptzS-}i}Ur)O=unRs7tR!r;EkG*V_){B?3Ujc;497|^7=!lF?jkyuYi_2Vj zcLsy%WP2&nfN0QmQxs9hrURla5jB3CPs3wo%tlz(>2(5mc_-CJpohLF{bVLjF*D$4^U z<3>_Wp^NF3XkowJxJ)yrz#$k|Khed52Nx&kArP9Dtd^$6KsiHkiT4HITq83kX`s|N zYe+p?C%bNIq)jxAZyqo(3WMN}o%~n&CaRo_V7qC&`!L5=QQvy^OzR6mR7U;9d}W}h znqIATNw1I3m4YB#z}y9(y;q86-C$YyQ(uOayA+x6HN4R}UN-)Xa$p7|+~lS5pzKQ+ zou&4(m?{Z+w)MwIMzKU#V+-3uYvkrGGc+N&0TJve07vAXP zhRhu*#YK)W#+qm=5oMc@U7a4@<)_al%9xGe8aqQNKAoAC7!nEu=9;bz&?aCz!tL52 zZMZSA3`{syE)d1F$zgd13&f>r4d>t7w#H`x;x^me*~Q`E(NDheH-G&%|KRaYz3t-U zbdx0)a5PyjyH|vxtH*c0_3mdp{qf)awV$)wE!%B2Ds>tayn8_TgE*iRMiTZAa&eIi z1r78l1COAY(AS}H*wJmKWC4{Ah)gb%uOr`}dPB+O;E_k-R#lx>a;<|)UzBrcL^ym# z_46$dgj4hZt5fEK(*oC^!;_zlEF24CpvDY3Z7lz#1y?jf#H}<40CYf$zYjhk=>qKR zHKI~|<4JfOl@4w$#)w!3I@YK2K8Nr*$rJFj@K*>wJy>-NGbyTOvIED+OE*cRa$XtR3#R& z49y#%q|@kNuUwS^?;Qdw;=k7m57F^IJR zAaKgsh#_5jk3;c-jxuD`zCpC$tiuXF-&OB(0D1mtYlTc>gL1UgZ0J6bH3Y^zrp)V` z6vu2tr0ch63{_sc)YNgVMMDQU@si5 z4Pn@xs_XzW>-Uu^TlV8=ICL}PPZ)uxW|qgsCVmZpWgFY5M)T=-)`Ub6xwQ927B#^u za~n|{E}vF~qtU9eJs;-1`aZa^SA1Q6NH3@aI)*C0UHZvHa4|91aBIQ@r^^Ko7`~or zP-j;S{o>ZIwk8h<0=NFsz2lOXj3J|zNvU^yB8;7OEZ*!o;m%wwb8>uvJCPfEH*jh| zD%R5GL>jR@gJyg>?U=v` z^c=q*w*Q~KH;=dNs>(#im}~ESntRibkPt#>LTCk~k+P|uSQeIOm4)&|5kXKv5YPmo zASgzq2?`>hG-CM>o_(PrqE9WmvMABgLQsoddIN+uffe!n?B?`(|sHwr1D&1DRFU$yOa8hHh2-ptE;1aZwz|yUw0v64B z)~!d5gfHU%(jWmhBMiea$5vp^ND+O>>EIFjIjFQ033lLkoVzgCg?*);Y?3FuV5S(q z!Bh!%%HfBV&6G zdJ4&<`_8=cj0Q?$eRVsQ#BZ+#wD6Ic(MT)84fX+4ol6R19%S5{aOioB117u}4{uYq zZ;6BaYPBBEDeZ_RT(_?2st6Uv7a>4lYdeEttyL&Ic)e>vjn;nx0U_U021+4^jD}jf za@(TzSm37AzSKhQC{R`iJ?u^oyKkek&!QtpQB-#~4~98>da_WOt}IIVX8m08N8=DS z7^1RIR$L~?;^GY71I&x{JLF~@KRT$zp&92&R54a%XjJk@igdRekP^*SA90Ko4w z^dJW7dkAXnC5{H+h#T=)G?9p;K^g2I*&)gZ5e>G>f1S<>17zVD1Nx}U%+rf%FK~fY z@tL%YA;O3&(N_CGZZv99vJ<6jixHR;D%>(=^d_cfk z((^un04DRZbFewYSnX<1gr|mM=nPqaY2d3RLmr@zG<)2+n(7T;^Fv>ei0Mu%*$O4s z_*cu#i|sZz+Ll4;+RlZ`RbQG{qWN_)s`%8Ef(;G6oExq zA8#(Z?>(OR>{q?*-5*@FLX9yG#e_U)kFi0v#$13*JmoIY+X3vw4~#a&=xdR2%v74s z$Or`=)Tx-zC%{S(JE^*K*Am2IB>)NOb5??|bu7_*lJzYU$zOFCQek(-8Qm1>eweB{ zNRL}3Bhy7VtHif-^aOI{tqzJYYA7gptkTW)`!9;I1`@*f*~IXY-v?& zKJRcPoLm+Ca{L+WytB2^QDHIs>0A)Cd# z;62bh=kw@dG6WE$L|e6xaYk|J6I%ON&NwmIeG+i0U@Qh&;}XfvQH~B1|CeF0``qha z^LPLFfy=MD!{*>1@^~SsW8h`A-QC?!eBj0}zQ4Dc-`1h!aW} zR@ctUgovKAWMaZBNu>FaJP{H+YR$>bC5C69iwa8nN=fTmmWDlczT{S7py<#kw8GiJ zLzGdgkXRKuSJEMgyC-=ZFeoNDo_5O;KT}#5{JiH0{G*j`&QZ$TN6ZvpMkyF>%c%amiK&;A z{>sAd*jGw}F(MiXc+e~^C!$=Pbx0>xBtdOri^Xtobo7-Eyw|ng`|umy@&29j_BXQi zvj(&mq4wjr*xgy5f5DTle#tGz$AgxNn-DDtKuIa;$3MEhQJ=aUQ?7gLyC%l5k(mVN zg)d>f9X{o{R|17Nky4P6lhW`T+(=?I*qgFpqOVdc^&kKOgl}WmOf%cgb<#OmD8z79Nzt+4-4UkTXprHQ|)&7FWmM(BuBFv!k&o(u$ zy!AimX2rmChgWD{N5-IY6qEK}adtQ|bf8N$0Rp3ga?te6ZhMw40v-E(G-dFr692*E z5nu}8of%6_gIy$c5GMg}*g=LMgJh-OCiEW#@a2ID;}TouI1sENgqJ=Gh68)lGFG2X zlhFpvRBj>}yF05l{J(E`-iv?zcK5yO(b==2L#;J2E)GCVZ`~ZNSLcpi{|i5|@(QAb z!l;34gq9fhhTGN&2))6O9dHAq;ly6KMh1`ua!_fKFd()eT&W(G4f&+WP4=MO6YV}o zX0HIForBD5n$IIXW;qDr4SYgj%}`Ii^-ZSTdjKKVn-Up>W{w zrI!lh6KtrIeuU&p@#=`XfLWxpF&sr2SMo80ay=m)N^qX(ZT{Ka8OFN(sULm(m)!mK zpZf48c6L@{>#GCZ0K-`>w#VyB?tIzbz3ZdbT>H{txr_(#Vh6}?{4kH>XGTIu#sMhv zme?fug!`oS6k|wwm*UjhaKQRfb?v1B2*YPwjTi<%B*Xz}ImO9=>PKoK+8!sdQvMlP zH=+5?MWnZEJz~lAr^@8VA|5uh&YUCYnM;T=(o*0n8>dyV(v`@xTA#_dk3n04 zT1=!V`VtJDNhlI`yh&kd!3XS7d}JW}ff1_9lUz7UtbWH|`{`;?77jE+98L8KbpB^>Znb z3PpkU#TooKs~aZlKZ#}Tbz4>)J_4u`A7^8FwA*i){3=_U8PGCn^k z#2^Tqg@-Z;?*88LAfv~LBK>I@Zt^co9_OOj66XMDW})pe&azlElYM48uBefY<9a;W{$yBA?TL4B z6)!&U?0jt&>D110xte}_u&x`6>`IKLZnop}#fxsWFT0C2mO&9HudVg+L`P1YK3&Uj zZadME47z3Z%6Z3V7c3{=xRmqvWYO*~@y@ob2XIvNF7|hHXEpu(rgO)Bk1Q93R@M;Y zH8;# z2i@z3uX*@(y=Mzf^zxHI z!F{EEHAd0@3F=0ErpT*KJM&f(>W95&TDJn3(Ct!dqG&B>^+Oh@lAK zQ%?}Je50lZo~r|SAkoR6!nrmln9LwidX*yVQdRQJoj-&|&N751oi#ZHg81hk(HJkh zDq@r{c*tqDza39FxU>7R*SzW4pZLWq?|-+Wvj;FzB~I~qE~DC_=!BS?4}auO-uRLS z-tQjA$H%M1{6ra?K0`S=IzF`+uDD=z z%Ryb@#!=6dw7-`9z12r=I(ujn(y`c^x`WvBKI&z>zSzp!#>0rcwK zP)?oRzwv1M*)zACKDFz;wPLxND?jm!?eX?bmt3%(oIh{((0WdeV*o~LcQLk$M|Tzr z-Cch0vuE~Bt$ms?Vme$Hma;CFx8!WX{M+BrAHlicXmF%9d9~Z@9!== zE@LHD)urvs%?EeB_|!zG*T?IoUc)lCKXNh)Kbaf8(q!Lv_ID1p@|m-T`=@rcwGN7q z;bhd8%W`;de0o(bSgkgjwJUn#T`hDp6oJh7ajmkLsH8P^X1W?a^qE`EJ8xeZZgu}? zoVMuTXmfh8xb)O;aBl6#erlM)(n3Z~S}hw~s&~?M(lxEqj(+r}gVPgz8G(S4ux=;L zxv;}CN4LAxG{*7pa69;+Y^|+`a@x{GV@vK7m&Ii7FFL*ZxJP~cqrdrU+9{t%(hBQ4 zLfH&OOVWKXM1Mn{vYFn|@#fU2{b&Ege|o{M{^3>kyz=neal*^=f!)*lAO6Sp{nWLO ze8$rrb#QQQwOU2=gEyHa2In7jsqkgmu2*||Pkq+Qf9{ul|H?1F_xjusuCaFjS3`VT zrwJd`gOA?ucYpHod))PooAt4lym}`iHVu%9@}Kw-pcX%JB&{=qf)T{NX>?eU$)y=%pPU3^Eh>4*ER5adk|WEt z2h(D;o09trs|G>|gFAyg5>ydk!(=s~_T|=@*mo7~@_Q1r zl&|nlR0gf6DqqNJu+v;&(o=zRU%967jmlqiPH12FphOi`6U7tTy`jpP2mjUP5$^8p z92_3M=Y}(WhPF2AR|cE~)}e0e;`IKq(THA#KJEOt8PD5U9;`PXIP;lyuJNd}s)dOw zK#2#t>1^3q?(grlQaXpyupSeinDA(^yZpc>KHZdVZ1-iCxErbr{_kn6mXS}IT;_?d zMCFcqu*F^33C`@i)4S&m56_%Ch)arM`+N(X{=NaSoczb>iyX_2!!L7jFvZP?GjoSrq!w4ov4mf=1`nX>4g`b z{`lw5Xj_PO=yR-Fs2fnNRgMmETa^2+_2_UYi@j5)rfphewNL{s-PCE=J7PS)7C@1s>Q%qvAA-MR+i?5>>R$#{;qQ%)T;Q7_i_8ph^Xrmr4ko zWlaL$C^#+0a@=kvlJTp*{b#TIr8iyqfP1aa9yQ5@<77mpHp<0v_v3H>U$1%j(m?7@KLoLHyC3;aO#6H>z9X4 zCzeNf;q4ln8$683lRlVCR#*ynyq2~hln+fVLtjosqP(;fSvEPL)w1*!vUHxJ&LP z;ak&A<}R6VI}J@iAY754;;9Oqg;iu0wx_Sj<5VP8!iZb8q=X zkF6_WBYZgdRaemP=z3Np3}EC95t_-%Vfg?6AOJ~3K~#${1}~{3X|(xXbiyPExFw(C zHb}q9gZhJ`JQRFH{;+E4F1G*vl~+CUfnW86GdJFJ`l3^HgGgv_uvpCX;n5|R-RAxO z{NX2j-;3VxE6;B^m*SZga`~hLpc>Q`mr-{<6if|K2b(b|#7>o$SoJvxB8Hr*2U!Ya zF{rn7D#NAIl-}9yr&y;wOgKzdVqm-e;i0t~u~|>pnSA)76hjG9j8${$CtjQZD~$w8 zOZ;o()zEy$!#|T58_qiwS7f?rXkP9R86>goW*j|(VGMgU*&QaA&UW{A_4K~`VwSkw zgunSVlS$ibH`8Vat;{FWj5Py{+E##R}Wm#P@3n ztZmypTyVv0e&!Xg|I!EE_glW{-yGNNvUS>u{-V^m$V{5_1c1yXTm|iNd~$=|)r#us zD9VjPCzd9j9+nX*XOM|-coUCW7Mt~UXLsiv@B7HpfB2Ob-|bH8aqGhlJ*%3Dhf(%U z?S1H-|NNLo{M*NU+t(f)tyeqCX%=$~v9A9D<{Bm!GUv9W&e3CL{|YUtK~iVWwe&H8 zO-yQNWG3iaNzZ=3NE$2aPFh{MEu1H?hSAMAT4~}rK`93z#8vuiosr-ZAra~F0at-g z%s+=%8>@H`8&3+so-L8mdnc!TlGd3?bHF5kykHJz3L2b7aB9$m^6n&&l5k zis(Q>Gkq0^OSh8FY63KMD_vaUZg(z?r&yX;zFFsHg}c>hBzDh@iE>|rgBzktdVc}f zNWgQ*A_ItsNo1%TdS}s2I+B>tjYPTMglW8&PD6+RZE26YDaos`={vqp>Z~V83HUmL zDiq9&)BtRfg=&OliyR)UZ*$RwuYTFnANHv0PT%V8ZO5WitY*k*g1F(_;n~~X^@`v9 zv$s9(rN46BwU0SGI$SLlnu`Tk0tfcF7bW2_G-4&woGC-b+yoayrlLaw@k5t+$SBt_ zC)@GiB&lG8MTu@bLf7BZK30gFU@k-JPF834h$fs6Xf3uE449f~lpEzIDc6RYxx7_| zzC0e>F1S2e+u*|u-xUR;UeMV*_~xiZ)zh>ltxvoM6Knf3R#bfvdc5-guxQouL=$aTZyIE@RwnHSzWmi~igz~&8L&t&AW`YdpnfqqA=lzahmEb# zLWBx6NE6Cqiz2vJBHO(!tTXqZ4$j^*PdsqY6D-r3PSk21-4-ti^%zossLG~&+RNp} zi~%H9j)n3118E&0w$TNaJptO*#N{!5?z0u0G^b)(;$iU0go+D)J#`hAhql+1xG2I} zPFveq9M7?g_$2)kujUxr?rm%{lwG;}4ljTC>nENu{o7U$TtXki;KbL8U|82*-w9?{ zCN4H0r=|!{MzpoW`Da2ABe*(KTd1Tn2k-d4v$MSU?9sP>=W}k}*}dfSsr7ojbdCl3 z)GBn_+!woxPkj6{mtAn`#V`2&X_=PGp$X+IoFYu@!lxG_6k}FOlM>E86&=XL=fqdx zZdZn44cE3Z*dAG_Y{X0W4h)3IAZP%8i|&3HS*5?EPzspC8WkWJg6N#ds{^8^eUC^a z+V{eSK$|RIsGVcL0G2EPR!uWg$gqf;xV}a?h+IeUavJ49N5r0JmQE^BWJt23(7&s}SW&A~m%fa%jFPMVD zQCj>vsM96zqu8b-|J3f+7~=sr`|cP6F{nvElfl-xWuvggJx&@VBfb3In?l8p=}XD2Hq?xh5aAwz_<`{X%IRmT<*+$A{)T_|WzTrp zqi%THdxz8et+`Oep-v8Ddfjk%czpSN@A_lU{pDYI!=LZ%?oE!e;*V$&Pf6wJmCDE} z3hg^b%UzA4%^5x<;E6#&LcC`W;rhllgr274=2PN7wNC;|f>lW_+G&VCx3y~W!*d8Z zbghz<_OO)(*?@w;UP}&x7Tnjs4-}MUw2Y+HeLlb6a%c^&%_G}>qNBKF%xgB{seWx| zi%`d%W!4ykcwRQ*CGBX1_u`1-jFmUS0@>Pa-MnW*1?NekpF*f%@gRz~Mg<`q}k z$L&Kk+{vN{A(Xx<)uML;Bmx1F5}s-?t_P%rAH*Ux3j)vIrMq}JE)T72$J6KUo;^CZ9_w;3@w+Wty^t61Ea+>=J0^wxN(g`! z2zWb6YuGAHs$Yzr6tst@Pg31IM2$%UKm09E`2L@M&&NJ_>76fMA04-HqVS1u43d&3!Z`~|$W1i{ zh;_pl#}s;KWe!J{uBY;LK4dyVcsnM=Vq14qgB20Cv|lobrU_X3v}h_u0}PaE4=l7L z*o*uYX8}7GGbSAiK4xaL?Z8ABFLY7pNKOOD3DAc64>S#*Xv$5uvp6vUI}to542@;< z!N3LZodOQv0F1SSKFaZKfHHmZ*PnX$0Kr6sE5cb1f$aA43(|RL{iUGAiCDYLvp*IK2#M% zaZyqFsCddOj*5~<$yw3%qld^UmBNUwy$_L#)#2T+R)%@ zEYa2+x2V+!4v1fXrk<1c-lQHhX=c3QP(q|o#4m6yNb5!Ssg|`+lI-@|QKHAF-+>l^ zPc$5~IIoF4D$aAgdFQkg+ZGzA#{M@RLU0*t$0XX=hDcqIRaX>@20ixCOp;hUTv{>! zNl-^O_K3jLZp4b~Vmnb4Zf_~k)TF?y#-5KpQ;&MYDOX(c>e@0!h?qXE!joyLG)4pp z;N{P4qirTJ_ACxe8vwT$lFM0K6m8G8jv^5w>Hu zN6n#_X1G*(Uu7eQL(mm&g@UMLGYP;!c5?!dl8FE*V3nnJHBf_>1s8#;!suDabQ2W> z1R;55ghsgU$!}Dw6ChF(=k>IAGrNbGR;7jHF9O04el(K5Oco%TWiWDINEG0jpg6>j z-1l9d2`LOc1$IXIv~yXG7t(sd5~E6g`q3+Y?gy_}EYI9@X0f{$eYeGZgzB_;0=&tG z*gv(ibNMAt{Qehx@>4fYR?r(O50uK}$t49A(F5Av_)~kGjCOjLoG)2@$pzLlce;#QqFxsW-eNaME;6&yZ@ zA4Vy)c@J|+nr9Fy4r8^D(OBU!L_8$wl)Md8903YN_lwe)W*f?&@PDL4c~p(P3#{}z zP9`%vQQ9H&g|{5~@QQ4vhaYdoVP~;Ddvw7Cr&q%;jtoo!@0f2WC==wJ7?NH%Aef5M z2ytpNRX7$GH7uQ}=YJfxwFi#3o6YX-&Kv&dEzf$+>n^|7RrPo)3zYqa(PVH;hrQ*8 z-tob2{P$n=)F*!P`uJ$I7NC=nv=gE<%n>in>py_;vj~Rt>gx9SLU*4Ic-X4^KFpCjpc&asqmF|T zJqh4a(^KD!30j9Oj633I#hn`E^!+(e!568}dDOxX0jh*yJPP(fX?w6#=rWE;w=XRu zKQEm{A#ko4eh^JDjA&K-tDux5iC1h)Wz<<6`NFvQd<$Y0n0x>in$E^_1c@g_<^fXS z#daB&mzi}{Ron=f8I*2*#dY0CLfdr~(019F`}@M5!!3hd@bslT)!2n`DpY9d&~@I>qj z-o{O=98{K3iFh=-ytk(9hR* zp%EDJ(oXLUHLbE&q(<{_T#jNbwiV9#|_XeFA+Xt=+PnnoLwHitz89hF6GNhPlesmhjPQOMd7Y=cjG8t=luC`HfT z-#I#5uRrp!XTIVY;$b9Ms2-)Z#B-uusD#lI2)r|4`^3tqDh3AqbmuQy+KMDDI+RHq zrfKUo*4575U%&0Wk9_Tbld4sr1Es9v3%FBGy>dAqO%|z-KrV%y_A$Blksq_p z*su-B@$mDWrJ<_!VmPxiZJIhApQ6pjv<2-rZ=x+2Efw&yLD!)Dw(?ot2#jeqjD zzyCXbs<*veS%&clHg6F!pT(3tLIA%3ReuI^4ld(a^HvXPLzo8i0MHT_$~!~Asfb1p zd@R*T{iyWFYwN>VBc>(ppA3S|E5$?FTX#06A8y?@jbMXVc=#R$sj`i322oQPCoaZX z;AO|e#*CMQx(ACWaUctMLqBeS766SqMIgg9bu0*Dlr(CiGnhhXCX6!BAt0v)d`5YGQMC&y8MO&rV2MAU1yhEV!qD0gq9Dw#T-cgFPU$up> z%Iuyyr+gJL>?YPjiLz^p+=Da9wt%d$4ZV-Tof_v{<1X2V#}D3HgeQC5oP@JvbgGJ= zO43Ukjt}cixBT>rpZfJ*{ea`mb}1V5hKiF20k4#DQg{R4@TU&3c|(jly8t#=6|@Y9 zleRNW(^=rhzc4Yn)oS(8PkiPvkAL3&Z7*D%-rpW?N+<@bxli8XIpcOce){wO_nTh4 zzgn)3kB7w&G(dT{AcvXQiqr=!E^$`5s3+O}435lDNuW3-V%_Y`B0q#-5)e=H@N-C8=ibiY4i&Ol zJ9xsv^)Pjs8qM#emnCt$MHyS}@f6L%8NNVaW2O%+1k07as4_~Dbj-uO{>l>h2SZ%k zxQPf$zz%>#PzbO%f)#*C4(A1CC|l)MvWPwuIY~KE56rqOkp<IAB}#tehX{M&S88EO0N7Oq%_x_h&CuaMD8VwEBP`MZ1?dN4 z6CMDFnDnIhiOhG2KsXSBJ%^;&L~+dYR1BS zwqa=CKnWH@qbn_Ae1&RG2~Yxq#EAkIkyg@PqS&Vf;?B2PJ9(Xn7lx3^S5k}$L!=(v znEpO)-}Jhl`1ybP<$v*)f4kTod7LzgO-rsrbXr&K0X97uPnpV@HI65XKdNb$lm4RN`q+ah*wo$k9 zrjhnBVjP6j%_^H#W_)VEdPN>xF5Z2RyaJXjE=6XCe}X10_HvIsSDP$a)T zQ_Vz;Y#Q~LxMUq2Ipf%0*ay!Kr9qIm&)!XTt0ir%)_C6(I^z2rhitx^#90_d^=+*< zOc>{C+IL3h7!ldoHth&1P;B@7^Pl>ZZ@vG0t~%bVm!4i@I7lEfY||->yaw#_OYS53 zqJ+_5@C2_hApi%mZC^zXZ@_K5K$tM|IhJ<3OP=uL>pymIc=1)YUmqR2Y|NM#$e;?%8n}VKB19NrM_L>*iOxPmm{&Dedm;S*bE>liwT$S7TV;Sl zO&*oV7!o2(lch=!0QvW{B+`7D4CvF@O|u2%3VDUD1J66)TizwjGrdZE2&PTY4?J%V zT}XHz+TD5!gbJXFl$-B3t{l$n1*uiMD$NjgxbQDZGwPme(nE|co~xaLP<9|a+I4Rh zI}pAv{|b{OoFiO@Zhts6OCfarB!sQZCkPZ#H6e_wDwmMWE58ZIvJKpx- z@StUd{ftBCN9gh9czwl}-TV3%{__3qb?0w-$X6V#4_2~F{c&zni8?dl14sxStU@mY zAt8l`#^8DOR`a+TMHkA;^~W-3_bJ5^Fwnn-u_XrNuyG=w6WWgo8HLarY_ef4B!kGS za2n@aq&O4fPv$MiS|t-yMEB{ZS}4-l7f@LzyFK%NRoygAbv5TR3J z@(2F8G7AwfY8lXtR~CYw0DZOO+`@CN={IG}gA{_)j4r>?Ep+qZ-#`eVlPSSTPK4i- z5k(R-(me11i@gv=%RFm?imB-*3uDtN?1Ea~Czvi;+1!h?x(mmSbQD} zcOBSn#*5G2|D)e|;g^5)lW+d~ncdU-+WHW*Mv)LTzp2AB@r(2Ca;L{V>H7cj#-H`V z@AYCCl?C(9flH;*r%~(i(U|-fU{;UyCO@@40Z=0}phdhh$B|r^*r}8|p|=u$iew52W0F9& zN{WcBsMO%j5+#x}zR9pYm?b<_MZy`^M^)lyR}RwKY-JNGX?=`Re&wqBu2j1i8++iH@h19mL?k&u-t>foJ$~Z4$FGl% z%P_>bs#s*7jgSTHt!c&yc)NedY@c1+QN|8XuU%=k>v%HPaze zyG(}1YC%O{Aie0uT?;n~O&mL^Kh;99fwSm-wGl`!WO5vY6-4%spso@&aNR!|WX z^~C=~9b90L3DTFf%TFM&m#k)Rj1$agDJLmdSfaO*EnvA-kq8l*QI%O$uqwARl%Vhs zk0Pbi31U1BLv}Dm0XyNhCg|q#UAN0(I66AK`yDTT{cErL#>f2l?me%pi*|(3QP3i* z-nL+&b=;h~aQE})E_vj)Kl{!9^;MT&deQOGkuDYyF^%RA35s2X;O+-0(#WjO?V)L> z5UF-t=X_4?8*HHibJ1?^PQYY;N{zHfhNc9pz;d-E!_T08Gcc3%izC5Tr1KYk zfZMBIAVmhdnT*Q(3fYPPDiN$(AfqGBujh`7CM>Cd^%)PVx71#q(SxlICWz%A4;I3d zZ0mM+wfmx%{pT0GhH@E5E8{1heZ~D|td#0~>`Lp(y%k8*z z7_Ygq{!Fi`?zDiR-auPsEYh|J7csSydXal6Gv9^lk{c_itFGux-$U&9uF45#hr+H2 zar2T@j+47WLBfea`qTk1mO>WW1*e-jAhe+QF-_Ymab2Dp!p?8986p(3=8h3^$yQjL z8Iv_y4zx35exCBwzXM5P065K5XU!C41Hz)FLn+)89i})i49a_UiS8%?c~cA-uVP8> z4E&TU?lWbX-dqZZ)@1+yAOJ~3K~$C8$Im4<6aaJBjB9Ihaia?>2oC^0GWZZDQR&^| zvn3x$>?Z{#rwE}+)il~jaAhp3WMC;50w5Ojk7PuxKcTM`M(n5cnuvM3N~RUVn8Ok$N{ ziD(Z_n0tzAEKS^Y*#8}23aqk(!|Gxbd!V?)Yc9G<#V`u?4B-3Vy5GmwlP)AjvBVkx zG&wOpAd+oC`rL%VQQ5v9$imkeraCu6fG~ruL7Ls83c<6UMx1@spfg6*vHnE=c=WF% zt1#sN1fE|AfirWyha#WPtZd&6u#4;@iWywE;{cd)f zPs%N0rK^+>uNcS-9pO^tuwxf9XkmsMSB=LiyfsO5-7}Ul;PfZ|>3YSVp|C0JjG?)q z<x$<2-I0(h&4T z*ZDS3Yke)K{B22+-Oh1iCW^3fG>{$sLkNkd!kgRyfPHXMXYwGaEU-?*nlej;L9RJB z$wA~llwX9d#lN#}=WOmdS7G!*vKX5Sk(40k)#uoH)A^EtZGe9d%jvyqD02e=lT{@geH}s*$?F}pqGRg;9 zg`|m~FcNdfmC$hWq|wPhks{1!GV6sJ>rX3W38)r@8uK{1W0wCXS}G+9aME4Gl#lAR z3>I@{cBVuSaLk zU2^w3zURizKI}2q9cs>;t?D41*Zd=FG1IHA$jj(U6kFmzhH7gVCfY z-$wz$og1+iFn2oR90!Gh8HQN$l;{L9jv=j~rZ|X_ zJqUh*pgY$4JFsJOObj5O>ycNMGTSUGUenAl&kmwlil5& zKlszXzxoG$_LBSFb^7rz5~<+>VaP@6pvzCa_k*u}<+TsG|J{#{k909a-b&e}2MLjk zF!3B8#Xvh8hQI-2Lj0(DNktL$AU~Urh6@k*SB@A8kV-*`6vEwX<(0gn3u6aypgwVi zPHeO%GftM)pM`5Gv#h%&!H`?1RmI)Ab?xQ>VCdk9{^Zj;*h^ z>;LCf&-|Ky{Y4-6hj;ItcZ%J2yu1GZzqu?H$G4oj-97I5=C{A+ao_iXiH9tfabz&p z*5)8xIB1qJxyt=U0;Zhz^pT8-N+ zK93kXbjoj=+W=%ho4>!|9Upk=lOFLM5C6JW`?**~xT*Rfu}Z?-caD3`cvsA2pz@~$ zhRk>4Km$t=qdnlIWB3_YkQ}aSL$Z}b9B3={hG8h7N~h}kpUO>?RO61xrEeU5L3aS} zuP5ZIbUS0TPjtRm#wti|g}bUG6Sy-l*+c*kL_a(OLG}r}?nGG4`YI_Y3V+e#$h_-- zMtkNm1Ky+AyMnkEUh$>T>b|>9v}M{ckh?%vBXqa`n=+14;73rmLw5?F$piqJz8F=s z9op&U+lz}k^OSR@>61;i1va3Iu_S?& z4gvG@X+5 zx`pH?TClec7{$g&h!#Jjd%PW6tBf0N{Eo-}*yf@OZ*{?`?Rp)@7Ibt0Xr{1?emHCI zyuADG}SNJuFxFChb)&d03n0d$(1T)jyi+L z2(OqDoDD~ahvsFzW2z`pjMxd{^=>gUCe+o{sDR;QQnr=I7;>UK;X_S^#cxl@o_B%V z3YMFl$wB~_-ZO^BU~aq66X=W_MbfXK)TF!GA5Hj(>1s*?d@uZ03KDe0XclokfF_A) z4Mp-n@m+GVj0Iz>oh}gkI7$VJ0Xom{H&(R5r?8AzO6Shxf}N%bD!#FOG}d9BX6vDZ zNcC^b+5o3)1fckz(zjOOB^&-bh0#}_gE+-ogCfsTz8V(^0hZf)$)QQA=HpC{lO%~r zwvf~~OK&s(Uf_#CF6VZUK+REdTloPjflDTCZ%#%87{Y{y(yj%+=)wzr>(`%mtL^&S zXKva#wQ9|q&@Vqq%KhL&DMyEgm*4v?FZ;#c|H)VU+TPC2xY@>u2xDaj9SGOkj*?tT zBq3=f(TXC}GFHn+n>j;PEie*&1$IqfEr4@L!rDB6IMc_}Pr`T^Q`OzyM6y9=iR(H&MUht5bw ziejc6^~92{Meufx0*Z771~6M0?MlMWCcr>e6d&-3^y@iX*D6lCw14y16G63aeHZ{* z1q!(VP!-;m27YQpKU}%JCqVK{9F6J*2Bb!a07f~a1SSd+3X{t9_$a*)N{3{$5u7a} zF&T?X#^DFF>H3A}K{*V^O}t*H)|_}d7GZUS64dQ-vAFr{*@r&t8J`@>tuMd$=*D`ktwOd90atSbWSMKot}l?S=b|XWWTeX~D2fDb)O*cn9EHJHn;@Wcvy}G&Svn z8z(sWLovzFFP5yr!R;o@)laB)0*;fv>=8*Js?jnf+-i~mqJ!bpTsTx~op_)KVW9J% z_zc_3(&PzKT^)aPrpcO!NA96X3_51GNsUmXqNhh!uo)VrsV8#cdPM&hj~gY9v)4@C z#99g9p`)2F@U2gO7n^5UX~K>=;kQ@9n{hi-aKWUa_8Nsj?)}8y5O<2+Pe!URv;LO; zlp;pqR}zJ5pMg~A!VJ+(fp&h)@CKtP{0M1azA^sBfOz{|O-VxOtfa%Y7>1+c!@Jz! z^4I>tb>}|%@#EvItd`;Asu#2%2I;e`o9z|%z59XR{L}mx0hib?$B%ByXx|zbBDt) zfKvKBd)Se>*<0>>>QkS;-R|P|fA#wF_I9?l7L6+}$VQ=lrhTpP!s`SILw7)0EAnKXw5EmlJ0o zSTkr!fUr87rX=b>cl&5TEh1$GT?LwWg0#}}6!?fKV__zsR%q`^;8unQd@H$WVgJ(l zCMw&^viAr{^!CG`@_>T~!^jwFXr>aiJD+$hFKQNaB6kIgH@@Pwz&<93N z!qw!EbT)g~E#AMCG3svSGyI^`&q9cGk(gO;P2k~3EvXi_u~x=mj0tuz=D{Q_y=Ks# zm4iaVMWe`_dosTUjN&FzO%cxKHdziGxi|Bd!rE!^!2|M z;Z9|&h)S2p58tep=2L4Fq6$O}oCww#3KGAuZo5@U#C#eK^NRbNd|=)dG|ot{BR%LE zhocd-2J78A%rOw;ZgmN>xf$%S* zH3v<1$jyn}k7dbcDdT%SMI|Ove&QiY!k#?}0YhMl%6BDB0ObUmO42I?``)!aLLF`g zaG$b~Y6>wv0~eaINRO#o1;*PXX{T|7xq84S*gY;LKF?Q5vLQJ^g>~k`CUEd5B|j!K zfN>SPVq`O0=8G7TP$G_mLpAM^#g-6g^%<*HS6=_a!=CZ(kAM1(_rB`z=5xcaWF>m+ zKzsLCH_PSD@!`6B{KjAVrR%P^?Be6&ER7C%5-ezb;0pU!YufF-?ROo;r@4Sp!d5+)EpBh;%IqB2;DnE?f65J)`h`Vcei`%Chc`wth&GQttE zZZuw+8sm|pl!O#Vcs^u-!eLO$;dx;AN!dV`e6Csb6(Z{vrlyerLGsn`I1tSOKmg@2 zLR7Ra4Qarz;j@T$N`Ja#ePWe4>D+RgsbEe&8JDG436BEc!;3N;9Up!7w|&hEpZ|m# z-tv!Sd5UQ7H#|j{$Gmw=qgUJ8Jm8++_Fd2Y?Kl0m{nLA!%~rUb=|=H90d^$S14{v% z&F9({c6&si>CIOVyR!QD7>gAbfUwE`wt#%EGEShv;igId#Z~VDQlr5EbL3 zZR2j{k`pYL@h3$J44`jUm*v-Te{*C`WHU#SsCS7OzSrlyK^du&9?L{_j4 zO|$81hP#RojZucZV*A4i)V|u1!bx(M!=^Qgph8WtN?#|#XsKmND5VKZnI|&i{@9Sc zf@GdxT)>>Jndu*BDl?JCpPi9P%kf|tls_i^YKBAcwwlI8=Hu^-W~ONXfQmSqM`&7_ zX_V;Nd06X19{K}s{m{p5fB(B3+;V2I9NKmEZ1=8FO=U7HmNt$zz2^hJ`05}2*Z052 z(c$rOF|?~_W`;i|U;AJK^9ipqTS{7GwV6y%?Qp3ozY#zH{A;&4qDuv|tp zWF-JL6x0}*;joJ&+YlO9zAeO}AXLcLCoiHJX*!I;>3cR=b30S7z@q?Uv&vM4)iq)* zv|vJG&FSOW6j8jvW^aH_s+C-KU<4mLr@*Z9g&E5_yI|@xM9BR38bmOV_kJihDcvXP znk1wpI`D|R5QozW1ogwpTh|`psIfVbm+I1PjLpP-i$YI>BuN=lMRaq{&BC6-tilff zsjwWfKbxm*04`moO$j_j`uQp&=qrr^RuVw7_zHtCF^F21i*k5;^g~bi*5_RJ-5>qif6$$sR+@pDJBcYz6C%O{jY4n}HD;-ld{MW6?dmU+xLs3lZKvfb)9mt%P+xLG-)`{BuwTY;l3s9f zpeK3Z77XmX+l-oa@P|{}-KCjq3fT%Af6_)Az7#5dpLIT&hM9{|`mHWX=mO+1qB#Fs z=36pag1?jPCqiljcVLj6dCxpALeY%fa!Eqp0uV~a($sordiQ}W%{1YHjzz4W&1UB` zi-3`u4pe05ke-H+)^vl#U=pHDg;*XIBNn5GrZA>72uzJZoQ%`PZQ4e6BAjqd)w4a5=g;`tK8X8KE928y73%-5zimlQmdN)&R`MiLcTu?Z!`8QWWwC9j>0 zpfC-t9SwesV>JTX<%ufrHRu&}JC9K?pq55mN#SW8k(L#1zeT2y<~S@>sZ;irwWh=E?f>?&&}ymE@aR zxwps;(Q;cpDCuUdj3wu=L>p4^e6(cN$s>uZ6Z86AZ->^LF@C$Gm9BG8r%ID##E(l~ zbBGVJ&+t8sK?I|=gsPbL6P~BFqKTL$XR$N_u$h`-8Z8rQ<%JUXrgV`DDY2AE$Q_!l zcS}dPrC0&+l7mY|Yl!iEIb5BP04&0^i!p4#`uI-2n3@V}dSYc=M7X!4N|-o1vyfGQ z`eYpl5uMuB)iG?7F^*bM%!pD1sAhJ|000>U7S@TOm8^kJz78=jNW4P_V;b8P;y* zu5kO5QmnJmHscbd)0r|Z`NNc-5Rb|dtq>9+>S@Ap`}Y`zG?_x|bpgyHE|*><=1g9Y zAmSSZjy2f^c=r0`2r zk?iyu0;rbWWoWi$=n+6oyz|_vWdVmJX`>BN?l`JuVL=L2*^5%S$ij=zQF}o=iGQTr zSS)MYCJVMe2O(u6eKoKTHEMezN$!I&Awy6xMg!srmaCfsMdSr`fU{|L-4O$*72#8q zR2C8d3Q(@G#1^~&1$i@_5JSout#0@#y9=t-tOLJY(0FOGgx)V@KmbT~Fd_MR)j16=rj_Bb+TuQ52KpUQW6NxZhZ3E>O2^=OD#lx8~|@YoP8 zo(RJa-5qXYs$8+$i@*W6MKP~g*1&qxS;`(Rm`zTWofi?mju0EcA>HzU4MF+S_MC--Nd*M^EGasCu)n3&&Q_Ev*L}=F6OJHNz_Rg!l1?rNF8KiPTRS6k zgGcK^is`73R1-!g>=-4)x)Vf01%c$c&dR@7{hOMMp(6w|3m_LxYu?(8fJ+mieZyd& zDmJ(kf0ppJy#1_4J(YVrvuggMI@7YbI1y%~4~EarZA_9vEE17SL}WuNA@@ggEUi$& zxb#Ibeij}nqmeVYO6aY|QC1W&;2KlGAq1TbmQ*YMJDNa)GlJ^`K#^ide$8^b`tn3n zhnG$ucPMc?Z6U4937#+*Ge}4t9RBfaoQZK1W=yO7Z^fG7pTUse!eAZfT=`HZY#9I3 zD}VIg{j0m(`0fwxoVT~FW4kk3!)eDdl%b3p+g+|Mz27~*^|8S{dIO&U zO@~YwPN7Z-wX&~{5o%L@=w)kMc0~h|wqpJq0SgoEgwklm;lq|mZZ}xAE2`UK_^DfV z>PU|ZECpbv+`v4S#MMf1qytk6~M-iBqFgwSdW;?&`YR!&g4^K3E` z!h>-tuDDMTN#_P2rYx|APAKlnwi6PfkzA(151TpvNNMx)n;!u@Kd%{@9eL~7(|E#?ZO?*EN?UJrh-%<)JniQ>1>?9csIknX}vJ$n{jq{ zG)gJ@0u*c7gW3_H$<0P$Atfz!Qe>gKd#g(?yJ$QfTmOsJ5VS))@K|+cfA1sz?H{kc z=39R9IZs}1j#sN?7FBX)$-rW?83Pi!2A#xnn`wp1dUc4>zNYMS)KC?M5ul4U3Ni;@%rxyz60Z%WIZ4RJ$ zBlTc(`VX!E03ZNKL_t&wTi2rrH7>gE-5&a#KmOZ)_*eV;dzW@scLk>)AP;?O@*`XzyHOvVthfKA{N;Lsw{V*2G6}3MoJU-;lqO#1D;@tfB%vT1B|pk-i_433c4JU5ec=qXM=oZ*4R)oc!NNH) zVJSGr8&K&Bhp0)RB!L5>AfYfyor|2lAs%S`E-u5{lvN>6D!L9K4J5@JZa@k^6YED@ zfa)=7NTJLyeK%2cz}&j9N?MJUKiO=yPNmhN6<0pqMP#|V_mRJT*ELW0rl0%CYYq>O zhG-y)gaY}X@K~)e+pQ#XX<&1IK*hBC8k$5iseGsPY2_0fX`fSBvWeG;CrEC+K-~=t zPnC`1)6mBMXIv{|<(5xKHk5=RBZJsps$a>_q|kducqAEq+7@zj15%QgbspxMnPw0x z5}}g0tfV6d6)s$)t^p9%&~|TGGOrHnaMFb*{*z8Em~Ej!m;V2ZicoTe5JOvNvtbZ{ z@r|U7JDWu~IfAFGH#L~zEeACSxsVVj~%3Nz};%m=c?gE90btn==%8zZ%tp)Lg28Aj$P zxLWZKPLEa-NFmg!1XrEOMAl+x;vu>xcNvdA*@Xfn&Jo$Dgi>dmG%azXTeteEnH>qF zqNi!nk1oxfM*$)w6;c-PE0-jzXfQcT@4K6n+3c~=?Po*r9;5AsH1UhXY9y!Ia{0CG z6{^|e3y;%knMkC)4#)r4A@M`7s7zg1G65VU0a zivWi5@E8PwGu|Q4}fxOG(It(+CeUs z6nGxCu$vrOcM88&OIe-al7EQ}_X7=PZjN=uiW7*Dp`<*fjZmw0V&`ox+e*17dMfT& z))_9EDF`|-hD?&?yuY{<@<7c91vr!5UB!KOtq$23f&%raA1qfmR zqLWJM3}dKCeKhfPlE_6FjyK15y!_%f{pRz}Ki+))hEJ~ccgAWAc>3PA97HV(9go*L z`>WgD?=Ii+UC;mZH~jf(cXzVmu$cvC&tpb$K|-9grae|R`0pwQ|Ev9?cz@%edY7Py zH3S5DlwoN7=%WQvVQ>J8>B8@hQyI}`GmL6&H>YXDr`jDSErd(0*J$=#tgpDZK`ee~ zp}o$BG${0Gpgy#IgpJ?(U?R<5{RS0e612rs{2)?6*l7CiAx{6W#aT>HJzO2-+*+*Q z0~)__ei8+C?SDM!Xod0fc!JNahIF=e>uq2xWmk`D7pSG+Qs5d5QvHxYjW|Y|sXxcJ z&V0{GTnB&yD=`39#Pp_DG?t>xKSolaubSa0T+tB_&{ncUPe=3cLT#^}9zIlm zT12eES>^_NTZbf&n(3kVdN6{Lr$J)HSZ^^?=nUDqjg}H?4!-XVwu;3%8*8ECLXGAF z`yc^^Oofr;1Q&_*nM8&xy0q9@w7hDcbioeKFmAC7GevNS%J%kNUrDGw4ns(dbbyfT zXd+_v=T#aa^9p#s|HA*B$NnOr+{WpHjC)^3@jH?1H`v_Bl0kP z%vrQI@9&-Z@Sp#~6Cd+6uYUOtuGi~D0qTJo7Iy+->zfn~uq*zrlDOPts?b*k{S0-b zVW(#c6v_CJe=L&HmbfQL&63jteA4tQ4m9|8;r8ns;e}Wx#KLZNaxXYkWj$%476yUH_$AvumTMPZDy_FzU106(rT2<0dgan56mW-5b)G(CagG-F9oXs^vL z&Py{#ChV4~1dENqMA<~6JF;jY4OC;1Qz2MHo2Oh0r9&_y7U@BVpHE;UFu#)!(QQf( z6=25cH*lf}2FZs26Nu5I7lMyxc146S?0kAW3b9#4&_c9ko{99IlDJZ4GHj$70fTMB z^rTnHN{U`hmpciLvsa3Y4@vv$;rG-*p3(NB8OO`o~x`=0nMoAt&mT9oDT2&IHNs4_GdOg>jjxTQhx9JouZI&Rhzu8lmp zHjRG_vQ_gmn`|Mf)#IAgoi2&RmlEaMZk-y_m=>eifMJ}4YvTZ_i#0<4tOeThkivGH zA=blf2}`XgbMtH#rrR*Y9SrjuVS?B#jtiquEnhv5xHn=740I4UFfd`KQM9+nofS(xrUYl4z&qMgRf6xbrTiXw#P>7 zBv`T8uyD%NqFJoanLZopf$(gkb3k4S;#wNYX7<`dCP z({0fLlPw+6+Pnv<$uzeNzLxYiiAjZ#Q0dFW0vMW=g0djjd1CW4j=^tZ_IpX%BH&yJ z>kLD>s&m(}TC{Cn42w7g9#v&H>rN+9kvKD)k!`0^#tNBh24+{b*^eg`@n93Ul;>$@T?=IVN{-q2!4z_9NG4p#VjbN zv*?R<6O{a`?+V8a)q`_^>y8SUxiUv0Ts8zgDO^oPLw)=w8tAXEfb{fLPHdoR26Ja) z!qju&fCB~_kv|JCppGZ3#+bY(jgrhrMgxuFmYc1dh?RL13kZm2HKnJHghs}l7~sb& zvSG&eId)LjxYCw_Le!nb*(_bPcoJf4Y8*C0V_47mJlcpS-z0($zG*wFVZA=S@4c@4 zVo6LBXwUqfxpdsSk%opEEbpF_wH9e^XETv^SK{?#&>Sl+pzkK zv01C#C4@20awH=oPB`M9K7W54QN`=H zu5og8a6LKig7ew~7pqpofhZJ2gnH;n76;{GmL3atz*@^>oSMLytGVVdQ&x2*v0^9P z8_F@fwHg89LSK#G#Pg(MewqPz+`>0~a1at?7o%D;IH8blKv)=g#2bXRvw6@~BmTqu zH|4%SWUG7LBGi+hPr*bivI&V0v7(Mgx$m@nS$!GbA9LJ3^l=6(m3hJ_;fjBZ)N1Hc zXD0&V$47CfW_gP&>b~mCN1|qjT;>W&UQM8(%j6X&bTM8Kj8wOrdKQ`Eb`F2r$X$z_ z9SJ>iu(J6pKnSHT>+HP{!=&_+?F?{BeH$CGAzx^kl{XL((6HJk* zr{n@@w&HI_ry#W^{2@I_buh-6p`WddKd2&A62>z;5}qyPb-tZ3Dfg)_^0?i&2xT|a z7*$^|5Ey_4x3HV}ld*zu<6)GQSr$+ULSqLssti%(Bx#HNp4En@SO|H9=GrhQgEb%? z8C{T!$&^Svl5Cs+m>D-oxy<#R^|y_^PVGF~OG6XSD#9rxgCjr2S!nch%A8*!sd;4#D$NL`q;H#H+x_s}V z(?^Hv<*=AEw>y5DUBpdmLG-4Z*jFR0&f~F zoqJv5o^*0u9onaXg9A?_ z$ZxZgqNxVz=L>~~t_@<_UTkQ#fD5Aoteb0G*uv6URSlZQdy~e3Zh6xhw1bEvuP>hd zY;hhZR;qQ~dOTiqAQj|5qwJgTb$vxH4ceg|(sHW621k%1=%Frr{JsC4@$6zO8 z3qJ^f6yfd)mfYi+&>JIR85&40{AdZDKRvcilWOBCo&xZ-7rz8I`urgfI%_!wUG`I9F-IYe_#JViHR4 zZR5xP8Z|B~!K@07ugRY&#-V>7yD-E0GvOg*=(Y zv(Mq%)?xA)rVnf>NzKM=7UwmoQPD_Vq?Cl>Fk!e->=pJp6O51G&48*hPnNeJ4iCl93Yv;GNCmWDDj`OM#DFo0 zNyv$WBs+V5`#n7Ontj&1u4}IKZv59VI{cAO+4;WreV+SXhk3Z>HRqbk#YS-M^O&3o zRmjGZ9+*&DOM%l2LBCr(XHBpcw4%t2{ZAMxU^`^id};~dKIbz)Mr%lU z2=FuUf#>!uMGHnB{w|Op_D+TtFX(#?bE6;{Zn<+&?|gVRvfDwvluFiCj|^8goak<& zb|t{sFn*Ft1;R)W;nZXbckn(JnM15gPM1Drn?^my)pckB^F6(2kCRj3-FD4fotJ3} zlR&SM;lwtO*qq6ZJV&&O+e4sq?E7|tEuQr#&fLdHuh1=~@d>$aO&6Xb(?A+{ZZ#=x5(?XW5_# zDo4|7RT2Se&+{Ra*iQfZ&p!e)3K>56vWN99ut(6&#Jm_qZCO_u=<{=(C^q=-+?c zx4-c5hxcnxSk(!UyNXDWsprttOI_;{?rHd^-KVd=zys4QOgNZYW6iQ9xExlIe(L$SHAuwv9)C;>&3!}C|NR9MW4RN6aCVD7n zV*1?NSEVdTSCuQuWyGgR^f3@O8FZ^nHzA*jSd0)b$Z=^R5lRBnuveQO8gvj#gckK( z>XNb}Sc=N7M=YS4Q%QG1_Oh#m?<894Pw*%vR`H~dSNrv?v)ga_m;dGqe*HI`zvx-_ zKm5?scP>tTKe&6a*-3g117+>jy&w2jZ+XQ_U;KZ5_qROfS@&OFU!S69Qxr;~8Hq8+ ziST&`uZ>2<{ruLgfAmk@{6)Xv>mPaLXWjGAU2W6=Y{NumO@RkbXdv{&4Z68H;kwLZ zSlH|R7<(JuZLkFuQ@|@9T3!Q}u8I0d4r0I=6XZOZ#~ob|sV&2Xk9LTT^tNRJd8|@$ z60y4s3htoct{NqWhN=bQjjW5}hvP3W|Lnyn-Z#57Cm(&>@_0@h(4 z_TJ~{jM%JvRyum1i4G!4A_fKNxFy(FEuU@ePstB zA30ngYL-|b?rE}wv_JA*Z3us(+|x%jlzh@S=3xXdb3=xQ3VRY215h1Le^`)>Y;p@Z z`iiA1cFDzN>DdO@6nP&3N~2R5P!Y5HcK^Naded88{o=>o@I!y)czsRYs=4YnG*lUN z@Hl+s#3IFE;}?zyd%B1l*4L(u$70m0$}5OHP!_I+;__%kD9<0u0W`V4>5pAQkbA=s zh+xnY)q=R_nF0)653zDliQT8K<*Vd@_<5i4cyayaYIn?Jle2=t`9v{?awK}RobJS4 ztLw`11v-XUi&Mj@f<>+Hh%}B@M*9&oa`fXki-N}!$rWOdFI^nA+%yH=;iR; zwNTs$g^BYM`EC_n0#DGh0e->Q_CVztz5GNzl@}!NiD@yan9TJeVXFDl$^Yc0$m(M6 z+VYX9ze=L$N2mE-9FKS1zWv6ZeES!C>F+yx_QMZ7{+!FFo)q1v$|aX~inx8x-S7I> z|K=qRJn$p`=+8g)$b%P`7iXjBE1%qn3}de14P3wXI6J@fxnJ#ht4I z4>eeuQIE`ARVt8@Qph7C1OwN7)+T7d>l7Oj%evCXiU)*ju2zQ11p9FEnw_L^Mew_d z;=FXPOwY_hLY{RoCF@mt=z7Lf){{y)gL@=9d_rUC7I@Gb74@MT9)&T4*ZU|;nFK>n zk(l8D*COTybZ(_kood3T7W{?8x8P}V!{1W?x_tZ~y9Sk#i`X)WMnM!|N~slaDy{E* zPXpLwObywjj;qR{O!EFsW=Lk;GcVDS4B9tPN{-fTrs&eL&~l$f%V?uguL0Ol1ldNf zw@l|((H|sXF{K4i0$9*iOBRB-w8r@&Pz(4PWU0Ja*mLih1Q}3!$F-yYo6{*mHxLbn+PpVs14@%I zoIEr{xY_a8Z{K(KzkB0b{?=doZ~yZz|ANbli^I4|p88pY0X+?0J z3x(;um$!q4Y>Ok0=}KmpE=RMB#~Eibs9$c!4f-A#0Vgy!d4Bno=yF^I0p=dbsfU(u zu9&j}r`HnE{dnORD#t7-($lHevAm|D1DLaz*41Q@t-?cE)l^xRrxK{a)cFow>_tx+ z#VpDF#tbDQ_)VH@G82n5De7UM%C+I^CCde-ot{ghc3snp4(oiAyuDUPn#B=H+-lp& z2;=Yk3yuu%{NVyHV{WQzNNuiSVJRy$2t}v148-9a0H(@VXb@I3&N|9rTyLG7U0q&& z-YY--$6o&zZasDR3-9^Bt-Eh`+PtI`9c6Fh>syOEckaC4<)8MRI~TwFSN`sweb;+# z-?}|KS~PY;wGc1FS7>bxB#-D;eX_khj$vCxEh=# zC6_qMd7w+AU8s(M?t7dx995tr4P@E)6v0rQQymBTP;BqmraC*CE~pXM`j)>!PCYZ= z%o4Cc7{2Evw}eR3dt&v+30{?1P|+Hs0pD*rNjv_We!B5UhjVyi7&&qfS{$=n(3t5q z$}D)^j6Kgz!#(}KtpJq4$z^Kau`W4+t+8zeyPjd7p8sy#6LEj&2b%-N)@xzcDxv3mnKC|V)4MrV0!mJlD^CN$N zv&O)MjT{LDV*LM3L+t=k`Lly*@39KJYXWwEh)sS5KS-C0+(sTZfrvr|lE2w_a&jbA z^7D+4;rd{pjQ6lwGK@@^ab{DrjV;hKTUWxIFWpCC^47cG_AWdrF`KI!HpAr*4mF#u zhfZCNN;XvP(aKQM#s}qX8re`3A^&lMJ&*wGPw8gWtQ-&Ybs&mG;pZ~am^i88SpJ)VGh6aRxn!As0qgM-+_l742LHf?^jW4Z z`yT?6@^qmi&^&lQ*OC4lyR|?8451;KQxIKIW|_S7bMscU0vNEDb0HOM3rGl6uLf1y zTQI|fCpv{mpHtasS`bVMdstWkucOV=PboJ(eXBrDrPJxeHKv005~PaNq&pD|$Fz5& z&}_m{kyKLy@Mo!ymObKs*|npG00_p52lXlGSV1p%rRO;kHr}~4Odbj%IG2|IsIUxd z0$x_9L@6ICM>4aU5(1^MI0YO}-+B6#FMIJ1zwXaGbnuV7`vZ5~d+$DYRX3}`_VMSK z54-;OoyT7C{GY#d`&azxul|Ss_{R_DhdzqbzzAM4vPURW4DPKHtcBsMKZ^b=dv~Bo(cEiS@gvx*TvCJog#d9#g3+){Nb#!RQ(%8h=cFOUal3J(L81JjJ<5EUC23% z@W*10z*EBf63Z_Ibv{Xf>nIG6BFnM6A%@Y zuYqd_m^>CBO@=d=HyH;xTz;C7s_A33xOk`B1&s!=Ziqe7!0?cppoB1Fy+1(#58j~K zFmFKaGx(pDHSS3Sz?M~NGEJx=)m03ZNK zL_t)S7R00x)QXA0GDOjNwZ0;h+;6_!O0^1`C0Iwqr4;q!#e6WxgYk?4}C2CLDtyoI&5wzCf%$2tc#__LaHt04FLKZwZ5)&jEs>YVB(K0 z`3qSWwri@zHD@y|JS|g!ti3?xv!cr}x@>UL(XbSX(p|vMdD_OdLsOQurAN$y!A>aN zC=&?v$Anv*!BJTZBp1h3A(bf0h2pjXrv|{tKh4WYVAP?^V9W&(QmXFsz#RpnMtghw zx^V*=Z}5s*^p@m}hNBIYhw13_!kE+GOK?D|E83H`$uDJpE6>fv5;bN)3a|2zQlphQ zZPBRo%&M2NCv18G1d39bUHGdkanr9Vz$ou4yMueSA=u`{nM9x_xt(pFc>2OdD?6`f zk{m&* zyKsf`_}9b;+V}Em`i1T}fa1%JdjTrN0j5kZhlZtK#hBs=ZFV_OFL<9Oq|<3lyQlRF zq@(b*kP#q*&)6Ca!~{oXVo)lCz~W(7SY1u<*X1R36)E}x1Jg%W{7YBjizdKd2#^*l zz}KTaV3b1_kYnItrglU!;)=2BDHXj6L(Hv`#Abarc9~C+R!Id))5v)cy3{`y3ds$d z$x&h`g(taLwKWvCQh@2iYua+3K*(c3&d#>WtBX&6!E=82@BNuqz2td6_m;Qcb?-e$ zY2(;ko^>3Y^L{cT?pJr7zW(P>%Q(!f9%O|uVe4?(T&od7JoT>aPj2RmQ|%` zk-Ajecwj$R_D^=E^C9EO`Qd)t$ML-05h+ozGTIyR-zi{vt~2Baojc5CA2#QjAgE(&Amf155Cl#zz$Yci zq4<)`%Em+6ID35OiKomGu+l@w|JpnnT3)K`B8+2D66ej!q!OBfwR6#VUtV{(~fK*6O$$3Ed=+^Oy z0;d#z+4RL15wjq$b)Wy0cZAP`u~c$Mm!8#>nQ#@6>~i^X7_J55v$YH~;Ro)5D_O$v zp{ia@@>JMCrT_&3+%Q4N5C93m6Kxlu87rb7Y={X3Jpen(L>ERbPwOR7vVBEYT!)6>1vof?^8gK)eIJUhg8U9Zc2fqqkHx;Q125S+acTH7SRHv9jKlAPS`tsQi z-SfJ?{jLAy@BWtm<41n-1)ulQ>pNE`tJ&<3^@HdRF}hi7ZM%Hp$>%)(v7h;8KlQi2 z=l}Y>zw676SC@w~9%$*5CNzci!jyg(4Uf0cKK!cXamUd1pA6aUTZiqi4PtkCQnx&d zr+y)BOad}m$(l9_t|FiDz|QT5Snkf~^t3XtgG9YW=R$!yM1`D1bf4Fr!PzyWwZM6|IDa|E&k zO-Eo0w?ptiWH{0OKw$uKK#jjA$&S2ie)QdDWCNk-JfDg}OduR5)rHbb+12FeCmFj2cFPt!Fy|y9CsgNE*R`&ikTFjZLKHKegpToj zGH#so63}9+o$<4*Gap#yLotTQ_9n2iNlrm{gil6bK>rd>uv&N|M9;%gW1!3XZ&29y zIZc^dBUl}}F@D3zoi08Er?P_iJ~(7U&{+kvlb|=%(Zg#P@rSzzf7ipSWEy#b%&y_= zNUMA@MkO(e;^9Z4jI$H%6my+bQ7c)Vo5aOsEFao$bQ!t{c428JU%2Tghg< zmvpFFZdeJ@gvOfld{k6THFvyF3Lb!CO>2^cbjmZdi7G{>8_TZIs|rnWHR`M_eyc9$ z>6;seD6*%G`w+%ejgQ=W_y6`czvXMc@z4D)ul<4N|FW0I#nmZ_%3?T7eC*|(<@e~( z^YM>-*s_b(I7u&%hyOJOxkNO$8inP~8QRHCh93^^{dYfqedj5oElI$+56?Gzbvm?_ zyW~uEs}ek0TtCgD>n|p8avk(J?sm}KpCQ_+#0iQL+WHu|1nx7gYJ=Owp7C^M?NwUT zW49{PV-_AqHiF|A|2k-Qa2Pc>yj`{nMG{%Qps@vUDWJ*d#$BV$PwrGVL#-l4yI8{X z8dxZ$pfC$8!iaFq^4^hLw`#E2Y2018t;BCRyzClA(bsah#5QY1^5!o53PAVtl>?(P zmNZmb?Rio;=Y>pUUraUrPmn)>n+1h{3h&w1`6X;hG8 zAPta}s@vu9h`(zq9Sz-B8d5w!+6i}txxt8=7Sf3iWcu+tBXEJUR33b?_>FQG`fQeU(fZNKcPT^wM*AdLR2b*Nayg-1?IHzO@;fZ-iuoW?1^GCy>x$F1V{C^T;dF3B z&Q)RDERUpT3d`6;A2L!{(#mXeXIUh*HT7b>~gfYj)eTmw+P^YMIpl%2peH63R#M@9HAUuX8-=q3g7K#AS5&eSuU) zm6s4u^Gx^YI?Zb>>l}?E^bBfGa+`z0hn0l)qB|`64>eIKr`Y|_ zu8-FzY4|JO@n1jwoM-)y-}+ad_bXpDj(T2S`eEai-NkCbd5O z&-FFrx!2yHmhJrf@V@tcyj9Lv5mNVFKJzE}5K!%_d|CAjO@~|uWj+xk1a%mKM>Y}4AHHiT_ z8Z0_d_Y_!9le~N9J-nH&;(;Ubscbh76U1s3EQL78N&0#mJ;{UQM4d{b4o{{SCWWVr z2D(^;pp8po8DDf%shFI2+M%ZVQRP6P`74gi)nw&F z@!>ACp>t7IP7Lf*)W4iPB1npJS%fmE_2MlS*_=mVxhk5eFTN*GZLQOy)9G^dKAnQv zB{l**_7F*>?YjOcOfiZdWb=XFp_iN|_iT<|J1YIL8v_Z^A@at0m8sD}NK__(Dso<) z9&;o?Lo%e6%_e5l*D(^FnUEX`K0{&3*PFD|C6^d%Do#_J9X5Z<=hGtA6iiU0N}`Dz zsUAG$&liicXNiG)Rwx{1MGR1^%b;6SkaJ@_U1XFTA7GSgTb=J^T<_v18C9jtaPjmL z*XH9|ar%jt6TM9JrD%?v$gpddmzUrC-+k31&wlv#|G~fT+*iE#aQpT#TX0Hv(~HN| z>9e2qvd=jE`_MLRh*emMIHgu{X!QXn^KjW|j26nH4Zzv)Lm&ByFZ-3h=0E=2<8dGD zzdrfrlYc(>=Re3l*T?bd1d+MpDM#K9}=}ua< z3S=!Rv%G)=#bree(^SIfWztB0gP&>HG0v9H;_pV&&JaRw1vb)rNy>O}eUlJpn5~QX zCiO}%?9)~PW-{p{r%^7F&OiZWFl;20XBe*8RGLVLNZAc7$Bb&|Q~6KQ(sLr#CScs4-0%j6=mn1YXP=^T(qL72C-npvuMw& zMxdz3%Z@oqZgd64cybqZSwJKNwD=|y3peq)zC;mlW(*MAhd$K=kBUc|nH@v6o)|2u z9NU0s3V{05CX30!39Omf(kOKNoM#dQ)l{j}G}%FM9OCJ#r+?q?`m+1)zx~x;_igum z%JUz2?4hThzCarHBpUZTc+dOZ^}d(A=-I#Vi(h?pak-sswc|>Tl19igdpLkIN;0>s zKFnJze9sDcT!eaY9H05bou_UcZkaLAlNh;9QMQho9!Ps4FSg-suLcg;GyA<~gue~8 zZAa6=XvkM{w=-%1IiO82oyVYl37clqDxxJfWNY-HF&8yRh%v9z2*<6J=x>>p_h{-G zDJC?6eY%wJL?mM~cX}8%hMYqCy_xvvtc3-4wG$2^Pz~&2%jVx2xfBc_S68MmMCnK? z>`AIgFih5gD?f5Wpt`D^cNzqR5dk)g4Z(%FMST_piBtmBFvadPa@_nvE7>>!a0aJ| z9BkjY$w4YN_hrNVyOX?Qf)(vjyObfD!b=ZLC)I+~NY)I8dTpW@zgh1^n(R6{qD z9qi4>Vfe1(pVM+vK=n{Y9HG)8t6!R{d`VtRhPmRFoO9bF7!$KYTrg*X{;$f_H5Si@ zi@mB?v7xST>!V}@RiM0!7@jfsu~7%Qw+nR>@7stVczVE<0WKUKenH_jD$Be3}G06w_X>`lHb=c%myQqEKte z3+fRF09C&oD#l|PVTO^pokgEXN_hoP`6aMv&XZ9(gOMXb?j_5mAw7;EaW`zD7$qyB zG)!)#xFVxV<{?xP1#V37xOT--x@T=UFYYA!y#wUS;r0)8U>qMR-v(l6IxP6xm4sc8mZ)I1lZVk zN=_$RghCr{b>K9la0AWs>}PdMBs~_bLmP%cKGVfGo<*k4D_B?u+D8>5*1=Jd+60?% z#Ef|YAkN&eQPGJWq)j@ELhYf#xN1FXCRkc&?VOAekf`a}_15#~0)i%VD#qS-;gCvJ!+su5uabRXz}`T~+*NZUy(;HzZL8M2b)cdO9#*pfs%Bv!P4k+}wz~DmA5t z2E-+Y`+yI5>kV-Qa;}6-avejzT8e|{W5aL|W%8P_pdTF1>bzqI-)G_q(tvZyxJPfS zXR?i{qqs-h88xyDa(wfe#;kQ)=!U2`#AW~(7Ryf0kI+oh0$W`{W2^wgp?TUFeA4+X zm`Yt&DG=-O0F?M5A?l9{Lr|>H_b|thubfB5t@Z`@j|fuEz!^fwqd3JPT+>xb1)*1Qo|bDp&L3%fxKGT#veVqI4gFC`J?$$MH%oUoAv_O@QPW+( zf@rMT7%r4s)dz>hT94Lvi)u(*jb_Le%am%ll~gGqpI(X*E?wZ)w7c~`6jNbmjT|D* zh{{ZAJy%#Es2M})EF;BN6`~H9MhW&7B?B;H-c=>bx(qH>?ul}5uUR_>phb>qF5JKfM z#wvJtJYHLR-o`Ty+0$_MaTwwBgdI8Eyc!k5VfGaR-EeH6L1$`ZjW_Y}^QsExOaXg( zo$stI7th(*D9L6ZXyd-NVQi0m;=(B0gnL`L#j^ss^GB`%ZC(tgVyV#iN$D_;S`vis zHVp+v(P!|4V5jRL4&dCq0wCM*35hP)6$e*@P3XGpB%u!EvFtEIk&IqhiwArY8ZU28 zWA%cuKm()evMad*X#kwVpNfQ$;q2&6dZ(l<@zXf8G5*cxg?5H=iviM)0`u)MscS?# z{=JXe+B1~w*_q5y!-Hu_K4?T$_5iKvyzOKBVz(N6kWfbNtdg-^A$ipghEy_Xw_O7V zcn7f8Wdg zg9U5Ev+VO$6D-@LFNr^xVJijGlS0#S(8k9qx8?Wc0`dW>9+f3@_%FF&9;OSz|n@HmZ}n{m5KBIuxmH48al z=L9#|sB`fu`IRQ`&v%*#CzC<1#Mb%wc71jE{O3OMJ>T`me)NrRdH*{+5Z+T*JhUDP3y|l=0iVZHMg*40dl^0nvcHb}1OBNT1MfQTYIe|4?nl3K%vyh+A>gkiR3Z~FnCkwQ;wQH1O2HV8FitkEHja!Br=@|c){zA|~ ztE0kjDT$VV1~X(7@x@+}Hk)1JG|NK-0UEx{V>>3&yz4mhlO1mEgfLFIEGm}=cn@q*FTX9-Kl zj4hN(^FmwBPrB*<1!%PC zGD{(>G8biZox~#j5OX*jWLb-SudQQbQ z3Ts@a3-Ib$3LsT%HucUZz==F&@j6GK0qY0cGs?OMy>d+@akyN~yW*RvEahfR#=01| zX$SN+uiz9H`)aM1stT-+3q(vAT|9P0byJLqM+_XcIz5#YmLH$1hV6|TF0B?1riLv? zH8G(RNnX@`m5S;aFqd7?#4N=rEwjb$&e+)$ZMra9{=5@YwQ`jF3lst9s7Z-cBNz1^ zTHh$3;KCP^5VE|_CFG6;Ib&YM#gnc>TVVxpB2!ZuU)uW_ZW-En^Ikp}6)HNnZdDhA zqd=2HwooW1_@T|w2F-uPO=m(m=zuuf(9-HCbAks$6Q$3E?18xz}jh6VWLo=p<(Ftii;|gBs5~ITi#wSn^TX{m}wCR)54}4OnWGmbv9nM zl3SXJMgcE`Q-*o5j+!yr->%a}o|Tr;C!>yCEiXZHeRG=><&`T5FV(ZGpwzN8Jp=P; zQXe<6k6ma5?#C(+p{7Y3G#b+q)QED{@)b!MFv@Y}!c5S3ISfOa!p)H8DSv785983h zUJBls7&Chspf^qR?+4BL&?)zoq|Ko1q|$`#>jijjqP}} zTrOCp)uUL@esMo0jGLb-Yq)@#ZQIVb!`0Q*<;Cg$U0z*Yj-^E}fia}nImaoiFb|M3 zE?I)gu74$sWb%T`3ta+xG;c?-|5B5f(biJTE*d7w9Skk z;FN-CKw|Qc^`S&f&5~6OSvsRDrd^jb&B&V~X__v9Pn4~cKbyF&o`S_)WO7kk)6!4r zo$6dGVPpcdd9_p}+(7S(a)&(MA~?O)OnWIMDL1j)mlwL+Mjw1U001BWNklcu z*NamO*KXCZdPr_e9%in*m4TvQjBk#PFQE*H3;fPx{Km8jvc6AcmRM95wb9;m?u&ytSC9Ncho96^AN zHTrz+kBS1KxT`3*Ayb}WnO~?|&%)%-QrMZXCIuxWpd(zsKHknyk%z>v)xKEu%Hzsm zI~^1i55~`Xt(2fF!{Bu}XcUX=l=M%@icja_^T{3sKcnKSGB9gT6Tljmv|_VevRL9E^_%epN4+3} zDXRI49?F7r^q$HXZ|_Ol*^Qu$Bg8((9_(HKiRo3Z;j}UpXYodOo@_`BW9Cx zZfJq>oaa4ip2r4rZJRdb`ts`DM;`p=|NKoK{`em` zp7O(Mz9}wcGE%tQnO1{#F^pKL28noJoN35srArAImQ8WAx^A09uh>m7y*`n4V9mxX z6xP)yIz}reh*{}H69tAC0bXTdlZ=?cK8^U?9Bne44frT|v3YMT1^&k4j6=@{>f{bZ zm^{`Eb)tX6T34iOresA>uwpgN^fGh1rVwxvy0-hIjiqv{>}bC-^7`5m*hDBCvFe4f^$BzDWbZ;bU*>MCam8%STd?|s(8`+luXp`7hF3Un0@ z-4C2WOe&Ml^SEBhgT)u7D=olhc&(~A3A`EySEU>!1+MAQp*%(^PwSoA%z6%D2T$;(hd@l`xNGPQJWgvhv&{WvyVWF)|q%(Y@1P zK<-5?fS2UpyfC)JBPjkbaWN^Lis8$0a-C;cw%F1(>5u7iHC;|RY@WJwS*nTF>*2ip z(zR6#-pfZ8nO$<_dj6CStxZW5ft63vh*z6;3Q`%nVw13}yjrR3eQ`Qv=cAl~@LbV>qG@z80VEiAA}pK&)deV zZV*tNkx5`G?c8H`S%|#485L(fum*9ej zPK7V_vtHK(Hmpz}M*%v3J*5|Uu5FX`>GgNXpFxJph^X1xw8(~-(X>l_>Di2CF533RbW z{z@1QqM^p)91=}R_8=8?Gdc4K0}VLddChD-m7yH!OeMxrQl}7G*`X-yqb7FDhGUpB zVZc8ZlMTfe(*|izkJCy#X#sTYu|}o0^Cnhk@c2Js!DHXr_WFPF=J&qq-S<59z3CTG8uF4sF%Io<&3y&`BVSM2WFuOkbf_4 zSfAk2IraG)#^y2MTo9xOfmWL6#be>Gy&R{>-Se-M%LxfsXBraNa+CU(kUP$eL8JBQ zkc_(0C06*JYNiAZ^f2)^tl@;If|OFs8xBB=$uB8}FJ;M%u9I^L!SfEN;Ke~!#({%J zUj3a}zfk8Iw*ZafId;EJ}`}%jk@8|Ej z>#m67(8+O9pS84BX%Xg?^2!idP=jgYjt6e#Qx$Pl2qjqVu~>5iZBw^;R|h0TBm%cy zEv%;QW1U?86EWdikynfKTkTuvn!9M5cz0N5SpppH&?jBQc7+qLXsx0Z^oW!4s!UaK zARwWQi5Uw^7-KF{)H=BG*;?o62$=b<^;1YJ-N)?oMt8=%T1%{~MmPyq)3QkP33WXC zoeW+2li&W`XOBHAN5)J=s`D^#rzqmV`_Eqas$XJtgNl`DFOe`h{8->#s+b0$TV$8B z2V##G3%H1S9lGHMME+07YNT~YdChQOVbN>}X8Fr!a9O%;JpXWGU`Z;kzapRt1x&bw z;xS=yEpp7caJi+-y#Rfe-mxagYHL|jZ z^fehNtFs4X)}_Uh1{fc2#mCf4`4a*I%yvApyUe4OzfwQ+*tG`HR4^&y z`^TRA=0E<|ur!UAFfoquriv<`OWPE0wN_a;S|^APIhV0)y~Yza;tE(_9?38rU3iy8PyRQM2DC)a36g3%t8vKv@ylf97N zYjO=!X=KxFO0dg+dYPETAMntJ%kjEN)$$F1Oz)!iLZ4BFX|f7>FL$}qX+>?ixr|$s z5rveT^zrKI>g??Bm;TD%d(%(-?6Y3**zxi@lR1nVPZ<4he)#CeFFxZ1kN&D(`kB|) zm)Td3K2_F^Azd)^BS#sw=#x$J?e%~1!Wdp1tug_TLxc$mMcx}}*dBVshJRpcv->&hHbg)O-yT~b)y(L$bGK0f6A@Y}Xb zyUw?Ah${I&+Pb+ewu7)~lqJ_0+0BD`(}^k;L4R9lGVZ`eF-YU;F0ql5nUF;LGBj>j z30;tL&xxaALbeR}9Y&iOOl&;<+ezHWLqgfK)2(!-gdA6N z`V6z+1UUq<^ON~@)y|igiJ7L=SNI?VVy^SZ^QF0=xYLno3M*`53Yb@aP0KA4TNOb0 z^Va4Ht?Lk`^5Pk5EZRB45o)MvZe-{o01G^?SDMW*LjSGD)rw$;LjH1jumUKY0x(y8 zv7RkIWcCfe^UJP2`UzGFCw(XUupRGQz3{VM{9WJskN@gl|NgV{^ZnS-=12o&2|8~B zUu{h75BawheXXAfmMfP*HCZs{S@NJkZ@F)Pw^@-B2jV%%vG^(j+t0x#R@Q&dVT zYGl>RUbc(h^JPZ0WOUWxQ-iI(fM^s-Bz9ME2H^rHx5xlYPn+|YPKriXeuCndQ`DBb zP_p)jZl@VPT)Rb|5d5(MZJa2TWR>YI@Zen_62cQV#I#H#QD=6Nh+0L$pXnQ2CQ9qK zSaGMR62LRVt-X5Q+%ZXKiBJi11$zpmPk*kjj(6X_^^bq-U;X|+`kjw|)~DIk(NxY1 z6+fx#c7AsG!JmJ{t6rWjm5h{eDbb=i=D1z+EV8A-v?vkw8v`dFpb&PhbV9?fl_&y> zyFo-1Hg^cVPBKWXEz>#AHdtdb+#wD?7ld*&X`pj$lvdZv`G-3FzBGBBP zCW?WEiqcTZgJ9376?8r;JP#d_n<_JPRcnd|c*&CBne)HW{=i+|#c4Z^gh>9Pz_l#r z^ev7G!6^+0FGLlKw|4Csvz_cRZHqJJdwfbO-kK$ZbHkEsj$4X-?Xh=fTQ7OI--n4xrDVcq&fu6Hf0+*XC&HkaM&u#~g5sr2XBrl9u05TGHW|m6 zhnCrl+A3*c&4Y)J@VG89gF^RdYIz`yz(4{Nx*j8qoW;c5FAb|bc!hl8R#QN>-vTT=8H zN~C`|9&L6uP_jfFKX|*k-VaY-{ej=}8!ZV* zHqqzU%JXoTQtSENLQ5K^OU_mUg#VIBpgL1!I!$!1P;oq`c{KwzW&4)ca>1*twPm%c zz<^|et5phB!IMV_k_${o#~@(TkOlrm)TzvS^6JJZK> z>s^^BjL%I5T-IWi;83)DVSdU@03>#sJC*&NUDx<%6Dh^%s$|PBt413L#Sw&_!zNa@ zX2tx&5^zpAf;Odff|{8Ea9SP7x1b+NRk>{ltU3b+t9LX` zUQvX3k%N>!n=hp#5D(J!_`-VjDeva=^2&s1hq;SW7(^-&xfJWHwT_adz;Ho}a9g?9 zz8n>z%k^nl@~55ZB_fKm5x^EvQW%7=ioU6EXMVa*22w}ojAu1S@+#lM;I8Dc5u2}e zaFk)(xx9Gb_WAGmZD072pZnnL^J-RWs82h6>v(m2>&zectk3*yU-zfK>D&IsMUUHe z-+g`Dk2}!amURIQoJAYgr!_{gEqiXdZV(@w&_U%%4fkx1k#FPcqwU9*q~{46j+@r9 zU1$D%FuksG=i6o@A?@QHsw5rr=Xu#I-nX@JZF=54o4t3lQ%AC>qea^oj4p{V{Lu5+ zTf@j2J194N(m;!}CUMe_$1^!3&#sJBwwWZ%$S~zBQjM~c?shP&hT}^5wxMJ{SA6_* z!+p8=sGP|-ozpl|Ew3bIJ1xQ?FYKTigDA#Y^2EDVCdZ$1-}1G&zW2l3w?Fdk_kHQF`@ENY#*0oW zs}(Eo1k2Paoks&S{aC?;>9L=IU};Jk0~{yn7Sx8RYmENVwq>XHKs+yNzWP_#uL7Vb zjUpmq99DcAUzGl`)#l4@RQ(u?PIw{uLLbaeh7JKN54E!A^3MDT3PMWzD{i>Ch(>SO z2`dW($gZe3VnQH#RF_G&h-y?Iw=zD`8TD$oQH5#~vij)s>;y#9g*vbP;XHjt)Wp6p zbp0lJ!lztC)B-Buq8_ba0~B_$E#)cUWMLWtJB))71cY@AEL;H?jH56X+&`iG0z?%S z7ASV|zO|Z#9!#K7e?m@CSM|(`a)Bx3^h4N5?{Ue0{S5a%XdkRpAaG+P2PgUFt4X5> z5XMvqZp;E-$E!EzDdXxE8{M{w5Ie8lrwvvQX1B4sn!ZHd~h+Dgd&oG*3~i z?3LCkuTMCfU0z(g=JS8oJGR>oJapH%7CvQYt0JZtca@&r^>hF7t-tJZUi$5Sxhy; zrwEl?I4>N;XU%Z(eS+0ev%c{^UCU~l`_w#dq?@zt`2VVOpf9y_J1zAj|!a<8F&tFnXFmh3esvCQ-W=6!$&`RVL!dkj= zP85N*7(WgUqU{!C@Rb~hm?(iunL|`3Xj<u~?z!v3 z?|gs!!V|B4&C9;(w|&tU|LR|Q*Il>nx^>2z25un5PyYGjpHKez|N5s4!ZAj^^7846 zA9>?jzw>Xt{>?x3(;w~o<1hV`zF!Y&F+(X-M$m}$e$U-^zx{3R_$|NoKYHz7{-&od zo<2J}XCjlA?g>QDoGLX!kLzWgXy*_P_Nd-q+3ZCv+|25;Xx)o;tGUhPMy>e%9KK%1fM&GM@E zL5Pp#&6_6sxR5grTXq>`b%JtO*${nCq_}z8`@SXLd=i~)+%V2V27B+@b{H47A99DwD0vt6CE2ce($tb%qKS8xtm;duJ%HuS2g zH*W4y>vzO(2j4N~86v1=#^feLOY*eOKbLOd@vDUtkO*pFEoKX{J3 zY@SRfW{evva+%SIU`qnH_e#jnCXPX+nLlk>M?4*N*hWfgd~-hr4I(r$d65}%A~0#= zi(_*SX=xB8BoVQlewWvlw(Q>$w7yfBGQ6srBa;E!JFV0BVQWapc55JIdZs^ky(+Hl z%-}w^eiSv2yH#BS9CP1|87usV?ATcLBEsC+Id_QYc*?fB#3Gc*ncm|E~9b z@ap2J33zz+6|aOQ%V-P?u?od-3-~wjKwt3MKjZ7xKaf= zks_!9YfCDnToh5rupdi)LtbuD%(kqgK2*M$ZrLimPawd6%@hjDxW^5;-B*T9j!O^V z^Cq=2Q3Zx2=3=4=IUAFnSpj|Fewxp3xl@{0r%GU9j_XYFd~R77A1rm_+-4YUuPY!r1h{c90OUE9HZrE8_2R?5OD zd774LCj^NI%BSF1QG71L$l7ZRN1>pL{8=w6&|~IB$k^Zo*F58+gyUIcwQbu+e&LBP_>!-E$L0R$ z^Ph8Z=ORzB8Z35Rm^VJ3H+tLQ)~%BPzrMb>c;d<9os0hTI8L|sYg`cD#x12IXRxt; z#WyG-6AUfcvDR5Wn@Nj78joHHj{BPXj$An=In4JCo=moInD}9uhu1k-{87<*vLe@` z3?g-IA6DBtj%8{&CV2~`$a|!ER;4A~xaWlsn|2ccSb@?(?6wL3;NE)_@MOTpU%B#G z(t}hYz>6eR+vvhNemr~?TG+cXJFJmgcsO$Y-h=%$b;V$#%vi8)Bs4ncN=N&N);g6Q zci9}^Nfe|Ed$Cz6EQIjEND9dD5DBp(S!Q!%q&OI<40LZ~2t25RR?H z_Q?VpL-0{lks};Qgxol_+#6~!R{w-5I;X1OH@}XQPDlUAK>Ir`OxKzQ@A7t8GzK|i zY(4A2GfMX9YctanI2+RHj4%EP!gh#6(;~AAzUTGU4Db8$pPW1f-ACz0nOqR3oKYp= zA-V}UyxqEW`=0aL_uY56b$-&cWA@GSToA{#z{80q4nHmX;WWC#yMO#Gf9G$1%WwMP zS6^PxyBn>uqe@RS2pfq$o2uo82#sw8+BlW1-CBarNgrV&UY_ld`6q*$x>qS9` z7r?g&lIxF<49!re*^?=KSpq_&1KVF|0*P!f4}o+a@yh~m>3Vqtex-WmsMFp$O?NC? zDviilH;IQ%HO(=)+YB4@hw|#qn~=E?ZB?t4kI~l_R-~IRk_dabuKkU7h4$Z^E+G$t z7rZD#lB?v`(a#TO|MFk`+b{X@-*Uv+Wdv zonqaFWW2r@fFuyapk zGJ^M?gR!uf9Nml#dIi^VD_jh`)dPH=ohTMDAl6 zu@i*e!5JM-KkHY=-65t4*n4dGau9SrsKVCHZ{PK3x(14I^BZxs6jN5mDVcPn!hMC3|Ul#&T6L@4CBj>BxCsZ!&Erwp_TyH!0Sr88jSXtbIT8zVW>WE*Pm;2NPY zqf3XixuK0U&I^VxiEUxBT7Vm33@3=p2Go*&OSIg zNA-)=QmHq&FSk9Y5$c-UgBSNk%xXeo)|oysz#jFRB$OQFl#*dEg;Fj%+Jo=^P_M6ra$o8zxjXootIaa2fTZ6xP(f4aISzv-Nh-~@X_-8)dtOE zKI9Ylk+NDWm4r6vPWv0a*)YYo%sL3y7<&UG|0U(u&T()v7LRiso0Yu(C7s_#sm? zmsl%`osE)t$!N)6tp!GGQ-Vz)d@)}!_sVG;t)A@Il+epH=m}&dw!7(1MM81zg{%rg z^8b}|@j+g=O&mJS8QD|Wq?-#afBTC@8VbPO#V9P%xRo_gb-skYWDR3NM3+9Jm*1ZI zpf^p}vu<$>#az}kpEvAsyFOmux_$c%Z+`1n{Ek2TzN_}=r@iR-^izymk%i|w;ZU@Y zwBg-l_Nipi*{f~>1Hg{p>OkSrI55XSGgdy8L$AcsR64FNo+eg6^ciC+>aV+5Tc=}WH#>`a_jxL(F9GV#*2 zIao8QJw#OYiv}Eh6%cusdn%c$xJsnm44}%Y>880nZFJJ)eIKVyyKLnQMGLRp@ab6h ztmt4dL4dLEV2CowX)Y5oIkL{4IaiS@gN7h(g>d4FI36s(WAGCV!zgfJdh0hl;4E z)R(L#$(dRlO)|O!e0c&F)`|lWG?=@ZU(s1b6D&3bjjlmYU!Y|Xa4lC;^V2%Gs!X&2 zbT5j-NWj&WM19^0HAF4!G>45z+rk-gmtJzaqCPIr_+O?BF&{m0amSEenM5wb^xpY= zMK(?Gzs9fluFjAw)6JPc>k3h5ZS;w<2zEnS7ToHq2*U$R+y+UKgA7ou@}0_#lsl?O zP}WWI$L%-4p{&^J0RBWxiULZTgB;()1o#cN9!fy#Qt=5_(ta_|M!y|WS~gd#sY}0> z$!p`e^CB1&&!s~jLs!=M!L+I>vtJ8vJ-6c%1G0Dx$G*;eY#a}c%6LtZSXkaNj*qtqt*Q3I* zMV$z;dH~h1J5mD#G$v7)c-Vr`szPT?&Z&*GZDqm?ApmATnZG=SLln_yB#>*MBq~~> zGVREk&yW&g1Y!ZcmXV?b!u-vhj4qY>K=9qD;tb)Zj0E{<~sRvuygCzf}Tt0?qslO& z>1=6)vBhqP#wtQ}@#Y~j$|R?%XEQ0*HzX3}@Dc!bRexAH^|CZmH;~;z3Tl_SwQ`Rk zHK$-XmY3<=7`YD%SyCBN_Di1=NbyoxZl@?tx%H{HdS?q|^lR|F><+)@YSy-KpA*z> z=V#k?_`th=?(EK;Z~G%(^VR>wm)yCyxP5kZ+R$XuXE0rQUT4%~>m}|t5QV()q-x!l zb=1bK=tBo{y{NRs%`A{gkkFrD!z%n&@ssn6yNh}%`=RBRJude-1L1nrOi}6!B>IU! zXL_d~hLxh3t;Y=H@NHV<8)IMGs4b=`$`0z2Tm<}WWTZ24D1$YlRJk3#gF-oHUoLRY zI`bwI#Z;hIakMQAO;rZb-ur^ z1bN16HC=jyMPfLrvWPZiK?1X|Gu~#i$2rFZwv-STMaIoqP)A{fwUI6+P^7;`C-spy zXk1*%I)jV1X5zRsQYL0_xny0|EX{P8{hsvec$n+2OfL=V`pcF2FQAAP85)`BL~o~8k5Ur?=%f_zCXITZ*Qt3Lg;`xtnGtS6GoAk*L~N(W^$KqqZbM8s=nO}U#uDv08pE|#cD!cXj4nLn zrSh`{Qn}*UJfnvKRR=<1EgeV;7FyD`M6nn0q&T{gMB2%QZB34Hyrbh>d`fW>>P+{% zw{{2?=5TvD(5lMq%!qg8Tze}w)@ur7Ld*6@wjv8WErhwJiKVN+Ih%bv|Lpep+2Qb! z4?Xd*cfRvi{L+{Ir9b-(FZ;|FU0+@w4yTW7Et|r`BCmW+dHjWFlsjV%(+l2|O{TXj zCpd{xJaUG+T6Jt%lL@aKC=o9{UhC#Gpo{#=UApR_7rgdjcF!|y2_7`%vbs#>-h2pW{3phIV(vrnM<3A zA-l1UnrR@q3zgVDL!}TZj=!+n3BReVq?ZARX+*--Fau2I$$MWPqTfe%t=(1xiyMVY{YE}r$;*UHOpu31n&X}MC2n3ehSVO>_#f5L=Ez+oE zK;F=ItWo6CSS10H&pf%S5h63NE=yP*F)8sa&(zGT9J})6QgVzTU!{gW!BgQy(g3mq z%Q|F)rqT~b)QB4pQd82#gMsjpm0=NX)_iE0<&;?nNt>yyF~DcZ=C1&c6+_b#0!@0% zCCuGL`M+{pVCGm5nzR+{V6tq?`oT@7C2ENRJGOruy9wF?c|uZRDRhPgWVCrnY%m7w z91Zn2Na?kMZ`PAr6={1*)cBG*vd9<%F*R7d~v=uX%OAF#W*J>_1sE5)9_%a}Vo#&~<`xI?b`!&BJy2r%a zYFp&dXmm=yCkrMKtdT4Xc$v0kKMHH*D<=Q|99=x1LhjJ|R0vZ3l&VKNw*0V=OhFDx zh}M|!oErKtB%@W-!7)tLWB$1Ahv2+2<8+q^A>WSoR4#Q)-u@f9?BTKROmZaR0pz-+T9c_nsZHVP0Z@pvOY}+K>};L@8nIbrWxD@qP-T z^H{*(?#Ch4wg*l_aN2nk6IDy&TZb(4Ou9eNlzbfEtI8pM3oX5UM}u}kgCG#dstL<( zAn1Rw<*@eI8YAIn=4{bkW{mvcY`lR2%V>4KP(w{03;-$(8qTEjq}FNC{h+^)Be3kG z4(hSDY%;ND8%GJt_)&)FSr%&Sriv=p;Ngv%>M^YogfZz9)*qx(@7NV*%f;aVLpSqc zQAY^{TjVxoOievKCqHT?JB|4?p~;aN%9YMTpvj3jdX(hTW}`y|%403YN!5d+ZMx5d72SQZTP|ype(ZR8HBFDg`%cwys~o+XG50aj z582paymIgRty|}Q(u?T0K~QbA+4?%{xcOlp2W$e|2&OP#R`!QU86EPpjYBks8*nUZ z95Y6N)lajqW!eC{Hclh&SI7OyCoi6S;!gYc$K(3)vp?%4U;mX~`h{Qe>gPW4;Prky zjc9Z_=|R5%XI??!WFZOyS0mMmRb;?r;Sd#+xVfaSPw^_tDY)Az>%|{+y>~J5&p;_P zK-AURGzI13Dy3SvscE+5A1k#jX4#jRvg`|f7PRa$ZMR?m`W2hQO%P>D-WlWsmYV@- zETa{`ikh%_CC-R?^mFG)>{!-_^q|~#3!dRAOU*{t9894`QXPBNXUGW!TPgFq+)nM( zx+Aez6`SJ;aV=h?6c#NKRu#%zP$9AWq?-5}hETLsmHtw!OGh^SmktC=VWG7#{}vUc z&kf_~>lq5pqJ(;az1oOS7%q)b?n=K-FCnrXtJnqDC8?!0HwVR`l<$^AlpU)77a?B=lG_D8?Z&)CV=RcFGmp4VWciD8)>B3JVU3JObRm++&ueZz zM~nptA;eeJiY24;h)fAlL(o zA_SCdD7y?bVE}%tv#OI>9*a8TDm#A9k zT&xyRt5_vHrU3`c%c`rjM?y#vr>X0n>8$;F-%b|x);Y%i^wsr`z3FG)`nG?2@$oy? zPhULs)W_4m9`@rgL z36Kus;|*eC$3ZxZ%f(_eIqhi7m&Z9r%S&?Uo8M^v+1qwFy)KWALT-_~KBiJO9=sgY zCwV@t#78l0%&s2LAKMPjvGtI7_Kj)ojmk|cW-C+-t)iylb?R; zyWV%--FNR}->c*h+Fen%pn9t7vG>z!w!3a$JbC9sKl`rF|D2cphF|ll>&xpgm1FW) zzTqOyAydhljtrWxd+K+p!l#t@<~Y5>J_tLn$psiXOTJzSxDk;KqkF$G9<Lf}4msivQuG(ASk}0T$7Twbf>U3&)g5(5z+x&1iTiMi4{`use z|6u==zyIlXzwcYWu?z0#!>MJLtGuy)`$k0vK>wm-#+*=@42_xfAjl) z>o3+ z?g~sy;l6QcZ&(E`Yjvs9%1&8Y#C~CGh3d@8&DRVyY|VE3E=%>?8PgW>7L!#X4S_Yr zRkLuGqzg2zpjaise8O=|W9eF6-!COyu-6=YF&9hfCG;6LrFe|^1F40PPU+ygBzQc= z&|POF$09T!S6uor==^>>rrEY^0~Lp14>n=5yx}yjjL5-cIb05x2V3UhrEyP34k0OZ zmW<*oA%z}!liUKbZ^|L!_c+*)Nc=vgy}q-kDW)dvX?}< z>mNx=)69idH`$Xt(37gOQIkq#^HnX!)Enze$1FD~SFZLLM$41IASZwoaTL8rl?%nZ zOmzJJt&D?(8ro)?24BGKbUbJpC4Pyqs>3&TRuv*Igy!4QzAyx{U2Pu>6>?e0KxZQn z!a38>d-Ty~J?H*&byXj>a6F?|uU!N&I`KOWKi}x@rU>0@#6AgOyQWaF$kH_MqZ_!IFBVdRiR_BM0-OmGpX9-u~ITAxJ`B_Sp{A| zgE(W$%kB>>Qk5+Z3O1EcXIjWQ(4MZ2OD-HNMq3LJpW*h&*9Hrg=ox0*CXX#6l6XfR z$*}1YIVk)kI-td&{iY@x58{?Rwf~o|Hv!h|y2`}XKL2!wH|kBAo@EWTELrkAVHrFd z>;`NGn*eS?fOH5AsR}ejQAww}x~r0O6-la+g2XA3Zg=Bm9>QcAY~;o^wlT&C%aUbV zlBK8Ny{9+cci+ADAI{l1d$09;mZ`peH{{I>FUVE)?eQWK#*N&nym4uW;Bu7j~ zYs}^h2!MNVkw_jB>Xnob9k~kCD$;OXEMsREVB1(w=Ta~bWsOzM!)6K-p{-EatPLH& zje(^AEASR%cmUoxtX|K}kmg9OJ07y_*5J%W+ptt!r>hY09FTc244;t}=SU{mN}`Zv zv|ig-n~Sqi(*6GC8WWN*(N~#T`J+q$GItqd%Td@O32u1~SvKdMS&)~@0yj!a2r3Q@ z!6@r9IUPu?GB#>&qGP}`4{G{XAC`rjfjvor9EX6W#|!KtOB+_VVka~N!>ukySkK7^ z4)y}o$egE%v`TCrIiSf9otZ8hF9(M~%dqZ=G@GKfzPNQ;#Q`KoaI+_GOsze`CPENk zl23gTh_o(N$ce_K>Z%?|SLfGtbh+&&YZD~0EU`OZ%tvK=L9$Yw$pi^(QJ`!xMF~wV zzjk6@npO!mjVY7XEPq{e-{{gxTO}9^w!?TbbXvP5%GpY(jLz2PWhUexqbxXH0jwe+ z_gPmZ)+4@rPiv<--9&&W2LRfpJnTyVw7NZE&ux;0TrKl*snuBMCz-i4pC@`QOkP`G+u4~v_l>7-I<)zJ{7*me z?r(kLG|8fE8{LTm2q+7C)wnW~jaj#iCtGXS)OoVHJ6B5tm-GLy`OdmBctI-jm_~JX10NPp7O* zg%G68gzzKWV5WP+eWlI& ziy+YG1n>~}Kd^{wo+Bj-Eu}-5Gtf)+*Xb#{>Vro%QW%_-6V`U8gjmqjD8&Io0>W#{ ztG|YOWT9xGvJ`C4U4Iy;YqXCsULpyA#Nh=9p{@;fyT<=^v=wLcd@4;Jh<@8S)CAbTLJS;&M(1a*W)-v=i)zOj5Njye2~-=*9#)W&w=w2}0<% zB#KC4^ORoLhJMVLB-#RdjYVm}nqZp#iyC9Js|;1MsYvyjRiy#r)q^$T$>f35fVa z8Mw6wuFfFL{Wj3L8rbUzCTjLb_HceS64Azn(F0T+LtW^@1S+B|;#$=X*GO19^dOsN zS#*p6FlpAj$MY;n66F>!7wIF5d(b>G4hA-v6MnAnaLcLgaH&O(a$4mwvp1fMdopz9 z+@(MGqfh?AFaGu;Pd&Z=T*xf6OgPKt}#}x|!3=E~o7P$gU%;{GsI2LF zzR5Kyka7zS7;=&z7Pr79gp#(x*x!aTur`xPR}Z<&>_mg@o6$AmF?A$yTpT2jf#-jgl0DtVG96 z@@8FhdFrYZ%P;C4rr``B8k1lq*-Vo&As$?KWw%#09t5tt#kK?{j#vHMMfU7-G z=9&O1S@z0@$^nMGbD09Y12u=n+0ff`+;Dn|zL$BF!1C+04L-5?1ipjq6z=t;4Mgy* ztX~^zRk#QS-U`%`V8#>;Gg_|iSGLx{+`$$C=>qHnXvEzek!;XBOGsLw0Voz;o{<%? z-FiGmFQI9CSSW2JO#VZhE@^knNehwdej|(MQ(7+D-o;HOlfJj-uk8Hq|JQH*=5K%e z;m1!MdEpE89Y35FtNC)p6WhJl8Z7Ee(8!2j|B&%`{OnU_cb`4;z3+YVKl|Aa-t(ec z+IH2hR%K0wqmm;6txYS0(1xIYF=DX)cY-zI+31qwpshX(b|1q-*N|Xn!5~7Tf?})r z*brz&PnT7?y=!VR7>G?%Hr^4_Yb%2i2v4#YT^r^7$oMl2K}u@$R1Ooij}bv06eapV-s2wtj@Zd?3@4z8&{wZ zIDa(8;E51KYUs%$ER_u*g6SQdCiS^oU)N_)jqsb9s+XMsbYw?IjToyjppr>4(n^P8 zadJjR(ps9dp~+)}BuJ;|TkKN|7d2XQPafAAEwO|hu-kNm;Xkrj0a}z8*bxevYzL~5 zUt~H&#j*-zK8#T9+Phk-AVdHJrWmRFW_^k90z|dpwJ#tU(s76@x+^_Xz|4Uw7& zj4&N|CuWpzRXL7KCa7qNt4z>#?XsP%umAkN_`m<>fAw!)@XfE5>7*wVWqEzmtQL#Y zkDp1~+wc7c-~2QG_`6?z_wDP`(Q4V2_m1iq>t0r7%-DzUlU*M!@xMT z62ea5eqGEdGp#KgC0G|(3jB%)2#>(1%}qoXTcJJKuKQr*$;Tk!NjbjPunzI}@QOkbwGfL2}!aIV8Hci&CbJc{^2%yopf2obkMmbUkAqRpKwT6U1gf9|zLj#?$=QIZW+2xVlERfxD@tH4az$TNO zU=G)Srv!HwTn+S0f>AQufrVitlT)m$!CE(H2Cdrtf%(?*rq!yQ&SqbD;E~t7^T$uV z>fRo;+vQ4&G}lU8qv>?KT;+35Jhj}u`kilo^$&gUJHG2%U$1SQ&*x2}yJE|WaDJ3k zDbKKJ3CJQrJ5A(1&;%aeIOpY~B|E++4$aUp1ck6KV8WneLX@ii#|fOe77VtAXA}K% zl%o#4&3r*)*e_3hz>-}t5|;p0XJgY$CLN#e%!n#n0~FS99FV@#6fY&NbECNiLlZcC zg{43VsBMO_^mLJWc;g2K5ondv8@&ncy|p(On02ez%^7n$#8jqk(k!WoVBoZpu*7uZa{S8z-$lZy-l=< z-eBNBlj$i=`N3QxGrF9+1x@6{fz-((?4gJ9&_WFGYN5jVOpLEkORPy+sVQ&(cp#>s z@oWsVh|z7FEfu@ZB!F;^4uZ*uv{TTxfo0l@l2;iwnYo}TTUgJ4uw?KaF(kE9va?ms z6DKr@FdCdX)J;tJK>{R$!ZZlpDCP1?JzaW$`tCTzR|yceoj}mJLfN$mIpcIXn}mj? z#2=tdd}ITC%mQRo9gC@j3JP5vm&W^n;aDxZ+1l)9{`oKe;=lf#>tFuT#pNxTj4B1u z1HEc(=G-*vQ|VUEo;sbb?A&p~u^;%s_x#ug-g@-t;qj`u-NlE4O_D7d5CDO>j-VBgZbTyiKSJyXKcuX!T7q>sTi}-b zaTPleP9ftxcDE^QRs;b!=n&kN)fT|Li~do`V~+Whsi4 zN28JL7wa$^7l#Fbk_v_JS})XdToM*qn?@=r)4??O%?Nh{zD0mSqWe*hlnuTuq?U~V zXh%`JAlSAy*lj_~8w4{N%ytFE<~I54nO@JPGck$@X82d?40Mk&Vr9^4cF!ir)3eE7 zYE5EDt%TSMCDN6+MOgJ6x)c44C7%&l_-RNC1@+)I2Csu`g}~nf3IfmQ%+qky8z_f| zjQ|apBr@d?nP(3I0D~N;f+S4m2Rh&`k9i0nN?;=~k1j2aQ!PGPOMb75z}X!XTaTKhAo<8c2?G-FJicWx-IIZZO+r z?}hfp_+G?GE5{83N#krZ|CZo~Qy6LFTtIW+Sd6D6Xj;O#T@q+{j;#*L6WWRAJH;qp zHr%Ziaoh82F6-bcj3V$vMc|SID=?SFM{^283~0>zY1eb+d>4~Q)NiBJA;SnfBRCny2pD@`Z!!`CK{;%c(nRCwtKa+IJ@VA!hmRj=7psw#l^j)XU$m~%<06`7G8^}| zZJpn`^7L~XYm*=Qfp2@yyWjYhZ@O3aEi4!Fx|(#9w3uh7IjF{&u?KUK8TX~I^37KH zfP{-dBdUZ72r_j1< zWeAW`8f-Khum{3z0*gQcJrYp|*jx)2g9Zg1AY(9hZVDQ_foZr4=31E2j(0WF3@E5~ zX-U1svh4DhO{a>D_kaGuKlr`B_&2|K|HbVqhfdyj;Mo2?2<=I2tA)QBrVVwSyKfjr zlvTbP&nDd}pMCVnv2;KFec$@iKmCI@9z9elUoG14R8L_uYDOxd!(?a7`T!G1z!t?+ zM-7W~%5NbyxhoJ@B48%l!c3Z(-B}%uZ5j&d$$gPdHPynQ=K_zf;*dD0pg8S$C-t0k z!_LEr!TNi$xdGf{;Wbl+>^_diw!6c^*l4a|>q0nD^1NIK+nimY)R?V4KjaLN`Sv#L zN@HZFBCKwnilczv5_2lmnh^Nuka;es$|-n$g0Y*Nht9MCK@YU8x~hyso2JDzbAt~1 zKve~YBGL<0caHTLP+YOc1ou8P%x-*b6^HU<)}F)oEW>?dWR-o|)d^lYCvCdJq8Yz!4k8G2Ux|pOcg@ z^~B!8u_D6As-VddVmX{L?@c9bXVNPGt_cqw*N_G_&sflq!SvP4(Ryn`lzc~c7*Ugh zIV7CEXZ^DOL&x>JX^V@TC{f|LoGAK7CsL+P&@R6)#9!IYIGch5~N=tTBRTQ7MESR4EEgpW3*= zNt9KX3ODl~>0umYJ`wDt=*96H3cfJ8qis`dZGbGmoC>E?$2B zcis1M|Lq4~e&?;-YE=uh*5`B%wkd@p#FGoK<}13C-IYt!Gy919=#c9ot1C|r2_JEo z3Ybe@oK2kv64q^IX4hs=Vq{1Q*MLikfO$B;3;@so++i>vBzi;CgGQlw0W^r#p8KI* zcuytS@=8Z<6*vIS04uq+XTgSSdp3C$bf0;l0HEeYQ)iog#64aTmyBIz{mpnjNPqH` z7Dk0&tyy4!89vrbTyh*JY({f2ik2f%8CrEEVQ<8eKNTZ9a1NmqRxTQTnJa}nQ@dPN zADFV8=^QXBK;(cf0|b#r^aXyVUA262h!=E66^fl@Eu{gcSCNtgN?|mN7hi2Vb4>wq zgN^!T5#l>XLy!&)oo#8x$qvt`DOhIZYGOf0NZPJCgK4)~o;`D+-P#(p%{$-mx*z<`H@xOG z_uO{V^)*4$_Tg(+uAGc(eTA+Y@K^!6H~p~ikl7hav0jrk7}x>Ez;+D-{sZw!JmS^# zJMc==sH_DmgyAD`n)nu%UdDqVHo;LJUmr6$ygXIDqk;D9y$ zcA&Y$Ou7D*6gE|=f)G}OipUo`aO$;AMb&2~&6CBebRTc=`0Z#^P9;sF@y_1-GoO3t z4?q6d5C6s|wythZ4<9~$!;ya27xQ^)>)P^K?y<94Muo|SC6l^+zAi!^m)iOL9nU>} zYP{XP_02E;7eD_auX^dNZQIQkd(-l+IO&i*bIsgm;FzGs0<72T2b~x1R=qf?7pJS- z*=64gkw~6B%bd986jqav_()mTL&n_IKx2S~Y8jzwusBj;-~|P243GRoy=tJM%fTT1sH^ILQZpltD&yC{hKgUp+ngY?6S}7Ky2id zw7FP&0t%7!H~_#RTphfosgA;Qqh-q|7n8hpu%v zD~0No2$?h7ZIFu6mO*~9goLaO;2;$D zW+Q5Iz4m>!CCRR!0^8tvJ%*x*KYa4T>JEKFX*)UXIq<8$kIfKqcVZVO=VWDf(rQtv`b;<0svf7upMLH` zAO54yed=?c{@cg$+Q!k7C)PLCdl@X3E1eFjp=#@8S1cx=p%uBcZJQ?J*?6*;FU~%F zW_9_>`@iiC|M7f>cncAEfWYE) z$CUwujDe33?w4#+?f9|oWOonv9nGM(%9tkgIL8;}WH)k1Is2?#VDV83Q1nFk(?h|< zM!6FIR3kwVY;zjgwijKml!WMv83?x-j(frp#8gD3eEtF9%`VChCv#P_x7L8gT0l|jh`j3k=6z)RVX zC({w$?DI`RfU0XLnF&c|;zhW_7j1d|sIDgK^xyz7=iRWBch%1N?Wq57ZML|2_4L=DIXoM`=}j;H zmp}Kxd+)rhZ`ES4=r5QwTFF)?Mp+IgqEsXoV%$EIiG%<}eS7YFVT+i>8vZp}PCaXq z6ds;nUe8`=nxJ9Um(*E}R0lCSAf;DBhsJ{QLrO;^IBSuZFm@l-@u)ddo|S}wqM z#CuMTL$+eBXAtYqlOn}lJ7Vdw$QjHPxPoBCsID5Y!yxD@5^0W5o_LsIQN+4D+^E5O z(UmZG>LGF%E$>Txsn2x@l2U4Z9n}qr>)a%PHw2;~U;;zrOlnpMBLsB~xr2lOP=C;% zyF`a-HFYXoM;+mxVJi^Zf{Kvcin8=U?y_au_=Qaya4Rr~vkfzS5*zQ=z`tex8_Fd} zbx4SOT$5mK4v~f|l6`?t((Ny%l{5i!nq(*(c?y++RqiD+o=iXVD}V6c|BoL&cX8|B z3vN1c^iVH{<=(2xZ86ZKK~v2aDjGMb6q;^EmO8#Pp6d8xZrY4Ho(Q0@OEYZuIn>Q=vS9x z*=CPRR7x0Xvv6)Rf!-x>U?fb}qmDzy&oTcP~gSlI__&>;yS zso`NLOLPrEiKFZ(YT>L+xn2_iNahpJ2r+OGy<)Yia!Ag2I+~O-`O0^vp1ts!zyBXU z^Ot}7(N8>Zb??ghO*b7rvVS(4wae9N(dJRD+g&!Mwxyg!8XF8}D0HnZ-&2dW%&N8H z*`(KpE0?dHd;E#@*}fls|C@j0hrj)mFS)f&xvh$?9oK_?%{4F&!SxoBg!@7T;E)GU z6rDJxnzB~G!T_sgR5chJt&E{??&gYv6cpi4pJTejw?@!qv;%L2@BJM)Y>4nK(qQYA zUBH@zTab$r(pi*H0PsN1vIsZG1TUH-tm>m#nasojY!7^#TPJqjlt?TQps886OPV7` z2+ErwUH^Z%%qn+Ug2gDgrcs151}5L|nmB+&Yk;&%%<hKq`0;!775;r`5S$j zKT5|2$*DkMYQwR-l?`E%7)rRK~kmAMLv$I9|i(ufX;*3 zhfoc+FU|`R`imU^xP552YWUe-nrxaVN5~{u3q2UXM?iNDDC5QC;jsk2f@A~oKhGEE zpsnJsu*?fW`Pxwnkuay8h=`IxZ!>`^Fl>{K2KVrM=xG2uJl8G2(N2}QYujcvyKrIa z-+bhcf9Y2~`pl_w&5;8qPF~+@*m7sC22f8DuUih zBsvhWXv`70+{z_~!}`P>cKD%O$OqHkGki7-$QygqVh0Jw)B z&MhN-mj=zDm6~6{lCa3CU?DklscN8R8KfT3F1E#}EX=G*-_=9ydwS9LbG}@hK6Bxt zpZLNr|LT7@^XOAgU7F91tRFdk-E4Dzo0rR-WqD7@UT9r#GaXwjrf=uJ&w^z?MR zzBU^-m(E_e`1F|*`__KwAAaY5^PhkFjW-@krFzRsOD|)OG<)0-cFKQrsWKe3_{a&o zbk(6Q;HZN!9C}7xHbr$%6IF0AFO#i&vJA2)`X~S#+!4JG%)uXC?>1y4!V1#ZgV3L0 zCWds_K3wGn;Xcn8LB=c-Lo5f=dKId9Wgr{5HC`&X$!sQP>~l9-r1NBq@1G|aF@#+ zE~yf#;O+Gv-MlN7F6u(_^l{~U6FW);-Uf+ooG$?RF3-71;6+%{FBU5J6plFdQBnfwMw%u^a;lYXrtDl9`WskY4ei4PZb zTj=i{_Vo>&9Z?tBmh9?8XJXIud{P9hs7cw2&}6M}iVP$du?PhoW{VYHX{?zwc%ZWa z!!$#3jZC?ZU&oVa(=@&B|98Lj=fD0NAOG0r9-i%+9eTlu&Dq*wxyY-w9+6QB7c_{U zpyawRuEBvMlH2;!UJpm3*>tpQ+Y6VjF3(+DT-`l#{O}Kc#~WY!+LyiczI$&xa#-8n zl}!o#D0ZXKD3#IFg)jb%aR2Q|uKh_!d zwj4r|$Cwum`TzhR07*naRO6oSjaA9ooIm!NzkBF`um9Pn{`RAv`a(|_C;JW^IB{_Q zzKvCz%9@G(e$;yS530iiM8#*t3Fov-R1c%Ufs8U3vPsyY9H*`@iQM zKk=jQJ91#NSF1%iVYTVoV4xcfiA>R^lDv#b%6>|0D133$WvL2ZhBrukVW*V!Aw|%-Y0Za z*do(*NZN#B=TQoYs|2Yd&5&f!ElmF-GB&@8WS$vfYC@JFPHnhN2F!Fr5RW1(%M8z; z67<}hYXjvVpi$Wlf*(ZWI-i3<@J4_=Aoz7nonu#@78NL9Llz z(ROgTu{nOHeTY%1UueEJ)OC@GeUlz%rCkj;aOG317@{!6j+lyg1a7Wtg5p_a`pSsI z=5}%pV`)a5I|^5VPh(HfKLiEnsc?nB;C)rf=D!8b9a0aA3ZMZrPKi29>Za#kVwtMg zPH$Y~h>V6Oy7QR43;swk!$#BJ9Jz8b>1W%QSKX>5!LnAs%;sn<24i^XuNR~-@RAhD zSPy9WK#xH^J6r0E+x0t)oY;i2Nln+Z5}n)uA!Vl8=f1@hgF3{B!`s;@S0xJwJ z9iM5Pf^Ea1iSs%^>GHE5kNNazOk>te2HhOS%vpWl9uC^E$fx}q)_t3$}=aoK&vMW&1^cGG*_?e zJ@?GH+3xO3@454z{8!)c);GWA#Nqv2TYd_}jYbZkXn0~QlDOJvs<l0}i`J4e(k9?y(Runn0(ji5h6g3+7oC!gsEv)v1;oY|-x6L0yiA}~Lsd#-QK~&Y zMA-}^*_J=Ty`ZQPI4vDx)(T=l?S%4UvcM^U_}+?!suIE+JViK3srI9(f5E0SD7Y}Q zBwTf(V#sKL8hUv?Y8q#W_YJ__OxAXXrtp~vl{pink~%jW<>~_#X-e{M0!dLvWo7|5 zVpmjMfPx@LsMlVyQ>(6RQZt#9%=r^fp8j7x^gAE@)6abU$+Mfs4<9;tVl*CgyYoH> zu3~H8?dlSB(bNN6Eml*eT4Z@%mdo`q^SF0A(sq}xT)A*zYqqtW)A)rixc)~!@XdGK z`Qm%;x~2bJb*U@I#MW>-$+*s~V53?_Le@|>2S^1BQWlO=HhR$7Ks<$pM3`}W5uiYa zl%C%t#tlrr+_QyExn>U7jKYx@@i%JhoRK05j?x@i4A&981xEl*RX?$_-Fg0x>TZ>1 z>PAvnVma5eGVF7gw*Tr2UwQV4)4%)izrO#oUuqXSi`jJZ!2auw9d0J$)ne6_e1rLbK1pX zIh~F$1H$OIh_RzPz?gRQ2Nob^DzFUPonW3|IG_S_MT9~MV1tyRkr^cf!6B1#h;qM_ z!e|DPoluNF#!lK951H-th}v8mtqF+r(KTz5>41};%z)h7nJp%TCjw2^%_%Z)Qz2L# z{6zOlKV=Q$ZOGD5-1KBH2a_`+wx&7&VGsZrFf-vYO-LySckY^YSxSnjCnmPx{kT6i)DZEL7P3?=lv;ovEMU;>r#0L5eg?2t@mdS}%}-(r>z97dm6WJGrAxx6mD8~L_G#Q_S2BAZl0s{DnU+A$iMlKDWV*k&khXao& zLQ5ArqQC|pI~o|h)s7=g>CmBKVgAJbiil{*Qm|L;wC` z|MAmb7#-Z)JbdWL(Suzl?P6IjO-*N~!6hC;(qWMrnW2nJ9Ss#|sq@qmj>#xD&2rIg zox5=L?1gT=y!Dpjue$rT7u<342fq7lues}%QOV3(9%;FlFIR0-Yk)PQlw1iA5rt_g z^EEoyvD|8I}Nr_TM#@818&1CKoXl_wwg z+EYFESU-Gl6SJ=cm$X*8RT z$IaE<`MJ~Qy9*a?d*LlV^$*|uj&FP2-M60X8_@R5aoILy5pWSkTW@J%Iuu3@ALgP^ zR0$TFxRr63Cvf3a-3bTC*=iIjz3qt!0e8hFY#Pqk#bo03bco@xGLey(YmeSKr7%es znq4K$S#z_QT{a+O4C;>+@QxG~FM;cN;IrA05c2)^8w*wbG@FwL+k=y-SBsdk->X_&T06TY>PLbjM+d9 zG~PsmSS>JRXEStjB2*~}YQeW5P6$Ij*wc(BcEh<%vm2pNxyQ-;-pWwaGp_|4ONUUS zt<2n@&zk7J2sv#qY?KH21f(9y2aTPspsMU60`d^p4;)dwaOlcBroeABGI!GnY!XQ$ z7ie-RCYTm%-OK_Ft_!qufc?@sT|)Y=ghUI2^ucWJsS4c~k5^sy;8#!mufOCpqnZ#p*KSX<2(Ghb#V1dkJpO{4PmFb}x^7iYxG2RrQZ22}G`3y7 z8l)9(t47?xPEry-KcuRL)#cHtxGuyDR16MuxvsNAt~_cH#0t89fu{s_F&7$rPvTHe zm3(A<7R{6;nX3`(<`i-Nm{B&se^jq=>T+rNxNyWq_4uiCm!AH{>90Qg*l&F7Z$AIG zUs-N%UAVev4(va4^uWIT8@c!TWnt$+Pf}_;3tJxC)){RTMWaW*S7LzOqZU&21aP*o zwpevr&z`$<_T2UR*Is_lT|fI%AGq)Jch073{U!6oveb#?5xqq?x}4qkB4h-+NYExR zI-jA`R9rInHJW`05dkp6ltt#PA}OLA`=D^{?jt)}QYlsFv&5FCEJUz$ zGf|rrV~F=*HixMjQUr$OR6-`LER$zQ8S~}YB0fAB9KcR9;E2-kC3hH!Gn3d&fT9WR zi!e$-02pGbZUzwZkqJ}i?r^I|S@pMv#5A=VK`@j= zNn=>>Y=rn3I7s~n#-LGA1G#aOJzjA&^}!g3OncrXoqgig6;Vy_ip@-QWh)`l#Cb&O zzZjpf2!XbwZ&YPw#y$hv;?!csfq@7bG(2Xu)zi?IsKT%f#e8@&2VVFo(&b>Y!qQz>-z%OO5J8L~ z7^jX)<11ZC*2!w`ovy1a>7cSCZoD-Sg%!kdHnR*zxeEzANkT_Pn~+| zlMg)cjmMsACX3nr{j;No)(@<&RjOSM9ntwI?MP!S$~jqNlR16DP8g15 zcQOziB8=dHow57a3In)oX-($_7-2#UVNGD;`pR(P08BT65V;H3C-^9|6codUnULad zlc-lzFVlo3ktwrb4wG1d>F!gUpACwruyQ|P3~o}-Jw@`IhXgeNMZ_Q^6ZJ7HMkpXr z1Z=PZe+~@Ln7vi`z9!bbcG{Oi;|LOIs;h-2I+EPD|r9M*GlOESC@4yim-J$3B3XiUdc zL`ZCip6i}zZ|FjOpL=RSNN!0UhV1BD>hxFu_1iquHwYS9Rb6ThOBLX1iD8tNp^qyX z@Wxl%S<=UPj;sS*i?JL41cq58^w)dg&m@plPQzt6`W)eGVn7(f2OAp(Vqg*q6-@K# z@FZOc6ngF|#<5MPOP1N&$R_PKvL>4WVN6&-pe@<-W;~mW=kw*$&z$}BKl;>%Kk{eK zoIZ1%_5ytcHn zX}a=DZrZikEaj0(ufOfW)|JZ_x1M`$`%gag#rr?^(7C6d-nwx4%;ovAk@4pGp+oyO z53Hxzv?nL+Vp)hq&5XkbzTwnwX0m)&uxQRmlWECl7_bkL#8a9QPw7sH$+Qix#x}A~2?IjFqwvA{9SZ)^ap7 z_Ws`4xEUo`we!72|JdCtyX}=LdAVq1cH+d**WLTV*S_?&14j>@IDXyB@45ZXTdr?> zp?R{^Z}p#cRZ{@Bj89!F@d)tW$fnzIUm}S_aE_Y~>ZIl)6wNCvK^#lU#L}nBy$xOx86O zH{B?@g1MQ|a2gyIM@gJyFCgD==8(d14ER z0mW`(pxI;hfJTuQWINz0#iuig4B&N)<;S#tx@n7ilepa?5YT1o!sQ>*S%i=93O^0b zRoBFTB!5b}R$v@NC`*F@@($>#YwS0HU)9IS7yu-G&f;>4iF;{fCy5b zWN%`a!^3WcT8^u;pAu7YT%D1v=$Rm3s}jNaB{(#DmmR6Wzq1$9qhTf?0V9PYa}V530%kGt z3QZSm(Sny3I6t3TR+nIXijT6*CoP$DIhNehSNM_0~=5EY) zXXYcwBJHqfjxOkUpy(n<3k#m;0VY%{=rz7_ddP2u#KH0;Svbh`6v{f^m%RC?;^JoP zo?e(@sMPd%q|B~|4T-%(d5^~e!l!ZcoVVBZC5*aQvpi4eApsg?SJjT>+WMw!K`or1 zZiTITR{M^gK7aYaFF*E2AOHNX{?`3l+gEnSqa!D-+jnq(Ga9d!t9G^OLLnNh=ENAn zRJFz7g`n3Z&a0K9`Ww1cE=%r4c|56qk49xer_IZ&yL%V6cJ~%}ciy+{h9esv{xNIeW)pu074KS2-Dgx8tQK3gW{i3%!HnD+F5AV6=j0b^-pWYz2Ig&6WY1FbMD;b(azT9=Ei;Zz4}Mq_sy?(<(;?Q zbX>|drIpm$u#={+Nvo8UL(uLz%sC79e8?t}*d)4t+sqWWg0C=6)RkbTv{_R5=h=k6 z*k7mC0jAA3-OT_&A65eJKIcorr-$!5Jh5Jz5Lu-_lR&JJ_ti2bx*v=NsgF%uXKJzo z*~(tlD$uJ0FXn1&Qf8Z!xu~%#mx}XylDOx`JLz(bPYhxa8wqrlWt*M;ONLk_v(`2d z02z_S&T=&2;00hZp*b1UK)1H!0Q&-j7E(FMnC^!A(h6fny)r7zx)wkwFja+12cj`< z2O=VZBhza>V;Ll8vxXw>+(2>AN}gw%JiCMJRnSoKET|F(E|{R0S94EnGH{Y)s;+Tm z7*Hhcthrc~ov8yZe*SJu!&Z5?HKy#t2WgQ&nIknzE?+j7(GOB(BE0;kiY{yAV7-(z zu3SGzXS^9gUlaVWa}x{!W;-}zmBNs@iJ0Qy#R5as&N0)3ycZ8ZL{d4JAQdE#?9gKM z*B%n!KQw=RY^Wt7mY7!{U@|S4&ZO)k5@0IV6o%t~zA4j$hrn*P#u&l|$pZqjAMj@c z3r6{pm*Qo@wS<)QNlPh{jcdo(TQU(yW{5DZoPir+QxX_?BLNu zM-Lu2a;X1uwlSTC^=0uVTUxcWr0a|+BnkV5kRZiL&#;)fh9)Jqpi8I z%x06e3ToM{dREf4ZJE-jGZj@MdX`X@+SWQGnp^2eE0ea=ScZ_Ym&@CFY)zRM8LcGm zUD>_#?AgWE?v2NlC;^n92-}Eh7mL67{(TIObcB;!G$VQ1WTEiPqm159acZ@sY`_ z1CbayYPfV^vpfiavloHyq~{j5Lz=Cbvo!9AsBD7hIfxL(>0q6Ma1DkyC8Eqo={9pI zi46>!QZ!whC}C|a;>|ix{|zpK5wQGDgb2fNwySkJPnCR#P?2rH0mr4>Q1?xtz@N&qu7StXM11oj7r4|12WblZ zo0XJ^bDjf2p^D-uC5{w*F5-|TX^KUgT~f%k=a%H`F|w{StI7Ro`x8P9fRRm zAmDfS%>ywDjfPffAt(q5$q{i4X@%s5AJQt`3IvF*wQ$@vN^TJ02L#FI>tM(j)4`NB zCZg)#V4C4jesj-I0BV4sIUY z*tqV%=Dy9f!-o$Z+?>s3)BWqS$*9!M>|ar5Uq({SNgq`LVrTg-yF#b7cJ|uEqIdo0 zuk4<`ymjfq)`jiebLX#Ixpei?h3&=Fow9^sG2gnn`{c71&RpKTw6ojGq>gUeKYU|- zZ9JVd8*9^jYt!kpoSd%0@A7h`DVWYGZ|c4hwMAuB}QIxnfxcgGFwuiTuEQU`D)?$QS^#W+|5MiB1R#p1HR`fQ?Mf69AC7 zL^1&J98sNF13VT067zgHxbtYB1CP%b*`d}fnrO*S02|E53>=9;UuKO|K)Hnz789XJ zqY2%-79B$f=4j{%NR>GZl(J;5M3c;Y@bER3bM-V1^VjY*1ArMOX5hHHd5MgXO$(3J z_|Lq!`X}3qi#a)tLiWb%h!Ge~CQuSlS62_fvjR$trzrvZp=gr7qG7^;1{J-uiGZ^p zH5zXidv~iP!t!CyVG!8R#Ki~ViBogp%4@rUx0RfNw8fbjdSc>IKV5I@n7~R{M_*Uz z8#iwPkAN{)vL!)LwN6ZqBBM2CPCl`d-dYuuF-H?Sn50v!EMz0lFy`XHz6A1M(6D`-Gj9X1E4MVVEPOu#Y(5WdNq#07grKS~%p!JJDUB z60>sRGd#RQ<5iOO6kx=s+Uo6H;T)@;aE!;}{*&#U-DjS8?nD3XW1sr;=O26O^!ZCW zfs9a(+Afw8PwE0wh80w47AuIn<01vADgi zNgVZIx7gAwDOIS-K9!z=EElVG(bJFRylBom7sXnwnq2Y$lTjL%Z7O|uFQeY^=M@~3 zl-d$fPJ8JC|5`>uO4g+pnCuLG%eKwu0 zO($cmj@GQw2nyKWT{uNa)F`9CfYcqL;LdRcI>Ibub@kBIdXkRq!_on(lN?Q>mDPG~ zk*0kY^8DiVXX*WL5FSN!A;z59+A96PXoe_`HTyEmWr!sy#Pz!b#R z)D$RdBZOPw$fN*?2!KOw7ut>q5iEDgILgNyz2lQAr5!+^?x-MpLt79J@3YN}(YHre zXLA4mAOJ~3K~yJ4qYhB0(`m31FauG7BDP%^Y{T=~=$2yz%JBmeykwp)#}GJUw<1~$Ld;15FboWq3D6VD;iXPJa!>^EY=Tcm#={n^5`@Xz z(gRM41V5mo1L6bINKBy#^DnUJPCz1njS0|6NObUEPe^FVNAP@O2iaj&?#hc2$D7gg1A$*^VuFGKoh1122XJoB&?iM>v^tv&Fq~h`N3a5 z^!TSf@r8%K`siM3``l#zbaY*rx7e6Y`|x_TT&~)-OrTW2XmkL&x+YQG2T`K> zP+KGExQ3I>ES*ykr-4Zjrx0&fVw3ATdLohPqReKb&{D}wnTaR`KT?^Ps4S)w$Sk2y z+3s6+U$rIIB1u)|O5ucg5xDhNC@EEJj4{<_YMi z%`&%~JrBzu%X-HY3$RRV`a*e(b%dB8o>>4TXfXHT(xj*GP!CeE+ilU8gRwQD0T^2= zLqM6WX_!O7Ad2|Dib2E!p{cCXHB}R=S?+N3`6=qHSdp|8MBrj%Tx{TAYdpEY*b-I& zt)P31#sqYv0kNx(steLh{seQttN)=AfaXEZ%zgB?%V~#EjG^mh(gqsNY@b~msSHGg3MB>~LJu!+5<$G>>t%(*j{w%fJY`r(ZO2llOP?CX76 zx0tt!r8c~H&C%HM8RdiM%rdOspj^P(JZ!9q-<2LZiE0s=7PS9oHE{O2Ruro=AeFr+ zCL3GkQ0D@B>5jo3JMn2&N&?u}Kdwy`K*1U?$04@m6Y)B+gcLh#T+zWS1q4r32mq8( zz_MJS`%1JFfx%8)5!cieyW_Q4sdctkY+u^Cc>d~WXK~{2`uf3r-~RSjfB*a5dg8{T zCr=z1RdT&3=RH-aG`a93mD^qaSFU zVFQEb;QHwLdA*ZQ(%` z9m8XC;3(P3fWt+a|AIRTXl-U0Gp|I7;P{E1oPSpd^ISSO4I>-&pg{RB86_698QJih zliOgXHijU;28o;jz@V*Z9GxjX_c7Ku#IMTJ7(dzwLbPN6)DUt5(164?NC>TgU&=c( zU!P4T4H6he8Vpfu0+i}W^+Ju?#1J%vcGhNKKd_Z98ApD*!ULzV2sdGnDg$eR zrGXbK-eu0aslp~~Aqx?)%g(cFbj$E0F^&brOOacK87O0yDVi7tMaAu6cbZ0#C9#eF zM$)Ve^jfg;jyykCG#9`SY|P|E!|eox6M`Nk!HQ7!H8;MMleE^FxhsB?e;(d3|^2Sw!jper3=i*X%;>e7>c8#eoZE* z3no+2(@pD^Q6WG@ZBnk6M8ca1qCi)k0cLMw+C#mgrM((3NHfgZ)=I^^vYr=qtyWdM zX|Efj`b=H0-!8jSG`y)NdzJbaGGDB|{Me~;Po4S8zj^4_KKi*cr=DHqcDtK2`_}ev z&h~F^j;6CTY08$`R)0F3iKsISnuf|&<6JAEW)$nO`TDLF0~J)iVT7h5RMc`*YHgYn zN;9ivE2v2QD%A`XQAse-T&`}VtII=^n~CL)YKF3DD|sHrKjdLX`Wc2K7>@ zHqq&3J7J48-fQYaQb!{!vo+-e*0RbYFUxw9OINnHukOn3d{b7_@#cw>*T3iOFMHFg z?!5Vi6ED8=g$Fm+G9J;3GL@Y^BX#IW%ckgDu9nw#6%?pUrcWbw5w{I4470N4KQfQO z8aR7EkpAGrJa}4(X5pWk^GpN`7pgZR0}sq~C85KhFw0Y##t#PubTPjO!LvSmg454v zlqAL{fM|lXDS#Ov&ZCnAGNo(&#NBcBtMLo^?=UY`U78S-Fgf7dCR>;JT^vK8Sn~e> zcsv>@AEOc?n&52#LjacNdQ}7dLdPWL;F&|na16}aK$XmUQL})Ju>tO>K*bECtcXW~ zqY}POP0Xet*k^*8p1tYPL2B5Pq>1@*D6|WbG$Q$ybsGb>5GHrpCr-17xG;s$|j^B8;y;nq+~2mY4oue~#E^lLPiMDe@f!CdlSMD0d& z22!9WjWGct0yN9uHBboh3=~^R7$yP@;2>&w5(a{{voZhhmJN4W^1c5phK7w(I7b&Mo~_s?T1(s z28Hi+N%uuz381N7S%_E)YxPnZkNfVYajEFuf8L90xpn30mF>m(t1@p79@+P@+iyH_ z{h`}$zvbO;d+i%u_Tt&T*{IRHaaygGi^ZZ;4xfygSa%c3CrLT1rQRJ_$#IEgOi2=g zfY`GiP`;xC+HqXFT4ARDci3-{<1f;8kZ17;S)e7+W?0TGuFU%Elu_ z!$~$Z5I!F)b{0Mj6x&CUce`W23kk<06vj^)46Fq*b*E*=TYb<8Qwnt=-pmm88B^(m z6O`(&;}XG4*CI%2AO;q5LXuHcT!&1$zvWOSN2=QwM?Z_TKKqu;=yQ<%DdBMO@xd$>$r>y|7>S7YDU113g7=>OC zQ=wdvgOnJ&DdbQkS*tVJ@q_`Tm~If>SU=@~vA=whyo6h&=!ydMg&6jGg%~_=inJsk2P(_0;G>p z_HG?S13_9RrVj^~VuXxYyr#wh zE1W-%Ly21(4)Y?lXsL8{W&;4oH7o#Fk_u2*os-u90#;K9T8$!lUZeHN8k~)?tSN>X zMpfaAdNMFBi(yBlphek1TlUh*YHzWh^EC=Z=Hd zAHV%YH@)H|xAsJgiy69QEel#JloYZQn{C>Gn2*fS4OO7FX22oP)(E_b1R<~pF&zX5 zsES%8J=1)vFX%@Z!|x9Ky#N3tQB6J4rDud=b9Yazhu-0PQ`(N}vlZt$Baku5bZ+0+ zG=w0LLEV=jrU_k#n1jq{RR=`Quqko#K+Ze!Fff5Xu@t*!ZsDgm{X#~Og51I{?)Z?9 z1d7^e#^o)IL39dk1mdW#?NHRr2Z*f?@xHcon1=Qa#wl#bO%jPc#B!72v5Qg~2qP}?^f$q0 zsXJsAOVR-8LLh6&-9NRv~PG z#^t~%P#&B3fU( ziM&UKjxpcJHlZ^(eJuugncXukqMvl8XV`H811ACDM&tTv-8t2WBU6RYNsYraIMO>wpq6b!G-B;wty z8TG@}midpS4q3H_uAQ$|-F&&&-P_sSU0&^EchQrNdInvB=enUN%AjZT8ErKv+UHOs<%!KrWbs07*#!j@1(KgEVND#P{-7 z|HU%GblZN5rvmMBkCeqPjrkZE_A`uJ{K}Y*zD{EeyuJY&VX^=;iOR2X(ozYHV4A|6 z9WjOaRHdCkhUlBk0wg=I5*->Pa$@;)9$(#&Gr?9em7b_=i8X6SeW#($$9RnFft1h+PW9e7q0l{(b$OOWWGjNQmnz4s8 zD6gFZIk*s-r@tqo(GHhvlf_R8C~Y~Yz8ngl#?53hYmlbX|E{|H)hEw<@k?KM`iZl9 z+gBfZ^6Vquc_N+}g^tH2C(MzvU75lK^WG`fs5>-OuyDC(M(Rau(aEmoZ@ zx@Au%=F4`zNb`9qeAX_zy`DCW4;@h!Gp(cJp8h|Zhz?=C#N-C zVeFvFV%a|;cO%USjS6EclTuPc0xn`?6yVc$Hb@e^ja9YJ2_dPP6*i7SDTC5IuS&=b|HwxKX)ZX0t;B6JopG*ASA%ky-jCb=+m!$z}R zng!wc#%7z@2heT-Zxv4}CYMA+LxPIwot~6}^b+8}pCFlU9z+00T7-0;B;;~3krj{; zGBF}f7P2j-r!bJJ1y)*XnGm7>&rryLVN*|2ij$qgF;Z}+033yE}UqE?j=-;YS~O^8D9Mojv{ZnfdlkUR+r$^PM1g z%SkQvIZ5NP=VCfac~lM#DXlEkFUy33o;aw>SCg@_n&~Q9-nHe>bln}3q#WzAYV{2E zy^>zYtG%vUuB2^k+v7OTQeIE#z`pg-WLm^ATRVQ@x;t;b;UzD;>E1hUK6&iKczv?I zZ~fSjLz}aSXZ&+6)kZ7ErFvF;#_23|Jw++BT9<{{nlF?f5u+HcDTvk_^a&KE=3*zX zsrET#2d@wKG*Ce^%M^bx>kk2Y4rrYGJ?>c(sfR^;;J$Pdu%<-lbu!~-gY396b)GU~ zfuA-hiol2%DRsT90VJq03Z9aYJU}PyBZl6VNOH!L*>hT@PJ~ba8{tB$W86~`n-rWj6Md2xp9KdMd|2jlvok>qlXKCKKrqz6z*0plX7vPI zhR$9aY*RMM5E@J`xF!dkshXq=eSjq}hlXWE!mvwb1SFWG=4pS`=ae!>S&!&Ok^!Ry z1~een+B&ifkOr3C3k?qBz(1xss(GpfM8XOnqnSas2!{q48Faxm!gExpret!~Eeux< zSHgNi>j0NbbYk_Zi(NRtZuJQGh~`0uh+tVyMgl_{;%5q7kT~OGZv^5ylhE)b$kl`t z$kH`AXATLyj|NK`E=&E@vl~S($`M|5pgP;}Ehv~)Gye&016l`u+?L8(Wx1x56FQV2 zq&%dD`e)lMFI>2C_QI9NPoI0@)Y(g0yIU8p>|NPjEf#sX+FdTMUb);egUh>%o%w2K zvD{g%u3nwbSF62M*_^uSsmZEVkkAum%aVud|-2Z zb8~b5+VsG_gOkmT(WF`5x3TZQ{zJ$2pEz{j`s0UQa{CR3H#U>_LK|zXIjlZ#Uo7T} zHjgUVDaE#QqfLTRQ9E+ab;@6(D&#IDe2btjXP>g*{C0|?YA%Gy(gBxnb!5E&HCOC) zf*N708M!BH2F>w#bfEaiS--%=Qk99dBJMas`jCF#^K|sGLuEH*7KG8kd>w>?oq7zD z7=UUh9v7+AMuydIOl`n$0%J1VNe-{)UE$fewgc z5`!a10cvtwBN>Q+-fe?foHkrZkrI8pK(FsQpSUmz?7q2zkatoC)YEsz`D#e1Q znB|5il55uKC1xl_b<8x0+=2;q6*M`9j)9-D>4{>OHaWVDofZdF<`T;$CF`-X zGx##0ONL>&K>+f}V51jJZcRG082X?%nlwi1ENur}2X_QP1K}_f#PHKyX>;IAx_}mq z8bPCLaLlyp?6?LM7Fl6%qGtuPfud)4Ngp(eh&n=$>A92tFt{+Q?0Tg2xH3#0F$FKg zTO8gL7&3<~a~!IiO*aMl>rPq6!(NYnFgcQ4i0qdM#uFY=kz2Qv(%@iK+*e7G;=!Rk z5(*q=F|(UPl3}I>%?yqs^wtbGcdYUdpxmF60F!7$iVyDwxt$?<5uL}V>pPT}OVwCx zZ7)ZpD!h)$mfBG~c%470rM+J6wcWh;@5|M^9FnrPT$Vq(PI|(zS}cnmXtmPusO!4% zsF_V?&8Qr~I-O0MaZe|jay-eb6c%3}HP=!e0THc7o_3w0s+99f5KJmisG^m9rwQ(8 zKz;=TE%`D?3KUSxz{>d{4mlu~Fw+w%iWC0uK;h-d8vleZHnf^%dyy8GlwmuGaV~{{08KqHU zpz|?w2sQx55X=j4x;7q!BJS<-+UIN-huM@Fv7e_!3|7=SRVo~8M=gLuMsoU^Q>PQ$ zy$qflBJ?3@I3GxcgITf3h8-BC;i#|e^EkvY8>1AZ7_cz9RR|HzNf@zZ2Rdz+-RhcB zN4|4Z9(oA2r~DhwZuhtrk|^O+i+l#aFRpz~#9mlJQZ#Rp@azjxNhaX{-I(1o*Ff`t zX2P1YE;kH(iVgt&-qi+83%!RF6J>+UH<37SshkaahIV=_(bj+p+0>)jxFGk}z0(4xW zba7LF46)uBfCDA%K6mG;T!!2-G-v;nmdCx)t!d?it4Aw;w^I^K*A@O&{*So8cl z@OZlb?X6wGnq6^Uu1WZ02bPDyOZ*p3F**|pagcaV8OSh5Z@3T3-meJ5Idj1aM*)C3 z7%f^Ea3FJVeT-N+QLE503|Fq2ts+teMqWcpwfR<7g6iTFQZOZsn=)GiuS78gQCs^M z?Mgs&OTlGZLE;bwE9OIt6I-=(2Ge9TN}GYg*Tyh)llZkaxWdxOinz1npy^|pS;(0Kxs3c(M33t2;}j?l?tn3UA%gS2=AY7^AYT%;HRWnU+;4ur4;`~GoVF83=1C1a? zy;vg3#JFFd34TFmHh@($kOU(0q%nW3eV!79EJ6}*W1iA*9P4jbPM@=2A(!|fsH8$M z^)WafyaFboW0S;6p6hKel!OHz)+({EOdueC0*wd#fsZnkb{lgepuNCdWr!-7?j14d zbnHD)HD$=6Sfi~#4hC(|fel!bAQRss;_94n5A{1ze!;5|a&a2pZ64Fh;zQ(@1b7C+ z8HS3IKmwuUKn{S8S*|)846|vst=&Ziu<8*K;XGeLGgP+S8%6f`ir4@37%F5R8v(UV}Y-Pqk+$I{DlwnWJBOIVy-+7X)oiKm>YGN zbJI<+*~rWcOzIkEp)X1hn8n*YChx(x>mr^D2O_M=ON69x;7qH6X&QCkFwQAB=;BtUs~hs3DgNWC&Jgck!3fx0B< zg)a-f_J=LhM49jOkPu`L9ldAw9OoT*i(dxnhB*#%dXgOI98?gFySTuC;KDOVf+4N!|M zh+s$4cAp+>84Sx9oPU|T^Qe82&`)SFG)mvfVS}ClLKF;Ca}1~xj{@i771#znh~No= zjr%G`JM0qKxq3sJG4xWuNTeV(WR}Hj%$UXKLe?MCE;F@;qpjY$O2JQ(vTqXxXaKN5YP z!J3{rY>pW&jKMO@jy@4x1)mnxuOh>a3@7OuJ2Oel(n3C<oqTqyHxY6GrB>f{sOl})wUyW7;WR@kg!b9QFSW=TT zCAa(FP&~4>9Id@x^B-C-jV+WxELainDazsEq|=@StT*E~(C8teQ6dvfyNE5ze~-_Z zhb(i)$HUx#VPM9?Z-Xz5u4wDhjdW?psm|}4OVh=xF~Ah=Fzkmt8jOw&1B^ARrx@i7 zLYR)obhrCePdRSo_aEz3m{ZfjC(WsFJ zdIgAG49#70oACp<*OI;6M^&X$yHFu+hI)1Zh=io*hADs{E=C zQcAUxpRj9!j8-N(cXS6sihP{R-4SA6n;MiLUPJ3whWq>IU^?n!Oiktea}}D3C39lR z&RI&xcs0zhHAVjK&%ab2yhE)6E^^tZbg|pkV^TmS-C5G#0Yv|WBVuuAFL0Cx)r4 zyVKDih|~);C{a5nSny2=9H`m%Iy{sXy8NC~Oo^!mxo;YK+fTm<%9IC-6cS_sS&hof z<2UE6+*y4l;snPb*$75Z9^zUm4&uoV(t~=>1LPsXO=2$7wzeWq@VJWU^>+ET@TqrF z_CY#k7hFp#f=6!HrC(ghC6yRaq8JS7si$8-+jE;TkBph0h`(leVqXaY#gq8{OA<$H zbys&C?l&Dv1#fa?;^(kj{onT!B+_HM+I8L%#?F_HfpYorA!tE#>E)-Ul8;PkrNr<0 zlS{Al9bh8xZMUvQS;HTzUM5{mQ|yfQgQobo&AlltSmwFFWcJZ7MgqO&8z1(XSI}w0N&H=5@WE<(NrV!OtP6p$K8)AM}?nV6<5%Ke+=)9iiA+w3uNWlQ>mId z8=g2ro=E_b6cBI#TR^103}N?{SYfvU;LFak>TA2Z>cVlP3>o7IW$zp&s`ud&2DPXS z?rry=yK}**wM^&;>h#|-+u5F0-S}oeDGu;Z5f*EuDu$W;@f&+ z`(FszOujf+W+CpkBUSAL2n2<>Fdv9_SSrJ)1+yF>jGG(ou(ozFBat9DQO6u1IMPxr z-X1H&JuG(kQJQk!HenjW)BgB87Cb45wOLQ zCzs*Dqig(P1%(TJ^4a@rB1H;b-D_-@SZ0SyQt3AY{mZQdI2^|$`KNu_RIfS*-&t#5 z$_4Zd+E!blomrDg2IsoK2V`86sze%W3&0G%MGU~85 zl-KOIY%O|e$ArAPjeu6!IVLJ*qh+TH1KXj(tw%3BzcEsMrZeJN1ZAJW`6M7 zn(>+P4FVhtby1>USy+ek%gC|3LDs}Pf5VJR6F91TiXo8bM37Bc4xb-^&9ANYxJ9tg z;w@5XChc_e zIVl|m^D0iXhADTk($m(EK;p%1?3yH!_r7|b{A&$%Qga3wX;pYau_)I_;|)zM{%Elp zUO_7-aGk)x`xXa}U#wa00@4dcrlG9&UFD3WTPMWrQEUY%9Zl%4b^%A0@ca8<46N+6 z)rBct=XM#;X=*0Q_sBq3#+(qcLeN%r8euWYpBG8&(7M&!F7S4r8?Q_iYYj$hD7Fk^ z%_a}&U#&;cAOWs%A)Jw`7=M~!=>J-iYEkxcdynzzAJR@{h4%$>Bgo$m2PN7=tzj(V z`Q39$n)>a9jwsaolmcxc(|fGzbyE*ZO*=2|P?9fQ?z<<*NEGL24DPNC5mC;3-z(%? z4t^b*>B~^&t%prGJEA^7n1Jf{q4EsJSn-QYC0Qy@H9X|<13uK?RyacUGIHy>?I{Nv zoSP-z0SzFBNFqI&D}bNE!|R9l;@O}TMU<7+4YLn`PC>NOc$zqt{cAOQ{jWQuSe7JU zm5D+j1s|t5t<+lg<8*M|E|My|nX1q+w#x$~;L6^PHqy1b=9;h{C`c=1PHg@&J;|_2 zDPh6z3~4#d*y_+zYQW%hk?fw~XeQ&r*3gG`4ycJEtMkaQiCN@>calNJnqO|KtdG$!>cDJS&Jsfju5#0ky2m4ZnQwF)= z7_YDOJ!79FA?f!PC1($|Iv4oixa|yq*jCs|DQQal=VQ?I$^jT#!DH0bB}rlNI33Ljfcnt8w#z7kmk=w0$O?< zy)kPt#iR%6(}UL5RvEUHz1b}$mUziuv8pE!z1np=?FLY;D8sgy%-rTk>?sPCFPo4J zUr}htGSF1ZEintE7N%J*CRXtD?rJ~Vp?iy*9xDiN=IYb9wL6nH85^e>@~<;7M4|Xsut{p(Z)S zTK}gI(E(UivSkEd#SmjT?I)U~mxl7{e=2=VZYco7)j2W)W76u|A0+o>9@VV0f1R^!-~?$}qp-G<&6^qGe&M?jzAA{GgP=y9|$vMCrW z=61!9&$Se4QVy@=Mng5rQ;9JL98icI``N}&&Ly_P!tbR0GCHD|fg>u>iRAc;6eeA1 z*f<$NSH)s?^+taaa6t`378=iKUw#rKNl@jpzLb9@C7(=N_zp@#>8qjuBY;V3(6EeI zhKy`$`A;J=7-8Vs@964~}huB!u*%~{ZGdgw)JI9`1w3>=p` z`U9OXVbfX^J>qtWvP$S_q$K%vMxk5#Q;XfxV!teYu@#aZU7pgs&wnoOmIJzs7B~~BpyJBH(h{0+WW8_ zHW1FBZDq;Jw&lPDCv6TT?Mg)io#^hECD#wRXifIrJLp#L@E~GTtifxA+PETD(0qqK zdc+v7AYIE~0<67$9$9RVL$nPuvjjo8DB!wANItC+^XdM_wBHd4Ht|c7Z(ZAtld$Nz z9+^ys|1?EUuz6IbZ|PP6G4q;a+mhHWrr6YAiu=FqdS(SNbRcUSUJ(eMp=SD#CqPn7IYiA426ajuYP?laldIq1r^U zQO_gVn`XLSi}BL`R%lrg#$>m>M1E~WljY9{QGh%UDCoUa5^MY= zb<6YZ-gRSL!>&*PPbr`3sOUD_Lf@Nqia91x9q(=>UlCkalBRsdl$CKtwju{xM z;8E>m-eS$8!a@1oCnG?d%13jS|(3F7)Fs4CD{zd86tqaM@rPuH{4qzycA)%*_xMk-6tPj-Gl9{ zr6hPnmoy+BePhX4K!@jam}Wymf#D=SvB*sl^q@@hljT$Qa3rmSs1qcY|GKq1u~G~( zL=o0&Ol9j5#~^;q@F)j;HH|}wD7Aum{Sg<)9i_|KbeXm5UrHm;_vq4rn`?^8?{i&+ zi9-3IhNC$(3r1FlJEah`a?5wiA^de@)ake!I$=G#G04{8v=7FV=vsPm0pqLM(yz0& zurj<~rXG=ygpOY2ZAW#Yr^gnlH;@=cflmdMOIPG!MHm3;Vp1RV89%HAVv**J_0Zop z#|SgI)B&+3CgE&cJ)xE*lh#i0`523gOa$%#jZA`=rn||jh4%JA4oZTG4`j${UX>Nq z9I{Fpak!6%?ZutHUKjEWF8m7g26iI#J~B!b5|u^`~qhxa|`<&%oVmtsn46 ztkw5xl^|pnomD1Xf7`niTu%P*EWsIzwNc`mrma8!`&S6A_4=#EGbGgjkX~+keMs9; znO9R0g0!&7V%>%1I=Xs0%Y#JrSXO!Nt#`qrV-7n+;GxAdRwqxdhL*WPE2BVX5X(5*t7W4GSYT0>9Zzjl73;X2|8sy+4EP+% z8!ims#E1l}1SvkMQA;@5vp*19CA;n({T3Q=)9L`iQAri}Eiz}%F56Hd; zmEMmtY^`I~-7WLaq9WRw9!P+zkF`G$Jse_rJD2Ic5&!#haDSZ_8X22{LJ%n<_6XiS z&3asya+7{9UM)K|b1*!4YCp(lA)2I;UWXNvu@;BI_&z~R3@8xoEh&t)!Oo`9iLb-z zTQ!H)9&ICUi&_QIy&V3%tf151USF_gh+h=e zt#Wm3Pf0$Y0VMy@wH(LaUn`1hrgUgwN7BOD@Q&c^`xX2rs@F4MD9K%;)?&BnFu#kv z8Z$}5uj`sjhuYqt4pvH@g%Eal8sQ{he7-COg3T_jF~>rN<(&5r6{Ux!;3%$wu3NY= zcgiBy;|7Z3Bpik+EaR6aWzY>{9VqdJ$H_}8^g&Lzh$a2nYIJG1t z1F)KA+20ul6Ub$ZX9_zeN)K2Vsbw~kw>U^;#yMcb*5BkFJ-MwZYK0JY%5U9PX$Yc>TH$FwUYMUR zrew2&<=Lrk4I0i|Ajv?y@5(pBG6guxK0==KbVQU_lW3Pl+C0qFX&{ZjKE^K=uqTA{Kz#Jy9$r5~1OV z%M(jaS0n6I%As3X+G*{ZrW7h(Yip9Q$(zF7C0Xtm9RSVL2j`k=)(?+M&B$0;v1UqV z9}m^vQbqR%W!?|60psj6HC{sR(rgPAxZa9~IgiBq5mmy6M#)&Z2(-I>u*}pO05FrB z(F+XZ7qcuS)4X`=KqyI2Kej%@8AHs%=C$J9R2ljq(Vl?c>xJ%eV|w^{XBI*t#t_i< z?Xlb4`lswps60p|A@Brx2zPL9Q2 zq?Pjv!f$Jayw|!(4}z(tqG5FL5Oz#qOQX7X9()QRkQx@lNC)Q(w*tFFlQTDlxSbvh zfCg6am%?N9X+dcCBQ%RQ0cwn-KI~pT_=C zC{fjnK||LxlU+3=$Qdlap(ll$} z(*7{Sma%?blxTmGKA__F+nim9b3t_6Y<7ZR{n#XLLq^O8E?%q^`W5caR1t>a4A@3G z<8f5O<4Q%Gvd4G(mhkF0T`Bt=?Ckfi_>>*PZ4ultL)P3^b!n^3x~5()I+Tfy7RMX{ zHk*$T|K|iw%zOr5ODYY99aJXqS{G&XZdF#kI~OtCIS5k4{YGR>2bTOxtJTVTTLn3L zx^|TwlR1u9L8xExkA|v9tM)TS^XW+g$Ia?l;g$GZ!>Yfm5#5Yi3z5m^NgrQV`DMK1 zqf4K<$;-w(z|AJT4R3HgWV`L!{f@Ve`L+zM^s{WoQo$&d5b42sXw%Y3N=?{xc74XA z%Nhb(O02+_vO>;Z$`>dlDXtuxJM!PGR>k&_%n&qy^&)7g))G!l%}k9u#nJOZEDy|} zyj-r$6z|GbKeo-K|58gX$4#QH2%RGib9nk{++hoJrrABnAqq)1lC)!G;Gfdbi!k2r zXS~(>`YMe7>KAXI-8UYeUN71qS2v2t)B35YGD3!4c&q8V#pzru-unTNZBxejtC1we zEV~G~1hozY#=%be+WY-LDE+clriUcm z|I)3~1*{?yZY}B<`eDPGJ`4M{N>S~wXO1nd547%$&wdZN#6^d@~$f>z2SH}u3giAr5`Z9)tqV+DeOyn3F#ijY%jV{w5wo@~W~(3Rbf zWcJXT7HDV?bEcig6db!%A3P-*F1=Q#XGF)eP;-P{v660o_Z|C9Y_z)ie{E=eMQf?I z*%zMy)xO9M%`=_Qp_MMX-R~IutfwyV6m<@F*j0qrn}hkvEn!rx;$*r3e-Q3m++iTf zajXy(!;i9`V9V4$ln`_h%{4I6Yd9s1ilD4v{Nr>oh%n#8*fof38EXa3huo1KUO{Iv9vj?h|C=?v5xl2c;{ZT+-4wN?o%x@qD*4=D9Lw?m14pr zQYq`YBZjPF;H^wPl!F-Yj-Askyzyf4lr`!0;$qc$i=Fa1cBXz!mwE6*c^4(M4xD9E zmWH*=i*ZdiWNU=-P`As7Il_y1X7bSA<)`oeF~jLiz(1MjlD~SbF?%)ta?Nr8L;Ihc zdHiR4%hG(x*<(W-R5d28^(bEGHS#z0||}g9dg}` zvB@JFHBS+t#>Q)M9Ipu#kpmulm!s16CjK3NGN4(b>ViY5qe*P;LrHagSwFwdo^pM( zd-Hs$`D{};HR6wo8zguRsdLQNL74nrePSz>xb< znIz0t|Jm4mefu!a@)p@UNh6H3UaNQD^^$n4v+XygI7xh%9s~y8$b!`mtfxQZ@HA|K zaZM)+y@hqwLC9N-zN)GrG7b|iBeb|;)0Dm|NGy+ zwrvdi5SDud$grN{200{0Aoaz8KwS8__>dwdG*vc#_cyJVc|aY%ypwJL<1KQ2ljoW@ zS5Sp^6wjFZi5;Z;X9Nyq#wEP))VdF^#qMXI85$`?5DBh_q?iBTxl0V#JKlwEE)&T0 z%Fh_WAR_mFiaq97=J0BH19kYn>B)slCnY{wMwB1}gUwQ&FcoHxn=o6%_IsYkYRDKK zmh8;ev})3$b>8Xd4$U?(eN1Me?Y3iMXgCnAR1Zh&TMI~ORvm3p*!hH?C(J!B9Lz}w zG};XjyRR9$?iWDt?rw8@6(RW7`O(LItq92wCg` zh+Dk2h$R^s(9Lb|I*33Hl_e#r4cEEz658KFUp=rm3Bxv#Vm&=zM5JD5&B4Hoz_bU} zyMZM5av(I7L2l1?i+>0#7Zf; zfX9+8=)oL0)4=yhXforPkhha*1^5M8z z6u*F{cGQS5x?&*wK|e*uGG_F7B$r@fMgNw*BpjCCq~SPx^+{ls)H5ayMxG6f3r^2k zp;tM8jLxZF8L{_4F4mqFK~_HZYF1S7~pq)R`)cV5NZtbHL*2 z0uW28ued6?IMdU+5C7aM!6o}0Ic-?O#S-7kI9RLv#1E5as|!4a{QZiWA^hhudr@rK zv0`^6DzaTV$av!CbGSOI5Y-5{E4xDNuwEHJNGlL3TWF*<=?g8h|=&=tCg z)jC)zK-u%PPRsB({xv4%MSsrBe}nCEb-xQ$iJYR>8zyU{*&g+;x&IY?#lT5w`z-Z{ zeOHXz2=uc4D`7WmMug`!c@I|st8QySH-Hl|$J`~8#tI-Ix;2drL6=TdmAO!lm;REs zCp4OeX%{A2AHA0op}vW&EU+H3-$5W;PNkWXWy*X-n8|l66JfrID*B`rKjGYFLR(jj z99S*swa^iE-SHB4UD>G8u@uwRCLcuc>k+4IU$IeXC8zDLO<2LJjY83bKj{*{?6*Sp z)Fi{94FX-}ACEz9L+2gqD&rs-)mqJiOZd+aDWL$jTAWgkZ+vcnFj6Qa? z`=B5p77mT;@?Zc55zmN41G$&g@u4FZauu*k!XpxPlrzdoU?MDum3d*12qJtQc87tKD0^1;eNXocJ0Z4 zmq3TI>}#;qXx=ugYH$Cq&pV!&*8Z(r^4PNkg^v_r{!;_Jin+A|ag51mQV)!qRKIef zcOlKL%pk9W7ZS!2NDGNh5(qdLMw9)bf>wjqG$z!ZCgLnVK3wO0$*SUx{=#h9Na}Ov z8Eo^^v25L|N1!2tl z|8XEU-$S9gMc4}p&~{ZFv4BNk9|N8-whyR8iGGgg-%@;KLwTA~QRPrpD|;}RQjO%) zP~hEuRXv^8N+vz?Py0{9K6}^EOqFuhY)#iwPybM`dB!ZyHS}j#&plWtE|sM1^dZ|B zZzCfW`3^JSsb5tS^Rfz;SE1gs4BI8j=wP#0q5dM#J4@lhlQr!E*Sh%K1s9i4XxWv- zmc!siM8F#2>@N6%LX|Z=DZK@mr7#Fs)~+x1-7VDAcQ3ebvRv>QYb=Uz<$ZcIOQcS_ z3-gFp?m05ZMj~#J#^8&Y0$SWx%&OY2^PG8r!TF?f3HEybj>?g8R9Rrd(Bs)eJuMQ- zc#be^wm>)19jM*~`VcqtD`*&n(rY`9r^*vyZvixxVzxv`&3(%#+qb|QCPxLUwlDhr zZ2Y8REGSU@(!=PrfO82#yWGbnLz*I$hP?Wwn>hAs=`rCkk=rpa$3|W}ov=}(J(%6L zsg6$J7iD5zpU^OInIFeU6niPz3~=<*&~ms=p6GlZVz^@YX+;v2i%*ftfb&NhGl0#a z5=#0D6TuWaO}!u|zSi-(f+P35l1AAAivhgNDZt$^V0ap1`q<2NSa&(~sgDx$dpK~l zZWE_p z`O9LCub?e)8P&f{l`T@4mdFyNyKDvr1blRXPD!$)N;31UW zKm4){`yPgHw&dEYzg9%hKEHfGl{P>t3RIHrNiq`ARWBinIk_0VvBzV*q;T_C4zFF8>>IqoxK-jbGkDZJ9G1F}tookRaqHrZuw)O6&hSrnOgPb6FP zX4kV)=d385DZE8u7Xc61iif@mhch}=f|S#t@txBmf=O#vRoXFedCAV^Gg^HfjrmjY z1Gs$mIdr|{9KyP>(S-l(J}-ZUTUw)DS;_@`TvD@!we*(Az}oucdSQ19atthKVkp_& za&VaVflUMr+3W(iOX8QgH#0cl3SIt7L`(ToEf_U=NG=Key%@XfpGucaT(d%w;_tan zM8BAe{CAm_HStl_n*ug+`yJUCRa33COt7Sdnq~8x>?mV(t$5c_f!NG)znXvj(Mc$J z0Y0}SFD#_{JpPd_ALu1{O7_Yi=lj*fnt7-Mxzr~gux5ssW? zP1k3pC@K8?`QQIrE_JQYLyAg>XKi26k^Zle)Q`MmOeh z&|6eAn$y;M;;#a9H6u8S!yQZw`9!ZD1_pfYlnUn&{^COYn+td~d$(|L_Bx4!`k6WG=r58!E9OQ?;mvE(Me)*1}MK@ft@h&BOXIz#o_JlYW3rkO++ zWq<>tNvMY!cipHolSuUdlKI$iUpYjKqSLYQa@MdXVD4vMp$zhT%^Yufb*CET5PU+u z<;_5xeXylRWkDu303TYOl)yYXahM=L#%@UHH#yPZiKol54NvG35+mSn$&Cp&e(6SgPJ+DU*#+iq1)jAu+pOyS;0FZ~HF` zZVU^#^ufh%?fx&EiLN%CBDofAsG9TV-+zaIcHC3ofVQ!|_h7u|77C8iEbZk(;b39B zo5{RMswe4#p@NpQb>znbfm%`@9Tn=XPfb8iQx`6d{}=vU`BkIO{PDu5W7xa|w!b}Z zi?qyfOzzRMsY4Uvkw^R8@3MTyO)A|@3kczV@Yf%J?j8RUF|AK9#>I=cAqQ@V<8q4K z&+ol8Z3n%Dv@#Pynt5^MuLBx}RN+@l+jyk~J1PI!b59OdWJLwA$N$f_(hc6OqfK+_ zif?v0$s*Lkp8(e|DHShv9hN(G;KL!>_Bl&^=DBq!!>xN#>!ueAqEY2GxyI&(R;6|; z@T1R6uV`V2PcE|)iow7llU%b?ae}QO=iyDM3Rv@KIMmP@8z$nhY zCVgF@z1;GzoweH?gdT=)ul>(?lj6OgUeiNb)YOc&w{sWl>BdKQmK4O;(6#OgOK&Po zzTo|G%UhKCjX~jPEscws*C=cX6AYDN2gw);bhbidZ&rMF9U55r6Z!-c>#p7APG48# zORsWiW~E0Pt(FLKAUK)#BmBq(orKjD5u0#{6{aSI_2MU@KfL?h;}L6EhVnMMlAfB% z*hshGbiSN0$#}CKAn$QV2}3gb$;kzSJPQT_OTYtfbr57-e8pA4lu!~1jiZ5^O`I!I zvDON3EtC(U9cQe`if>&)*FYPa{rIXBpJ_p1M;qaQkQ8)w5?0jEPj0BKX#w<7?^NJs z-%`jPYe4kdIq&;I=d*bwrJ@F0gGZtt2`r*|!xlN66N9X>tH94RuvAgXzpVf+Bu*4w z+B2HqEvpFY;*F#UJ9}=Xm*rF`dGL7 zkXQ2(&k4-oBmW2MpJAtWbueG(DJMMT5=yZEv?ZtNe|TV zO(rE2AoVn$TqAX4xaA$qf&33iq_yUzXXLsdWKo z9lBq)4WYPwZr^@Le#WX`4f&KzUO|xPDSgXw+MyDhVmo$5bO*;7^T zNNRtMYE88UlJI(ku35fhCy400h|5Or$f#;s2Vo074iv`C+A!XiZ_Z++jkY?1j5c=< zxxX`Ju+^L|Wv(+|o2kaq?e|7V&08{YQVtHhLiWoNfr8GNkq@@AldE zFJ30uOIQ^ML~%g#ik>EQ;}cwHSQjCe&l=IWJO#Ked{yOQRwEuCzC8_Ww$kY~i1*uV z!zp*f^FBiQQgkT2k$#&(RZ*;%(q0wrQ+9u9temh@8kVhn9B@GvG-iyZnIh%ay<~90 z-H6%rxws{rWHsP=?6U2p!t$f^S1^C8I+Ms`S!?Q=Tj`NY{fj@-e4xV}$VS_P zQ%{~mu}nP@sSASm3P&(<2rCpZv{QmgTrJv=KdDj3@8+}m{iKwKaCV3Xhpd%JzfX>g zp&>KgS!>}P#s^W1A1akmMrH^Lb3&Eok=s}rsESt4yrHxbuVFT_z~J>pdtA9#J@?nO zev>H^!z2Mxcf>uxB1cCmUkZDyUyl<{ec2{i_ zBpqhk(Bz9LPv)?O%<}E&c=QNZkT?1;+@c19y!#hO=!({dB=Pv+pg=}0dk<<|rg@8-agw zNbls2v`wh|G@G&KK0>tueER!|H=8VNi$(R&)}o!C(Zb}J7PW>JJ(aTD73NEP?G@$3 zh&gAZA+9Bn8l$p0n=&Z=(&pp`R!qOZT4HySKKG`n;tk?NIz>+_waqGV*G+KTUMJ)l zth}7Y3wkLsr&eL=-D}vL_6jdp)S{H?nru?^P#@}U*2NJ%%i=)BQ~41Gu~jH7K@;y^ zB|ctG)mQ4EI&n*fDy>x=&?R4?WLvY>lm2LIb@Aim0BiIm{L0P&gY=e-qf`=lW70{qnj%Oz^MU|B3cvrloSd(&}mB{osOkKOLS`87uv>?JPRx3?m7>76+B#Dvs#BUx)&vH zIK(A{kS73s?0ZQNW55mRUJR<072}|qG%BBq8}W{_7HnZ%!UaN;upgs}D{(jqhl`w0 zx5o&QF2BtB`hLE$)zz2a`3D`FKxPe1g)FdR-Ggq)sU>N{CB6HJ)dBn2L)rf|cZSz#m-}FH57P zS+R=*1?w>GJMKMn%*CWRBFXnp9;sBE6Y!LB27uod5ko^Y|Hx1)jihIhUf*xjWlxb; z!1TFgd+$2o{de_s@+jdrsrhRSgz?n~b(eg;_yOO7Vko1u5!$g3mn-T?9D_VBN0iR& zy%``@Z(i%G_DL%VUmt5ddnv$w5dk~n33+?U3QP#biH=r9w{_Ec1hr4t_nk*1F@%UH zxQISW&hj;!k5Ez#;a0QC33z2(l74mesXkHO1TB0$_V$`RX@5xw+1;_{(*-gVoeZqK z{-3mT#Ca@w^^P|%nu!l6DPJume%XaC4UisS3n;jNii69PF^QENU^@)&07Z{=GVlUL z3AjJPeo(s~@CyqF8g}2LL}{P|MJ*=$qU8wDdP~pR0R-9 zP?RDa-?@PTT*cE}0ei$yJ7WJQOb}s(|873-WoB2Wxx-nHDx?5^L`H=tMIiP< zM)t~rvFWnKYu56?_Ue1qaA;=^Ir`p`vi%zshAK|l{aLs&R9mq+gDaBjp_fV?oC|dY z)0z&pNa)eYoYbF1!#-eAP7cS}2C%#;Tu$!c$g1z163*2s^4uYiLQV1Ty$F%An*zji zrU-L3rz-pI!(Cfd%>A~^GXh4YSb2bPtEt98cB&Gtui>#ohLQ#($=$CB22#Ow>IP%9?$x4 zXmN`f=D+*@NhJxPfFb2E1BM-=!3%b7omNTGOBzZtVm+i!i61%{Ujbi&c#m_<_OVc{ zf{IkkNI`k*G(Hr$ClXV(JWJQbXhYYKTwC@-jV5Ptp=$Xz6t<(=O{B$(CCPT~@Y*#1 zr5b1AISG?99pktaa7$*|Zq2*1!eVX!9jRa?(m5`}t4;W}dD_OL9p zxdZa%*#3eQUVTI${3#kNubUf29$sqj3@6Q-i|~uXxmAO={?%QF;;z*_(<~Nx;Q1cS zC}@`7X#Q}N7Z!F%;#^+t6wzr+aW*@yG0UdhX7od;z4mZ_zx^|awHZisuN1M8eDnFb zKTVttrnq(q5JPMmg+)zo6SgJ5RUdMxxXr`0lx|9`SPB%&-28KfF*0z!2)$~SGPc?$ zDu;G$3N<@Dp{Zw_r4LT#b*mZ+OTXk_+kWuhQy zOp#PLz$Tdd7)57A2c>6#CS?tsMudQ{dO%6w7mDPoxjyF?iZ}_x)TMxVhU7aQQR!uf zS_y4>=t;%4ojNg$!Q_Wc`-7xacs5#nTd0qw-O=nX;%d?KNjro$MV8{kB2aK@pBWeX zT%sJj_mGcE?F7Aq$`sQy#(ASN1-9W6(Fjc3pEs$<5)_BD1a7A9PaKU27BU$>p>Wd` zt{$dV_1b-5vm5_S4Rj%`+{Zp+;pv&KU|DE(+Ok&bRW-DfNs`k)PkfKu&1luGRZEgo zdrA1UNd$n);D5vG(?=DGlsY(=RrS!ZZ8}l}&zAw@B54XU&MH7~c5buknog)Y)TwmK z^f3gEw^wpawavM{sWG=Go_2a$PX#UE3fl@$`wmKM4wZn=Q-lJWm8Z32OBr*A3|ik# z81o{MR|dJG9SuuZ@RCD$JLZ@hA0_ur&2RS7FWH3rE&)cEa!k5*WSXQduI>c6V3ot3 zsG)8)mmi`PgeFjUZHb6SY$2XCsbiCUDWDxEqBB>J#M?McF>^wN=AhwvC%!W3X8kup z6{^)bY064fgskYDo78*Y84ji?+?y}_Dnc<83FJ~&n7z%^-GN#U;Okid*+r3oW`iqKN;n+(eYFL(}k_Za};7MDM*h* z!QFrLs2^~6m7JAnyp+?b_sXX%_oYYr2datBqR}pWl!EDjGb^=&{WH=Qd17AJE!U@{ zYx3lUeF20QtJb4S^_N$RXl$6Jo|L?e2tai1GjTsNFs?^3f^NEC2F8WtrV|i{L09cRF^Sg7F*0K+y6D@xBPQz7bTVTO8R0t;x&3S z%P#;W&LHet{G{0BMo5sBRQH5tp%rZ&vv;w38DK&HFmcnb}#?pFe6}2?1p_TEh zp(>7F3!h?5&J}(uwiW|P7B4Rs989oo$?E~y_(;3w7Pewo{|5BW0a5j7|pKc;{p30KD_@FWs>+@xr7grp@L@0aTXhRqX-E;@`vyk-mel-{I~ z-9G*N6wMOgiLu#5H|#hxl8-B^!HF0y-^SUNfJjc`Xyboz#_R7bh|;(n7ck7<>b3^v zp<Q>H%o{n7PJB{5hJ`gigoPF_7S+H2aVGi4;Ht=mB1SZMX-~7h_w{iLKu9c z0Ct?{d!gg+^NwcLhFhOVrTyY@AAK0W@@Cju+R-nsV?!CSprH3PbEkIR?h9Fj>jsOl zqfe>Ma&}vtUrD-VCmi--AG3>XO^;59F)*SP3RKMJL?jV%m-`1oXfOrf*We@kBtjyS zBsdy-bQ_LPpcUbXCwHd&PWAcZdoGj!03ZNKL_t)GY4kkmEp}gxYyZ(*<`#ZOd;ig4 z8|$xIUYf+a2Q6G68@W;+JhAlaSyCaXJS^PPXTG z|6OABm7zdHMD7lZzCL?h*$_^93&yJKQR}@r}vm%_jgsWQsC8sRyk=?x5E6yFI|^w z5@p`{iz2mxl#?|Py@czr>h!AeL8k4=&p^kqPfal~iz&MmgS@pCFn|)yx2`6MT%2sS zmq#bvx-Pq_h^o>U#6$R!Zv5e%je5O&JDDD?xw z4Y9=W8Ab){Y>*+{wu2K0N?x5HLxuts+I#A4VXrj_NieDN4)Om+sk36>`gT+4+rnD)P6} zxz4?d(N^qaig5~Rw&r*-w7gwYZF93;a4dXUKAU?GnI`ecE|AoU#&uJnTNo6=v}g;k zQhk1X*8=PwyhQqE`A?oxOw`;q9LZ5wO_?Wz0QlfuJ*>7W_^7*7`_?!x)0g69{D*cS!WdnX?0-h0tp}a_Ez46g(r> z3G*aih+Jf#MApb@ecgm70_Mh#Bz|ShoJ54q54{tPG#@*9fZ8yPIZ}iLZRWa5vJ*iS zM69BrY7lj2;m~`PjzXXwc1@&NYj}8{@qEz}&Ca~-m2qKuV88L81%3V4>^w}pEj^4_ zK`v;;0>nH84GI-2lW*Z&EFuZSg4{#MxwCS{%MiBnc>JGMqb{^2{o1m7aO>KU{Mxud zXK$EwZjhbfj~Shq7Vj`m?4Co}0e69pd~=sOGc5*uf%F z8DaSt6X$$9+keMf5bzdD9~Y9tI3QXu1ptOvky%;!-d#M3d;`Xaxs`ib0>$l^$^>{v+Mnb)V0< zEMl^7sZjkiNjlb(PFgHU1e(Mrk`QA^wxO;Wark@GBiy!HW@qmGJ)UCI$kWOA8z_mU z29@L#HFr*V0(mN-xcdt!$evfia^^uFf|{npsE45=dX0eSub_uW9oJ@3;1k)=_0OE< zZdQljT4ZWcAs(4lU)+_{o_X0KnM|@g)?{QQDVnJTj)`g)H~0%rz>iP z!O>>axLSyEs7m^s+%67o*d2gcu__j&cRF8%=GJu9l<%q7kGU}3cKUll9twQ6oH0UA zCpYW$rr0i~q54}bb(pQMK>?OP`O4awx_IUEyL+9`pEa_yrJ0-x9gJq%`0u}eG*LLA zSem8>HbUlQdlTwL2!54--#;CngSgaae*J29D5{-6N-%M?0%`~s8HQqK?2KRLQD{+i z0s|PZVap*>u&B!D@UP~*|Nhs@&8UuGDlfgXJCqi1Fn|4#G`x)MHPKa+3=d%7_p=Vy zs6@3|F;w=C>W2J~V+z8g4C1AUADrBF9b$0at*AN17gS>$x}g3`M)aIhozn>*5tLyAI34ngW49nhw|jFe1dAX1D~@?2wMd08Kj{VG|7 zeTW`MNkA*e#_>=tKQ(o9$)_*s_r$QPOSl%UO?3UkThxZUHfPVt2S}oAHI)e;b*ji) z9F?O*G32|hH{I`F&SZf$NXxgAuXyBH z@=%gO``z8Po0NE3axEVJmGT&y)ysov1|j&bF#uCsjOC_XVM+CxYRk-dV{R-?Akn{q z_RAoQn3%q58xl#%KIgV3CtVH|7I+a5iz3R^xH=njIS6q1h2a-%io5!B5J^WotSS_61KT#W?Mvt}{w3a$vXsZwK&hCGOJK6uVX`EI z1xv*ccn{Cd#eKP+Q|0w&AiUULAbO3`^f2Jz0VN;%p4HF({;DwW-DPN#d?$j-VTS{n za2vz2QvtG%2$Y|1w=xeEosFgAW2**!Z0O1K!0R77$x&zMc?LkMA>^t-y-ivWs*((t zu|zk`XQtGTGmr)iK2>uSy43iql&mU@4LOQmfOdc|#oGAj#Te?l?uE3+i$=qRHo%D(ITZu2OsQ;(e4T!m%ncSXR3#+$(BIHEnc@)wP-Eci*UddDOA-JyQC(&=0ueqS8 zzeuTOh7e;_L|S2BNBL1f|JoPcA*nd4QBlj9Mhy4)|B3b@a5y~*6724`SJ_A*q>=}e z*;$So2CK(49w!o1b&jpLWt&8=)=Jp0VN*yJl>hg^ zXp|>{qgV#2U~F*r`uBD)k~QklfuM2A!M?jKB4=t6#|uCpfFRM6jZcM;Nb`1T zY05A$hqb3l#qeD+t&ve|x+kIxOM{++1Uc2&eu9wZ%xT$4F{1=FZKfz5X$F1{vc(J; zsm^M|Cg(ghVZ54>8jvxU6tCxso66FT$ri#U-`}UA9|a~NrV5AIvgQi|%34yp!$}su zi@N61e$vLPPB-J@#3W<81Bc{J7@Sq60Pez{zH(t);MI?c5h0Za;aOA#SK^ofS$v|% zB%acV9o-)qX?V8mCPKrEW`HMAyPUXl60Q;jWE86#V3J;eaUAS+H+|Y?4(s#X4{Gd) zZBgcOQ|gzzRR7VwGLn>@)%vRukR38c8xs|APyk31UP1VCLO2DfrvaaI+vXsJrPNEO z%3(;FRLj%V11V*^psJZR5k}yiW|~vK(#HF5;<2PBL8P<2NRT$QRk3@${FW@I=NeD& zjxr??oX@VTWz2r&*wu59C?cKgS{a0==4aoWnIF}^hxcm-M<}a)^b_SR@VMnz+j%GCxVm~^ODS%A?&>T-mJO+d)F6&3ZT2d~nUr?hU`!2OYrh%s zs??&sC&{S^6gRb_hTj*nD&u$mTYTFGwc5Jv3*?emB{tqbImktaMM;GVmzx}w*IkTa zL8GI@kI2Xi@!nsud9}4z_nuA8OjC~L#;55U!XRf&UB?1%xhZo+F*TE6&31WAFx|{m z4AAL>-Wlyqw#j<2a*S)jl@wVVf)x0`qVA(UBDN(g@6QC>U&r<4q};?pvf?LoK#lseM5Hs^ZSckH)5>)-9>oU04wL6{n>#j(_Qs~Q=EcH&20OE zz$>tK1g%)%_uJ{`T-4*~9Z~UXUR%GI%*t2rNFcK8?0uE18xqu|b`HQ{5f}L!ZZE>}$UB7z*DrHxB_1r(r~`_gR#li)&Q0v>zj>B5=U3 zds}E|?|9D2yvO@50FnMDcIChzD4Jp!1r;XYZ9JC=)5#a;#kzErIKn|{g_ENR8eCqx z)KjB$LX)fv=n;06wZsN0F4mpk5Xi!iDQ4;~ov)I#@CNe_`b51#-XjT2Heq*klbQ_XGf}}H@cfEO&Rl614S`roH?>_cr1N2mZ_wq6(;)* zT%Rn)_R(w;^iwIpLlCDG&zk~Kn9Rz!Q{NDSY9U)wb8`0prxL=^}1pEJ3}heNEG+_^@xfRJDr}fI7GiySb9J)M6^v zSZvYRA}Z07iri1=$F~0hncG&LN)>t21{_=*AZ|V=$jMz2cOQ}aBI4+?P4dtG{*{vM ztfc5V%X)d-S@*;|5Mwu$q<$7si+J_n00Y;|Hrtfl35 zF{I+neY6tJXvSR^=3W3TwVQ|>1&^=E(Ch*wPnXK$^AL^vMfC7jkqRvv^2AEgq>!QQ z49c5#;FEAwjl^7nijf)+UONudlgUM(2+aa<;Kw*&@fXC{d!~N-O42S4L$?Y$5BK{q zn>i*sUs)zP_9U^~vgU4eAY}`sy_-l_wqs=Qa6Xz}Ci`&jVxejMLH{O9DNiFU+_U6{ z^V<&3Fe|BFvR~K8e1rMtd9)0tw5^{K8v^wnV$OZb@up-WaoYlhSuglxNCSB{o5W6k zSzC*J$5V~B-z^7aO^0dO?Uh>@t=VjZ5_f>aoCf2g(&?FuU7=d}L{DgTE}$?(9d|p# z8DdxC4;H9P@eSfc`fHMjT7w`uy!|FfVot5ryhllniX_B6^%r5iEBduAcxBAJU-26# zsj5}lEpAD{BP}D#(iYE&0Jj!i^u#RqrlI91+Zar2vE|BhtzOBZET^~2zCLbMVX5R6R8`bksm4~Zk5(j;BqQv8ZcbK0n6AK8k*B=Bd(E#B zuLcCK-M3LKbchk?mKa7r3_?%o9`RC?vf+)hrpp?%EJ*PpV`N4k^zf=3Uzp1EJ&36w zco#{#TpYA8Kt(h9>s1(-{F{!yl??>-3GBVLDF;SF`O7o98cCnR_EU*8-=b~hxC6q; z&jmcCFLqBic~f8YpecZM%+mlA2DRQ!=#+jM_@G&8e$$p5RhS=}e_+4(6?>uUsMSS) z60Ot)wM#VHB8}lvynz#5+S0t;dgxJgP}NEfC`jtq3Wp~3Xoyb+MKt=n)D<`9utp** zJfafOaT##3z^$ImdJ1BfzHKe`Hdyq77E9hTPKBu^?0XYkdHtP5m>4uQ#6jY*nT%HU z)V7-FZ1_lLQiP*5*~0nDqh=5i^cBjAa|4xPp%~iy-dH4BQ;{*Hut!vXgtkjS5yY~! zQjUpw+U5419ofB!4PP9u7UQCRn}|#Zy#WRtv-VpALCk~2HCc>TXi9Y4(vbnrTBRY5 zZX+mA>Su>ZROfzEYd{Raq(jW#1Q4p1V&IXUWMEso51T6A6%Cojk=pz02=ZR}6R(J| zUGoWQsk##jKMq`?3Qr`tm^2r8J}90s8mi+T4~$zWg}q{(H^LX69U_=Nfb7HbN(z97 zKL!G^SUq&`rj;_Wi&`p|1b>=31@u*?%Eh#eOHT5%w?v7DQ7b`Ot_$Taw8^8q6@D;GB2?{tc$pg$$#gPj$K#`N^-&#RPa9)k zjQv!vzLiRHd2us{((Sa31|+IooJ)Ar9J8g?h$rV=*IJbMM-jC;tqk|=xpR6z3; zoXOSNeVWbUh_eb-tW*`VwGuXG(@B3|P9lN$)v5~ADX{JbJGV=Z^e&_a3!#!uvy3FXUq}C6=NT!;_s1 z;3F`>t$W8U6n_1nwC(dHk*qE8Nnl@tz;T| zgdv(h226N5BTd(ORj{p&$kSdy==;ViF=0Z>POm((Xt?zqtp0UI{06}XJzvS3tvXiN zPPbdJr22k)=i`O5H~epHqfGVD0smdW|LdmK%P)_wWG}XZb-7fu_xx$X!Lm#kt${_JvyFm42Qd1^bq=k(@Jt7Kt`C3JEs|=E$0OdiCQR7nlq}!r} zYrvKExs}^W)tLIeB3o{=1x`+p-c@5Jx-JL9gZUPOYQ^o(`+(!s*0l$f`j5;~o=Ciw znozDBq(%VQ$du?WLiycJZs5A-8E?B-UysE@A$V3)lJ}w3xa_)~c z9G27y3?Wge1Qk866R{zbNv7=rA=tp`p+ z%+B(W*1|Ww7@Gk8p45b1(#2j;m3X;wg}RC-NF&W~A~^r%;8kykPW;Ow`#p`5(}>AI z9}(;32xfvcMuF0jXyjvcEeKnz`?pt*o#75U)QN7 zj~39xg0JGu{2hO{dg_z*%wTiz34D6U90Ir1@|Bs#c}sSiJ8WCpCorM8q-l0%!ra+!sFT&SLG*ZlU^3 zWE-qy)7;nj(bYuO5`H;h)#hhFDr0PD8Kst?%>4y4PL6dLsCx2Cvv0D2yC;B6CVgI8r6eVvFROt)e)w*UofQt z>@iqHuA1OfG{oPP|0#s!#?@1b3S2Oeh)PC%&g3)#g=7>zR~+NO`&Ca zQ@yj2#+MUYV8t53hYWg5e*p%u;ws)hr)e+=SKKVMByNR!U;o(1&;4+Kj?W{#UUQg^ zE?X+?!L}az(bvhMcqrZ`m_J=!<*xCkcizh&Qze}FaP{!{hrvURmzC+#>Lq&bM_dcE zDEpwA2-i%YPQX>ta=DDBN?SP)dzi}Vld97O*I%Un8Ndzk_CxN>oKgK;D##UENr&{a zaxoeO5EV3fa-|eL)YRP_@;35%hp3y|J-nZM^lLx(?#j7_po=s7&d;!*W*zBRLJY*Z zJxNn|&%!c!Z>O1lx9NCzcw*tG zN0}Oi$Dgr=W6duyc!nr*Z$a%kgob<+90=2;f?5mS@wgtFy`8k3KZ)L=&!ndDVm0;} zY!I2J8G>oF59jJ%PoIYs9T%o_etH08$V6@iOIkd~aV10UZw5BqO}niUXfAD9tr}G5 z>UM%7@*>75|FUJ_)o~T`Msq*OiSK$u2ly}N2xj2iAaJpYY^xHaSHBrOJ@ooS{g!|! zwKrOvD+(NRDH~V{*CoP;a~Jy? zF^?g{8SsI^$&N5!~Rv!VaKlRa2M>Lv5h4kB1J zpM6cqJ7wS%1|0TfIhgW@twygtkC;N#@=m|YIbkdZC&*ba0E%`g!@G=4KrXy8sKRRP za#K>VMjgeou4|v?5+9KSVV2>pkpB&9Pb;!_1G=`^xf>rabwRRe%1CUgtB6W7T z!kANX47k>4qRHLWKBp*Mftn?@CZhEaWjk77mV@X$ca5nC&k|xEV_7;4F`$;Du=Hm4^#`_Ht#CjHZ(k9cgdE z$bRpz-Y3@_Ka%O6N^76H{T1c>oMf*-svMPe+_HrT##aG1dcMC$&y4_EZpY3;gJJQ57sEo7r{pOAdaTBG>;aIp9yNc6sU6&9pw?Eljrfuu6E6)HT-&+rLhG72gzdA; zW?X;SmaehogIgO1`1*)o1^}DcDI?NfTP42#tKPWt;LlG8IMA?S_1{hRBW>Zbk=rX; z^b&LdrdnaDkGJt z7;OpY@%Nc=iMSKRJdN0QJJNqIEa9>S6~T@y1P4-&T`z_L;)o*#`ziNatE>Di!O2$F zdWM0&Y=D3<=8+-Tw6Fd>^%x^w?j4Zu(1sG?*RbMQS#Ev&@S-|7#dMS_d@L?XOLxZg zpm`G#ONL(NwA5ZApyTgii#d8#ak>e7VsecWkre56=9Z~-#d>IAl%qH$TL&LK!I&BR z)k}IJOO=L=Iln?Y*`z$y-q55TQHeFNEL#^d8 zbK5d?vcFF*CJrtz$L2qS(HXy=laxv;(*PJE7GbkOAc(vd5$J;pZ%fkbi=y~Mlax>m z9FblK=d!EO)sI=SYumh&`Qcz|DYdVABj*JageWJDZ;y!C)CU{N)RNh-khqHtS!n@g%1z!@TTqeEB7zPko}>lZlqCn??zGu(hu=ZJ5z zrwg`%&y=)CLO5#<{VpZd(zdyOP%OYLKyjKX!s1$S<&t4PyTi>=N`gqc)!(n$g5a#K z?4>&OPNjJze=TElSZ#RoEURPIq+Cc+jub4aSi`u&`G z?TR$*#gURKzh}=WTK<2Txs)jEWn9Bmkyn%jBZ~yt)^sqj(?vqcRq2kZK-fB1i(>ok z!_-DUtv7Ti^1DrSa|*5dCsukpy&&KBWnZdc*91d&#{`F{4fJ5ygi}VTiBBWW@yd&^ zeHlD>I#s>$z5StlqobK3D0vdFgy;!xM5(7^C(my$s-N;n&5t~5Iv24tB-XvXd5}UW zXFx&NQ}{`}O^QDtj>@MyVZ{OV8tlET+l$~FN|YH)bY0jW(h2^u(f##}ryar&ToxGN zn}PvRVL-|wnYnXsh&CqO8-#pMfUqeL^JpNcprekw;8>r5HfS)|4h7&Kb&-+r5)p-u zo&uHa{cgM$DE6cd>(@OlI@{K&0`^e)E7!Ti%*~T|Hfsdcr%%IjwA|3?!He?1B2?(x zD14L>#M1HLTA5W1Z)MWWS6Ust6(%R+xRrh$9$K1jrB-u15U_Yu-rv3yynv>p1}@e$ z+h|BS=PXAkRJ|GsV=DOV*-jBeoObdG4HR)?_c;d&F(=Bj%(XRaywy-TM3fUi#;xhq zROSIRiomvIdx>UvL~7#_jdg@B#5Q2~Z(KqZ-nqCnueQu}QKb6y9PUl+9y{K~-b)v1ZhmvFSjf@k{5e2FyorGmQF{x-E@Yu>@#9?|ob%NLP ze$l1a&XH+Dn@y>|!ZF(LPB|S}U@c)!W!&Tpn?AHsvWwsij$WY`M7yFul?uDgp1SdB z@mful!;t1NZ&LG8#d_YZXJ4RHfi>{cp`>B*o0{p>S}JgzB}Uuhp3_1O%dRcu;=d?v z0;*pbT^_V^(5njYJeWr;^PCPO7JikBErQ)q_nPR!4WitaZI zphJk0QZ58+H)=JU1hME#RC&>cMtW`V5~Z@@Hr|vwNXRr@gp5R(;Xt`M@>Th`hA3p4 zD{#zkGXc$~oMkY3t~cx3KT6V=HGsitN&HbzJv(=CFoKt5Y(OcsE#}q!3a>+6X~T9m zsnV%~LZT0xF;HAl*X3O>nE)CLP`O;*?CFDgYH6#Z3UxsYE+ zAFi6ow+~dKohbu0SSQD_u(7vh%2(#Z18<_ z2~zL@Q`QJ=-^BVVc{KRc{A~!q4S)YfkypU^s%8VcOH;%IeuySy2gN(Hs6zj~A^lom9p*^p#`tu?Cc z(KSyDMt^UVseG(jS;pi6#V~q72N3`v4@#A-soi-kN<6zxgLYl1nMkGqFj9Odo-0Rn z7+HF{%6=Co@{=I1++fj)dwZCoBFYud?zEd&8pk+Y3o|h>aVz#L;Qo4g?UjTT#c;4I z%_ohU9oGZJ@ZBu?(i5o?JP3cx=dDL{GI$_c3NcVCBqZJC$YGQshB-;}qChQigrUf& z|I)toh;3zLLbz*1)yd)`1}q3e18@^LME?2T|KpOetCjut0CeR2e-?W6AccG+9;(vH z9a2CtaQsaw*m1?TD0sbAW`ArVidNvEn9!dduYr||<-nY^koc}pQ7xpZp73>cQ@!~C zOjR+7%`Fz7PHkJaCyuL%0|83G%S4qK%&!#V$~P^0C|NwpyS*R0<2Qg3O)dPqzAew_ zhpf0DUSn5UCI-$J2&LyXkfQ&R=};~&u*=w6lN4#UWBzYYx0ccMrfn^74XtAhP;qTz z7N*)N)i)ZV6gyiOFV%$W=X8czI&`lF=)y38JCh1Fa#>W5jqw(JCt^OVxQU?<#H?;? zCh69&P#Nu<8ArJ7p7(vo45hS&S^ ze7aTxK|8%3b;gVWwD)(i);8ZMOAT>5ZBnY67P?7~0P2RT{<$Ztg?^p)6q~SQJfDf4 zSxtwj70-!b4G9NJnd)JN10J>@ND0MHc)d+UG^}L&!RIQ0@jB49S%*FFSiex0qQDJk z#b`Q@QL9Khq`G<^54dK!JB{UH>N>`-)|l%v`fWel7IgW?<3Fdtsi?%Tj$nUpv5v_% zciO!Ak_r@C#Z5e>c&(1fgu$XNu(tI1VeEFtcNJnTM) zuEKI#%-BY5*2wbfkV7U(4Qvfzyv~p3&vDA5Xk~e|S{tAa6uTIqnqop}y2tT_yIZcH z1of1{$h9N*n?N|O-lP}u1q@zZqZl2FN3i@mtKwSkcZB|uxr5tJ+6T8>Km)R?a)+xNL7+M zE)t~1@qHV`M0Opqa^Bl_OmJgxRpK3)7*2r5$=`ZqXgI8N-Ge9ev*9ZBry`*1vdWjU z&5#=g{Ea!)7GhI49H;U~YGHKDD6F7Z)f8=Au&cz5x~o?pms4O-xWv<^_%gp{W5|xg zl?n+1q9eb#U+GCh2N@q}V~ox@WRr6G&w3Y+QKDOo$*L=Tgj-8P{$uh^({)nwVyBAV zUk5vszUg6C6Qp;Ne0!=!l;;71@<{01FgYEDtmdD!8@5626h8x899*R(f}`Evrebt!0UYgX8O|*c?lUet|xU!1*_-TV9IT zhQAoR5Ky?^gnpVI82?byU-g9l6H_%~cKVZZXOZWCr)4dE7GVU4z=;%=3F|O1nM1J(RtOKng_gQsm@OjVX;Z-n;iaIi=&+U= z6i!z$1Y}=fe?sKZ;#H4TXiWwR*N8?sA!9pzzuYYvb*s$z>pnuC2y*xJQBi7WPE`*D zmBzcO2WdO5OR^zvDyUd%Ra&<8l;+eU>G^s@V*J`Y0HGRUc+6NHVm^jNHJruhn6$KmDLU09d@=74#L^~!%Q2+YH7quOB zNA;K6_#*y9$K%)jXqkahzDjq9a^9W698l!LWnae?t z*7s|pGQ;qV{^A?|KU?RbC^v2^TY&TbKb#yBcSO`Gpq=YU?7h1siUbOU2PyIr@5Rn8 z7-Z*;Q4ZoKP7k2H;$x&%B&dr22nX`6o8S)rgoAJC)_Hjc= z!9z7O3nbmMWp?iZy=!t@e~Lb@l}ERW3^$4J98T+^5vz3|gx%!*oe2z$ISa81vq^Gm zlIn40&quq!*;UFb*|tkgPk|6p5Twpv1g}@`nyLJ^=idZes_Sa8P+Lq_>_WTC{|a@9 zzvH(2>w$2pYGy7b`A#EuGDmEmC!wc1*7cXb z;m1W#WNGD=z?7C^s>s{|tu^0u9L=6FoWVr5emMzSt{RXzgpXK~)ita7{f0yGJiTjw zrL&eSgqt(_lmr)gLXBjey04wHCJ#nIRxej5KQ}o1dP^<8s!`|#=c!e{t9vh+ORa`? zEJ_`)iPc(mBRUpTC|;!fEy^`#CBDn!wO$w0Ff3!BoS5cFjw zD(57{;v^wTQ&oD4nVij)%8EqM$V8Ob84`>(_YgpZ!n?NY<&C7jU-Q`!6%Rlz^F#ZQ z(SC-9Kha_$!wM59l_neN-KsST{`Fm( z%U%LH2pa?Qm1TjOqUfWPwt1$MUj%HA=H-Cj5+4N#xgIv?6ho+q)g|!6pyW&si?$w{ zr;%@i&|T-p9Sq?l#ld45#IoQ9Dt>pe(a*Bqo?`+7^pMQt{|a%&ug^RlhQ9}l3l0Gv zJx{5YAu!yk@VueMX3y~2ViG`w9{Ma3YRN779%38RxQgdjw=4^^w~u}gZ*HPYTbdwl zM%~EiEz%*@%;`uvwR6iYuWCsVk}5kU&~Io6U&OP7Qc`Y+gVH8cc;gtXq(X9)3QBK_ z6v&^;CX*aSV9N1@#Y9r~jmMOVLDF0@vm5R(1&TSrFanBDOtNr#0x<$qYf4-?f{pE=c6Zc5^v>>NVkP-*i%_TXK@C^&Tnd z6BeFKkG-a}k+#`XW3HAoG)XB#%6ℜ43>Ehadu)O^kJ8kxDn;XM;|)22BWeHLCa7 zhb}w!@MI7x48`b2Y?X8`rt}J(9U;-Q1W4ou#XrSk90kxQETO`KLf&`fEy{dpMIzIF zt>;Zyxlj%R+Hp6sdAGeZCfQt(4pVnTPcpJ%921Kao$mL5(qow9wg`R#`W_1|0;XsodydZ7&TA^9!O))6FR3x!q58O)(Vnj5x zQWug9AMx%qv_zUzd~^*Q*@WT>WrM2NaT05Rv5)OrPC&$UWt>E&wsE(5yH2Pz7u}U? zVG7u#Ab~ni1%P5^nXZsf-D@Y-fe9&VFB<3e`x%(|SK14A7KX zpwjXwnZ9?J|*WPx#%xr+1t&TXZ}r-x=k-Gj(3!SD^q_T zzX~YHcogPR&&sYus6ZpjbdV&HAyk8n+St|`m^pEZu>XV|B^}s=MjEp&j1aMz)knoG zBY&4qym2C_uM=nk^AUxLBVy~^p^dwLr@nL(rWbEqQa%>thmK~I+&~rsV zIq&d=61z!Cu=8yJK@9ffTL!#sLI_gpp2ToOliJ2FxosG$yG%v7_pFiKF88-| z*tDTEzg-j^@98vL!&*_J*M3PX+y%v&0(`;GD!a+Owo>22Z%~(bV9sRzS~#tz@)GzUG;RMg|dg z@V*Je=S7;0`Z@L38x5zKKyJK>sRj{k8BvylSend(UV8SdrR@WS`}pj>wl2OpIc9Jf zrGJA;$jN1I#mZDZ4O7l4?2q3gufSsETvLZ0`#AB!`8}TE&Y03j`7f5K=@)&Y zIc&V$1jcp<$5LOk?;o2eN;z6Z_@_?Ye!^(xq#N(uv9~nPE4u{^Q(pzbU zQuf^8Ps(AvHOYD}$n+cX*6o8FdGi72bN*{bjTog{X;}}{YZttK6`E?tz@_YRZkaGE zD~?5&$Q<#K`jXhR)U>i$a==<0VYsG}LveDRTz_m-etl22o<0~ItF~>Fe;ki8Pqpb# ztK~Rz!hMGvMb2UNZ4NZX9a5APV{&ZFl3e9fE`gGQtwgVnKi+%ET&zNCN0uQzw69cK z1r>MC-3dJuFk0fE;ebWq@PPuw--P}d+!Y^9EH}Z)zC_ofcR`5{AP8NOP zQb)R>Dj0)s;i+E+x{3O%mBx#+nbnfXBZU16p)U42g?4E%`u^_7rsJyZ%scLCdplGz+Hr{nzFLn`DSfe#0F**W-2xgPt`r@-5Zi}qxRpFt1 zdkIVvHTuTrW3hguxeBVJfNv#31bKdy+2dNU8jOo+-X`s9?0CYk$;@$jN6&B0vX|K_ zF|o~gC~Z1vlPFiMsTVoafn`;qlv&DfMQTVD6Nc1{84te)+gHj(@Q(E%qXjoVe_D(V z2bwCqZ@5%Ou!`Dd^d+}B%A^ibqrQ@Th}_c%Y_nU=Xw6=i&DdtpVVr5;-G5-0Gh3gA zH1soA)DsfWVX7R1C@e%OBuG(GCWZQYlpjUl0Djd|y)*ip9l^>{lXQpMSx#t7ei)NWy=|pkKN$+m~$tnpFwO3ElOdFG*-!$2f9zh@GCRBdV$b9Q~OT)Zys?Jy)RPC z)o^t9o8erEPTHdxG6ACC&c5tUtKw(Vn8mcKLj%)rnQt$A4$Y0&7no3gLif@>CGB5X zR1&N2=}lR$FqfX|h5!20gSJd|v0Tc-%$D@{TrV0g@Ec1_HLjRBe|f)2A%bzn*j4~K zyBR>R>32TT<@RMg#A3FBB@{zyvbDZ1cc;&{DfF3W>byK;VlDw1q9k0%68DA?;>|||7&7zjF!r|RGE+(CQbOhTyO88 zPJkCV=*%s0anue4Zf-f26FgaW#Z+8+W<05jwdE6?kW39{@W-hcDyJ}@tfe48jb{aX zEAn)g5^$%)UskhgS<7BD(nIHT&PQY9t&~GcA;0qD1t)IJoK#D2H#V*^)+f(n za4qC4cybr6z@+J1TpjLG7j}=94c|`ox;|dz`U`nj@s@|-f$wVQ>pP3c;Ll8Uk<&*Lb5Vi}ECejyQMi$kl+LV~jw zIWH*I8J9^2?iy>Mj_waKt+vCSfY^C}0s!dLyK>^lPz~m5X7NAj^YKN5od4RuKT(uU z4(t_+5u6@0x~LGEyvqnf%sDDmp6_o6GFq}veinbawe*i&DoIn2Ik2&@Xi)Ukz#!&_ zZE}t}>darpC=ET;ewaIc_M%7^gyHFu>lm`3A7|d)*bYhx|0`zjhdGe^F}J88v_XIR z9FK0=Mr1miz@~|%fPl89t!cbLN5E0LTi?Q-ikMYPjww1IQOBig`2<&!obVT$v*!_q ze|PrYW2rsqHGZu_1XY*k3VcE6gQY4Kja-}++c!kbaGRe^lu=$4ildYVe?46B6PR<^ zW0ZqRV*1@}>)3(fSaTh5%Jba&W>h8u(!|b^(-lLe6Z?ZXXrZ4`_xxF}N^=B~C zAykB1seCQ}6Y;~u1_K=k2s7Yb;uM6VKGsho0JDvvH_rf-sX7gfX`m%7m;G9cd`={-R8_&i9?`|PCW|x;HKYZ(QYY{6AAKT-ixSjOcTKsZYW%UR1&0$1(4%J!?Jlz{bvX+}O3S07GwMA#4 zWiVVt001BWNklK+|T;;&9sOyoW3tf9w5PY6hCgM+Pv2I)9ZXL5%HXUK~BDmdc1TwGrYqO{Sz zvWSEn6JQ%;6u45cNcp=4s7W!*&X^MHD)SlYYhB2AY9+^0dVt{GgU{b>neBU=J0J;1 z+FrV)VRrlP;xol5$`X!_{2X_RIo;sU2R)i~Ku!D})x0@x;xmIxhid8uiw-MBN2cB& z3ZRW|VA{mXxaq8as+qyf$@w`!+}Rx5!k;y!eY4(&X@-%v*%ZSn$}|;3>bMxb#e2v= z|8>3>(L#|Afv=4}4b$c#@q~{lE-T`va4bhm=_3?0=$Bi-b+9%^h>c0-Koy4Qynn?e zLmb87$pQk4k(xc5*N*(DnX0_JK0RgopmvOxH@GhPi~-=`H2RjPr7H71LQO7hJqo|86x|M{G$cN29Jm@CmS zK3&B#2Vec?UXx{rI1-C8p?=@{P%yuup@AWRS(6S_ML_l`E{TlaZNTi=7(%CslY6D$ zn}aASo_@RJXCwb^=UT~>g635i<3zU8wCO-{yuuk1(C%YrAxBrQ;wQFz=`;__p8=K& z4gpC7N^X9-6w*oog$7oI=P#-o-+jDWxcmkMo3Ly17sl$i%T8B$P{4kDHB<86*x9f| z@s=sZ?nJs&*6l2d1%Uwy4@{d&Be37Luqf>`_%$f43YDo-*zq1acN0p7%XeDehNgAd z&}~1OTH_5OX_C$y+M4Vx?6YOOw=3UfqgKGRHwght&MPSrzz2E;{QC4 z?!@TZ9%gZJw`eByRmHLGUF`PRLfv=u-%Ia0UG)lamTc;I7kZXepe-VaYwl#k*WI1t zJqGIL!gt_$EvGz&{%s0&qfe7y^w_AQ{Nf|*$4yNc9zWgmlCq#SaL-!tB=cZA-a8CP(;UM8XmU;QHn8kD#OSnfhD`2cOQO^P2g#@bi#>(h2uhc#vUe$K43rmS}d~#F{C7~wt zY4*y=iwFhZZN^Snz?*jD%~=y2bj#)ykeAB{LQeqK&&bPO9lzzCVT8%^}9L| z?tuAJ`U*TK#uai;C3hjA7Q5kNM)OX0>@g|qZ&&pviC;;LC{v{aaT_z;Z_N(cDUuf? zn?MF5#1$sSBR^kDYOl-1-~wev&L$WVqY6XcM^`?k4D<&|Z(36Wz-v>tfFu~)YO037 zEQcZ>`7Z!P;h@9MBCq3rHlh}*lUw^s@Gp~b!U9NzFo#~Deb{O6+;Zq=QcUI1D|z=>EIqZdFKow{54|Mhd~p7*9^WCsvalxKcM#ubW#6 z2V1f$i9R7j{Fz|1E|hd?^)+{8R?W_)IF`p@|A;TxO)UwqlSp}(bPQYztKy-GDPr;T zl7-;5q+=aQ*@`h0ruHha_LWI#Kkj4&qo6S_4C5DM1vjXZ^op*PFLuvD;6LLr8-8de z@qIby6@^~Hf-M}CfX2tMKIrvm3P;2RaNF^waBoESx;N7Fzg_Hw%zpJM`5R)GG^0o8 zwf60nUu|*IN29gHp7O6_NnRyNK)>loEF2jNRokEhiCNu1?5GdUdt0~|UeZ%NNdQPd zx4(~c7&i{eh9>lF4`C1Jul^lutNw4D6RRvz4o(`&#m_Laq>_5r|0DT6dEKIU< z?UVr?^$K2c5)!BL`lcn(trTxx*Y-Gj+IZb^Uw5WZ5*%ebzCsu={Ks^cSp1zvBvAq6 z{7D9->C&PcQpIkVK3CtF{`nn(24#cQEm;E#QpBC|NtRI}(^e+d@6zjv_Yo|IU^bE{{y~LY4 zf1`sJTN`jOR8;GtPKP_F!BeQ!9zAi{vV&U2m7&U@L21osV6px@(ar+afG~=N05-hu zWi5qG251!Q)2=4XopdeJB_-E^&SKrhJx0oS%)aQ?MXwjZXshFdT=}iWUlZ8&H&ez+ zRSMqE1I#*XjvbTCCs9HVLQZ-N-4YLU-Z@JfTag|q)RkRa7`qS1a|ljnf71J)0@bnD zB?=qJk21Og9Ao(>Mbm$VT#Df6`$RAL;rB$qs)rDN9$UHbWl?UsAAT;EuBxVsq`acg z*1+wpRJidf$qH#!m5B21GG5}(l^niVhRdqFaQZ1=cgouy!gqt|NH(cd(4-nmkMfXF z#Nbm=vPd(XUzz}L!oIc0oFgoAMWm{5S+CZEt~q6HL7L^>_d_lMwY{u`Phn2Ve#bhW0a8oJt7L-4-?OwM%LOIUi=sOA#6|l6BBATI##c?b$K8Y5Y&kTmqRc;G zHkSbM7D+od5F4e z1_y$ zA8ao^uJ3M7&vbK#78xTI1(5QLu&d$?fhid)E8_C&}LIG?*Eai2k zb5AIw=@Au1=x?j>3j-$CvhcR#lx3geZU| zf+iiLAL)*#xCN{wV4G+Pp)1 zfwv)Io@^iFjGwUIKtl@$Ve<}TPm~GIt^rHLIlr0goeHX9#{)&ey!+yO#&4kwZc$Y3ok28vKjB}Uy2hN?NdmY`D*BD!iW_bOIj|NHovTM=L0v< zKS){j;>xA-{`s#Hgu6l4BvQ+rfX3z*&Uxce-904%%7gPTcNLSp>nqu`m&r6-ii+b2 z9TgY27SqkU>&5THjcQbjO`ZtPtj5-GM9j^t8`?p~#7@sLk9;I&WqOHl0+)d)PKb4> zrJy71k+>2_2A_>Gtzc1R5Qd}9!fFVxWEh9UYgda~r0wRCF6as09&s_f4&SkG<<@;$ z1tBNPElR&6+06>#T2-Y@_Pgr^oD!(S6ihygIqQ@!OXWS`)}R_uB}*xLZG{F|@MOrX znFSCj&s{?7ANm4%Bqj$NjL^kot~c}JfiRzw!BIRfDuj@ATV+y4`rn}ynQI9T@z*SY zpI2IcjEF}^Y4DbWH7&TBfsKqx!_K7azy*tU#H_o&iQeb{--hfcDlE}yKZ0-vTvWgP z@U%b#n_6qO;I}Nd1d;~J`*@BI-e!oEI<-gBq-$BzJ|4u?Z+AH6_*_QK^AzaRbk5pt ziZ0t|j}zZS%=50$+aCby9U@Gn-3+N(q#a$8j+X;1LRx;(Ml#NK$gA7ViCCTipY2fa zV+xo?-?pP3uoi%{dJFo_^2EFBK`F3Yl*ozE95@{Kr4|y%CNxp1aaOEx;=37Pc?|Ou zyXqg>3^LsrWTSitLPBhh*8|Eec52X<6)@EYiv(cx20-T+hY!No$O-i!-NGlTT<)>5R(cl|wF%;a83f<1_B4{h$08Y+ga zEQM0q($9B+=~=BK0yF>X#Kn2)$_hD)>?@L>Py9$~h%!hCGZK%2Yy?t)*5*=fouyRD+}Mn!Dmuf!Z4Dgu;g=PE+H{<%pZQjeocm zt{mf)ibIq7Dc>Jm{~>cXQpq4Rp)?jh_NCsb2(wJb5k21YQi6jcGl}wLoKbrJ9&?e` zI^cjZg)52Iy%iaM4O~jWUjs))6?smjEzXd$Mkq*Fc9wgHQY-cezdwFH0d zPji`YtC?j<<_=YB&8i;zCTR%rsc&MirQXHxRUA_j%fU()gTMIpJ(RTZpoKMLd97t9 zy|Xe~2vsV|NKzF+9nTIcL~Rfj`t9y=&>fIVv&t;qn!nwKBqf4mBY}>DH~+VVikSx} zQhZs5w@*r63se&vrv>+3OP7zY8KHFYE=Q+FzyN--? zrc}u}>F!nM;TiU+UFJ`k>Z*j9VsIk|i;AnlJV%&QwQQq!30~C=x``%@Sphm zk0@0X7}S6#0O%sFOLTV8^(1b#`u;vE5-c~+ZXq12HBR1aDeJQfzabOo*!h&><*MHI zvqa80ITIzG_?hLM);jaR>(=_gn=5Z~P)*Y9v7g zu7rJ=cV*0EkbJ$&s^1Se_}BLlM4K}%-7Lf_T~zjG>yw|JAeAIv9jLLd67~~F#=^oF zbce-7R?GUmxk=rDuLN2t0)WpP+$26rbKi3gp2CF%I|_2h(gK3fIC5_wyqX$2oJ427rn)4^}}CCjuH%k<@SSi~(;8VSj=4~t5ccy>FK{XpD% zmfoe54yiY4xZ_M;Ax44|r(_v(PQ4vKztPX?zW2!uR!R%NnOY(Gjhl1s`)113cIIY# zyBkKGQjpzzi%csp+lMK_P$Bmr0Voq)Q4?x^+j)m-cp7pd|M>$46lD)IeGGZ&s3j~A zpOjsb^3+!E0&w$onRVYM7l%f$t~i<~pp6~aC4S;30*M)SKiP`y(xD<*Ju$bdDpv#| zC@VoEmOi5xPhsPZOyY9~CCO;-B3VBXfc8bn%!2!9Lh4Fax4To~hic_5kSJUye|#{t ziQ>ACJWSb)jKnVfxc3x%7gS5t0Lpn-LRjU^87&gWfG%np(N(6>oUBO>vh7hURVytL zrOU^rTP_>6Q$mH|?MVA!NL8KY{Ny6y=s^{cXL|gpZL$uJ!Q#cc@QI@wKtkH@VC25+ zUb@0e8Bi+HfP>7fz$M|(?|@AS#u12xn;Odyv{@b0CCu1!T*^lWoaCvWF1~Zrgwq9D z{&Y^Wsy| zDLz7lj}UXc1J72w`1&Ow=WZV6qK#-}b4gP3~M7?6yLqrZliV-<@fh<*KI+4Kyna zrU}(wp~&ITdZ2Ne2mtn^TJaG3G<1btUY)#hBh=Xv8=wR zA#?Lz%X?K=d=*mtEePaK3u$sogBdR93Bjx7yoX(6!oApGoRE}Cvf>?8P&ojNQback zdKAS_xBni>eoW@z)?d$@^%Jz8!nYFeo9?C#(S3b=+8%b^qj$8J=ae}s``rX&r`r8b z2wdLmVgrTWK|=r2oj!{9V&O&Nce|u1InZvVV+8 za3JN#$pdBt3gzE{S1CDl|4o6C&sc_SE-2fEzjNOma4pYBhTO%)Uh>qS@Zm&nh)3^q zHod@uK?SfixQd*Xxp;pwf<7luOuZiwwEz|86 z!V&wi-9&0N_42sq(_S~;MkbgT#} zCdXW20iD&<_jtN(t0X-uM<5SWue{l&sh14ZwqLNKq7mT;B2|?f;dvqr@d-+=c~561 zTLvew0?%tFzzUplAIW06?ol?)7O)~7s#}edhve5k`Ynt)ZP5Hctq8SDj1GPJPVaib z5)!@KTy8ePk#qYR1fe)w+~iB(AI7KjQ>^w%fUnr`>KV)BVORN*{C>DWVf1Ir%&@vZ zY%8#I05dg`o%?q4Y^!IT>k%~_=`kO>`55PwI%J&WwBGv{p7bF`r|UrI`}?el%MUNu zjku5Vjg&k22RS04?gb<(UL6sn(bOjC>7(MYFZ_G2N=#-oj8`NrRx4ebLQ$ZW^}VCo zlw1%==OtxWbp_;%=}-*c6JPOllS9_~B6m}e6fFIatmd{i49c(UX&2o$u zk*cAtw@uM#?92MfEzk75JI~Bzb=_c&Pj-dD6^iAmo?g$YCzW=-EDSTXkPk3*>%1{g zBe&0-by^`IjbylX8?rLGC19{?NK$Q%97lP5|H0yhT^8Qv`p&Lru&Mob!*kN=iSXRB zzR6Qn#zbw4O~_ka_Nc-BwA({IE)ovg%5O;R<_6=A%4*KnYRxo`_VsSWa*c~>v>Mq6 zpb9@`kS;g#!yygzB4ezT$itU&1XnPh**H40#*uc1O7llT0{C*$Z7VxFlMYurFo+FB zAp((XPZ^^lA{Pa|D{rEvNt1Fi;sRQV!kaEh%N4a#{flrD`v}~ms#7kdDpP%As_Cs7 zztJ)-xdkvVHXkEp?)@jLIC&9)SIQJ^?R)oo;6e?ZLo#e5JUv^(9uOG+d;hUE!B;CoC-OCRxx%7(5V+18J1kdKyHoh1ikl(}@%Ag1 zdWa-aZ&8;r03z<%o`S)r0N84p`r7E|`{yQ>Y-FM&4Xdj=u|DCiEIq*pi+PHce1A(i z)8T19srULliqKA&$7I0))>B?Ppv@p3$e_B>fM+*cMSC-bAlwBBY2TZCI(vQ$EnD|( zfAxbfaYGr8{?r`TwLHX;GbU$Oi-}X^%Yslu)L=m!E*{Wk8 z7~qhZ1??kIlQ{NdA>AmS9s1^Y0hObavgZ`%l069i93C-FlTNt|WN&tZ6l9$Hd-ieX zBe5jxl^R6{`>xuP`xbTzzI5#q#9etz5|qe1y3__ED?B^3?Ah9omIrE@JWBaw>$e=D z#o~jUJ;UU6-Au$P&ori!lK%dt?eltuy>!@I;B#awIi3znBvTOj^X1}6h z|GT;`U*>ttvTfRzpn7ccDq50ncYP&Q)J%mW$L}1JxI)GBuk-r|3Ov#G!ztpgT*Se+ z4)Lp)ofupsZm~2w4qpXt4@9sVU%GgrKA<6oAW&m~%j1-~1)Hmu)2xScil*sDLK-c> z5%E8$XjcS8d4px6()h`YLpqcgG8i@x%-D% zlv&)Qc=!tNLB2N5LT#LV+!4TS7>20i8W&CR<}cK3och`31j9D9kx+nrLH^44Gt3KhVOE( z!ng!ZvXM)=fx_?!Z_6%Zny&CmW#g6hQ?X zz1&LQhYGu>Qp&vFg_oFFk+mQYqYx}JW7+VVQabZ%RG*fhCo7;8#ioUc*5n=jlJYpb zvKTQduIgNzm$5tac%it5kIIQp3U*dk*4R+cllDo+P$aOaLgmIXwcf%X>+w zC8J~E2LX?&kVRa;6AN1@_9HIlZgi1%v@XZVQCf7QVs6^%49Ia9V|4I-=13_+uW=_x z2rCTt*DtOR*%{VJpkkEwP&o3S6#bN>;8Zx4Slne>ucH$jQrg2|)C(SIu^aFVT%_E) zd#Mv-`OL@CwZN@*s(ZrqiWxHbpqM@(dsouoJ93Gmq|>KvHgg`hAQ+^rE5govo^uth?4@uAfn_h+SFdpT z6B_pzl5I1eU|GpB1*J!+da~4aR7Umi9X+Ya4=Z$F(`VX7Av{hQ>OBb(dvKB0S=2@4 zp>1GgnM1S{%;U8T-|j4ELe1)k4Fxmhv3ARio21A<$WsQl_1WuvzpwxN`EN5vSJ9YU z0sE`w)F&kFMa4r)4i?PlJn;L`^EcHee}+jU_1j4s$&=>*tKh4Gmm*oIDATK8U3W{O z+Ui(Vqm>*3$_aecZa1R;ml4*pY2tecwV zro8Je#=Ljww=?K&>!p`k@QOfkAI{P0+J%)oWE<7F%K2GZvhib!W9Wkk4SrrM@MCb( zutRm6@nUBwi>@IQgU55H!hQ|YEF!=aO=wed!NOoox4UQRYT+l)2`>Ap~q$ zfCFAfBTKGt474fQza}mS-qKr55zA?FA?zj9BCBmgioLvW&Uw@SWuL;0r=OzzBhqo` z0h#;K4eg*%bZiVu@Qyk_{P8i;3YNSiA}Hp0lY1?kp#o$XnkA>4&tLO2L;bHRq+);) z-EUYKs6#01uvPEig(;|{A$nBDyI2a|mW0{vy6*#M+JGzZsVJd58uTN)4RqW5{%2ev z`qVRAw;^w-Z4$ZV(E~U70ZWY(({C48PdL*QswE*M(45XjUd}b5SNR4 zAQ<9<T%ih^b1K)#xQBO-pw1Mi$f)09 zIHsC(*K?C9TVdkPHRK)HVzKa$O3aF^IDvk~Qe9}`%SXNrTypU#$kReryYw{7Yt-P_ zGT!75X<4{b7(zs*KS-Fq)XADy9}XmwO}8mS)SCy@9nvdb#m36{t#=gm@WHHL!NJ;E`jH zYEz%M2;+xWSuCqeI!ha7S~2HiLKpxJn<;Gdgd)@obi0i6HKLC{AH34El5x>SG3d__FEW|))}Q{T@@=w03FvsmP2 z4st9@$bFpk7ga}dZ(I}eNv5Yd7S_?T2V65R;-3jk4!B z=5@9pR)Zs2Yzi=C12*BrA-6vf%NCv?dq!#M{^_?5v>O8sKoi5oKz@lOB>feWddTKP zzR}0?R+5{atg(|~Qe!>cddsExvS?AhSn#iBahAd;$XLCG^k_#(o`D5%4HmtN*H%JM8i zep(7jA)ZmdPsr5z0#^(4h^Aoyr^u1MYeZ!$Xo($;3UK8yPilwdbVaqN`9ip^mCTyw z1X)uJ6+`sKtdwKB>=PlS>L48rmb=;4ZMSS!2~i-T!a(JSC4WMnB7vOnLXc?(N*H3s z@x;nRqq*)HSE-+K3?qhLLAq1AZEC$MjO6XW1pi{IE_!EsxlYC#J6(PcTOESE&_5v-h)-to%nx2EtD45xM9`+=4LGZV#Cn(EQp zyopkZVH4VNXLsrJIYSA?lU_P!4pdJx<;a)#Q7k@?l^B&E;-(|^jt>=MO5vbEIc*26 z<+i((De(|%;rm8ZMX-=m5_=#u*GN7N%Ag3V20Di0)CXvAZhNA@y}wP#%EVZ~eU2*CVD&%4hrQtdWHQ9 CJdk6`1m#Ow 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", replace, markdown, flags=re.I | re.M) + + +# ----------------------------------------------------------------------------- +# Helper functions +# ----------------------------------------------------------------------------- + + +# Create a flag of a specific type +def flag(args: str, page: Page, files: Files): + type, *_ = args.split(" ", 1) + if type == "experimental": + return _badge_for_experimental(page, files) + elif type == "required": + return _badge_for_required(page, files) + elif type == "customization": + return _badge_for_customization(page, files) + elif type == "metadata": + return _badge_for_metadata(page, files) + elif type == "multiple": + return _badge_for_multiple(page, files) + raise RuntimeError(f"Unknown type: {type}") + + +# Create a linkable option +def option(type: str): + _, *_, name = re.split(r"[.:]", type) + return f"[`{name}`](#+{type}){{ #+{type} }}\n\n" + + +# Create a linkable setting - @todo append them to the bottom of the page +def setting(type: str): + _, *_, name = re.split(r"[.*]", type) + return f"`{name}` {{ #{type} }}\n\n[{type}]: #{type}\n\n" + + +# ----------------------------------------------------------------------------- + + +# Resolve path of file relative to given page - the posixpath always includes +# one additional level of `..` which we need to remove +def _resolve_path(path: str, page: Page, files: Files): + path, anchor, *_ = f"{path}#".split("#") + path = _resolve(files.get_file_from_path(path), page) + return "#".join([path, anchor]) if anchor else path + + +# Resolve path of file relative to given page - the posixpath always includes +# one additional level of `..` which we need to remove +def _resolve(file: File, page: Page): + try: + path = posixpath.relpath(file.src_uri, page.file.src_uri) + return posixpath.sep.join(path.split(posixpath.sep)[1:]) + except Exception as e: + raise Exception(f"Cannot resolve path for {file} relative to {page}") from e + + +# ----------------------------------------------------------------------------- + + +# Create badge +def _badge(icon: str, text: str = "", type: str = ""): + classes = f"mdx-badge mdx-badge--{type}" if type else "mdx-badge" + return "".join( + [ + f'', + *([f'{text}'] if text else []), + "", + ] + ) + + +# Create sponsors badge +def _badge_for_sponsors(page: Page, files: Files): + icon = "material-heart" + href = _resolve_path("index.md", page, files) + return _badge(icon=f"[:{icon}:]({href} 'Sponsors only')", type="heart") + + +# Create badge for version +def _badge_for_version(text: str, page: Page, files: Files): + spec = text + path = f"release-notes.md#{spec}" + + # Return badge + icon = "material-tag-outline" + href = _resolve_path(path, page, files) + return _badge( + icon=f"[]({href} 'Minimum version')", + text=f"[:{icon}: {text}]({href})" if spec else "", + ) # {_resolve_path(path, page, files)} + + +# Create badge for feature +def _badge_for_feature(text: str, page: Page, files: Files): + icon = "material-toggle-switch" + href = _resolve_path("index.md", page, files) + return _badge(icon=f"[:{icon}:]({href} 'Optional feature')", text=text) + + +# Create badge for plugin +def _badge_for_plugin(text: str, page: Page, files: Files): + icon = "material-floppy" + href = _resolve_path("index.md", page, files) + return _badge(icon=f"[:{icon}:]({href} 'Plugin')", text=text) + + +# Create badge for extension +def _badge_for_extension(text: str, page: Page, files: Files): + icon = "material-language-markdown" + href = _resolve_path("index.md", page, files) + return _badge(icon=f"[:{icon}:]({href} 'Markdown extension')", text=text) + + +# Create badge for utility +def _badge_for_utility(text: str, page: Page, files: Files): + icon = "material-package-variant" + href = _resolve_path("index.md", page, files) + return _badge(icon=f"[:{icon}:]({href} 'Third-party utility')", text=text) + + +# Create badge for example +def _badge_for_example(text: str, page: Page, files: Files): + return "\n".join( + [ + _badge_for_example_download(text, page, files), + _badge_for_example_view(text, page, files), + ] + ) + + +# Create badge for example view +def _badge_for_example_view(text: str, page: Page, files: Files): + icon = "material-folder-eye" + href = f"https://mkdocs-material.github.io/examples/{text}/" + return _badge(icon=f"[:{icon}:]({href} 'View example')", type="right") + + +# Create badge for example download +def _badge_for_example_download(text: str, page: Page, files: Files): + icon = "material-folder-download" + href = f"https://mkdocs-material.github.io/examples/{text}.zip" + return _badge( + icon=f"[:{icon}:]({href} 'Download example files')", + text=f"[`.zip`]({href})", + type="right", + ) + + +# Create badge for demo repository +def _badge_for_demo(text: str, page: Page, files: Files): + icon = "material-github" + href = f"https://github.com/mkdocs-material/{text}" + return _badge(icon=f"[:{icon}:]({href} 'Demo repository')", text=text, type="right") + + +# Create badge for default value +def _badge_for_default(text: str, page: Page, files: Files): + icon = "material-water" + href = _resolve_path("conventions.md#default", page, files) + return _badge(icon=f"[:{icon}:]({href} 'Default value')", text=text) + + +# Create badge for empty default value +def _badge_for_default_none(page: Page, files: Files): + icon = "material-water-outline" + href = _resolve_path("conventions.md#default", page, files) + return _badge(icon=f"[:{icon}:]({href} 'Default value is empty')") + + +# Create badge for computed default value +def _badge_for_default_computed(page: Page, files: Files): + icon = "material-water-check" + href = _resolve_path("conventions.md#default", page, files) + return _badge(icon=f"[:{icon}:]({href} 'Default value is computed')") + + +# Create badge for metadata property flag +def _badge_for_metadata(page: Page, files: Files): + icon = "material-list-box-outline" + href = _resolve_path("conventions.md#metadata", page, files) + return _badge(icon=f"[:{icon}:]({href} 'Metadata property')") + + +# Create badge for required value flag +def _badge_for_required(page: Page, files: Files): + icon = "material-alert" + href = _resolve_path("conventions.md#required", page, files) + return _badge(icon=f"[:{icon}:]({href} 'Required value')") + + +# Create badge for customization flag +def _badge_for_customization(page: Page, files: Files): + icon = "material-brush-variant" + href = _resolve_path("conventions.md#customization", page, files) + return _badge(icon=f"[:{icon}:]({href} 'Customization')") + + +# Create badge for multiple instance flag +def _badge_for_multiple(page: Page, files: Files): + icon = "material-inbox-multiple" + href = _resolve_path("conventions.md#multiple-instances", page, files) + return _badge(icon=f"[:{icon}:]({href} 'Multiple instances')") + + +# Create badge for experimental flag +def _badge_for_experimental(page: Page, files: Files): + icon = "material-flask-outline" + href = _resolve_path("conventions.md#experimental", page, files) + return _badge(icon=f"[:{icon}:]({href} 'Experimental')") diff --git a/docs/assets/stylesheets/extra.css b/docs/assets/stylesheets/extra.css new file mode 100644 index 00000000..97033243 --- /dev/null +++ b/docs/assets/stylesheets/extra.css @@ -0,0 +1,60 @@ +:root > * { + --md-primary-fg-color: #292F36; + --md-primary-fg-color--light: #ECB7B7; + --md-primary-fg-color--dark: #90030C; + --md-primary-bg-color: white; + --md-accent-fg-color: rgba(209, 10, 73, 0.5); + --md-typeset-a-color: #d10a49; +} + +.md-banner { + text-align: center; + background-color: #0A8754; + --md-typeset-a-color: #292F36; + --md-accent-fg-color: white; +} + +/* Custom admonition icons */ +:root { + --md-admonition-icon--deprecation: url('data:image/svg+xml;charset=utf-8,api-off') +} +.md-typeset .admonition.deprecation, +.md-typeset details.deprecation { + border-color: #ff9101; +} +.md-typeset .deprecation > .admonition-title, +.md-typeset .deprecation > summary { + background-color: #fff5eb; +} +.md-typeset .deprecation > .admonition-title::before, +.md-typeset .deprecation > summary::before { + background-color: #ff9101; + -webkit-mask-image: var(--md-admonition-icon--deprecation); + mask-image: var(--md-admonition-icon--deprecation); +} + +/* Hide In/Out prompts */ +.md-typeset .jp-InputPrompt, +.md-typeset .jp-OutputPrompt, +.md-typeset .prompt { display: none !important; } + +/* Clamp notebook width to Material content width */ +.md-content__inner :is(.jp-Notebook, .nbconvert-document) { + max-width: var(--md-typeset-width) !important; + margin-inline: auto !important; + width: 100% !important; +} + +/* Use Material’s code font in notebook code (inputs + outputs) */ +.md-typeset :is(.jp-Notebook, .nbconvert-document) pre { + font-family: var(--md-code-font) !important; + font-size: 15px !important; +} + +/* Remove the frame around input cells */ +.md-typeset :is(.jp-InputArea, .jp-InputArea-editor, .jp-Cell-inputWrapper, .cell .input_area, .CodeMirror, .cm-editor) { + border: 0 !important; + box-shadow: none !important; + outline: 0 !important; + background: transparent !important; +} diff --git a/docs/contributing.md b/docs/contributing.md deleted file mode 100644 index b6c74006..00000000 --- a/docs/contributing.md +++ /dev/null @@ -1,35 +0,0 @@ - -# Contributing - -## Development dependencies - -To contribute to this project, you will need to install the development dependencies. -These dependencies include everything needed for development, testing and building the documentation of the project. - -To install the development dependencies, run the following command inside the project directory: - -```bash -uv sync -``` - -The development dependencies include `ipykernel` to support Jupyter notebooks and integration into e.g. VS Code. - -To view the full list of development dependencies, you can check the `pyproject.toml` file under the `[dependency-groups]` section as `dev` and `docs`, which are both included in the `default-groups`. - -## Testing - -To run all tests in parallel, you can use the following command: - -```bash -pytest -n auto -``` - -Some tests may not be thread-safe and therefore fail unexpectedly when run in parallel. -If you encounter such issues, you can run the tests sequentially by omitting the `-n auto` option: - -```bash -pytest -``` diff --git a/docs/contributing/CODE_OF_CONDUCT.md b/docs/contributing/CODE_OF_CONDUCT.md new file mode 100644 index 00000000..fc9c0b6a --- /dev/null +++ b/docs/contributing/CODE_OF_CONDUCT.md @@ -0,0 +1,136 @@ +# Code of Conduct + +!!! info + + This Code of Conduct follows the [Contributor Covenant, version 2.1](https://www.contributor-covenant.org/version/2/1/code_of_conduct/). + +## Our Pledge + +We as members, contributors, and leaders pledge to make participation in our +community a harassment-free experience for everyone, regardless of age, body +size, visible or invisible disability, ethnicity, sex characteristics, gender +identity and expression, level of experience, education, socio-economic status, +nationality, personal appearance, race, caste, color, religion, or sexual +identity and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, +diverse, inclusive, and healthy community. + +## Our Standards + +Examples of behavior that contributes to a positive environment for our +community include: + +* Demonstrating empathy and kindness toward other people +* Being respectful of differing opinions, viewpoints, and experiences +* Giving and gracefully accepting constructive feedback +* Accepting responsibility and apologizing to those affected by our mistakes, + and learning from the experience +* Focusing on what is best not just for us as individuals, but for the overall + community + +Examples of unacceptable behavior include: + +* The use of sexualized language or imagery, and sexual attention or advances of + any kind +* Trolling, insulting or derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or email address, + without their explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Enforcement Responsibilities + +Community leaders are responsible for clarifying and enforcing our standards of +acceptable behavior and will take appropriate and fair corrective action in +response to any behavior that they deem inappropriate, threatening, offensive, +or harmful. + +Community leaders have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, and will communicate reasons for moderation +decisions when appropriate. + +## Scope + +This Code of Conduct applies within all community spaces, and also applies when +an individual is officially representing the community in public spaces. +Examples of representing our community include using an official e-mail address, +posting via an official social media account, or acting as an appointed +representative at an online or offline event. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported to the community leaders responsible for enforcement at + / / t.brown@tu-berlin.de. +All complaints will be reviewed and investigated promptly and fairly. + +All community leaders are obligated to respect the privacy and security of the +reporter of any incident. + +## Enforcement Guidelines + +Community leaders will follow these Community Impact Guidelines in determining +the consequences for any action they deem in violation of this Code of Conduct: + +### 1. Correction + +**Community Impact**: Use of inappropriate language or other behavior deemed +unprofessional or unwelcome in the community. + +**Consequence**: A private, written warning from community leaders, providing +clarity around the nature of the violation and an explanation of why the +behavior was inappropriate. A public apology may be requested. + +### 2. Warning + +**Community Impact**: A violation through a single incident or series of +actions. + +**Consequence**: A warning with consequences for continued behavior. No +interaction with the people involved, including unsolicited interaction with +those enforcing the Code of Conduct, for a specified period of time. This +includes avoiding interactions in community spaces as well as external channels +like social media. Violating these terms may lead to a temporary or permanent +ban. + +### 3. Temporary Ban + +**Community Impact**: A serious violation of community standards, including +sustained inappropriate behavior. + +**Consequence**: A temporary ban from any sort of interaction or public +communication with the community for a specified period of time. No public or +private interaction with the people involved, including unsolicited interaction +with those enforcing the Code of Conduct, is allowed during this period. +Violating these terms may lead to a permanent ban. + +### 4. Permanent Ban + +**Community Impact**: Demonstrating a pattern of violation of community +standards, including sustained inappropriate behavior, harassment of an +individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from any sort of public interaction within the +community. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 2.1, available at +[][v2.1]. + +Community Impact Guidelines were inspired by +[Mozilla's code of conduct enforcement ladder][Mozilla CoC]. + +For answers to common questions about this code of conduct, see the FAQ at +[][FAQ]. Translations are available at +[][translations]. + +[homepage]: https://www.contributor-covenant.org +[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html +[Mozilla CoC]: https://github.com/mozilla/diversity +[FAQ]: https://www.contributor-covenant.org/faq +[translations]: https://www.contributor-covenant.org/translations diff --git a/docs/contributing/contributors.md b/docs/contributing/contributors.md new file mode 100644 index 00000000..920eccc6 --- /dev/null +++ b/docs/contributing/contributors.md @@ -0,0 +1,8 @@ + +# Contributors + +!!! info + + Up-to-date statistics and a complete list of contributors to PyPSA can be found under [GitHub Insights](https://github.com/PyPSA/technology-data/graphs/contributors). + +TODO: Update automatically and list all contributors. diff --git a/docs/contributing/instructions.md b/docs/contributing/instructions.md new file mode 100644 index 00000000..6ff8fe60 --- /dev/null +++ b/docs/contributing/instructions.md @@ -0,0 +1,188 @@ +# Instructions for contributing to the project + + + +First of all, thank you for your contributions to `technologydata`! + +We enthusiastically invite anyone interested in `technologydata` to share new ideas, provide suggestions, submit bug reports, or contribute code changes. + +## How to contribute + +- [Code contributions](#code-contributions): Implement new features, fix bugs, or improve the performance. +- [Documentation contributions](#documentation-contributions): Improve the documentation by adding new sections, fixing typos, or clarifying existing content. + +## Where to go for help + +- To **discuss** with other `technologydata` users, organise projects, share news, and get in touch with the community, please refer to the [Contacts](/docs/home/contacts.md) page. +- For **guidelines to contribute**, stay right here. + +## Code contributions + +## Contribution workflow in a nutshell + +- Fork the repository on GitHub. Please make sure to check the box `Copy the master branch only` +- Clone your fork: `git clone https://github.com//technology-data.git` +- Set up the `upstream` repository (see [Set up the upstream repository](#set-up-the-upstream-repository)) +- Fetch the upstream tags `git fetch --tags upstream` +- Install with dependencies in editable mode (see [Install dependencies](#install-dependencies)) +- Setup linter and formatter, e.g `pre-commit install` (see [Code linting and formatting](#code-linting-and-formatting)) +- Write your code (preferably on a new branch) +- Run tests: `pytest` (see [Testing](#testing)) +- Push your changes to your fork and create a pull request on GitHub + +### Set up the upstream repository + +To keep your fork up to date with the original repository, you need to set up the `upstream` remote repository: + +```bash +git remote add upstream https://github.com/PyPSA/technology-data.git +``` + +To verify that the remotes have been set up correctly, you can run: + +```bash +git remote -v +``` + +The output should look like this: + +```plaintext +origin https://github.com//technology-data.git (fetch) +origin https://github.com//technology-data.git (push) +upstream https://github.com/PyPSA/technology-data.git (fetch) +upstream https://github.com/PyPSA/technology-data.git (push) +``` + +### Install dependencies + +To contribute to this project, you will need to install the development dependencies. +These dependencies are listed in the `pyproject.toml` file and include everything needed for development, testing and building the documentation of the project. + +To install the development dependencies, run the following command inside the project directory: + +```bash +uv sync +``` + +This will create a virtual environment at `.venv`. + +The development dependencies include `ipykernel` to support Jupyter notebooks and integration into e.g. VS Code. + +To view the full list of development dependencies, you can check the `pyproject.toml` file under the `[dependency-groups]` section as `dev` and `docs`, which are both included in the `default-groups`. + +The virtual environment can be "activated" to make its packages available: + +=== "macOS and Linux" + + ```bash + source .venv/bin/activate + ``` + +=== "Windows" + + ```pwsh-session + PS> .venv\Scripts\activate + ``` + +To exit a virtual environment, use the `deactivate` command: + +```bash +deactivate +``` + +#### Add new development dependencies + +To add new dependencies to a specific dependency group in the `pyproject.toml`: + +```bash +uv add package_name --group group_name +``` + +To install the new dependency run `uv sync`. + +### Code linting and formatting + +#### pre-commit + +[pre-commit](https://pre-commit.com) is used to ensure a consistent code style and to catch common programming errors or bad practices before they are committed. + +The tool is installed with development dependencies. It can be also installed manually via `pip install pre-commit` or `conda install -c conda-forge pre-commit`. + +To use it automatically before every commit (recommended), just run once: + +```bash +pre-commit install +``` + +This will automatically check the changes which are staged before you commit them. + +To manually run it, use: + +```bash +pre-commit run --all +``` + +This will check all files in the repository. + +#### Ruff + +[Ruff](https://docs.astral.sh/ruff) is used as the project linter and formatter. It combines common tools like Flake8, Black, etc. +Besides pre-commit, you can also run it via your CLI (see [Ruff installation](https://docs.astral.sh/ruff/installation/)) or IDE (e.g. VSCode [plugin](https://marketplace.visualstudio.com/items?itemName=charliermarsh.ruff)). + +Ruff is also already installed with the development dependencies, but you can also install it +manually using `pip install ruff`. + +To use the linter in your CLI, run: + +```bash +ruff check . --fix +``` + +This will check all files in the repository and gives you hints on what to improve. The +`--fix` flag will also automatically fix some of the issues, if possible. Some +issues need to be fixed manually. + +And to run the formatter, use: + +```bash +ruff format . +``` + +This will format all the files in the repository and immediately apply the changes to +them. It is basically [the same](https://docs.astral.sh/ruff/faq/#how-does-ruffs-formatter-compare-to-black) +as Black. + +> **Note**: It is not mandatory to use either Ruff or pre-commit. We will also be running it in +> our CI/CD pipeline. But it's highly recommended, to make everyone's life easier. + +### Testing + +To run all tests in parallel, you can use the following command: + +```bash +pytest -n auto +``` + +Some tests may not be thread-safe and therefore fail unexpectedly when run in parallel. +If you encounter such issues, you can run the tests sequentially by omitting the `-n auto` option: + +```bash +pytest +``` + +## Documentation contributions + +The documentation is generated with [MkDocs](https://www.mkdocs.org/). The documentation source files are written in Markdown and are available under the `/docs` sub-folder. The documentation is configured with the `mkdocs.yaml` file. + +!!! note + If you are not familiar with Markdown, consult the following [quick guide](https://www.markdownguide.org/basic-syntax/). + +MkDocs offers the possibility to start a built-in development server to preview the documentation as you work on it. To start the development server run: + +```bash +mkdocs serve +``` diff --git a/docs/home/citing.md b/docs/home/citing.md new file mode 100644 index 00000000..5922dbef --- /dev/null +++ b/docs/home/citing.md @@ -0,0 +1,3 @@ +# Citing + +TODO diff --git a/docs/home/contacts.md b/docs/home/contacts.md new file mode 100644 index 00000000..edec8092 --- /dev/null +++ b/docs/home/contacts.md @@ -0,0 +1,7 @@ +# Contacts + +Please consider the following ways to reach out to the community and the developers: + +* To **discuss** with other `technology-data` users, organise projects, share news, and get in touch with the community you can use the [Discord server](https://discord.gg/T7YZbnVU). +* For **bugs and feature requests**, please use the [issue tracker](https://github.com/PyPSA/technology-data/issues). +* We strongly welcome anyone interested in providing **contributions** to this project. If you have any ideas, suggestions or encounter problems, feel invited to file issues or make pull requests on [GitHub](https://github.com/PyPSA/technology-data). diff --git a/docs/home/faq.md b/docs/home/faq.md new file mode 100644 index 00000000..f108a77b --- /dev/null +++ b/docs/home/faq.md @@ -0,0 +1,26 @@ +# Frequently Asked Questions (FAQ) + +## How should I cite this package? + +See the dedicated page on [Citing](citing.md). + +## How do I add a new data source? + +TODO + +## If I use the package today, will the data change when I update the package later? + +TODO + +## How can I support your work? + +TODO + +## I would like to get involved, what can I do? + +TODO + +## How is this project different to GENESTE or other projects? + +TODO +and ref. to GENESTE: diff --git a/docs/home/installation.md b/docs/home/installation.md new file mode 100644 index 00000000..6238f0c1 --- /dev/null +++ b/docs/home/installation.md @@ -0,0 +1,21 @@ +# Installation + +You can install `technologydata` using either **PyPI** or **conda-forge**. Choose the method that best fits your workflow. + +## Using pip (from PyPI) + +```bash +pip install technologydata +``` + +## Using uv (from PyPI, faster alternative to pip) + +```bash +uv pip install technologydata +``` + +## Using conda (from conda-forge) + +```bash +conda install -c conda-forge technologydata +``` diff --git a/docs/home/license.md b/docs/home/license.md new file mode 100644 index 00000000..ae029c5b --- /dev/null +++ b/docs/home/license.md @@ -0,0 +1,26 @@ +# License + +`technology-data` is licensed under the open-source [MIT](https://opensource.org/license/mit) license: + +```text +MIT License + +Copyright The technology-data authors + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in the +Software without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the +Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +``` diff --git a/docs/home/release-notes.md b/docs/home/release-notes.md new file mode 100644 index 00000000..36a9d8bd --- /dev/null +++ b/docs/home/release-notes.md @@ -0,0 +1,9 @@ +# Release Notes + +## Upcoming Release + +!!! warning "Unreleased Features" + + The features listed below are not released yet, but will be part of the next release! + To use the features already you have to clone and install the repository from GitHub, e.g. using + ``pip install git+https://github.com/PyPSA/technology-data``. diff --git a/docs/home/users.md b/docs/home/users.md new file mode 100644 index 00000000..76711e86 --- /dev/null +++ b/docs/home/users.md @@ -0,0 +1,19 @@ +# Users + +The following contains a list of users from academia, industry, institutions and organisations that are actively using `technologydata` or have used it in the past. +The list references to specific projects to showcase the different use cases of `technologydata`. + +If you are missing from this list and would like to be included, give us a shoutout on our Discord server, drop us a message elsewhere or open a pull request in the repository, as described . +We would love to hear about your use case and stay in touch, in order to develop and evolve this package further. + +## Academia and Research institutions + +TODO + +## Industry + +TODO + +## Institutions and Organisations + +TODO diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 00000000..7efe43cb --- /dev/null +++ b/docs/index.md @@ -0,0 +1,6 @@ +# technologydata: Techno-economic assumptions for energy models + +!!! note "Under Construction" + + The documentation is currently under construction. + Please come back later. diff --git a/docs/class-diagram.puml b/docs/user_guide/class-diagram.puml similarity index 100% rename from docs/class-diagram.puml rename to docs/user_guide/class-diagram.puml diff --git a/docs/design.md b/docs/user_guide/design.md similarity index 76% rename from docs/design.md rename to docs/user_guide/design.md index ffcc09fd..4f01732c 100644 --- a/docs/design.md +++ b/docs/user_guide/design.md @@ -1,27 +1,21 @@ +# Use cases we have designed `technology-data` for + -# Design -1. [Design](#design) - 1. [Target audience](#target-audience) - 2. [Use Cases](#use-cases) - 1. [🧾 UC-001: Screen techno-economic inputs for validity and completeness](#uc-001-screen-techno-economic-inputs-for-validity-and-completeness) - 2. [🧾 UC-002: Harmonize multiple input datasets](#uc-002-harmonize-multiple-input-datasets) - 3. [🧾 UC-003: Transform assumptions into model-ready formats](#uc-003-transform-assumptions-into-model-ready-formats) - 4. [🧾 UC-004: Compare techno-economic indicators across datasets](#uc-004-compare-techno-economic-indicators-across-datasets) - 5. [🧾 UC-005: Audit data provenance and transformation trace](#uc-005-audit-data-provenance-and-transformation-trace) +--> +## Design `technologydata` is designed for energy system modellers in mind. It intendeds to serve common use cases encountered during the design, development and execution of energy system model experiments, such as: -* Screening techno-economic inputs for energy systems -* Comparing techno-economics indicators -* Harmonizing inputs -* Modelling of input assumptions for gap filling -* Transformation of assumptions into model-ready input formats +- Screening techno-economic inputs for energy systems +- Comparing techno-economics indicators +- Harmonizing inputs +- Modelling of input assumptions for gap filling +- Transformation of assumptions into model-ready input formats The project was started for PyPSA-Eur and has since then been expanded to serve more models and purposes. As such it has been leaning towards serving the purposes of PyPSA-Eur and related models. @@ -32,28 +26,39 @@ We hope to expand it to serve the wider energy system modeling community and a s The users we target are Energy System Modellers and Analysts. We assume they are all: -* Familiar with the concept of techno-economics on how to describe technical and economic parameters of technologies for energy system models -* Familiar with the methodology of transforming techno-economic parameters for alignment and harmonization +- Familiar with the concept of techno-economics on how to describe technical and economic parameters of technologies for energy system models +- Familiar with the methodology of transforming techno-economic parameters for alignment and harmonization The users differ in their experience in these fields, but are generally aware of the methodological background behind the transformations that we make available, like inflation adjustments, currency conversions or unit conversions. -* They prefer simplicity and robustness in use over being able to customize the transformations. -* They would like to be offered a range of options to choose from, but not too many. -* They would like to be able to use the package without having to read too much documentation, but require clear documentation on the transformations that are applied. -* Data provenance and reproducibility are important to them, so they need to be able to trace data back to its source and understand all individual steps that were applied in the transformation process to the data. +- They prefer simplicity and robustness in use over being able to customize the transformations. +- They would like to be offered a range of options to choose from, but not too many. +- They would like to be able to use the package without having to read too much documentation, but require clear documentation on the transformations that are applied. +- Data provenance and reproducibility are important to them, so they need to be able to trace data back to its source and understand all individual steps that were applied in the transformation process to the data. + +The users differ in their experience with Python and programming in general, we aim to serve three main user types + +### Programmers and Data Engineers + +These users are: + +- Well familiar with using Python and object-oriented programming languages, data processing and exchange formats. +- Interacts with the package through Python scripts, Python modules and Jupyter notebooks. -The users differ in their experience with Python and programming in general, we aim to serve three main user types: +#### Energy System Modeller -1. Programmers and Data Engineers: - * Well familiar with using Python and object-oriented programming languages, data processing and exchange formats. - * Interacts with the package through Python scripts, Python modules and Jupyter notebooks. -2. Energy System Modeller: - * Only basic Python programming skills. - * Interacts with the package through a Jupyter notebook or a Python script; may want to simply access and inspect the data without writing and executing code. -3. Energy Analyst: - * No programming skills or only very basic Python skills like using pandas or DataFrames. - * Interacts with the package either through a Jupyter notebook or wants to be able to use csv / Spreadsheet files for inspection and use of the data. +These users are: + +- Only basic Python programming skills. +- Interacts with the package through a Jupyter notebook or a Python script; may want to simply access and inspect the data without writing and executing code. + +#### Energy Analyst + +These users are: + +- No programming skills or only very basic Python skills like using pandas or DataFrames. +- Interacts with the package either through a Jupyter notebook or wants to be able to use csv / Spreadsheet files for inspection and use of the data. ## Use Cases @@ -66,6 +71,7 @@ Below follow central use cases that we want to serve with `technologydata`. - **Secondary**: Energy Analyst (if reviewing pre-screened data) #### 🎯 Goal + Detect and correct inconsistencies or omissions in techno-economic input data, ensuring it adheres to the package's schema and parameter constraints. #### πŸ“š Pre-conditions @@ -85,12 +91,16 @@ Detect and correct inconsistencies or omissions in techno-economic input data, e 1. User gets/loads or defines technology input (via JSON, DataFrame, or the packaged data). 2. `Technology` object is instantiated, triggering automatic validation. 3. Schema checks enforce: - - Presence of required fields (e.g., name, parameter value, unit, source) - - Consistency between parameters (e.g., energy unit alignment) + +- Presence of required fields (e.g., name, parameter value, unit, source) +- Consistency between parameters (e.g., energy unit alignment) + 4. User manually runs `.check_consistency()` or similar method to detect conflicting or incomplete parameters. 5. User manually runs `.calculate_parameters()` to derive - - specific missing parameters based on known rules (e.g., specific investment, EAC), or - - all missing parameters that can be derived from the existing parameters + +- specific missing parameters based on known rules (e.g., specific investment, EAC), or +- all missing parameters that can be derived from the existing parameters + 6. The User can manually update parameters, either overwriting existing or adding missing ones. 7. Validated and completed `Technology` object is now ready for transformation or analysis. @@ -141,13 +151,13 @@ tech = Technology( #### πŸ“Š Importance & Frequency -* Importance: High -* Usage Frequency: Frequent, core workflow entry point +- Importance: High +- Usage Frequency: Frequent, core workflow entry point #### πŸ“Œ Notes -* Consistency logic includes checks for units, and dependency constraints between parameters (e.g. one parameter may be derived from one or more other parameters). -* Schema-based validation is extensible to new parameter types and sources. +- Consistency logic includes checks for units, and dependency constraints between parameters (e.g. one parameter may be derived from one or more other parameters). +- Schema-based validation is extensible to new parameter types and sources. ### 🧾 UC-002: Harmonize multiple input datasets @@ -156,6 +166,7 @@ tech = Technology( - **Secondary**: Data Engineer #### 🎯 Goal + Enable the user to bring multiple techno-economic datasets to a common basis (currency, year, units) using explicit, user-invoked transformation methods, so that they can be compared or combined. #### πŸ“š Pre-conditions @@ -171,10 +182,12 @@ Enable the user to bring multiple techno-economic datasets to a common basis (cu 1. User loads datasets (e.g., from JSON, CSV, or DataFrame) into separate `DataPackage` or `TechnologyCollection` objects or creates them programmatically through the package's class interface. 2. User inspects the datasets to identify differences in currency, year, units, or other conventions. 3. User applies transformation methods as needed: - - `.adjust_currency(target_currency)` - - `.adjust_scale(target_capacity, scaling_exponent)` - - `.adjust_region(target_region)` - - Unit conversions per parameter via Technology or TechnologyCollection level methods + +- `.adjust_currency(target_currency)` +- `.adjust_scale(target_capacity, scaling_exponent)` +- `.adjust_region(target_region)` +- Unit conversions per parameter via Technology or TechnologyCollection level methods + 4. User repeats or chains transformations as required or desired for each dataset. 5. User verifies harmonization by inspecting key parameters and units. 6. Harmonized datasets are now ready for comparison, merging, or further analysis. @@ -209,14 +222,14 @@ dp1.technologies = dp1.technologies.adjust_units(parameter="specific-investment" #### πŸ“Š Importance & Frequency -* Importance: High -* Usage Frequency: Frequent, especially when integrating or comparing datasets +- Importance: High +- Usage Frequency: Frequent, especially when integrating or comparing datasets #### πŸ“Œ Notes -* All harmonization steps are explicit and user-driven; no automatic harmonization is performed. -* The user is responsible for the order and combination of transformations. -* Optionally, each transformation could be logged as data provenance, allowing users to trace back the steps taken and record them in e.g. a output file for documentation. +- All harmonization steps are explicit and user-driven; no automatic harmonization is performed. +- The user is responsible for the order and combination of transformations. +- Optionally, each transformation could be logged as data provenance, allowing users to trace back the steps taken and record them in e.g. a output file for documentation. ### 🧾 UC-003: Transform assumptions into model-ready formats @@ -224,6 +237,7 @@ dp1.technologies = dp1.technologies.adjust_units(parameter="specific-investment" - **Primary**: Energy System Modeller, Programmer #### 🎯 Goal + Allow the user to derive and access all model-relevant parameters (e.g., EAC, specific investment) from harmonized data, ready for direct use in energy system models such as PyPSA-Eur. #### πŸ“š Pre-conditions @@ -237,8 +251,10 @@ Allow the user to derive and access all model-relevant parameters (e.g., EAC, sp 1. User ensures all required base parameters (e.g., WACC, lifetime, investment) are present and harmonized. 2. User invokes calculation methods to derive model-ready parameters: - - `.calculate_parameters(parameters="EAC")` - - `.calculate_parameters(parameters="specific-investment")` + +- `.calculate_parameters(parameters="EAC")` +- `.calculate_parameters(parameters="specific-investment")` + 3. System computes and adds the derived parameters to the relevant `Technology` objects. 4. User accesses the parameters directly from the `Technology` objects for export or further use. @@ -263,8 +279,8 @@ tech["EAC"].value # Access the calculated EAC parameter value #### πŸ“Š Importance & Frequency -* Importance: High -* Usage Frequency: Frequent, especially before running model scenarios +- Importance: High +- Usage Frequency: Frequent, especially before running model scenarios #### πŸ“Œ Notes @@ -276,6 +292,7 @@ tech["EAC"].value # Access the calculated EAC parameter value - **Primary**: Energy Analyst, Energy System Modeller #### 🎯 Goal + Enable the user to systematically compare key techno-economic parameters (e.g., CAPEX, OPEX, efficiency) across multiple harmonized datasets in a tabular format. #### πŸ“š Pre-conditions @@ -316,13 +333,13 @@ techs["lifetime"].values # Access lifetime values across technologies #### πŸ“Š Importance & Frequency -* Importance: Medium -* Usage Frequency: Regular, especially for data quality checks and exploring values to be included into a model +- Importance: Medium +- Usage Frequency: Regular, especially for data quality checks and exploring values to be included into a model #### πŸ“Œ Notes -* Tabular comparison is the core feature; visualizations can be build on top of the DataFrame by the user themselves. -* Optional: Outlier detection and summary statistics could be a nice feature, but are also part of `pandas` already, so we can put this into the documentation as a suggestion for the user to explore themselves. +- Tabular comparison is the core feature; visualizations can be build on top of the DataFrame by the user themselves. +- Optional: Outlier detection and summary statistics could be a nice feature, but are also part of `pandas` already, so we can put this into the documentation as a suggestion for the user to explore themselves. ### 🧾 UC-005: Audit data provenance and transformation trace @@ -331,6 +348,7 @@ techs["lifetime"].values # Access lifetime values across technologies - **Secondary**: Energy Analyst #### 🎯 Goal + Allow the user to trace the origin and transformation history of each data point, enabling transparency and reproducibility. #### πŸ“š Pre-conditions @@ -344,8 +362,10 @@ Allow the user to trace the origin and transformation history of each data point 1. User selects a `parameter` of a `Technology` object. 2. The user requests the provenance information for that parameter. 3. System provides the information about: - - Original source(s) of the data (from `Source` and `SourceCollection`) of the parameter - - All transformations applied by our package (e.g., currency adjustment, scaling, calculations, including the values that were used for these transformations) + +- Original source(s) of the data (from `Source` and `SourceCollection`) of the parameter +- All transformations applied by our package (e.g., currency adjustment, scaling, calculations, including the values that were used for these transformations) + 4. User can export or document the provenance trace for reporting or documentation. #### πŸ” Alternate Flows @@ -370,10 +390,10 @@ dp.to_json("") # Includes provenance information in the JSON #### πŸ“Š Importance & Frequency -* Importance: Medium (for transparency and reproducibility) -* Usage Frequency: Occasional, but critical for future-us, report writing and rapport +- Importance: Medium (for transparency and reproducibility) +- Usage Frequency: Occasional, but critical for future-us, report writing and rapport #### πŸ“Œ Notes -* Only transformations performed by the package are tracked; user-made changes must be recorded manually. -* Provenance tracking should be automatic and cover all package-driven transformations. +- Only transformations performed by the package are tracked; user-made changes must be recorded manually. +- Provenance tracking should be automatic and cover all package-driven transformations. diff --git a/docs/parameter.md b/docs/user_guide/parameter.md similarity index 100% rename from docs/parameter.md rename to docs/user_guide/parameter.md index 38ae2a9e..0b1576f7 100644 --- a/docs/parameter.md +++ b/docs/user_guide/parameter.md @@ -1,10 +1,11 @@ +# `Parameter` Class Documentation + -# `Parameter` Class Documentation +--> ## Overview @@ -127,7 +128,6 @@ param_mixed_hhv = param_mixed.change_heating_value("HHV") 0.13 kWh/kg higher_heating_value ``` - ## Limitations & Missing Features - **Provenance/Note/Sources in Arithmetic**: When performing arithmetic operations, the handling and merging of `provenance`, `note`, and `sources` is not yet implemented (see `TODO` comments in the code). diff --git a/mkdocs.yaml b/mkdocs.yaml new file mode 100644 index 00000000..c20fb6bc --- /dev/null +++ b/mkdocs.yaml @@ -0,0 +1,175 @@ +site_name: Documentation +site_url: !ENV READTHEDOCS_CANONICAL_URL +repo_url: https://github.com/PyPSA/technology-data +repo_name: PyPSA/technology-data +edit_uri: edit/master/docs/ + +# Navigation +nav: +- Home: + - Home: index.md + - Overview: + - Release Notes: home/release-notes.md + - Getting Started: + - Installation: home/installation.md + - Reference: + - Users: home/users.md + - Citing: home/citing.md + - License: home/license.md + - Support: + - FAQ: home/faq.md + - Contacts: home/contacts.md + +- User Guide: + - Use Cases: user_guide/design.md + - Parameter: user_guide/parameter.md + +- Contributing: + - Instructions: contributing/instructions.md + - Code of Conduct: contributing/CODE_OF_CONDUCT.md + - Contributors: contributing/contributors.md + +# Theme settings +theme: + name: material + logo: assets/logo/technology_data_logo.png + favicon: assets/logo/technology_data_logo.png + custom_dir: docs/assets/overrides + font: + text: Overpass + features: + - navigation.tabs + - navigation.tabs.sticky + - navigation.sections + - navigation.tracking # Anchor tracking + - navigation.indexes # Section indexes + - navigation.path + - navigation.top # Back to top button + # - navigation.foot + - header.autohide + - content.action.edit + - content.action.view + - toc.follow + - search + - search.suggest + - search.highlight + - search.share + - announce.dismiss + + palette: + - media: "(prefers-color-scheme: light)" + primary: custom + scheme: default + toggle: + icon: material/weather-sunny + name: Switch to dark mode + - media: "(prefers-color-scheme: dark)" + primary: custom + scheme: slate + toggle: + icon: material/weather-night + name: Switch to light mode + +extra_css: +- assets/stylesheets/extra.css + +extra_javascript: +- assets/javascripts/readthedocs.js +- assets/javascripts/mathjax.js +- https://unpkg.com/mathjax@3/es5/tex-mml-chtml.js + +markdown_extensions: +# Callouts/ Admonitions +- admonition +- pymdownx.details +- pymdownx.superfences: + custom_fences: + - name: mermaid + class: mermaid + format: !!python/name:pymdownx.superfences.fence_code_format +- pymdownx.arithmatex: + generic: true +# Footnotes +- footnotes +# Tabbed content +- pymdownx.tabbed: + alternate_style: true # Abbreviations +- pymdownx.snippets: + auto_append: + - includes/abbreviations.md +- abbr +- attr_list +- md_in_html + # Emojis +- pymdownx.emoji: + emoji_index: !!python/name:material.extensions.emoji.twemoji + emoji_generator: !!python/name:material.extensions.emoji.to_svg + # Toctree with permalinks +- toc: + title: On this page + permalink: true + toc_depth: 3 + # Grids +- md_in_html +- pymdownx.caret +- pymdownx.tilde + + +plugins: +- search +- tags +- autolinks +- table-reader +- mkdocs-video +- git-revision-date-localized: + type: timeago + timezone: Europe/Berlin + enable_creation_date: true +- git-committers: + repository: PyPSA/PyPSA + branch: v1-docs # TODO: Change to master before merging + token: !!python/object/apply:os.getenv ["MKDOCS_GIT_COMMITTERS_APIKEY"] +- argref: + autolinks: + - reference_prefix: ":octicons-git-pull-request-16:" + target_url: https://github.com/PyPSA/technology-data/pull/ +- social: + cards_layout_options: + font_family: Overpass + background_color: "#292F36" + +# Docstring generation +- mkdocstrings: + enabled: true + default_handler: python + handlers: + python: + options: + docstring_style: numpy + docstring_options: + ignore_init_summary: true + docstring_section_style: list + filters: + - "!^_[^_]" + - "!logger" + heading_level: 1 + merge_init_into_class: true + parameter_headings: false + separate_signature: true + show_root_heading: true + show_root_full_path: false + show_signature_annotations: true + show_source: false + show_symbol_type_heading: true + show_symbol_type_toc: true + signature_crossrefs: true + summary: true + show_if_no_docstring: true + show_inheritance_diagram: true + + +hooks: +- docs/assets/overrides/hooks/shortcodes.py + +copyright: >- + © The technology-data authors diff --git a/pyproject.toml b/pyproject.toml index 70a7b3a2..299f7a5b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -45,7 +45,7 @@ BugTracker = "https://github.com/PyPSA/technology-data/issues" Changelog = "https://github.com/PyPSA/technology-data/releases" # https://docs.astral.sh/uv/concepts/projects/dependencies/#dependency-groups -# editable install of package and non-packaged dependencies +# editable installation of package and non-packaged dependencies [dependency-groups] dev = [ "ipykernel>=6.29.5", @@ -58,13 +58,26 @@ dev = [ ] docs = [ + "cairosvg>=2.8.2", + "gurobipy>=12.0.3", + "mkdocs-argref-plugin>=0.5.0", "mkdocs-autolinks-plugin>=0.7.1", + "mkdocs-ezlinks-plugin>=0.1.14", + "mkdocs-git-committers-plugin>=0.2.3", "mkdocs-git-revision-date-localized-plugin>=1.4.7", + "mkdocs-jupyter>=0.25.1", "mkdocs-material>=9.6.14", "mkdocs-minify-plugin>=0.8.0", "mkdocs-open-in-new-tab>=1.0.8", + "mkdocs-redirects>=1.2.2", + "mkdocs-table-reader-plugin>=3.1.0", + "mkdocs-video>=1.5.0", "mkdocstrings>=0.29.1", "mkdocstrings-python>=1.16.11", + "openpyxl>=3.1.5", + "pillow>=11.3.0", + "python-calamine>=0.4.0", + "tsam>=2.3.9", ] [tool.pytest.ini_options] @@ -100,9 +113,7 @@ source = [ ] # Static type checker settings - [tool.mypy] -exclude = ['dev/*', 'examples/*', 'doc/*', 'test/*'] ignore_missing_imports = true no_implicit_optional = true warn_unused_ignores = true @@ -127,6 +138,7 @@ ignore_missing_imports = true [tool.ruff] extend-include = ['*.ipynb'] +exclude = ["docs/"] [tool.ruff.lint] select = [ diff --git a/uv.lock b/uv.lock index 223004a8..d1d98700 100644 --- a/uv.lock +++ b/uv.lock @@ -1,64 +1,64 @@ version = 1 -revision = 1 +revision = 2 requires-python = ">=3.12" [[package]] name = "annotated-types" version = "0.7.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081 } +sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081, upload_time = "2024-05-20T21:33:25.928Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643 }, + { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload_time = "2024-05-20T21:33:24.1Z" }, ] [[package]] name = "appnope" version = "0.1.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/35/5d/752690df9ef5b76e169e68d6a129fa6d08a7100ca7f754c89495db3c6019/appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee", size = 4170 } +sdist = { url = "https://files.pythonhosted.org/packages/35/5d/752690df9ef5b76e169e68d6a129fa6d08a7100ca7f754c89495db3c6019/appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee", size = 4170, upload_time = "2024-02-06T09:43:11.258Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/81/29/5ecc3a15d5a33e31b26c11426c45c501e439cb865d0bff96315d86443b78/appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c", size = 4321 }, + { url = "https://files.pythonhosted.org/packages/81/29/5ecc3a15d5a33e31b26c11426c45c501e439cb865d0bff96315d86443b78/appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c", size = 4321, upload_time = "2024-02-06T09:43:09.663Z" }, ] [[package]] name = "asttokens" version = "3.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/4a/e7/82da0a03e7ba5141f05cce0d302e6eed121ae055e0456ca228bf693984bc/asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7", size = 61978 } +sdist = { url = "https://files.pythonhosted.org/packages/4a/e7/82da0a03e7ba5141f05cce0d302e6eed121ae055e0456ca228bf693984bc/asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7", size = 61978, upload_time = "2024-11-30T04:30:14.439Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/25/8a/c46dcc25341b5bce5472c718902eb3d38600a903b14fa6aeecef3f21a46f/asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2", size = 26918 }, + { url = "https://files.pythonhosted.org/packages/25/8a/c46dcc25341b5bce5472c718902eb3d38600a903b14fa6aeecef3f21a46f/asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2", size = 26918, upload_time = "2024-11-30T04:30:10.946Z" }, ] [[package]] name = "attrs" version = "25.3.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5a/b0/1367933a8532ee6ff8d63537de4f1177af4bff9f3e829baf7331f595bb24/attrs-25.3.0.tar.gz", hash = "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b", size = 812032 } +sdist = { url = "https://files.pythonhosted.org/packages/5a/b0/1367933a8532ee6ff8d63537de4f1177af4bff9f3e829baf7331f595bb24/attrs-25.3.0.tar.gz", hash = "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b", size = 812032, upload_time = "2025-03-13T11:10:22.779Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/77/06/bb80f5f86020c4551da315d78b3ab75e8228f89f0162f2c3a819e407941a/attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3", size = 63815 }, + { url = "https://files.pythonhosted.org/packages/77/06/bb80f5f86020c4551da315d78b3ab75e8228f89f0162f2c3a819e407941a/attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3", size = 63815, upload_time = "2025-03-13T11:10:21.14Z" }, ] [[package]] name = "babel" version = "2.17.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7d/6b/d52e42361e1aa00709585ecc30b3f9684b3ab62530771402248b1b1d6240/babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d", size = 9951852 } +sdist = { url = "https://files.pythonhosted.org/packages/7d/6b/d52e42361e1aa00709585ecc30b3f9684b3ab62530771402248b1b1d6240/babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d", size = 9951852, upload_time = "2025-02-01T15:17:41.026Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2", size = 10182537 }, + { url = "https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2", size = 10182537, upload_time = "2025-02-01T15:17:37.39Z" }, ] [[package]] name = "backrefs" version = "5.9" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/eb/a7/312f673df6a79003279e1f55619abbe7daebbb87c17c976ddc0345c04c7b/backrefs-5.9.tar.gz", hash = "sha256:808548cb708d66b82ee231f962cb36faaf4f2baab032f2fbb783e9c2fdddaa59", size = 5765857 } +sdist = { url = "https://files.pythonhosted.org/packages/eb/a7/312f673df6a79003279e1f55619abbe7daebbb87c17c976ddc0345c04c7b/backrefs-5.9.tar.gz", hash = "sha256:808548cb708d66b82ee231f962cb36faaf4f2baab032f2fbb783e9c2fdddaa59", size = 5765857, upload_time = "2025-06-22T19:34:13.97Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/19/4d/798dc1f30468134906575156c089c492cf79b5a5fd373f07fe26c4d046bf/backrefs-5.9-py310-none-any.whl", hash = "sha256:db8e8ba0e9de81fcd635f440deab5ae5f2591b54ac1ebe0550a2ca063488cd9f", size = 380267 }, - { url = "https://files.pythonhosted.org/packages/55/07/f0b3375bf0d06014e9787797e6b7cc02b38ac9ff9726ccfe834d94e9991e/backrefs-5.9-py311-none-any.whl", hash = "sha256:6907635edebbe9b2dc3de3a2befff44d74f30a4562adbb8b36f21252ea19c5cf", size = 392072 }, - { url = "https://files.pythonhosted.org/packages/9d/12/4f345407259dd60a0997107758ba3f221cf89a9b5a0f8ed5b961aef97253/backrefs-5.9-py312-none-any.whl", hash = "sha256:7fdf9771f63e6028d7fee7e0c497c81abda597ea45d6b8f89e8ad76994f5befa", size = 397947 }, - { url = "https://files.pythonhosted.org/packages/10/bf/fa31834dc27a7f05e5290eae47c82690edc3a7b37d58f7fb35a1bdbf355b/backrefs-5.9-py313-none-any.whl", hash = "sha256:cc37b19fa219e93ff825ed1fed8879e47b4d89aa7a1884860e2db64ccd7c676b", size = 399843 }, - { url = "https://files.pythonhosted.org/packages/fc/24/b29af34b2c9c41645a9f4ff117bae860291780d73880f449e0b5d948c070/backrefs-5.9-py314-none-any.whl", hash = "sha256:df5e169836cc8acb5e440ebae9aad4bf9d15e226d3bad049cf3f6a5c20cc8dc9", size = 411762 }, - { url = "https://files.pythonhosted.org/packages/41/ff/392bff89415399a979be4a65357a41d92729ae8580a66073d8ec8d810f98/backrefs-5.9-py39-none-any.whl", hash = "sha256:f48ee18f6252b8f5777a22a00a09a85de0ca931658f1dd96d4406a34f3748c60", size = 380265 }, + { url = "https://files.pythonhosted.org/packages/19/4d/798dc1f30468134906575156c089c492cf79b5a5fd373f07fe26c4d046bf/backrefs-5.9-py310-none-any.whl", hash = "sha256:db8e8ba0e9de81fcd635f440deab5ae5f2591b54ac1ebe0550a2ca063488cd9f", size = 380267, upload_time = "2025-06-22T19:34:05.252Z" }, + { url = "https://files.pythonhosted.org/packages/55/07/f0b3375bf0d06014e9787797e6b7cc02b38ac9ff9726ccfe834d94e9991e/backrefs-5.9-py311-none-any.whl", hash = "sha256:6907635edebbe9b2dc3de3a2befff44d74f30a4562adbb8b36f21252ea19c5cf", size = 392072, upload_time = "2025-06-22T19:34:06.743Z" }, + { url = "https://files.pythonhosted.org/packages/9d/12/4f345407259dd60a0997107758ba3f221cf89a9b5a0f8ed5b961aef97253/backrefs-5.9-py312-none-any.whl", hash = "sha256:7fdf9771f63e6028d7fee7e0c497c81abda597ea45d6b8f89e8ad76994f5befa", size = 397947, upload_time = "2025-06-22T19:34:08.172Z" }, + { url = "https://files.pythonhosted.org/packages/10/bf/fa31834dc27a7f05e5290eae47c82690edc3a7b37d58f7fb35a1bdbf355b/backrefs-5.9-py313-none-any.whl", hash = "sha256:cc37b19fa219e93ff825ed1fed8879e47b4d89aa7a1884860e2db64ccd7c676b", size = 399843, upload_time = "2025-06-22T19:34:09.68Z" }, + { url = "https://files.pythonhosted.org/packages/fc/24/b29af34b2c9c41645a9f4ff117bae860291780d73880f449e0b5d948c070/backrefs-5.9-py314-none-any.whl", hash = "sha256:df5e169836cc8acb5e440ebae9aad4bf9d15e226d3bad049cf3f6a5c20cc8dc9", size = 411762, upload_time = "2025-06-22T19:34:11.037Z" }, + { url = "https://files.pythonhosted.org/packages/41/ff/392bff89415399a979be4a65357a41d92729ae8580a66073d8ec8d810f98/backrefs-5.9-py39-none-any.whl", hash = "sha256:f48ee18f6252b8f5777a22a00a09a85de0ca931658f1dd96d4406a34f3748c60", size = 380265, upload_time = "2025-06-22T19:34:12.405Z" }, ] [[package]] @@ -69,9 +69,9 @@ dependencies = [ { name = "soupsieve" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d8/e4/0c4c39e18fd76d6a628d4dd8da40543d136ce2d1752bd6eeeab0791f4d6b/beautifulsoup4-4.13.4.tar.gz", hash = "sha256:dbb3c4e1ceae6aefebdaf2423247260cd062430a410e38c66f2baa50a8437195", size = 621067 } +sdist = { url = "https://files.pythonhosted.org/packages/d8/e4/0c4c39e18fd76d6a628d4dd8da40543d136ce2d1752bd6eeeab0791f4d6b/beautifulsoup4-4.13.4.tar.gz", hash = "sha256:dbb3c4e1ceae6aefebdaf2423247260cd062430a410e38c66f2baa50a8437195", size = 621067, upload_time = "2025-04-15T17:05:13.836Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/50/cd/30110dc0ffcf3b131156077b90e9f60ed75711223f306da4db08eff8403b/beautifulsoup4-4.13.4-py3-none-any.whl", hash = "sha256:9bbbb14bfde9d79f38b8cd5f8c7c85f4b8f2523190ebed90e950a8dea4cb1c4b", size = 187285 }, + { url = "https://files.pythonhosted.org/packages/50/cd/30110dc0ffcf3b131156077b90e9f60ed75711223f306da4db08eff8403b/beautifulsoup4-4.13.4-py3-none-any.whl", hash = "sha256:9bbbb14bfde9d79f38b8cd5f8c7c85f4b8f2523190ebed90e950a8dea4cb1c4b", size = 187285, upload_time = "2025-04-15T17:05:12.221Z" }, ] [[package]] @@ -81,27 +81,72 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "chardet" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a7/fe/7ebfec74d49f97fc55cd38240c7a7d08134002b1e14be8c3897c0dd5e49b/binaryornot-0.4.4.tar.gz", hash = "sha256:359501dfc9d40632edc9fac890e19542db1a287bbcfa58175b66658392018061", size = 371054 } +sdist = { url = "https://files.pythonhosted.org/packages/a7/fe/7ebfec74d49f97fc55cd38240c7a7d08134002b1e14be8c3897c0dd5e49b/binaryornot-0.4.4.tar.gz", hash = "sha256:359501dfc9d40632edc9fac890e19542db1a287bbcfa58175b66658392018061", size = 371054, upload_time = "2017-08-03T15:55:25.08Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/24/7e/f7b6f453e6481d1e233540262ccbfcf89adcd43606f44a028d7f5fae5eb2/binaryornot-0.4.4-py2.py3-none-any.whl", hash = "sha256:b8b71173c917bddcd2c16070412e369c3ed7f0528926f70cac18a6c97fd563e4", size = 9006 }, + { url = "https://files.pythonhosted.org/packages/24/7e/f7b6f453e6481d1e233540262ccbfcf89adcd43606f44a028d7f5fae5eb2/binaryornot-0.4.4-py2.py3-none-any.whl", hash = "sha256:b8b71173c917bddcd2c16070412e369c3ed7f0528926f70cac18a6c97fd563e4", size = 9006, upload_time = "2017-08-03T15:55:31.23Z" }, +] + +[[package]] +name = "bleach" +version = "6.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "webencodings" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/76/9a/0e33f5054c54d349ea62c277191c020c2d6ef1d65ab2cb1993f91ec846d1/bleach-6.2.0.tar.gz", hash = "sha256:123e894118b8a599fd80d3ec1a6d4cc7ce4e5882b1317a7e1ba69b56e95f991f", size = 203083, upload_time = "2024-10-29T18:30:40.477Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fc/55/96142937f66150805c25c4d0f31ee4132fd33497753400734f9dfdcbdc66/bleach-6.2.0-py3-none-any.whl", hash = "sha256:117d9c6097a7c3d22fd578fcd8d35ff1e125df6736f554da4e432fdd63f31e5e", size = 163406, upload_time = "2024-10-29T18:30:38.186Z" }, +] + +[package.optional-dependencies] +css = [ + { name = "tinycss2" }, ] [[package]] name = "boolean-py" version = "5.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c4/cf/85379f13b76f3a69bca86b60237978af17d6aa0bc5998978c3b8cf05abb2/boolean_py-5.0.tar.gz", hash = "sha256:60cbc4bad079753721d32649545505362c754e121570ada4658b852a3a318d95", size = 37047 } +sdist = { url = "https://files.pythonhosted.org/packages/c4/cf/85379f13b76f3a69bca86b60237978af17d6aa0bc5998978c3b8cf05abb2/boolean_py-5.0.tar.gz", hash = "sha256:60cbc4bad079753721d32649545505362c754e121570ada4658b852a3a318d95", size = 37047, upload_time = "2025-04-03T10:39:49.734Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/ca/78d423b324b8d77900030fa59c4aa9054261ef0925631cd2501dd015b7b7/boolean_py-5.0-py3-none-any.whl", hash = "sha256:ef28a70bd43115208441b53a045d1549e2f0ec6e3d08a9d142cbc41c1938e8d9", size = 26577, upload_time = "2025-04-03T10:39:48.449Z" }, +] + +[[package]] +name = "cairocffi" +version = "1.7.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/70/c5/1a4dc131459e68a173cbdab5fad6b524f53f9c1ef7861b7698e998b837cc/cairocffi-1.7.1.tar.gz", hash = "sha256:2e48ee864884ec4a3a34bfa8c9ab9999f688286eb714a15a43ec9d068c36557b", size = 88096, upload_time = "2024-06-18T10:56:06.741Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/93/d8/ba13451aa6b745c49536e87b6bf8f629b950e84bd0e8308f7dc6883b67e2/cairocffi-1.7.1-py3-none-any.whl", hash = "sha256:9803a0e11f6c962f3b0ae2ec8ba6ae45e957a146a004697a1ac1bbf16b073b3f", size = 75611, upload_time = "2024-06-18T10:55:59.489Z" }, +] + +[[package]] +name = "cairosvg" +version = "2.8.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cairocffi" }, + { name = "cssselect2" }, + { name = "defusedxml" }, + { name = "pillow" }, + { name = "tinycss2" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ab/b9/5106168bd43d7cd8b7cc2a2ee465b385f14b63f4c092bb89eee2d48c8e67/cairosvg-2.8.2.tar.gz", hash = "sha256:07cbf4e86317b27a92318a4cac2a4bb37a5e9c1b8a27355d06874b22f85bef9f", size = 8398590, upload_time = "2025-05-15T06:56:32.653Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e5/ca/78d423b324b8d77900030fa59c4aa9054261ef0925631cd2501dd015b7b7/boolean_py-5.0-py3-none-any.whl", hash = "sha256:ef28a70bd43115208441b53a045d1549e2f0ec6e3d08a9d142cbc41c1938e8d9", size = 26577 }, + { url = "https://files.pythonhosted.org/packages/67/48/816bd4aaae93dbf9e408c58598bc32f4a8c65f4b86ab560864cb3ee60adb/cairosvg-2.8.2-py3-none-any.whl", hash = "sha256:eab46dad4674f33267a671dce39b64be245911c901c70d65d2b7b0821e852bf5", size = 45773, upload_time = "2025-05-15T06:56:28.552Z" }, ] [[package]] name = "certifi" version = "2025.7.9" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/de/8a/c729b6b60c66a38f590c4e774decc4b2ec7b0576be8f1aa984a53ffa812a/certifi-2025.7.9.tar.gz", hash = "sha256:c1d2ec05395148ee10cf672ffc28cd37ea0ab0d99f9cc74c43e588cbd111b079", size = 160386 } +sdist = { url = "https://files.pythonhosted.org/packages/de/8a/c729b6b60c66a38f590c4e774decc4b2ec7b0576be8f1aa984a53ffa812a/certifi-2025.7.9.tar.gz", hash = "sha256:c1d2ec05395148ee10cf672ffc28cd37ea0ab0d99f9cc74c43e588cbd111b079", size = 160386, upload_time = "2025-07-09T02:13:58.874Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/66/f3/80a3f974c8b535d394ff960a11ac20368e06b736da395b551a49ce950cce/certifi-2025.7.9-py3-none-any.whl", hash = "sha256:d842783a14f8fdd646895ac26f719a061408834473cfc10203f6a575beb15d39", size = 159230 }, + { url = "https://files.pythonhosted.org/packages/66/f3/80a3f974c8b535d394ff960a11ac20368e06b736da395b551a49ce950cce/certifi-2025.7.9-py3-none-any.whl", hash = "sha256:d842783a14f8fdd646895ac26f719a061408834473cfc10203f6a575beb15d39", size = 159230, upload_time = "2025-07-09T02:13:57.007Z" }, ] [[package]] @@ -111,83 +156,83 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pycparser" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", size = 516621 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5a/84/e94227139ee5fb4d600a7a4927f322e1d4aea6fdc50bd3fca8493caba23f/cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4", size = 183178 }, - { url = "https://files.pythonhosted.org/packages/da/ee/fb72c2b48656111c4ef27f0f91da355e130a923473bf5ee75c5643d00cca/cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c", size = 178840 }, - { url = "https://files.pythonhosted.org/packages/cc/b6/db007700f67d151abadf508cbfd6a1884f57eab90b1bb985c4c8c02b0f28/cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36", size = 454803 }, - { url = "https://files.pythonhosted.org/packages/1a/df/f8d151540d8c200eb1c6fba8cd0dfd40904f1b0682ea705c36e6c2e97ab3/cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5", size = 478850 }, - { url = "https://files.pythonhosted.org/packages/28/c0/b31116332a547fd2677ae5b78a2ef662dfc8023d67f41b2a83f7c2aa78b1/cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff", size = 485729 }, - { url = "https://files.pythonhosted.org/packages/91/2b/9a1ddfa5c7f13cab007a2c9cc295b70fbbda7cb10a286aa6810338e60ea1/cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99", size = 471256 }, - { url = "https://files.pythonhosted.org/packages/b2/d5/da47df7004cb17e4955df6a43d14b3b4ae77737dff8bf7f8f333196717bf/cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93", size = 479424 }, - { url = "https://files.pythonhosted.org/packages/0b/ac/2a28bcf513e93a219c8a4e8e125534f4f6db03e3179ba1c45e949b76212c/cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3", size = 484568 }, - { url = "https://files.pythonhosted.org/packages/d4/38/ca8a4f639065f14ae0f1d9751e70447a261f1a30fa7547a828ae08142465/cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8", size = 488736 }, - { url = "https://files.pythonhosted.org/packages/86/c5/28b2d6f799ec0bdecf44dced2ec5ed43e0eb63097b0f58c293583b406582/cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65", size = 172448 }, - { url = "https://files.pythonhosted.org/packages/50/b9/db34c4755a7bd1cb2d1603ac3863f22bcecbd1ba29e5ee841a4bc510b294/cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903", size = 181976 }, - { url = "https://files.pythonhosted.org/packages/8d/f8/dd6c246b148639254dad4d6803eb6a54e8c85c6e11ec9df2cffa87571dbe/cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", size = 182989 }, - { url = "https://files.pythonhosted.org/packages/8b/f1/672d303ddf17c24fc83afd712316fda78dc6fce1cd53011b839483e1ecc8/cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", size = 178802 }, - { url = "https://files.pythonhosted.org/packages/0e/2d/eab2e858a91fdff70533cab61dcff4a1f55ec60425832ddfdc9cd36bc8af/cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", size = 454792 }, - { url = "https://files.pythonhosted.org/packages/75/b2/fbaec7c4455c604e29388d55599b99ebcc250a60050610fadde58932b7ee/cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", size = 478893 }, - { url = "https://files.pythonhosted.org/packages/4f/b7/6e4a2162178bf1935c336d4da8a9352cccab4d3a5d7914065490f08c0690/cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", size = 485810 }, - { url = "https://files.pythonhosted.org/packages/c7/8a/1d0e4a9c26e54746dc08c2c6c037889124d4f59dffd853a659fa545f1b40/cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4", size = 471200 }, - { url = "https://files.pythonhosted.org/packages/26/9f/1aab65a6c0db35f43c4d1b4f580e8df53914310afc10ae0397d29d697af4/cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", size = 479447 }, - { url = "https://files.pythonhosted.org/packages/5f/e4/fb8b3dd8dc0e98edf1135ff067ae070bb32ef9d509d6cb0f538cd6f7483f/cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", size = 484358 }, - { url = "https://files.pythonhosted.org/packages/f1/47/d7145bf2dc04684935d57d67dff9d6d795b2ba2796806bb109864be3a151/cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", size = 488469 }, - { url = "https://files.pythonhosted.org/packages/bf/ee/f94057fa6426481d663b88637a9a10e859e492c73d0384514a17d78ee205/cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", size = 172475 }, - { url = "https://files.pythonhosted.org/packages/7c/fc/6a8cb64e5f0324877d503c854da15d76c1e50eb722e320b15345c4d0c6de/cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", size = 182009 }, +sdist = { url = "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", size = 516621, upload_time = "2024-09-04T20:45:21.852Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5a/84/e94227139ee5fb4d600a7a4927f322e1d4aea6fdc50bd3fca8493caba23f/cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4", size = 183178, upload_time = "2024-09-04T20:44:12.232Z" }, + { url = "https://files.pythonhosted.org/packages/da/ee/fb72c2b48656111c4ef27f0f91da355e130a923473bf5ee75c5643d00cca/cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c", size = 178840, upload_time = "2024-09-04T20:44:13.739Z" }, + { url = "https://files.pythonhosted.org/packages/cc/b6/db007700f67d151abadf508cbfd6a1884f57eab90b1bb985c4c8c02b0f28/cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36", size = 454803, upload_time = "2024-09-04T20:44:15.231Z" }, + { url = "https://files.pythonhosted.org/packages/1a/df/f8d151540d8c200eb1c6fba8cd0dfd40904f1b0682ea705c36e6c2e97ab3/cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5", size = 478850, upload_time = "2024-09-04T20:44:17.188Z" }, + { url = "https://files.pythonhosted.org/packages/28/c0/b31116332a547fd2677ae5b78a2ef662dfc8023d67f41b2a83f7c2aa78b1/cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff", size = 485729, upload_time = "2024-09-04T20:44:18.688Z" }, + { url = "https://files.pythonhosted.org/packages/91/2b/9a1ddfa5c7f13cab007a2c9cc295b70fbbda7cb10a286aa6810338e60ea1/cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99", size = 471256, upload_time = "2024-09-04T20:44:20.248Z" }, + { url = "https://files.pythonhosted.org/packages/b2/d5/da47df7004cb17e4955df6a43d14b3b4ae77737dff8bf7f8f333196717bf/cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93", size = 479424, upload_time = "2024-09-04T20:44:21.673Z" }, + { url = "https://files.pythonhosted.org/packages/0b/ac/2a28bcf513e93a219c8a4e8e125534f4f6db03e3179ba1c45e949b76212c/cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3", size = 484568, upload_time = "2024-09-04T20:44:23.245Z" }, + { url = "https://files.pythonhosted.org/packages/d4/38/ca8a4f639065f14ae0f1d9751e70447a261f1a30fa7547a828ae08142465/cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8", size = 488736, upload_time = "2024-09-04T20:44:24.757Z" }, + { url = "https://files.pythonhosted.org/packages/86/c5/28b2d6f799ec0bdecf44dced2ec5ed43e0eb63097b0f58c293583b406582/cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65", size = 172448, upload_time = "2024-09-04T20:44:26.208Z" }, + { url = "https://files.pythonhosted.org/packages/50/b9/db34c4755a7bd1cb2d1603ac3863f22bcecbd1ba29e5ee841a4bc510b294/cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903", size = 181976, upload_time = "2024-09-04T20:44:27.578Z" }, + { url = "https://files.pythonhosted.org/packages/8d/f8/dd6c246b148639254dad4d6803eb6a54e8c85c6e11ec9df2cffa87571dbe/cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", size = 182989, upload_time = "2024-09-04T20:44:28.956Z" }, + { url = "https://files.pythonhosted.org/packages/8b/f1/672d303ddf17c24fc83afd712316fda78dc6fce1cd53011b839483e1ecc8/cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", size = 178802, upload_time = "2024-09-04T20:44:30.289Z" }, + { url = "https://files.pythonhosted.org/packages/0e/2d/eab2e858a91fdff70533cab61dcff4a1f55ec60425832ddfdc9cd36bc8af/cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", size = 454792, upload_time = "2024-09-04T20:44:32.01Z" }, + { url = "https://files.pythonhosted.org/packages/75/b2/fbaec7c4455c604e29388d55599b99ebcc250a60050610fadde58932b7ee/cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", size = 478893, upload_time = "2024-09-04T20:44:33.606Z" }, + { url = "https://files.pythonhosted.org/packages/4f/b7/6e4a2162178bf1935c336d4da8a9352cccab4d3a5d7914065490f08c0690/cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", size = 485810, upload_time = "2024-09-04T20:44:35.191Z" }, + { url = "https://files.pythonhosted.org/packages/c7/8a/1d0e4a9c26e54746dc08c2c6c037889124d4f59dffd853a659fa545f1b40/cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4", size = 471200, upload_time = "2024-09-04T20:44:36.743Z" }, + { url = "https://files.pythonhosted.org/packages/26/9f/1aab65a6c0db35f43c4d1b4f580e8df53914310afc10ae0397d29d697af4/cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", size = 479447, upload_time = "2024-09-04T20:44:38.492Z" }, + { url = "https://files.pythonhosted.org/packages/5f/e4/fb8b3dd8dc0e98edf1135ff067ae070bb32ef9d509d6cb0f538cd6f7483f/cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", size = 484358, upload_time = "2024-09-04T20:44:40.046Z" }, + { url = "https://files.pythonhosted.org/packages/f1/47/d7145bf2dc04684935d57d67dff9d6d795b2ba2796806bb109864be3a151/cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", size = 488469, upload_time = "2024-09-04T20:44:41.616Z" }, + { url = "https://files.pythonhosted.org/packages/bf/ee/f94057fa6426481d663b88637a9a10e859e492c73d0384514a17d78ee205/cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", size = 172475, upload_time = "2024-09-04T20:44:43.733Z" }, + { url = "https://files.pythonhosted.org/packages/7c/fc/6a8cb64e5f0324877d503c854da15d76c1e50eb722e320b15345c4d0c6de/cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", size = 182009, upload_time = "2024-09-04T20:44:45.309Z" }, ] [[package]] name = "cfgv" version = "3.4.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/11/74/539e56497d9bd1d484fd863dd69cbbfa653cd2aa27abfe35653494d85e94/cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560", size = 7114 } +sdist = { url = "https://files.pythonhosted.org/packages/11/74/539e56497d9bd1d484fd863dd69cbbfa653cd2aa27abfe35653494d85e94/cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560", size = 7114, upload_time = "2023-08-12T20:38:17.776Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c5/55/51844dd50c4fc7a33b653bfaba4c2456f06955289ca770a5dbd5fd267374/cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9", size = 7249 }, + { url = "https://files.pythonhosted.org/packages/c5/55/51844dd50c4fc7a33b653bfaba4c2456f06955289ca770a5dbd5fd267374/cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9", size = 7249, upload_time = "2023-08-12T20:38:16.269Z" }, ] [[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 } +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 }, + { 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" }, ] [[package]] name = "charset-normalizer" version = "3.4.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e4/33/89c2ced2b67d1c2a61c19c6751aa8902d46ce3dacb23600a283619f5a12d/charset_normalizer-3.4.2.tar.gz", hash = "sha256:5baececa9ecba31eff645232d59845c07aa030f0c81ee70184a90d35099a0e63", size = 126367 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d7/a4/37f4d6035c89cac7930395a35cc0f1b872e652eaafb76a6075943754f095/charset_normalizer-3.4.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0c29de6a1a95f24b9a1aa7aefd27d2487263f00dfd55a77719b530788f75cff7", size = 199936 }, - { url = "https://files.pythonhosted.org/packages/ee/8a/1a5e33b73e0d9287274f899d967907cd0bf9c343e651755d9307e0dbf2b3/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cddf7bd982eaa998934a91f69d182aec997c6c468898efe6679af88283b498d3", size = 143790 }, - { url = "https://files.pythonhosted.org/packages/66/52/59521f1d8e6ab1482164fa21409c5ef44da3e9f653c13ba71becdd98dec3/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcbe676a55d7445b22c10967bceaaf0ee69407fbe0ece4d032b6eb8d4565982a", size = 153924 }, - { url = "https://files.pythonhosted.org/packages/86/2d/fb55fdf41964ec782febbf33cb64be480a6b8f16ded2dbe8db27a405c09f/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d41c4d287cfc69060fa91cae9683eacffad989f1a10811995fa309df656ec214", size = 146626 }, - { url = "https://files.pythonhosted.org/packages/8c/73/6ede2ec59bce19b3edf4209d70004253ec5f4e319f9a2e3f2f15601ed5f7/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e594135de17ab3866138f496755f302b72157d115086d100c3f19370839dd3a", size = 148567 }, - { url = "https://files.pythonhosted.org/packages/09/14/957d03c6dc343c04904530b6bef4e5efae5ec7d7990a7cbb868e4595ee30/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cf713fe9a71ef6fd5adf7a79670135081cd4431c2943864757f0fa3a65b1fafd", size = 150957 }, - { url = "https://files.pythonhosted.org/packages/0d/c8/8174d0e5c10ccebdcb1b53cc959591c4c722a3ad92461a273e86b9f5a302/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a370b3e078e418187da8c3674eddb9d983ec09445c99a3a263c2011993522981", size = 145408 }, - { url = "https://files.pythonhosted.org/packages/58/aa/8904b84bc8084ac19dc52feb4f5952c6df03ffb460a887b42615ee1382e8/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a955b438e62efdf7e0b7b52a64dc5c3396e2634baa62471768a64bc2adb73d5c", size = 153399 }, - { url = "https://files.pythonhosted.org/packages/c2/26/89ee1f0e264d201cb65cf054aca6038c03b1a0c6b4ae998070392a3ce605/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:7222ffd5e4de8e57e03ce2cef95a4c43c98fcb72ad86909abdfc2c17d227fc1b", size = 156815 }, - { url = "https://files.pythonhosted.org/packages/fd/07/68e95b4b345bad3dbbd3a8681737b4338ff2c9df29856a6d6d23ac4c73cb/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:bee093bf902e1d8fc0ac143c88902c3dfc8941f7ea1d6a8dd2bcb786d33db03d", size = 154537 }, - { url = "https://files.pythonhosted.org/packages/77/1a/5eefc0ce04affb98af07bc05f3bac9094513c0e23b0562d64af46a06aae4/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dedb8adb91d11846ee08bec4c8236c8549ac721c245678282dcb06b221aab59f", size = 149565 }, - { url = "https://files.pythonhosted.org/packages/37/a0/2410e5e6032a174c95e0806b1a6585eb21e12f445ebe239fac441995226a/charset_normalizer-3.4.2-cp312-cp312-win32.whl", hash = "sha256:db4c7bf0e07fc3b7d89ac2a5880a6a8062056801b83ff56d8464b70f65482b6c", size = 98357 }, - { url = "https://files.pythonhosted.org/packages/6c/4f/c02d5c493967af3eda9c771ad4d2bbc8df6f99ddbeb37ceea6e8716a32bc/charset_normalizer-3.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:5a9979887252a82fefd3d3ed2a8e3b937a7a809f65dcb1e068b090e165bbe99e", size = 105776 }, - { url = "https://files.pythonhosted.org/packages/ea/12/a93df3366ed32db1d907d7593a94f1fe6293903e3e92967bebd6950ed12c/charset_normalizer-3.4.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:926ca93accd5d36ccdabd803392ddc3e03e6d4cd1cf17deff3b989ab8e9dbcf0", size = 199622 }, - { url = "https://files.pythonhosted.org/packages/04/93/bf204e6f344c39d9937d3c13c8cd5bbfc266472e51fc8c07cb7f64fcd2de/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eba9904b0f38a143592d9fc0e19e2df0fa2e41c3c3745554761c5f6447eedabf", size = 143435 }, - { url = "https://files.pythonhosted.org/packages/22/2a/ea8a2095b0bafa6c5b5a55ffdc2f924455233ee7b91c69b7edfcc9e02284/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3fddb7e2c84ac87ac3a947cb4e66d143ca5863ef48e4a5ecb83bd48619e4634e", size = 153653 }, - { url = "https://files.pythonhosted.org/packages/b6/57/1b090ff183d13cef485dfbe272e2fe57622a76694061353c59da52c9a659/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98f862da73774290f251b9df8d11161b6cf25b599a66baf087c1ffe340e9bfd1", size = 146231 }, - { url = "https://files.pythonhosted.org/packages/e2/28/ffc026b26f441fc67bd21ab7f03b313ab3fe46714a14b516f931abe1a2d8/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c9379d65defcab82d07b2a9dfbfc2e95bc8fe0ebb1b176a3190230a3ef0e07c", size = 148243 }, - { url = "https://files.pythonhosted.org/packages/c0/0f/9abe9bd191629c33e69e47c6ef45ef99773320e9ad8e9cb08b8ab4a8d4cb/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e635b87f01ebc977342e2697d05b56632f5f879a4f15955dfe8cef2448b51691", size = 150442 }, - { url = "https://files.pythonhosted.org/packages/67/7c/a123bbcedca91d5916c056407f89a7f5e8fdfce12ba825d7d6b9954a1a3c/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1c95a1e2902a8b722868587c0e1184ad5c55631de5afc0eb96bc4b0d738092c0", size = 145147 }, - { url = "https://files.pythonhosted.org/packages/ec/fe/1ac556fa4899d967b83e9893788e86b6af4d83e4726511eaaad035e36595/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ef8de666d6179b009dce7bcb2ad4c4a779f113f12caf8dc77f0162c29d20490b", size = 153057 }, - { url = "https://files.pythonhosted.org/packages/2b/ff/acfc0b0a70b19e3e54febdd5301a98b72fa07635e56f24f60502e954c461/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:32fc0341d72e0f73f80acb0a2c94216bd704f4f0bce10aedea38f30502b271ff", size = 156454 }, - { url = "https://files.pythonhosted.org/packages/92/08/95b458ce9c740d0645feb0e96cea1f5ec946ea9c580a94adfe0b617f3573/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:289200a18fa698949d2b39c671c2cc7a24d44096784e76614899a7ccf2574b7b", size = 154174 }, - { url = "https://files.pythonhosted.org/packages/78/be/8392efc43487ac051eee6c36d5fbd63032d78f7728cb37aebcc98191f1ff/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4a476b06fbcf359ad25d34a057b7219281286ae2477cc5ff5e3f70a246971148", size = 149166 }, - { url = "https://files.pythonhosted.org/packages/44/96/392abd49b094d30b91d9fbda6a69519e95802250b777841cf3bda8fe136c/charset_normalizer-3.4.2-cp313-cp313-win32.whl", hash = "sha256:aaeeb6a479c7667fbe1099af9617c83aaca22182d6cf8c53966491a0f1b7ffb7", size = 98064 }, - { url = "https://files.pythonhosted.org/packages/e9/b0/0200da600134e001d91851ddc797809e2fe0ea72de90e09bec5a2fbdaccb/charset_normalizer-3.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980", size = 105641 }, - { url = "https://files.pythonhosted.org/packages/20/94/c5790835a017658cbfabd07f3bfb549140c3ac458cfc196323996b10095a/charset_normalizer-3.4.2-py3-none-any.whl", hash = "sha256:7f56930ab0abd1c45cd15be65cc741c28b1c9a34876ce8c17a2fa107810c0af0", size = 52626 }, +sdist = { url = "https://files.pythonhosted.org/packages/e4/33/89c2ced2b67d1c2a61c19c6751aa8902d46ce3dacb23600a283619f5a12d/charset_normalizer-3.4.2.tar.gz", hash = "sha256:5baececa9ecba31eff645232d59845c07aa030f0c81ee70184a90d35099a0e63", size = 126367, upload_time = "2025-05-02T08:34:42.01Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d7/a4/37f4d6035c89cac7930395a35cc0f1b872e652eaafb76a6075943754f095/charset_normalizer-3.4.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0c29de6a1a95f24b9a1aa7aefd27d2487263f00dfd55a77719b530788f75cff7", size = 199936, upload_time = "2025-05-02T08:32:33.712Z" }, + { url = "https://files.pythonhosted.org/packages/ee/8a/1a5e33b73e0d9287274f899d967907cd0bf9c343e651755d9307e0dbf2b3/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cddf7bd982eaa998934a91f69d182aec997c6c468898efe6679af88283b498d3", size = 143790, upload_time = "2025-05-02T08:32:35.768Z" }, + { url = "https://files.pythonhosted.org/packages/66/52/59521f1d8e6ab1482164fa21409c5ef44da3e9f653c13ba71becdd98dec3/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcbe676a55d7445b22c10967bceaaf0ee69407fbe0ece4d032b6eb8d4565982a", size = 153924, upload_time = "2025-05-02T08:32:37.284Z" }, + { url = "https://files.pythonhosted.org/packages/86/2d/fb55fdf41964ec782febbf33cb64be480a6b8f16ded2dbe8db27a405c09f/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d41c4d287cfc69060fa91cae9683eacffad989f1a10811995fa309df656ec214", size = 146626, upload_time = "2025-05-02T08:32:38.803Z" }, + { url = "https://files.pythonhosted.org/packages/8c/73/6ede2ec59bce19b3edf4209d70004253ec5f4e319f9a2e3f2f15601ed5f7/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e594135de17ab3866138f496755f302b72157d115086d100c3f19370839dd3a", size = 148567, upload_time = "2025-05-02T08:32:40.251Z" }, + { url = "https://files.pythonhosted.org/packages/09/14/957d03c6dc343c04904530b6bef4e5efae5ec7d7990a7cbb868e4595ee30/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cf713fe9a71ef6fd5adf7a79670135081cd4431c2943864757f0fa3a65b1fafd", size = 150957, upload_time = "2025-05-02T08:32:41.705Z" }, + { url = "https://files.pythonhosted.org/packages/0d/c8/8174d0e5c10ccebdcb1b53cc959591c4c722a3ad92461a273e86b9f5a302/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a370b3e078e418187da8c3674eddb9d983ec09445c99a3a263c2011993522981", size = 145408, upload_time = "2025-05-02T08:32:43.709Z" }, + { url = "https://files.pythonhosted.org/packages/58/aa/8904b84bc8084ac19dc52feb4f5952c6df03ffb460a887b42615ee1382e8/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a955b438e62efdf7e0b7b52a64dc5c3396e2634baa62471768a64bc2adb73d5c", size = 153399, upload_time = "2025-05-02T08:32:46.197Z" }, + { url = "https://files.pythonhosted.org/packages/c2/26/89ee1f0e264d201cb65cf054aca6038c03b1a0c6b4ae998070392a3ce605/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:7222ffd5e4de8e57e03ce2cef95a4c43c98fcb72ad86909abdfc2c17d227fc1b", size = 156815, upload_time = "2025-05-02T08:32:48.105Z" }, + { url = "https://files.pythonhosted.org/packages/fd/07/68e95b4b345bad3dbbd3a8681737b4338ff2c9df29856a6d6d23ac4c73cb/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:bee093bf902e1d8fc0ac143c88902c3dfc8941f7ea1d6a8dd2bcb786d33db03d", size = 154537, upload_time = "2025-05-02T08:32:49.719Z" }, + { url = "https://files.pythonhosted.org/packages/77/1a/5eefc0ce04affb98af07bc05f3bac9094513c0e23b0562d64af46a06aae4/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dedb8adb91d11846ee08bec4c8236c8549ac721c245678282dcb06b221aab59f", size = 149565, upload_time = "2025-05-02T08:32:51.404Z" }, + { url = "https://files.pythonhosted.org/packages/37/a0/2410e5e6032a174c95e0806b1a6585eb21e12f445ebe239fac441995226a/charset_normalizer-3.4.2-cp312-cp312-win32.whl", hash = "sha256:db4c7bf0e07fc3b7d89ac2a5880a6a8062056801b83ff56d8464b70f65482b6c", size = 98357, upload_time = "2025-05-02T08:32:53.079Z" }, + { url = "https://files.pythonhosted.org/packages/6c/4f/c02d5c493967af3eda9c771ad4d2bbc8df6f99ddbeb37ceea6e8716a32bc/charset_normalizer-3.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:5a9979887252a82fefd3d3ed2a8e3b937a7a809f65dcb1e068b090e165bbe99e", size = 105776, upload_time = "2025-05-02T08:32:54.573Z" }, + { url = "https://files.pythonhosted.org/packages/ea/12/a93df3366ed32db1d907d7593a94f1fe6293903e3e92967bebd6950ed12c/charset_normalizer-3.4.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:926ca93accd5d36ccdabd803392ddc3e03e6d4cd1cf17deff3b989ab8e9dbcf0", size = 199622, upload_time = "2025-05-02T08:32:56.363Z" }, + { url = "https://files.pythonhosted.org/packages/04/93/bf204e6f344c39d9937d3c13c8cd5bbfc266472e51fc8c07cb7f64fcd2de/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eba9904b0f38a143592d9fc0e19e2df0fa2e41c3c3745554761c5f6447eedabf", size = 143435, upload_time = "2025-05-02T08:32:58.551Z" }, + { url = "https://files.pythonhosted.org/packages/22/2a/ea8a2095b0bafa6c5b5a55ffdc2f924455233ee7b91c69b7edfcc9e02284/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3fddb7e2c84ac87ac3a947cb4e66d143ca5863ef48e4a5ecb83bd48619e4634e", size = 153653, upload_time = "2025-05-02T08:33:00.342Z" }, + { url = "https://files.pythonhosted.org/packages/b6/57/1b090ff183d13cef485dfbe272e2fe57622a76694061353c59da52c9a659/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98f862da73774290f251b9df8d11161b6cf25b599a66baf087c1ffe340e9bfd1", size = 146231, upload_time = "2025-05-02T08:33:02.081Z" }, + { url = "https://files.pythonhosted.org/packages/e2/28/ffc026b26f441fc67bd21ab7f03b313ab3fe46714a14b516f931abe1a2d8/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c9379d65defcab82d07b2a9dfbfc2e95bc8fe0ebb1b176a3190230a3ef0e07c", size = 148243, upload_time = "2025-05-02T08:33:04.063Z" }, + { url = "https://files.pythonhosted.org/packages/c0/0f/9abe9bd191629c33e69e47c6ef45ef99773320e9ad8e9cb08b8ab4a8d4cb/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e635b87f01ebc977342e2697d05b56632f5f879a4f15955dfe8cef2448b51691", size = 150442, upload_time = "2025-05-02T08:33:06.418Z" }, + { url = "https://files.pythonhosted.org/packages/67/7c/a123bbcedca91d5916c056407f89a7f5e8fdfce12ba825d7d6b9954a1a3c/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1c95a1e2902a8b722868587c0e1184ad5c55631de5afc0eb96bc4b0d738092c0", size = 145147, upload_time = "2025-05-02T08:33:08.183Z" }, + { url = "https://files.pythonhosted.org/packages/ec/fe/1ac556fa4899d967b83e9893788e86b6af4d83e4726511eaaad035e36595/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ef8de666d6179b009dce7bcb2ad4c4a779f113f12caf8dc77f0162c29d20490b", size = 153057, upload_time = "2025-05-02T08:33:09.986Z" }, + { url = "https://files.pythonhosted.org/packages/2b/ff/acfc0b0a70b19e3e54febdd5301a98b72fa07635e56f24f60502e954c461/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:32fc0341d72e0f73f80acb0a2c94216bd704f4f0bce10aedea38f30502b271ff", size = 156454, upload_time = "2025-05-02T08:33:11.814Z" }, + { url = "https://files.pythonhosted.org/packages/92/08/95b458ce9c740d0645feb0e96cea1f5ec946ea9c580a94adfe0b617f3573/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:289200a18fa698949d2b39c671c2cc7a24d44096784e76614899a7ccf2574b7b", size = 154174, upload_time = "2025-05-02T08:33:13.707Z" }, + { url = "https://files.pythonhosted.org/packages/78/be/8392efc43487ac051eee6c36d5fbd63032d78f7728cb37aebcc98191f1ff/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4a476b06fbcf359ad25d34a057b7219281286ae2477cc5ff5e3f70a246971148", size = 149166, upload_time = "2025-05-02T08:33:15.458Z" }, + { url = "https://files.pythonhosted.org/packages/44/96/392abd49b094d30b91d9fbda6a69519e95802250b777841cf3bda8fe136c/charset_normalizer-3.4.2-cp313-cp313-win32.whl", hash = "sha256:aaeeb6a479c7667fbe1099af9617c83aaca22182d6cf8c53966491a0f1b7ffb7", size = 98064, upload_time = "2025-05-02T08:33:17.06Z" }, + { url = "https://files.pythonhosted.org/packages/e9/b0/0200da600134e001d91851ddc797809e2fe0ea72de90e09bec5a2fbdaccb/charset_normalizer-3.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980", size = 105641, upload_time = "2025-05-02T08:33:18.753Z" }, + { url = "https://files.pythonhosted.org/packages/20/94/c5790835a017658cbfabd07f3bfb549140c3ac458cfc196323996b10095a/charset_normalizer-3.4.2-py3-none-any.whl", hash = "sha256:7f56930ab0abd1c45cd15be65cc741c28b1c9a34876ce8c17a2fa107810c0af0", size = 52626, upload_time = "2025-05-02T08:34:40.053Z" }, ] [[package]] @@ -197,18 +242,18 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/60/6c/8ca2efa64cf75a977a0d7fac081354553ebe483345c734fb6b6515d96bbc/click-8.2.1.tar.gz", hash = "sha256:27c491cc05d968d271d5a1db13e3b5a184636d9d930f148c50b038f0d0646202", size = 286342 } +sdist = { url = "https://files.pythonhosted.org/packages/60/6c/8ca2efa64cf75a977a0d7fac081354553ebe483345c734fb6b6515d96bbc/click-8.2.1.tar.gz", hash = "sha256:27c491cc05d968d271d5a1db13e3b5a184636d9d930f148c50b038f0d0646202", size = 286342, upload_time = "2025-05-20T23:19:49.832Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/85/32/10bb5764d90a8eee674e9dc6f4db6a0ab47c8c4d0d83c27f7c39ac415a4d/click-8.2.1-py3-none-any.whl", hash = "sha256:61a3265b914e850b85317d0b3109c7f8cd35a670f963866005d6ef1d5175a12b", size = 102215 }, + { url = "https://files.pythonhosted.org/packages/85/32/10bb5764d90a8eee674e9dc6f4db6a0ab47c8c4d0d83c27f7c39ac415a4d/click-8.2.1-py3-none-any.whl", hash = "sha256:61a3265b914e850b85317d0b3109c7f8cd35a670f963866005d6ef1d5175a12b", size = 102215, upload_time = "2025-05-20T23:19:47.796Z" }, ] [[package]] name = "colorama" version = "0.4.6" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload_time = "2022-10-25T02:36:22.414Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 }, + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload_time = "2022-10-25T02:36:20.889Z" }, ] [[package]] @@ -218,150 +263,216 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/e9/a8/fb783cb0abe2b5fded9f55e5703015cdf1c9c85b3669087c538dd15a6a86/comm-0.2.2.tar.gz", hash = "sha256:3fd7a84065306e07bea1773df6eb8282de51ba82f77c72f9c85716ab11fe980e", size = 6210 } +sdist = { url = "https://files.pythonhosted.org/packages/e9/a8/fb783cb0abe2b5fded9f55e5703015cdf1c9c85b3669087c538dd15a6a86/comm-0.2.2.tar.gz", hash = "sha256:3fd7a84065306e07bea1773df6eb8282de51ba82f77c72f9c85716ab11fe980e", size = 6210, upload_time = "2024-03-12T16:53:41.133Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e6/75/49e5bfe642f71f272236b5b2d2691cf915a7283cc0ceda56357b61daa538/comm-0.2.2-py3-none-any.whl", hash = "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3", size = 7180 }, + { url = "https://files.pythonhosted.org/packages/e6/75/49e5bfe642f71f272236b5b2d2691cf915a7283cc0ceda56357b61daa538/comm-0.2.2-py3-none-any.whl", hash = "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3", size = 7180, upload_time = "2024-03-12T16:53:39.226Z" }, ] [[package]] name = "coverage" version = "7.10.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/87/0e/66dbd4c6a7f0758a8d18044c048779ba21fb94856e1edcf764bd5403e710/coverage-7.10.1.tar.gz", hash = "sha256:ae2b4856f29ddfe827106794f3589949a57da6f0d38ab01e24ec35107979ba57", size = 819938 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a5/3f/b051feeb292400bd22d071fdf933b3ad389a8cef5c80c7866ed0c7414b9e/coverage-7.10.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6b7dc7f0a75a7eaa4584e5843c873c561b12602439d2351ee28c7478186c4da4", size = 214934 }, - { url = "https://files.pythonhosted.org/packages/f8/e4/a61b27d5c4c2d185bdfb0bfe9d15ab4ac4f0073032665544507429ae60eb/coverage-7.10.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:607f82389f0ecafc565813aa201a5cade04f897603750028dd660fb01797265e", size = 215173 }, - { url = "https://files.pythonhosted.org/packages/8a/01/40a6ee05b60d02d0bc53742ad4966e39dccd450aafb48c535a64390a3552/coverage-7.10.1-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:f7da31a1ba31f1c1d4d5044b7c5813878adae1f3af8f4052d679cc493c7328f4", size = 246190 }, - { url = "https://files.pythonhosted.org/packages/11/ef/a28d64d702eb583c377255047281305dc5a5cfbfb0ee36e721f78255adb6/coverage-7.10.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:51fe93f3fe4f5d8483d51072fddc65e717a175490804e1942c975a68e04bf97a", size = 248618 }, - { url = "https://files.pythonhosted.org/packages/6a/ad/73d018bb0c8317725370c79d69b5c6e0257df84a3b9b781bda27a438a3be/coverage-7.10.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3e59d00830da411a1feef6ac828b90bbf74c9b6a8e87b8ca37964925bba76dbe", size = 250081 }, - { url = "https://files.pythonhosted.org/packages/2d/dd/496adfbbb4503ebca5d5b2de8bed5ec00c0a76558ffc5b834fd404166bc9/coverage-7.10.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:924563481c27941229cb4e16eefacc35da28563e80791b3ddc5597b062a5c386", size = 247990 }, - { url = "https://files.pythonhosted.org/packages/18/3c/a9331a7982facfac0d98a4a87b36ae666fe4257d0f00961a3a9ef73e015d/coverage-7.10.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:ca79146ee421b259f8131f153102220b84d1a5e6fb9c8aed13b3badfd1796de6", size = 246191 }, - { url = "https://files.pythonhosted.org/packages/62/0c/75345895013b83f7afe92ec595e15a9a525ede17491677ceebb2ba5c3d85/coverage-7.10.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2b225a06d227f23f386fdc0eab471506d9e644be699424814acc7d114595495f", size = 247400 }, - { url = "https://files.pythonhosted.org/packages/e2/a9/98b268cfc5619ef9df1d5d34fee408ecb1542d9fd43d467e5c2f28668cd4/coverage-7.10.1-cp312-cp312-win32.whl", hash = "sha256:5ba9a8770effec5baaaab1567be916c87d8eea0c9ad11253722d86874d885eca", size = 217338 }, - { url = "https://files.pythonhosted.org/packages/fe/31/22a5440e4d1451f253c5cd69fdcead65e92ef08cd4ec237b8756dc0b20a7/coverage-7.10.1-cp312-cp312-win_amd64.whl", hash = "sha256:9eb245a8d8dd0ad73b4062135a251ec55086fbc2c42e0eb9725a9b553fba18a3", size = 218125 }, - { url = "https://files.pythonhosted.org/packages/d6/2b/40d9f0ce7ee839f08a43c5bfc9d05cec28aaa7c9785837247f96cbe490b9/coverage-7.10.1-cp312-cp312-win_arm64.whl", hash = "sha256:7718060dd4434cc719803a5e526838a5d66e4efa5dc46d2b25c21965a9c6fcc4", size = 216523 }, - { url = "https://files.pythonhosted.org/packages/ef/72/135ff5fef09b1ffe78dbe6fcf1e16b2e564cd35faeacf3d63d60d887f12d/coverage-7.10.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ebb08d0867c5a25dffa4823377292a0ffd7aaafb218b5d4e2e106378b1061e39", size = 214960 }, - { url = "https://files.pythonhosted.org/packages/b1/aa/73a5d1a6fc08ca709a8177825616aa95ee6bf34d522517c2595484a3e6c9/coverage-7.10.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f32a95a83c2e17422f67af922a89422cd24c6fa94041f083dd0bb4f6057d0bc7", size = 215220 }, - { url = "https://files.pythonhosted.org/packages/8d/40/3124fdd45ed3772a42fc73ca41c091699b38a2c3bd4f9cb564162378e8b6/coverage-7.10.1-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:c4c746d11c8aba4b9f58ca8bfc6fbfd0da4efe7960ae5540d1a1b13655ee8892", size = 245772 }, - { url = "https://files.pythonhosted.org/packages/42/62/a77b254822efa8c12ad59e8039f2bc3df56dc162ebda55e1943e35ba31a5/coverage-7.10.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:7f39edd52c23e5c7ed94e0e4bf088928029edf86ef10b95413e5ea670c5e92d7", size = 248116 }, - { url = "https://files.pythonhosted.org/packages/1d/01/8101f062f472a3a6205b458d18ef0444a63ae5d36a8a5ed5dd0f6167f4db/coverage-7.10.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ab6e19b684981d0cd968906e293d5628e89faacb27977c92f3600b201926b994", size = 249554 }, - { url = "https://files.pythonhosted.org/packages/8f/7b/e51bc61573e71ff7275a4f167aecbd16cb010aefdf54bcd8b0a133391263/coverage-7.10.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5121d8cf0eacb16133501455d216bb5f99899ae2f52d394fe45d59229e6611d0", size = 247766 }, - { url = "https://files.pythonhosted.org/packages/4b/71/1c96d66a51d4204a9d6d12df53c4071d87e110941a2a1fe94693192262f5/coverage-7.10.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:df1c742ca6f46a6f6cbcaef9ac694dc2cb1260d30a6a2f5c68c5f5bcfee1cfd7", size = 245735 }, - { url = "https://files.pythonhosted.org/packages/13/d5/efbc2ac4d35ae2f22ef6df2ca084c60e13bd9378be68655e3268c80349ab/coverage-7.10.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:40f9a38676f9c073bf4b9194707aa1eb97dca0e22cc3766d83879d72500132c7", size = 247118 }, - { url = "https://files.pythonhosted.org/packages/d1/22/073848352bec28ca65f2b6816b892fcf9a31abbef07b868487ad15dd55f1/coverage-7.10.1-cp313-cp313-win32.whl", hash = "sha256:2348631f049e884839553b9974f0821d39241c6ffb01a418efce434f7eba0fe7", size = 217381 }, - { url = "https://files.pythonhosted.org/packages/b7/df/df6a0ff33b042f000089bd11b6bb034bab073e2ab64a56e78ed882cba55d/coverage-7.10.1-cp313-cp313-win_amd64.whl", hash = "sha256:4072b31361b0d6d23f750c524f694e1a417c1220a30d3ef02741eed28520c48e", size = 218152 }, - { url = "https://files.pythonhosted.org/packages/30/e3/5085ca849a40ed6b47cdb8f65471c2f754e19390b5a12fa8abd25cbfaa8f/coverage-7.10.1-cp313-cp313-win_arm64.whl", hash = "sha256:3e31dfb8271937cab9425f19259b1b1d1f556790e98eb266009e7a61d337b6d4", size = 216559 }, - { url = "https://files.pythonhosted.org/packages/cc/93/58714efbfdeb547909feaabe1d67b2bdd59f0597060271b9c548d5efb529/coverage-7.10.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:1c4f679c6b573a5257af6012f167a45be4c749c9925fd44d5178fd641ad8bf72", size = 215677 }, - { url = "https://files.pythonhosted.org/packages/c0/0c/18eaa5897e7e8cb3f8c45e563e23e8a85686b4585e29d53cacb6bc9cb340/coverage-7.10.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:871ebe8143da284bd77b84a9136200bd638be253618765d21a1fce71006d94af", size = 215899 }, - { url = "https://files.pythonhosted.org/packages/84/c1/9d1affacc3c75b5a184c140377701bbf14fc94619367f07a269cd9e4fed6/coverage-7.10.1-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:998c4751dabf7d29b30594af416e4bf5091f11f92a8d88eb1512c7ba136d1ed7", size = 257140 }, - { url = "https://files.pythonhosted.org/packages/3d/0f/339bc6b8fa968c346df346068cca1f24bdea2ddfa93bb3dc2e7749730962/coverage-7.10.1-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:780f750a25e7749d0af6b3631759c2c14f45de209f3faaa2398312d1c7a22759", size = 259005 }, - { url = "https://files.pythonhosted.org/packages/c8/22/89390864b92ea7c909079939b71baba7e5b42a76bf327c1d615bd829ba57/coverage-7.10.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:590bdba9445df4763bdbebc928d8182f094c1f3947a8dc0fc82ef014dbdd8324", size = 261143 }, - { url = "https://files.pythonhosted.org/packages/2c/56/3d04d89017c0c41c7a71bd69b29699d919b6bbf2649b8b2091240b97dd6a/coverage-7.10.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b2df80cb6a2af86d300e70acb82e9b79dab2c1e6971e44b78dbfc1a1e736b53", size = 258735 }, - { url = "https://files.pythonhosted.org/packages/cb/40/312252c8afa5ca781063a09d931f4b9409dc91526cd0b5a2b84143ffafa2/coverage-7.10.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:d6a558c2725bfb6337bf57c1cd366c13798bfd3bfc9e3dd1f4a6f6fc95a4605f", size = 256871 }, - { url = "https://files.pythonhosted.org/packages/1f/2b/564947d5dede068215aaddb9e05638aeac079685101462218229ddea9113/coverage-7.10.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e6150d167f32f2a54690e572e0a4c90296fb000a18e9b26ab81a6489e24e78dd", size = 257692 }, - { url = "https://files.pythonhosted.org/packages/93/1b/c8a867ade85cb26d802aea2209b9c2c80613b9c122baa8c8ecea6799648f/coverage-7.10.1-cp313-cp313t-win32.whl", hash = "sha256:d946a0c067aa88be4a593aad1236493313bafaa27e2a2080bfe88db827972f3c", size = 218059 }, - { url = "https://files.pythonhosted.org/packages/a1/fe/cd4ab40570ae83a516bf5e754ea4388aeedd48e660e40c50b7713ed4f930/coverage-7.10.1-cp313-cp313t-win_amd64.whl", hash = "sha256:e37c72eaccdd5ed1130c67a92ad38f5b2af66eeff7b0abe29534225db2ef7b18", size = 219150 }, - { url = "https://files.pythonhosted.org/packages/8d/16/6e5ed5854be6d70d0c39e9cb9dd2449f2c8c34455534c32c1a508c7dbdb5/coverage-7.10.1-cp313-cp313t-win_arm64.whl", hash = "sha256:89ec0ffc215c590c732918c95cd02b55c7d0f569d76b90bb1a5e78aa340618e4", size = 217014 }, - { url = "https://files.pythonhosted.org/packages/54/8e/6d0bfe9c3d7121cf936c5f8b03e8c3da1484fb801703127dba20fb8bd3c7/coverage-7.10.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:166d89c57e877e93d8827dac32cedae6b0277ca684c6511497311249f35a280c", size = 214951 }, - { url = "https://files.pythonhosted.org/packages/f2/29/e3e51a8c653cf2174c60532aafeb5065cea0911403fa144c9abe39790308/coverage-7.10.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:bed4a2341b33cd1a7d9ffc47df4a78ee61d3416d43b4adc9e18b7d266650b83e", size = 215229 }, - { url = "https://files.pythonhosted.org/packages/e0/59/3c972080b2fa18b6c4510201f6d4dc87159d450627d062cd9ad051134062/coverage-7.10.1-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:ddca1e4f5f4c67980533df01430184c19b5359900e080248bbf4ed6789584d8b", size = 245738 }, - { url = "https://files.pythonhosted.org/packages/2e/04/fc0d99d3f809452654e958e1788454f6e27b34e43f8f8598191c8ad13537/coverage-7.10.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:37b69226001d8b7de7126cad7366b0778d36777e4d788c66991455ba817c5b41", size = 248045 }, - { url = "https://files.pythonhosted.org/packages/5e/2e/afcbf599e77e0dfbf4c97197747250d13d397d27e185b93987d9eaac053d/coverage-7.10.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b2f22102197bcb1722691296f9e589f02b616f874e54a209284dd7b9294b0b7f", size = 249666 }, - { url = "https://files.pythonhosted.org/packages/6e/ae/bc47f7f8ecb7a06cbae2bf86a6fa20f479dd902bc80f57cff7730438059d/coverage-7.10.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:1e0c768b0f9ac5839dac5cf88992a4bb459e488ee8a1f8489af4cb33b1af00f1", size = 247692 }, - { url = "https://files.pythonhosted.org/packages/b6/26/cbfa3092d31ccba8ba7647e4d25753263e818b4547eba446b113d7d1efdf/coverage-7.10.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:991196702d5e0b120a8fef2664e1b9c333a81d36d5f6bcf6b225c0cf8b0451a2", size = 245536 }, - { url = "https://files.pythonhosted.org/packages/56/77/9c68e92500e6a1c83d024a70eadcc9a173f21aadd73c4675fe64c9c43fdf/coverage-7.10.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ae8e59e5f4fd85d6ad34c2bb9d74037b5b11be072b8b7e9986beb11f957573d4", size = 246954 }, - { url = "https://files.pythonhosted.org/packages/7f/a5/ba96671c5a669672aacd9877a5987c8551501b602827b4e84256da2a30a7/coverage-7.10.1-cp314-cp314-win32.whl", hash = "sha256:042125c89cf74a074984002e165d61fe0e31c7bd40ebb4bbebf07939b5924613", size = 217616 }, - { url = "https://files.pythonhosted.org/packages/e7/3c/e1e1eb95fc1585f15a410208c4795db24a948e04d9bde818fe4eb893bc85/coverage-7.10.1-cp314-cp314-win_amd64.whl", hash = "sha256:a22c3bfe09f7a530e2c94c87ff7af867259c91bef87ed2089cd69b783af7b84e", size = 218412 }, - { url = "https://files.pythonhosted.org/packages/b0/85/7e1e5be2cb966cba95566ba702b13a572ca744fbb3779df9888213762d67/coverage-7.10.1-cp314-cp314-win_arm64.whl", hash = "sha256:ee6be07af68d9c4fca4027c70cea0c31a0f1bc9cb464ff3c84a1f916bf82e652", size = 216776 }, - { url = "https://files.pythonhosted.org/packages/62/0f/5bb8f29923141cca8560fe2217679caf4e0db643872c1945ac7d8748c2a7/coverage-7.10.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:d24fb3c0c8ff0d517c5ca5de7cf3994a4cd559cde0315201511dbfa7ab528894", size = 215698 }, - { url = "https://files.pythonhosted.org/packages/80/29/547038ffa4e8e4d9e82f7dfc6d152f75fcdc0af146913f0ba03875211f03/coverage-7.10.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1217a54cfd79be20512a67ca81c7da3f2163f51bbfd188aab91054df012154f5", size = 215902 }, - { url = "https://files.pythonhosted.org/packages/e1/8a/7aaa8fbfaed900147987a424e112af2e7790e1ac9cd92601e5bd4e1ba60a/coverage-7.10.1-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:51f30da7a52c009667e02f125737229d7d8044ad84b79db454308033a7808ab2", size = 257230 }, - { url = "https://files.pythonhosted.org/packages/e5/1d/c252b5ffac44294e23a0d79dd5acf51749b39795ccc898faeabf7bee903f/coverage-7.10.1-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:ed3718c757c82d920f1c94089066225ca2ad7f00bb904cb72b1c39ebdd906ccb", size = 259194 }, - { url = "https://files.pythonhosted.org/packages/16/ad/6c8d9f83d08f3bac2e7507534d0c48d1a4f52c18e6f94919d364edbdfa8f/coverage-7.10.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cc452481e124a819ced0c25412ea2e144269ef2f2534b862d9f6a9dae4bda17b", size = 261316 }, - { url = "https://files.pythonhosted.org/packages/d6/4e/f9bbf3a36c061e2e0e0f78369c006d66416561a33d2bee63345aee8ee65e/coverage-7.10.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:9d6f494c307e5cb9b1e052ec1a471060f1dea092c8116e642e7a23e79d9388ea", size = 258794 }, - { url = "https://files.pythonhosted.org/packages/87/82/e600bbe78eb2cb0541751d03cef9314bcd0897e8eea156219c39b685f869/coverage-7.10.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:fc0e46d86905ddd16b85991f1f4919028092b4e511689bbdaff0876bd8aab3dd", size = 256869 }, - { url = "https://files.pythonhosted.org/packages/ce/5d/2fc9a9236c5268f68ac011d97cd3a5ad16cc420535369bedbda659fdd9b7/coverage-7.10.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:80b9ccd82e30038b61fc9a692a8dc4801504689651b281ed9109f10cc9fe8b4d", size = 257765 }, - { url = "https://files.pythonhosted.org/packages/8a/05/b4e00b2bd48a2dc8e1c7d2aea7455f40af2e36484ab2ef06deb85883e9fe/coverage-7.10.1-cp314-cp314t-win32.whl", hash = "sha256:e58991a2b213417285ec866d3cd32db17a6a88061a985dbb7e8e8f13af429c47", size = 218420 }, - { url = "https://files.pythonhosted.org/packages/77/fb/d21d05f33ea27ece327422240e69654b5932b0b29e7fbc40fbab3cf199bf/coverage-7.10.1-cp314-cp314t-win_amd64.whl", hash = "sha256:e88dd71e4ecbc49d9d57d064117462c43f40a21a1383507811cf834a4a620651", size = 219536 }, - { url = "https://files.pythonhosted.org/packages/a6/68/7fea94b141281ed8be3d1d5c4319a97f2befc3e487ce33657fc64db2c45e/coverage-7.10.1-cp314-cp314t-win_arm64.whl", hash = "sha256:1aadfb06a30c62c2eb82322171fe1f7c288c80ca4156d46af0ca039052814bab", size = 217190 }, - { url = "https://files.pythonhosted.org/packages/0f/64/922899cff2c0fd3496be83fa8b81230f5a8d82a2ad30f98370b133c2c83b/coverage-7.10.1-py3-none-any.whl", hash = "sha256:fa2a258aa6bf188eb9a8948f7102a83da7c430a0dce918dbd8b60ef8fcb772d7", size = 206597 }, +sdist = { url = "https://files.pythonhosted.org/packages/87/0e/66dbd4c6a7f0758a8d18044c048779ba21fb94856e1edcf764bd5403e710/coverage-7.10.1.tar.gz", hash = "sha256:ae2b4856f29ddfe827106794f3589949a57da6f0d38ab01e24ec35107979ba57", size = 819938, upload_time = "2025-07-27T14:13:39.045Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a5/3f/b051feeb292400bd22d071fdf933b3ad389a8cef5c80c7866ed0c7414b9e/coverage-7.10.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6b7dc7f0a75a7eaa4584e5843c873c561b12602439d2351ee28c7478186c4da4", size = 214934, upload_time = "2025-07-27T14:11:36.096Z" }, + { url = "https://files.pythonhosted.org/packages/f8/e4/a61b27d5c4c2d185bdfb0bfe9d15ab4ac4f0073032665544507429ae60eb/coverage-7.10.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:607f82389f0ecafc565813aa201a5cade04f897603750028dd660fb01797265e", size = 215173, upload_time = "2025-07-27T14:11:38.005Z" }, + { url = "https://files.pythonhosted.org/packages/8a/01/40a6ee05b60d02d0bc53742ad4966e39dccd450aafb48c535a64390a3552/coverage-7.10.1-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:f7da31a1ba31f1c1d4d5044b7c5813878adae1f3af8f4052d679cc493c7328f4", size = 246190, upload_time = "2025-07-27T14:11:39.887Z" }, + { url = "https://files.pythonhosted.org/packages/11/ef/a28d64d702eb583c377255047281305dc5a5cfbfb0ee36e721f78255adb6/coverage-7.10.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:51fe93f3fe4f5d8483d51072fddc65e717a175490804e1942c975a68e04bf97a", size = 248618, upload_time = "2025-07-27T14:11:41.841Z" }, + { url = "https://files.pythonhosted.org/packages/6a/ad/73d018bb0c8317725370c79d69b5c6e0257df84a3b9b781bda27a438a3be/coverage-7.10.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3e59d00830da411a1feef6ac828b90bbf74c9b6a8e87b8ca37964925bba76dbe", size = 250081, upload_time = "2025-07-27T14:11:43.705Z" }, + { url = "https://files.pythonhosted.org/packages/2d/dd/496adfbbb4503ebca5d5b2de8bed5ec00c0a76558ffc5b834fd404166bc9/coverage-7.10.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:924563481c27941229cb4e16eefacc35da28563e80791b3ddc5597b062a5c386", size = 247990, upload_time = "2025-07-27T14:11:45.244Z" }, + { url = "https://files.pythonhosted.org/packages/18/3c/a9331a7982facfac0d98a4a87b36ae666fe4257d0f00961a3a9ef73e015d/coverage-7.10.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:ca79146ee421b259f8131f153102220b84d1a5e6fb9c8aed13b3badfd1796de6", size = 246191, upload_time = "2025-07-27T14:11:47.093Z" }, + { url = "https://files.pythonhosted.org/packages/62/0c/75345895013b83f7afe92ec595e15a9a525ede17491677ceebb2ba5c3d85/coverage-7.10.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2b225a06d227f23f386fdc0eab471506d9e644be699424814acc7d114595495f", size = 247400, upload_time = "2025-07-27T14:11:48.643Z" }, + { url = "https://files.pythonhosted.org/packages/e2/a9/98b268cfc5619ef9df1d5d34fee408ecb1542d9fd43d467e5c2f28668cd4/coverage-7.10.1-cp312-cp312-win32.whl", hash = "sha256:5ba9a8770effec5baaaab1567be916c87d8eea0c9ad11253722d86874d885eca", size = 217338, upload_time = "2025-07-27T14:11:50.258Z" }, + { url = "https://files.pythonhosted.org/packages/fe/31/22a5440e4d1451f253c5cd69fdcead65e92ef08cd4ec237b8756dc0b20a7/coverage-7.10.1-cp312-cp312-win_amd64.whl", hash = "sha256:9eb245a8d8dd0ad73b4062135a251ec55086fbc2c42e0eb9725a9b553fba18a3", size = 218125, upload_time = "2025-07-27T14:11:52.034Z" }, + { url = "https://files.pythonhosted.org/packages/d6/2b/40d9f0ce7ee839f08a43c5bfc9d05cec28aaa7c9785837247f96cbe490b9/coverage-7.10.1-cp312-cp312-win_arm64.whl", hash = "sha256:7718060dd4434cc719803a5e526838a5d66e4efa5dc46d2b25c21965a9c6fcc4", size = 216523, upload_time = "2025-07-27T14:11:53.965Z" }, + { url = "https://files.pythonhosted.org/packages/ef/72/135ff5fef09b1ffe78dbe6fcf1e16b2e564cd35faeacf3d63d60d887f12d/coverage-7.10.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ebb08d0867c5a25dffa4823377292a0ffd7aaafb218b5d4e2e106378b1061e39", size = 214960, upload_time = "2025-07-27T14:11:55.959Z" }, + { url = "https://files.pythonhosted.org/packages/b1/aa/73a5d1a6fc08ca709a8177825616aa95ee6bf34d522517c2595484a3e6c9/coverage-7.10.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f32a95a83c2e17422f67af922a89422cd24c6fa94041f083dd0bb4f6057d0bc7", size = 215220, upload_time = "2025-07-27T14:11:57.899Z" }, + { url = "https://files.pythonhosted.org/packages/8d/40/3124fdd45ed3772a42fc73ca41c091699b38a2c3bd4f9cb564162378e8b6/coverage-7.10.1-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:c4c746d11c8aba4b9f58ca8bfc6fbfd0da4efe7960ae5540d1a1b13655ee8892", size = 245772, upload_time = "2025-07-27T14:12:00.422Z" }, + { url = "https://files.pythonhosted.org/packages/42/62/a77b254822efa8c12ad59e8039f2bc3df56dc162ebda55e1943e35ba31a5/coverage-7.10.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:7f39edd52c23e5c7ed94e0e4bf088928029edf86ef10b95413e5ea670c5e92d7", size = 248116, upload_time = "2025-07-27T14:12:03.099Z" }, + { url = "https://files.pythonhosted.org/packages/1d/01/8101f062f472a3a6205b458d18ef0444a63ae5d36a8a5ed5dd0f6167f4db/coverage-7.10.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ab6e19b684981d0cd968906e293d5628e89faacb27977c92f3600b201926b994", size = 249554, upload_time = "2025-07-27T14:12:04.668Z" }, + { url = "https://files.pythonhosted.org/packages/8f/7b/e51bc61573e71ff7275a4f167aecbd16cb010aefdf54bcd8b0a133391263/coverage-7.10.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5121d8cf0eacb16133501455d216bb5f99899ae2f52d394fe45d59229e6611d0", size = 247766, upload_time = "2025-07-27T14:12:06.234Z" }, + { url = "https://files.pythonhosted.org/packages/4b/71/1c96d66a51d4204a9d6d12df53c4071d87e110941a2a1fe94693192262f5/coverage-7.10.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:df1c742ca6f46a6f6cbcaef9ac694dc2cb1260d30a6a2f5c68c5f5bcfee1cfd7", size = 245735, upload_time = "2025-07-27T14:12:08.305Z" }, + { url = "https://files.pythonhosted.org/packages/13/d5/efbc2ac4d35ae2f22ef6df2ca084c60e13bd9378be68655e3268c80349ab/coverage-7.10.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:40f9a38676f9c073bf4b9194707aa1eb97dca0e22cc3766d83879d72500132c7", size = 247118, upload_time = "2025-07-27T14:12:09.903Z" }, + { url = "https://files.pythonhosted.org/packages/d1/22/073848352bec28ca65f2b6816b892fcf9a31abbef07b868487ad15dd55f1/coverage-7.10.1-cp313-cp313-win32.whl", hash = "sha256:2348631f049e884839553b9974f0821d39241c6ffb01a418efce434f7eba0fe7", size = 217381, upload_time = "2025-07-27T14:12:11.535Z" }, + { url = "https://files.pythonhosted.org/packages/b7/df/df6a0ff33b042f000089bd11b6bb034bab073e2ab64a56e78ed882cba55d/coverage-7.10.1-cp313-cp313-win_amd64.whl", hash = "sha256:4072b31361b0d6d23f750c524f694e1a417c1220a30d3ef02741eed28520c48e", size = 218152, upload_time = "2025-07-27T14:12:13.182Z" }, + { url = "https://files.pythonhosted.org/packages/30/e3/5085ca849a40ed6b47cdb8f65471c2f754e19390b5a12fa8abd25cbfaa8f/coverage-7.10.1-cp313-cp313-win_arm64.whl", hash = "sha256:3e31dfb8271937cab9425f19259b1b1d1f556790e98eb266009e7a61d337b6d4", size = 216559, upload_time = "2025-07-27T14:12:14.807Z" }, + { url = "https://files.pythonhosted.org/packages/cc/93/58714efbfdeb547909feaabe1d67b2bdd59f0597060271b9c548d5efb529/coverage-7.10.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:1c4f679c6b573a5257af6012f167a45be4c749c9925fd44d5178fd641ad8bf72", size = 215677, upload_time = "2025-07-27T14:12:16.68Z" }, + { url = "https://files.pythonhosted.org/packages/c0/0c/18eaa5897e7e8cb3f8c45e563e23e8a85686b4585e29d53cacb6bc9cb340/coverage-7.10.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:871ebe8143da284bd77b84a9136200bd638be253618765d21a1fce71006d94af", size = 215899, upload_time = "2025-07-27T14:12:18.758Z" }, + { url = "https://files.pythonhosted.org/packages/84/c1/9d1affacc3c75b5a184c140377701bbf14fc94619367f07a269cd9e4fed6/coverage-7.10.1-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:998c4751dabf7d29b30594af416e4bf5091f11f92a8d88eb1512c7ba136d1ed7", size = 257140, upload_time = "2025-07-27T14:12:20.357Z" }, + { url = "https://files.pythonhosted.org/packages/3d/0f/339bc6b8fa968c346df346068cca1f24bdea2ddfa93bb3dc2e7749730962/coverage-7.10.1-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:780f750a25e7749d0af6b3631759c2c14f45de209f3faaa2398312d1c7a22759", size = 259005, upload_time = "2025-07-27T14:12:22.007Z" }, + { url = "https://files.pythonhosted.org/packages/c8/22/89390864b92ea7c909079939b71baba7e5b42a76bf327c1d615bd829ba57/coverage-7.10.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:590bdba9445df4763bdbebc928d8182f094c1f3947a8dc0fc82ef014dbdd8324", size = 261143, upload_time = "2025-07-27T14:12:23.746Z" }, + { url = "https://files.pythonhosted.org/packages/2c/56/3d04d89017c0c41c7a71bd69b29699d919b6bbf2649b8b2091240b97dd6a/coverage-7.10.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b2df80cb6a2af86d300e70acb82e9b79dab2c1e6971e44b78dbfc1a1e736b53", size = 258735, upload_time = "2025-07-27T14:12:25.73Z" }, + { url = "https://files.pythonhosted.org/packages/cb/40/312252c8afa5ca781063a09d931f4b9409dc91526cd0b5a2b84143ffafa2/coverage-7.10.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:d6a558c2725bfb6337bf57c1cd366c13798bfd3bfc9e3dd1f4a6f6fc95a4605f", size = 256871, upload_time = "2025-07-27T14:12:27.767Z" }, + { url = "https://files.pythonhosted.org/packages/1f/2b/564947d5dede068215aaddb9e05638aeac079685101462218229ddea9113/coverage-7.10.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e6150d167f32f2a54690e572e0a4c90296fb000a18e9b26ab81a6489e24e78dd", size = 257692, upload_time = "2025-07-27T14:12:29.347Z" }, + { url = "https://files.pythonhosted.org/packages/93/1b/c8a867ade85cb26d802aea2209b9c2c80613b9c122baa8c8ecea6799648f/coverage-7.10.1-cp313-cp313t-win32.whl", hash = "sha256:d946a0c067aa88be4a593aad1236493313bafaa27e2a2080bfe88db827972f3c", size = 218059, upload_time = "2025-07-27T14:12:31.076Z" }, + { url = "https://files.pythonhosted.org/packages/a1/fe/cd4ab40570ae83a516bf5e754ea4388aeedd48e660e40c50b7713ed4f930/coverage-7.10.1-cp313-cp313t-win_amd64.whl", hash = "sha256:e37c72eaccdd5ed1130c67a92ad38f5b2af66eeff7b0abe29534225db2ef7b18", size = 219150, upload_time = "2025-07-27T14:12:32.746Z" }, + { url = "https://files.pythonhosted.org/packages/8d/16/6e5ed5854be6d70d0c39e9cb9dd2449f2c8c34455534c32c1a508c7dbdb5/coverage-7.10.1-cp313-cp313t-win_arm64.whl", hash = "sha256:89ec0ffc215c590c732918c95cd02b55c7d0f569d76b90bb1a5e78aa340618e4", size = 217014, upload_time = "2025-07-27T14:12:34.406Z" }, + { url = "https://files.pythonhosted.org/packages/54/8e/6d0bfe9c3d7121cf936c5f8b03e8c3da1484fb801703127dba20fb8bd3c7/coverage-7.10.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:166d89c57e877e93d8827dac32cedae6b0277ca684c6511497311249f35a280c", size = 214951, upload_time = "2025-07-27T14:12:36.069Z" }, + { url = "https://files.pythonhosted.org/packages/f2/29/e3e51a8c653cf2174c60532aafeb5065cea0911403fa144c9abe39790308/coverage-7.10.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:bed4a2341b33cd1a7d9ffc47df4a78ee61d3416d43b4adc9e18b7d266650b83e", size = 215229, upload_time = "2025-07-27T14:12:37.759Z" }, + { url = "https://files.pythonhosted.org/packages/e0/59/3c972080b2fa18b6c4510201f6d4dc87159d450627d062cd9ad051134062/coverage-7.10.1-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:ddca1e4f5f4c67980533df01430184c19b5359900e080248bbf4ed6789584d8b", size = 245738, upload_time = "2025-07-27T14:12:39.453Z" }, + { url = "https://files.pythonhosted.org/packages/2e/04/fc0d99d3f809452654e958e1788454f6e27b34e43f8f8598191c8ad13537/coverage-7.10.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:37b69226001d8b7de7126cad7366b0778d36777e4d788c66991455ba817c5b41", size = 248045, upload_time = "2025-07-27T14:12:41.387Z" }, + { url = "https://files.pythonhosted.org/packages/5e/2e/afcbf599e77e0dfbf4c97197747250d13d397d27e185b93987d9eaac053d/coverage-7.10.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b2f22102197bcb1722691296f9e589f02b616f874e54a209284dd7b9294b0b7f", size = 249666, upload_time = "2025-07-27T14:12:43.056Z" }, + { url = "https://files.pythonhosted.org/packages/6e/ae/bc47f7f8ecb7a06cbae2bf86a6fa20f479dd902bc80f57cff7730438059d/coverage-7.10.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:1e0c768b0f9ac5839dac5cf88992a4bb459e488ee8a1f8489af4cb33b1af00f1", size = 247692, upload_time = "2025-07-27T14:12:44.83Z" }, + { url = "https://files.pythonhosted.org/packages/b6/26/cbfa3092d31ccba8ba7647e4d25753263e818b4547eba446b113d7d1efdf/coverage-7.10.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:991196702d5e0b120a8fef2664e1b9c333a81d36d5f6bcf6b225c0cf8b0451a2", size = 245536, upload_time = "2025-07-27T14:12:46.527Z" }, + { url = "https://files.pythonhosted.org/packages/56/77/9c68e92500e6a1c83d024a70eadcc9a173f21aadd73c4675fe64c9c43fdf/coverage-7.10.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ae8e59e5f4fd85d6ad34c2bb9d74037b5b11be072b8b7e9986beb11f957573d4", size = 246954, upload_time = "2025-07-27T14:12:49.279Z" }, + { url = "https://files.pythonhosted.org/packages/7f/a5/ba96671c5a669672aacd9877a5987c8551501b602827b4e84256da2a30a7/coverage-7.10.1-cp314-cp314-win32.whl", hash = "sha256:042125c89cf74a074984002e165d61fe0e31c7bd40ebb4bbebf07939b5924613", size = 217616, upload_time = "2025-07-27T14:12:51.214Z" }, + { url = "https://files.pythonhosted.org/packages/e7/3c/e1e1eb95fc1585f15a410208c4795db24a948e04d9bde818fe4eb893bc85/coverage-7.10.1-cp314-cp314-win_amd64.whl", hash = "sha256:a22c3bfe09f7a530e2c94c87ff7af867259c91bef87ed2089cd69b783af7b84e", size = 218412, upload_time = "2025-07-27T14:12:53.429Z" }, + { url = "https://files.pythonhosted.org/packages/b0/85/7e1e5be2cb966cba95566ba702b13a572ca744fbb3779df9888213762d67/coverage-7.10.1-cp314-cp314-win_arm64.whl", hash = "sha256:ee6be07af68d9c4fca4027c70cea0c31a0f1bc9cb464ff3c84a1f916bf82e652", size = 216776, upload_time = "2025-07-27T14:12:55.482Z" }, + { url = "https://files.pythonhosted.org/packages/62/0f/5bb8f29923141cca8560fe2217679caf4e0db643872c1945ac7d8748c2a7/coverage-7.10.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:d24fb3c0c8ff0d517c5ca5de7cf3994a4cd559cde0315201511dbfa7ab528894", size = 215698, upload_time = "2025-07-27T14:12:57.225Z" }, + { url = "https://files.pythonhosted.org/packages/80/29/547038ffa4e8e4d9e82f7dfc6d152f75fcdc0af146913f0ba03875211f03/coverage-7.10.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1217a54cfd79be20512a67ca81c7da3f2163f51bbfd188aab91054df012154f5", size = 215902, upload_time = "2025-07-27T14:12:59.071Z" }, + { url = "https://files.pythonhosted.org/packages/e1/8a/7aaa8fbfaed900147987a424e112af2e7790e1ac9cd92601e5bd4e1ba60a/coverage-7.10.1-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:51f30da7a52c009667e02f125737229d7d8044ad84b79db454308033a7808ab2", size = 257230, upload_time = "2025-07-27T14:13:01.248Z" }, + { url = "https://files.pythonhosted.org/packages/e5/1d/c252b5ffac44294e23a0d79dd5acf51749b39795ccc898faeabf7bee903f/coverage-7.10.1-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:ed3718c757c82d920f1c94089066225ca2ad7f00bb904cb72b1c39ebdd906ccb", size = 259194, upload_time = "2025-07-27T14:13:03.247Z" }, + { url = "https://files.pythonhosted.org/packages/16/ad/6c8d9f83d08f3bac2e7507534d0c48d1a4f52c18e6f94919d364edbdfa8f/coverage-7.10.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cc452481e124a819ced0c25412ea2e144269ef2f2534b862d9f6a9dae4bda17b", size = 261316, upload_time = "2025-07-27T14:13:04.957Z" }, + { url = "https://files.pythonhosted.org/packages/d6/4e/f9bbf3a36c061e2e0e0f78369c006d66416561a33d2bee63345aee8ee65e/coverage-7.10.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:9d6f494c307e5cb9b1e052ec1a471060f1dea092c8116e642e7a23e79d9388ea", size = 258794, upload_time = "2025-07-27T14:13:06.715Z" }, + { url = "https://files.pythonhosted.org/packages/87/82/e600bbe78eb2cb0541751d03cef9314bcd0897e8eea156219c39b685f869/coverage-7.10.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:fc0e46d86905ddd16b85991f1f4919028092b4e511689bbdaff0876bd8aab3dd", size = 256869, upload_time = "2025-07-27T14:13:08.933Z" }, + { url = "https://files.pythonhosted.org/packages/ce/5d/2fc9a9236c5268f68ac011d97cd3a5ad16cc420535369bedbda659fdd9b7/coverage-7.10.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:80b9ccd82e30038b61fc9a692a8dc4801504689651b281ed9109f10cc9fe8b4d", size = 257765, upload_time = "2025-07-27T14:13:10.778Z" }, + { url = "https://files.pythonhosted.org/packages/8a/05/b4e00b2bd48a2dc8e1c7d2aea7455f40af2e36484ab2ef06deb85883e9fe/coverage-7.10.1-cp314-cp314t-win32.whl", hash = "sha256:e58991a2b213417285ec866d3cd32db17a6a88061a985dbb7e8e8f13af429c47", size = 218420, upload_time = "2025-07-27T14:13:12.882Z" }, + { url = "https://files.pythonhosted.org/packages/77/fb/d21d05f33ea27ece327422240e69654b5932b0b29e7fbc40fbab3cf199bf/coverage-7.10.1-cp314-cp314t-win_amd64.whl", hash = "sha256:e88dd71e4ecbc49d9d57d064117462c43f40a21a1383507811cf834a4a620651", size = 219536, upload_time = "2025-07-27T14:13:14.718Z" }, + { url = "https://files.pythonhosted.org/packages/a6/68/7fea94b141281ed8be3d1d5c4319a97f2befc3e487ce33657fc64db2c45e/coverage-7.10.1-cp314-cp314t-win_arm64.whl", hash = "sha256:1aadfb06a30c62c2eb82322171fe1f7c288c80ca4156d46af0ca039052814bab", size = 217190, upload_time = "2025-07-27T14:13:16.85Z" }, + { url = "https://files.pythonhosted.org/packages/0f/64/922899cff2c0fd3496be83fa8b81230f5a8d82a2ad30f98370b133c2c83b/coverage-7.10.1-py3-none-any.whl", hash = "sha256:fa2a258aa6bf188eb9a8948f7102a83da7c430a0dce918dbd8b60ef8fcb772d7", size = 206597, upload_time = "2025-07-27T14:13:37.221Z" }, +] + +[[package]] +name = "cryptography" +version = "45.0.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d6/0d/d13399c94234ee8f3df384819dc67e0c5ce215fb751d567a55a1f4b028c7/cryptography-45.0.6.tar.gz", hash = "sha256:5c966c732cf6e4a276ce83b6e4c729edda2df6929083a952cc7da973c539c719", size = 744949, upload_time = "2025-08-05T23:59:27.93Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8c/29/2793d178d0eda1ca4a09a7c4e09a5185e75738cc6d526433e8663b460ea6/cryptography-45.0.6-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:048e7ad9e08cf4c0ab07ff7f36cc3115924e22e2266e034450a890d9e312dd74", size = 7042702, upload_time = "2025-08-05T23:58:23.464Z" }, + { url = "https://files.pythonhosted.org/packages/b3/b6/cabd07410f222f32c8d55486c464f432808abaa1f12af9afcbe8f2f19030/cryptography-45.0.6-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:44647c5d796f5fc042bbc6d61307d04bf29bccb74d188f18051b635f20a9c75f", size = 4206483, upload_time = "2025-08-05T23:58:27.132Z" }, + { url = "https://files.pythonhosted.org/packages/8b/9e/f9c7d36a38b1cfeb1cc74849aabe9bf817990f7603ff6eb485e0d70e0b27/cryptography-45.0.6-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e40b80ecf35ec265c452eea0ba94c9587ca763e739b8e559c128d23bff7ebbbf", size = 4429679, upload_time = "2025-08-05T23:58:29.152Z" }, + { url = "https://files.pythonhosted.org/packages/9c/2a/4434c17eb32ef30b254b9e8b9830cee4e516f08b47fdd291c5b1255b8101/cryptography-45.0.6-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:00e8724bdad672d75e6f069b27970883179bd472cd24a63f6e620ca7e41cc0c5", size = 4210553, upload_time = "2025-08-05T23:58:30.596Z" }, + { url = "https://files.pythonhosted.org/packages/ef/1d/09a5df8e0c4b7970f5d1f3aff1b640df6d4be28a64cae970d56c6cf1c772/cryptography-45.0.6-cp311-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7a3085d1b319d35296176af31c90338eeb2ddac8104661df79f80e1d9787b8b2", size = 3894499, upload_time = "2025-08-05T23:58:32.03Z" }, + { url = "https://files.pythonhosted.org/packages/79/62/120842ab20d9150a9d3a6bdc07fe2870384e82f5266d41c53b08a3a96b34/cryptography-45.0.6-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:1b7fa6a1c1188c7ee32e47590d16a5a0646270921f8020efc9a511648e1b2e08", size = 4458484, upload_time = "2025-08-05T23:58:33.526Z" }, + { url = "https://files.pythonhosted.org/packages/fd/80/1bc3634d45ddfed0871bfba52cf8f1ad724761662a0c792b97a951fb1b30/cryptography-45.0.6-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:275ba5cc0d9e320cd70f8e7b96d9e59903c815ca579ab96c1e37278d231fc402", size = 4210281, upload_time = "2025-08-05T23:58:35.445Z" }, + { url = "https://files.pythonhosted.org/packages/7d/fe/ffb12c2d83d0ee625f124880a1f023b5878f79da92e64c37962bbbe35f3f/cryptography-45.0.6-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:f4028f29a9f38a2025abedb2e409973709c660d44319c61762202206ed577c42", size = 4456890, upload_time = "2025-08-05T23:58:36.923Z" }, + { url = "https://files.pythonhosted.org/packages/8c/8e/b3f3fe0dc82c77a0deb5f493b23311e09193f2268b77196ec0f7a36e3f3e/cryptography-45.0.6-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:ee411a1b977f40bd075392c80c10b58025ee5c6b47a822a33c1198598a7a5f05", size = 4333247, upload_time = "2025-08-05T23:58:38.781Z" }, + { url = "https://files.pythonhosted.org/packages/b3/a6/c3ef2ab9e334da27a1d7b56af4a2417d77e7806b2e0f90d6267ce120d2e4/cryptography-45.0.6-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:e2a21a8eda2d86bb604934b6b37691585bd095c1f788530c1fcefc53a82b3453", size = 4565045, upload_time = "2025-08-05T23:58:40.415Z" }, + { url = "https://files.pythonhosted.org/packages/31/c3/77722446b13fa71dddd820a5faab4ce6db49e7e0bf8312ef4192a3f78e2f/cryptography-45.0.6-cp311-abi3-win32.whl", hash = "sha256:d063341378d7ee9c91f9d23b431a3502fc8bfacd54ef0a27baa72a0843b29159", size = 2928923, upload_time = "2025-08-05T23:58:41.919Z" }, + { url = "https://files.pythonhosted.org/packages/38/63/a025c3225188a811b82932a4dcc8457a26c3729d81578ccecbcce2cb784e/cryptography-45.0.6-cp311-abi3-win_amd64.whl", hash = "sha256:833dc32dfc1e39b7376a87b9a6a4288a10aae234631268486558920029b086ec", size = 3403805, upload_time = "2025-08-05T23:58:43.792Z" }, + { url = "https://files.pythonhosted.org/packages/5b/af/bcfbea93a30809f126d51c074ee0fac5bd9d57d068edf56c2a73abedbea4/cryptography-45.0.6-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:3436128a60a5e5490603ab2adbabc8763613f638513ffa7d311c900a8349a2a0", size = 7020111, upload_time = "2025-08-05T23:58:45.316Z" }, + { url = "https://files.pythonhosted.org/packages/98/c6/ea5173689e014f1a8470899cd5beeb358e22bb3cf5a876060f9d1ca78af4/cryptography-45.0.6-cp37-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0d9ef57b6768d9fa58e92f4947cea96ade1233c0e236db22ba44748ffedca394", size = 4198169, upload_time = "2025-08-05T23:58:47.121Z" }, + { url = "https://files.pythonhosted.org/packages/ba/73/b12995edc0c7e2311ffb57ebd3b351f6b268fed37d93bfc6f9856e01c473/cryptography-45.0.6-cp37-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ea3c42f2016a5bbf71825537c2ad753f2870191134933196bee408aac397b3d9", size = 4421273, upload_time = "2025-08-05T23:58:48.557Z" }, + { url = "https://files.pythonhosted.org/packages/f7/6e/286894f6f71926bc0da67408c853dd9ba953f662dcb70993a59fd499f111/cryptography-45.0.6-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:20ae4906a13716139d6d762ceb3e0e7e110f7955f3bc3876e3a07f5daadec5f3", size = 4199211, upload_time = "2025-08-05T23:58:50.139Z" }, + { url = "https://files.pythonhosted.org/packages/de/34/a7f55e39b9623c5cb571d77a6a90387fe557908ffc44f6872f26ca8ae270/cryptography-45.0.6-cp37-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:2dac5ec199038b8e131365e2324c03d20e97fe214af051d20c49db129844e8b3", size = 3883732, upload_time = "2025-08-05T23:58:52.253Z" }, + { url = "https://files.pythonhosted.org/packages/f9/b9/c6d32edbcba0cd9f5df90f29ed46a65c4631c4fbe11187feb9169c6ff506/cryptography-45.0.6-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:18f878a34b90d688982e43f4b700408b478102dd58b3e39de21b5ebf6509c301", size = 4450655, upload_time = "2025-08-05T23:58:53.848Z" }, + { url = "https://files.pythonhosted.org/packages/77/2d/09b097adfdee0227cfd4c699b3375a842080f065bab9014248933497c3f9/cryptography-45.0.6-cp37-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:5bd6020c80c5b2b2242d6c48487d7b85700f5e0038e67b29d706f98440d66eb5", size = 4198956, upload_time = "2025-08-05T23:58:55.209Z" }, + { url = "https://files.pythonhosted.org/packages/55/66/061ec6689207d54effdff535bbdf85cc380d32dd5377173085812565cf38/cryptography-45.0.6-cp37-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:eccddbd986e43014263eda489abbddfbc287af5cddfd690477993dbb31e31016", size = 4449859, upload_time = "2025-08-05T23:58:56.639Z" }, + { url = "https://files.pythonhosted.org/packages/41/ff/e7d5a2ad2d035e5a2af116e1a3adb4d8fcd0be92a18032917a089c6e5028/cryptography-45.0.6-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:550ae02148206beb722cfe4ef0933f9352bab26b087af00e48fdfb9ade35c5b3", size = 4320254, upload_time = "2025-08-05T23:58:58.833Z" }, + { url = "https://files.pythonhosted.org/packages/82/27/092d311af22095d288f4db89fcaebadfb2f28944f3d790a4cf51fe5ddaeb/cryptography-45.0.6-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:5b64e668fc3528e77efa51ca70fadcd6610e8ab231e3e06ae2bab3b31c2b8ed9", size = 4554815, upload_time = "2025-08-05T23:59:00.283Z" }, + { url = "https://files.pythonhosted.org/packages/7e/01/aa2f4940262d588a8fdf4edabe4cda45854d00ebc6eaac12568b3a491a16/cryptography-45.0.6-cp37-abi3-win32.whl", hash = "sha256:780c40fb751c7d2b0c6786ceee6b6f871e86e8718a8ff4bc35073ac353c7cd02", size = 2912147, upload_time = "2025-08-05T23:59:01.716Z" }, + { url = "https://files.pythonhosted.org/packages/0a/bc/16e0276078c2de3ceef6b5a34b965f4436215efac45313df90d55f0ba2d2/cryptography-45.0.6-cp37-abi3-win_amd64.whl", hash = "sha256:20d15aed3ee522faac1a39fbfdfee25d17b1284bafd808e1640a74846d7c4d1b", size = 3390459, upload_time = "2025-08-05T23:59:03.358Z" }, ] [[package]] name = "csscompressor" version = "0.9.5" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f1/2a/8c3ac3d8bc94e6de8d7ae270bb5bc437b210bb9d6d9e46630c98f4abd20c/csscompressor-0.9.5.tar.gz", hash = "sha256:afa22badbcf3120a4f392e4d22f9fff485c044a1feda4a950ecc5eba9dd31a05", size = 237808 } +sdist = { url = "https://files.pythonhosted.org/packages/f1/2a/8c3ac3d8bc94e6de8d7ae270bb5bc437b210bb9d6d9e46630c98f4abd20c/csscompressor-0.9.5.tar.gz", hash = "sha256:afa22badbcf3120a4f392e4d22f9fff485c044a1feda4a950ecc5eba9dd31a05", size = 237808, upload_time = "2017-11-26T21:13:08.238Z" } + +[[package]] +name = "cssselect2" +version = "0.8.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "tinycss2" }, + { name = "webencodings" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9f/86/fd7f58fc498b3166f3a7e8e0cddb6e620fe1da35b02248b1bd59e95dbaaa/cssselect2-0.8.0.tar.gz", hash = "sha256:7674ffb954a3b46162392aee2a3a0aedb2e14ecf99fcc28644900f4e6e3e9d3a", size = 35716, upload_time = "2025-03-05T14:46:07.988Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0f/e7/aa315e6a749d9b96c2504a1ba0ba031ba2d0517e972ce22682e3fccecb09/cssselect2-0.8.0-py3-none-any.whl", hash = "sha256:46fc70ebc41ced7a32cd42d58b1884d72ade23d21e5a4eaaf022401c13f0e76e", size = 15454, upload_time = "2025-03-05T14:46:06.463Z" }, +] [[package]] name = "debugpy" version = "1.8.14" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/bd/75/087fe07d40f490a78782ff3b0a30e3968936854105487decdb33446d4b0e/debugpy-1.8.14.tar.gz", hash = "sha256:7cd287184318416850aa8b60ac90105837bb1e59531898c07569d197d2ed5322", size = 1641444 } +sdist = { url = "https://files.pythonhosted.org/packages/bd/75/087fe07d40f490a78782ff3b0a30e3968936854105487decdb33446d4b0e/debugpy-1.8.14.tar.gz", hash = "sha256:7cd287184318416850aa8b60ac90105837bb1e59531898c07569d197d2ed5322", size = 1641444, upload_time = "2025-04-10T19:46:10.981Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d9/2a/ac2df0eda4898f29c46eb6713a5148e6f8b2b389c8ec9e425a4a1d67bf07/debugpy-1.8.14-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:8899c17920d089cfa23e6005ad9f22582fd86f144b23acb9feeda59e84405b84", size = 2501268 }, - { url = "https://files.pythonhosted.org/packages/10/53/0a0cb5d79dd9f7039169f8bf94a144ad3efa52cc519940b3b7dde23bcb89/debugpy-1.8.14-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6bb5c0dcf80ad5dbc7b7d6eac484e2af34bdacdf81df09b6a3e62792b722826", size = 4221077 }, - { url = "https://files.pythonhosted.org/packages/f8/d5/84e01821f362327bf4828728aa31e907a2eca7c78cd7c6ec062780d249f8/debugpy-1.8.14-cp312-cp312-win32.whl", hash = "sha256:281d44d248a0e1791ad0eafdbbd2912ff0de9eec48022a5bfbc332957487ed3f", size = 5255127 }, - { url = "https://files.pythonhosted.org/packages/33/16/1ed929d812c758295cac7f9cf3dab5c73439c83d9091f2d91871e648093e/debugpy-1.8.14-cp312-cp312-win_amd64.whl", hash = "sha256:5aa56ef8538893e4502a7d79047fe39b1dae08d9ae257074c6464a7b290b806f", size = 5297249 }, - { url = "https://files.pythonhosted.org/packages/4d/e4/395c792b243f2367d84202dc33689aa3d910fb9826a7491ba20fc9e261f5/debugpy-1.8.14-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:329a15d0660ee09fec6786acdb6e0443d595f64f5d096fc3e3ccf09a4259033f", size = 2485676 }, - { url = "https://files.pythonhosted.org/packages/ba/f1/6f2ee3f991327ad9e4c2f8b82611a467052a0fb0e247390192580e89f7ff/debugpy-1.8.14-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f920c7f9af409d90f5fd26e313e119d908b0dd2952c2393cd3247a462331f15", size = 4217514 }, - { url = "https://files.pythonhosted.org/packages/79/28/b9d146f8f2dc535c236ee09ad3e5ac899adb39d7a19b49f03ac95d216beb/debugpy-1.8.14-cp313-cp313-win32.whl", hash = "sha256:3784ec6e8600c66cbdd4ca2726c72d8ca781e94bce2f396cc606d458146f8f4e", size = 5254756 }, - { url = "https://files.pythonhosted.org/packages/e0/62/a7b4a57013eac4ccaef6977966e6bec5c63906dd25a86e35f155952e29a1/debugpy-1.8.14-cp313-cp313-win_amd64.whl", hash = "sha256:684eaf43c95a3ec39a96f1f5195a7ff3d4144e4a18d69bb66beeb1a6de605d6e", size = 5297119 }, - { url = "https://files.pythonhosted.org/packages/97/1a/481f33c37ee3ac8040d3d51fc4c4e4e7e61cb08b8bc8971d6032acc2279f/debugpy-1.8.14-py2.py3-none-any.whl", hash = "sha256:5cd9a579d553b6cb9759a7908a41988ee6280b961f24f63336835d9418216a20", size = 5256230 }, + { url = "https://files.pythonhosted.org/packages/d9/2a/ac2df0eda4898f29c46eb6713a5148e6f8b2b389c8ec9e425a4a1d67bf07/debugpy-1.8.14-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:8899c17920d089cfa23e6005ad9f22582fd86f144b23acb9feeda59e84405b84", size = 2501268, upload_time = "2025-04-10T19:46:26.044Z" }, + { url = "https://files.pythonhosted.org/packages/10/53/0a0cb5d79dd9f7039169f8bf94a144ad3efa52cc519940b3b7dde23bcb89/debugpy-1.8.14-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6bb5c0dcf80ad5dbc7b7d6eac484e2af34bdacdf81df09b6a3e62792b722826", size = 4221077, upload_time = "2025-04-10T19:46:27.464Z" }, + { url = "https://files.pythonhosted.org/packages/f8/d5/84e01821f362327bf4828728aa31e907a2eca7c78cd7c6ec062780d249f8/debugpy-1.8.14-cp312-cp312-win32.whl", hash = "sha256:281d44d248a0e1791ad0eafdbbd2912ff0de9eec48022a5bfbc332957487ed3f", size = 5255127, upload_time = "2025-04-10T19:46:29.467Z" }, + { url = "https://files.pythonhosted.org/packages/33/16/1ed929d812c758295cac7f9cf3dab5c73439c83d9091f2d91871e648093e/debugpy-1.8.14-cp312-cp312-win_amd64.whl", hash = "sha256:5aa56ef8538893e4502a7d79047fe39b1dae08d9ae257074c6464a7b290b806f", size = 5297249, upload_time = "2025-04-10T19:46:31.538Z" }, + { url = "https://files.pythonhosted.org/packages/4d/e4/395c792b243f2367d84202dc33689aa3d910fb9826a7491ba20fc9e261f5/debugpy-1.8.14-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:329a15d0660ee09fec6786acdb6e0443d595f64f5d096fc3e3ccf09a4259033f", size = 2485676, upload_time = "2025-04-10T19:46:32.96Z" }, + { url = "https://files.pythonhosted.org/packages/ba/f1/6f2ee3f991327ad9e4c2f8b82611a467052a0fb0e247390192580e89f7ff/debugpy-1.8.14-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f920c7f9af409d90f5fd26e313e119d908b0dd2952c2393cd3247a462331f15", size = 4217514, upload_time = "2025-04-10T19:46:34.336Z" }, + { url = "https://files.pythonhosted.org/packages/79/28/b9d146f8f2dc535c236ee09ad3e5ac899adb39d7a19b49f03ac95d216beb/debugpy-1.8.14-cp313-cp313-win32.whl", hash = "sha256:3784ec6e8600c66cbdd4ca2726c72d8ca781e94bce2f396cc606d458146f8f4e", size = 5254756, upload_time = "2025-04-10T19:46:36.199Z" }, + { url = "https://files.pythonhosted.org/packages/e0/62/a7b4a57013eac4ccaef6977966e6bec5c63906dd25a86e35f155952e29a1/debugpy-1.8.14-cp313-cp313-win_amd64.whl", hash = "sha256:684eaf43c95a3ec39a96f1f5195a7ff3d4144e4a18d69bb66beeb1a6de605d6e", size = 5297119, upload_time = "2025-04-10T19:46:38.141Z" }, + { url = "https://files.pythonhosted.org/packages/97/1a/481f33c37ee3ac8040d3d51fc4c4e4e7e61cb08b8bc8971d6032acc2279f/debugpy-1.8.14-py2.py3-none-any.whl", hash = "sha256:5cd9a579d553b6cb9759a7908a41988ee6280b961f24f63336835d9418216a20", size = 5256230, upload_time = "2025-04-10T19:46:54.077Z" }, ] [[package]] name = "decorator" version = "5.2.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/43/fa/6d96a0978d19e17b68d634497769987b16c8f4cd0a7a05048bec693caa6b/decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360", size = 56711 } +sdist = { url = "https://files.pythonhosted.org/packages/43/fa/6d96a0978d19e17b68d634497769987b16c8f4cd0a7a05048bec693caa6b/decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360", size = 56711, upload_time = "2025-02-24T04:41:34.073Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a", size = 9190 }, + { url = "https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a", size = 9190, upload_time = "2025-02-24T04:41:32.565Z" }, +] + +[[package]] +name = "defusedxml" +version = "0.7.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0f/d5/c66da9b79e5bdb124974bfe172b4daf3c984ebd9c2a06e2b8a4dc7331c72/defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69", size = 75520, upload_time = "2021-03-08T10:59:26.269Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61", size = 25604, upload_time = "2021-03-08T10:59:24.45Z" }, ] [[package]] name = "distlib" version = "0.3.9" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0d/dd/1bec4c5ddb504ca60fc29472f3d27e8d4da1257a854e1d96742f15c1d02d/distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403", size = 613923 } +sdist = { url = "https://files.pythonhosted.org/packages/0d/dd/1bec4c5ddb504ca60fc29472f3d27e8d4da1257a854e1d96742f15c1d02d/distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403", size = 613923, upload_time = "2024-10-09T18:35:47.551Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/91/a1/cf2472db20f7ce4a6be1253a81cfdf85ad9c7885ffbed7047fb72c24cf87/distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87", size = 468973 }, + { url = "https://files.pythonhosted.org/packages/91/a1/cf2472db20f7ce4a6be1253a81cfdf85ad9c7885ffbed7047fb72c24cf87/distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87", size = 468973, upload_time = "2024-10-09T18:35:44.272Z" }, ] [[package]] name = "et-xmlfile" version = "2.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d3/38/af70d7ab1ae9d4da450eeec1fa3918940a5fafb9055e934af8d6eb0c2313/et_xmlfile-2.0.0.tar.gz", hash = "sha256:dab3f4764309081ce75662649be815c4c9081e88f0837825f90fd28317d4da54", size = 17234 } +sdist = { url = "https://files.pythonhosted.org/packages/d3/38/af70d7ab1ae9d4da450eeec1fa3918940a5fafb9055e934af8d6eb0c2313/et_xmlfile-2.0.0.tar.gz", hash = "sha256:dab3f4764309081ce75662649be815c4c9081e88f0837825f90fd28317d4da54", size = 17234, upload_time = "2024-10-25T17:25:40.039Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl", hash = "sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa", size = 18059 }, + { url = "https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl", hash = "sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa", size = 18059, upload_time = "2024-10-25T17:25:39.051Z" }, ] [[package]] name = "execnet" version = "2.1.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/bb/ff/b4c0dc78fbe20c3e59c0c7334de0c27eb4001a2b2017999af398bf730817/execnet-2.1.1.tar.gz", hash = "sha256:5189b52c6121c24feae288166ab41b32549c7e2348652736540b9e6e7d4e72e3", size = 166524 } +sdist = { url = "https://files.pythonhosted.org/packages/bb/ff/b4c0dc78fbe20c3e59c0c7334de0c27eb4001a2b2017999af398bf730817/execnet-2.1.1.tar.gz", hash = "sha256:5189b52c6121c24feae288166ab41b32549c7e2348652736540b9e6e7d4e72e3", size = 166524, upload_time = "2024-04-08T09:04:19.245Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/43/09/2aea36ff60d16dd8879bdb2f5b3ee0ba8d08cbbdcdfe870e695ce3784385/execnet-2.1.1-py3-none-any.whl", hash = "sha256:26dee51f1b80cebd6d0ca8e74dd8745419761d3bef34163928cbebbdc4749fdc", size = 40612 }, + { url = "https://files.pythonhosted.org/packages/43/09/2aea36ff60d16dd8879bdb2f5b3ee0ba8d08cbbdcdfe870e695ce3784385/execnet-2.1.1-py3-none-any.whl", hash = "sha256:26dee51f1b80cebd6d0ca8e74dd8745419761d3bef34163928cbebbdc4749fdc", size = 40612, upload_time = "2024-04-08T09:04:17.414Z" }, ] [[package]] name = "executing" version = "2.2.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/91/50/a9d80c47ff289c611ff12e63f7c5d13942c65d68125160cefd768c73e6e4/executing-2.2.0.tar.gz", hash = "sha256:5d108c028108fe2551d1a7b2e8b713341e2cb4fc0aa7dcf966fa4327a5226755", size = 978693 } +sdist = { url = "https://files.pythonhosted.org/packages/91/50/a9d80c47ff289c611ff12e63f7c5d13942c65d68125160cefd768c73e6e4/executing-2.2.0.tar.gz", hash = "sha256:5d108c028108fe2551d1a7b2e8b713341e2cb4fc0aa7dcf966fa4327a5226755", size = 978693, upload_time = "2025-01-22T15:41:29.403Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7b/8f/c4d9bafc34ad7ad5d8dc16dd1347ee0e507a52c3adb6bfa8887e1c6a26ba/executing-2.2.0-py2.py3-none-any.whl", hash = "sha256:11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa", size = 26702 }, + { url = "https://files.pythonhosted.org/packages/7b/8f/c4d9bafc34ad7ad5d8dc16dd1347ee0e507a52c3adb6bfa8887e1c6a26ba/executing-2.2.0-py2.py3-none-any.whl", hash = "sha256:11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa", size = 26702, upload_time = "2025-01-22T15:41:25.929Z" }, +] + +[[package]] +name = "fastjsonschema" +version = "2.21.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/20/b5/23b216d9d985a956623b6bd12d4086b60f0059b27799f23016af04a74ea1/fastjsonschema-2.21.2.tar.gz", hash = "sha256:b1eb43748041c880796cd077f1a07c3d94e93ae84bba5ed36800a33554ae05de", size = 374130, upload_time = "2025-08-14T18:49:36.666Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/a8/20d0723294217e47de6d9e2e40fd4a9d2f7c4b6ef974babd482a59743694/fastjsonschema-2.21.2-py3-none-any.whl", hash = "sha256:1c797122d0a86c5cace2e54bf4e819c36223b552017172f32c5c024a6b77e463", size = 24024, upload_time = "2025-08-14T18:49:34.776Z" }, ] [[package]] name = "filelock" version = "3.18.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0a/10/c23352565a6544bdc5353e0b15fc1c563352101f30e24bf500207a54df9a/filelock-3.18.0.tar.gz", hash = "sha256:adbc88eabb99d2fec8c9c1b229b171f18afa655400173ddc653d5d01501fb9f2", size = 18075 } +sdist = { url = "https://files.pythonhosted.org/packages/0a/10/c23352565a6544bdc5353e0b15fc1c563352101f30e24bf500207a54df9a/filelock-3.18.0.tar.gz", hash = "sha256:adbc88eabb99d2fec8c9c1b229b171f18afa655400173ddc653d5d01501fb9f2", size = 18075, upload_time = "2025-03-14T07:11:40.47Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/4d/36/2a115987e2d8c300a974597416d9de88f2444426de9571f4b59b2cca3acc/filelock-3.18.0-py3-none-any.whl", hash = "sha256:c401f4f8377c4464e6db25fff06205fd89bdd83b65eb0488ed1b160f780e21de", size = 16215 }, + { url = "https://files.pythonhosted.org/packages/4d/36/2a115987e2d8c300a974597416d9de88f2444426de9571f4b59b2cca3acc/filelock-3.18.0-py3-none-any.whl", hash = "sha256:c401f4f8377c4464e6db25fff06205fd89bdd83b65eb0488ed1b160f780e21de", size = 16215, upload_time = "2025-03-14T07:11:39.145Z" }, ] [[package]] @@ -371,9 +482,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/55/b0/8a21e330561c65653d010ef112bf38f60890051d244ede197ddaa08e50c1/flexcache-0.3.tar.gz", hash = "sha256:18743bd5a0621bfe2cf8d519e4c3bfdf57a269c15d1ced3fb4b64e0ff4600656", size = 15816 } +sdist = { url = "https://files.pythonhosted.org/packages/55/b0/8a21e330561c65653d010ef112bf38f60890051d244ede197ddaa08e50c1/flexcache-0.3.tar.gz", hash = "sha256:18743bd5a0621bfe2cf8d519e4c3bfdf57a269c15d1ced3fb4b64e0ff4600656", size = 15816, upload_time = "2024-03-09T03:21:07.555Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/27/cd/c883e1a7c447479d6e13985565080e3fea88ab5a107c21684c813dba1875/flexcache-0.3-py3-none-any.whl", hash = "sha256:d43c9fea82336af6e0115e308d9d33a185390b8346a017564611f1466dcd2e32", size = 13263 }, + { url = "https://files.pythonhosted.org/packages/27/cd/c883e1a7c447479d6e13985565080e3fea88ab5a107c21684c813dba1875/flexcache-0.3-py3-none-any.whl", hash = "sha256:d43c9fea82336af6e0115e308d9d33a185390b8346a017564611f1466dcd2e32", size = 13263, upload_time = "2024-03-09T03:21:05.635Z" }, ] [[package]] @@ -383,9 +494,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/82/99/b4de7e39e8eaf8207ba1a8fa2241dd98b2ba72ae6e16960d8351736d8702/flexparser-0.4.tar.gz", hash = "sha256:266d98905595be2ccc5da964fe0a2c3526fbbffdc45b65b3146d75db992ef6b2", size = 31799 } +sdist = { url = "https://files.pythonhosted.org/packages/82/99/b4de7e39e8eaf8207ba1a8fa2241dd98b2ba72ae6e16960d8351736d8702/flexparser-0.4.tar.gz", hash = "sha256:266d98905595be2ccc5da964fe0a2c3526fbbffdc45b65b3146d75db992ef6b2", size = 31799, upload_time = "2024-11-07T02:00:56.249Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fe/5e/3be305568fe5f34448807976dc82fc151d76c3e0e03958f34770286278c1/flexparser-0.4-py3-none-any.whl", hash = "sha256:3738b456192dcb3e15620f324c447721023c0293f6af9955b481e91d00179846", size = 27625 }, + { url = "https://files.pythonhosted.org/packages/fe/5e/3be305568fe5f34448807976dc82fc151d76c3e0e03958f34770286278c1/flexparser-0.4-py3-none-any.whl", hash = "sha256:3738b456192dcb3e15620f324c447721023c0293f6af9955b481e91d00179846", size = 27625, upload_time = "2024-11-07T02:00:54.523Z" }, ] [[package]] @@ -413,20 +524,20 @@ dependencies = [ { name = "typing-extensions" }, { name = "validators" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/11/d0/c94675a1c1b8c12fd68489e2b4a924f80a2b122199cd986c58a5136197d2/frictionless-5.18.1.tar.gz", hash = "sha256:daeaf55f896eeb52b43e62600466af9528fe0aeeebd28b1b917e13322f370a8b", size = 74372478 } +sdist = { url = "https://files.pythonhosted.org/packages/11/d0/c94675a1c1b8c12fd68489e2b4a924f80a2b122199cd986c58a5136197d2/frictionless-5.18.1.tar.gz", hash = "sha256:daeaf55f896eeb52b43e62600466af9528fe0aeeebd28b1b917e13322f370a8b", size = 74372478, upload_time = "2025-03-25T21:32:50.081Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a9/7a/dac76d31584bb4f874ae860490c9465f5b59bd8c110f68fbbb07aba48845/frictionless-5.18.1-py3-none-any.whl", hash = "sha256:3f4c87469a89bdb88e9cc318088553a26f3d14839098f95c183ea01fc89628dd", size = 531615 }, + { url = "https://files.pythonhosted.org/packages/a9/7a/dac76d31584bb4f874ae860490c9465f5b59bd8c110f68fbbb07aba48845/frictionless-5.18.1-py3-none-any.whl", hash = "sha256:3f4c87469a89bdb88e9cc318088553a26f3d14839098f95c183ea01fc89628dd", size = 531615, upload_time = "2025-03-25T21:32:45.534Z" }, ] [[package]] name = "frozendict" version = "2.4.6" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/bb/59/19eb300ba28e7547538bdf603f1c6c34793240a90e1a7b61b65d8517e35e/frozendict-2.4.6.tar.gz", hash = "sha256:df7cd16470fbd26fc4969a208efadc46319334eb97def1ddf48919b351192b8e", size = 316416 } +sdist = { url = "https://files.pythonhosted.org/packages/bb/59/19eb300ba28e7547538bdf603f1c6c34793240a90e1a7b61b65d8517e35e/frozendict-2.4.6.tar.gz", hash = "sha256:df7cd16470fbd26fc4969a208efadc46319334eb97def1ddf48919b351192b8e", size = 316416, upload_time = "2024-10-13T12:15:32.449Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/04/13/d9839089b900fa7b479cce495d62110cddc4bd5630a04d8469916c0e79c5/frozendict-2.4.6-py311-none-any.whl", hash = "sha256:d065db6a44db2e2375c23eac816f1a022feb2fa98cbb50df44a9e83700accbea", size = 16148 }, - { url = "https://files.pythonhosted.org/packages/ba/d0/d482c39cee2ab2978a892558cf130681d4574ea208e162da8958b31e9250/frozendict-2.4.6-py312-none-any.whl", hash = "sha256:49344abe90fb75f0f9fdefe6d4ef6d4894e640fadab71f11009d52ad97f370b9", size = 16146 }, - { url = "https://files.pythonhosted.org/packages/a5/8e/b6bf6a0de482d7d7d7a2aaac8fdc4a4d0bb24a809f5ddd422aa7060eb3d2/frozendict-2.4.6-py313-none-any.whl", hash = "sha256:7134a2bb95d4a16556bb5f2b9736dceb6ea848fa5b6f3f6c2d6dba93b44b4757", size = 16146 }, + { url = "https://files.pythonhosted.org/packages/04/13/d9839089b900fa7b479cce495d62110cddc4bd5630a04d8469916c0e79c5/frozendict-2.4.6-py311-none-any.whl", hash = "sha256:d065db6a44db2e2375c23eac816f1a022feb2fa98cbb50df44a9e83700accbea", size = 16148, upload_time = "2024-10-13T12:15:26.839Z" }, + { url = "https://files.pythonhosted.org/packages/ba/d0/d482c39cee2ab2978a892558cf130681d4574ea208e162da8958b31e9250/frozendict-2.4.6-py312-none-any.whl", hash = "sha256:49344abe90fb75f0f9fdefe6d4ef6d4894e640fadab71f11009d52ad97f370b9", size = 16146, upload_time = "2024-10-13T12:15:28.16Z" }, + { url = "https://files.pythonhosted.org/packages/a5/8e/b6bf6a0de482d7d7d7a2aaac8fdc4a4d0bb24a809f5ddd422aa7060eb3d2/frozendict-2.4.6-py313-none-any.whl", hash = "sha256:7134a2bb95d4a16556bb5f2b9736dceb6ea848fa5b6f3f6c2d6dba93b44b4757", size = 16146, upload_time = "2024-10-13T12:15:29.495Z" }, ] [[package]] @@ -436,9 +547,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "python-dateutil" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d9/29/d40217cbe2f6b1359e00c6c307bb3fc876ba74068cbab3dde77f03ca0dc4/ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343", size = 10943 } +sdist = { url = "https://files.pythonhosted.org/packages/d9/29/d40217cbe2f6b1359e00c6c307bb3fc876ba74068cbab3dde77f03ca0dc4/ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343", size = 10943, upload_time = "2022-05-02T15:47:16.11Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619", size = 11034 }, + { url = "https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619", size = 11034, upload_time = "2022-05-02T15:47:14.552Z" }, ] [[package]] @@ -448,9 +559,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "smmap" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/72/94/63b0fc47eb32792c7ba1fe1b694daec9a63620db1e313033d18140c2320a/gitdb-4.0.12.tar.gz", hash = "sha256:5ef71f855d191a3326fcfbc0d5da835f26b13fbcba60c32c21091c349ffdb571", size = 394684 } +sdist = { url = "https://files.pythonhosted.org/packages/72/94/63b0fc47eb32792c7ba1fe1b694daec9a63620db1e313033d18140c2320a/gitdb-4.0.12.tar.gz", hash = "sha256:5ef71f855d191a3326fcfbc0d5da835f26b13fbcba60c32c21091c349ffdb571", size = 394684, upload_time = "2025-01-02T07:20:46.413Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl", hash = "sha256:67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf", size = 62794 }, + { url = "https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl", hash = "sha256:67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf", size = 62794, upload_time = "2025-01-02T07:20:43.624Z" }, ] [[package]] @@ -460,9 +571,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "gitdb" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c0/89/37df0b71473153574a5cdef8f242de422a0f5d26d7a9e231e6f169b4ad14/gitpython-3.1.44.tar.gz", hash = "sha256:c87e30b26253bf5418b01b0660f818967f3c503193838337fe5e573331249269", size = 214196 } +sdist = { url = "https://files.pythonhosted.org/packages/c0/89/37df0b71473153574a5cdef8f242de422a0f5d26d7a9e231e6f169b4ad14/gitpython-3.1.44.tar.gz", hash = "sha256:c87e30b26253bf5418b01b0660f818967f3c503193838337fe5e573331249269", size = 214196, upload_time = "2025-01-02T07:32:43.59Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1d/9a/4114a9057db2f1462d5c8f8390ab7383925fe1ac012eaa42402ad65c2963/GitPython-3.1.44-py3-none-any.whl", hash = "sha256:9e0e10cda9bed1ee64bc9a6de50e7e38a9c9943241cd7f585f6df3ed28011110", size = 207599 }, + { url = "https://files.pythonhosted.org/packages/1d/9a/4114a9057db2f1462d5c8f8390ab7383925fe1ac012eaa42402ad65c2963/GitPython-3.1.44-py3-none-any.whl", hash = "sha256:9e0e10cda9bed1ee64bc9a6de50e7e38a9c9943241cd7f585f6df3ed28011110", size = 207599, upload_time = "2025-01-02T07:32:40.731Z" }, ] [[package]] @@ -472,9 +583,24 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a9/3e/5aa9a61f7c3c47b0b52a1d930302992229d191bf4bc76447b324b731510a/griffe-1.7.3.tar.gz", hash = "sha256:52ee893c6a3a968b639ace8015bec9d36594961e156e23315c8e8e51401fa50b", size = 395137 } +sdist = { url = "https://files.pythonhosted.org/packages/a9/3e/5aa9a61f7c3c47b0b52a1d930302992229d191bf4bc76447b324b731510a/griffe-1.7.3.tar.gz", hash = "sha256:52ee893c6a3a968b639ace8015bec9d36594961e156e23315c8e8e51401fa50b", size = 395137, upload_time = "2025-04-23T11:29:09.147Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/58/c6/5c20af38c2a57c15d87f7f38bee77d63c1d2a3689f74fefaf35915dd12b2/griffe-1.7.3-py3-none-any.whl", hash = "sha256:c6b3ee30c2f0f17f30bcdef5068d6ab7a2a4f1b8bf1a3e74b56fffd21e1c5f75", size = 129303, upload_time = "2025-04-23T11:29:07.145Z" }, +] + +[[package]] +name = "gurobipy" +version = "12.0.3" +source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/58/c6/5c20af38c2a57c15d87f7f38bee77d63c1d2a3689f74fefaf35915dd12b2/griffe-1.7.3-py3-none-any.whl", hash = "sha256:c6b3ee30c2f0f17f30bcdef5068d6ab7a2a4f1b8bf1a3e74b56fffd21e1c5f75", size = 129303 }, + { url = "https://files.pythonhosted.org/packages/6f/bb/b3784497115c64c2bd122cc9d411f167026d4ec42a26b1ff3c43a779275d/gurobipy-12.0.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:020f23277f630e079eac114385eabd1bd9fb4ac22f8796ed5ba6d915ce4f141b", size = 12222234, upload_time = "2025-07-15T07:19:24.64Z" }, + { url = "https://files.pythonhosted.org/packages/18/ea/c065984de5287c99fd30ee8d700fd78f83692e992471f9667ab5d36612b9/gurobipy-12.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:72bbf544bc05060bb93909b79715ace4c0f416198f7622a985cabb9e8e99aa1c", size = 62583866, upload_time = "2025-07-15T07:20:17.576Z" }, + { url = "https://files.pythonhosted.org/packages/9b/8b/2b9f26e4e19a258229b8a8ffc377ca372cc2059a22a0a7c67572efe308d8/gurobipy-12.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b3f971caf270f671b6ffcf5b937b3c0430a5264b0f01529dc8681d61c221f215", size = 14268480, upload_time = "2025-07-15T07:20:26.898Z" }, + { url = "https://files.pythonhosted.org/packages/26/0f/3544a323635f37cdfe1e011d2903b7ef94ba18e10224fa1419f64d0c1968/gurobipy-12.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:af18fd03d5dc3f6e5f590c372ad288b8430a6d88a5b5e66cfcd8432f86ee8650", size = 11121565, upload_time = "2025-07-15T07:20:34.576Z" }, + { url = "https://files.pythonhosted.org/packages/5e/95/f0e5b5cf85298f42482cf4e53d8114c45bb962f55195d531fe4e62b5afa1/gurobipy-12.0.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a8552e47673cb6f1fd351edf8fcad86b02f832cbfb57d90ef21e0397e96d138e", size = 12183439, upload_time = "2025-07-15T07:20:44.224Z" }, + { url = "https://files.pythonhosted.org/packages/61/6e/aea725b4143faa4eb6878414a91fa74e7871aba0ab9453803a9eeef781c2/gurobipy-12.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:be05c074141c8a126c8aaeccc41795ab091a666eabb39ca1ff98a74bde81e663", size = 62583451, upload_time = "2025-07-15T07:21:38.825Z" }, + { url = "https://files.pythonhosted.org/packages/75/47/7b9c63ce2cd85d796403b91a6d211d5c8baac7b694edd94e2151f365d6a9/gurobipy-12.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:79a333766e27fef7902ceeefbcf0279a1ca393a27a72ea62f8e301b21aa17d59", size = 14271076, upload_time = "2025-07-15T07:21:55.102Z" }, + { url = "https://files.pythonhosted.org/packages/2a/93/b10cd6112c05675fed5c817fd7933c9d4ba3a7039e42cba844a9ac09242a/gurobipy-12.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:e0f9ed55077e622021369bb9df2ca3b00c86b678792a3b1556cc59f67348fab0", size = 11111414, upload_time = "2025-07-15T07:22:05.079Z" }, ] [[package]] @@ -486,9 +612,9 @@ dependencies = [ { name = "libhxl" }, { name = "tenacity" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/88/96/ac55b204699cd216a22a943f64aafac32bba818f624a5d44879d60368fad/hdx_python_country-3.9.6.tar.gz", hash = "sha256:7791f4b9c5ae3e62e82795c266a3ca6ee23c7bab706c91533844edf2ebd9bb18", size = 529232 } +sdist = { url = "https://files.pythonhosted.org/packages/88/96/ac55b204699cd216a22a943f64aafac32bba818f624a5d44879d60368fad/hdx_python_country-3.9.6.tar.gz", hash = "sha256:7791f4b9c5ae3e62e82795c266a3ca6ee23c7bab706c91533844edf2ebd9bb18", size = 529232, upload_time = "2025-07-09T22:56:32.162Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/45/90/646b56ec12df459799510d6d0869ada210ad9f765ad104e50dae4867eb50/hdx_python_country-3.9.6-py3-none-any.whl", hash = "sha256:4c1833bdf3cbd14dfff0146e0bdcae5763931d344fce5f1b42493dc8751e3d4a", size = 55554 }, + { url = "https://files.pythonhosted.org/packages/45/90/646b56ec12df459799510d6d0869ada210ad9f765ad104e50dae4867eb50/hdx_python_country-3.9.6-py3-none-any.whl", hash = "sha256:4c1833bdf3cbd14dfff0146e0bdcae5763931d344fce5f1b42493dc8751e3d4a", size = 55554, upload_time = "2025-07-09T22:56:30.128Z" }, ] [[package]] @@ -511,9 +637,40 @@ dependencies = [ { name = "xlsx2csv" }, { name = "xlwt" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/66/de/b812b6b242f47db98ed043b7f3211c81443f0e59959377e97a93915331c0/hdx_python_utilities-3.8.7.tar.gz", hash = "sha256:41212cd5b682777d393ee991b546f1b4326665d981714a829e5483101fd15a60", size = 656009 } +sdist = { url = "https://files.pythonhosted.org/packages/66/de/b812b6b242f47db98ed043b7f3211c81443f0e59959377e97a93915331c0/hdx_python_utilities-3.8.7.tar.gz", hash = "sha256:41212cd5b682777d393ee991b546f1b4326665d981714a829e5483101fd15a60", size = 656009, upload_time = "2025-05-14T02:31:28.578Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/db/38/44f2a0b83e103bb3d47dbc66dfaa4aaa65c34c60fd26d5445fb2bbd3c09a/hdx_python_utilities-3.8.7-py3-none-any.whl", hash = "sha256:47e67810e81a481504b8653c429b31b8c237da594dc27604075c8e79077c8640", size = 60787 }, + { url = "https://files.pythonhosted.org/packages/db/38/44f2a0b83e103bb3d47dbc66dfaa4aaa65c34c60fd26d5445fb2bbd3c09a/hdx_python_utilities-3.8.7-py3-none-any.whl", hash = "sha256:47e67810e81a481504b8653c429b31b8c237da594dc27604075c8e79077c8640", size = 60787, upload_time = "2025-05-14T02:31:26.794Z" }, +] + +[[package]] +name = "highspy" +version = "1.11.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b4/fc/aa1325331c320598ce60cc31060087681cd05123b6fb2a8a571e882b7f05/highspy-1.11.0.tar.gz", hash = "sha256:771e58c076122d207ff1b19759c21d3227f0da5b80dfd89a4145681524969cef", size = 1285415, upload_time = "2025-06-06T00:47:22.562Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bb/ad/b54ad6740b950faab3b7f1465fbb5c740fc522928a8d9f01cac181f8f9a6/highspy-1.11.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:28fffd3e733833a7b2569df6761088046e8aca868ab328828711dbe15b102ad4", size = 2232856, upload_time = "2025-06-06T00:46:11.161Z" }, + { url = "https://files.pythonhosted.org/packages/a3/0c/3921a207f47d52abc81a9d00d8f4d579b05b85670e23bc7140e39268490d/highspy-1.11.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:20a3adf8820a5f7a9cee6fc76df625e651ecfd8b5898af2a77042e79269ce0bc", size = 1908641, upload_time = "2025-06-06T00:46:12.706Z" }, + { url = "https://files.pythonhosted.org/packages/0a/b6/ea7ea6c4c3f781b007fe928b2aefa40c49287b4689985d04c3b20d383475/highspy-1.11.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d4bc0a84cf613bb8565f9b5f610eb0655384162f509b5d86f9c888570275fdc", size = 2119574, upload_time = "2025-06-06T00:46:14.261Z" }, + { url = "https://files.pythonhosted.org/packages/ff/0c/94f1ccb6606e8445a7a0c68d983e47f64899582c64fcea651f488eaaaea0/highspy-1.11.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:543789b75c396a904cb550de34eb333f1a184e123dadc9903b5e6dbca18a007b", size = 2441487, upload_time = "2025-06-06T00:46:16.286Z" }, + { url = "https://files.pythonhosted.org/packages/ad/aa/e7c4ac05162187c484bb121f50d8e037c13bf894ed5cf4e781e1cff68762/highspy-1.11.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a23949e4f44b6df0ed8c387a7c733d683a0fa66e3ff15d65719979ce2099ee99", size = 2302302, upload_time = "2025-06-06T00:46:18.819Z" }, + { url = "https://files.pythonhosted.org/packages/04/ce/fd2473bed635eb06d116f987767d5c5fe3c62b317fb1a788c31966d7fa0a/highspy-1.11.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:50dacf300ebe7c4dca92891c0bf61b694f2ca744207cf7d0d24f2a30ffb5608c", size = 3101885, upload_time = "2025-06-06T00:46:20.774Z" }, + { url = "https://files.pythonhosted.org/packages/6e/e1/bf174389656de5d302ed53dd5cdeb5f7e9ad84156ad2fc95d5a63ba023f2/highspy-1.11.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a782c242b4b047f86110787b0dafce9d77cc10f079adab1fd51c5331e5760127", size = 3647952, upload_time = "2025-06-06T00:46:22.847Z" }, + { url = "https://files.pythonhosted.org/packages/f3/f5/42f6f2ce99c5b9d7aa864ac3abeaf8a2b66da707821ab42b0a31ec2a0dc1/highspy-1.11.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:15b804387089a389e5f01b056a4b3ad74c7d1cf00ab00a0faaf3b4a582bb664c", size = 3309616, upload_time = "2025-06-06T00:46:24.888Z" }, + { url = "https://files.pythonhosted.org/packages/47/f5/cf13640ed65ea934b45e0c3e786497f4696f286faf45e8e62579a0f15462/highspy-1.11.0-cp312-cp312-win32.whl", hash = "sha256:8c33f68df8ab9666d379b0d64d04775c0a9db31882d4f87b3ec8cece0003b47d", size = 1710641, upload_time = "2025-06-06T00:46:26.462Z" }, + { url = "https://files.pythonhosted.org/packages/b7/2f/7acfea5b8d32b86bdec018f858bc195236b804a22a7cd3349da711498692/highspy-1.11.0-cp312-cp312-win_amd64.whl", hash = "sha256:a0aed8c80d33e2fc2eb1def75dbd34c9fa463acb589d19a5ed5dcc0178ae7062", size = 1985767, upload_time = "2025-06-06T00:46:28.144Z" }, + { url = "https://files.pythonhosted.org/packages/96/84/3e899c5d95dc9d5400a308e0aaf4a5143f69016a4f46dd528ff7cd65d341/highspy-1.11.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f675cda73860c7c8a22546db3c80db985720baea84866b08a971cfa03cc7a156", size = 2232867, upload_time = "2025-06-06T00:46:29.651Z" }, + { url = "https://files.pythonhosted.org/packages/74/e2/2853095a74e9fc2c2081340647be8edba7122696534ebbaf159ceb53f9b4/highspy-1.11.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7babebfc01b7682c69c95e0520614ec9400e10cec1b84d3fb7cd48535c606244", size = 1908601, upload_time = "2025-06-06T00:46:31.232Z" }, + { url = "https://files.pythonhosted.org/packages/e6/36/3cabdd3ae8610912962bad96f4d4d6702255d6c01d050754e4050a9eaa4a/highspy-1.11.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39fb60d84d7a58e58f923ea6f0641e6978eb9049033b84de1a2add723e01cd3f", size = 2119726, upload_time = "2025-06-06T00:46:32.796Z" }, + { url = "https://files.pythonhosted.org/packages/a9/da/200d3f13ca9ad3f9fc11a1f3f76cc2734de42dae064510365d42caeb5ed4/highspy-1.11.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6c2e7cf4d504287cd8910de322a726d58428af43bb985d6bae602bf84a7454b9", size = 2441449, upload_time = "2025-06-06T00:46:35.147Z" }, + { url = "https://files.pythonhosted.org/packages/6c/58/fc3775850dc668006039637a4f23f03a9c0eb533643c9d3a7370f9d63de2/highspy-1.11.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79682aa7855d94106ccbbb750082d156dcbb57dff9d489f167320ae0ce768867", size = 2302685, upload_time = "2025-06-06T00:46:36.791Z" }, + { url = "https://files.pythonhosted.org/packages/b5/16/e13326a9706c407d32e39ad14aa79a696c1eb49bb13d50fde5d96afb02b5/highspy-1.11.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:65232aa496fb27be56cc85b2c7c785fac866107c32ea00cc38ec474d6a9f6494", size = 3102306, upload_time = "2025-06-06T00:46:38.341Z" }, + { url = "https://files.pythonhosted.org/packages/0e/93/468e63b16d9bf123174e7f8f7b8bd5a2f96b18d7370a2cc35e6485871749/highspy-1.11.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:f78f27e18275d3c7868dcd0314ea535ed361322e7f0817363872d75a4cc15abc", size = 3648234, upload_time = "2025-06-06T00:46:40.895Z" }, + { url = "https://files.pythonhosted.org/packages/dc/c5/37b849a69c9cbccf533a9a51e309a49e83d704f06bf45370c2e78ceb15d4/highspy-1.11.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6156a7d643268456427b6fe310626ad9ee9d908ff812cc64ee8bad7b9872ea98", size = 3309724, upload_time = "2025-06-06T00:46:43.083Z" }, + { url = "https://files.pythonhosted.org/packages/90/0f/89c579b2f718dc419fd76067a03ecb3c96e6919b7cffee1b9f5a2dfe4f56/highspy-1.11.0-cp313-cp313-win32.whl", hash = "sha256:e61facebb0127eb3661db79a11c7665e47229ec63d2b425996d04aeede26d46b", size = 1710676, upload_time = "2025-06-06T00:46:45.132Z" }, + { url = "https://files.pythonhosted.org/packages/20/ca/ba2af91f2418bee0d0e99df71dcd171ca863675de6a5260bbf06c120f084/highspy-1.11.0-cp313-cp313-win_amd64.whl", hash = "sha256:ceac08be37f75dc0af95669a0cfb073e5db5f07ead05cdcc81fd4b4394708d53", size = 1985967, upload_time = "2025-06-06T00:46:46.767Z" }, ] [[package]] @@ -521,75 +678,75 @@ name = "htmlmin2" version = "0.1.13" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/be/31/a76f4bfa885f93b8167cb4c85cf32b54d1f64384d0b897d45bc6d19b7b45/htmlmin2-0.1.13-py3-none-any.whl", hash = "sha256:75609f2a42e64f7ce57dbff28a39890363bde9e7e5885db633317efbdf8c79a2", size = 34486 }, + { url = "https://files.pythonhosted.org/packages/be/31/a76f4bfa885f93b8167cb4c85cf32b54d1f64384d0b897d45bc6d19b7b45/htmlmin2-0.1.13-py3-none-any.whl", hash = "sha256:75609f2a42e64f7ce57dbff28a39890363bde9e7e5885db633317efbdf8c79a2", size = 34486, upload_time = "2023-03-14T21:28:30.388Z" }, ] [[package]] name = "humanize" version = "4.12.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/22/d1/bbc4d251187a43f69844f7fd8941426549bbe4723e8ff0a7441796b0789f/humanize-4.12.3.tar.gz", hash = "sha256:8430be3a615106fdfceb0b2c1b41c4c98c6b0fc5cc59663a5539b111dd325fb0", size = 80514 } +sdist = { url = "https://files.pythonhosted.org/packages/22/d1/bbc4d251187a43f69844f7fd8941426549bbe4723e8ff0a7441796b0789f/humanize-4.12.3.tar.gz", hash = "sha256:8430be3a615106fdfceb0b2c1b41c4c98c6b0fc5cc59663a5539b111dd325fb0", size = 80514, upload_time = "2025-04-30T11:51:07.98Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/1e/62a2ec3104394a2975a2629eec89276ede9dbe717092f6966fcf963e1bf0/humanize-4.12.3-py3-none-any.whl", hash = "sha256:2cbf6370af06568fa6d2da77c86edb7886f3160ecd19ee1ffef07979efc597f6", size = 128487 }, + { url = "https://files.pythonhosted.org/packages/a0/1e/62a2ec3104394a2975a2629eec89276ede9dbe717092f6966fcf963e1bf0/humanize-4.12.3-py3-none-any.whl", hash = "sha256:2cbf6370af06568fa6d2da77c86edb7886f3160ecd19ee1ffef07979efc597f6", size = 128487, upload_time = "2025-04-30T11:51:06.468Z" }, ] [[package]] name = "identify" version = "2.6.12" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a2/88/d193a27416618628a5eea64e3223acd800b40749a96ffb322a9b55a49ed1/identify-2.6.12.tar.gz", hash = "sha256:d8de45749f1efb108badef65ee8386f0f7bb19a7f26185f74de6367bffbaf0e6", size = 99254 } +sdist = { url = "https://files.pythonhosted.org/packages/a2/88/d193a27416618628a5eea64e3223acd800b40749a96ffb322a9b55a49ed1/identify-2.6.12.tar.gz", hash = "sha256:d8de45749f1efb108badef65ee8386f0f7bb19a7f26185f74de6367bffbaf0e6", size = 99254, upload_time = "2025-05-23T20:37:53.3Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7a/cd/18f8da995b658420625f7ef13f037be53ae04ec5ad33f9b718240dcfd48c/identify-2.6.12-py2.py3-none-any.whl", hash = "sha256:ad9672d5a72e0d2ff7c5c8809b62dfa60458626352fb0eb7b55e69bdc45334a2", size = 99145 }, + { url = "https://files.pythonhosted.org/packages/7a/cd/18f8da995b658420625f7ef13f037be53ae04ec5ad33f9b718240dcfd48c/identify-2.6.12-py2.py3-none-any.whl", hash = "sha256:ad9672d5a72e0d2ff7c5c8809b62dfa60458626352fb0eb7b55e69bdc45334a2", size = 99145, upload_time = "2025-05-23T20:37:51.495Z" }, ] [[package]] name = "idna" version = "3.10" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490 } +sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490, upload_time = "2024-09-15T18:07:39.745Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 }, + { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442, upload_time = "2024-09-15T18:07:37.964Z" }, ] [[package]] name = "ijson" version = "3.4.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a3/4f/1cfeada63f5fce87536651268ddf5cca79b8b4bbb457aee4e45777964a0a/ijson-3.4.0.tar.gz", hash = "sha256:5f74dcbad9d592c428d3ca3957f7115a42689ee7ee941458860900236ae9bb13", size = 65782 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f8/ec/317ee5b2d13e50448833ead3aa906659a32b376191f6abc2a7c6112d2b27/ijson-3.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:956b148f88259a80a9027ffbe2d91705fae0c004fbfba3e5a24028fbe72311a9", size = 87212 }, - { url = "https://files.pythonhosted.org/packages/f8/43/b06c96ced30cacecc5d518f89b0fd1c98c294a30ff88848b70ed7b7f72a1/ijson-3.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:06b89960f5c721106394c7fba5760b3f67c515b8eb7d80f612388f5eca2f4621", size = 59175 }, - { url = "https://files.pythonhosted.org/packages/e9/df/b4aeafb7ecde463130840ee9be36130823ec94a00525049bf700883378b8/ijson-3.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9a0bb591cf250dd7e9dfab69d634745a7f3272d31cfe879f9156e0a081fd97ee", size = 59011 }, - { url = "https://files.pythonhosted.org/packages/e3/7c/a80b8e361641609507f62022089626d4b8067f0826f51e1c09e4ba86eba8/ijson-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:72e92de999977f4c6b660ffcf2b8d59604ccd531edcbfde05b642baf283e0de8", size = 146094 }, - { url = "https://files.pythonhosted.org/packages/01/44/fa416347b9a802e3646c6ff377fc3278bd7d6106e17beb339514b6a3184e/ijson-3.4.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e9602157a5b869d44b6896e64f502c712a312fcde044c2e586fccb85d3e316e", size = 137903 }, - { url = "https://files.pythonhosted.org/packages/24/c6/41a9ad4d42df50ff6e70fdce79b034f09b914802737ebbdc141153d8d791/ijson-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e83660edb931a425b7ff662eb49db1f10d30ca6d4d350e5630edbed098bc01", size = 148339 }, - { url = "https://files.pythonhosted.org/packages/5f/6f/7d01efda415b8502dce67e067ed9e8a124f53e763002c02207e542e1a2f1/ijson-3.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:49bf8eac1c7b7913073865a859c215488461f7591b4fa6a33c14b51cb73659d0", size = 149383 }, - { url = "https://files.pythonhosted.org/packages/95/6c/0d67024b9ecb57916c5e5ab0350251c9fe2f86dc9c8ca2b605c194bdad6a/ijson-3.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:160b09273cb42019f1811469508b0a057d19f26434d44752bde6f281da6d3f32", size = 141580 }, - { url = "https://files.pythonhosted.org/packages/06/43/e10edcc1c6a3b619294de835e7678bfb3a1b8a75955f3689fd66a1e9e7b4/ijson-3.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2019ff4e6f354aa00c76c8591bd450899111c61f2354ad55cc127e2ce2492c44", size = 150280 }, - { url = "https://files.pythonhosted.org/packages/07/84/1cbeee8e8190a1ebe6926569a92cf1fa80ddb380c129beb6f86559e1bb24/ijson-3.4.0-cp312-cp312-win32.whl", hash = "sha256:931c007bf6bb8330705429989b2deed6838c22b63358a330bf362b6e458ba0bf", size = 51512 }, - { url = "https://files.pythonhosted.org/packages/66/13/530802bc391c95be6fe9f96e9aa427d94067e7c0b7da7a9092344dc44c4b/ijson-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:71523f2b64cb856a820223e94d23e88369f193017ecc789bb4de198cc9d349eb", size = 54081 }, - { url = "https://files.pythonhosted.org/packages/77/b3/b1d2eb2745e5204ec7a25365a6deb7868576214feb5e109bce368fb692c9/ijson-3.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e8d96f88d75196a61c9d9443de2b72c2d4a7ba9456ff117b57ae3bba23a54256", size = 87216 }, - { url = "https://files.pythonhosted.org/packages/b1/cd/cd6d340087617f8cc9bedbb21d974542fe2f160ed0126b8288d3499a469b/ijson-3.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c45906ce2c1d3b62f15645476fc3a6ca279549127f01662a39ca5ed334a00cf9", size = 59170 }, - { url = "https://files.pythonhosted.org/packages/3e/4d/32d3a9903b488d3306e3c8288f6ee4217d2eea82728261db03a1045eb5d1/ijson-3.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4ab4bc2119b35c4363ea49f29563612237cae9413d2fbe54b223be098b97bc9e", size = 59013 }, - { url = "https://files.pythonhosted.org/packages/d5/c8/db15465ab4b0b477cee5964c8bfc94bf8c45af8e27a23e1ad78d1926e587/ijson-3.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97b0a9b5a15e61dfb1f14921ea4e0dba39f3a650df6d8f444ddbc2b19b479ff1", size = 146564 }, - { url = "https://files.pythonhosted.org/packages/c4/d8/0755545bc122473a9a434ab90e0f378780e603d75495b1ca3872de757873/ijson-3.4.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e3047bb994dabedf11de11076ed1147a307924b6e5e2df6784fb2599c4ad8c60", size = 137917 }, - { url = "https://files.pythonhosted.org/packages/d0/c6/aeb89c8939ebe3f534af26c8c88000c5e870dbb6ae33644c21a4531f87d2/ijson-3.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68c83161b052e9f5dc8191acbc862bb1e63f8a35344cb5cd0db1afd3afd487a6", size = 148897 }, - { url = "https://files.pythonhosted.org/packages/be/0e/7ef6e9b372106f2682a4a32b3c65bf86bb471a1670e4dac242faee4a7d3f/ijson-3.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1eebd9b6c20eb1dffde0ae1f0fbb4aeacec2eb7b89adb5c7c0449fc9fd742760", size = 149711 }, - { url = "https://files.pythonhosted.org/packages/d1/5d/9841c3ed75bcdabf19b3202de5f862a9c9c86ce5c7c9d95fa32347fdbf5f/ijson-3.4.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:13fb6d5c35192c541421f3ee81239d91fc15a8d8f26c869250f941f4b346a86c", size = 141691 }, - { url = "https://files.pythonhosted.org/packages/d5/d2/ce74e17218dba292e9be10a44ed0c75439f7958cdd263adb0b5b92d012d5/ijson-3.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:28b7196ff7b37c4897c547a28fa4876919696739fc91c1f347651c9736877c69", size = 150738 }, - { url = "https://files.pythonhosted.org/packages/4e/43/dcc480f94453b1075c9911d4755b823f3ace275761bb37b40139f22109ca/ijson-3.4.0-cp313-cp313-win32.whl", hash = "sha256:3c2691d2da42629522140f77b99587d6f5010440d58d36616f33bc7bdc830cc3", size = 51512 }, - { url = "https://files.pythonhosted.org/packages/35/dd/d8c5f15efd85ba51e6e11451ebe23d779361a9ec0d192064c2a8c3cdfcb8/ijson-3.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:c4554718c275a044c47eb3874f78f2c939f300215d9031e785a6711cc51b83fc", size = 54074 }, - { url = "https://files.pythonhosted.org/packages/79/73/24ad8cd106203419c4d22bed627e02e281d66b83e91bc206a371893d0486/ijson-3.4.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:915a65e3f3c0eee2ea937bc62aaedb6c14cc1e8f0bb9f3f4fb5a9e2bbfa4b480", size = 91694 }, - { url = "https://files.pythonhosted.org/packages/17/2d/f7f680984bcb7324a46a4c2df3bd73cf70faef0acfeb85a3f811abdfd590/ijson-3.4.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:afbe9748707684b6c5adc295c4fdcf27765b300aec4d484e14a13dca4e5c0afa", size = 61390 }, - { url = "https://files.pythonhosted.org/packages/09/a1/f3ca7bab86f95bdb82494739e71d271410dfefce4590785d511669127145/ijson-3.4.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:d823f8f321b4d8d5fa020d0a84f089fec5d52b7c0762430476d9f8bf95bbc1a9", size = 61140 }, - { url = "https://files.pythonhosted.org/packages/51/79/dd340df3d4fc7771c95df29997956b92ed0570fe7b616d1792fea9ad93f2/ijson-3.4.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8a0a2c54f3becf76881188beefd98b484b1d3bd005769a740d5b433b089fa23", size = 214739 }, - { url = "https://files.pythonhosted.org/packages/59/f0/85380b7f51d1f5fb7065d76a7b623e02feca920cc678d329b2eccc0011e0/ijson-3.4.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ced19a83ab09afa16257a0b15bc1aa888dbc555cb754be09d375c7f8d41051f2", size = 198338 }, - { url = "https://files.pythonhosted.org/packages/a5/cd/313264cf2ec42e0f01d198c49deb7b6fadeb793b3685e20e738eb6b3fa13/ijson-3.4.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8100f9885eff1f38d35cef80ef759a1bbf5fc946349afa681bd7d0e681b7f1a0", size = 207515 }, - { url = "https://files.pythonhosted.org/packages/12/94/bf14457aa87ea32641f2db577c9188ef4e4ae373478afef422b31fc7f309/ijson-3.4.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d7bcc3f7f21b0f703031ecd15209b1284ea51b2a329d66074b5261de3916c1eb", size = 210081 }, - { url = "https://files.pythonhosted.org/packages/7d/b4/eaee39e290e40e52d665db9bd1492cfdce86bd1e47948e0440db209c6023/ijson-3.4.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:2dcb190227b09dd171bdcbfe4720fddd574933c66314818dfb3960c8a6246a77", size = 199253 }, - { url = "https://files.pythonhosted.org/packages/c5/9c/e09c7b9ac720a703ab115b221b819f149ed54c974edfff623c1e925e57da/ijson-3.4.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:eda4cfb1d49c6073a901735aaa62e39cb7ab47f3ad7bb184862562f776f1fa8a", size = 203816 }, - { url = "https://files.pythonhosted.org/packages/7c/14/acd304f412e32d16a2c12182b9d78206bb0ae35354d35664f45db05c1b3b/ijson-3.4.0-cp313-cp313t-win32.whl", hash = "sha256:0772638efa1f3b72b51736833404f1cbd2f5beeb9c1a3d392e7d385b9160cba7", size = 53760 }, - { url = "https://files.pythonhosted.org/packages/2f/24/93dd0a467191590a5ed1fc2b35842bca9d09900d001e00b0b497c0208ef6/ijson-3.4.0-cp313-cp313t-win_amd64.whl", hash = "sha256:3d8a0d67f36e4fb97c61a724456ef0791504b16ce6f74917a31c2e92309bbeb9", size = 56948 }, +sdist = { url = "https://files.pythonhosted.org/packages/a3/4f/1cfeada63f5fce87536651268ddf5cca79b8b4bbb457aee4e45777964a0a/ijson-3.4.0.tar.gz", hash = "sha256:5f74dcbad9d592c428d3ca3957f7115a42689ee7ee941458860900236ae9bb13", size = 65782, upload_time = "2025-05-08T02:37:20.135Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f8/ec/317ee5b2d13e50448833ead3aa906659a32b376191f6abc2a7c6112d2b27/ijson-3.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:956b148f88259a80a9027ffbe2d91705fae0c004fbfba3e5a24028fbe72311a9", size = 87212, upload_time = "2025-05-08T02:35:51.835Z" }, + { url = "https://files.pythonhosted.org/packages/f8/43/b06c96ced30cacecc5d518f89b0fd1c98c294a30ff88848b70ed7b7f72a1/ijson-3.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:06b89960f5c721106394c7fba5760b3f67c515b8eb7d80f612388f5eca2f4621", size = 59175, upload_time = "2025-05-08T02:35:52.988Z" }, + { url = "https://files.pythonhosted.org/packages/e9/df/b4aeafb7ecde463130840ee9be36130823ec94a00525049bf700883378b8/ijson-3.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9a0bb591cf250dd7e9dfab69d634745a7f3272d31cfe879f9156e0a081fd97ee", size = 59011, upload_time = "2025-05-08T02:35:54.394Z" }, + { url = "https://files.pythonhosted.org/packages/e3/7c/a80b8e361641609507f62022089626d4b8067f0826f51e1c09e4ba86eba8/ijson-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:72e92de999977f4c6b660ffcf2b8d59604ccd531edcbfde05b642baf283e0de8", size = 146094, upload_time = "2025-05-08T02:35:55.601Z" }, + { url = "https://files.pythonhosted.org/packages/01/44/fa416347b9a802e3646c6ff377fc3278bd7d6106e17beb339514b6a3184e/ijson-3.4.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e9602157a5b869d44b6896e64f502c712a312fcde044c2e586fccb85d3e316e", size = 137903, upload_time = "2025-05-08T02:35:56.814Z" }, + { url = "https://files.pythonhosted.org/packages/24/c6/41a9ad4d42df50ff6e70fdce79b034f09b914802737ebbdc141153d8d791/ijson-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e83660edb931a425b7ff662eb49db1f10d30ca6d4d350e5630edbed098bc01", size = 148339, upload_time = "2025-05-08T02:35:58.595Z" }, + { url = "https://files.pythonhosted.org/packages/5f/6f/7d01efda415b8502dce67e067ed9e8a124f53e763002c02207e542e1a2f1/ijson-3.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:49bf8eac1c7b7913073865a859c215488461f7591b4fa6a33c14b51cb73659d0", size = 149383, upload_time = "2025-05-08T02:36:00.197Z" }, + { url = "https://files.pythonhosted.org/packages/95/6c/0d67024b9ecb57916c5e5ab0350251c9fe2f86dc9c8ca2b605c194bdad6a/ijson-3.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:160b09273cb42019f1811469508b0a057d19f26434d44752bde6f281da6d3f32", size = 141580, upload_time = "2025-05-08T02:36:01.998Z" }, + { url = "https://files.pythonhosted.org/packages/06/43/e10edcc1c6a3b619294de835e7678bfb3a1b8a75955f3689fd66a1e9e7b4/ijson-3.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2019ff4e6f354aa00c76c8591bd450899111c61f2354ad55cc127e2ce2492c44", size = 150280, upload_time = "2025-05-08T02:36:03.926Z" }, + { url = "https://files.pythonhosted.org/packages/07/84/1cbeee8e8190a1ebe6926569a92cf1fa80ddb380c129beb6f86559e1bb24/ijson-3.4.0-cp312-cp312-win32.whl", hash = "sha256:931c007bf6bb8330705429989b2deed6838c22b63358a330bf362b6e458ba0bf", size = 51512, upload_time = "2025-05-08T02:36:05.595Z" }, + { url = "https://files.pythonhosted.org/packages/66/13/530802bc391c95be6fe9f96e9aa427d94067e7c0b7da7a9092344dc44c4b/ijson-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:71523f2b64cb856a820223e94d23e88369f193017ecc789bb4de198cc9d349eb", size = 54081, upload_time = "2025-05-08T02:36:07.099Z" }, + { url = "https://files.pythonhosted.org/packages/77/b3/b1d2eb2745e5204ec7a25365a6deb7868576214feb5e109bce368fb692c9/ijson-3.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e8d96f88d75196a61c9d9443de2b72c2d4a7ba9456ff117b57ae3bba23a54256", size = 87216, upload_time = "2025-05-08T02:36:08.414Z" }, + { url = "https://files.pythonhosted.org/packages/b1/cd/cd6d340087617f8cc9bedbb21d974542fe2f160ed0126b8288d3499a469b/ijson-3.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c45906ce2c1d3b62f15645476fc3a6ca279549127f01662a39ca5ed334a00cf9", size = 59170, upload_time = "2025-05-08T02:36:09.604Z" }, + { url = "https://files.pythonhosted.org/packages/3e/4d/32d3a9903b488d3306e3c8288f6ee4217d2eea82728261db03a1045eb5d1/ijson-3.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4ab4bc2119b35c4363ea49f29563612237cae9413d2fbe54b223be098b97bc9e", size = 59013, upload_time = "2025-05-08T02:36:10.696Z" }, + { url = "https://files.pythonhosted.org/packages/d5/c8/db15465ab4b0b477cee5964c8bfc94bf8c45af8e27a23e1ad78d1926e587/ijson-3.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97b0a9b5a15e61dfb1f14921ea4e0dba39f3a650df6d8f444ddbc2b19b479ff1", size = 146564, upload_time = "2025-05-08T02:36:11.916Z" }, + { url = "https://files.pythonhosted.org/packages/c4/d8/0755545bc122473a9a434ab90e0f378780e603d75495b1ca3872de757873/ijson-3.4.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e3047bb994dabedf11de11076ed1147a307924b6e5e2df6784fb2599c4ad8c60", size = 137917, upload_time = "2025-05-08T02:36:13.532Z" }, + { url = "https://files.pythonhosted.org/packages/d0/c6/aeb89c8939ebe3f534af26c8c88000c5e870dbb6ae33644c21a4531f87d2/ijson-3.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68c83161b052e9f5dc8191acbc862bb1e63f8a35344cb5cd0db1afd3afd487a6", size = 148897, upload_time = "2025-05-08T02:36:14.813Z" }, + { url = "https://files.pythonhosted.org/packages/be/0e/7ef6e9b372106f2682a4a32b3c65bf86bb471a1670e4dac242faee4a7d3f/ijson-3.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1eebd9b6c20eb1dffde0ae1f0fbb4aeacec2eb7b89adb5c7c0449fc9fd742760", size = 149711, upload_time = "2025-05-08T02:36:16.476Z" }, + { url = "https://files.pythonhosted.org/packages/d1/5d/9841c3ed75bcdabf19b3202de5f862a9c9c86ce5c7c9d95fa32347fdbf5f/ijson-3.4.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:13fb6d5c35192c541421f3ee81239d91fc15a8d8f26c869250f941f4b346a86c", size = 141691, upload_time = "2025-05-08T02:36:18.044Z" }, + { url = "https://files.pythonhosted.org/packages/d5/d2/ce74e17218dba292e9be10a44ed0c75439f7958cdd263adb0b5b92d012d5/ijson-3.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:28b7196ff7b37c4897c547a28fa4876919696739fc91c1f347651c9736877c69", size = 150738, upload_time = "2025-05-08T02:36:19.483Z" }, + { url = "https://files.pythonhosted.org/packages/4e/43/dcc480f94453b1075c9911d4755b823f3ace275761bb37b40139f22109ca/ijson-3.4.0-cp313-cp313-win32.whl", hash = "sha256:3c2691d2da42629522140f77b99587d6f5010440d58d36616f33bc7bdc830cc3", size = 51512, upload_time = "2025-05-08T02:36:20.99Z" }, + { url = "https://files.pythonhosted.org/packages/35/dd/d8c5f15efd85ba51e6e11451ebe23d779361a9ec0d192064c2a8c3cdfcb8/ijson-3.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:c4554718c275a044c47eb3874f78f2c939f300215d9031e785a6711cc51b83fc", size = 54074, upload_time = "2025-05-08T02:36:22.075Z" }, + { url = "https://files.pythonhosted.org/packages/79/73/24ad8cd106203419c4d22bed627e02e281d66b83e91bc206a371893d0486/ijson-3.4.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:915a65e3f3c0eee2ea937bc62aaedb6c14cc1e8f0bb9f3f4fb5a9e2bbfa4b480", size = 91694, upload_time = "2025-05-08T02:36:23.289Z" }, + { url = "https://files.pythonhosted.org/packages/17/2d/f7f680984bcb7324a46a4c2df3bd73cf70faef0acfeb85a3f811abdfd590/ijson-3.4.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:afbe9748707684b6c5adc295c4fdcf27765b300aec4d484e14a13dca4e5c0afa", size = 61390, upload_time = "2025-05-08T02:36:24.42Z" }, + { url = "https://files.pythonhosted.org/packages/09/a1/f3ca7bab86f95bdb82494739e71d271410dfefce4590785d511669127145/ijson-3.4.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:d823f8f321b4d8d5fa020d0a84f089fec5d52b7c0762430476d9f8bf95bbc1a9", size = 61140, upload_time = "2025-05-08T02:36:26.708Z" }, + { url = "https://files.pythonhosted.org/packages/51/79/dd340df3d4fc7771c95df29997956b92ed0570fe7b616d1792fea9ad93f2/ijson-3.4.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8a0a2c54f3becf76881188beefd98b484b1d3bd005769a740d5b433b089fa23", size = 214739, upload_time = "2025-05-08T02:36:27.973Z" }, + { url = "https://files.pythonhosted.org/packages/59/f0/85380b7f51d1f5fb7065d76a7b623e02feca920cc678d329b2eccc0011e0/ijson-3.4.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ced19a83ab09afa16257a0b15bc1aa888dbc555cb754be09d375c7f8d41051f2", size = 198338, upload_time = "2025-05-08T02:36:29.496Z" }, + { url = "https://files.pythonhosted.org/packages/a5/cd/313264cf2ec42e0f01d198c49deb7b6fadeb793b3685e20e738eb6b3fa13/ijson-3.4.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8100f9885eff1f38d35cef80ef759a1bbf5fc946349afa681bd7d0e681b7f1a0", size = 207515, upload_time = "2025-05-08T02:36:30.981Z" }, + { url = "https://files.pythonhosted.org/packages/12/94/bf14457aa87ea32641f2db577c9188ef4e4ae373478afef422b31fc7f309/ijson-3.4.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d7bcc3f7f21b0f703031ecd15209b1284ea51b2a329d66074b5261de3916c1eb", size = 210081, upload_time = "2025-05-08T02:36:32.403Z" }, + { url = "https://files.pythonhosted.org/packages/7d/b4/eaee39e290e40e52d665db9bd1492cfdce86bd1e47948e0440db209c6023/ijson-3.4.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:2dcb190227b09dd171bdcbfe4720fddd574933c66314818dfb3960c8a6246a77", size = 199253, upload_time = "2025-05-08T02:36:33.861Z" }, + { url = "https://files.pythonhosted.org/packages/c5/9c/e09c7b9ac720a703ab115b221b819f149ed54c974edfff623c1e925e57da/ijson-3.4.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:eda4cfb1d49c6073a901735aaa62e39cb7ab47f3ad7bb184862562f776f1fa8a", size = 203816, upload_time = "2025-05-08T02:36:35.348Z" }, + { url = "https://files.pythonhosted.org/packages/7c/14/acd304f412e32d16a2c12182b9d78206bb0ae35354d35664f45db05c1b3b/ijson-3.4.0-cp313-cp313t-win32.whl", hash = "sha256:0772638efa1f3b72b51736833404f1cbd2f5beeb9c1a3d392e7d385b9160cba7", size = 53760, upload_time = "2025-05-08T02:36:36.608Z" }, + { url = "https://files.pythonhosted.org/packages/2f/24/93dd0a467191590a5ed1fc2b35842bca9d09900d001e00b0b497c0208ef6/ijson-3.4.0-cp313-cp313t-win_amd64.whl", hash = "sha256:3d8a0d67f36e4fb97c61a724456ef0791504b16ce6f74917a31c2e92309bbeb9", size = 56948, upload_time = "2025-05-08T02:36:37.849Z" }, ] [[package]] @@ -602,18 +759,18 @@ dependencies = [ { name = "pandas" }, { name = "requests" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/af/45/24521d229aec5c058d998510794567788bc7b1b764dfaa02fb8e0aeda4b7/imf_reader-1.3.0.tar.gz", hash = "sha256:3f3130dd793a112fdd5913a7c7b733847a5a07fd70dee14d57624ae4e021a141", size = 12990 } +sdist = { url = "https://files.pythonhosted.org/packages/af/45/24521d229aec5c058d998510794567788bc7b1b764dfaa02fb8e0aeda4b7/imf_reader-1.3.0.tar.gz", hash = "sha256:3f3130dd793a112fdd5913a7c7b733847a5a07fd70dee14d57624ae4e021a141", size = 12990, upload_time = "2025-02-06T09:16:10.723Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fd/5b/3a063116950f2aa2b450120e78162bb5b87098dde3b75ae90210c6f2c099/imf_reader-1.3.0-py3-none-any.whl", hash = "sha256:3515c6644dfef44d5fda89f5bb3786b4f83da20f49184911f0df2386782106f1", size = 16520 }, + { url = "https://files.pythonhosted.org/packages/fd/5b/3a063116950f2aa2b450120e78162bb5b87098dde3b75ae90210c6f2c099/imf_reader-1.3.0-py3-none-any.whl", hash = "sha256:3515c6644dfef44d5fda89f5bb3786b4f83da20f49184911f0df2386782106f1", size = 16520, upload_time = "2025-02-06T09:16:09.042Z" }, ] [[package]] name = "iniconfig" version = "2.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f2/97/ebf4da567aa6827c909642694d71c9fcf53e5b504f2d96afea02718862f3/iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", size = 4793 } +sdist = { url = "https://files.pythonhosted.org/packages/f2/97/ebf4da567aa6827c909642694d71c9fcf53e5b504f2d96afea02718862f3/iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", size = 4793, upload_time = "2025-03-19T20:09:59.721Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050 }, + { url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050, upload_time = "2025-03-19T20:10:01.071Z" }, ] [[package]] @@ -635,9 +792,9 @@ dependencies = [ { name = "tornado" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/e9/5c/67594cb0c7055dc50814b21731c22a601101ea3b1b50a9a1b090e11f5d0f/ipykernel-6.29.5.tar.gz", hash = "sha256:f093a22c4a40f8828f8e330a9c297cb93dcab13bd9678ded6de8e5cf81c56215", size = 163367 } +sdist = { url = "https://files.pythonhosted.org/packages/e9/5c/67594cb0c7055dc50814b21731c22a601101ea3b1b50a9a1b090e11f5d0f/ipykernel-6.29.5.tar.gz", hash = "sha256:f093a22c4a40f8828f8e330a9c297cb93dcab13bd9678ded6de8e5cf81c56215", size = 163367, upload_time = "2024-07-01T14:07:22.543Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/94/5c/368ae6c01c7628438358e6d337c19b05425727fbb221d2a3c4303c372f42/ipykernel-6.29.5-py3-none-any.whl", hash = "sha256:afdb66ba5aa354b09b91379bac28ae4afebbb30e8b39510c9690afb7a10421b5", size = 117173 }, + { url = "https://files.pythonhosted.org/packages/94/5c/368ae6c01c7628438358e6d337c19b05425727fbb221d2a3c4303c372f42/ipykernel-6.29.5-py3-none-any.whl", hash = "sha256:afdb66ba5aa354b09b91379bac28ae4afebbb30e8b39510c9690afb7a10421b5", size = 117173, upload_time = "2024-07-01T14:07:19.603Z" }, ] [[package]] @@ -656,9 +813,9 @@ dependencies = [ { name = "stack-data" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/54/80/406f9e3bde1c1fd9bf5a0be9d090f8ae623e401b7670d8f6fdf2ab679891/ipython-9.4.0.tar.gz", hash = "sha256:c033c6d4e7914c3d9768aabe76bbe87ba1dc66a92a05db6bfa1125d81f2ee270", size = 4385338 } +sdist = { url = "https://files.pythonhosted.org/packages/54/80/406f9e3bde1c1fd9bf5a0be9d090f8ae623e401b7670d8f6fdf2ab679891/ipython-9.4.0.tar.gz", hash = "sha256:c033c6d4e7914c3d9768aabe76bbe87ba1dc66a92a05db6bfa1125d81f2ee270", size = 4385338, upload_time = "2025-07-01T11:11:30.606Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/63/f8/0031ee2b906a15a33d6bfc12dd09c3dfa966b3cb5b284ecfb7549e6ac3c4/ipython-9.4.0-py3-none-any.whl", hash = "sha256:25850f025a446d9b359e8d296ba175a36aedd32e83ca9b5060430fe16801f066", size = 611021 }, + { url = "https://files.pythonhosted.org/packages/63/f8/0031ee2b906a15a33d6bfc12dd09c3dfa966b3cb5b284ecfb7549e6ac3c4/ipython-9.4.0-py3-none-any.whl", hash = "sha256:25850f025a446d9b359e8d296ba175a36aedd32e83ca9b5060430fe16801f066", size = 611021, upload_time = "2025-07-01T11:11:27.85Z" }, ] [[package]] @@ -668,18 +825,18 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pygments" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ef/4c/5dd1d8af08107f88c7f741ead7a40854b8ac24ddf9ae850afbcf698aa552/ipython_pygments_lexers-1.1.1.tar.gz", hash = "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81", size = 8393 } +sdist = { url = "https://files.pythonhosted.org/packages/ef/4c/5dd1d8af08107f88c7f741ead7a40854b8ac24ddf9ae850afbcf698aa552/ipython_pygments_lexers-1.1.1.tar.gz", hash = "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81", size = 8393, upload_time = "2025-01-17T11:24:34.505Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl", hash = "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c", size = 8074 }, + { url = "https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl", hash = "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c", size = 8074, upload_time = "2025-01-17T11:24:33.271Z" }, ] [[package]] name = "isodate" version = "0.7.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/54/4d/e940025e2ce31a8ce1202635910747e5a87cc3a6a6bb2d00973375014749/isodate-0.7.2.tar.gz", hash = "sha256:4cd1aa0f43ca76f4a6c6c0292a85f40b35ec2e43e315b59f06e6d32171a953e6", size = 29705 } +sdist = { url = "https://files.pythonhosted.org/packages/54/4d/e940025e2ce31a8ce1202635910747e5a87cc3a6a6bb2d00973375014749/isodate-0.7.2.tar.gz", hash = "sha256:4cd1aa0f43ca76f4a6c6c0292a85f40b35ec2e43e315b59f06e6d32171a953e6", size = 29705, upload_time = "2024-10-08T23:04:11.5Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl", hash = "sha256:28009937d8031054830160fce6d409ed342816b543597cece116d966c6d99e15", size = 22320 }, + { url = "https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl", hash = "sha256:28009937d8031054830160fce6d409ed342816b543597cece116d966c6d99e15", size = 22320, upload_time = "2024-10-08T23:04:09.501Z" }, ] [[package]] @@ -689,9 +846,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "parso" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/72/3a/79a912fbd4d8dd6fbb02bf69afd3bb72cf0c729bb3063c6f4498603db17a/jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0", size = 1231287 } +sdist = { url = "https://files.pythonhosted.org/packages/72/3a/79a912fbd4d8dd6fbb02bf69afd3bb72cf0c729bb3063c6f4498603db17a/jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0", size = 1231287, upload_time = "2024-11-11T01:41:42.873Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9", size = 1572278 }, + { url = "https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9", size = 1572278, upload_time = "2024-11-11T01:41:40.175Z" }, ] [[package]] @@ -701,25 +858,25 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "markupsafe" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115 } +sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload_time = "2025-03-05T20:05:02.478Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899 }, + { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload_time = "2025-03-05T20:05:00.369Z" }, ] [[package]] name = "joblib" version = "1.5.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/dc/fe/0f5a938c54105553436dbff7a61dc4fed4b1b2c98852f8833beaf4d5968f/joblib-1.5.1.tar.gz", hash = "sha256:f4f86e351f39fe3d0d32a9f2c3d8af1ee4cec285aafcb27003dda5205576b444", size = 330475 } +sdist = { url = "https://files.pythonhosted.org/packages/dc/fe/0f5a938c54105553436dbff7a61dc4fed4b1b2c98852f8833beaf4d5968f/joblib-1.5.1.tar.gz", hash = "sha256:f4f86e351f39fe3d0d32a9f2c3d8af1ee4cec285aafcb27003dda5205576b444", size = 330475, upload_time = "2025-05-23T12:04:37.097Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7d/4f/1195bbac8e0c2acc5f740661631d8d750dc38d4a32b23ee5df3cde6f4e0d/joblib-1.5.1-py3-none-any.whl", hash = "sha256:4719a31f054c7d766948dcd83e9613686b27114f190f717cec7eaa2084f8a74a", size = 307746 }, + { url = "https://files.pythonhosted.org/packages/7d/4f/1195bbac8e0c2acc5f740661631d8d750dc38d4a32b23ee5df3cde6f4e0d/joblib-1.5.1-py3-none-any.whl", hash = "sha256:4719a31f054c7d766948dcd83e9613686b27114f190f717cec7eaa2084f8a74a", size = 307746, upload_time = "2025-05-23T12:04:35.124Z" }, ] [[package]] name = "jsmin" version = "3.0.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5e/73/e01e4c5e11ad0494f4407a3f623ad4d87714909f50b17a06ed121034ff6e/jsmin-3.0.1.tar.gz", hash = "sha256:c0959a121ef94542e807a674142606f7e90214a2b3d1eb17300244bbb5cc2bfc", size = 13925 } +sdist = { url = "https://files.pythonhosted.org/packages/5e/73/e01e4c5e11ad0494f4407a3f623ad4d87714909f50b17a06ed121034ff6e/jsmin-3.0.1.tar.gz", hash = "sha256:c0959a121ef94542e807a674142606f7e90214a2b3d1eb17300244bbb5cc2bfc", size = 13925, upload_time = "2022-01-16T20:35:59.13Z" } [[package]] name = "jsonlines" @@ -728,9 +885,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "attrs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/35/87/bcda8e46c88d0e34cad2f09ee2d0c7f5957bccdb9791b0b934ec84d84be4/jsonlines-4.0.0.tar.gz", hash = "sha256:0c6d2c09117550c089995247f605ae4cf77dd1533041d366351f6f298822ea74", size = 11359 } +sdist = { url = "https://files.pythonhosted.org/packages/35/87/bcda8e46c88d0e34cad2f09ee2d0c7f5957bccdb9791b0b934ec84d84be4/jsonlines-4.0.0.tar.gz", hash = "sha256:0c6d2c09117550c089995247f605ae4cf77dd1533041d366351f6f298822ea74", size = 11359, upload_time = "2023-09-01T12:34:44.187Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f8/62/d9ba6323b9202dd2fe166beab8a86d29465c41a0288cbe229fac60c1ab8d/jsonlines-4.0.0-py3-none-any.whl", hash = "sha256:185b334ff2ca5a91362993f42e83588a360cf95ce4b71a73548502bda52a7c55", size = 8701 }, + { url = "https://files.pythonhosted.org/packages/f8/62/d9ba6323b9202dd2fe166beab8a86d29465c41a0288cbe229fac60c1ab8d/jsonlines-4.0.0-py3-none-any.whl", hash = "sha256:185b334ff2ca5a91362993f42e83588a360cf95ce4b71a73548502bda52a7c55", size = 8701, upload_time = "2023-09-01T12:34:42.563Z" }, ] [[package]] @@ -740,9 +897,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "ply" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/6d/86/08646239a313f895186ff0a4573452038eed8c86f54380b3ebac34d32fb2/jsonpath-ng-1.7.0.tar.gz", hash = "sha256:f6f5f7fd4e5ff79c785f1573b394043b39849fb2bb47bcead935d12b00beab3c", size = 37838 } +sdist = { url = "https://files.pythonhosted.org/packages/6d/86/08646239a313f895186ff0a4573452038eed8c86f54380b3ebac34d32fb2/jsonpath-ng-1.7.0.tar.gz", hash = "sha256:f6f5f7fd4e5ff79c785f1573b394043b39849fb2bb47bcead935d12b00beab3c", size = 37838, upload_time = "2024-10-11T15:41:42.404Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/35/5a/73ecb3d82f8615f32ccdadeb9356726d6cae3a4bbc840b437ceb95708063/jsonpath_ng-1.7.0-py3-none-any.whl", hash = "sha256:f3d7f9e848cba1b6da28c55b1c26ff915dc9e0b1ba7e752a53d6da8d5cbd00b6", size = 30105 }, + { url = "https://files.pythonhosted.org/packages/35/5a/73ecb3d82f8615f32ccdadeb9356726d6cae3a4bbc840b437ceb95708063/jsonpath_ng-1.7.0-py3-none-any.whl", hash = "sha256:f3d7f9e848cba1b6da28c55b1c26ff915dc9e0b1ba7e752a53d6da8d5cbd00b6", size = 30105, upload_time = "2024-11-20T17:58:30.418Z" }, ] [[package]] @@ -755,9 +912,9 @@ dependencies = [ { name = "referencing" }, { name = "rpds-py" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/bf/d3/1cf5326b923a53515d8f3a2cd442e6d7e94fcc444716e879ea70a0ce3177/jsonschema-4.24.0.tar.gz", hash = "sha256:0b4e8069eb12aedfa881333004bccaec24ecef5a8a6a4b6df142b2cc9599d196", size = 353480 } +sdist = { url = "https://files.pythonhosted.org/packages/bf/d3/1cf5326b923a53515d8f3a2cd442e6d7e94fcc444716e879ea70a0ce3177/jsonschema-4.24.0.tar.gz", hash = "sha256:0b4e8069eb12aedfa881333004bccaec24ecef5a8a6a4b6df142b2cc9599d196", size = 353480, upload_time = "2025-05-26T18:48:10.459Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a2/3d/023389198f69c722d039351050738d6755376c8fd343e91dc493ea485905/jsonschema-4.24.0-py3-none-any.whl", hash = "sha256:a462455f19f5faf404a7902952b6f0e3ce868f3ee09a359b05eca6673bd8412d", size = 88709 }, + { url = "https://files.pythonhosted.org/packages/a2/3d/023389198f69c722d039351050738d6755376c8fd343e91dc493ea485905/jsonschema-4.24.0-py3-none-any.whl", hash = "sha256:a462455f19f5faf404a7902952b6f0e3ce868f3ee09a359b05eca6673bd8412d", size = 88709, upload_time = "2025-05-26T18:48:08.417Z" }, ] [[package]] @@ -767,9 +924,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "referencing" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/bf/ce/46fbd9c8119cfc3581ee5643ea49464d168028cfb5caff5fc0596d0cf914/jsonschema_specifications-2025.4.1.tar.gz", hash = "sha256:630159c9f4dbea161a6a2205c3011cc4f18ff381b189fff48bb39b9bf26ae608", size = 15513 } +sdist = { url = "https://files.pythonhosted.org/packages/bf/ce/46fbd9c8119cfc3581ee5643ea49464d168028cfb5caff5fc0596d0cf914/jsonschema_specifications-2025.4.1.tar.gz", hash = "sha256:630159c9f4dbea161a6a2205c3011cc4f18ff381b189fff48bb39b9bf26ae608", size = 15513, upload_time = "2025-04-23T12:34:07.418Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/01/0e/b27cdbaccf30b890c40ed1da9fd4a3593a5cf94dae54fb34f8a4b74fcd3f/jsonschema_specifications-2025.4.1-py3-none-any.whl", hash = "sha256:4653bffbd6584f7de83a67e0d620ef16900b390ddc7939d56684d6c81e33f1af", size = 18437 }, + { url = "https://files.pythonhosted.org/packages/01/0e/b27cdbaccf30b890c40ed1da9fd4a3593a5cf94dae54fb34f8a4b74fcd3f/jsonschema_specifications-2025.4.1-py3-none-any.whl", hash = "sha256:4653bffbd6584f7de83a67e0d620ef16900b390ddc7939d56684d6c81e33f1af", size = 18437, upload_time = "2025-04-23T12:34:05.422Z" }, ] [[package]] @@ -783,9 +940,9 @@ dependencies = [ { name = "tornado" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/71/22/bf9f12fdaeae18019a468b68952a60fe6dbab5d67cd2a103cac7659b41ca/jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419", size = 342019 } +sdist = { url = "https://files.pythonhosted.org/packages/71/22/bf9f12fdaeae18019a468b68952a60fe6dbab5d67cd2a103cac7659b41ca/jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419", size = 342019, upload_time = "2024-09-17T10:44:17.613Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/11/85/b0394e0b6fcccd2c1eeefc230978a6f8cb0c5df1e4cd3e7625735a0d7d1e/jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f", size = 106105 }, + { url = "https://files.pythonhosted.org/packages/11/85/b0394e0b6fcccd2c1eeefc230978a6f8cb0c5df1e4cd3e7625735a0d7d1e/jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f", size = 106105, upload_time = "2024-09-17T10:44:15.218Z" }, ] [[package]] @@ -797,9 +954,34 @@ dependencies = [ { name = "pywin32", marker = "platform_python_implementation != 'PyPy' and sys_platform == 'win32'" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/99/1b/72906d554acfeb588332eaaa6f61577705e9ec752ddb486f302dafa292d9/jupyter_core-5.8.1.tar.gz", hash = "sha256:0a5f9706f70e64786b75acba995988915ebd4601c8a52e534a40b51c95f59941", size = 88923 } +sdist = { url = "https://files.pythonhosted.org/packages/99/1b/72906d554acfeb588332eaaa6f61577705e9ec752ddb486f302dafa292d9/jupyter_core-5.8.1.tar.gz", hash = "sha256:0a5f9706f70e64786b75acba995988915ebd4601c8a52e534a40b51c95f59941", size = 88923, upload_time = "2025-05-27T07:38:16.655Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2f/57/6bffd4b20b88da3800c5d691e0337761576ee688eb01299eae865689d2df/jupyter_core-5.8.1-py3-none-any.whl", hash = "sha256:c28d268fc90fb53f1338ded2eb410704c5449a358406e8a948b75706e24863d0", size = 28880 }, + { url = "https://files.pythonhosted.org/packages/2f/57/6bffd4b20b88da3800c5d691e0337761576ee688eb01299eae865689d2df/jupyter_core-5.8.1-py3-none-any.whl", hash = "sha256:c28d268fc90fb53f1338ded2eb410704c5449a358406e8a948b75706e24863d0", size = 28880, upload_time = "2025-05-27T07:38:15.137Z" }, +] + +[[package]] +name = "jupyterlab-pygments" +version = "0.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/90/51/9187be60d989df97f5f0aba133fa54e7300f17616e065d1ada7d7646b6d6/jupyterlab_pygments-0.3.0.tar.gz", hash = "sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d", size = 512900, upload_time = "2023-11-23T09:26:37.44Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b1/dd/ead9d8ea85bf202d90cc513b533f9c363121c7792674f78e0d8a854b63b4/jupyterlab_pygments-0.3.0-py3-none-any.whl", hash = "sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780", size = 15884, upload_time = "2023-11-23T09:26:34.325Z" }, +] + +[[package]] +name = "jupytext" +version = "1.17.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown-it-py" }, + { name = "mdit-py-plugins" }, + { name = "nbformat" }, + { name = "packaging" }, + { name = "pyyaml" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/30/ce/0bd5290ca4978777154e2683413dca761781aacf57f7dc0146f5210df8b1/jupytext-1.17.2.tar.gz", hash = "sha256:772d92898ac1f2ded69106f897b34af48ce4a85c985fa043a378ff5a65455f02", size = 3748577, upload_time = "2025-06-01T21:31:48.231Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ed/f1/82ea8e783433707cafd9790099a2d19f113c22f32a31c8bb5abdc7a61dbb/jupytext-1.17.2-py3-none-any.whl", hash = "sha256:4f85dc43bb6a24b75491c5c434001ad5ef563932f68f15dd3e1c8ce12a4a426b", size = 164401, upload_time = "2025-06-01T21:31:46.319Z" }, ] [[package]] @@ -818,7 +1000,7 @@ dependencies = [ { name = "wheel" }, { name = "xlrd3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/63/ad/c1dafb7c59e685692a2eeafce83245b7c5f46e05881fdb77a0cbb7c19c74/libhxl-5.2.2.tar.gz", hash = "sha256:3a74d9f23561bfcefd20e5229c574bc68dfc114fdb6ba1ba684d9e9d7ea52483", size = 127736 } +sdist = { url = "https://files.pythonhosted.org/packages/63/ad/c1dafb7c59e685692a2eeafce83245b7c5f46e05881fdb77a0cbb7c19c74/libhxl-5.2.2.tar.gz", hash = "sha256:3a74d9f23561bfcefd20e5229c574bc68dfc114fdb6ba1ba684d9e9d7ea52483", size = 127736, upload_time = "2024-10-25T09:19:11.202Z" } [[package]] name = "license-expression" @@ -827,9 +1009,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "boolean-py" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/40/71/d89bb0e71b1415453980fd32315f2a037aad9f7f70f695c7cec7035feb13/license_expression-30.4.4.tar.gz", hash = "sha256:73448f0aacd8d0808895bdc4b2c8e01a8d67646e4188f887375398c761f340fd", size = 186402 } +sdist = { url = "https://files.pythonhosted.org/packages/40/71/d89bb0e71b1415453980fd32315f2a037aad9f7f70f695c7cec7035feb13/license_expression-30.4.4.tar.gz", hash = "sha256:73448f0aacd8d0808895bdc4b2c8e01a8d67646e4188f887375398c761f340fd", size = 186402, upload_time = "2025-07-22T11:13:32.17Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/af/40/791891d4c0c4dab4c5e187c17261cedc26285fd41541577f900470a45a4d/license_expression-30.4.4-py3-none-any.whl", hash = "sha256:421788fdcadb41f049d2dc934ce666626265aeccefddd25e162a26f23bcbf8a4", size = 120615 }, + { url = "https://files.pythonhosted.org/packages/af/40/791891d4c0c4dab4c5e187c17261cedc26285fd41541577f900470a45a4d/license_expression-30.4.4-py3-none-any.whl", hash = "sha256:421788fdcadb41f049d2dc934ce666626265aeccefddd25e162a26f23bcbf8a4", size = 120615, upload_time = "2025-07-22T11:13:31.217Z" }, ] [[package]] @@ -840,18 +1022,80 @@ dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, { name = "win32-setctime", marker = "sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/3a/05/a1dae3dffd1116099471c643b8924f5aa6524411dc6c63fdae648c4f1aca/loguru-0.7.3.tar.gz", hash = "sha256:19480589e77d47b8d85b2c827ad95d49bf31b0dcde16593892eb51dd18706eb6", size = 63559 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl", hash = "sha256:31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c", size = 61595 }, +sdist = { url = "https://files.pythonhosted.org/packages/3a/05/a1dae3dffd1116099471c643b8924f5aa6524411dc6c63fdae648c4f1aca/loguru-0.7.3.tar.gz", hash = "sha256:19480589e77d47b8d85b2c827ad95d49bf31b0dcde16593892eb51dd18706eb6", size = 63559, upload_time = "2024-12-06T11:20:56.608Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl", hash = "sha256:31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c", size = 61595, upload_time = "2024-12-06T11:20:54.538Z" }, +] + +[[package]] +name = "lxml" +version = "6.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8f/bd/f9d01fd4132d81c6f43ab01983caea69ec9614b913c290a26738431a015d/lxml-6.0.1.tar.gz", hash = "sha256:2b3a882ebf27dd026df3801a87cf49ff791336e0f94b0fad195db77e01240690", size = 4070214, upload_time = "2025-08-22T10:37:53.525Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b0/a9/82b244c8198fcdf709532e39a1751943a36b3e800b420adc739d751e0299/lxml-6.0.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:c03ac546adaabbe0b8e4a15d9ad815a281afc8d36249c246aecf1aaad7d6f200", size = 8422788, upload_time = "2025-08-22T10:32:56.612Z" }, + { url = "https://files.pythonhosted.org/packages/c9/8d/1ed2bc20281b0e7ed3e6c12b0a16e64ae2065d99be075be119ba88486e6d/lxml-6.0.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:33b862c7e3bbeb4ba2c96f3a039f925c640eeba9087a4dc7a572ec0f19d89392", size = 4593547, upload_time = "2025-08-22T10:32:59.016Z" }, + { url = "https://files.pythonhosted.org/packages/76/53/d7fd3af95b72a3493bf7fbe842a01e339d8f41567805cecfecd5c71aa5ee/lxml-6.0.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7a3ec1373f7d3f519de595032d4dcafae396c29407cfd5073f42d267ba32440d", size = 4948101, upload_time = "2025-08-22T10:33:00.765Z" }, + { url = "https://files.pythonhosted.org/packages/9d/51/4e57cba4d55273c400fb63aefa2f0d08d15eac021432571a7eeefee67bed/lxml-6.0.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:03b12214fb1608f4cffa181ec3d046c72f7e77c345d06222144744c122ded870", size = 5108090, upload_time = "2025-08-22T10:33:03.108Z" }, + { url = "https://files.pythonhosted.org/packages/f6/6e/5f290bc26fcc642bc32942e903e833472271614e24d64ad28aaec09d5dae/lxml-6.0.1-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:207ae0d5f0f03b30f95e649a6fa22aa73f5825667fee9c7ec6854d30e19f2ed8", size = 5021791, upload_time = "2025-08-22T10:33:06.972Z" }, + { url = "https://files.pythonhosted.org/packages/13/d4/2e7551a86992ece4f9a0f6eebd4fb7e312d30f1e372760e2109e721d4ce6/lxml-6.0.1-cp312-cp312-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:32297b09ed4b17f7b3f448de87a92fb31bb8747496623483788e9f27c98c0f00", size = 5358861, upload_time = "2025-08-22T10:33:08.967Z" }, + { url = "https://files.pythonhosted.org/packages/8a/5f/cb49d727fc388bf5fd37247209bab0da11697ddc5e976ccac4826599939e/lxml-6.0.1-cp312-cp312-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7e18224ea241b657a157c85e9cac82c2b113ec90876e01e1f127312006233756", size = 5652569, upload_time = "2025-08-22T10:33:10.815Z" }, + { url = "https://files.pythonhosted.org/packages/ca/b8/66c1ef8c87ad0f958b0a23998851e610607c74849e75e83955d5641272e6/lxml-6.0.1-cp312-cp312-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a07a994d3c46cd4020c1ea566345cf6815af205b1e948213a4f0f1d392182072", size = 5252262, upload_time = "2025-08-22T10:33:12.673Z" }, + { url = "https://files.pythonhosted.org/packages/1a/ef/131d3d6b9590e64fdbb932fbc576b81fcc686289da19c7cb796257310e82/lxml-6.0.1-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:2287fadaa12418a813b05095485c286c47ea58155930cfbd98c590d25770e225", size = 4710309, upload_time = "2025-08-22T10:33:14.952Z" }, + { url = "https://files.pythonhosted.org/packages/bc/3f/07f48ae422dce44902309aa7ed386c35310929dc592439c403ec16ef9137/lxml-6.0.1-cp312-cp312-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b4e597efca032ed99f418bd21314745522ab9fa95af33370dcee5533f7f70136", size = 5265786, upload_time = "2025-08-22T10:33:16.721Z" }, + { url = "https://files.pythonhosted.org/packages/11/c7/125315d7b14ab20d9155e8316f7d287a4956098f787c22d47560b74886c4/lxml-6.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9696d491f156226decdd95d9651c6786d43701e49f32bf23715c975539aa2b3b", size = 5062272, upload_time = "2025-08-22T10:33:18.478Z" }, + { url = "https://files.pythonhosted.org/packages/8b/c3/51143c3a5fc5168a7c3ee626418468ff20d30f5a59597e7b156c1e61fba8/lxml-6.0.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:e4e3cd3585f3c6f87cdea44cda68e692cc42a012f0131d25957ba4ce755241a7", size = 4786955, upload_time = "2025-08-22T10:33:20.34Z" }, + { url = "https://files.pythonhosted.org/packages/11/86/73102370a420ec4529647b31c4a8ce8c740c77af3a5fae7a7643212d6f6e/lxml-6.0.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:45cbc92f9d22c28cd3b97f8d07fcefa42e569fbd587dfdac76852b16a4924277", size = 5673557, upload_time = "2025-08-22T10:33:22.282Z" }, + { url = "https://files.pythonhosted.org/packages/d7/2d/aad90afaec51029aef26ef773b8fd74a9e8706e5e2f46a57acd11a421c02/lxml-6.0.1-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:f8c9bcfd2e12299a442fba94459adf0b0d001dbc68f1594439bfa10ad1ecb74b", size = 5254211, upload_time = "2025-08-22T10:33:24.15Z" }, + { url = "https://files.pythonhosted.org/packages/63/01/c9e42c8c2d8b41f4bdefa42ab05448852e439045f112903dd901b8fbea4d/lxml-6.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1e9dc2b9f1586e7cd77753eae81f8d76220eed9b768f337dc83a3f675f2f0cf9", size = 5275817, upload_time = "2025-08-22T10:33:26.007Z" }, + { url = "https://files.pythonhosted.org/packages/bc/1f/962ea2696759abe331c3b0e838bb17e92224f39c638c2068bf0d8345e913/lxml-6.0.1-cp312-cp312-win32.whl", hash = "sha256:987ad5c3941c64031f59c226167f55a04d1272e76b241bfafc968bdb778e07fb", size = 3610889, upload_time = "2025-08-22T10:33:28.169Z" }, + { url = "https://files.pythonhosted.org/packages/41/e2/22c86a990b51b44442b75c43ecb2f77b8daba8c4ba63696921966eac7022/lxml-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:abb05a45394fd76bf4a60c1b7bec0e6d4e8dfc569fc0e0b1f634cd983a006ddc", size = 4010925, upload_time = "2025-08-22T10:33:29.874Z" }, + { url = "https://files.pythonhosted.org/packages/b2/21/dc0c73325e5eb94ef9c9d60dbb5dcdcb2e7114901ea9509735614a74e75a/lxml-6.0.1-cp312-cp312-win_arm64.whl", hash = "sha256:c4be29bce35020d8579d60aa0a4e95effd66fcfce31c46ffddf7e5422f73a299", size = 3671922, upload_time = "2025-08-22T10:33:31.535Z" }, + { url = "https://files.pythonhosted.org/packages/43/c4/cd757eeec4548e6652eff50b944079d18ce5f8182d2b2cf514e125e8fbcb/lxml-6.0.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:485eda5d81bb7358db96a83546949c5fe7474bec6c68ef3fa1fb61a584b00eea", size = 8405139, upload_time = "2025-08-22T10:33:34.09Z" }, + { url = "https://files.pythonhosted.org/packages/ff/99/0290bb86a7403893f5e9658490c705fcea103b9191f2039752b071b4ef07/lxml-6.0.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d12160adea318ce3d118f0b4fbdff7d1225c75fb7749429541b4d217b85c3f76", size = 4585954, upload_time = "2025-08-22T10:33:36.294Z" }, + { url = "https://files.pythonhosted.org/packages/88/a7/4bb54dd1e626342a0f7df6ec6ca44fdd5d0e100ace53acc00e9a689ead04/lxml-6.0.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:48c8d335d8ab72f9265e7ba598ae5105a8272437403f4032107dbcb96d3f0b29", size = 4944052, upload_time = "2025-08-22T10:33:38.19Z" }, + { url = "https://files.pythonhosted.org/packages/71/8d/20f51cd07a7cbef6214675a8a5c62b2559a36d9303fe511645108887c458/lxml-6.0.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:405e7cf9dbdbb52722c231e0f1257214202dfa192327fab3de45fd62e0554082", size = 5098885, upload_time = "2025-08-22T10:33:40.035Z" }, + { url = "https://files.pythonhosted.org/packages/5a/63/efceeee7245d45f97d548e48132258a36244d3c13c6e3ddbd04db95ff496/lxml-6.0.1-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:299a790d403335a6a057ade46f92612ebab87b223e4e8c5308059f2dc36f45ed", size = 5017542, upload_time = "2025-08-22T10:33:41.896Z" }, + { url = "https://files.pythonhosted.org/packages/57/5d/92cb3d3499f5caba17f7933e6be3b6c7de767b715081863337ced42eb5f2/lxml-6.0.1-cp313-cp313-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:48da704672f6f9c461e9a73250440c647638cc6ff9567ead4c3b1f189a604ee8", size = 5347303, upload_time = "2025-08-22T10:33:43.868Z" }, + { url = "https://files.pythonhosted.org/packages/69/f8/606fa16a05d7ef5e916c6481c634f40870db605caffed9d08b1a4fb6b989/lxml-6.0.1-cp313-cp313-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:21e364e1bb731489e3f4d51db416f991a5d5da5d88184728d80ecfb0904b1d68", size = 5641055, upload_time = "2025-08-22T10:33:45.784Z" }, + { url = "https://files.pythonhosted.org/packages/b3/01/15d5fc74ebb49eac4e5df031fbc50713dcc081f4e0068ed963a510b7d457/lxml-6.0.1-cp313-cp313-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1bce45a2c32032afddbd84ed8ab092130649acb935536ef7a9559636ce7ffd4a", size = 5242719, upload_time = "2025-08-22T10:33:48.089Z" }, + { url = "https://files.pythonhosted.org/packages/42/a5/1b85e2aaaf8deaa67e04c33bddb41f8e73d07a077bf9db677cec7128bfb4/lxml-6.0.1-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:fa164387ff20ab0e575fa909b11b92ff1481e6876835014e70280769920c4433", size = 4717310, upload_time = "2025-08-22T10:33:49.852Z" }, + { url = "https://files.pythonhosted.org/packages/42/23/f3bb1292f55a725814317172eeb296615db3becac8f1a059b53c51fc1da8/lxml-6.0.1-cp313-cp313-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:7587ac5e000e1594e62278422c5783b34a82b22f27688b1074d71376424b73e8", size = 5254024, upload_time = "2025-08-22T10:33:52.22Z" }, + { url = "https://files.pythonhosted.org/packages/b4/be/4d768f581ccd0386d424bac615d9002d805df7cc8482ae07d529f60a3c1e/lxml-6.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:57478424ac4c9170eabf540237125e8d30fad1940648924c058e7bc9fb9cf6dd", size = 5055335, upload_time = "2025-08-22T10:33:54.041Z" }, + { url = "https://files.pythonhosted.org/packages/40/07/ed61d1a3e77d1a9f856c4fab15ee5c09a2853fb7af13b866bb469a3a6d42/lxml-6.0.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:09c74afc7786c10dd6afaa0be2e4805866beadc18f1d843cf517a7851151b499", size = 4784864, upload_time = "2025-08-22T10:33:56.382Z" }, + { url = "https://files.pythonhosted.org/packages/01/37/77e7971212e5c38a55431744f79dff27fd751771775165caea096d055ca4/lxml-6.0.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:7fd70681aeed83b196482d42a9b0dc5b13bab55668d09ad75ed26dff3be5a2f5", size = 5657173, upload_time = "2025-08-22T10:33:58.698Z" }, + { url = "https://files.pythonhosted.org/packages/32/a3/e98806d483941cd9061cc838b1169626acef7b2807261fbe5e382fcef881/lxml-6.0.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:10a72e456319b030b3dd900df6b1f19d89adf06ebb688821636dc406788cf6ac", size = 5245896, upload_time = "2025-08-22T10:34:00.586Z" }, + { url = "https://files.pythonhosted.org/packages/07/de/9bb5a05e42e8623bf06b4638931ea8c8f5eb5a020fe31703abdbd2e83547/lxml-6.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b0fa45fb5f55111ce75b56c703843b36baaf65908f8b8d2fbbc0e249dbc127ed", size = 5267417, upload_time = "2025-08-22T10:34:02.719Z" }, + { url = "https://files.pythonhosted.org/packages/f2/43/c1cb2a7c67226266c463ef8a53b82d42607228beb763b5fbf4867e88a21f/lxml-6.0.1-cp313-cp313-win32.whl", hash = "sha256:01dab65641201e00c69338c9c2b8a0f2f484b6b3a22d10779bb417599fae32b5", size = 3610051, upload_time = "2025-08-22T10:34:04.553Z" }, + { url = "https://files.pythonhosted.org/packages/34/96/6a6c3b8aa480639c1a0b9b6faf2a63fb73ab79ffcd2a91cf28745faa22de/lxml-6.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:bdf8f7c8502552d7bff9e4c98971910a0a59f60f88b5048f608d0a1a75e94d1c", size = 4009325, upload_time = "2025-08-22T10:34:06.24Z" }, + { url = "https://files.pythonhosted.org/packages/8c/66/622e8515121e1fd773e3738dae71b8df14b12006d9fb554ce90886689fd0/lxml-6.0.1-cp313-cp313-win_arm64.whl", hash = "sha256:a6aeca75959426b9fd8d4782c28723ba224fe07cfa9f26a141004210528dcbe2", size = 3670443, upload_time = "2025-08-22T10:34:07.974Z" }, + { url = "https://files.pythonhosted.org/packages/38/e3/b7eb612ce07abe766918a7e581ec6a0e5212352194001fd287c3ace945f0/lxml-6.0.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:29b0e849ec7030e3ecb6112564c9f7ad6881e3b2375dd4a0c486c5c1f3a33859", size = 8426160, upload_time = "2025-08-22T10:34:10.154Z" }, + { url = "https://files.pythonhosted.org/packages/35/8f/ab3639a33595cf284fe733c6526da2ca3afbc5fd7f244ae67f3303cec654/lxml-6.0.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:02a0f7e629f73cc0be598c8b0611bf28ec3b948c549578a26111b01307fd4051", size = 4589288, upload_time = "2025-08-22T10:34:12.972Z" }, + { url = "https://files.pythonhosted.org/packages/2c/65/819d54f2e94d5c4458c1db8c1ccac9d05230b27c1038937d3d788eb406f9/lxml-6.0.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:beab5e54de016e730875f612ba51e54c331e2fa6dc78ecf9a5415fc90d619348", size = 4964523, upload_time = "2025-08-22T10:34:15.474Z" }, + { url = "https://files.pythonhosted.org/packages/5b/4a/d4a74ce942e60025cdaa883c5a4478921a99ce8607fc3130f1e349a83b28/lxml-6.0.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:92a08aefecd19ecc4ebf053c27789dd92c87821df2583a4337131cf181a1dffa", size = 5101108, upload_time = "2025-08-22T10:34:17.348Z" }, + { url = "https://files.pythonhosted.org/packages/cb/48/67f15461884074edd58af17b1827b983644d1fae83b3d909e9045a08b61e/lxml-6.0.1-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:36c8fa7e177649470bc3dcf7eae6bee1e4984aaee496b9ccbf30e97ac4127fa2", size = 5053498, upload_time = "2025-08-22T10:34:19.232Z" }, + { url = "https://files.pythonhosted.org/packages/b6/d4/ec1bf1614828a5492f4af0b6a9ee2eb3e92440aea3ac4fa158e5228b772b/lxml-6.0.1-cp314-cp314-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:5d08e0f1af6916267bb7eff21c09fa105620f07712424aaae09e8cb5dd4164d1", size = 5351057, upload_time = "2025-08-22T10:34:21.143Z" }, + { url = "https://files.pythonhosted.org/packages/65/2b/c85929dacac08821f2100cea3eb258ce5c8804a4e32b774f50ebd7592850/lxml-6.0.1-cp314-cp314-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9705cdfc05142f8c38c97a61bd3a29581ceceb973a014e302ee4a73cc6632476", size = 5671579, upload_time = "2025-08-22T10:34:23.528Z" }, + { url = "https://files.pythonhosted.org/packages/d0/36/cf544d75c269b9aad16752fd9f02d8e171c5a493ca225cb46bb7ba72868c/lxml-6.0.1-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:74555e2da7c1636e30bff4e6e38d862a634cf020ffa591f1f63da96bf8b34772", size = 5250403, upload_time = "2025-08-22T10:34:25.642Z" }, + { url = "https://files.pythonhosted.org/packages/c2/e8/83dbc946ee598fd75fdeae6151a725ddeaab39bb321354a9468d4c9f44f3/lxml-6.0.1-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:e38b5f94c5a2a5dadaddd50084098dfd005e5a2a56cd200aaf5e0a20e8941782", size = 4696712, upload_time = "2025-08-22T10:34:27.753Z" }, + { url = "https://files.pythonhosted.org/packages/f4/72/889c633b47c06205743ba935f4d1f5aa4eb7f0325d701ed2b0540df1b004/lxml-6.0.1-cp314-cp314-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a5ec101a92ddacb4791977acfc86c1afd624c032974bfb6a21269d1083c9bc49", size = 5268177, upload_time = "2025-08-22T10:34:29.804Z" }, + { url = "https://files.pythonhosted.org/packages/b0/b6/f42a21a1428479b66ea0da7bd13e370436aecaff0cfe93270c7e165bd2a4/lxml-6.0.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:5c17e70c82fd777df586c12114bbe56e4e6f823a971814fd40dec9c0de518772", size = 5094648, upload_time = "2025-08-22T10:34:31.703Z" }, + { url = "https://files.pythonhosted.org/packages/51/b0/5f8c1e8890e2ee1c2053c2eadd1cb0e4b79e2304e2912385f6ca666f48b1/lxml-6.0.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:45fdd0415a0c3d91640b5d7a650a8f37410966a2e9afebb35979d06166fd010e", size = 4745220, upload_time = "2025-08-22T10:34:33.595Z" }, + { url = "https://files.pythonhosted.org/packages/eb/f9/820b5125660dae489ca3a21a36d9da2e75dd6b5ffe922088f94bbff3b8a0/lxml-6.0.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:d417eba28981e720a14fcb98f95e44e7a772fe25982e584db38e5d3b6ee02e79", size = 5692913, upload_time = "2025-08-22T10:34:35.482Z" }, + { url = "https://files.pythonhosted.org/packages/23/8e/a557fae9eec236618aecf9ff35fec18df41b6556d825f3ad6017d9f6e878/lxml-6.0.1-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:8e5d116b9e59be7934febb12c41cce2038491ec8fdb743aeacaaf36d6e7597e4", size = 5259816, upload_time = "2025-08-22T10:34:37.482Z" }, + { url = "https://files.pythonhosted.org/packages/fa/fd/b266cfaab81d93a539040be699b5854dd24c84e523a1711ee5f615aa7000/lxml-6.0.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c238f0d0d40fdcb695c439fe5787fa69d40f45789326b3bb6ef0d61c4b588d6e", size = 5276162, upload_time = "2025-08-22T10:34:39.507Z" }, + { url = "https://files.pythonhosted.org/packages/25/6c/6f9610fbf1de002048e80585ea4719591921a0316a8565968737d9f125ca/lxml-6.0.1-cp314-cp314-win32.whl", hash = "sha256:537b6cf1c5ab88cfd159195d412edb3e434fee880f206cbe68dff9c40e17a68a", size = 3669595, upload_time = "2025-08-22T10:34:41.783Z" }, + { url = "https://files.pythonhosted.org/packages/72/a5/506775e3988677db24dc75a7b03e04038e0b3d114ccd4bccea4ce0116c15/lxml-6.0.1-cp314-cp314-win_amd64.whl", hash = "sha256:911d0a2bb3ef3df55b3d97ab325a9ca7e438d5112c102b8495321105d25a441b", size = 4079818, upload_time = "2025-08-22T10:34:44.04Z" }, + { url = "https://files.pythonhosted.org/packages/0a/44/9613f300201b8700215856e5edd056d4e58dd23368699196b58877d4408b/lxml-6.0.1-cp314-cp314-win_arm64.whl", hash = "sha256:2834377b0145a471a654d699bdb3a2155312de492142ef5a1d426af2c60a0a31", size = 3753901, upload_time = "2025-08-22T10:34:45.799Z" }, ] [[package]] name = "markdown" version = "3.8.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d7/c2/4ab49206c17f75cb08d6311171f2d65798988db4360c4d1485bd0eedd67c/markdown-3.8.2.tar.gz", hash = "sha256:247b9a70dd12e27f67431ce62523e675b866d254f900c4fe75ce3dda62237c45", size = 362071 } +sdist = { url = "https://files.pythonhosted.org/packages/d7/c2/4ab49206c17f75cb08d6311171f2d65798988db4360c4d1485bd0eedd67c/markdown-3.8.2.tar.gz", hash = "sha256:247b9a70dd12e27f67431ce62523e675b866d254f900c4fe75ce3dda62237c45", size = 362071, upload_time = "2025-06-19T17:12:44.483Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/96/2b/34cc11786bc00d0f04d0f5fdc3a2b1ae0b6239eef72d3d345805f9ad92a1/markdown-3.8.2-py3-none-any.whl", hash = "sha256:5c83764dbd4e00bdd94d85a19b8d55ccca20fe35b2e678a1422b380324dd5f24", size = 106827 }, + { url = "https://files.pythonhosted.org/packages/96/2b/34cc11786bc00d0f04d0f5fdc3a2b1ae0b6239eef72d3d345805f9ad92a1/markdown-3.8.2-py3-none-any.whl", hash = "sha256:5c83764dbd4e00bdd94d85a19b8d55ccca20fe35b2e678a1422b380324dd5f24", size = 106827, upload_time = "2025-06-19T17:12:42.994Z" }, ] [[package]] @@ -861,56 +1105,56 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "mdurl" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596 } +sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596, upload_time = "2023-06-03T06:41:14.443Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528 }, + { url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528, upload_time = "2023-06-03T06:41:11.019Z" }, ] [[package]] name = "marko" version = "2.1.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/72/dc/c8cadbd83de1b38d95a48568b445a5553005ebdd32e00a333ca940113db4/marko-2.1.4.tar.gz", hash = "sha256:dd7d66f3706732bf8f994790e674649a4fd0a6c67f16b80246f30de8e16a1eac", size = 142795 } +sdist = { url = "https://files.pythonhosted.org/packages/72/dc/c8cadbd83de1b38d95a48568b445a5553005ebdd32e00a333ca940113db4/marko-2.1.4.tar.gz", hash = "sha256:dd7d66f3706732bf8f994790e674649a4fd0a6c67f16b80246f30de8e16a1eac", size = 142795, upload_time = "2025-06-13T03:25:50.857Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c3/66/49e3691d14898fb6e34ccb337c7677dfb7e18269ed170f12e4b85315eae6/marko-2.1.4-py3-none-any.whl", hash = "sha256:81c2b9f570ca485bc356678d9ba1a1b3eb78b4a315d01f3ded25442fdc796990", size = 42186 }, + { url = "https://files.pythonhosted.org/packages/c3/66/49e3691d14898fb6e34ccb337c7677dfb7e18269ed170f12e4b85315eae6/marko-2.1.4-py3-none-any.whl", hash = "sha256:81c2b9f570ca485bc356678d9ba1a1b3eb78b4a315d01f3ded25442fdc796990", size = 42186, upload_time = "2025-06-13T03:25:49.858Z" }, ] [[package]] name = "markupsafe" version = "3.0.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/22/09/d1f21434c97fc42f09d290cbb6350d44eb12f09cc62c9476effdb33a18aa/MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", size = 14274 }, - { url = "https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", size = 12348 }, - { url = "https://files.pythonhosted.org/packages/e0/25/dd5c0f6ac1311e9b40f4af06c78efde0f3b5cbf02502f8ef9501294c425b/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", size = 24149 }, - { url = "https://files.pythonhosted.org/packages/f3/f0/89e7aadfb3749d0f52234a0c8c7867877876e0a20b60e2188e9850794c17/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", size = 23118 }, - { url = "https://files.pythonhosted.org/packages/d5/da/f2eeb64c723f5e3777bc081da884b414671982008c47dcc1873d81f625b6/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", size = 22993 }, - { url = "https://files.pythonhosted.org/packages/da/0e/1f32af846df486dce7c227fe0f2398dc7e2e51d4a370508281f3c1c5cddc/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", size = 24178 }, - { url = "https://files.pythonhosted.org/packages/c4/f6/bb3ca0532de8086cbff5f06d137064c8410d10779c4c127e0e47d17c0b71/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", size = 23319 }, - { url = "https://files.pythonhosted.org/packages/a2/82/8be4c96ffee03c5b4a034e60a31294daf481e12c7c43ab8e34a1453ee48b/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", size = 23352 }, - { url = "https://files.pythonhosted.org/packages/51/ae/97827349d3fcffee7e184bdf7f41cd6b88d9919c80f0263ba7acd1bbcb18/MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", size = 15097 }, - { url = "https://files.pythonhosted.org/packages/c1/80/a61f99dc3a936413c3ee4e1eecac96c0da5ed07ad56fd975f1a9da5bc630/MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", size = 15601 }, - { url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274 }, - { url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352 }, - { url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122 }, - { url = "https://files.pythonhosted.org/packages/0c/91/96cf928db8236f1bfab6ce15ad070dfdd02ed88261c2afafd4b43575e9e9/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", size = 23085 }, - { url = "https://files.pythonhosted.org/packages/c2/cf/c9d56af24d56ea04daae7ac0940232d31d5a8354f2b457c6d856b2057d69/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", size = 22978 }, - { url = "https://files.pythonhosted.org/packages/2a/9f/8619835cd6a711d6272d62abb78c033bda638fdc54c4e7f4272cf1c0962b/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", size = 24208 }, - { url = "https://files.pythonhosted.org/packages/f9/bf/176950a1792b2cd2102b8ffeb5133e1ed984547b75db47c25a67d3359f77/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", size = 23357 }, - { url = "https://files.pythonhosted.org/packages/ce/4f/9a02c1d335caabe5c4efb90e1b6e8ee944aa245c1aaaab8e8a618987d816/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", size = 23344 }, - { url = "https://files.pythonhosted.org/packages/ee/55/c271b57db36f748f0e04a759ace9f8f759ccf22b4960c270c78a394f58be/MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", size = 15101 }, - { url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", size = 15603 }, - { url = "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", size = 14510 }, - { url = "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", size = 12486 }, - { url = "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", size = 25480 }, - { url = "https://files.pythonhosted.org/packages/0c/e3/90e9651924c430b885468b56b3d597cabf6d72be4b24a0acd1fa0e12af67/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", size = 23914 }, - { url = "https://files.pythonhosted.org/packages/66/8c/6c7cf61f95d63bb866db39085150df1f2a5bd3335298f14a66b48e92659c/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", size = 23796 }, - { url = "https://files.pythonhosted.org/packages/bb/35/cbe9238ec3f47ac9a7c8b3df7a808e7cb50fe149dc7039f5f454b3fba218/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", size = 25473 }, - { url = "https://files.pythonhosted.org/packages/e6/32/7621a4382488aa283cc05e8984a9c219abad3bca087be9ec77e89939ded9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", size = 24114 }, - { url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098 }, - { url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208 }, - { url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739 }, +sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537, upload_time = "2024-10-18T15:21:54.129Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/09/d1f21434c97fc42f09d290cbb6350d44eb12f09cc62c9476effdb33a18aa/MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", size = 14274, upload_time = "2024-10-18T15:21:13.777Z" }, + { url = "https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", size = 12348, upload_time = "2024-10-18T15:21:14.822Z" }, + { url = "https://files.pythonhosted.org/packages/e0/25/dd5c0f6ac1311e9b40f4af06c78efde0f3b5cbf02502f8ef9501294c425b/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", size = 24149, upload_time = "2024-10-18T15:21:15.642Z" }, + { url = "https://files.pythonhosted.org/packages/f3/f0/89e7aadfb3749d0f52234a0c8c7867877876e0a20b60e2188e9850794c17/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", size = 23118, upload_time = "2024-10-18T15:21:17.133Z" }, + { url = "https://files.pythonhosted.org/packages/d5/da/f2eeb64c723f5e3777bc081da884b414671982008c47dcc1873d81f625b6/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", size = 22993, upload_time = "2024-10-18T15:21:18.064Z" }, + { url = "https://files.pythonhosted.org/packages/da/0e/1f32af846df486dce7c227fe0f2398dc7e2e51d4a370508281f3c1c5cddc/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", size = 24178, upload_time = "2024-10-18T15:21:18.859Z" }, + { url = "https://files.pythonhosted.org/packages/c4/f6/bb3ca0532de8086cbff5f06d137064c8410d10779c4c127e0e47d17c0b71/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", size = 23319, upload_time = "2024-10-18T15:21:19.671Z" }, + { url = "https://files.pythonhosted.org/packages/a2/82/8be4c96ffee03c5b4a034e60a31294daf481e12c7c43ab8e34a1453ee48b/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", size = 23352, upload_time = "2024-10-18T15:21:20.971Z" }, + { url = "https://files.pythonhosted.org/packages/51/ae/97827349d3fcffee7e184bdf7f41cd6b88d9919c80f0263ba7acd1bbcb18/MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", size = 15097, upload_time = "2024-10-18T15:21:22.646Z" }, + { url = "https://files.pythonhosted.org/packages/c1/80/a61f99dc3a936413c3ee4e1eecac96c0da5ed07ad56fd975f1a9da5bc630/MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", size = 15601, upload_time = "2024-10-18T15:21:23.499Z" }, + { url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274, upload_time = "2024-10-18T15:21:24.577Z" }, + { url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352, upload_time = "2024-10-18T15:21:25.382Z" }, + { url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122, upload_time = "2024-10-18T15:21:26.199Z" }, + { url = "https://files.pythonhosted.org/packages/0c/91/96cf928db8236f1bfab6ce15ad070dfdd02ed88261c2afafd4b43575e9e9/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", size = 23085, upload_time = "2024-10-18T15:21:27.029Z" }, + { url = "https://files.pythonhosted.org/packages/c2/cf/c9d56af24d56ea04daae7ac0940232d31d5a8354f2b457c6d856b2057d69/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", size = 22978, upload_time = "2024-10-18T15:21:27.846Z" }, + { url = "https://files.pythonhosted.org/packages/2a/9f/8619835cd6a711d6272d62abb78c033bda638fdc54c4e7f4272cf1c0962b/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", size = 24208, upload_time = "2024-10-18T15:21:28.744Z" }, + { url = "https://files.pythonhosted.org/packages/f9/bf/176950a1792b2cd2102b8ffeb5133e1ed984547b75db47c25a67d3359f77/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", size = 23357, upload_time = "2024-10-18T15:21:29.545Z" }, + { url = "https://files.pythonhosted.org/packages/ce/4f/9a02c1d335caabe5c4efb90e1b6e8ee944aa245c1aaaab8e8a618987d816/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", size = 23344, upload_time = "2024-10-18T15:21:30.366Z" }, + { url = "https://files.pythonhosted.org/packages/ee/55/c271b57db36f748f0e04a759ace9f8f759ccf22b4960c270c78a394f58be/MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", size = 15101, upload_time = "2024-10-18T15:21:31.207Z" }, + { url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", size = 15603, upload_time = "2024-10-18T15:21:32.032Z" }, + { url = "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", size = 14510, upload_time = "2024-10-18T15:21:33.625Z" }, + { url = "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", size = 12486, upload_time = "2024-10-18T15:21:34.611Z" }, + { url = "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", size = 25480, upload_time = "2024-10-18T15:21:35.398Z" }, + { url = "https://files.pythonhosted.org/packages/0c/e3/90e9651924c430b885468b56b3d597cabf6d72be4b24a0acd1fa0e12af67/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", size = 23914, upload_time = "2024-10-18T15:21:36.231Z" }, + { url = "https://files.pythonhosted.org/packages/66/8c/6c7cf61f95d63bb866db39085150df1f2a5bd3335298f14a66b48e92659c/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", size = 23796, upload_time = "2024-10-18T15:21:37.073Z" }, + { url = "https://files.pythonhosted.org/packages/bb/35/cbe9238ec3f47ac9a7c8b3df7a808e7cb50fe149dc7039f5f454b3fba218/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", size = 25473, upload_time = "2024-10-18T15:21:37.932Z" }, + { url = "https://files.pythonhosted.org/packages/e6/32/7621a4382488aa283cc05e8984a9c219abad3bca087be9ec77e89939ded9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", size = 24114, upload_time = "2024-10-18T15:21:39.799Z" }, + { url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098, upload_time = "2024-10-18T15:21:40.813Z" }, + { url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208, upload_time = "2024-10-18T15:21:41.814Z" }, + { url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739, upload_time = "2024-10-18T15:21:42.784Z" }, ] [[package]] @@ -920,27 +1164,48 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/99/5b/a36a337438a14116b16480db471ad061c36c3694df7c2084a0da7ba538b7/matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90", size = 8159 } +sdist = { url = "https://files.pythonhosted.org/packages/99/5b/a36a337438a14116b16480db471ad061c36c3694df7c2084a0da7ba538b7/matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90", size = 8159, upload_time = "2024-04-15T13:44:44.803Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/8f/8e/9ad090d3553c280a8060fbf6e24dc1c0c29704ee7d1c372f0c174aa59285/matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca", size = 9899 }, + { url = "https://files.pythonhosted.org/packages/8f/8e/9ad090d3553c280a8060fbf6e24dc1c0c29704ee7d1c372f0c174aa59285/matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca", size = 9899, upload_time = "2024-04-15T13:44:43.265Z" }, +] + +[[package]] +name = "mdit-py-plugins" +version = "0.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown-it-py" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b2/fd/a756d36c0bfba5f6e39a1cdbdbfdd448dc02692467d83816dff4592a1ebc/mdit_py_plugins-0.5.0.tar.gz", hash = "sha256:f4918cb50119f50446560513a8e311d574ff6aaed72606ddae6d35716fe809c6", size = 44655, upload_time = "2025-08-11T07:25:49.083Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/86/dd6e5db36df29e76c7a7699123569a4a18c1623ce68d826ed96c62643cae/mdit_py_plugins-0.5.0-py3-none-any.whl", hash = "sha256:07a08422fc1936a5d26d146759e9155ea466e842f5ab2f7d2266dd084c8dab1f", size = 57205, upload_time = "2025-08-11T07:25:47.597Z" }, ] [[package]] name = "mdurl" version = "0.1.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729 } +sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload_time = "2022-08-14T12:40:10.846Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979 }, + { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload_time = "2022-08-14T12:40:09.779Z" }, ] [[package]] name = "mergedeep" version = "1.3.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/3a/41/580bb4006e3ed0361b8151a01d324fb03f420815446c7def45d02f74c270/mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8", size = 4661 } +sdist = { url = "https://files.pythonhosted.org/packages/3a/41/580bb4006e3ed0361b8151a01d324fb03f420815446c7def45d02f74c270/mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8", size = 4661, upload_time = "2021-02-05T18:55:30.623Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307", size = 6354, upload_time = "2021-02-05T18:55:29.583Z" }, +] + +[[package]] +name = "mistune" +version = "3.1.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c4/79/bda47f7dd7c3c55770478d6d02c9960c430b0cf1773b72366ff89126ea31/mistune-3.1.3.tar.gz", hash = "sha256:a7035c21782b2becb6be62f8f25d3df81ccb4d6fa477a6525b15af06539f02a0", size = 94347, upload_time = "2025-03-19T14:27:24.955Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307", size = 6354 }, + { url = "https://files.pythonhosted.org/packages/01/4d/23c4e4f09da849e127e9f123241946c23c1e30f45a88366879e064211815/mistune-3.1.3-py3-none-any.whl", hash = "sha256:1a32314113cff28aa6432e99e522677c8587fd83e3d51c29b82a52409c842bd9", size = 53410, upload_time = "2025-03-19T14:27:23.451Z" }, ] [[package]] @@ -962,9 +1227,21 @@ dependencies = [ { name = "pyyaml-env-tag" }, { name = "watchdog" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/bc/c6/bbd4f061bd16b378247f12953ffcb04786a618ce5e904b8c5a01a0309061/mkdocs-1.6.1.tar.gz", hash = "sha256:7b432f01d928c084353ab39c57282f29f92136665bdd6abf7c1ec8d822ef86f2", size = 3889159 } +sdist = { url = "https://files.pythonhosted.org/packages/bc/c6/bbd4f061bd16b378247f12953ffcb04786a618ce5e904b8c5a01a0309061/mkdocs-1.6.1.tar.gz", hash = "sha256:7b432f01d928c084353ab39c57282f29f92136665bdd6abf7c1ec8d822ef86f2", size = 3889159, upload_time = "2024-08-30T12:24:06.899Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl", hash = "sha256:db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e", size = 3864451 }, + { url = "https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl", hash = "sha256:db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e", size = 3864451, upload_time = "2024-08-30T12:24:05.054Z" }, +] + +[[package]] +name = "mkdocs-argref-plugin" +version = "0.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mkdocs" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/26/7c/fea9d842705ca8c9e7dd21da2d0b7b61dbdd8b6e58ca3c7c85b5604914e9/mkdocs_argref_plugin-0.5.0.tar.gz", hash = "sha256:b2982f9670419911f671ddff3f773b27fdc9184762ecd1e00c42aaab3e905e70", size = 7012, upload_time = "2024-08-25T12:50:09.138Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/eb/e7e7ea2f7e374e52fc8425d5cf67890be8278a6e620aa74775da2f1039f7/mkdocs_argref_plugin-0.5.0-py3-none-any.whl", hash = "sha256:6ec4be422bfb5654c38f96785b0093078c3ca3e16774162be607d6f8d483ceb9", size = 6790, upload_time = "2024-08-25T12:50:08.151Z" }, ] [[package]] @@ -974,9 +1251,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "mkdocs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/63/b7/efc75b7870a4fecbc9a05ba94ce622462a40b5a13670d00036c5b47bf82f/mkdocs-autolinks-plugin-0.7.1.tar.gz", hash = "sha256:445ddb9b417b7795856c30801bb430773186c1daf210bdeecf8305f55a47d151", size = 4375 } +sdist = { url = "https://files.pythonhosted.org/packages/63/b7/efc75b7870a4fecbc9a05ba94ce622462a40b5a13670d00036c5b47bf82f/mkdocs-autolinks-plugin-0.7.1.tar.gz", hash = "sha256:445ddb9b417b7795856c30801bb430773186c1daf210bdeecf8305f55a47d151", size = 4375, upload_time = "2023-08-04T14:42:25.67Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d4/9c/ee3d81a799b8b0b73a89625bcbf3c58cd369c8a26a1b415413edea9bf259/mkdocs_autolinks_plugin-0.7.1-py3-none-any.whl", hash = "sha256:5c6c17f6649b68e79a9ef0b2648d59f3072e18002b90ee1586a64c505f11ab12", size = 4235 }, + { url = "https://files.pythonhosted.org/packages/d4/9c/ee3d81a799b8b0b73a89625bcbf3c58cd369c8a26a1b415413edea9bf259/mkdocs_autolinks_plugin-0.7.1-py3-none-any.whl", hash = "sha256:5c6c17f6649b68e79a9ef0b2648d59f3072e18002b90ee1586a64c505f11ab12", size = 4235, upload_time = "2023-08-04T14:42:23.955Z" }, ] [[package]] @@ -988,11 +1265,21 @@ dependencies = [ { name = "markupsafe" }, { name = "mkdocs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/47/0c/c9826f35b99c67fa3a7cddfa094c1a6c43fafde558c309c6e4403e5b37dc/mkdocs_autorefs-1.4.2.tar.gz", hash = "sha256:e2ebe1abd2b67d597ed19378c0fff84d73d1dbce411fce7a7cc6f161888b6749", size = 54961 } +sdist = { url = "https://files.pythonhosted.org/packages/47/0c/c9826f35b99c67fa3a7cddfa094c1a6c43fafde558c309c6e4403e5b37dc/mkdocs_autorefs-1.4.2.tar.gz", hash = "sha256:e2ebe1abd2b67d597ed19378c0fff84d73d1dbce411fce7a7cc6f161888b6749", size = 54961, upload_time = "2025-05-20T13:09:09.886Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/87/dc/fc063b78f4b769d1956319351704e23ebeba1e9e1d6a41b4b602325fd7e4/mkdocs_autorefs-1.4.2-py3-none-any.whl", hash = "sha256:83d6d777b66ec3c372a1aad4ae0cf77c243ba5bcda5bf0c6b8a2c5e7a3d89f13", size = 24969 }, + { url = "https://files.pythonhosted.org/packages/87/dc/fc063b78f4b769d1956319351704e23ebeba1e9e1d6a41b4b602325fd7e4/mkdocs_autorefs-1.4.2-py3-none-any.whl", hash = "sha256:83d6d777b66ec3c372a1aad4ae0cf77c243ba5bcda5bf0c6b8a2c5e7a3d89f13", size = 24969, upload_time = "2025-05-20T13:09:08.237Z" }, ] +[[package]] +name = "mkdocs-ezlinks-plugin" +version = "0.1.14" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mkdocs" }, + { name = "pygtrie" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9a/3b/490d1b51fba7da69394e5a17f2c081eb65a10fb73565dc6793d53e4e4206/mkdocs-ezlinks-plugin-0.1.14.tar.gz", hash = "sha256:3e2085c16a850e022393e80194c17612e7b55de87fb45b3ffb618b5dfdb10811", size = 13366, upload_time = "2022-01-24T20:10:30.91Z" } + [[package]] name = "mkdocs-get-deps" version = "0.2.0" @@ -1002,9 +1289,22 @@ dependencies = [ { name = "platformdirs" }, { name = "pyyaml" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/98/f5/ed29cd50067784976f25ed0ed6fcd3c2ce9eb90650aa3b2796ddf7b6870b/mkdocs_get_deps-0.2.0.tar.gz", hash = "sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c", size = 10239 } +sdist = { url = "https://files.pythonhosted.org/packages/98/f5/ed29cd50067784976f25ed0ed6fcd3c2ce9eb90650aa3b2796ddf7b6870b/mkdocs_get_deps-0.2.0.tar.gz", hash = "sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c", size = 10239, upload_time = "2023-11-20T17:51:09.981Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9f/d4/029f984e8d3f3b6b726bd33cafc473b75e9e44c0f7e80a5b29abc466bdea/mkdocs_get_deps-0.2.0-py3-none-any.whl", hash = "sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134", size = 9521, upload_time = "2023-11-20T17:51:08.587Z" }, +] + +[[package]] +name = "mkdocs-git-committers-plugin" +version = "0.2.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mkdocs" }, + { name = "pygithub" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c6/88/e724563e9ff1b119869ef0704157caa8d7b9b9b4a8a8faf8120aa01620e2/mkdocs-git-committers-plugin-0.2.3.tar.gz", hash = "sha256:77188d8aacc11d5233d6949435670e3d6545ffb7a0e274d56f32ed3984353c61", size = 5379, upload_time = "2023-11-06T17:13:30.207Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9f/d4/029f984e8d3f3b6b726bd33cafc473b75e9e44c0f7e80a5b29abc466bdea/mkdocs_get_deps-0.2.0-py3-none-any.whl", hash = "sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134", size = 9521 }, + { url = "https://files.pythonhosted.org/packages/81/56/15fdbb6afa718a6c9de626bd11672040832ba547c03daf205e295be4e0d4/mkdocs_git_committers_plugin-0.2.3-py3-none-any.whl", hash = "sha256:4ca79efb7e61a72652d3512d61af5c40a4572e36667e1a00032aad524250780d", size = 4340, upload_time = "2023-11-06T17:13:28.979Z" }, ] [[package]] @@ -1017,9 +1317,26 @@ dependencies = [ { name = "mkdocs" }, { name = "pytz" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/5e/f8/a17ec39a4fc314d40cc96afdc1d401e393ebd4f42309d454cc940a2cf38a/mkdocs_git_revision_date_localized_plugin-1.4.7.tar.gz", hash = "sha256:10a49eff1e1c3cb766e054b9d8360c904ce4fe8c33ac3f6cc083ac6459c91953", size = 450473 } +sdist = { url = "https://files.pythonhosted.org/packages/5e/f8/a17ec39a4fc314d40cc96afdc1d401e393ebd4f42309d454cc940a2cf38a/mkdocs_git_revision_date_localized_plugin-1.4.7.tar.gz", hash = "sha256:10a49eff1e1c3cb766e054b9d8360c904ce4fe8c33ac3f6cc083ac6459c91953", size = 450473, upload_time = "2025-05-28T18:26:20.697Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/53/b6/106fcc15287e7228658fbd0ad9e8b0d775becced0a089cc39984641f4a0f/mkdocs_git_revision_date_localized_plugin-1.4.7-py3-none-any.whl", hash = "sha256:056c0a90242409148f1dc94d5c9d2c25b5b8ddd8de45489fa38f7fa7ccad2bc4", size = 25382 }, + { url = "https://files.pythonhosted.org/packages/53/b6/106fcc15287e7228658fbd0ad9e8b0d775becced0a089cc39984641f4a0f/mkdocs_git_revision_date_localized_plugin-1.4.7-py3-none-any.whl", hash = "sha256:056c0a90242409148f1dc94d5c9d2c25b5b8ddd8de45489fa38f7fa7ccad2bc4", size = 25382, upload_time = "2025-05-28T18:26:18.907Z" }, +] + +[[package]] +name = "mkdocs-jupyter" +version = "0.25.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ipykernel" }, + { name = "jupytext" }, + { name = "mkdocs" }, + { name = "mkdocs-material" }, + { name = "nbconvert" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6c/23/6ffb8d2fd2117aa860a04c6fe2510b21bc3c3c085907ffdd851caba53152/mkdocs_jupyter-0.25.1.tar.gz", hash = "sha256:0e9272ff4947e0ec683c92423a4bfb42a26477c103ab1a6ab8277e2dcc8f7afe", size = 1626747, upload_time = "2024-10-15T14:56:32.373Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/08/37/5f1fd5c3f6954b3256f8126275e62af493b96fb6aef6c0dbc4ee326032ad/mkdocs_jupyter-0.25.1-py3-none-any.whl", hash = "sha256:3f679a857609885d322880e72533ef5255561bbfdb13cfee2a1e92ef4d4ad8d8", size = 1456197, upload_time = "2024-10-15T14:56:29.854Z" }, ] [[package]] @@ -1039,18 +1356,18 @@ dependencies = [ { name = "pymdown-extensions" }, { name = "requests" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/95/c1/f804ba2db2ddc2183e900befe7dad64339a34fa935034e1ab405289d0a97/mkdocs_material-9.6.15.tar.gz", hash = "sha256:64adf8fa8dba1a17905b6aee1894a5aafd966d4aeb44a11088519b0f5ca4f1b5", size = 3951836 } +sdist = { url = "https://files.pythonhosted.org/packages/95/c1/f804ba2db2ddc2183e900befe7dad64339a34fa935034e1ab405289d0a97/mkdocs_material-9.6.15.tar.gz", hash = "sha256:64adf8fa8dba1a17905b6aee1894a5aafd966d4aeb44a11088519b0f5ca4f1b5", size = 3951836, upload_time = "2025-07-01T10:14:15.671Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1d/30/dda19f0495a9096b64b6b3c07c4bfcff1c76ee0fc521086d53593f18b4c0/mkdocs_material-9.6.15-py3-none-any.whl", hash = "sha256:ac969c94d4fe5eb7c924b6d2f43d7db41159ea91553d18a9afc4780c34f2717a", size = 8716840 }, + { url = "https://files.pythonhosted.org/packages/1d/30/dda19f0495a9096b64b6b3c07c4bfcff1c76ee0fc521086d53593f18b4c0/mkdocs_material-9.6.15-py3-none-any.whl", hash = "sha256:ac969c94d4fe5eb7c924b6d2f43d7db41159ea91553d18a9afc4780c34f2717a", size = 8716840, upload_time = "2025-07-01T10:14:13.18Z" }, ] [[package]] name = "mkdocs-material-extensions" version = "1.3.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/79/9b/9b4c96d6593b2a541e1cb8b34899a6d021d208bb357042823d4d2cabdbe7/mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443", size = 11847 } +sdist = { url = "https://files.pythonhosted.org/packages/79/9b/9b4c96d6593b2a541e1cb8b34899a6d021d208bb357042823d4d2cabdbe7/mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443", size = 11847, upload_time = "2023-11-22T19:09:45.208Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31", size = 8728 }, + { url = "https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31", size = 8728, upload_time = "2023-11-22T19:09:43.465Z" }, ] [[package]] @@ -1063,9 +1380,9 @@ dependencies = [ { name = "jsmin" }, { name = "mkdocs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/52/67/fe4b77e7a8ae7628392e28b14122588beaf6078b53eb91c7ed000fd158ac/mkdocs-minify-plugin-0.8.0.tar.gz", hash = "sha256:bc11b78b8120d79e817308e2b11539d790d21445eb63df831e393f76e52e753d", size = 8366 } +sdist = { url = "https://files.pythonhosted.org/packages/52/67/fe4b77e7a8ae7628392e28b14122588beaf6078b53eb91c7ed000fd158ac/mkdocs-minify-plugin-0.8.0.tar.gz", hash = "sha256:bc11b78b8120d79e817308e2b11539d790d21445eb63df831e393f76e52e753d", size = 8366, upload_time = "2024-01-29T16:11:32.982Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1b/cd/2e8d0d92421916e2ea4ff97f10a544a9bd5588eb747556701c983581df13/mkdocs_minify_plugin-0.8.0-py3-none-any.whl", hash = "sha256:5fba1a3f7bd9a2142c9954a6559a57e946587b21f133165ece30ea145c66aee6", size = 6723 }, + { url = "https://files.pythonhosted.org/packages/1b/cd/2e8d0d92421916e2ea4ff97f10a544a9bd5588eb747556701c983581df13/mkdocs_minify_plugin-0.8.0-py3-none-any.whl", hash = "sha256:5fba1a3f7bd9a2142c9954a6559a57e946587b21f133165ece30ea145c66aee6", size = 6723, upload_time = "2024-01-29T16:11:31.851Z" }, ] [[package]] @@ -1075,9 +1392,49 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "mkdocs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/0a/0e/f72a506a21bdb27b807124e00c688226848a388d1fd3980b80ae3cc27203/mkdocs_open_in_new_tab-1.0.8.tar.gz", hash = "sha256:3e0dad08cc9938b0b13097be8e0aa435919de1eeb2d1a648e66b5dee8d57e048", size = 5791 } +sdist = { url = "https://files.pythonhosted.org/packages/0a/0e/f72a506a21bdb27b807124e00c688226848a388d1fd3980b80ae3cc27203/mkdocs_open_in_new_tab-1.0.8.tar.gz", hash = "sha256:3e0dad08cc9938b0b13097be8e0aa435919de1eeb2d1a648e66b5dee8d57e048", size = 5791, upload_time = "2024-11-18T13:15:13.977Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/21/94/44f3c868495481c868d08eea065c82803f1affd8553d3383b782f497613c/mkdocs_open_in_new_tab-1.0.8-py3-none-any.whl", hash = "sha256:051d767a4467b12d89827e1fea0ec660b05b027c726317fe4fceee5456e36ad2", size = 7717 }, + { url = "https://files.pythonhosted.org/packages/21/94/44f3c868495481c868d08eea065c82803f1affd8553d3383b782f497613c/mkdocs_open_in_new_tab-1.0.8-py3-none-any.whl", hash = "sha256:051d767a4467b12d89827e1fea0ec660b05b027c726317fe4fceee5456e36ad2", size = 7717, upload_time = "2024-11-18T13:15:12.286Z" }, +] + +[[package]] +name = "mkdocs-redirects" +version = "1.2.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mkdocs" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f1/a8/6d44a6cf07e969c7420cb36ab287b0669da636a2044de38a7d2208d5a758/mkdocs_redirects-1.2.2.tar.gz", hash = "sha256:3094981b42ffab29313c2c1b8ac3969861109f58b2dd58c45fc81cd44bfa0095", size = 7162, upload_time = "2024-11-07T14:57:21.109Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c4/ec/38443b1f2a3821bbcb24e46cd8ba979154417794d54baf949fefde1c2146/mkdocs_redirects-1.2.2-py3-none-any.whl", hash = "sha256:7dbfa5647b79a3589da4401403d69494bd1f4ad03b9c15136720367e1f340ed5", size = 6142, upload_time = "2024-11-07T14:57:19.143Z" }, +] + +[[package]] +name = "mkdocs-table-reader-plugin" +version = "3.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mkdocs" }, + { name = "pandas" }, + { name = "pyyaml" }, + { name = "tabulate" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a1/1b/ca35e4b51a1814924153f7c8afa5a9c2f961688a9c275fa9f4afe7f5083a/mkdocs_table_reader_plugin-3.1.0.tar.gz", hash = "sha256:eb15688ee8c0cd1a842f506f18973b87be22bd7baa5e2e551089de6b7f9ec25b", size = 12510, upload_time = "2024-08-29T14:08:09.54Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/6f/dcc966874f74f8580b99d2ffecbdc85dfd00c4a5039fedbee4ddd7fc8c7f/mkdocs_table_reader_plugin-3.1.0-py3-none-any.whl", hash = "sha256:50a1302661c14d96b90ba0434ae96110441e0c653ce23559e3c6911fe79e7bd2", size = 10564, upload_time = "2024-08-29T14:08:07.367Z" }, +] + +[[package]] +name = "mkdocs-video" +version = "1.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "lxml" }, + { name = "mkdocs" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cf/16/45213649b6756744f36f31014fc8673df1d7c998bb9a801c2d769fff4114/mkdocs-video-1.5.0.tar.gz", hash = "sha256:0defc018f4b7927f8afffc4d8e039c84dfba636dffc5e25e2bfa8d6350bc8eca", size = 5633, upload_time = "2023-03-17T17:36:43.343Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cc/3a/b51e305eca21cdd58f4eb06973099ba0ea679b1f437a92a49f8fc576310e/mkdocs_video-1.5.0-py3-none-any.whl", hash = "sha256:b35613d4dacbac2dfa94d8c2600383cda14ad99a1fa1542b5fc4e9c6d19e9fe1", size = 6570, upload_time = "2023-03-17T17:36:40.776Z" }, ] [[package]] @@ -1092,9 +1449,9 @@ dependencies = [ { name = "mkdocs-autorefs" }, { name = "pymdown-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/41/e8/d22922664a627a0d3d7ff4a6ca95800f5dde54f411982591b4621a76225d/mkdocstrings-0.29.1.tar.gz", hash = "sha256:8722f8f8c5cd75da56671e0a0c1bbed1df9946c0cef74794d6141b34011abd42", size = 1212686 } +sdist = { url = "https://files.pythonhosted.org/packages/41/e8/d22922664a627a0d3d7ff4a6ca95800f5dde54f411982591b4621a76225d/mkdocstrings-0.29.1.tar.gz", hash = "sha256:8722f8f8c5cd75da56671e0a0c1bbed1df9946c0cef74794d6141b34011abd42", size = 1212686, upload_time = "2025-03-31T08:33:11.997Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/98/14/22533a578bf8b187e05d67e2c1721ce10e3f526610eebaf7a149d557ea7a/mkdocstrings-0.29.1-py3-none-any.whl", hash = "sha256:37a9736134934eea89cbd055a513d40a020d87dfcae9e3052c2a6b8cd4af09b6", size = 1631075 }, + { url = "https://files.pythonhosted.org/packages/98/14/22533a578bf8b187e05d67e2c1721ce10e3f526610eebaf7a149d557ea7a/mkdocstrings-0.29.1-py3-none-any.whl", hash = "sha256:37a9736134934eea89cbd055a513d40a020d87dfcae9e3052c2a6b8cd4af09b6", size = 1631075, upload_time = "2025-03-31T08:33:09.661Z" }, ] [[package]] @@ -1106,9 +1463,9 @@ dependencies = [ { name = "mkdocs-autorefs" }, { name = "mkdocstrings" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/bf/ed/b886f8c714fd7cccc39b79646b627dbea84cd95c46be43459ef46852caf0/mkdocstrings_python-1.16.12.tar.gz", hash = "sha256:9b9eaa066e0024342d433e332a41095c4e429937024945fea511afe58f63175d", size = 206065 } +sdist = { url = "https://files.pythonhosted.org/packages/bf/ed/b886f8c714fd7cccc39b79646b627dbea84cd95c46be43459ef46852caf0/mkdocstrings_python-1.16.12.tar.gz", hash = "sha256:9b9eaa066e0024342d433e332a41095c4e429937024945fea511afe58f63175d", size = 206065, upload_time = "2025-06-03T12:52:49.276Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3b/dd/a24ee3de56954bfafb6ede7cd63c2413bb842cc48eb45e41c43a05a33074/mkdocstrings_python-1.16.12-py3-none-any.whl", hash = "sha256:22ded3a63b3d823d57457a70ff9860d5a4de9e8b1e482876fc9baabaf6f5f374", size = 124287 }, + { url = "https://files.pythonhosted.org/packages/3b/dd/a24ee3de56954bfafb6ede7cd63c2413bb842cc48eb45e41c43a05a33074/mkdocstrings_python-1.16.12-py3-none-any.whl", hash = "sha256:22ded3a63b3d823d57457a70ff9860d5a4de9e8b1e482876fc9baabaf6f5f374", size = 124287, upload_time = "2025-06-03T12:52:47.819Z" }, ] [[package]] @@ -1120,89 +1477,153 @@ dependencies = [ { name = "pathspec" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/81/69/92c7fa98112e4d9eb075a239caa4ef4649ad7d441545ccffbd5e34607cbb/mypy-1.16.1.tar.gz", hash = "sha256:6bd00a0a2094841c5e47e7374bb42b83d64c527a502e3334e1173a0c24437bab", size = 3324747 } +sdist = { url = "https://files.pythonhosted.org/packages/81/69/92c7fa98112e4d9eb075a239caa4ef4649ad7d441545ccffbd5e34607cbb/mypy-1.16.1.tar.gz", hash = "sha256:6bd00a0a2094841c5e47e7374bb42b83d64c527a502e3334e1173a0c24437bab", size = 3324747, upload_time = "2025-06-16T16:51:35.145Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b4/d6/39482e5fcc724c15bf6280ff5806548c7185e0c090712a3736ed4d07e8b7/mypy-1.16.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:af4792433f09575d9eeca5c63d7d90ca4aeceda9d8355e136f80f8967639183d", size = 11066493 }, - { url = "https://files.pythonhosted.org/packages/e6/e5/26c347890efc6b757f4d5bb83f4a0cf5958b8cf49c938ac99b8b72b420a6/mypy-1.16.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:66df38405fd8466ce3517eda1f6640611a0b8e70895e2a9462d1d4323c5eb4b9", size = 10081687 }, - { url = "https://files.pythonhosted.org/packages/44/c7/b5cb264c97b86914487d6a24bd8688c0172e37ec0f43e93b9691cae9468b/mypy-1.16.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:44e7acddb3c48bd2713994d098729494117803616e116032af192871aed80b79", size = 11839723 }, - { url = "https://files.pythonhosted.org/packages/15/f8/491997a9b8a554204f834ed4816bda813aefda31cf873bb099deee3c9a99/mypy-1.16.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0ab5eca37b50188163fa7c1b73c685ac66c4e9bdee4a85c9adac0e91d8895e15", size = 12722980 }, - { url = "https://files.pythonhosted.org/packages/df/f0/2bd41e174b5fd93bc9de9a28e4fb673113633b8a7f3a607fa4a73595e468/mypy-1.16.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dedb6229b2c9086247e21a83c309754b9058b438704ad2f6807f0d8227f6ebdd", size = 12903328 }, - { url = "https://files.pythonhosted.org/packages/61/81/5572108a7bec2c46b8aff7e9b524f371fe6ab5efb534d38d6b37b5490da8/mypy-1.16.1-cp312-cp312-win_amd64.whl", hash = "sha256:1f0435cf920e287ff68af3d10a118a73f212deb2ce087619eb4e648116d1fe9b", size = 9562321 }, - { url = "https://files.pythonhosted.org/packages/28/e3/96964af4a75a949e67df4b95318fe2b7427ac8189bbc3ef28f92a1c5bc56/mypy-1.16.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ddc91eb318c8751c69ddb200a5937f1232ee8efb4e64e9f4bc475a33719de438", size = 11063480 }, - { url = "https://files.pythonhosted.org/packages/f5/4d/cd1a42b8e5be278fab7010fb289d9307a63e07153f0ae1510a3d7b703193/mypy-1.16.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:87ff2c13d58bdc4bbe7dc0dedfe622c0f04e2cb2a492269f3b418df2de05c536", size = 10090538 }, - { url = "https://files.pythonhosted.org/packages/c9/4f/c3c6b4b66374b5f68bab07c8cabd63a049ff69796b844bc759a0ca99bb2a/mypy-1.16.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a7cfb0fe29fe5a9841b7c8ee6dffb52382c45acdf68f032145b75620acfbd6f", size = 11836839 }, - { url = "https://files.pythonhosted.org/packages/b4/7e/81ca3b074021ad9775e5cb97ebe0089c0f13684b066a750b7dc208438403/mypy-1.16.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:051e1677689c9d9578b9c7f4d206d763f9bbd95723cd1416fad50db49d52f359", size = 12715634 }, - { url = "https://files.pythonhosted.org/packages/e9/95/bdd40c8be346fa4c70edb4081d727a54d0a05382d84966869738cfa8a497/mypy-1.16.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d5d2309511cc56c021b4b4e462907c2b12f669b2dbeb68300110ec27723971be", size = 12895584 }, - { url = "https://files.pythonhosted.org/packages/5a/fd/d486a0827a1c597b3b48b1bdef47228a6e9ee8102ab8c28f944cb83b65dc/mypy-1.16.1-cp313-cp313-win_amd64.whl", hash = "sha256:4f58ac32771341e38a853c5d0ec0dfe27e18e27da9cdb8bbc882d2249c71a3ee", size = 9573886 }, - { url = "https://files.pythonhosted.org/packages/cf/d3/53e684e78e07c1a2bf7105715e5edd09ce951fc3f47cf9ed095ec1b7a037/mypy-1.16.1-py3-none-any.whl", hash = "sha256:5fc2ac4027d0ef28d6ba69a0343737a23c4d1b83672bf38d1fe237bdc0643b37", size = 2265923 }, + { url = "https://files.pythonhosted.org/packages/b4/d6/39482e5fcc724c15bf6280ff5806548c7185e0c090712a3736ed4d07e8b7/mypy-1.16.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:af4792433f09575d9eeca5c63d7d90ca4aeceda9d8355e136f80f8967639183d", size = 11066493, upload_time = "2025-06-16T16:47:01.683Z" }, + { url = "https://files.pythonhosted.org/packages/e6/e5/26c347890efc6b757f4d5bb83f4a0cf5958b8cf49c938ac99b8b72b420a6/mypy-1.16.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:66df38405fd8466ce3517eda1f6640611a0b8e70895e2a9462d1d4323c5eb4b9", size = 10081687, upload_time = "2025-06-16T16:48:19.367Z" }, + { url = "https://files.pythonhosted.org/packages/44/c7/b5cb264c97b86914487d6a24bd8688c0172e37ec0f43e93b9691cae9468b/mypy-1.16.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:44e7acddb3c48bd2713994d098729494117803616e116032af192871aed80b79", size = 11839723, upload_time = "2025-06-16T16:49:20.912Z" }, + { url = "https://files.pythonhosted.org/packages/15/f8/491997a9b8a554204f834ed4816bda813aefda31cf873bb099deee3c9a99/mypy-1.16.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0ab5eca37b50188163fa7c1b73c685ac66c4e9bdee4a85c9adac0e91d8895e15", size = 12722980, upload_time = "2025-06-16T16:37:40.929Z" }, + { url = "https://files.pythonhosted.org/packages/df/f0/2bd41e174b5fd93bc9de9a28e4fb673113633b8a7f3a607fa4a73595e468/mypy-1.16.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dedb6229b2c9086247e21a83c309754b9058b438704ad2f6807f0d8227f6ebdd", size = 12903328, upload_time = "2025-06-16T16:34:35.099Z" }, + { url = "https://files.pythonhosted.org/packages/61/81/5572108a7bec2c46b8aff7e9b524f371fe6ab5efb534d38d6b37b5490da8/mypy-1.16.1-cp312-cp312-win_amd64.whl", hash = "sha256:1f0435cf920e287ff68af3d10a118a73f212deb2ce087619eb4e648116d1fe9b", size = 9562321, upload_time = "2025-06-16T16:48:58.823Z" }, + { url = "https://files.pythonhosted.org/packages/28/e3/96964af4a75a949e67df4b95318fe2b7427ac8189bbc3ef28f92a1c5bc56/mypy-1.16.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ddc91eb318c8751c69ddb200a5937f1232ee8efb4e64e9f4bc475a33719de438", size = 11063480, upload_time = "2025-06-16T16:47:56.205Z" }, + { url = "https://files.pythonhosted.org/packages/f5/4d/cd1a42b8e5be278fab7010fb289d9307a63e07153f0ae1510a3d7b703193/mypy-1.16.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:87ff2c13d58bdc4bbe7dc0dedfe622c0f04e2cb2a492269f3b418df2de05c536", size = 10090538, upload_time = "2025-06-16T16:46:43.92Z" }, + { url = "https://files.pythonhosted.org/packages/c9/4f/c3c6b4b66374b5f68bab07c8cabd63a049ff69796b844bc759a0ca99bb2a/mypy-1.16.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a7cfb0fe29fe5a9841b7c8ee6dffb52382c45acdf68f032145b75620acfbd6f", size = 11836839, upload_time = "2025-06-16T16:36:28.039Z" }, + { url = "https://files.pythonhosted.org/packages/b4/7e/81ca3b074021ad9775e5cb97ebe0089c0f13684b066a750b7dc208438403/mypy-1.16.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:051e1677689c9d9578b9c7f4d206d763f9bbd95723cd1416fad50db49d52f359", size = 12715634, upload_time = "2025-06-16T16:50:34.441Z" }, + { url = "https://files.pythonhosted.org/packages/e9/95/bdd40c8be346fa4c70edb4081d727a54d0a05382d84966869738cfa8a497/mypy-1.16.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d5d2309511cc56c021b4b4e462907c2b12f669b2dbeb68300110ec27723971be", size = 12895584, upload_time = "2025-06-16T16:34:54.857Z" }, + { url = "https://files.pythonhosted.org/packages/5a/fd/d486a0827a1c597b3b48b1bdef47228a6e9ee8102ab8c28f944cb83b65dc/mypy-1.16.1-cp313-cp313-win_amd64.whl", hash = "sha256:4f58ac32771341e38a853c5d0ec0dfe27e18e27da9cdb8bbc882d2249c71a3ee", size = 9573886, upload_time = "2025-06-16T16:36:43.589Z" }, + { url = "https://files.pythonhosted.org/packages/cf/d3/53e684e78e07c1a2bf7105715e5edd09ce951fc3f47cf9ed095ec1b7a037/mypy-1.16.1-py3-none-any.whl", hash = "sha256:5fc2ac4027d0ef28d6ba69a0343737a23c4d1b83672bf38d1fe237bdc0643b37", size = 2265923, upload_time = "2025-06-16T16:48:02.366Z" }, ] [[package]] name = "mypy-extensions" version = "1.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a2/6e/371856a3fb9d31ca8dac321cda606860fa4548858c0cc45d9d1d4ca2628b/mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558", size = 6343 } +sdist = { url = "https://files.pythonhosted.org/packages/a2/6e/371856a3fb9d31ca8dac321cda606860fa4548858c0cc45d9d1d4ca2628b/mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558", size = 6343, upload_time = "2025-04-22T14:54:24.164Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505", size = 4963, upload_time = "2025-04-22T14:54:22.983Z" }, +] + +[[package]] +name = "nbclient" +version = "0.10.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jupyter-client" }, + { name = "jupyter-core" }, + { name = "nbformat" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/87/66/7ffd18d58eae90d5721f9f39212327695b749e23ad44b3881744eaf4d9e8/nbclient-0.10.2.tar.gz", hash = "sha256:90b7fc6b810630db87a6d0c2250b1f0ab4cf4d3c27a299b0cde78a4ed3fd9193", size = 62424, upload_time = "2024-12-19T10:32:27.164Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/34/6d/e7fa07f03a4a7b221d94b4d586edb754a9b0dc3c9e2c93353e9fa4e0d117/nbclient-0.10.2-py3-none-any.whl", hash = "sha256:4ffee11e788b4a27fabeb7955547e4318a5298f34342a4bfd01f2e1faaeadc3d", size = 25434, upload_time = "2024-12-19T10:32:24.139Z" }, +] + +[[package]] +name = "nbconvert" +version = "7.16.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "beautifulsoup4" }, + { name = "bleach", extra = ["css"] }, + { name = "defusedxml" }, + { name = "jinja2" }, + { name = "jupyter-core" }, + { name = "jupyterlab-pygments" }, + { name = "markupsafe" }, + { name = "mistune" }, + { name = "nbclient" }, + { name = "nbformat" }, + { name = "packaging" }, + { name = "pandocfilters" }, + { name = "pygments" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a3/59/f28e15fc47ffb73af68a8d9b47367a8630d76e97ae85ad18271b9db96fdf/nbconvert-7.16.6.tar.gz", hash = "sha256:576a7e37c6480da7b8465eefa66c17844243816ce1ccc372633c6b71c3c0f582", size = 857715, upload_time = "2025-01-28T09:29:14.724Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cc/9a/cd673b2f773a12c992f41309ef81b99da1690426bd2f96957a7ade0d3ed7/nbconvert-7.16.6-py3-none-any.whl", hash = "sha256:1375a7b67e0c2883678c48e506dc320febb57685e5ee67faa51b18a90f3a712b", size = 258525, upload_time = "2025-01-28T09:29:12.551Z" }, +] + +[[package]] +name = "nbformat" +version = "5.10.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "fastjsonschema" }, + { name = "jsonschema" }, + { name = "jupyter-core" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6d/fd/91545e604bc3dad7dca9ed03284086039b294c6b3d75c0d2fa45f9e9caf3/nbformat-5.10.4.tar.gz", hash = "sha256:322168b14f937a5d11362988ecac2a4952d3d8e3a2cbeb2319584631226d5b3a", size = 142749, upload_time = "2024-04-04T11:20:37.371Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505", size = 4963 }, + { url = "https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl", hash = "sha256:3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b", size = 78454, upload_time = "2024-04-04T11:20:34.895Z" }, ] [[package]] name = "nest-asyncio" version = "1.6.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/83/f8/51569ac65d696c8ecbee95938f89d4abf00f47d58d48f6fbabfe8f0baefe/nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe", size = 7418 } +sdist = { url = "https://files.pythonhosted.org/packages/83/f8/51569ac65d696c8ecbee95938f89d4abf00f47d58d48f6fbabfe8f0baefe/nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe", size = 7418, upload_time = "2024-01-21T14:25:19.227Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c", size = 5195 }, + { url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c", size = 5195, upload_time = "2024-01-21T14:25:17.223Z" }, +] + +[[package]] +name = "networkx" +version = "3.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6c/4f/ccdb8ad3a38e583f214547fd2f7ff1fc160c43a75af88e6aec213404b96a/networkx-3.5.tar.gz", hash = "sha256:d4c6f9cf81f52d69230866796b82afbccdec3db7ae4fbd1b65ea750feed50037", size = 2471065, upload_time = "2025-05-29T11:35:07.804Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/8d/776adee7bbf76365fdd7f2552710282c79a4ead5d2a46408c9043a2b70ba/networkx-3.5-py3-none-any.whl", hash = "sha256:0030d386a9a06dee3565298b4a734b68589749a544acbb6c412dc9e2489ec6ec", size = 2034406, upload_time = "2025-05-29T11:35:04.961Z" }, ] [[package]] name = "nodeenv" version = "1.9.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/43/16/fc88b08840de0e0a72a2f9d8c6bae36be573e475a6326ae854bcc549fc45/nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f", size = 47437 } +sdist = { url = "https://files.pythonhosted.org/packages/43/16/fc88b08840de0e0a72a2f9d8c6bae36be573e475a6326ae854bcc549fc45/nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f", size = 47437, upload_time = "2024-06-04T18:44:11.171Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d2/1d/1b658dbd2b9fa9c4c9f32accbfc0205d532c8c6194dc0f2a4c0428e7128a/nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9", size = 22314 }, + { url = "https://files.pythonhosted.org/packages/d2/1d/1b658dbd2b9fa9c4c9f32accbfc0205d532c8c6194dc0f2a4c0428e7128a/nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9", size = 22314, upload_time = "2024-06-04T18:44:08.352Z" }, ] [[package]] name = "numpy" version = "2.3.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2e/19/d7c972dfe90a353dbd3efbbe1d14a5951de80c99c9dc1b93cd998d51dc0f/numpy-2.3.1.tar.gz", hash = "sha256:1ec9ae20a4226da374362cca3c62cd753faf2f951440b0e3b98e93c235441d2b", size = 20390372 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c6/56/71ad5022e2f63cfe0ca93559403d0edef14aea70a841d640bd13cdba578e/numpy-2.3.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2959d8f268f3d8ee402b04a9ec4bb7604555aeacf78b360dc4ec27f1d508177d", size = 20896664 }, - { url = "https://files.pythonhosted.org/packages/25/65/2db52ba049813670f7f987cc5db6dac9be7cd95e923cc6832b3d32d87cef/numpy-2.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:762e0c0c6b56bdedfef9a8e1d4538556438288c4276901ea008ae44091954e29", size = 14131078 }, - { url = "https://files.pythonhosted.org/packages/57/dd/28fa3c17b0e751047ac928c1e1b6990238faad76e9b147e585b573d9d1bd/numpy-2.3.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:867ef172a0976aaa1f1d1b63cf2090de8b636a7674607d514505fb7276ab08fc", size = 5112554 }, - { url = "https://files.pythonhosted.org/packages/c9/fc/84ea0cba8e760c4644b708b6819d91784c290288c27aca916115e3311d17/numpy-2.3.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:4e602e1b8682c2b833af89ba641ad4176053aaa50f5cacda1a27004352dde943", size = 6646560 }, - { url = "https://files.pythonhosted.org/packages/61/b2/512b0c2ddec985ad1e496b0bd853eeb572315c0f07cd6997473ced8f15e2/numpy-2.3.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:8e333040d069eba1652fb08962ec5b76af7f2c7bce1df7e1418c8055cf776f25", size = 14260638 }, - { url = "https://files.pythonhosted.org/packages/6e/45/c51cb248e679a6c6ab14b7a8e3ead3f4a3fe7425fc7a6f98b3f147bec532/numpy-2.3.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:e7cbf5a5eafd8d230a3ce356d892512185230e4781a361229bd902ff403bc660", size = 16632729 }, - { url = "https://files.pythonhosted.org/packages/e4/ff/feb4be2e5c09a3da161b412019caf47183099cbea1132fd98061808c2df2/numpy-2.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5f1b8f26d1086835f442286c1d9b64bb3974b0b1e41bb105358fd07d20872952", size = 15565330 }, - { url = "https://files.pythonhosted.org/packages/bc/6d/ceafe87587101e9ab0d370e4f6e5f3f3a85b9a697f2318738e5e7e176ce3/numpy-2.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ee8340cb48c9b7a5899d1149eece41ca535513a9698098edbade2a8e7a84da77", size = 18361734 }, - { url = "https://files.pythonhosted.org/packages/2b/19/0fb49a3ea088be691f040c9bf1817e4669a339d6e98579f91859b902c636/numpy-2.3.1-cp312-cp312-win32.whl", hash = "sha256:e772dda20a6002ef7061713dc1e2585bc1b534e7909b2030b5a46dae8ff077ab", size = 6320411 }, - { url = "https://files.pythonhosted.org/packages/b1/3e/e28f4c1dd9e042eb57a3eb652f200225e311b608632bc727ae378623d4f8/numpy-2.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:cfecc7822543abdea6de08758091da655ea2210b8ffa1faf116b940693d3df76", size = 12734973 }, - { url = "https://files.pythonhosted.org/packages/04/a8/8a5e9079dc722acf53522b8f8842e79541ea81835e9b5483388701421073/numpy-2.3.1-cp312-cp312-win_arm64.whl", hash = "sha256:7be91b2239af2658653c5bb6f1b8bccafaf08226a258caf78ce44710a0160d30", size = 10191491 }, - { url = "https://files.pythonhosted.org/packages/d4/bd/35ad97006d8abff8631293f8ea6adf07b0108ce6fec68da3c3fcca1197f2/numpy-2.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:25a1992b0a3fdcdaec9f552ef10d8103186f5397ab45e2d25f8ac51b1a6b97e8", size = 20889381 }, - { url = "https://files.pythonhosted.org/packages/f1/4f/df5923874d8095b6062495b39729178eef4a922119cee32a12ee1bd4664c/numpy-2.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7dea630156d39b02a63c18f508f85010230409db5b2927ba59c8ba4ab3e8272e", size = 14152726 }, - { url = "https://files.pythonhosted.org/packages/8c/0f/a1f269b125806212a876f7efb049b06c6f8772cf0121139f97774cd95626/numpy-2.3.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:bada6058dd886061f10ea15f230ccf7dfff40572e99fef440a4a857c8728c9c0", size = 5105145 }, - { url = "https://files.pythonhosted.org/packages/6d/63/a7f7fd5f375b0361682f6ffbf686787e82b7bbd561268e4f30afad2bb3c0/numpy-2.3.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:a894f3816eb17b29e4783e5873f92faf55b710c2519e5c351767c51f79d8526d", size = 6639409 }, - { url = "https://files.pythonhosted.org/packages/bf/0d/1854a4121af895aab383f4aa233748f1df4671ef331d898e32426756a8a6/numpy-2.3.1-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:18703df6c4a4fee55fd3d6e5a253d01c5d33a295409b03fda0c86b3ca2ff41a1", size = 14257630 }, - { url = "https://files.pythonhosted.org/packages/50/30/af1b277b443f2fb08acf1c55ce9d68ee540043f158630d62cef012750f9f/numpy-2.3.1-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:5902660491bd7a48b2ec16c23ccb9124b8abfd9583c5fdfa123fe6b421e03de1", size = 16627546 }, - { url = "https://files.pythonhosted.org/packages/6e/ec/3b68220c277e463095342d254c61be8144c31208db18d3fd8ef02712bcd6/numpy-2.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:36890eb9e9d2081137bd78d29050ba63b8dab95dff7912eadf1185e80074b2a0", size = 15562538 }, - { url = "https://files.pythonhosted.org/packages/77/2b/4014f2bcc4404484021c74d4c5ee8eb3de7e3f7ac75f06672f8dcf85140a/numpy-2.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a780033466159c2270531e2b8ac063704592a0bc62ec4a1b991c7c40705eb0e8", size = 18360327 }, - { url = "https://files.pythonhosted.org/packages/40/8d/2ddd6c9b30fcf920837b8672f6c65590c7d92e43084c25fc65edc22e93ca/numpy-2.3.1-cp313-cp313-win32.whl", hash = "sha256:39bff12c076812595c3a306f22bfe49919c5513aa1e0e70fac756a0be7c2a2b8", size = 6312330 }, - { url = "https://files.pythonhosted.org/packages/dd/c8/beaba449925988d415efccb45bf977ff8327a02f655090627318f6398c7b/numpy-2.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:8d5ee6eec45f08ce507a6570e06f2f879b374a552087a4179ea7838edbcbfa42", size = 12731565 }, - { url = "https://files.pythonhosted.org/packages/0b/c3/5c0c575d7ec78c1126998071f58facfc124006635da75b090805e642c62e/numpy-2.3.1-cp313-cp313-win_arm64.whl", hash = "sha256:0c4d9e0a8368db90f93bd192bfa771ace63137c3488d198ee21dfb8e7771916e", size = 10190262 }, - { url = "https://files.pythonhosted.org/packages/ea/19/a029cd335cf72f79d2644dcfc22d90f09caa86265cbbde3b5702ccef6890/numpy-2.3.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:b0b5397374f32ec0649dd98c652a1798192042e715df918c20672c62fb52d4b8", size = 20987593 }, - { url = "https://files.pythonhosted.org/packages/25/91/8ea8894406209107d9ce19b66314194675d31761fe2cb3c84fe2eeae2f37/numpy-2.3.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:c5bdf2015ccfcee8253fb8be695516ac4457c743473a43290fd36eba6a1777eb", size = 14300523 }, - { url = "https://files.pythonhosted.org/packages/a6/7f/06187b0066eefc9e7ce77d5f2ddb4e314a55220ad62dd0bfc9f2c44bac14/numpy-2.3.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:d70f20df7f08b90a2062c1f07737dd340adccf2068d0f1b9b3d56e2038979fee", size = 5227993 }, - { url = "https://files.pythonhosted.org/packages/e8/ec/a926c293c605fa75e9cfb09f1e4840098ed46d2edaa6e2152ee35dc01ed3/numpy-2.3.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:2fb86b7e58f9ac50e1e9dd1290154107e47d1eef23a0ae9145ded06ea606f992", size = 6736652 }, - { url = "https://files.pythonhosted.org/packages/e3/62/d68e52fb6fde5586650d4c0ce0b05ff3a48ad4df4ffd1b8866479d1d671d/numpy-2.3.1-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:23ab05b2d241f76cb883ce8b9a93a680752fbfcbd51c50eff0b88b979e471d8c", size = 14331561 }, - { url = "https://files.pythonhosted.org/packages/fc/ec/b74d3f2430960044bdad6900d9f5edc2dc0fb8bf5a0be0f65287bf2cbe27/numpy-2.3.1-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:ce2ce9e5de4703a673e705183f64fd5da5bf36e7beddcb63a25ee2286e71ca48", size = 16693349 }, - { url = "https://files.pythonhosted.org/packages/0d/15/def96774b9d7eb198ddadfcbd20281b20ebb510580419197e225f5c55c3e/numpy-2.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c4913079974eeb5c16ccfd2b1f09354b8fed7e0d6f2cab933104a09a6419b1ee", size = 15642053 }, - { url = "https://files.pythonhosted.org/packages/2b/57/c3203974762a759540c6ae71d0ea2341c1fa41d84e4971a8e76d7141678a/numpy-2.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:010ce9b4f00d5c036053ca684c77441f2f2c934fd23bee058b4d6f196efd8280", size = 18434184 }, - { url = "https://files.pythonhosted.org/packages/22/8a/ccdf201457ed8ac6245187850aff4ca56a79edbea4829f4e9f14d46fa9a5/numpy-2.3.1-cp313-cp313t-win32.whl", hash = "sha256:6269b9edfe32912584ec496d91b00b6d34282ca1d07eb10e82dfc780907d6c2e", size = 6440678 }, - { url = "https://files.pythonhosted.org/packages/f1/7e/7f431d8bd8eb7e03d79294aed238b1b0b174b3148570d03a8a8a8f6a0da9/numpy-2.3.1-cp313-cp313t-win_amd64.whl", hash = "sha256:2a809637460e88a113e186e87f228d74ae2852a2e0c44de275263376f17b5bdc", size = 12870697 }, - { url = "https://files.pythonhosted.org/packages/d4/ca/af82bf0fad4c3e573c6930ed743b5308492ff19917c7caaf2f9b6f9e2e98/numpy-2.3.1-cp313-cp313t-win_arm64.whl", hash = "sha256:eccb9a159db9aed60800187bc47a6d3451553f0e1b08b068d8b277ddfbb9b244", size = 10260376 }, +sdist = { url = "https://files.pythonhosted.org/packages/2e/19/d7c972dfe90a353dbd3efbbe1d14a5951de80c99c9dc1b93cd998d51dc0f/numpy-2.3.1.tar.gz", hash = "sha256:1ec9ae20a4226da374362cca3c62cd753faf2f951440b0e3b98e93c235441d2b", size = 20390372, upload_time = "2025-06-21T12:28:33.469Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c6/56/71ad5022e2f63cfe0ca93559403d0edef14aea70a841d640bd13cdba578e/numpy-2.3.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2959d8f268f3d8ee402b04a9ec4bb7604555aeacf78b360dc4ec27f1d508177d", size = 20896664, upload_time = "2025-06-21T12:15:30.845Z" }, + { url = "https://files.pythonhosted.org/packages/25/65/2db52ba049813670f7f987cc5db6dac9be7cd95e923cc6832b3d32d87cef/numpy-2.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:762e0c0c6b56bdedfef9a8e1d4538556438288c4276901ea008ae44091954e29", size = 14131078, upload_time = "2025-06-21T12:15:52.23Z" }, + { url = "https://files.pythonhosted.org/packages/57/dd/28fa3c17b0e751047ac928c1e1b6990238faad76e9b147e585b573d9d1bd/numpy-2.3.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:867ef172a0976aaa1f1d1b63cf2090de8b636a7674607d514505fb7276ab08fc", size = 5112554, upload_time = "2025-06-21T12:16:01.434Z" }, + { url = "https://files.pythonhosted.org/packages/c9/fc/84ea0cba8e760c4644b708b6819d91784c290288c27aca916115e3311d17/numpy-2.3.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:4e602e1b8682c2b833af89ba641ad4176053aaa50f5cacda1a27004352dde943", size = 6646560, upload_time = "2025-06-21T12:16:11.895Z" }, + { url = "https://files.pythonhosted.org/packages/61/b2/512b0c2ddec985ad1e496b0bd853eeb572315c0f07cd6997473ced8f15e2/numpy-2.3.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:8e333040d069eba1652fb08962ec5b76af7f2c7bce1df7e1418c8055cf776f25", size = 14260638, upload_time = "2025-06-21T12:16:32.611Z" }, + { url = "https://files.pythonhosted.org/packages/6e/45/c51cb248e679a6c6ab14b7a8e3ead3f4a3fe7425fc7a6f98b3f147bec532/numpy-2.3.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:e7cbf5a5eafd8d230a3ce356d892512185230e4781a361229bd902ff403bc660", size = 16632729, upload_time = "2025-06-21T12:16:57.439Z" }, + { url = "https://files.pythonhosted.org/packages/e4/ff/feb4be2e5c09a3da161b412019caf47183099cbea1132fd98061808c2df2/numpy-2.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5f1b8f26d1086835f442286c1d9b64bb3974b0b1e41bb105358fd07d20872952", size = 15565330, upload_time = "2025-06-21T12:17:20.638Z" }, + { url = "https://files.pythonhosted.org/packages/bc/6d/ceafe87587101e9ab0d370e4f6e5f3f3a85b9a697f2318738e5e7e176ce3/numpy-2.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ee8340cb48c9b7a5899d1149eece41ca535513a9698098edbade2a8e7a84da77", size = 18361734, upload_time = "2025-06-21T12:17:47.938Z" }, + { url = "https://files.pythonhosted.org/packages/2b/19/0fb49a3ea088be691f040c9bf1817e4669a339d6e98579f91859b902c636/numpy-2.3.1-cp312-cp312-win32.whl", hash = "sha256:e772dda20a6002ef7061713dc1e2585bc1b534e7909b2030b5a46dae8ff077ab", size = 6320411, upload_time = "2025-06-21T12:17:58.475Z" }, + { url = "https://files.pythonhosted.org/packages/b1/3e/e28f4c1dd9e042eb57a3eb652f200225e311b608632bc727ae378623d4f8/numpy-2.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:cfecc7822543abdea6de08758091da655ea2210b8ffa1faf116b940693d3df76", size = 12734973, upload_time = "2025-06-21T12:18:17.601Z" }, + { url = "https://files.pythonhosted.org/packages/04/a8/8a5e9079dc722acf53522b8f8842e79541ea81835e9b5483388701421073/numpy-2.3.1-cp312-cp312-win_arm64.whl", hash = "sha256:7be91b2239af2658653c5bb6f1b8bccafaf08226a258caf78ce44710a0160d30", size = 10191491, upload_time = "2025-06-21T12:18:33.585Z" }, + { url = "https://files.pythonhosted.org/packages/d4/bd/35ad97006d8abff8631293f8ea6adf07b0108ce6fec68da3c3fcca1197f2/numpy-2.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:25a1992b0a3fdcdaec9f552ef10d8103186f5397ab45e2d25f8ac51b1a6b97e8", size = 20889381, upload_time = "2025-06-21T12:19:04.103Z" }, + { url = "https://files.pythonhosted.org/packages/f1/4f/df5923874d8095b6062495b39729178eef4a922119cee32a12ee1bd4664c/numpy-2.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7dea630156d39b02a63c18f508f85010230409db5b2927ba59c8ba4ab3e8272e", size = 14152726, upload_time = "2025-06-21T12:19:25.599Z" }, + { url = "https://files.pythonhosted.org/packages/8c/0f/a1f269b125806212a876f7efb049b06c6f8772cf0121139f97774cd95626/numpy-2.3.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:bada6058dd886061f10ea15f230ccf7dfff40572e99fef440a4a857c8728c9c0", size = 5105145, upload_time = "2025-06-21T12:19:34.782Z" }, + { url = "https://files.pythonhosted.org/packages/6d/63/a7f7fd5f375b0361682f6ffbf686787e82b7bbd561268e4f30afad2bb3c0/numpy-2.3.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:a894f3816eb17b29e4783e5873f92faf55b710c2519e5c351767c51f79d8526d", size = 6639409, upload_time = "2025-06-21T12:19:45.228Z" }, + { url = "https://files.pythonhosted.org/packages/bf/0d/1854a4121af895aab383f4aa233748f1df4671ef331d898e32426756a8a6/numpy-2.3.1-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:18703df6c4a4fee55fd3d6e5a253d01c5d33a295409b03fda0c86b3ca2ff41a1", size = 14257630, upload_time = "2025-06-21T12:20:06.544Z" }, + { url = "https://files.pythonhosted.org/packages/50/30/af1b277b443f2fb08acf1c55ce9d68ee540043f158630d62cef012750f9f/numpy-2.3.1-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:5902660491bd7a48b2ec16c23ccb9124b8abfd9583c5fdfa123fe6b421e03de1", size = 16627546, upload_time = "2025-06-21T12:20:31.002Z" }, + { url = "https://files.pythonhosted.org/packages/6e/ec/3b68220c277e463095342d254c61be8144c31208db18d3fd8ef02712bcd6/numpy-2.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:36890eb9e9d2081137bd78d29050ba63b8dab95dff7912eadf1185e80074b2a0", size = 15562538, upload_time = "2025-06-21T12:20:54.322Z" }, + { url = "https://files.pythonhosted.org/packages/77/2b/4014f2bcc4404484021c74d4c5ee8eb3de7e3f7ac75f06672f8dcf85140a/numpy-2.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a780033466159c2270531e2b8ac063704592a0bc62ec4a1b991c7c40705eb0e8", size = 18360327, upload_time = "2025-06-21T12:21:21.053Z" }, + { url = "https://files.pythonhosted.org/packages/40/8d/2ddd6c9b30fcf920837b8672f6c65590c7d92e43084c25fc65edc22e93ca/numpy-2.3.1-cp313-cp313-win32.whl", hash = "sha256:39bff12c076812595c3a306f22bfe49919c5513aa1e0e70fac756a0be7c2a2b8", size = 6312330, upload_time = "2025-06-21T12:25:07.447Z" }, + { url = "https://files.pythonhosted.org/packages/dd/c8/beaba449925988d415efccb45bf977ff8327a02f655090627318f6398c7b/numpy-2.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:8d5ee6eec45f08ce507a6570e06f2f879b374a552087a4179ea7838edbcbfa42", size = 12731565, upload_time = "2025-06-21T12:25:26.444Z" }, + { url = "https://files.pythonhosted.org/packages/0b/c3/5c0c575d7ec78c1126998071f58facfc124006635da75b090805e642c62e/numpy-2.3.1-cp313-cp313-win_arm64.whl", hash = "sha256:0c4d9e0a8368db90f93bd192bfa771ace63137c3488d198ee21dfb8e7771916e", size = 10190262, upload_time = "2025-06-21T12:25:42.196Z" }, + { url = "https://files.pythonhosted.org/packages/ea/19/a029cd335cf72f79d2644dcfc22d90f09caa86265cbbde3b5702ccef6890/numpy-2.3.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:b0b5397374f32ec0649dd98c652a1798192042e715df918c20672c62fb52d4b8", size = 20987593, upload_time = "2025-06-21T12:21:51.664Z" }, + { url = "https://files.pythonhosted.org/packages/25/91/8ea8894406209107d9ce19b66314194675d31761fe2cb3c84fe2eeae2f37/numpy-2.3.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:c5bdf2015ccfcee8253fb8be695516ac4457c743473a43290fd36eba6a1777eb", size = 14300523, upload_time = "2025-06-21T12:22:13.583Z" }, + { url = "https://files.pythonhosted.org/packages/a6/7f/06187b0066eefc9e7ce77d5f2ddb4e314a55220ad62dd0bfc9f2c44bac14/numpy-2.3.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:d70f20df7f08b90a2062c1f07737dd340adccf2068d0f1b9b3d56e2038979fee", size = 5227993, upload_time = "2025-06-21T12:22:22.53Z" }, + { url = "https://files.pythonhosted.org/packages/e8/ec/a926c293c605fa75e9cfb09f1e4840098ed46d2edaa6e2152ee35dc01ed3/numpy-2.3.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:2fb86b7e58f9ac50e1e9dd1290154107e47d1eef23a0ae9145ded06ea606f992", size = 6736652, upload_time = "2025-06-21T12:22:33.629Z" }, + { url = "https://files.pythonhosted.org/packages/e3/62/d68e52fb6fde5586650d4c0ce0b05ff3a48ad4df4ffd1b8866479d1d671d/numpy-2.3.1-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:23ab05b2d241f76cb883ce8b9a93a680752fbfcbd51c50eff0b88b979e471d8c", size = 14331561, upload_time = "2025-06-21T12:22:55.056Z" }, + { url = "https://files.pythonhosted.org/packages/fc/ec/b74d3f2430960044bdad6900d9f5edc2dc0fb8bf5a0be0f65287bf2cbe27/numpy-2.3.1-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:ce2ce9e5de4703a673e705183f64fd5da5bf36e7beddcb63a25ee2286e71ca48", size = 16693349, upload_time = "2025-06-21T12:23:20.53Z" }, + { url = "https://files.pythonhosted.org/packages/0d/15/def96774b9d7eb198ddadfcbd20281b20ebb510580419197e225f5c55c3e/numpy-2.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c4913079974eeb5c16ccfd2b1f09354b8fed7e0d6f2cab933104a09a6419b1ee", size = 15642053, upload_time = "2025-06-21T12:23:43.697Z" }, + { url = "https://files.pythonhosted.org/packages/2b/57/c3203974762a759540c6ae71d0ea2341c1fa41d84e4971a8e76d7141678a/numpy-2.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:010ce9b4f00d5c036053ca684c77441f2f2c934fd23bee058b4d6f196efd8280", size = 18434184, upload_time = "2025-06-21T12:24:10.708Z" }, + { url = "https://files.pythonhosted.org/packages/22/8a/ccdf201457ed8ac6245187850aff4ca56a79edbea4829f4e9f14d46fa9a5/numpy-2.3.1-cp313-cp313t-win32.whl", hash = "sha256:6269b9edfe32912584ec496d91b00b6d34282ca1d07eb10e82dfc780907d6c2e", size = 6440678, upload_time = "2025-06-21T12:24:21.596Z" }, + { url = "https://files.pythonhosted.org/packages/f1/7e/7f431d8bd8eb7e03d79294aed238b1b0b174b3148570d03a8a8a8f6a0da9/numpy-2.3.1-cp313-cp313t-win_amd64.whl", hash = "sha256:2a809637460e88a113e186e87f228d74ae2852a2e0c44de275263376f17b5bdc", size = 12870697, upload_time = "2025-06-21T12:24:40.644Z" }, + { url = "https://files.pythonhosted.org/packages/d4/ca/af82bf0fad4c3e573c6930ed743b5308492ff19917c7caaf2f9b6f9e2e98/numpy-2.3.1-cp313-cp313t-win_arm64.whl", hash = "sha256:eccb9a159db9aed60800187bc47a6d3451553f0e1b08b068d8b277ddfbb9b244", size = 10260376, upload_time = "2025-06-21T12:24:56.884Z" }, ] [[package]] @@ -1216,9 +1637,9 @@ dependencies = [ { name = "pyarrow" }, { name = "requests" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/1a/d1/5c0bb2a714ebea7df131b8e87010eab39d0df75878f6785f2a214ff66bb2/oda_reader-1.2.2.tar.gz", hash = "sha256:55be081e1744e75184eca3d09e794fad71958201d08b48fb497aac97a95f3685", size = 35630 } +sdist = { url = "https://files.pythonhosted.org/packages/1a/d1/5c0bb2a714ebea7df131b8e87010eab39d0df75878f6785f2a214ff66bb2/oda_reader-1.2.2.tar.gz", hash = "sha256:55be081e1744e75184eca3d09e794fad71958201d08b48fb497aac97a95f3685", size = 35630, upload_time = "2025-06-16T16:15:05.49Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d8/ec/59338ec9108848dc53f50e7381b9817595bf98f414f4a732100a06828a3b/oda_reader-1.2.2-py3-none-any.whl", hash = "sha256:7f7b854ab1e9bc2cf64b6c63bd56a2ac64cb90ec054518fd01b741fd518cf007", size = 45314 }, + { url = "https://files.pythonhosted.org/packages/d8/ec/59338ec9108848dc53f50e7381b9817595bf98f414f4a732100a06828a3b/oda_reader-1.2.2-py3-none-any.whl", hash = "sha256:7f7b854ab1e9bc2cf64b6c63bd56a2ac64cb90ec054518fd01b741fd518cf007", size = 45314, upload_time = "2025-06-16T16:15:04.328Z" }, ] [[package]] @@ -1228,27 +1649,27 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "et-xmlfile" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/3d/f9/88d94a75de065ea32619465d2f77b29a0469500e99012523b91cc4141cd1/openpyxl-3.1.5.tar.gz", hash = "sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050", size = 186464 } +sdist = { url = "https://files.pythonhosted.org/packages/3d/f9/88d94a75de065ea32619465d2f77b29a0469500e99012523b91cc4141cd1/openpyxl-3.1.5.tar.gz", hash = "sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050", size = 186464, upload_time = "2024-06-28T14:03:44.161Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl", hash = "sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2", size = 250910 }, + { url = "https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl", hash = "sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2", size = 250910, upload_time = "2024-06-28T14:03:41.161Z" }, ] [[package]] name = "packaging" version = "25.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727 } +sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727, upload_time = "2025-04-19T11:48:59.673Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469 }, + { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469, upload_time = "2025-04-19T11:48:57.875Z" }, ] [[package]] name = "paginate" version = "0.5.7" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ec/46/68dde5b6bc00c1296ec6466ab27dddede6aec9af1b99090e1107091b3b84/paginate-0.5.7.tar.gz", hash = "sha256:22bd083ab41e1a8b4f3690544afb2c60c25e5c9a63a30fa2f483f6c60c8e5945", size = 19252 } +sdist = { url = "https://files.pythonhosted.org/packages/ec/46/68dde5b6bc00c1296ec6466ab27dddede6aec9af1b99090e1107091b3b84/paginate-0.5.7.tar.gz", hash = "sha256:22bd083ab41e1a8b4f3690544afb2c60c25e5c9a63a30fa2f483f6c60c8e5945", size = 19252, upload_time = "2024-08-25T14:17:24.139Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl", hash = "sha256:b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591", size = 13746 }, + { url = "https://files.pythonhosted.org/packages/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl", hash = "sha256:b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591", size = 13746, upload_time = "2024-08-25T14:17:22.55Z" }, ] [[package]] @@ -1261,53 +1682,62 @@ dependencies = [ { name = "pytz" }, { name = "tzdata" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d1/6f/75aa71f8a14267117adeeed5d21b204770189c0a0025acbdc03c337b28fc/pandas-2.3.1.tar.gz", hash = "sha256:0a95b9ac964fe83ce317827f80304d37388ea77616b1425f0ae41c9d2d0d7bb2", size = 4487493 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/46/de/b8445e0f5d217a99fe0eeb2f4988070908979bec3587c0633e5428ab596c/pandas-2.3.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:689968e841136f9e542020698ee1c4fbe9caa2ed2213ae2388dc7b81721510d3", size = 11588172 }, - { url = "https://files.pythonhosted.org/packages/1e/e0/801cdb3564e65a5ac041ab99ea6f1d802a6c325bb6e58c79c06a3f1cd010/pandas-2.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:025e92411c16cbe5bb2a4abc99732a6b132f439b8aab23a59fa593eb00704232", size = 10717365 }, - { url = "https://files.pythonhosted.org/packages/51/a5/c76a8311833c24ae61a376dbf360eb1b1c9247a5d9c1e8b356563b31b80c/pandas-2.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b7ff55f31c4fcb3e316e8f7fa194566b286d6ac430afec0d461163312c5841e", size = 11280411 }, - { url = "https://files.pythonhosted.org/packages/da/01/e383018feba0a1ead6cf5fe8728e5d767fee02f06a3d800e82c489e5daaf/pandas-2.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7dcb79bf373a47d2a40cf7232928eb7540155abbc460925c2c96d2d30b006eb4", size = 11988013 }, - { url = "https://files.pythonhosted.org/packages/5b/14/cec7760d7c9507f11c97d64f29022e12a6cc4fc03ac694535e89f88ad2ec/pandas-2.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:56a342b231e8862c96bdb6ab97170e203ce511f4d0429589c8ede1ee8ece48b8", size = 12767210 }, - { url = "https://files.pythonhosted.org/packages/50/b9/6e2d2c6728ed29fb3d4d4d302504fb66f1a543e37eb2e43f352a86365cdf/pandas-2.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ca7ed14832bce68baef331f4d7f294411bed8efd032f8109d690df45e00c4679", size = 13440571 }, - { url = "https://files.pythonhosted.org/packages/80/a5/3a92893e7399a691bad7664d977cb5e7c81cf666c81f89ea76ba2bff483d/pandas-2.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:ac942bfd0aca577bef61f2bc8da8147c4ef6879965ef883d8e8d5d2dc3e744b8", size = 10987601 }, - { url = "https://files.pythonhosted.org/packages/32/ed/ff0a67a2c5505e1854e6715586ac6693dd860fbf52ef9f81edee200266e7/pandas-2.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9026bd4a80108fac2239294a15ef9003c4ee191a0f64b90f170b40cfb7cf2d22", size = 11531393 }, - { url = "https://files.pythonhosted.org/packages/c7/db/d8f24a7cc9fb0972adab0cc80b6817e8bef888cfd0024eeb5a21c0bb5c4a/pandas-2.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6de8547d4fdb12421e2d047a2c446c623ff4c11f47fddb6b9169eb98ffba485a", size = 10668750 }, - { url = "https://files.pythonhosted.org/packages/0f/b0/80f6ec783313f1e2356b28b4fd8d2148c378370045da918c73145e6aab50/pandas-2.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:782647ddc63c83133b2506912cc6b108140a38a37292102aaa19c81c83db2928", size = 11342004 }, - { url = "https://files.pythonhosted.org/packages/e9/e2/20a317688435470872885e7fc8f95109ae9683dec7c50be29b56911515a5/pandas-2.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ba6aff74075311fc88504b1db890187a3cd0f887a5b10f5525f8e2ef55bfdb9", size = 12050869 }, - { url = "https://files.pythonhosted.org/packages/55/79/20d746b0a96c67203a5bee5fb4e00ac49c3e8009a39e1f78de264ecc5729/pandas-2.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e5635178b387bd2ba4ac040f82bc2ef6e6b500483975c4ebacd34bec945fda12", size = 12750218 }, - { url = "https://files.pythonhosted.org/packages/7c/0f/145c8b41e48dbf03dd18fdd7f24f8ba95b8254a97a3379048378f33e7838/pandas-2.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6f3bf5ec947526106399a9e1d26d40ee2b259c66422efdf4de63c848492d91bb", size = 13416763 }, - { url = "https://files.pythonhosted.org/packages/b2/c0/54415af59db5cdd86a3d3bf79863e8cc3fa9ed265f0745254061ac09d5f2/pandas-2.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:1c78cf43c8fde236342a1cb2c34bcff89564a7bfed7e474ed2fffa6aed03a956", size = 10987482 }, - { url = "https://files.pythonhosted.org/packages/48/64/2fd2e400073a1230e13b8cd604c9bc95d9e3b962e5d44088ead2e8f0cfec/pandas-2.3.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:8dfc17328e8da77be3cf9f47509e5637ba8f137148ed0e9b5241e1baf526e20a", size = 12029159 }, - { url = "https://files.pythonhosted.org/packages/d8/0a/d84fd79b0293b7ef88c760d7dca69828d867c89b6d9bc52d6a27e4d87316/pandas-2.3.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:ec6c851509364c59a5344458ab935e6451b31b818be467eb24b0fe89bd05b6b9", size = 11393287 }, - { url = "https://files.pythonhosted.org/packages/50/ae/ff885d2b6e88f3c7520bb74ba319268b42f05d7e583b5dded9837da2723f/pandas-2.3.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:911580460fc4884d9b05254b38a6bfadddfcc6aaef856fb5859e7ca202e45275", size = 11309381 }, - { url = "https://files.pythonhosted.org/packages/85/86/1fa345fc17caf5d7780d2699985c03dbe186c68fee00b526813939062bb0/pandas-2.3.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f4d6feeba91744872a600e6edbbd5b033005b431d5ae8379abee5bcfa479fab", size = 11883998 }, - { url = "https://files.pythonhosted.org/packages/81/aa/e58541a49b5e6310d89474333e994ee57fea97c8aaa8fc7f00b873059bbf/pandas-2.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:fe37e757f462d31a9cd7580236a82f353f5713a80e059a29753cf938c6775d96", size = 12704705 }, - { url = "https://files.pythonhosted.org/packages/d5/f9/07086f5b0f2a19872554abeea7658200824f5835c58a106fa8f2ae96a46c/pandas-2.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5db9637dbc24b631ff3707269ae4559bce4b7fd75c1c4d7e13f40edc42df4444", size = 13189044 }, +sdist = { url = "https://files.pythonhosted.org/packages/d1/6f/75aa71f8a14267117adeeed5d21b204770189c0a0025acbdc03c337b28fc/pandas-2.3.1.tar.gz", hash = "sha256:0a95b9ac964fe83ce317827f80304d37388ea77616b1425f0ae41c9d2d0d7bb2", size = 4487493, upload_time = "2025-07-07T19:20:04.079Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/46/de/b8445e0f5d217a99fe0eeb2f4988070908979bec3587c0633e5428ab596c/pandas-2.3.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:689968e841136f9e542020698ee1c4fbe9caa2ed2213ae2388dc7b81721510d3", size = 11588172, upload_time = "2025-07-07T19:18:52.054Z" }, + { url = "https://files.pythonhosted.org/packages/1e/e0/801cdb3564e65a5ac041ab99ea6f1d802a6c325bb6e58c79c06a3f1cd010/pandas-2.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:025e92411c16cbe5bb2a4abc99732a6b132f439b8aab23a59fa593eb00704232", size = 10717365, upload_time = "2025-07-07T19:18:54.785Z" }, + { url = "https://files.pythonhosted.org/packages/51/a5/c76a8311833c24ae61a376dbf360eb1b1c9247a5d9c1e8b356563b31b80c/pandas-2.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b7ff55f31c4fcb3e316e8f7fa194566b286d6ac430afec0d461163312c5841e", size = 11280411, upload_time = "2025-07-07T19:18:57.045Z" }, + { url = "https://files.pythonhosted.org/packages/da/01/e383018feba0a1ead6cf5fe8728e5d767fee02f06a3d800e82c489e5daaf/pandas-2.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7dcb79bf373a47d2a40cf7232928eb7540155abbc460925c2c96d2d30b006eb4", size = 11988013, upload_time = "2025-07-07T19:18:59.771Z" }, + { url = "https://files.pythonhosted.org/packages/5b/14/cec7760d7c9507f11c97d64f29022e12a6cc4fc03ac694535e89f88ad2ec/pandas-2.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:56a342b231e8862c96bdb6ab97170e203ce511f4d0429589c8ede1ee8ece48b8", size = 12767210, upload_time = "2025-07-07T19:19:02.944Z" }, + { url = "https://files.pythonhosted.org/packages/50/b9/6e2d2c6728ed29fb3d4d4d302504fb66f1a543e37eb2e43f352a86365cdf/pandas-2.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ca7ed14832bce68baef331f4d7f294411bed8efd032f8109d690df45e00c4679", size = 13440571, upload_time = "2025-07-07T19:19:06.82Z" }, + { url = "https://files.pythonhosted.org/packages/80/a5/3a92893e7399a691bad7664d977cb5e7c81cf666c81f89ea76ba2bff483d/pandas-2.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:ac942bfd0aca577bef61f2bc8da8147c4ef6879965ef883d8e8d5d2dc3e744b8", size = 10987601, upload_time = "2025-07-07T19:19:09.589Z" }, + { url = "https://files.pythonhosted.org/packages/32/ed/ff0a67a2c5505e1854e6715586ac6693dd860fbf52ef9f81edee200266e7/pandas-2.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9026bd4a80108fac2239294a15ef9003c4ee191a0f64b90f170b40cfb7cf2d22", size = 11531393, upload_time = "2025-07-07T19:19:12.245Z" }, + { url = "https://files.pythonhosted.org/packages/c7/db/d8f24a7cc9fb0972adab0cc80b6817e8bef888cfd0024eeb5a21c0bb5c4a/pandas-2.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6de8547d4fdb12421e2d047a2c446c623ff4c11f47fddb6b9169eb98ffba485a", size = 10668750, upload_time = "2025-07-07T19:19:14.612Z" }, + { url = "https://files.pythonhosted.org/packages/0f/b0/80f6ec783313f1e2356b28b4fd8d2148c378370045da918c73145e6aab50/pandas-2.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:782647ddc63c83133b2506912cc6b108140a38a37292102aaa19c81c83db2928", size = 11342004, upload_time = "2025-07-07T19:19:16.857Z" }, + { url = "https://files.pythonhosted.org/packages/e9/e2/20a317688435470872885e7fc8f95109ae9683dec7c50be29b56911515a5/pandas-2.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ba6aff74075311fc88504b1db890187a3cd0f887a5b10f5525f8e2ef55bfdb9", size = 12050869, upload_time = "2025-07-07T19:19:19.265Z" }, + { url = "https://files.pythonhosted.org/packages/55/79/20d746b0a96c67203a5bee5fb4e00ac49c3e8009a39e1f78de264ecc5729/pandas-2.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e5635178b387bd2ba4ac040f82bc2ef6e6b500483975c4ebacd34bec945fda12", size = 12750218, upload_time = "2025-07-07T19:19:21.547Z" }, + { url = "https://files.pythonhosted.org/packages/7c/0f/145c8b41e48dbf03dd18fdd7f24f8ba95b8254a97a3379048378f33e7838/pandas-2.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6f3bf5ec947526106399a9e1d26d40ee2b259c66422efdf4de63c848492d91bb", size = 13416763, upload_time = "2025-07-07T19:19:23.939Z" }, + { url = "https://files.pythonhosted.org/packages/b2/c0/54415af59db5cdd86a3d3bf79863e8cc3fa9ed265f0745254061ac09d5f2/pandas-2.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:1c78cf43c8fde236342a1cb2c34bcff89564a7bfed7e474ed2fffa6aed03a956", size = 10987482, upload_time = "2025-07-07T19:19:42.699Z" }, + { url = "https://files.pythonhosted.org/packages/48/64/2fd2e400073a1230e13b8cd604c9bc95d9e3b962e5d44088ead2e8f0cfec/pandas-2.3.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:8dfc17328e8da77be3cf9f47509e5637ba8f137148ed0e9b5241e1baf526e20a", size = 12029159, upload_time = "2025-07-07T19:19:26.362Z" }, + { url = "https://files.pythonhosted.org/packages/d8/0a/d84fd79b0293b7ef88c760d7dca69828d867c89b6d9bc52d6a27e4d87316/pandas-2.3.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:ec6c851509364c59a5344458ab935e6451b31b818be467eb24b0fe89bd05b6b9", size = 11393287, upload_time = "2025-07-07T19:19:29.157Z" }, + { url = "https://files.pythonhosted.org/packages/50/ae/ff885d2b6e88f3c7520bb74ba319268b42f05d7e583b5dded9837da2723f/pandas-2.3.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:911580460fc4884d9b05254b38a6bfadddfcc6aaef856fb5859e7ca202e45275", size = 11309381, upload_time = "2025-07-07T19:19:31.436Z" }, + { url = "https://files.pythonhosted.org/packages/85/86/1fa345fc17caf5d7780d2699985c03dbe186c68fee00b526813939062bb0/pandas-2.3.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f4d6feeba91744872a600e6edbbd5b033005b431d5ae8379abee5bcfa479fab", size = 11883998, upload_time = "2025-07-07T19:19:34.267Z" }, + { url = "https://files.pythonhosted.org/packages/81/aa/e58541a49b5e6310d89474333e994ee57fea97c8aaa8fc7f00b873059bbf/pandas-2.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:fe37e757f462d31a9cd7580236a82f353f5713a80e059a29753cf938c6775d96", size = 12704705, upload_time = "2025-07-07T19:19:36.856Z" }, + { url = "https://files.pythonhosted.org/packages/d5/f9/07086f5b0f2a19872554abeea7658200824f5835c58a106fa8f2ae96a46c/pandas-2.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5db9637dbc24b631ff3707269ae4559bce4b7fd75c1c4d7e13f40edc42df4444", size = 13189044, upload_time = "2025-07-07T19:19:39.999Z" }, +] + +[[package]] +name = "pandocfilters" +version = "1.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/70/6f/3dd4940bbe001c06a65f88e36bad298bc7a0de5036115639926b0c5c0458/pandocfilters-1.5.1.tar.gz", hash = "sha256:002b4a555ee4ebc03f8b66307e287fa492e4a77b4ea14d3f934328297bb4939e", size = 8454, upload_time = "2024-01-18T20:08:13.726Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/af/4fbc8cab944db5d21b7e2a5b8e9211a03a79852b1157e2c102fcc61ac440/pandocfilters-1.5.1-py2.py3-none-any.whl", hash = "sha256:93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc", size = 8663, upload_time = "2024-01-18T20:08:11.28Z" }, ] [[package]] name = "parso" version = "0.8.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/66/94/68e2e17afaa9169cf6412ab0f28623903be73d1b32e208d9e8e541bb086d/parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d", size = 400609 } +sdist = { url = "https://files.pythonhosted.org/packages/66/94/68e2e17afaa9169cf6412ab0f28623903be73d1b32e208d9e8e541bb086d/parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d", size = 400609, upload_time = "2024-04-05T09:43:55.897Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c6/ac/dac4a63f978e4dcb3c6d3a78c4d8e0192a113d288502a1216950c41b1027/parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18", size = 103650 }, + { url = "https://files.pythonhosted.org/packages/c6/ac/dac4a63f978e4dcb3c6d3a78c4d8e0192a113d288502a1216950c41b1027/parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18", size = 103650, upload_time = "2024-04-05T09:43:53.299Z" }, ] [[package]] name = "pathspec" version = "0.12.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ca/bc/f35b8446f4531a7cb215605d100cd88b7ac6f44ab3fc94870c120ab3adbf/pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712", size = 51043 } +sdist = { url = "https://files.pythonhosted.org/packages/ca/bc/f35b8446f4531a7cb215605d100cd88b7ac6f44ab3fc94870c120ab3adbf/pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712", size = 51043, upload_time = "2023-12-10T22:30:45Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", size = 31191 }, + { url = "https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", size = 31191, upload_time = "2023-12-10T22:30:43.14Z" }, ] [[package]] name = "petl" version = "1.7.16" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/99/28/ce7321fbd3b981fd9c212adf7455e0e4e42babebd83b92e24f8265d13dd3/petl-1.7.16.tar.gz", hash = "sha256:9c2fea64d859da45e120fd86d471e5387396cc45d5d4986efa79679f18eb8752", size = 420780 } +sdist = { url = "https://files.pythonhosted.org/packages/99/28/ce7321fbd3b981fd9c212adf7455e0e4e42babebd83b92e24f8265d13dd3/petl-1.7.16.tar.gz", hash = "sha256:9c2fea64d859da45e120fd86d471e5387396cc45d5d4986efa79679f18eb8752", size = 420780, upload_time = "2025-04-04T23:54:50.921Z" } [[package]] name = "pexpect" @@ -1316,9 +1746,75 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "ptyprocess" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772 }, +sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450, upload_time = "2023-11-25T09:07:26.339Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772, upload_time = "2023-11-25T06:56:14.81Z" }, +] + +[[package]] +name = "pillow" +version = "11.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/0d/d0d6dea55cd152ce3d6767bb38a8fc10e33796ba4ba210cbab9354b6d238/pillow-11.3.0.tar.gz", hash = "sha256:3828ee7586cd0b2091b6209e5ad53e20d0649bbe87164a459d0676e035e8f523", size = 47113069, upload_time = "2025-07-01T09:16:30.666Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/40/fe/1bc9b3ee13f68487a99ac9529968035cca2f0a51ec36892060edcc51d06a/pillow-11.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fdae223722da47b024b867c1ea0be64e0df702c5e0a60e27daad39bf960dd1e4", size = 5278800, upload_time = "2025-07-01T09:14:17.648Z" }, + { url = "https://files.pythonhosted.org/packages/2c/32/7e2ac19b5713657384cec55f89065fb306b06af008cfd87e572035b27119/pillow-11.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:921bd305b10e82b4d1f5e802b6850677f965d8394203d182f078873851dada69", size = 4686296, upload_time = "2025-07-01T09:14:19.828Z" }, + { url = "https://files.pythonhosted.org/packages/8e/1e/b9e12bbe6e4c2220effebc09ea0923a07a6da1e1f1bfbc8d7d29a01ce32b/pillow-11.3.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:eb76541cba2f958032d79d143b98a3a6b3ea87f0959bbe256c0b5e416599fd5d", size = 5871726, upload_time = "2025-07-03T13:10:04.448Z" }, + { url = "https://files.pythonhosted.org/packages/8d/33/e9200d2bd7ba00dc3ddb78df1198a6e80d7669cce6c2bdbeb2530a74ec58/pillow-11.3.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:67172f2944ebba3d4a7b54f2e95c786a3a50c21b88456329314caaa28cda70f6", size = 7644652, upload_time = "2025-07-03T13:10:10.391Z" }, + { url = "https://files.pythonhosted.org/packages/41/f1/6f2427a26fc683e00d985bc391bdd76d8dd4e92fac33d841127eb8fb2313/pillow-11.3.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97f07ed9f56a3b9b5f49d3661dc9607484e85c67e27f3e8be2c7d28ca032fec7", size = 5977787, upload_time = "2025-07-01T09:14:21.63Z" }, + { url = "https://files.pythonhosted.org/packages/e4/c9/06dd4a38974e24f932ff5f98ea3c546ce3f8c995d3f0985f8e5ba48bba19/pillow-11.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:676b2815362456b5b3216b4fd5bd89d362100dc6f4945154ff172e206a22c024", size = 6645236, upload_time = "2025-07-01T09:14:23.321Z" }, + { url = "https://files.pythonhosted.org/packages/40/e7/848f69fb79843b3d91241bad658e9c14f39a32f71a301bcd1d139416d1be/pillow-11.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3e184b2f26ff146363dd07bde8b711833d7b0202e27d13540bfe2e35a323a809", size = 6086950, upload_time = "2025-07-01T09:14:25.237Z" }, + { url = "https://files.pythonhosted.org/packages/0b/1a/7cff92e695a2a29ac1958c2a0fe4c0b2393b60aac13b04a4fe2735cad52d/pillow-11.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6be31e3fc9a621e071bc17bb7de63b85cbe0bfae91bb0363c893cbe67247780d", size = 6723358, upload_time = "2025-07-01T09:14:27.053Z" }, + { url = "https://files.pythonhosted.org/packages/26/7d/73699ad77895f69edff76b0f332acc3d497f22f5d75e5360f78cbcaff248/pillow-11.3.0-cp312-cp312-win32.whl", hash = "sha256:7b161756381f0918e05e7cb8a371fff367e807770f8fe92ecb20d905d0e1c149", size = 6275079, upload_time = "2025-07-01T09:14:30.104Z" }, + { url = "https://files.pythonhosted.org/packages/8c/ce/e7dfc873bdd9828f3b6e5c2bbb74e47a98ec23cc5c74fc4e54462f0d9204/pillow-11.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:a6444696fce635783440b7f7a9fc24b3ad10a9ea3f0ab66c5905be1c19ccf17d", size = 6986324, upload_time = "2025-07-01T09:14:31.899Z" }, + { url = "https://files.pythonhosted.org/packages/16/8f/b13447d1bf0b1f7467ce7d86f6e6edf66c0ad7cf44cf5c87a37f9bed9936/pillow-11.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:2aceea54f957dd4448264f9bf40875da0415c83eb85f55069d89c0ed436e3542", size = 2423067, upload_time = "2025-07-01T09:14:33.709Z" }, + { url = "https://files.pythonhosted.org/packages/1e/93/0952f2ed8db3a5a4c7a11f91965d6184ebc8cd7cbb7941a260d5f018cd2d/pillow-11.3.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:1c627742b539bba4309df89171356fcb3cc5a9178355b2727d1b74a6cf155fbd", size = 2128328, upload_time = "2025-07-01T09:14:35.276Z" }, + { url = "https://files.pythonhosted.org/packages/4b/e8/100c3d114b1a0bf4042f27e0f87d2f25e857e838034e98ca98fe7b8c0a9c/pillow-11.3.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:30b7c02f3899d10f13d7a48163c8969e4e653f8b43416d23d13d1bbfdc93b9f8", size = 2170652, upload_time = "2025-07-01T09:14:37.203Z" }, + { url = "https://files.pythonhosted.org/packages/aa/86/3f758a28a6e381758545f7cdb4942e1cb79abd271bea932998fc0db93cb6/pillow-11.3.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:7859a4cc7c9295f5838015d8cc0a9c215b77e43d07a25e460f35cf516df8626f", size = 2227443, upload_time = "2025-07-01T09:14:39.344Z" }, + { url = "https://files.pythonhosted.org/packages/01/f4/91d5b3ffa718df2f53b0dc109877993e511f4fd055d7e9508682e8aba092/pillow-11.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ec1ee50470b0d050984394423d96325b744d55c701a439d2bd66089bff963d3c", size = 5278474, upload_time = "2025-07-01T09:14:41.843Z" }, + { url = "https://files.pythonhosted.org/packages/f9/0e/37d7d3eca6c879fbd9dba21268427dffda1ab00d4eb05b32923d4fbe3b12/pillow-11.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7db51d222548ccfd274e4572fdbf3e810a5e66b00608862f947b163e613b67dd", size = 4686038, upload_time = "2025-07-01T09:14:44.008Z" }, + { url = "https://files.pythonhosted.org/packages/ff/b0/3426e5c7f6565e752d81221af9d3676fdbb4f352317ceafd42899aaf5d8a/pillow-11.3.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2d6fcc902a24ac74495df63faad1884282239265c6839a0a6416d33faedfae7e", size = 5864407, upload_time = "2025-07-03T13:10:15.628Z" }, + { url = "https://files.pythonhosted.org/packages/fc/c1/c6c423134229f2a221ee53f838d4be9d82bab86f7e2f8e75e47b6bf6cd77/pillow-11.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f0f5d8f4a08090c6d6d578351a2b91acf519a54986c055af27e7a93feae6d3f1", size = 7639094, upload_time = "2025-07-03T13:10:21.857Z" }, + { url = "https://files.pythonhosted.org/packages/ba/c9/09e6746630fe6372c67c648ff9deae52a2bc20897d51fa293571977ceb5d/pillow-11.3.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c37d8ba9411d6003bba9e518db0db0c58a680ab9fe5179f040b0463644bc9805", size = 5973503, upload_time = "2025-07-01T09:14:45.698Z" }, + { url = "https://files.pythonhosted.org/packages/d5/1c/a2a29649c0b1983d3ef57ee87a66487fdeb45132df66ab30dd37f7dbe162/pillow-11.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:13f87d581e71d9189ab21fe0efb5a23e9f28552d5be6979e84001d3b8505abe8", size = 6642574, upload_time = "2025-07-01T09:14:47.415Z" }, + { url = "https://files.pythonhosted.org/packages/36/de/d5cc31cc4b055b6c6fd990e3e7f0f8aaf36229a2698501bcb0cdf67c7146/pillow-11.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:023f6d2d11784a465f09fd09a34b150ea4672e85fb3d05931d89f373ab14abb2", size = 6084060, upload_time = "2025-07-01T09:14:49.636Z" }, + { url = "https://files.pythonhosted.org/packages/d5/ea/502d938cbaeec836ac28a9b730193716f0114c41325db428e6b280513f09/pillow-11.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:45dfc51ac5975b938e9809451c51734124e73b04d0f0ac621649821a63852e7b", size = 6721407, upload_time = "2025-07-01T09:14:51.962Z" }, + { url = "https://files.pythonhosted.org/packages/45/9c/9c5e2a73f125f6cbc59cc7087c8f2d649a7ae453f83bd0362ff7c9e2aee2/pillow-11.3.0-cp313-cp313-win32.whl", hash = "sha256:a4d336baed65d50d37b88ca5b60c0fa9d81e3a87d4a7930d3880d1624d5b31f3", size = 6273841, upload_time = "2025-07-01T09:14:54.142Z" }, + { url = "https://files.pythonhosted.org/packages/23/85/397c73524e0cd212067e0c969aa245b01d50183439550d24d9f55781b776/pillow-11.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:0bce5c4fd0921f99d2e858dc4d4d64193407e1b99478bc5cacecba2311abde51", size = 6978450, upload_time = "2025-07-01T09:14:56.436Z" }, + { url = "https://files.pythonhosted.org/packages/17/d2/622f4547f69cd173955194b78e4d19ca4935a1b0f03a302d655c9f6aae65/pillow-11.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:1904e1264881f682f02b7f8167935cce37bc97db457f8e7849dc3a6a52b99580", size = 2423055, upload_time = "2025-07-01T09:14:58.072Z" }, + { url = "https://files.pythonhosted.org/packages/dd/80/a8a2ac21dda2e82480852978416cfacd439a4b490a501a288ecf4fe2532d/pillow-11.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:4c834a3921375c48ee6b9624061076bc0a32a60b5532b322cc0ea64e639dd50e", size = 5281110, upload_time = "2025-07-01T09:14:59.79Z" }, + { url = "https://files.pythonhosted.org/packages/44/d6/b79754ca790f315918732e18f82a8146d33bcd7f4494380457ea89eb883d/pillow-11.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5e05688ccef30ea69b9317a9ead994b93975104a677a36a8ed8106be9260aa6d", size = 4689547, upload_time = "2025-07-01T09:15:01.648Z" }, + { url = "https://files.pythonhosted.org/packages/49/20/716b8717d331150cb00f7fdd78169c01e8e0c219732a78b0e59b6bdb2fd6/pillow-11.3.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1019b04af07fc0163e2810167918cb5add8d74674b6267616021ab558dc98ced", size = 5901554, upload_time = "2025-07-03T13:10:27.018Z" }, + { url = "https://files.pythonhosted.org/packages/74/cf/a9f3a2514a65bb071075063a96f0a5cf949c2f2fce683c15ccc83b1c1cab/pillow-11.3.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f944255db153ebb2b19c51fe85dd99ef0ce494123f21b9db4877ffdfc5590c7c", size = 7669132, upload_time = "2025-07-03T13:10:33.01Z" }, + { url = "https://files.pythonhosted.org/packages/98/3c/da78805cbdbee9cb43efe8261dd7cc0b4b93f2ac79b676c03159e9db2187/pillow-11.3.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1f85acb69adf2aaee8b7da124efebbdb959a104db34d3a2cb0f3793dbae422a8", size = 6005001, upload_time = "2025-07-01T09:15:03.365Z" }, + { url = "https://files.pythonhosted.org/packages/6c/fa/ce044b91faecf30e635321351bba32bab5a7e034c60187fe9698191aef4f/pillow-11.3.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:05f6ecbeff5005399bb48d198f098a9b4b6bdf27b8487c7f38ca16eeb070cd59", size = 6668814, upload_time = "2025-07-01T09:15:05.655Z" }, + { url = "https://files.pythonhosted.org/packages/7b/51/90f9291406d09bf93686434f9183aba27b831c10c87746ff49f127ee80cb/pillow-11.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a7bc6e6fd0395bc052f16b1a8670859964dbd7003bd0af2ff08342eb6e442cfe", size = 6113124, upload_time = "2025-07-01T09:15:07.358Z" }, + { url = "https://files.pythonhosted.org/packages/cd/5a/6fec59b1dfb619234f7636d4157d11fb4e196caeee220232a8d2ec48488d/pillow-11.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:83e1b0161c9d148125083a35c1c5a89db5b7054834fd4387499e06552035236c", size = 6747186, upload_time = "2025-07-01T09:15:09.317Z" }, + { url = "https://files.pythonhosted.org/packages/49/6b/00187a044f98255225f172de653941e61da37104a9ea60e4f6887717e2b5/pillow-11.3.0-cp313-cp313t-win32.whl", hash = "sha256:2a3117c06b8fb646639dce83694f2f9eac405472713fcb1ae887469c0d4f6788", size = 6277546, upload_time = "2025-07-01T09:15:11.311Z" }, + { url = "https://files.pythonhosted.org/packages/e8/5c/6caaba7e261c0d75bab23be79f1d06b5ad2a2ae49f028ccec801b0e853d6/pillow-11.3.0-cp313-cp313t-win_amd64.whl", hash = "sha256:857844335c95bea93fb39e0fa2726b4d9d758850b34075a7e3ff4f4fa3aa3b31", size = 6985102, upload_time = "2025-07-01T09:15:13.164Z" }, + { url = "https://files.pythonhosted.org/packages/f3/7e/b623008460c09a0cb38263c93b828c666493caee2eb34ff67f778b87e58c/pillow-11.3.0-cp313-cp313t-win_arm64.whl", hash = "sha256:8797edc41f3e8536ae4b10897ee2f637235c94f27404cac7297f7b607dd0716e", size = 2424803, upload_time = "2025-07-01T09:15:15.695Z" }, + { url = "https://files.pythonhosted.org/packages/73/f4/04905af42837292ed86cb1b1dabe03dce1edc008ef14c473c5c7e1443c5d/pillow-11.3.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:d9da3df5f9ea2a89b81bb6087177fb1f4d1c7146d583a3fe5c672c0d94e55e12", size = 5278520, upload_time = "2025-07-01T09:15:17.429Z" }, + { url = "https://files.pythonhosted.org/packages/41/b0/33d79e377a336247df6348a54e6d2a2b85d644ca202555e3faa0cf811ecc/pillow-11.3.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0b275ff9b04df7b640c59ec5a3cb113eefd3795a8df80bac69646ef699c6981a", size = 4686116, upload_time = "2025-07-01T09:15:19.423Z" }, + { url = "https://files.pythonhosted.org/packages/49/2d/ed8bc0ab219ae8768f529597d9509d184fe8a6c4741a6864fea334d25f3f/pillow-11.3.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0743841cabd3dba6a83f38a92672cccbd69af56e3e91777b0ee7f4dba4385632", size = 5864597, upload_time = "2025-07-03T13:10:38.404Z" }, + { url = "https://files.pythonhosted.org/packages/b5/3d/b932bb4225c80b58dfadaca9d42d08d0b7064d2d1791b6a237f87f661834/pillow-11.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2465a69cf967b8b49ee1b96d76718cd98c4e925414ead59fdf75cf0fd07df673", size = 7638246, upload_time = "2025-07-03T13:10:44.987Z" }, + { url = "https://files.pythonhosted.org/packages/09/b5/0487044b7c096f1b48f0d7ad416472c02e0e4bf6919541b111efd3cae690/pillow-11.3.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:41742638139424703b4d01665b807c6468e23e699e8e90cffefe291c5832b027", size = 5973336, upload_time = "2025-07-01T09:15:21.237Z" }, + { url = "https://files.pythonhosted.org/packages/a8/2d/524f9318f6cbfcc79fbc004801ea6b607ec3f843977652fdee4857a7568b/pillow-11.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:93efb0b4de7e340d99057415c749175e24c8864302369e05914682ba642e5d77", size = 6642699, upload_time = "2025-07-01T09:15:23.186Z" }, + { url = "https://files.pythonhosted.org/packages/6f/d2/a9a4f280c6aefedce1e8f615baaa5474e0701d86dd6f1dede66726462bbd/pillow-11.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7966e38dcd0fa11ca390aed7c6f20454443581d758242023cf36fcb319b1a874", size = 6083789, upload_time = "2025-07-01T09:15:25.1Z" }, + { url = "https://files.pythonhosted.org/packages/fe/54/86b0cd9dbb683a9d5e960b66c7379e821a19be4ac5810e2e5a715c09a0c0/pillow-11.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:98a9afa7b9007c67ed84c57c9e0ad86a6000da96eaa638e4f8abe5b65ff83f0a", size = 6720386, upload_time = "2025-07-01T09:15:27.378Z" }, + { url = "https://files.pythonhosted.org/packages/e7/95/88efcaf384c3588e24259c4203b909cbe3e3c2d887af9e938c2022c9dd48/pillow-11.3.0-cp314-cp314-win32.whl", hash = "sha256:02a723e6bf909e7cea0dac1b0e0310be9d7650cd66222a5f1c571455c0a45214", size = 6370911, upload_time = "2025-07-01T09:15:29.294Z" }, + { url = "https://files.pythonhosted.org/packages/2e/cc/934e5820850ec5eb107e7b1a72dd278140731c669f396110ebc326f2a503/pillow-11.3.0-cp314-cp314-win_amd64.whl", hash = "sha256:a418486160228f64dd9e9efcd132679b7a02a5f22c982c78b6fc7dab3fefb635", size = 7117383, upload_time = "2025-07-01T09:15:31.128Z" }, + { url = "https://files.pythonhosted.org/packages/d6/e9/9c0a616a71da2a5d163aa37405e8aced9a906d574b4a214bede134e731bc/pillow-11.3.0-cp314-cp314-win_arm64.whl", hash = "sha256:155658efb5e044669c08896c0c44231c5e9abcaadbc5cd3648df2f7c0b96b9a6", size = 2511385, upload_time = "2025-07-01T09:15:33.328Z" }, + { url = "https://files.pythonhosted.org/packages/1a/33/c88376898aff369658b225262cd4f2659b13e8178e7534df9e6e1fa289f6/pillow-11.3.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:59a03cdf019efbfeeed910bf79c7c93255c3d54bc45898ac2a4140071b02b4ae", size = 5281129, upload_time = "2025-07-01T09:15:35.194Z" }, + { url = "https://files.pythonhosted.org/packages/1f/70/d376247fb36f1844b42910911c83a02d5544ebd2a8bad9efcc0f707ea774/pillow-11.3.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f8a5827f84d973d8636e9dc5764af4f0cf2318d26744b3d902931701b0d46653", size = 4689580, upload_time = "2025-07-01T09:15:37.114Z" }, + { url = "https://files.pythonhosted.org/packages/eb/1c/537e930496149fbac69efd2fc4329035bbe2e5475b4165439e3be9cb183b/pillow-11.3.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ee92f2fd10f4adc4b43d07ec5e779932b4eb3dbfbc34790ada5a6669bc095aa6", size = 5902860, upload_time = "2025-07-03T13:10:50.248Z" }, + { url = "https://files.pythonhosted.org/packages/bd/57/80f53264954dcefeebcf9dae6e3eb1daea1b488f0be8b8fef12f79a3eb10/pillow-11.3.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c96d333dcf42d01f47b37e0979b6bd73ec91eae18614864622d9b87bbd5bbf36", size = 7670694, upload_time = "2025-07-03T13:10:56.432Z" }, + { url = "https://files.pythonhosted.org/packages/70/ff/4727d3b71a8578b4587d9c276e90efad2d6fe0335fd76742a6da08132e8c/pillow-11.3.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4c96f993ab8c98460cd0c001447bff6194403e8b1d7e149ade5f00594918128b", size = 6005888, upload_time = "2025-07-01T09:15:39.436Z" }, + { url = "https://files.pythonhosted.org/packages/05/ae/716592277934f85d3be51d7256f3636672d7b1abfafdc42cf3f8cbd4b4c8/pillow-11.3.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:41342b64afeba938edb034d122b2dda5db2139b9a4af999729ba8818e0056477", size = 6670330, upload_time = "2025-07-01T09:15:41.269Z" }, + { url = "https://files.pythonhosted.org/packages/e7/bb/7fe6cddcc8827b01b1a9766f5fdeb7418680744f9082035bdbabecf1d57f/pillow-11.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:068d9c39a2d1b358eb9f245ce7ab1b5c3246c7c8c7d9ba58cfa5b43146c06e50", size = 6114089, upload_time = "2025-07-01T09:15:43.13Z" }, + { url = "https://files.pythonhosted.org/packages/8b/f5/06bfaa444c8e80f1a8e4bff98da9c83b37b5be3b1deaa43d27a0db37ef84/pillow-11.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a1bc6ba083b145187f648b667e05a2534ecc4b9f2784c2cbe3089e44868f2b9b", size = 6748206, upload_time = "2025-07-01T09:15:44.937Z" }, + { url = "https://files.pythonhosted.org/packages/f0/77/bc6f92a3e8e6e46c0ca78abfffec0037845800ea38c73483760362804c41/pillow-11.3.0-cp314-cp314t-win32.whl", hash = "sha256:118ca10c0d60b06d006be10a501fd6bbdfef559251ed31b794668ed569c87e12", size = 6377370, upload_time = "2025-07-01T09:15:46.673Z" }, + { url = "https://files.pythonhosted.org/packages/4a/82/3a721f7d69dca802befb8af08b7c79ebcab461007ce1c18bd91a5d5896f9/pillow-11.3.0-cp314-cp314t-win_amd64.whl", hash = "sha256:8924748b688aa210d79883357d102cd64690e56b923a186f35a82cbc10f997db", size = 7121500, upload_time = "2025-07-01T09:15:48.512Z" }, + { url = "https://files.pythonhosted.org/packages/89/c7/5572fa4a3f45740eaab6ae86fcdf7195b55beac1371ac8c619d880cfe948/pillow-11.3.0-cp314-cp314t-win_arm64.whl", hash = "sha256:79ea0d14d3ebad43ec77ad5272e6ff9bba5b679ef73375ea760261207fa8e0aa", size = 2512835, upload_time = "2025-07-01T09:15:50.399Z" }, ] [[package]] @@ -1331,36 +1827,36 @@ dependencies = [ { name = "platformdirs" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/20/bb/52b15ddf7b7706ed591134a895dbf6e41c8348171fb635e655e0a4bbb0ea/pint-0.24.4.tar.gz", hash = "sha256:35275439b574837a6cd3020a5a4a73645eb125ce4152a73a2f126bf164b91b80", size = 342225 } +sdist = { url = "https://files.pythonhosted.org/packages/20/bb/52b15ddf7b7706ed591134a895dbf6e41c8348171fb635e655e0a4bbb0ea/pint-0.24.4.tar.gz", hash = "sha256:35275439b574837a6cd3020a5a4a73645eb125ce4152a73a2f126bf164b91b80", size = 342225, upload_time = "2024-11-07T16:29:46.061Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/16/bd2f5904557265882108dc2e04f18abc05ab0c2b7082ae9430091daf1d5c/Pint-0.24.4-py3-none-any.whl", hash = "sha256:aa54926c8772159fcf65f82cc0d34de6768c151b32ad1deb0331291c38fe7659", size = 302029 }, + { url = "https://files.pythonhosted.org/packages/b7/16/bd2f5904557265882108dc2e04f18abc05ab0c2b7082ae9430091daf1d5c/Pint-0.24.4-py3-none-any.whl", hash = "sha256:aa54926c8772159fcf65f82cc0d34de6768c151b32ad1deb0331291c38fe7659", size = 302029, upload_time = "2024-11-07T16:29:43.976Z" }, ] [[package]] name = "platformdirs" version = "4.3.8" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/fe/8b/3c73abc9c759ecd3f1f7ceff6685840859e8070c4d947c93fae71f6a0bf2/platformdirs-4.3.8.tar.gz", hash = "sha256:3d512d96e16bcb959a814c9f348431070822a6496326a4be0911c40b5a74c2bc", size = 21362 } +sdist = { url = "https://files.pythonhosted.org/packages/fe/8b/3c73abc9c759ecd3f1f7ceff6685840859e8070c4d947c93fae71f6a0bf2/platformdirs-4.3.8.tar.gz", hash = "sha256:3d512d96e16bcb959a814c9f348431070822a6496326a4be0911c40b5a74c2bc", size = 21362, upload_time = "2025-05-07T22:47:42.121Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fe/39/979e8e21520d4e47a0bbe349e2713c0aac6f3d853d0e5b34d76206c439aa/platformdirs-4.3.8-py3-none-any.whl", hash = "sha256:ff7059bb7eb1179e2685604f4aaf157cfd9535242bd23742eadc3c13542139b4", size = 18567 }, + { url = "https://files.pythonhosted.org/packages/fe/39/979e8e21520d4e47a0bbe349e2713c0aac6f3d853d0e5b34d76206c439aa/platformdirs-4.3.8-py3-none-any.whl", hash = "sha256:ff7059bb7eb1179e2685604f4aaf157cfd9535242bd23742eadc3c13542139b4", size = 18567, upload_time = "2025-05-07T22:47:40.376Z" }, ] [[package]] name = "pluggy" version = "1.6.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412 } +sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload_time = "2025-05-15T12:30:07.975Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538 }, + { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload_time = "2025-05-15T12:30:06.134Z" }, ] [[package]] name = "ply" version = "3.11" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e5/69/882ee5c9d017149285cab114ebeab373308ef0f874fcdac9beb90e0ac4da/ply-3.11.tar.gz", hash = "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3", size = 159130 } +sdist = { url = "https://files.pythonhosted.org/packages/e5/69/882ee5c9d017149285cab114ebeab373308ef0f874fcdac9beb90e0ac4da/ply-3.11.tar.gz", hash = "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3", size = 159130, upload_time = "2018-02-15T19:01:31.097Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a3/58/35da89ee790598a0700ea49b2a66594140f44dec458c07e8e3d4979137fc/ply-3.11-py2.py3-none-any.whl", hash = "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce", size = 49567 }, + { url = "https://files.pythonhosted.org/packages/a3/58/35da89ee790598a0700ea49b2a66594140f44dec458c07e8e3d4979137fc/ply-3.11-py2.py3-none-any.whl", hash = "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce", size = 49567, upload_time = "2018-02-15T19:01:27.172Z" }, ] [[package]] @@ -1374,9 +1870,9 @@ dependencies = [ { name = "pyyaml" }, { name = "virtualenv" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/08/39/679ca9b26c7bb2999ff122d50faa301e49af82ca9c066ec061cfbc0c6784/pre_commit-4.2.0.tar.gz", hash = "sha256:601283b9757afd87d40c4c4a9b2b5de9637a8ea02eaff7adc2d0fb4e04841146", size = 193424 } +sdist = { url = "https://files.pythonhosted.org/packages/08/39/679ca9b26c7bb2999ff122d50faa301e49af82ca9c066ec061cfbc0c6784/pre_commit-4.2.0.tar.gz", hash = "sha256:601283b9757afd87d40c4c4a9b2b5de9637a8ea02eaff7adc2d0fb4e04841146", size = 193424, upload_time = "2025-03-18T21:35:20.987Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/88/74/a88bf1b1efeae488a0c0b7bdf71429c313722d1fc0f377537fbe554e6180/pre_commit-4.2.0-py2.py3-none-any.whl", hash = "sha256:a009ca7205f1eb497d10b845e52c838a98b6cdd2102a6c8e4540e94ee75c58bd", size = 220707 }, + { url = "https://files.pythonhosted.org/packages/88/74/a88bf1b1efeae488a0c0b7bdf71429c313722d1fc0f377537fbe554e6180/pre_commit-4.2.0-py2.py3-none-any.whl", hash = "sha256:a009ca7205f1eb497d10b845e52c838a98b6cdd2102a6c8e4540e94ee75c58bd", size = 220707, upload_time = "2025-03-18T21:35:19.343Z" }, ] [[package]] @@ -1386,86 +1882,86 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "wcwidth" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/bb/6e/9d084c929dfe9e3bfe0c6a47e31f78a25c54627d64a66e884a8bf5474f1c/prompt_toolkit-3.0.51.tar.gz", hash = "sha256:931a162e3b27fc90c86f1b48bb1fb2c528c2761475e57c9c06de13311c7b54ed", size = 428940 } +sdist = { url = "https://files.pythonhosted.org/packages/bb/6e/9d084c929dfe9e3bfe0c6a47e31f78a25c54627d64a66e884a8bf5474f1c/prompt_toolkit-3.0.51.tar.gz", hash = "sha256:931a162e3b27fc90c86f1b48bb1fb2c528c2761475e57c9c06de13311c7b54ed", size = 428940, upload_time = "2025-04-15T09:18:47.731Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ce/4f/5249960887b1fbe561d9ff265496d170b55a735b76724f10ef19f9e40716/prompt_toolkit-3.0.51-py3-none-any.whl", hash = "sha256:52742911fde84e2d423e2f9a4cf1de7d7ac4e51958f648d9540e0fb8db077b07", size = 387810 }, + { url = "https://files.pythonhosted.org/packages/ce/4f/5249960887b1fbe561d9ff265496d170b55a735b76724f10ef19f9e40716/prompt_toolkit-3.0.51-py3-none-any.whl", hash = "sha256:52742911fde84e2d423e2f9a4cf1de7d7ac4e51958f648d9540e0fb8db077b07", size = 387810, upload_time = "2025-04-15T09:18:44.753Z" }, ] [[package]] name = "psutil" version = "7.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2a/80/336820c1ad9286a4ded7e845b2eccfcb27851ab8ac6abece774a6ff4d3de/psutil-7.0.0.tar.gz", hash = "sha256:7be9c3eba38beccb6495ea33afd982a44074b78f28c434a1f51cc07fd315c456", size = 497003 } +sdist = { url = "https://files.pythonhosted.org/packages/2a/80/336820c1ad9286a4ded7e845b2eccfcb27851ab8ac6abece774a6ff4d3de/psutil-7.0.0.tar.gz", hash = "sha256:7be9c3eba38beccb6495ea33afd982a44074b78f28c434a1f51cc07fd315c456", size = 497003, upload_time = "2025-02-13T21:54:07.946Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ed/e6/2d26234410f8b8abdbf891c9da62bee396583f713fb9f3325a4760875d22/psutil-7.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:101d71dc322e3cffd7cea0650b09b3d08b8e7c4109dd6809fe452dfd00e58b25", size = 238051 }, - { url = "https://files.pythonhosted.org/packages/04/8b/30f930733afe425e3cbfc0e1468a30a18942350c1a8816acfade80c005c4/psutil-7.0.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:39db632f6bb862eeccf56660871433e111b6ea58f2caea825571951d4b6aa3da", size = 239535 }, - { url = "https://files.pythonhosted.org/packages/2a/ed/d362e84620dd22876b55389248e522338ed1bf134a5edd3b8231d7207f6d/psutil-7.0.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fcee592b4c6f146991ca55919ea3d1f8926497a713ed7faaf8225e174581e91", size = 275004 }, - { url = "https://files.pythonhosted.org/packages/bf/b9/b0eb3f3cbcb734d930fdf839431606844a825b23eaf9a6ab371edac8162c/psutil-7.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b1388a4f6875d7e2aff5c4ca1cc16c545ed41dd8bb596cefea80111db353a34", size = 277986 }, - { url = "https://files.pythonhosted.org/packages/eb/a2/709e0fe2f093556c17fbafda93ac032257242cabcc7ff3369e2cb76a97aa/psutil-7.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5f098451abc2828f7dc6b58d44b532b22f2088f4999a937557b603ce72b1993", size = 279544 }, - { url = "https://files.pythonhosted.org/packages/50/e6/eecf58810b9d12e6427369784efe814a1eec0f492084ce8eb8f4d89d6d61/psutil-7.0.0-cp37-abi3-win32.whl", hash = "sha256:ba3fcef7523064a6c9da440fc4d6bd07da93ac726b5733c29027d7dc95b39d99", size = 241053 }, - { url = "https://files.pythonhosted.org/packages/50/1b/6921afe68c74868b4c9fa424dad3be35b095e16687989ebbb50ce4fceb7c/psutil-7.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:4cf3d4eb1aa9b348dec30105c55cd9b7d4629285735a102beb4441e38db90553", size = 244885 }, + { url = "https://files.pythonhosted.org/packages/ed/e6/2d26234410f8b8abdbf891c9da62bee396583f713fb9f3325a4760875d22/psutil-7.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:101d71dc322e3cffd7cea0650b09b3d08b8e7c4109dd6809fe452dfd00e58b25", size = 238051, upload_time = "2025-02-13T21:54:12.36Z" }, + { url = "https://files.pythonhosted.org/packages/04/8b/30f930733afe425e3cbfc0e1468a30a18942350c1a8816acfade80c005c4/psutil-7.0.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:39db632f6bb862eeccf56660871433e111b6ea58f2caea825571951d4b6aa3da", size = 239535, upload_time = "2025-02-13T21:54:16.07Z" }, + { url = "https://files.pythonhosted.org/packages/2a/ed/d362e84620dd22876b55389248e522338ed1bf134a5edd3b8231d7207f6d/psutil-7.0.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fcee592b4c6f146991ca55919ea3d1f8926497a713ed7faaf8225e174581e91", size = 275004, upload_time = "2025-02-13T21:54:18.662Z" }, + { url = "https://files.pythonhosted.org/packages/bf/b9/b0eb3f3cbcb734d930fdf839431606844a825b23eaf9a6ab371edac8162c/psutil-7.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b1388a4f6875d7e2aff5c4ca1cc16c545ed41dd8bb596cefea80111db353a34", size = 277986, upload_time = "2025-02-13T21:54:21.811Z" }, + { url = "https://files.pythonhosted.org/packages/eb/a2/709e0fe2f093556c17fbafda93ac032257242cabcc7ff3369e2cb76a97aa/psutil-7.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5f098451abc2828f7dc6b58d44b532b22f2088f4999a937557b603ce72b1993", size = 279544, upload_time = "2025-02-13T21:54:24.68Z" }, + { url = "https://files.pythonhosted.org/packages/50/e6/eecf58810b9d12e6427369784efe814a1eec0f492084ce8eb8f4d89d6d61/psutil-7.0.0-cp37-abi3-win32.whl", hash = "sha256:ba3fcef7523064a6c9da440fc4d6bd07da93ac726b5733c29027d7dc95b39d99", size = 241053, upload_time = "2025-02-13T21:54:34.31Z" }, + { url = "https://files.pythonhosted.org/packages/50/1b/6921afe68c74868b4c9fa424dad3be35b095e16687989ebbb50ce4fceb7c/psutil-7.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:4cf3d4eb1aa9b348dec30105c55cd9b7d4629285735a102beb4441e38db90553", size = 244885, upload_time = "2025-02-13T21:54:37.486Z" }, ] [[package]] name = "ptyprocess" version = "0.7.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220", size = 70762 } +sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220", size = 70762, upload_time = "2020-12-28T15:15:30.155Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", size = 13993 }, + { url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", size = 13993, upload_time = "2020-12-28T15:15:28.35Z" }, ] [[package]] name = "pure-eval" version = "0.2.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/cd/05/0a34433a064256a578f1783a10da6df098ceaa4a57bbeaa96a6c0352786b/pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42", size = 19752 } +sdist = { url = "https://files.pythonhosted.org/packages/cd/05/0a34433a064256a578f1783a10da6df098ceaa4a57bbeaa96a6c0352786b/pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42", size = 19752, upload_time = "2024-07-21T12:58:21.801Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842 }, + { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842, upload_time = "2024-07-21T12:58:20.04Z" }, ] [[package]] name = "pyarrow" version = "20.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a2/ee/a7810cb9f3d6e9238e61d312076a9859bf3668fd21c69744de9532383912/pyarrow-20.0.0.tar.gz", hash = "sha256:febc4a913592573c8d5805091a6c2b5064c8bd6e002131f01061797d91c783c1", size = 1125187 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a1/d6/0c10e0d54f6c13eb464ee9b67a68b8c71bcf2f67760ef5b6fbcddd2ab05f/pyarrow-20.0.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:75a51a5b0eef32727a247707d4755322cb970be7e935172b6a3a9f9ae98404ba", size = 30815067 }, - { url = "https://files.pythonhosted.org/packages/7e/e2/04e9874abe4094a06fd8b0cbb0f1312d8dd7d707f144c2ec1e5e8f452ffa/pyarrow-20.0.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:211d5e84cecc640c7a3ab900f930aaff5cd2702177e0d562d426fb7c4f737781", size = 32297128 }, - { url = "https://files.pythonhosted.org/packages/31/fd/c565e5dcc906a3b471a83273039cb75cb79aad4a2d4a12f76cc5ae90a4b8/pyarrow-20.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ba3cf4182828be7a896cbd232aa8dd6a31bd1f9e32776cc3796c012855e1199", size = 41334890 }, - { url = "https://files.pythonhosted.org/packages/af/a9/3bdd799e2c9b20c1ea6dc6fa8e83f29480a97711cf806e823f808c2316ac/pyarrow-20.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c3a01f313ffe27ac4126f4c2e5ea0f36a5fc6ab51f8726cf41fee4b256680bd", size = 42421775 }, - { url = "https://files.pythonhosted.org/packages/10/f7/da98ccd86354c332f593218101ae56568d5dcedb460e342000bd89c49cc1/pyarrow-20.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:a2791f69ad72addd33510fec7bb14ee06c2a448e06b649e264c094c5b5f7ce28", size = 40687231 }, - { url = "https://files.pythonhosted.org/packages/bb/1b/2168d6050e52ff1e6cefc61d600723870bf569cbf41d13db939c8cf97a16/pyarrow-20.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:4250e28a22302ce8692d3a0e8ec9d9dde54ec00d237cff4dfa9c1fbf79e472a8", size = 42295639 }, - { url = "https://files.pythonhosted.org/packages/b2/66/2d976c0c7158fd25591c8ca55aee026e6d5745a021915a1835578707feb3/pyarrow-20.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:89e030dc58fc760e4010148e6ff164d2f44441490280ef1e97a542375e41058e", size = 42908549 }, - { url = "https://files.pythonhosted.org/packages/31/a9/dfb999c2fc6911201dcbf348247f9cc382a8990f9ab45c12eabfd7243a38/pyarrow-20.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6102b4864d77102dbbb72965618e204e550135a940c2534711d5ffa787df2a5a", size = 44557216 }, - { url = "https://files.pythonhosted.org/packages/a0/8e/9adee63dfa3911be2382fb4d92e4b2e7d82610f9d9f668493bebaa2af50f/pyarrow-20.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:96d6a0a37d9c98be08f5ed6a10831d88d52cac7b13f5287f1e0f625a0de8062b", size = 25660496 }, - { url = "https://files.pythonhosted.org/packages/9b/aa/daa413b81446d20d4dad2944110dcf4cf4f4179ef7f685dd5a6d7570dc8e/pyarrow-20.0.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:a15532e77b94c61efadde86d10957950392999503b3616b2ffcef7621a002893", size = 30798501 }, - { url = "https://files.pythonhosted.org/packages/ff/75/2303d1caa410925de902d32ac215dc80a7ce7dd8dfe95358c165f2adf107/pyarrow-20.0.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:dd43f58037443af715f34f1322c782ec463a3c8a94a85fdb2d987ceb5658e061", size = 32277895 }, - { url = "https://files.pythonhosted.org/packages/92/41/fe18c7c0b38b20811b73d1bdd54b1fccba0dab0e51d2048878042d84afa8/pyarrow-20.0.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa0d288143a8585806e3cc7c39566407aab646fb9ece164609dac1cfff45f6ae", size = 41327322 }, - { url = "https://files.pythonhosted.org/packages/da/ab/7dbf3d11db67c72dbf36ae63dcbc9f30b866c153b3a22ef728523943eee6/pyarrow-20.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6953f0114f8d6f3d905d98e987d0924dabce59c3cda380bdfaa25a6201563b4", size = 42411441 }, - { url = "https://files.pythonhosted.org/packages/90/c3/0c7da7b6dac863af75b64e2f827e4742161128c350bfe7955b426484e226/pyarrow-20.0.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:991f85b48a8a5e839b2128590ce07611fae48a904cae6cab1f089c5955b57eb5", size = 40677027 }, - { url = "https://files.pythonhosted.org/packages/be/27/43a47fa0ff9053ab5203bb3faeec435d43c0d8bfa40179bfd076cdbd4e1c/pyarrow-20.0.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:97c8dc984ed09cb07d618d57d8d4b67a5100a30c3818c2fb0b04599f0da2de7b", size = 42281473 }, - { url = "https://files.pythonhosted.org/packages/bc/0b/d56c63b078876da81bbb9ba695a596eabee9b085555ed12bf6eb3b7cab0e/pyarrow-20.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9b71daf534f4745818f96c214dbc1e6124d7daf059167330b610fc69b6f3d3e3", size = 42893897 }, - { url = "https://files.pythonhosted.org/packages/92/ac/7d4bd020ba9145f354012838692d48300c1b8fe5634bfda886abcada67ed/pyarrow-20.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e8b88758f9303fa5a83d6c90e176714b2fd3852e776fc2d7e42a22dd6c2fb368", size = 44543847 }, - { url = "https://files.pythonhosted.org/packages/9d/07/290f4abf9ca702c5df7b47739c1b2c83588641ddfa2cc75e34a301d42e55/pyarrow-20.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:30b3051b7975801c1e1d387e17c588d8ab05ced9b1e14eec57915f79869b5031", size = 25653219 }, - { url = "https://files.pythonhosted.org/packages/95/df/720bb17704b10bd69dde086e1400b8eefb8f58df3f8ac9cff6c425bf57f1/pyarrow-20.0.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:ca151afa4f9b7bc45bcc791eb9a89e90a9eb2772767d0b1e5389609c7d03db63", size = 30853957 }, - { url = "https://files.pythonhosted.org/packages/d9/72/0d5f875efc31baef742ba55a00a25213a19ea64d7176e0fe001c5d8b6e9a/pyarrow-20.0.0-cp313-cp313t-macosx_12_0_x86_64.whl", hash = "sha256:4680f01ecd86e0dd63e39eb5cd59ef9ff24a9d166db328679e36c108dc993d4c", size = 32247972 }, - { url = "https://files.pythonhosted.org/packages/d5/bc/e48b4fa544d2eea72f7844180eb77f83f2030b84c8dad860f199f94307ed/pyarrow-20.0.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f4c8534e2ff059765647aa69b75d6543f9fef59e2cd4c6d18015192565d2b70", size = 41256434 }, - { url = "https://files.pythonhosted.org/packages/c3/01/974043a29874aa2cf4f87fb07fd108828fc7362300265a2a64a94965e35b/pyarrow-20.0.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e1f8a47f4b4ae4c69c4d702cfbdfe4d41e18e5c7ef6f1bb1c50918c1e81c57b", size = 42353648 }, - { url = "https://files.pythonhosted.org/packages/68/95/cc0d3634cde9ca69b0e51cbe830d8915ea32dda2157560dda27ff3b3337b/pyarrow-20.0.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:a1f60dc14658efaa927f8214734f6a01a806d7690be4b3232ba526836d216122", size = 40619853 }, - { url = "https://files.pythonhosted.org/packages/29/c2/3ad40e07e96a3e74e7ed7cc8285aadfa84eb848a798c98ec0ad009eb6bcc/pyarrow-20.0.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:204a846dca751428991346976b914d6d2a82ae5b8316a6ed99789ebf976551e6", size = 42241743 }, - { url = "https://files.pythonhosted.org/packages/eb/cb/65fa110b483339add6a9bc7b6373614166b14e20375d4daa73483755f830/pyarrow-20.0.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:f3b117b922af5e4c6b9a9115825726cac7d8b1421c37c2b5e24fbacc8930612c", size = 42839441 }, - { url = "https://files.pythonhosted.org/packages/98/7b/f30b1954589243207d7a0fbc9997401044bf9a033eec78f6cb50da3f304a/pyarrow-20.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e724a3fd23ae5b9c010e7be857f4405ed5e679db5c93e66204db1a69f733936a", size = 44503279 }, - { url = "https://files.pythonhosted.org/packages/37/40/ad395740cd641869a13bcf60851296c89624662575621968dcfafabaa7f6/pyarrow-20.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:82f1ee5133bd8f49d31be1299dc07f585136679666b502540db854968576faf9", size = 25944982 }, +sdist = { url = "https://files.pythonhosted.org/packages/a2/ee/a7810cb9f3d6e9238e61d312076a9859bf3668fd21c69744de9532383912/pyarrow-20.0.0.tar.gz", hash = "sha256:febc4a913592573c8d5805091a6c2b5064c8bd6e002131f01061797d91c783c1", size = 1125187, upload_time = "2025-04-27T12:34:23.264Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a1/d6/0c10e0d54f6c13eb464ee9b67a68b8c71bcf2f67760ef5b6fbcddd2ab05f/pyarrow-20.0.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:75a51a5b0eef32727a247707d4755322cb970be7e935172b6a3a9f9ae98404ba", size = 30815067, upload_time = "2025-04-27T12:29:44.384Z" }, + { url = "https://files.pythonhosted.org/packages/7e/e2/04e9874abe4094a06fd8b0cbb0f1312d8dd7d707f144c2ec1e5e8f452ffa/pyarrow-20.0.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:211d5e84cecc640c7a3ab900f930aaff5cd2702177e0d562d426fb7c4f737781", size = 32297128, upload_time = "2025-04-27T12:29:52.038Z" }, + { url = "https://files.pythonhosted.org/packages/31/fd/c565e5dcc906a3b471a83273039cb75cb79aad4a2d4a12f76cc5ae90a4b8/pyarrow-20.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ba3cf4182828be7a896cbd232aa8dd6a31bd1f9e32776cc3796c012855e1199", size = 41334890, upload_time = "2025-04-27T12:29:59.452Z" }, + { url = "https://files.pythonhosted.org/packages/af/a9/3bdd799e2c9b20c1ea6dc6fa8e83f29480a97711cf806e823f808c2316ac/pyarrow-20.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c3a01f313ffe27ac4126f4c2e5ea0f36a5fc6ab51f8726cf41fee4b256680bd", size = 42421775, upload_time = "2025-04-27T12:30:06.875Z" }, + { url = "https://files.pythonhosted.org/packages/10/f7/da98ccd86354c332f593218101ae56568d5dcedb460e342000bd89c49cc1/pyarrow-20.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:a2791f69ad72addd33510fec7bb14ee06c2a448e06b649e264c094c5b5f7ce28", size = 40687231, upload_time = "2025-04-27T12:30:13.954Z" }, + { url = "https://files.pythonhosted.org/packages/bb/1b/2168d6050e52ff1e6cefc61d600723870bf569cbf41d13db939c8cf97a16/pyarrow-20.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:4250e28a22302ce8692d3a0e8ec9d9dde54ec00d237cff4dfa9c1fbf79e472a8", size = 42295639, upload_time = "2025-04-27T12:30:21.949Z" }, + { url = "https://files.pythonhosted.org/packages/b2/66/2d976c0c7158fd25591c8ca55aee026e6d5745a021915a1835578707feb3/pyarrow-20.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:89e030dc58fc760e4010148e6ff164d2f44441490280ef1e97a542375e41058e", size = 42908549, upload_time = "2025-04-27T12:30:29.551Z" }, + { url = "https://files.pythonhosted.org/packages/31/a9/dfb999c2fc6911201dcbf348247f9cc382a8990f9ab45c12eabfd7243a38/pyarrow-20.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6102b4864d77102dbbb72965618e204e550135a940c2534711d5ffa787df2a5a", size = 44557216, upload_time = "2025-04-27T12:30:36.977Z" }, + { url = "https://files.pythonhosted.org/packages/a0/8e/9adee63dfa3911be2382fb4d92e4b2e7d82610f9d9f668493bebaa2af50f/pyarrow-20.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:96d6a0a37d9c98be08f5ed6a10831d88d52cac7b13f5287f1e0f625a0de8062b", size = 25660496, upload_time = "2025-04-27T12:30:42.809Z" }, + { url = "https://files.pythonhosted.org/packages/9b/aa/daa413b81446d20d4dad2944110dcf4cf4f4179ef7f685dd5a6d7570dc8e/pyarrow-20.0.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:a15532e77b94c61efadde86d10957950392999503b3616b2ffcef7621a002893", size = 30798501, upload_time = "2025-04-27T12:30:48.351Z" }, + { url = "https://files.pythonhosted.org/packages/ff/75/2303d1caa410925de902d32ac215dc80a7ce7dd8dfe95358c165f2adf107/pyarrow-20.0.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:dd43f58037443af715f34f1322c782ec463a3c8a94a85fdb2d987ceb5658e061", size = 32277895, upload_time = "2025-04-27T12:30:55.238Z" }, + { url = "https://files.pythonhosted.org/packages/92/41/fe18c7c0b38b20811b73d1bdd54b1fccba0dab0e51d2048878042d84afa8/pyarrow-20.0.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa0d288143a8585806e3cc7c39566407aab646fb9ece164609dac1cfff45f6ae", size = 41327322, upload_time = "2025-04-27T12:31:05.587Z" }, + { url = "https://files.pythonhosted.org/packages/da/ab/7dbf3d11db67c72dbf36ae63dcbc9f30b866c153b3a22ef728523943eee6/pyarrow-20.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6953f0114f8d6f3d905d98e987d0924dabce59c3cda380bdfaa25a6201563b4", size = 42411441, upload_time = "2025-04-27T12:31:15.675Z" }, + { url = "https://files.pythonhosted.org/packages/90/c3/0c7da7b6dac863af75b64e2f827e4742161128c350bfe7955b426484e226/pyarrow-20.0.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:991f85b48a8a5e839b2128590ce07611fae48a904cae6cab1f089c5955b57eb5", size = 40677027, upload_time = "2025-04-27T12:31:24.631Z" }, + { url = "https://files.pythonhosted.org/packages/be/27/43a47fa0ff9053ab5203bb3faeec435d43c0d8bfa40179bfd076cdbd4e1c/pyarrow-20.0.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:97c8dc984ed09cb07d618d57d8d4b67a5100a30c3818c2fb0b04599f0da2de7b", size = 42281473, upload_time = "2025-04-27T12:31:31.311Z" }, + { url = "https://files.pythonhosted.org/packages/bc/0b/d56c63b078876da81bbb9ba695a596eabee9b085555ed12bf6eb3b7cab0e/pyarrow-20.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9b71daf534f4745818f96c214dbc1e6124d7daf059167330b610fc69b6f3d3e3", size = 42893897, upload_time = "2025-04-27T12:31:39.406Z" }, + { url = "https://files.pythonhosted.org/packages/92/ac/7d4bd020ba9145f354012838692d48300c1b8fe5634bfda886abcada67ed/pyarrow-20.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e8b88758f9303fa5a83d6c90e176714b2fd3852e776fc2d7e42a22dd6c2fb368", size = 44543847, upload_time = "2025-04-27T12:31:45.997Z" }, + { url = "https://files.pythonhosted.org/packages/9d/07/290f4abf9ca702c5df7b47739c1b2c83588641ddfa2cc75e34a301d42e55/pyarrow-20.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:30b3051b7975801c1e1d387e17c588d8ab05ced9b1e14eec57915f79869b5031", size = 25653219, upload_time = "2025-04-27T12:31:54.11Z" }, + { url = "https://files.pythonhosted.org/packages/95/df/720bb17704b10bd69dde086e1400b8eefb8f58df3f8ac9cff6c425bf57f1/pyarrow-20.0.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:ca151afa4f9b7bc45bcc791eb9a89e90a9eb2772767d0b1e5389609c7d03db63", size = 30853957, upload_time = "2025-04-27T12:31:59.215Z" }, + { url = "https://files.pythonhosted.org/packages/d9/72/0d5f875efc31baef742ba55a00a25213a19ea64d7176e0fe001c5d8b6e9a/pyarrow-20.0.0-cp313-cp313t-macosx_12_0_x86_64.whl", hash = "sha256:4680f01ecd86e0dd63e39eb5cd59ef9ff24a9d166db328679e36c108dc993d4c", size = 32247972, upload_time = "2025-04-27T12:32:05.369Z" }, + { url = "https://files.pythonhosted.org/packages/d5/bc/e48b4fa544d2eea72f7844180eb77f83f2030b84c8dad860f199f94307ed/pyarrow-20.0.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f4c8534e2ff059765647aa69b75d6543f9fef59e2cd4c6d18015192565d2b70", size = 41256434, upload_time = "2025-04-27T12:32:11.814Z" }, + { url = "https://files.pythonhosted.org/packages/c3/01/974043a29874aa2cf4f87fb07fd108828fc7362300265a2a64a94965e35b/pyarrow-20.0.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e1f8a47f4b4ae4c69c4d702cfbdfe4d41e18e5c7ef6f1bb1c50918c1e81c57b", size = 42353648, upload_time = "2025-04-27T12:32:20.766Z" }, + { url = "https://files.pythonhosted.org/packages/68/95/cc0d3634cde9ca69b0e51cbe830d8915ea32dda2157560dda27ff3b3337b/pyarrow-20.0.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:a1f60dc14658efaa927f8214734f6a01a806d7690be4b3232ba526836d216122", size = 40619853, upload_time = "2025-04-27T12:32:28.1Z" }, + { url = "https://files.pythonhosted.org/packages/29/c2/3ad40e07e96a3e74e7ed7cc8285aadfa84eb848a798c98ec0ad009eb6bcc/pyarrow-20.0.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:204a846dca751428991346976b914d6d2a82ae5b8316a6ed99789ebf976551e6", size = 42241743, upload_time = "2025-04-27T12:32:35.792Z" }, + { url = "https://files.pythonhosted.org/packages/eb/cb/65fa110b483339add6a9bc7b6373614166b14e20375d4daa73483755f830/pyarrow-20.0.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:f3b117b922af5e4c6b9a9115825726cac7d8b1421c37c2b5e24fbacc8930612c", size = 42839441, upload_time = "2025-04-27T12:32:46.64Z" }, + { url = "https://files.pythonhosted.org/packages/98/7b/f30b1954589243207d7a0fbc9997401044bf9a033eec78f6cb50da3f304a/pyarrow-20.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e724a3fd23ae5b9c010e7be857f4405ed5e679db5c93e66204db1a69f733936a", size = 44503279, upload_time = "2025-04-27T12:32:56.503Z" }, + { url = "https://files.pythonhosted.org/packages/37/40/ad395740cd641869a13bcf60851296c89624662575621968dcfafabaa7f6/pyarrow-20.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:82f1ee5133bd8f49d31be1299dc07f585136679666b502540db854968576faf9", size = 25944982, upload_time = "2025-04-27T12:33:04.72Z" }, ] [[package]] name = "pycparser" version = "2.22" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1d/b2/31537cf4b1ca988837256c910a668b553fceb8f069bedc4b1c826024b52c/pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", size = 172736 } +sdist = { url = "https://files.pythonhosted.org/packages/1d/b2/31537cf4b1ca988837256c910a668b553fceb8f069bedc4b1c826024b52c/pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", size = 172736, upload_time = "2024-03-30T13:22:22.564Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552 }, + { url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552, upload_time = "2024-03-30T13:22:20.476Z" }, ] [[package]] @@ -1478,9 +1974,9 @@ dependencies = [ { name = "typing-extensions" }, { name = "typing-inspection" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/00/dd/4325abf92c39ba8623b5af936ddb36ffcfe0beae70405d456ab1fb2f5b8c/pydantic-2.11.7.tar.gz", hash = "sha256:d989c3c6cb79469287b1569f7447a17848c998458d49ebe294e975b9baf0f0db", size = 788350 } +sdist = { url = "https://files.pythonhosted.org/packages/00/dd/4325abf92c39ba8623b5af936ddb36ffcfe0beae70405d456ab1fb2f5b8c/pydantic-2.11.7.tar.gz", hash = "sha256:d989c3c6cb79469287b1569f7447a17848c998458d49ebe294e975b9baf0f0db", size = 788350, upload_time = "2025-06-14T08:33:17.137Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6a/c0/ec2b1c8712ca690e5d61979dee872603e92b8a32f94cc1b72d53beab008a/pydantic-2.11.7-py3-none-any.whl", hash = "sha256:dde5df002701f6de26248661f6835bbe296a47bf73990135c7d07ce741b9623b", size = 444782 }, + { url = "https://files.pythonhosted.org/packages/6a/c0/ec2b1c8712ca690e5d61979dee872603e92b8a32f94cc1b72d53beab008a/pydantic-2.11.7-py3-none-any.whl", hash = "sha256:dde5df002701f6de26248661f6835bbe296a47bf73990135c7d07ce741b9623b", size = 444782, upload_time = "2025-06-14T08:33:14.905Z" }, ] [[package]] @@ -1490,39 +1986,39 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ad/88/5f2260bdfae97aabf98f1778d43f69574390ad787afb646292a638c923d4/pydantic_core-2.33.2.tar.gz", hash = "sha256:7cb8bc3605c29176e1b105350d2e6474142d7c1bd1d9327c4a9bdb46bf827acc", size = 435195 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/18/8a/2b41c97f554ec8c71f2a8a5f85cb56a8b0956addfe8b0efb5b3d77e8bdc3/pydantic_core-2.33.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a7ec89dc587667f22b6a0b6579c249fca9026ce7c333fc142ba42411fa243cdc", size = 2009000 }, - { url = "https://files.pythonhosted.org/packages/a1/02/6224312aacb3c8ecbaa959897af57181fb6cf3a3d7917fd44d0f2917e6f2/pydantic_core-2.33.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3c6db6e52c6d70aa0d00d45cdb9b40f0433b96380071ea80b09277dba021ddf7", size = 1847996 }, - { url = "https://files.pythonhosted.org/packages/d6/46/6dcdf084a523dbe0a0be59d054734b86a981726f221f4562aed313dbcb49/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e61206137cbc65e6d5256e1166f88331d3b6238e082d9f74613b9b765fb9025", size = 1880957 }, - { url = "https://files.pythonhosted.org/packages/ec/6b/1ec2c03837ac00886ba8160ce041ce4e325b41d06a034adbef11339ae422/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb8c529b2819c37140eb51b914153063d27ed88e3bdc31b71198a198e921e011", size = 1964199 }, - { url = "https://files.pythonhosted.org/packages/2d/1d/6bf34d6adb9debd9136bd197ca72642203ce9aaaa85cfcbfcf20f9696e83/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c52b02ad8b4e2cf14ca7b3d918f3eb0ee91e63b3167c32591e57c4317e134f8f", size = 2120296 }, - { url = "https://files.pythonhosted.org/packages/e0/94/2bd0aaf5a591e974b32a9f7123f16637776c304471a0ab33cf263cf5591a/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96081f1605125ba0855dfda83f6f3df5ec90c61195421ba72223de35ccfb2f88", size = 2676109 }, - { url = "https://files.pythonhosted.org/packages/f9/41/4b043778cf9c4285d59742281a769eac371b9e47e35f98ad321349cc5d61/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f57a69461af2a5fa6e6bbd7a5f60d3b7e6cebb687f55106933188e79ad155c1", size = 2002028 }, - { url = "https://files.pythonhosted.org/packages/cb/d5/7bb781bf2748ce3d03af04d5c969fa1308880e1dca35a9bd94e1a96a922e/pydantic_core-2.33.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:572c7e6c8bb4774d2ac88929e3d1f12bc45714ae5ee6d9a788a9fb35e60bb04b", size = 2100044 }, - { url = "https://files.pythonhosted.org/packages/fe/36/def5e53e1eb0ad896785702a5bbfd25eed546cdcf4087ad285021a90ed53/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:db4b41f9bd95fbe5acd76d89920336ba96f03e149097365afe1cb092fceb89a1", size = 2058881 }, - { url = "https://files.pythonhosted.org/packages/01/6c/57f8d70b2ee57fc3dc8b9610315949837fa8c11d86927b9bb044f8705419/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:fa854f5cf7e33842a892e5c73f45327760bc7bc516339fda888c75ae60edaeb6", size = 2227034 }, - { url = "https://files.pythonhosted.org/packages/27/b9/9c17f0396a82b3d5cbea4c24d742083422639e7bb1d5bf600e12cb176a13/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5f483cfb75ff703095c59e365360cb73e00185e01aaea067cd19acffd2ab20ea", size = 2234187 }, - { url = "https://files.pythonhosted.org/packages/b0/6a/adf5734ffd52bf86d865093ad70b2ce543415e0e356f6cacabbc0d9ad910/pydantic_core-2.33.2-cp312-cp312-win32.whl", hash = "sha256:9cb1da0f5a471435a7bc7e439b8a728e8b61e59784b2af70d7c169f8dd8ae290", size = 1892628 }, - { url = "https://files.pythonhosted.org/packages/43/e4/5479fecb3606c1368d496a825d8411e126133c41224c1e7238be58b87d7e/pydantic_core-2.33.2-cp312-cp312-win_amd64.whl", hash = "sha256:f941635f2a3d96b2973e867144fde513665c87f13fe0e193c158ac51bfaaa7b2", size = 1955866 }, - { url = "https://files.pythonhosted.org/packages/0d/24/8b11e8b3e2be9dd82df4b11408a67c61bb4dc4f8e11b5b0fc888b38118b5/pydantic_core-2.33.2-cp312-cp312-win_arm64.whl", hash = "sha256:cca3868ddfaccfbc4bfb1d608e2ccaaebe0ae628e1416aeb9c4d88c001bb45ab", size = 1888894 }, - { url = "https://files.pythonhosted.org/packages/46/8c/99040727b41f56616573a28771b1bfa08a3d3fe74d3d513f01251f79f172/pydantic_core-2.33.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:1082dd3e2d7109ad8b7da48e1d4710c8d06c253cbc4a27c1cff4fbcaa97a9e3f", size = 2015688 }, - { url = "https://files.pythonhosted.org/packages/3a/cc/5999d1eb705a6cefc31f0b4a90e9f7fc400539b1a1030529700cc1b51838/pydantic_core-2.33.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f517ca031dfc037a9c07e748cefd8d96235088b83b4f4ba8939105d20fa1dcd6", size = 1844808 }, - { url = "https://files.pythonhosted.org/packages/6f/5e/a0a7b8885c98889a18b6e376f344da1ef323d270b44edf8174d6bce4d622/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a9f2c9dd19656823cb8250b0724ee9c60a82f3cdf68a080979d13092a3b0fef", size = 1885580 }, - { url = "https://files.pythonhosted.org/packages/3b/2a/953581f343c7d11a304581156618c3f592435523dd9d79865903272c256a/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2b0a451c263b01acebe51895bfb0e1cc842a5c666efe06cdf13846c7418caa9a", size = 1973859 }, - { url = "https://files.pythonhosted.org/packages/e6/55/f1a813904771c03a3f97f676c62cca0c0a4138654107c1b61f19c644868b/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ea40a64d23faa25e62a70ad163571c0b342b8bf66d5fa612ac0dec4f069d916", size = 2120810 }, - { url = "https://files.pythonhosted.org/packages/aa/c3/053389835a996e18853ba107a63caae0b9deb4a276c6b472931ea9ae6e48/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fb2d542b4d66f9470e8065c5469ec676978d625a8b7a363f07d9a501a9cb36a", size = 2676498 }, - { url = "https://files.pythonhosted.org/packages/eb/3c/f4abd740877a35abade05e437245b192f9d0ffb48bbbbd708df33d3cda37/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdac5d6ffa1b5a83bca06ffe7583f5576555e6c8b3a91fbd25ea7780f825f7d", size = 2000611 }, - { url = "https://files.pythonhosted.org/packages/59/a7/63ef2fed1837d1121a894d0ce88439fe3e3b3e48c7543b2a4479eb99c2bd/pydantic_core-2.33.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04a1a413977ab517154eebb2d326da71638271477d6ad87a769102f7c2488c56", size = 2107924 }, - { url = "https://files.pythonhosted.org/packages/04/8f/2551964ef045669801675f1cfc3b0d74147f4901c3ffa42be2ddb1f0efc4/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c8e7af2f4e0194c22b5b37205bfb293d166a7344a5b0d0eaccebc376546d77d5", size = 2063196 }, - { url = "https://files.pythonhosted.org/packages/26/bd/d9602777e77fc6dbb0c7db9ad356e9a985825547dce5ad1d30ee04903918/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:5c92edd15cd58b3c2d34873597a1e20f13094f59cf88068adb18947df5455b4e", size = 2236389 }, - { url = "https://files.pythonhosted.org/packages/42/db/0e950daa7e2230423ab342ae918a794964b053bec24ba8af013fc7c94846/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:65132b7b4a1c0beded5e057324b7e16e10910c106d43675d9bd87d4f38dde162", size = 2239223 }, - { url = "https://files.pythonhosted.org/packages/58/4d/4f937099c545a8a17eb52cb67fe0447fd9a373b348ccfa9a87f141eeb00f/pydantic_core-2.33.2-cp313-cp313-win32.whl", hash = "sha256:52fb90784e0a242bb96ec53f42196a17278855b0f31ac7c3cc6f5c1ec4811849", size = 1900473 }, - { url = "https://files.pythonhosted.org/packages/a0/75/4a0a9bac998d78d889def5e4ef2b065acba8cae8c93696906c3a91f310ca/pydantic_core-2.33.2-cp313-cp313-win_amd64.whl", hash = "sha256:c083a3bdd5a93dfe480f1125926afcdbf2917ae714bdb80b36d34318b2bec5d9", size = 1955269 }, - { url = "https://files.pythonhosted.org/packages/f9/86/1beda0576969592f1497b4ce8e7bc8cbdf614c352426271b1b10d5f0aa64/pydantic_core-2.33.2-cp313-cp313-win_arm64.whl", hash = "sha256:e80b087132752f6b3d714f041ccf74403799d3b23a72722ea2e6ba2e892555b9", size = 1893921 }, - { url = "https://files.pythonhosted.org/packages/a4/7d/e09391c2eebeab681df2b74bfe6c43422fffede8dc74187b2b0bf6fd7571/pydantic_core-2.33.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:61c18fba8e5e9db3ab908620af374db0ac1baa69f0f32df4f61ae23f15e586ac", size = 1806162 }, - { url = "https://files.pythonhosted.org/packages/f1/3d/847b6b1fed9f8ed3bb95a9ad04fbd0b212e832d4f0f50ff4d9ee5a9f15cf/pydantic_core-2.33.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95237e53bb015f67b63c91af7518a62a8660376a6a0db19b89acc77a4d6199f5", size = 1981560 }, - { url = "https://files.pythonhosted.org/packages/6f/9a/e73262f6c6656262b5fdd723ad90f518f579b7bc8622e43a942eec53c938/pydantic_core-2.33.2-cp313-cp313t-win_amd64.whl", hash = "sha256:c2fc0a768ef76c15ab9238afa6da7f69895bb5d1ee83aeea2e3509af4472d0b9", size = 1935777 }, +sdist = { url = "https://files.pythonhosted.org/packages/ad/88/5f2260bdfae97aabf98f1778d43f69574390ad787afb646292a638c923d4/pydantic_core-2.33.2.tar.gz", hash = "sha256:7cb8bc3605c29176e1b105350d2e6474142d7c1bd1d9327c4a9bdb46bf827acc", size = 435195, upload_time = "2025-04-23T18:33:52.104Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/8a/2b41c97f554ec8c71f2a8a5f85cb56a8b0956addfe8b0efb5b3d77e8bdc3/pydantic_core-2.33.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a7ec89dc587667f22b6a0b6579c249fca9026ce7c333fc142ba42411fa243cdc", size = 2009000, upload_time = "2025-04-23T18:31:25.863Z" }, + { url = "https://files.pythonhosted.org/packages/a1/02/6224312aacb3c8ecbaa959897af57181fb6cf3a3d7917fd44d0f2917e6f2/pydantic_core-2.33.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3c6db6e52c6d70aa0d00d45cdb9b40f0433b96380071ea80b09277dba021ddf7", size = 1847996, upload_time = "2025-04-23T18:31:27.341Z" }, + { url = "https://files.pythonhosted.org/packages/d6/46/6dcdf084a523dbe0a0be59d054734b86a981726f221f4562aed313dbcb49/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e61206137cbc65e6d5256e1166f88331d3b6238e082d9f74613b9b765fb9025", size = 1880957, upload_time = "2025-04-23T18:31:28.956Z" }, + { url = "https://files.pythonhosted.org/packages/ec/6b/1ec2c03837ac00886ba8160ce041ce4e325b41d06a034adbef11339ae422/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb8c529b2819c37140eb51b914153063d27ed88e3bdc31b71198a198e921e011", size = 1964199, upload_time = "2025-04-23T18:31:31.025Z" }, + { url = "https://files.pythonhosted.org/packages/2d/1d/6bf34d6adb9debd9136bd197ca72642203ce9aaaa85cfcbfcf20f9696e83/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c52b02ad8b4e2cf14ca7b3d918f3eb0ee91e63b3167c32591e57c4317e134f8f", size = 2120296, upload_time = "2025-04-23T18:31:32.514Z" }, + { url = "https://files.pythonhosted.org/packages/e0/94/2bd0aaf5a591e974b32a9f7123f16637776c304471a0ab33cf263cf5591a/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96081f1605125ba0855dfda83f6f3df5ec90c61195421ba72223de35ccfb2f88", size = 2676109, upload_time = "2025-04-23T18:31:33.958Z" }, + { url = "https://files.pythonhosted.org/packages/f9/41/4b043778cf9c4285d59742281a769eac371b9e47e35f98ad321349cc5d61/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f57a69461af2a5fa6e6bbd7a5f60d3b7e6cebb687f55106933188e79ad155c1", size = 2002028, upload_time = "2025-04-23T18:31:39.095Z" }, + { url = "https://files.pythonhosted.org/packages/cb/d5/7bb781bf2748ce3d03af04d5c969fa1308880e1dca35a9bd94e1a96a922e/pydantic_core-2.33.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:572c7e6c8bb4774d2ac88929e3d1f12bc45714ae5ee6d9a788a9fb35e60bb04b", size = 2100044, upload_time = "2025-04-23T18:31:41.034Z" }, + { url = "https://files.pythonhosted.org/packages/fe/36/def5e53e1eb0ad896785702a5bbfd25eed546cdcf4087ad285021a90ed53/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:db4b41f9bd95fbe5acd76d89920336ba96f03e149097365afe1cb092fceb89a1", size = 2058881, upload_time = "2025-04-23T18:31:42.757Z" }, + { url = "https://files.pythonhosted.org/packages/01/6c/57f8d70b2ee57fc3dc8b9610315949837fa8c11d86927b9bb044f8705419/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:fa854f5cf7e33842a892e5c73f45327760bc7bc516339fda888c75ae60edaeb6", size = 2227034, upload_time = "2025-04-23T18:31:44.304Z" }, + { url = "https://files.pythonhosted.org/packages/27/b9/9c17f0396a82b3d5cbea4c24d742083422639e7bb1d5bf600e12cb176a13/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5f483cfb75ff703095c59e365360cb73e00185e01aaea067cd19acffd2ab20ea", size = 2234187, upload_time = "2025-04-23T18:31:45.891Z" }, + { url = "https://files.pythonhosted.org/packages/b0/6a/adf5734ffd52bf86d865093ad70b2ce543415e0e356f6cacabbc0d9ad910/pydantic_core-2.33.2-cp312-cp312-win32.whl", hash = "sha256:9cb1da0f5a471435a7bc7e439b8a728e8b61e59784b2af70d7c169f8dd8ae290", size = 1892628, upload_time = "2025-04-23T18:31:47.819Z" }, + { url = "https://files.pythonhosted.org/packages/43/e4/5479fecb3606c1368d496a825d8411e126133c41224c1e7238be58b87d7e/pydantic_core-2.33.2-cp312-cp312-win_amd64.whl", hash = "sha256:f941635f2a3d96b2973e867144fde513665c87f13fe0e193c158ac51bfaaa7b2", size = 1955866, upload_time = "2025-04-23T18:31:49.635Z" }, + { url = "https://files.pythonhosted.org/packages/0d/24/8b11e8b3e2be9dd82df4b11408a67c61bb4dc4f8e11b5b0fc888b38118b5/pydantic_core-2.33.2-cp312-cp312-win_arm64.whl", hash = "sha256:cca3868ddfaccfbc4bfb1d608e2ccaaebe0ae628e1416aeb9c4d88c001bb45ab", size = 1888894, upload_time = "2025-04-23T18:31:51.609Z" }, + { url = "https://files.pythonhosted.org/packages/46/8c/99040727b41f56616573a28771b1bfa08a3d3fe74d3d513f01251f79f172/pydantic_core-2.33.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:1082dd3e2d7109ad8b7da48e1d4710c8d06c253cbc4a27c1cff4fbcaa97a9e3f", size = 2015688, upload_time = "2025-04-23T18:31:53.175Z" }, + { url = "https://files.pythonhosted.org/packages/3a/cc/5999d1eb705a6cefc31f0b4a90e9f7fc400539b1a1030529700cc1b51838/pydantic_core-2.33.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f517ca031dfc037a9c07e748cefd8d96235088b83b4f4ba8939105d20fa1dcd6", size = 1844808, upload_time = "2025-04-23T18:31:54.79Z" }, + { url = "https://files.pythonhosted.org/packages/6f/5e/a0a7b8885c98889a18b6e376f344da1ef323d270b44edf8174d6bce4d622/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a9f2c9dd19656823cb8250b0724ee9c60a82f3cdf68a080979d13092a3b0fef", size = 1885580, upload_time = "2025-04-23T18:31:57.393Z" }, + { url = "https://files.pythonhosted.org/packages/3b/2a/953581f343c7d11a304581156618c3f592435523dd9d79865903272c256a/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2b0a451c263b01acebe51895bfb0e1cc842a5c666efe06cdf13846c7418caa9a", size = 1973859, upload_time = "2025-04-23T18:31:59.065Z" }, + { url = "https://files.pythonhosted.org/packages/e6/55/f1a813904771c03a3f97f676c62cca0c0a4138654107c1b61f19c644868b/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ea40a64d23faa25e62a70ad163571c0b342b8bf66d5fa612ac0dec4f069d916", size = 2120810, upload_time = "2025-04-23T18:32:00.78Z" }, + { url = "https://files.pythonhosted.org/packages/aa/c3/053389835a996e18853ba107a63caae0b9deb4a276c6b472931ea9ae6e48/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fb2d542b4d66f9470e8065c5469ec676978d625a8b7a363f07d9a501a9cb36a", size = 2676498, upload_time = "2025-04-23T18:32:02.418Z" }, + { url = "https://files.pythonhosted.org/packages/eb/3c/f4abd740877a35abade05e437245b192f9d0ffb48bbbbd708df33d3cda37/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdac5d6ffa1b5a83bca06ffe7583f5576555e6c8b3a91fbd25ea7780f825f7d", size = 2000611, upload_time = "2025-04-23T18:32:04.152Z" }, + { url = "https://files.pythonhosted.org/packages/59/a7/63ef2fed1837d1121a894d0ce88439fe3e3b3e48c7543b2a4479eb99c2bd/pydantic_core-2.33.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04a1a413977ab517154eebb2d326da71638271477d6ad87a769102f7c2488c56", size = 2107924, upload_time = "2025-04-23T18:32:06.129Z" }, + { url = "https://files.pythonhosted.org/packages/04/8f/2551964ef045669801675f1cfc3b0d74147f4901c3ffa42be2ddb1f0efc4/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c8e7af2f4e0194c22b5b37205bfb293d166a7344a5b0d0eaccebc376546d77d5", size = 2063196, upload_time = "2025-04-23T18:32:08.178Z" }, + { url = "https://files.pythonhosted.org/packages/26/bd/d9602777e77fc6dbb0c7db9ad356e9a985825547dce5ad1d30ee04903918/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:5c92edd15cd58b3c2d34873597a1e20f13094f59cf88068adb18947df5455b4e", size = 2236389, upload_time = "2025-04-23T18:32:10.242Z" }, + { url = "https://files.pythonhosted.org/packages/42/db/0e950daa7e2230423ab342ae918a794964b053bec24ba8af013fc7c94846/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:65132b7b4a1c0beded5e057324b7e16e10910c106d43675d9bd87d4f38dde162", size = 2239223, upload_time = "2025-04-23T18:32:12.382Z" }, + { url = "https://files.pythonhosted.org/packages/58/4d/4f937099c545a8a17eb52cb67fe0447fd9a373b348ccfa9a87f141eeb00f/pydantic_core-2.33.2-cp313-cp313-win32.whl", hash = "sha256:52fb90784e0a242bb96ec53f42196a17278855b0f31ac7c3cc6f5c1ec4811849", size = 1900473, upload_time = "2025-04-23T18:32:14.034Z" }, + { url = "https://files.pythonhosted.org/packages/a0/75/4a0a9bac998d78d889def5e4ef2b065acba8cae8c93696906c3a91f310ca/pydantic_core-2.33.2-cp313-cp313-win_amd64.whl", hash = "sha256:c083a3bdd5a93dfe480f1125926afcdbf2917ae714bdb80b36d34318b2bec5d9", size = 1955269, upload_time = "2025-04-23T18:32:15.783Z" }, + { url = "https://files.pythonhosted.org/packages/f9/86/1beda0576969592f1497b4ce8e7bc8cbdf614c352426271b1b10d5f0aa64/pydantic_core-2.33.2-cp313-cp313-win_arm64.whl", hash = "sha256:e80b087132752f6b3d714f041ccf74403799d3b23a72722ea2e6ba2e892555b9", size = 1893921, upload_time = "2025-04-23T18:32:18.473Z" }, + { url = "https://files.pythonhosted.org/packages/a4/7d/e09391c2eebeab681df2b74bfe6c43422fffede8dc74187b2b0bf6fd7571/pydantic_core-2.33.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:61c18fba8e5e9db3ab908620af374db0ac1baa69f0f32df4f61ae23f15e586ac", size = 1806162, upload_time = "2025-04-23T18:32:20.188Z" }, + { url = "https://files.pythonhosted.org/packages/f1/3d/847b6b1fed9f8ed3bb95a9ad04fbd0b212e832d4f0f50ff4d9ee5a9f15cf/pydantic_core-2.33.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95237e53bb015f67b63c91af7518a62a8660376a6a0db19b89acc77a4d6199f5", size = 1981560, upload_time = "2025-04-23T18:32:22.354Z" }, + { url = "https://files.pythonhosted.org/packages/6f/9a/e73262f6c6656262b5fdd723ad90f518f579b7bc8622e43a942eec53c938/pydantic_core-2.33.2-cp313-cp313t-win_amd64.whl", hash = "sha256:c2fc0a768ef76c15ab9238afa6da7f69895bb5d1ee83aeea2e3509af4472d0b9", size = 1935777, upload_time = "2025-04-23T18:32:25.088Z" }, ] [[package]] @@ -1538,18 +2034,57 @@ dependencies = [ { name = "requests" }, { name = "wbgapi" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/5e/72/3e56d8166ca4b366a4e37c85711a706bba66768f70ba690bdb279f728d8d/pydeflate-2.1.3.tar.gz", hash = "sha256:48a2b74ad900dd8c50dfb1e4cdfcea8ca11cbd2d3a713bf9208f2028fea4cf4f", size = 26586 } +sdist = { url = "https://files.pythonhosted.org/packages/5e/72/3e56d8166ca4b366a4e37c85711a706bba66768f70ba690bdb279f728d8d/pydeflate-2.1.3.tar.gz", hash = "sha256:48a2b74ad900dd8c50dfb1e4cdfcea8ca11cbd2d3a713bf9208f2028fea4cf4f", size = 26586, upload_time = "2025-06-03T09:38:12.25Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/31/31/e703ab5bc311c58e4dc00759d7a48a850877b8bbcd64c9778e2315e06bd5/pydeflate-2.1.3-py3-none-any.whl", hash = "sha256:09ebdde04eb2fea1c4b6712889cb2a9d4c2dd22ce0204aaeae64f4335667354f", size = 32540 }, + { url = "https://files.pythonhosted.org/packages/31/31/e703ab5bc311c58e4dc00759d7a48a850877b8bbcd64c9778e2315e06bd5/pydeflate-2.1.3-py3-none-any.whl", hash = "sha256:09ebdde04eb2fea1c4b6712889cb2a9d4c2dd22ce0204aaeae64f4335667354f", size = 32540, upload_time = "2025-06-03T09:38:10.858Z" }, +] + +[[package]] +name = "pygithub" +version = "2.7.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyjwt", extra = ["crypto"] }, + { name = "pynacl" }, + { name = "requests" }, + { name = "typing-extensions" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6a/a7/403e04aa96e2d94e1518d518d69718c2ba978c8d3ffa4ab3b101b94dbafa/pygithub-2.7.0.tar.gz", hash = "sha256:7cd6eafabb09b5369afba3586d86b1f1ad6f1326d2ff01bc47bb26615dce4cbb", size = 3707928, upload_time = "2025-07-31T11:52:53.714Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/57/76/d768dd31322173b3956692b75471ac37bf3759c7abb603152f6a9b6594a8/pygithub-2.7.0-py3-none-any.whl", hash = "sha256:40ecbfe26dc55cc34ab4b0ffa1d455e6f816ef9a2bc8d6f5ad18ce572f163700", size = 416514, upload_time = "2025-07-31T11:52:51.909Z" }, ] [[package]] name = "pygments" version = "2.19.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b0/77/a5b8c569bf593b0140bde72ea885a803b82086995367bf2037de0159d924/pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", size = 4968631 } +sdist = { url = "https://files.pythonhosted.org/packages/b0/77/a5b8c569bf593b0140bde72ea885a803b82086995367bf2037de0159d924/pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", size = 4968631, upload_time = "2025-06-21T13:39:12.283Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217 }, + { url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217, upload_time = "2025-06-21T13:39:07.939Z" }, +] + +[[package]] +name = "pygtrie" +version = "2.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b9/13/55deec25bf09383216fa7f1dfcdbfca40a04aa00b6d15a5cbf25af8fce5f/pygtrie-2.5.0.tar.gz", hash = "sha256:203514ad826eb403dab1d2e2ddd034e0d1534bbe4dbe0213bb0593f66beba4e2", size = 39266, upload_time = "2022-07-16T14:29:47.459Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/cd/bd196b2cf014afb1009de8b0f05ecd54011d881944e62763f3c1b1e8ef37/pygtrie-2.5.0-py3-none-any.whl", hash = "sha256:8795cda8105493d5ae159a5bef313ff13156c5d4d72feddefacaad59f8c8ce16", size = 25099, upload_time = "2022-09-23T20:30:05.12Z" }, +] + +[[package]] +name = "pyjwt" +version = "2.10.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e7/46/bd74733ff231675599650d3e47f361794b22ef3e3770998dda30d3b63726/pyjwt-2.10.1.tar.gz", hash = "sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953", size = 87785, upload_time = "2024-11-28T03:43:29.933Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/61/ad/689f02752eeec26aed679477e80e632ef1b682313be70793d798c1d5fc8f/PyJWT-2.10.1-py3-none-any.whl", hash = "sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb", size = 22997, upload_time = "2024-11-28T03:43:27.893Z" }, +] + +[package.optional-dependencies] +crypto = [ + { name = "cryptography" }, ] [[package]] @@ -1560,9 +2095,49 @@ dependencies = [ { name = "markdown" }, { name = "pyyaml" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/1a/0a/c06b542ac108bfc73200677309cd9188a3a01b127a63f20cadc18d873d88/pymdown_extensions-10.16.tar.gz", hash = "sha256:71dac4fca63fabeffd3eb9038b756161a33ec6e8d230853d3cecf562155ab3de", size = 853197 } +sdist = { url = "https://files.pythonhosted.org/packages/1a/0a/c06b542ac108bfc73200677309cd9188a3a01b127a63f20cadc18d873d88/pymdown_extensions-10.16.tar.gz", hash = "sha256:71dac4fca63fabeffd3eb9038b756161a33ec6e8d230853d3cecf562155ab3de", size = 853197, upload_time = "2025-06-21T17:56:36.974Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/98/d4/10bb14004d3c792811e05e21b5e5dcae805aacb739bd12a0540967b99592/pymdown_extensions-10.16-py3-none-any.whl", hash = "sha256:f5dd064a4db588cb2d95229fc4ee63a1b16cc8b4d0e6145c0899ed8723da1df2", size = 266143 }, + { url = "https://files.pythonhosted.org/packages/98/d4/10bb14004d3c792811e05e21b5e5dcae805aacb739bd12a0540967b99592/pymdown_extensions-10.16-py3-none-any.whl", hash = "sha256:f5dd064a4db588cb2d95229fc4ee63a1b16cc8b4d0e6145c0899ed8723da1df2", size = 266143, upload_time = "2025-06-21T17:56:35.356Z" }, +] + +[[package]] +name = "pynacl" +version = "1.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a7/22/27582568be639dfe22ddb3902225f91f2f17ceff88ce80e4db396c8986da/PyNaCl-1.5.0.tar.gz", hash = "sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba", size = 3392854, upload_time = "2022-01-07T22:05:41.134Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ce/75/0b8ede18506041c0bf23ac4d8e2971b4161cd6ce630b177d0a08eb0d8857/PyNaCl-1.5.0-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1", size = 349920, upload_time = "2022-01-07T22:05:49.156Z" }, + { url = "https://files.pythonhosted.org/packages/59/bb/fddf10acd09637327a97ef89d2a9d621328850a72f1fdc8c08bdf72e385f/PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92", size = 601722, upload_time = "2022-01-07T22:05:50.989Z" }, + { url = "https://files.pythonhosted.org/packages/5d/70/87a065c37cca41a75f2ce113a5a2c2aa7533be648b184ade58971b5f7ccc/PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a36d4a9dda1f19ce6e03c9a784a2921a4b726b02e1c736600ca9c22029474394", size = 680087, upload_time = "2022-01-07T22:05:52.539Z" }, + { url = "https://files.pythonhosted.org/packages/ee/87/f1bb6a595f14a327e8285b9eb54d41fef76c585a0edef0a45f6fc95de125/PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0c84947a22519e013607c9be43706dd42513f9e6ae5d39d3613ca1e142fba44d", size = 856678, upload_time = "2022-01-07T22:05:54.251Z" }, + { url = "https://files.pythonhosted.org/packages/66/28/ca86676b69bf9f90e710571b67450508484388bfce09acf8a46f0b8c785f/PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06b8f6fa7f5de8d5d2f7573fe8c863c051225a27b61e6860fd047b1775807858", size = 1133660, upload_time = "2022-01-07T22:05:56.056Z" }, + { url = "https://files.pythonhosted.org/packages/3d/85/c262db650e86812585e2bc59e497a8f59948a005325a11bbbc9ecd3fe26b/PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b", size = 663824, upload_time = "2022-01-07T22:05:57.434Z" }, + { url = "https://files.pythonhosted.org/packages/fd/1a/cc308a884bd299b651f1633acb978e8596c71c33ca85e9dc9fa33a5399b9/PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:61f642bf2378713e2c2e1de73444a3778e5f0a38be6fee0fe532fe30060282ff", size = 1117912, upload_time = "2022-01-07T22:05:58.665Z" }, + { url = "https://files.pythonhosted.org/packages/25/2d/b7df6ddb0c2a33afdb358f8af6ea3b8c4d1196ca45497dd37a56f0c122be/PyNaCl-1.5.0-cp36-abi3-win32.whl", hash = "sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543", size = 204624, upload_time = "2022-01-07T22:06:00.085Z" }, + { url = "https://files.pythonhosted.org/packages/5e/22/d3db169895faaf3e2eda892f005f433a62db2decbcfbc2f61e6517adfa87/PyNaCl-1.5.0-cp36-abi3-win_amd64.whl", hash = "sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93", size = 212141, upload_time = "2022-01-07T22:06:01.861Z" }, +] + +[[package]] +name = "pyomo" +version = "6.9.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ply" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/91/d4/bbb4ab79bb3015e3bdd488435ef71f7806144cc6ae4146ee6c5f64ac53f2/pyomo-6.9.4.tar.gz", hash = "sha256:34ad22cd6bf9956de9c0d3842d01c1f92dee0515b25aa3e8f113b326549b1231", size = 3033231, upload_time = "2025-08-28T02:11:24.976Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/6b/80f40b4b72a3c6a207130ce431765f897c76133a15e7e38e66f9f40d36f3/pyomo-6.9.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cc3cd52c143991071821bbb9943d2a59512481b5d15adb7add32f92def4172ce", size = 4266926, upload_time = "2025-08-28T02:09:44.833Z" }, + { url = "https://files.pythonhosted.org/packages/48/30/f7ef1be3deb445694b63800de6a36dff31670014d5aa67d42e1716c04970/pyomo-6.9.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3a5e1dc79e1a2ec1f6247f0df59ac3572781e40218093a624f9213dd3ae6913f", size = 4255513, upload_time = "2025-08-28T02:09:49.197Z" }, + { url = "https://files.pythonhosted.org/packages/76/f4/9493daae82595d7d776ba6cd0d5d167951700670e363dec443415e753808/pyomo-6.9.4-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:abea6ca55295b179c1c91184db4eece7589cfd6099869eff8e3e6aa8a06463d1", size = 4311852, upload_time = "2025-08-28T02:09:53.415Z" }, + { url = "https://files.pythonhosted.org/packages/83/d7/e39e605ab33c2729afb043bed94ce7ee382bd5b4bc708f6c90a1d2600456/pyomo-6.9.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ddd48dec34b270ca2621863a216c4f3a6fcc409db86a7dc34c31eb788a44b8c6", size = 4343130, upload_time = "2025-08-28T02:09:57.397Z" }, + { url = "https://files.pythonhosted.org/packages/65/04/dc4d3d9369c4cb1b6e68ce18bbba066ea83284942322836e791dbf693bb2/pyomo-6.9.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1a768a178ae3f0391c66e2334da3d1618c9c85c9d879bc86de441efd143f491", size = 4267029, upload_time = "2025-08-28T02:10:02.066Z" }, + { url = "https://files.pythonhosted.org/packages/6b/52/824e9cea51ed0a25636b66e8c122dce5fcd22a197bf4646dd6c5f138fe36/pyomo-6.9.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:09cde10e5fe8414f453d1ed3bccef1b42fc048fc2da0a9c936e40b2f877201bf", size = 4255606, upload_time = "2025-08-28T02:10:06.383Z" }, + { url = "https://files.pythonhosted.org/packages/a2/dc/97005d683ca57e231a8f613921adaf480d3a82f40d280c6d0185855a92c6/pyomo-6.9.4-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:df3e173d330666f881258deefa79f37373b941d4a5b00edc6aa5b10680720dc1", size = 4312670, upload_time = "2025-08-28T02:10:11.563Z" }, + { url = "https://files.pythonhosted.org/packages/64/73/47525078660eced084abb9a79e1e4c74098c992316c93ab6ead2dc7f8bda/pyomo-6.9.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8a13baebcdb05deadeb0ec4b04ecedffa65f1e86179418fa67e603a4f8f1bf17", size = 4344540, upload_time = "2025-08-28T02:10:15.731Z" }, + { url = "https://files.pythonhosted.org/packages/d8/e3/56c20c3358e58206e7270a42ff666a267a6c01492213c8c47aad8676b487/pyomo-6.9.4-py3-none-any.whl", hash = "sha256:a274d74616c0b793279931f3b2175a31f9c63213f2d7b86c14d168c6c264f782", size = 3892640, upload_time = "2025-08-28T02:11:13.845Z" }, ] [[package]] @@ -1572,9 +2147,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "unidecode" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d6/7c/7c45a9e9bf6ddb57b67e66cf4e8076a7baf3a790a3411daac1a7a2df0c5b/pyphonetics-0.5.3.tar.gz", hash = "sha256:2d3c2e359fde91a3c57914f0b5468bba7a5daf38e7927fd999992ea68990fbe4", size = 10314 } +sdist = { url = "https://files.pythonhosted.org/packages/d6/7c/7c45a9e9bf6ddb57b67e66cf4e8076a7baf3a790a3411daac1a7a2df0c5b/pyphonetics-0.5.3.tar.gz", hash = "sha256:2d3c2e359fde91a3c57914f0b5468bba7a5daf38e7927fd999992ea68990fbe4", size = 10314, upload_time = "2020-02-25T12:08:31.049Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/bd/dd/a7d0a860efd3d4335d538b4361b8e9af8311f2aba2e8c7e4c7a47d623b6e/pyphonetics-0.5.3-py2.py3-none-any.whl", hash = "sha256:e6b29671d0d624dda1cac59c0c5a8a7216d8db504bae4941bfc482e04a0621d1", size = 10729 }, + { url = "https://files.pythonhosted.org/packages/bd/dd/a7d0a860efd3d4335d538b4361b8e9af8311f2aba2e8c7e4c7a47d623b6e/pyphonetics-0.5.3-py2.py3-none-any.whl", hash = "sha256:e6b29671d0d624dda1cac59c0c5a8a7216d8db504bae4941bfc482e04a0621d1", size = 10729, upload_time = "2020-02-25T12:08:25.368Z" }, ] [[package]] @@ -1588,9 +2163,9 @@ dependencies = [ { name = "pluggy" }, { name = "pygments" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/08/ba/45911d754e8eba3d5a841a5ce61a65a685ff1798421ac054f85aa8747dfb/pytest-8.4.1.tar.gz", hash = "sha256:7c67fd69174877359ed9371ec3af8a3d2b04741818c51e5e99cc1742251fa93c", size = 1517714 } +sdist = { url = "https://files.pythonhosted.org/packages/08/ba/45911d754e8eba3d5a841a5ce61a65a685ff1798421ac054f85aa8747dfb/pytest-8.4.1.tar.gz", hash = "sha256:7c67fd69174877359ed9371ec3af8a3d2b04741818c51e5e99cc1742251fa93c", size = 1517714, upload_time = "2025-06-18T05:48:06.109Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/29/16/c8a903f4c4dffe7a12843191437d7cd8e32751d5de349d45d3fe69544e87/pytest-8.4.1-py3-none-any.whl", hash = "sha256:539c70ba6fcead8e78eebbf1115e8b589e7565830d7d006a8723f19ac8a0afb7", size = 365474 }, + { url = "https://files.pythonhosted.org/packages/29/16/c8a903f4c4dffe7a12843191437d7cd8e32751d5de349d45d3fe69544e87/pytest-8.4.1-py3-none-any.whl", hash = "sha256:539c70ba6fcead8e78eebbf1115e8b589e7565830d7d006a8723f19ac8a0afb7", size = 365474, upload_time = "2025-06-18T05:48:03.955Z" }, ] [[package]] @@ -1602,9 +2177,9 @@ dependencies = [ { name = "pluggy" }, { name = "pytest" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/18/99/668cade231f434aaa59bbfbf49469068d2ddd945000621d3d165d2e7dd7b/pytest_cov-6.2.1.tar.gz", hash = "sha256:25cc6cc0a5358204b8108ecedc51a9b57b34cc6b8c967cc2c01a4e00d8a67da2", size = 69432 } +sdist = { url = "https://files.pythonhosted.org/packages/18/99/668cade231f434aaa59bbfbf49469068d2ddd945000621d3d165d2e7dd7b/pytest_cov-6.2.1.tar.gz", hash = "sha256:25cc6cc0a5358204b8108ecedc51a9b57b34cc6b8c967cc2c01a4e00d8a67da2", size = 69432, upload_time = "2025-06-12T10:47:47.684Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/bc/16/4ea354101abb1287856baa4af2732be351c7bee728065aed451b678153fd/pytest_cov-6.2.1-py3-none-any.whl", hash = "sha256:f5bc4c23f42f1cdd23c70b1dab1bbaef4fc505ba950d53e0081d0730dd7e86d5", size = 24644 }, + { url = "https://files.pythonhosted.org/packages/bc/16/4ea354101abb1287856baa4af2732be351c7bee728065aed451b678153fd/pytest_cov-6.2.1-py3-none-any.whl", hash = "sha256:f5bc4c23f42f1cdd23c70b1dab1bbaef4fc505ba950d53e0081d0730dd7e86d5", size = 24644, upload_time = "2025-06-12T10:47:45.932Z" }, ] [[package]] @@ -1615,9 +2190,46 @@ dependencies = [ { name = "execnet" }, { name = "pytest" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/78/b4/439b179d1ff526791eb921115fca8e44e596a13efeda518b9d845a619450/pytest_xdist-3.8.0.tar.gz", hash = "sha256:7e578125ec9bc6050861aa93f2d59f1d8d085595d6551c2c90b6f4fad8d3a9f1", size = 88069 } +sdist = { url = "https://files.pythonhosted.org/packages/78/b4/439b179d1ff526791eb921115fca8e44e596a13efeda518b9d845a619450/pytest_xdist-3.8.0.tar.gz", hash = "sha256:7e578125ec9bc6050861aa93f2d59f1d8d085595d6551c2c90b6f4fad8d3a9f1", size = 88069, upload_time = "2025-07-01T13:30:59.346Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl", hash = "sha256:202ca578cfeb7370784a8c33d6d05bc6e13b4f25b5053c30a152269fd10f0b88", size = 46396 }, + { url = "https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl", hash = "sha256:202ca578cfeb7370784a8c33d6d05bc6e13b4f25b5053c30a152269fd10f0b88", size = 46396, upload_time = "2025-07-01T13:30:56.632Z" }, +] + +[[package]] +name = "python-calamine" +version = "0.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cc/03/269f96535705b2f18c8977fa58e76763b4e4727a9b3ae277a9468c8ffe05/python_calamine-0.4.0.tar.gz", hash = "sha256:94afcbae3fec36d2d7475095a59d4dc6fae45829968c743cb799ebae269d7bbf", size = 127737, upload_time = "2025-07-04T06:05:28.626Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/63/60/f951513aaaa470b3a38a87d65eca45e0a02bc329b47864f5a17db563f746/python_calamine-0.4.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:74bca5d44a73acf3dcfa5370820797fcfd225c8c71abcddea987c5b4f5077e98", size = 826603, upload_time = "2025-07-04T06:03:51.245Z" }, + { url = "https://files.pythonhosted.org/packages/76/3f/789955bbc77831c639890758f945eb2b25d6358065edf00da6751226cf31/python_calamine-0.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cf80178f5d1b0ee2ccfffb8549c50855f6249e930664adc5807f4d0d6c2b269c", size = 805826, upload_time = "2025-07-04T06:03:52.482Z" }, + { url = "https://files.pythonhosted.org/packages/00/4c/f87d17d996f647030a40bfd124fe45fe893c002bee35ae6aca9910a923ae/python_calamine-0.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65cfef345386ae86f7720f1be93495a40fd7e7feabb8caa1df5025d7fbc58a1f", size = 874989, upload_time = "2025-07-04T06:03:53.794Z" }, + { url = "https://files.pythonhosted.org/packages/47/d2/3269367303f6c0488cf1bfebded3f9fe968d118a988222e04c9b2636bf2e/python_calamine-0.4.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f23e6214dbf9b29065a5dcfd6a6c674dd0e251407298c9138611c907d53423ff", size = 877504, upload_time = "2025-07-04T06:03:55.095Z" }, + { url = "https://files.pythonhosted.org/packages/f9/6d/c7ac35f5c7125e8bd07eb36773f300fda20dd2da635eae78a8cebb0b6ab7/python_calamine-0.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d792d304ee232ab01598e1d3ab22e074a32c2511476b5fb4f16f4222d9c2a265", size = 1014171, upload_time = "2025-07-04T06:03:56.777Z" }, + { url = "https://files.pythonhosted.org/packages/f0/81/5ea8792a2e9ab5e2a05872db3a4d3ed3538ad5af1861282c789e2f13a8cf/python_calamine-0.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bf813425918fd68f3e991ef7c4b5015be0a1a95fc4a8ab7e73c016ef1b881bb4", size = 926737, upload_time = "2025-07-04T06:03:58.024Z" }, + { url = "https://files.pythonhosted.org/packages/cc/6e/989e56e6f073fc0981a74ba7a393881eb351bb143e5486aa629b5e5d6a8b/python_calamine-0.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbe2a0ccb4d003635888eea83a995ff56b0748c8c76fc71923544f5a4a7d4cd7", size = 887032, upload_time = "2025-07-04T06:03:59.298Z" }, + { url = "https://files.pythonhosted.org/packages/5d/92/2c9bd64277c6fe4be695d7d5a803b38d953ec8565037486be7506642c27c/python_calamine-0.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a7b3bb5f0d910b9b03c240987560f843256626fd443279759df4e91b717826d2", size = 929700, upload_time = "2025-07-04T06:04:01.388Z" }, + { url = "https://files.pythonhosted.org/packages/64/fa/fc758ca37701d354a6bc7d63118699f1c73788a1f2e1b44d720824992764/python_calamine-0.4.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:bd2c0fc2b5eabd08ceac8a2935bffa88dbc6116db971aa8c3f244bad3fd0f644", size = 1053971, upload_time = "2025-07-04T06:04:02.704Z" }, + { url = "https://files.pythonhosted.org/packages/65/52/40d7e08ae0ddba331cdc9f7fb3e92972f8f38d7afbd00228158ff6d1fceb/python_calamine-0.4.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:85b547cb1c5b692a0c2406678d666dbc1cec65a714046104683fe4f504a1721d", size = 1057057, upload_time = "2025-07-04T06:04:04.014Z" }, + { url = "https://files.pythonhosted.org/packages/16/de/e8a071c0adfda73285d891898a24f6e99338328c404f497ff5b0e6bc3d45/python_calamine-0.4.0-cp312-cp312-win32.whl", hash = "sha256:4c2a1e3a0db4d6de4587999a21cc35845648c84fba81c03dd6f3072c690888e4", size = 665540, upload_time = "2025-07-04T06:04:05.679Z" }, + { url = "https://files.pythonhosted.org/packages/5e/f2/7fdfada13f80db12356853cf08697ff4e38800a1809c2bdd26ee60962e7a/python_calamine-0.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:b193c89ffcc146019475cd121c552b23348411e19c04dedf5c766a20db64399a", size = 695366, upload_time = "2025-07-04T06:04:06.977Z" }, + { url = "https://files.pythonhosted.org/packages/20/66/d37412ad854480ce32f50d9f74f2a2f88b1b8a6fbc32f70aabf3211ae89e/python_calamine-0.4.0-cp312-cp312-win_arm64.whl", hash = "sha256:43a0f15e0b60c75a71b21a012b911d5d6f5fa052afad2a8edbc728af43af0fcf", size = 670740, upload_time = "2025-07-04T06:04:08.656Z" }, + { url = "https://files.pythonhosted.org/packages/5a/10/f78218ccdc5bb5591a37d582c7e8723121d0fbe8196c5a4089110ec02f22/python_calamine-0.4.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:f8d6b2d2ae73acf91343f02756bdcb2fa6117db4eaf5cfab75ce50dfb54525ee", size = 826339, upload_time = "2025-07-04T06:04:10.254Z" }, + { url = "https://files.pythonhosted.org/packages/15/b1/d7d0dbbd0469db0fc628b1b9ee3a8f3b698391279f0d7aea96e2018a3863/python_calamine-0.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:aca7e019f42ca16806fef53e3028fa158005c0e68eabda577c3f3c2bea9735fd", size = 805473, upload_time = "2025-07-04T06:04:11.557Z" }, + { url = "https://files.pythonhosted.org/packages/46/52/033b902fb11f9b4bb59fa18621acbf5eaf4ecb0bce878d34fcb0020229df/python_calamine-0.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aca67cb447ba8dcefa4d5a1131d1cfdd1e0d0a0f0c6470655ce9ad37b7cfa228", size = 874275, upload_time = "2025-07-04T06:04:13.318Z" }, + { url = "https://files.pythonhosted.org/packages/56/12/e6b589293314a5d10b2c309411542424ebefb77430cc715d7601d80349ae/python_calamine-0.4.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e127d3b78d511d4f6fbdfed02fe666d83a722d73e27dd64d1718be9efafbabfe", size = 877061, upload_time = "2025-07-04T06:04:15.013Z" }, + { url = "https://files.pythonhosted.org/packages/64/24/0eeb583eb5d44f674ca9f7a846c665e33190431386d7c9f6d08ec9f09d3c/python_calamine-0.4.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e47891d9d62e3015448749ddb2ba60ab583a651d0fca9a3a1794936942ad7d5d", size = 1013946, upload_time = "2025-07-04T06:04:16.647Z" }, + { url = "https://files.pythonhosted.org/packages/c4/93/360cf58b8e24f760a3d4643423389dbc37bdca8b6fdda75ffc664ce622b5/python_calamine-0.4.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d4072bf9dcb8ec49f5b92688bd960b5d0e03e4826d227bbd66478a6f6b0aea06", size = 926462, upload_time = "2025-07-04T06:04:17.936Z" }, + { url = "https://files.pythonhosted.org/packages/5a/5d/3b8c46ccc62d020858bc52f2d792208910eb68682c6ebf8d6706593d7a88/python_calamine-0.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eabc9dc770f753c4227aacedd8390056937e67af0bf65d6696c584d3054f1287", size = 886319, upload_time = "2025-07-04T06:04:19.33Z" }, + { url = "https://files.pythonhosted.org/packages/66/cf/73241714800bddb277f827c4683f579b81915406bf7dc643dc185cef7eb2/python_calamine-0.4.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6a4bcf36dc77674892616b66cffba432f5fd62df3e0adb0487ec245036b50041", size = 929044, upload_time = "2025-07-04T06:04:20.689Z" }, + { url = "https://files.pythonhosted.org/packages/7c/6b/71e30ee568ce1ea6676be66f1a42c6397946859effc471cc102922fb4792/python_calamine-0.4.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:f81518d4b49c47054cb1861badf5bcef44b0a49959968fb2e9c9cb89645c76af", size = 1053084, upload_time = "2025-07-04T06:04:22.414Z" }, + { url = "https://files.pythonhosted.org/packages/75/19/87b42fe975f8952754562785a545f6d2eec17c353befdf33a8e16c046ce0/python_calamine-0.4.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:18375eb3ac1362fcbf3a9fcad0672d8dc054001247bc52f063e0054a3e01a8d1", size = 1056735, upload_time = "2025-07-04T06:04:23.903Z" }, + { url = "https://files.pythonhosted.org/packages/04/db/ecee6e5d6ed4f3725312580a83c4cb1758c9060aa08bf2d8512d3396cea1/python_calamine-0.4.0-cp313-cp313-win32.whl", hash = "sha256:c7e98c7e531bafdf719414d0c428f25f933a82640fb92e6e84864a85e758aecc", size = 665282, upload_time = "2025-07-04T06:04:25.274Z" }, + { url = "https://files.pythonhosted.org/packages/cb/0b/26337e0a0e2b335c1d6225bda8de259a21fea129a06009c1471deda28e1f/python_calamine-0.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:6ec081b874e78f4dbcbe70804644281366814289956755575a5871f725592d4e", size = 694982, upload_time = "2025-07-04T06:04:26.573Z" }, + { url = "https://files.pythonhosted.org/packages/90/26/f72c2b2fe70f2901abb41fcdf8249181133ddd72b9392cfb63d030393b3e/python_calamine-0.4.0-cp313-cp313-win_arm64.whl", hash = "sha256:3f9bdf570023138ee4090a51b1e34786978d6e649852ccc3b83ac9729f125ca2", size = 670283, upload_time = "2025-07-04T06:04:28.434Z" }, ] [[package]] @@ -1627,9 +2239,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "six" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432 } +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload_time = "2024-03-01T18:36:20.211Z" } 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 }, + { 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]] @@ -1639,16 +2251,16 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "charset-normalizer" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/bf/4b/3c4cf635311b6203f17c2d693dc15e898969983dd3f729bee3c428aa60d4/python-debian-1.0.1.tar.gz", hash = "sha256:3ada9b83a3d671b58081782c0969cffa0102f6ce433fbbc7cf21275b8b5cc771", size = 127249 } +sdist = { url = "https://files.pythonhosted.org/packages/bf/4b/3c4cf635311b6203f17c2d693dc15e898969983dd3f729bee3c428aa60d4/python-debian-1.0.1.tar.gz", hash = "sha256:3ada9b83a3d671b58081782c0969cffa0102f6ce433fbbc7cf21275b8b5cc771", size = 127249, upload_time = "2025-03-11T12:27:27.245Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ba/15/e8096189b18dda72e4923622abc10b021ecff723b397e22eff29fb86637b/python_debian-1.0.1-py3-none-any.whl", hash = "sha256:8f137c230c1d9279c2ac892b35915068b2aca090c9fd3da5671ff87af32af12c", size = 137453 }, + { url = "https://files.pythonhosted.org/packages/ba/15/e8096189b18dda72e4923622abc10b021ecff723b397e22eff29fb86637b/python_debian-1.0.1-py3-none-any.whl", hash = "sha256:8f137c230c1d9279c2ac892b35915068b2aca090c9fd3da5671ff87af32af12c", size = 137453, upload_time = "2025-03-11T12:27:25.014Z" }, ] [[package]] name = "python-io-wrapper" version = "0.3.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d7/74/8dc5f7d0b7cc1a0ca9e5c320abf11adee2094998c93ae8c9c80d9a8323ff/python-io-wrapper-0.3.1.tar.gz", hash = "sha256:e3391787ff0d9870e739294c6392437915502153e695a017450aa46b6d091762", size = 3271 } +sdist = { url = "https://files.pythonhosted.org/packages/d7/74/8dc5f7d0b7cc1a0ca9e5c320abf11adee2094998c93ae8c9c80d9a8323ff/python-io-wrapper-0.3.1.tar.gz", hash = "sha256:e3391787ff0d9870e739294c6392437915502153e695a017450aa46b6d091762", size = 3271, upload_time = "2022-11-14T15:00:10.932Z" } [[package]] name = "python-slugify" @@ -1657,18 +2269,18 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "text-unidecode" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/87/c7/5e1547c44e31da50a460df93af11a535ace568ef89d7a811069ead340c4a/python-slugify-8.0.4.tar.gz", hash = "sha256:59202371d1d05b54a9e7720c5e038f928f45daaffe41dd10822f3907b937c856", size = 10921 } +sdist = { url = "https://files.pythonhosted.org/packages/87/c7/5e1547c44e31da50a460df93af11a535ace568ef89d7a811069ead340c4a/python-slugify-8.0.4.tar.gz", hash = "sha256:59202371d1d05b54a9e7720c5e038f928f45daaffe41dd10822f3907b937c856", size = 10921, upload_time = "2024-02-08T18:32:45.488Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a4/62/02da182e544a51a5c3ccf4b03ab79df279f9c60c5e82d5e8bec7ca26ac11/python_slugify-8.0.4-py2.py3-none-any.whl", hash = "sha256:276540b79961052b66b7d116620b36518847f52d5fd9e3a70164fc8c50faa6b8", size = 10051 }, + { url = "https://files.pythonhosted.org/packages/a4/62/02da182e544a51a5c3ccf4b03ab79df279f9c60c5e82d5e8bec7ca26ac11/python_slugify-8.0.4-py2.py3-none-any.whl", hash = "sha256:276540b79961052b66b7d116620b36518847f52d5fd9e3a70164fc8c50faa6b8", size = 10051, upload_time = "2024-02-08T18:32:43.911Z" }, ] [[package]] name = "pytz" version = "2025.2" 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 } +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" } wheels = [ - { url = "https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00", size = 509225 }, + { 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" }, ] [[package]] @@ -1676,38 +2288,38 @@ name = "pywin32" version = "310" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6b/ec/4fdbe47932f671d6e348474ea35ed94227fb5df56a7c30cbbb42cd396ed0/pywin32-310-cp312-cp312-win32.whl", hash = "sha256:8a75a5cc3893e83a108c05d82198880704c44bbaee4d06e442e471d3c9ea4f3d", size = 8796239 }, - { url = "https://files.pythonhosted.org/packages/e3/e5/b0627f8bb84e06991bea89ad8153a9e50ace40b2e1195d68e9dff6b03d0f/pywin32-310-cp312-cp312-win_amd64.whl", hash = "sha256:bf5c397c9a9a19a6f62f3fb821fbf36cac08f03770056711f765ec1503972060", size = 9503839 }, - { url = "https://files.pythonhosted.org/packages/1f/32/9ccf53748df72301a89713936645a664ec001abd35ecc8578beda593d37d/pywin32-310-cp312-cp312-win_arm64.whl", hash = "sha256:2349cc906eae872d0663d4d6290d13b90621eaf78964bb1578632ff20e152966", size = 8459470 }, - { url = "https://files.pythonhosted.org/packages/1c/09/9c1b978ffc4ae53999e89c19c77ba882d9fce476729f23ef55211ea1c034/pywin32-310-cp313-cp313-win32.whl", hash = "sha256:5d241a659c496ada3253cd01cfaa779b048e90ce4b2b38cd44168ad555ce74ab", size = 8794384 }, - { url = "https://files.pythonhosted.org/packages/45/3c/b4640f740ffebadd5d34df35fecba0e1cfef8fde9f3e594df91c28ad9b50/pywin32-310-cp313-cp313-win_amd64.whl", hash = "sha256:667827eb3a90208ddbdcc9e860c81bde63a135710e21e4cb3348968e4bd5249e", size = 9503039 }, - { url = "https://files.pythonhosted.org/packages/b4/f4/f785020090fb050e7fb6d34b780f2231f302609dc964672f72bfaeb59a28/pywin32-310-cp313-cp313-win_arm64.whl", hash = "sha256:e308f831de771482b7cf692a1f308f8fca701b2d8f9dde6cc440c7da17e47b33", size = 8458152 }, + { url = "https://files.pythonhosted.org/packages/6b/ec/4fdbe47932f671d6e348474ea35ed94227fb5df56a7c30cbbb42cd396ed0/pywin32-310-cp312-cp312-win32.whl", hash = "sha256:8a75a5cc3893e83a108c05d82198880704c44bbaee4d06e442e471d3c9ea4f3d", size = 8796239, upload_time = "2025-03-17T00:55:58.807Z" }, + { url = "https://files.pythonhosted.org/packages/e3/e5/b0627f8bb84e06991bea89ad8153a9e50ace40b2e1195d68e9dff6b03d0f/pywin32-310-cp312-cp312-win_amd64.whl", hash = "sha256:bf5c397c9a9a19a6f62f3fb821fbf36cac08f03770056711f765ec1503972060", size = 9503839, upload_time = "2025-03-17T00:56:00.8Z" }, + { url = "https://files.pythonhosted.org/packages/1f/32/9ccf53748df72301a89713936645a664ec001abd35ecc8578beda593d37d/pywin32-310-cp312-cp312-win_arm64.whl", hash = "sha256:2349cc906eae872d0663d4d6290d13b90621eaf78964bb1578632ff20e152966", size = 8459470, upload_time = "2025-03-17T00:56:02.601Z" }, + { url = "https://files.pythonhosted.org/packages/1c/09/9c1b978ffc4ae53999e89c19c77ba882d9fce476729f23ef55211ea1c034/pywin32-310-cp313-cp313-win32.whl", hash = "sha256:5d241a659c496ada3253cd01cfaa779b048e90ce4b2b38cd44168ad555ce74ab", size = 8794384, upload_time = "2025-03-17T00:56:04.383Z" }, + { url = "https://files.pythonhosted.org/packages/45/3c/b4640f740ffebadd5d34df35fecba0e1cfef8fde9f3e594df91c28ad9b50/pywin32-310-cp313-cp313-win_amd64.whl", hash = "sha256:667827eb3a90208ddbdcc9e860c81bde63a135710e21e4cb3348968e4bd5249e", size = 9503039, upload_time = "2025-03-17T00:56:06.207Z" }, + { url = "https://files.pythonhosted.org/packages/b4/f4/f785020090fb050e7fb6d34b780f2231f302609dc964672f72bfaeb59a28/pywin32-310-cp313-cp313-win_arm64.whl", hash = "sha256:e308f831de771482b7cf692a1f308f8fca701b2d8f9dde6cc440c7da17e47b33", size = 8458152, upload_time = "2025-03-17T00:56:07.819Z" }, ] [[package]] name = "pyyaml" version = "6.0.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/86/0c/c581167fc46d6d6d7ddcfb8c843a4de25bdd27e4466938109ca68492292c/PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", size = 183873 }, - { url = "https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", size = 173302 }, - { url = "https://files.pythonhosted.org/packages/c3/93/9916574aa8c00aa06bbac729972eb1071d002b8e158bd0e83a3b9a20a1f7/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", size = 739154 }, - { url = "https://files.pythonhosted.org/packages/95/0f/b8938f1cbd09739c6da569d172531567dbcc9789e0029aa070856f123984/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", size = 766223 }, - { url = "https://files.pythonhosted.org/packages/b9/2b/614b4752f2e127db5cc206abc23a8c19678e92b23c3db30fc86ab731d3bd/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", size = 767542 }, - { url = "https://files.pythonhosted.org/packages/d4/00/dd137d5bcc7efea1836d6264f049359861cf548469d18da90cd8216cf05f/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", size = 731164 }, - { url = "https://files.pythonhosted.org/packages/c9/1f/4f998c900485e5c0ef43838363ba4a9723ac0ad73a9dc42068b12aaba4e4/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", size = 756611 }, - { url = "https://files.pythonhosted.org/packages/df/d1/f5a275fdb252768b7a11ec63585bc38d0e87c9e05668a139fea92b80634c/PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", size = 140591 }, - { url = "https://files.pythonhosted.org/packages/0c/e8/4f648c598b17c3d06e8753d7d13d57542b30d56e6c2dedf9c331ae56312e/PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", size = 156338 }, - { url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309 }, - { url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679 }, - { url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428 }, - { url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361 }, - { url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523 }, - { url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660 }, - { url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597 }, - { url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527 }, - { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446 }, +sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631, upload_time = "2024-08-06T20:33:50.674Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/86/0c/c581167fc46d6d6d7ddcfb8c843a4de25bdd27e4466938109ca68492292c/PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", size = 183873, upload_time = "2024-08-06T20:32:25.131Z" }, + { url = "https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", size = 173302, upload_time = "2024-08-06T20:32:26.511Z" }, + { url = "https://files.pythonhosted.org/packages/c3/93/9916574aa8c00aa06bbac729972eb1071d002b8e158bd0e83a3b9a20a1f7/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", size = 739154, upload_time = "2024-08-06T20:32:28.363Z" }, + { url = "https://files.pythonhosted.org/packages/95/0f/b8938f1cbd09739c6da569d172531567dbcc9789e0029aa070856f123984/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", size = 766223, upload_time = "2024-08-06T20:32:30.058Z" }, + { url = "https://files.pythonhosted.org/packages/b9/2b/614b4752f2e127db5cc206abc23a8c19678e92b23c3db30fc86ab731d3bd/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", size = 767542, upload_time = "2024-08-06T20:32:31.881Z" }, + { url = "https://files.pythonhosted.org/packages/d4/00/dd137d5bcc7efea1836d6264f049359861cf548469d18da90cd8216cf05f/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", size = 731164, upload_time = "2024-08-06T20:32:37.083Z" }, + { url = "https://files.pythonhosted.org/packages/c9/1f/4f998c900485e5c0ef43838363ba4a9723ac0ad73a9dc42068b12aaba4e4/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", size = 756611, upload_time = "2024-08-06T20:32:38.898Z" }, + { url = "https://files.pythonhosted.org/packages/df/d1/f5a275fdb252768b7a11ec63585bc38d0e87c9e05668a139fea92b80634c/PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", size = 140591, upload_time = "2024-08-06T20:32:40.241Z" }, + { url = "https://files.pythonhosted.org/packages/0c/e8/4f648c598b17c3d06e8753d7d13d57542b30d56e6c2dedf9c331ae56312e/PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", size = 156338, upload_time = "2024-08-06T20:32:41.93Z" }, + { url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309, upload_time = "2024-08-06T20:32:43.4Z" }, + { url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679, upload_time = "2024-08-06T20:32:44.801Z" }, + { url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428, upload_time = "2024-08-06T20:32:46.432Z" }, + { url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361, upload_time = "2024-08-06T20:32:51.188Z" }, + { url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523, upload_time = "2024-08-06T20:32:53.019Z" }, + { url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660, upload_time = "2024-08-06T20:32:54.708Z" }, + { url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597, upload_time = "2024-08-06T20:32:56.985Z" }, + { url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527, upload_time = "2024-08-06T20:33:03.001Z" }, + { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446, upload_time = "2024-08-06T20:33:04.33Z" }, ] [[package]] @@ -1717,9 +2329,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pyyaml" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/eb/2e/79c822141bfd05a853236b504869ebc6b70159afc570e1d5a20641782eaa/pyyaml_env_tag-1.1.tar.gz", hash = "sha256:2eb38b75a2d21ee0475d6d97ec19c63287a7e140231e4214969d0eac923cd7ff", size = 5737 } +sdist = { url = "https://files.pythonhosted.org/packages/eb/2e/79c822141bfd05a853236b504869ebc6b70159afc570e1d5a20641782eaa/pyyaml_env_tag-1.1.tar.gz", hash = "sha256:2eb38b75a2d21ee0475d6d97ec19c63287a7e140231e4214969d0eac923cd7ff", size = 5737, upload_time = "2025-05-13T15:24:01.64Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl", hash = "sha256:17109e1a528561e32f026364712fee1264bc2ea6715120891174ed1b980d2e04", size = 4722 }, + { url = "https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl", hash = "sha256:17109e1a528561e32f026364712fee1264bc2ea6715120891174ed1b980d2e04", size = 4722, upload_time = "2025-05-13T15:23:59.629Z" }, ] [[package]] @@ -1729,34 +2341,34 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cffi", marker = "implementation_name == 'pypy'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f1/06/50a4e9648b3e8b992bef8eb632e457307553a89d294103213cfd47b3da69/pyzmq-27.0.0.tar.gz", hash = "sha256:b1f08eeb9ce1510e6939b6e5dcd46a17765e2333daae78ecf4606808442e52cf", size = 280478 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/93/a7/9ad68f55b8834ede477842214feba6a4c786d936c022a67625497aacf61d/pyzmq-27.0.0-cp312-abi3-macosx_10_15_universal2.whl", hash = "sha256:cbabc59dcfaac66655c040dfcb8118f133fb5dde185e5fc152628354c1598e52", size = 1305438 }, - { url = "https://files.pythonhosted.org/packages/ba/ee/26aa0f98665a22bc90ebe12dced1de5f3eaca05363b717f6fb229b3421b3/pyzmq-27.0.0-cp312-abi3-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:cb0ac5179cba4b2f94f1aa208fbb77b62c4c9bf24dd446278b8b602cf85fcda3", size = 895095 }, - { url = "https://files.pythonhosted.org/packages/cf/85/c57e7ab216ecd8aa4cc7e3b83b06cc4e9cf45c87b0afc095f10cd5ce87c1/pyzmq-27.0.0-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:53a48f0228eab6cbf69fde3aa3c03cbe04e50e623ef92ae395fce47ef8a76152", size = 651826 }, - { url = "https://files.pythonhosted.org/packages/69/9a/9ea7e230feda9400fb0ae0d61d7d6ddda635e718d941c44eeab22a179d34/pyzmq-27.0.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:111db5f395e09f7e775f759d598f43cb815fc58e0147623c4816486e1a39dc22", size = 839750 }, - { url = "https://files.pythonhosted.org/packages/08/66/4cebfbe71f3dfbd417011daca267539f62ed0fbc68105357b68bbb1a25b7/pyzmq-27.0.0-cp312-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:c8878011653dcdc27cc2c57e04ff96f0471e797f5c19ac3d7813a245bcb24371", size = 1641357 }, - { url = "https://files.pythonhosted.org/packages/ac/f6/b0f62578c08d2471c791287149cb8c2aaea414ae98c6e995c7dbe008adfb/pyzmq-27.0.0-cp312-abi3-musllinux_1_2_i686.whl", hash = "sha256:c0ed2c1f335ba55b5fdc964622254917d6b782311c50e138863eda409fbb3b6d", size = 2020281 }, - { url = "https://files.pythonhosted.org/packages/37/b9/4f670b15c7498495da9159edc374ec09c88a86d9cd5a47d892f69df23450/pyzmq-27.0.0-cp312-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:e918d70862d4cfd4b1c187310015646a14e1f5917922ab45b29f28f345eeb6be", size = 1877110 }, - { url = "https://files.pythonhosted.org/packages/66/31/9dee25c226295b740609f0d46db2fe972b23b6f5cf786360980524a3ba92/pyzmq-27.0.0-cp312-abi3-win32.whl", hash = "sha256:88b4e43cab04c3c0f0d55df3b1eef62df2b629a1a369b5289a58f6fa8b07c4f4", size = 559297 }, - { url = "https://files.pythonhosted.org/packages/9b/12/52da5509800f7ff2d287b2f2b4e636e7ea0f001181cba6964ff6c1537778/pyzmq-27.0.0-cp312-abi3-win_amd64.whl", hash = "sha256:dce4199bf5f648a902ce37e7b3afa286f305cd2ef7a8b6ec907470ccb6c8b371", size = 619203 }, - { url = "https://files.pythonhosted.org/packages/93/6d/7f2e53b19d1edb1eb4f09ec7c3a1f945ca0aac272099eab757d15699202b/pyzmq-27.0.0-cp312-abi3-win_arm64.whl", hash = "sha256:56e46bbb85d52c1072b3f809cc1ce77251d560bc036d3a312b96db1afe76db2e", size = 551927 }, - { url = "https://files.pythonhosted.org/packages/19/62/876b27c4ff777db4ceba1c69ea90d3c825bb4f8d5e7cd987ce5802e33c55/pyzmq-27.0.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:c36ad534c0c29b4afa088dc53543c525b23c0797e01b69fef59b1a9c0e38b688", size = 1340826 }, - { url = "https://files.pythonhosted.org/packages/43/69/58ef8f4f59d3bcd505260c73bee87b008850f45edca40ddaba54273c35f4/pyzmq-27.0.0-cp313-cp313t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:67855c14173aec36395d7777aaba3cc527b393821f30143fd20b98e1ff31fd38", size = 897283 }, - { url = "https://files.pythonhosted.org/packages/43/15/93a0d0396700a60475ad3c5d42c5f1c308d3570bc94626b86c71ef9953e0/pyzmq-27.0.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8617c7d43cd8ccdb62aebe984bfed77ca8f036e6c3e46dd3dddda64b10f0ab7a", size = 660567 }, - { url = "https://files.pythonhosted.org/packages/0e/b3/fe055513e498ca32f64509abae19b9c9eb4d7c829e02bd8997dd51b029eb/pyzmq-27.0.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:67bfbcbd0a04c575e8103a6061d03e393d9f80ffdb9beb3189261e9e9bc5d5e9", size = 847681 }, - { url = "https://files.pythonhosted.org/packages/b6/4f/ff15300b00b5b602191f3df06bbc8dd4164e805fdd65bb77ffbb9c5facdc/pyzmq-27.0.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:5cd11d46d7b7e5958121b3eaf4cd8638eff3a720ec527692132f05a57f14341d", size = 1650148 }, - { url = "https://files.pythonhosted.org/packages/c4/6f/84bdfff2a224a6f26a24249a342e5906993c50b0761e311e81b39aef52a7/pyzmq-27.0.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:b801c2e40c5aa6072c2f4876de8dccd100af6d9918d4d0d7aa54a1d982fd4f44", size = 2023768 }, - { url = "https://files.pythonhosted.org/packages/64/39/dc2db178c26a42228c5ac94a9cc595030458aa64c8d796a7727947afbf55/pyzmq-27.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:20d5cb29e8c5f76a127c75b6e7a77e846bc4b655c373baa098c26a61b7ecd0ef", size = 1885199 }, - { url = "https://files.pythonhosted.org/packages/c7/21/dae7b06a1f8cdee5d8e7a63d99c5d129c401acc40410bef2cbf42025e26f/pyzmq-27.0.0-cp313-cp313t-win32.whl", hash = "sha256:a20528da85c7ac7a19b7384e8c3f8fa707841fd85afc4ed56eda59d93e3d98ad", size = 575439 }, - { url = "https://files.pythonhosted.org/packages/eb/bc/1709dc55f0970cf4cb8259e435e6773f9946f41a045c2cb90e870b7072da/pyzmq-27.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:d8229f2efece6a660ee211d74d91dbc2a76b95544d46c74c615e491900dc107f", size = 639933 }, +sdist = { url = "https://files.pythonhosted.org/packages/f1/06/50a4e9648b3e8b992bef8eb632e457307553a89d294103213cfd47b3da69/pyzmq-27.0.0.tar.gz", hash = "sha256:b1f08eeb9ce1510e6939b6e5dcd46a17765e2333daae78ecf4606808442e52cf", size = 280478, upload_time = "2025-06-13T14:09:07.087Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/93/a7/9ad68f55b8834ede477842214feba6a4c786d936c022a67625497aacf61d/pyzmq-27.0.0-cp312-abi3-macosx_10_15_universal2.whl", hash = "sha256:cbabc59dcfaac66655c040dfcb8118f133fb5dde185e5fc152628354c1598e52", size = 1305438, upload_time = "2025-06-13T14:07:31.676Z" }, + { url = "https://files.pythonhosted.org/packages/ba/ee/26aa0f98665a22bc90ebe12dced1de5f3eaca05363b717f6fb229b3421b3/pyzmq-27.0.0-cp312-abi3-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:cb0ac5179cba4b2f94f1aa208fbb77b62c4c9bf24dd446278b8b602cf85fcda3", size = 895095, upload_time = "2025-06-13T14:07:33.104Z" }, + { url = "https://files.pythonhosted.org/packages/cf/85/c57e7ab216ecd8aa4cc7e3b83b06cc4e9cf45c87b0afc095f10cd5ce87c1/pyzmq-27.0.0-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:53a48f0228eab6cbf69fde3aa3c03cbe04e50e623ef92ae395fce47ef8a76152", size = 651826, upload_time = "2025-06-13T14:07:34.831Z" }, + { url = "https://files.pythonhosted.org/packages/69/9a/9ea7e230feda9400fb0ae0d61d7d6ddda635e718d941c44eeab22a179d34/pyzmq-27.0.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:111db5f395e09f7e775f759d598f43cb815fc58e0147623c4816486e1a39dc22", size = 839750, upload_time = "2025-06-13T14:07:36.553Z" }, + { url = "https://files.pythonhosted.org/packages/08/66/4cebfbe71f3dfbd417011daca267539f62ed0fbc68105357b68bbb1a25b7/pyzmq-27.0.0-cp312-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:c8878011653dcdc27cc2c57e04ff96f0471e797f5c19ac3d7813a245bcb24371", size = 1641357, upload_time = "2025-06-13T14:07:38.21Z" }, + { url = "https://files.pythonhosted.org/packages/ac/f6/b0f62578c08d2471c791287149cb8c2aaea414ae98c6e995c7dbe008adfb/pyzmq-27.0.0-cp312-abi3-musllinux_1_2_i686.whl", hash = "sha256:c0ed2c1f335ba55b5fdc964622254917d6b782311c50e138863eda409fbb3b6d", size = 2020281, upload_time = "2025-06-13T14:07:39.599Z" }, + { url = "https://files.pythonhosted.org/packages/37/b9/4f670b15c7498495da9159edc374ec09c88a86d9cd5a47d892f69df23450/pyzmq-27.0.0-cp312-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:e918d70862d4cfd4b1c187310015646a14e1f5917922ab45b29f28f345eeb6be", size = 1877110, upload_time = "2025-06-13T14:07:41.027Z" }, + { url = "https://files.pythonhosted.org/packages/66/31/9dee25c226295b740609f0d46db2fe972b23b6f5cf786360980524a3ba92/pyzmq-27.0.0-cp312-abi3-win32.whl", hash = "sha256:88b4e43cab04c3c0f0d55df3b1eef62df2b629a1a369b5289a58f6fa8b07c4f4", size = 559297, upload_time = "2025-06-13T14:07:42.533Z" }, + { url = "https://files.pythonhosted.org/packages/9b/12/52da5509800f7ff2d287b2f2b4e636e7ea0f001181cba6964ff6c1537778/pyzmq-27.0.0-cp312-abi3-win_amd64.whl", hash = "sha256:dce4199bf5f648a902ce37e7b3afa286f305cd2ef7a8b6ec907470ccb6c8b371", size = 619203, upload_time = "2025-06-13T14:07:43.843Z" }, + { url = "https://files.pythonhosted.org/packages/93/6d/7f2e53b19d1edb1eb4f09ec7c3a1f945ca0aac272099eab757d15699202b/pyzmq-27.0.0-cp312-abi3-win_arm64.whl", hash = "sha256:56e46bbb85d52c1072b3f809cc1ce77251d560bc036d3a312b96db1afe76db2e", size = 551927, upload_time = "2025-06-13T14:07:45.51Z" }, + { url = "https://files.pythonhosted.org/packages/19/62/876b27c4ff777db4ceba1c69ea90d3c825bb4f8d5e7cd987ce5802e33c55/pyzmq-27.0.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:c36ad534c0c29b4afa088dc53543c525b23c0797e01b69fef59b1a9c0e38b688", size = 1340826, upload_time = "2025-06-13T14:07:46.881Z" }, + { url = "https://files.pythonhosted.org/packages/43/69/58ef8f4f59d3bcd505260c73bee87b008850f45edca40ddaba54273c35f4/pyzmq-27.0.0-cp313-cp313t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:67855c14173aec36395d7777aaba3cc527b393821f30143fd20b98e1ff31fd38", size = 897283, upload_time = "2025-06-13T14:07:49.562Z" }, + { url = "https://files.pythonhosted.org/packages/43/15/93a0d0396700a60475ad3c5d42c5f1c308d3570bc94626b86c71ef9953e0/pyzmq-27.0.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8617c7d43cd8ccdb62aebe984bfed77ca8f036e6c3e46dd3dddda64b10f0ab7a", size = 660567, upload_time = "2025-06-13T14:07:51.364Z" }, + { url = "https://files.pythonhosted.org/packages/0e/b3/fe055513e498ca32f64509abae19b9c9eb4d7c829e02bd8997dd51b029eb/pyzmq-27.0.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:67bfbcbd0a04c575e8103a6061d03e393d9f80ffdb9beb3189261e9e9bc5d5e9", size = 847681, upload_time = "2025-06-13T14:07:52.77Z" }, + { url = "https://files.pythonhosted.org/packages/b6/4f/ff15300b00b5b602191f3df06bbc8dd4164e805fdd65bb77ffbb9c5facdc/pyzmq-27.0.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:5cd11d46d7b7e5958121b3eaf4cd8638eff3a720ec527692132f05a57f14341d", size = 1650148, upload_time = "2025-06-13T14:07:54.178Z" }, + { url = "https://files.pythonhosted.org/packages/c4/6f/84bdfff2a224a6f26a24249a342e5906993c50b0761e311e81b39aef52a7/pyzmq-27.0.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:b801c2e40c5aa6072c2f4876de8dccd100af6d9918d4d0d7aa54a1d982fd4f44", size = 2023768, upload_time = "2025-06-13T14:07:55.714Z" }, + { url = "https://files.pythonhosted.org/packages/64/39/dc2db178c26a42228c5ac94a9cc595030458aa64c8d796a7727947afbf55/pyzmq-27.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:20d5cb29e8c5f76a127c75b6e7a77e846bc4b655c373baa098c26a61b7ecd0ef", size = 1885199, upload_time = "2025-06-13T14:07:57.166Z" }, + { url = "https://files.pythonhosted.org/packages/c7/21/dae7b06a1f8cdee5d8e7a63d99c5d129c401acc40410bef2cbf42025e26f/pyzmq-27.0.0-cp313-cp313t-win32.whl", hash = "sha256:a20528da85c7ac7a19b7384e8c3f8fa707841fd85afc4ed56eda59d93e3d98ad", size = 575439, upload_time = "2025-06-13T14:07:58.959Z" }, + { url = "https://files.pythonhosted.org/packages/eb/bc/1709dc55f0970cf4cb8259e435e6773f9946f41a045c2cb90e870b7072da/pyzmq-27.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:d8229f2efece6a660ee211d74d91dbc2a76b95544d46c74c615e491900dc107f", size = 639933, upload_time = "2025-06-13T14:08:00.777Z" }, ] [[package]] name = "ratelimit" version = "2.2.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ab/38/ff60c8fc9e002d50d48822cc5095deb8ebbc5f91a6b8fdd9731c87a147c9/ratelimit-2.2.1.tar.gz", hash = "sha256:af8a9b64b821529aca09ebaf6d8d279100d766f19e90b5059ac6a718ca6dee42", size = 5251 } +sdist = { url = "https://files.pythonhosted.org/packages/ab/38/ff60c8fc9e002d50d48822cc5095deb8ebbc5f91a6b8fdd9731c87a147c9/ratelimit-2.2.1.tar.gz", hash = "sha256:af8a9b64b821529aca09ebaf6d8d279100d766f19e90b5059ac6a718ca6dee42", size = 5251, upload_time = "2018-12-17T18:55:49.675Z" } [[package]] name = "referencing" @@ -1767,9 +2379,9 @@ dependencies = [ { name = "rpds-py" }, { name = "typing-extensions", marker = "python_full_version < '3.13'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/2f/db/98b5c277be99dd18bfd91dd04e1b759cad18d1a338188c936e92f921c7e2/referencing-0.36.2.tar.gz", hash = "sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa", size = 74744 } +sdist = { url = "https://files.pythonhosted.org/packages/2f/db/98b5c277be99dd18bfd91dd04e1b759cad18d1a338188c936e92f921c7e2/referencing-0.36.2.tar.gz", hash = "sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa", size = 74744, upload_time = "2025-01-25T08:48:16.138Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0", size = 26775 }, + { url = "https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0", size = 26775, upload_time = "2025-01-25T08:48:14.241Z" }, ] [[package]] @@ -1782,9 +2394,9 @@ dependencies = [ { name = "idna" }, { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/e1/0a/929373653770d8a0d7ea76c37de6e41f11eb07559b103b1c02cafb3f7cf8/requests-2.32.4.tar.gz", hash = "sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422", size = 135258 } +sdist = { url = "https://files.pythonhosted.org/packages/e1/0a/929373653770d8a0d7ea76c37de6e41f11eb07559b103b1c02cafb3f7cf8/requests-2.32.4.tar.gz", hash = "sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422", size = 135258, upload_time = "2025-06-09T16:43:07.34Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7c/e4/56027c4a6b4ae70ca9de302488c5ca95ad4a39e190093d6c1a8ace08341b/requests-2.32.4-py3-none-any.whl", hash = "sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c", size = 64847 }, + { url = "https://files.pythonhosted.org/packages/7c/e4/56027c4a6b4ae70ca9de302488c5ca95ad4a39e190093d6c1a8ace08341b/requests-2.32.4-py3-none-any.whl", hash = "sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c", size = 64847, upload_time = "2025-06-09T16:43:05.728Z" }, ] [[package]] @@ -1794,9 +2406,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "requests" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/72/97/bf44e6c6bd8ddbb99943baf7ba8b1a8485bcd2fe0e55e5708d7fee4ff1ae/requests_file-2.1.0.tar.gz", hash = "sha256:0f549a3f3b0699415ac04d167e9cb39bccfb730cb832b4d20be3d9867356e658", size = 6891 } +sdist = { url = "https://files.pythonhosted.org/packages/72/97/bf44e6c6bd8ddbb99943baf7ba8b1a8485bcd2fe0e55e5708d7fee4ff1ae/requests_file-2.1.0.tar.gz", hash = "sha256:0f549a3f3b0699415ac04d167e9cb39bccfb730cb832b4d20be3d9867356e658", size = 6891, upload_time = "2024-05-21T16:28:00.24Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d7/25/dd878a121fcfdf38f52850f11c512e13ec87c2ea72385933818e5b6c15ce/requests_file-2.1.0-py2.py3-none-any.whl", hash = "sha256:cf270de5a4c5874e84599fc5778303d496c10ae5e870bfa378818f35d21bda5c", size = 4244 }, + { url = "https://files.pythonhosted.org/packages/d7/25/dd878a121fcfdf38f52850f11c512e13ec87c2ea72385933818e5b6c15ce/requests_file-2.1.0-py2.py3-none-any.whl", hash = "sha256:cf270de5a4c5874e84599fc5778303d496c10ae5e870bfa378818f35d21bda5c", size = 4244, upload_time = "2024-05-21T16:27:57.733Z" }, ] [[package]] @@ -1813,107 +2425,107 @@ dependencies = [ { name = "python-debian" }, { name = "tomlkit" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/08/43/35421efe0e69823787b331362e11cc16bb697cd6f19cbed284d421615f14/reuse-5.0.2.tar.gz", hash = "sha256:878016ae5dd29c10bad4606d6676c12a268c12aa9fcfea66403598e16eed085c", size = 358798 } +sdist = { url = "https://files.pythonhosted.org/packages/08/43/35421efe0e69823787b331362e11cc16bb697cd6f19cbed284d421615f14/reuse-5.0.2.tar.gz", hash = "sha256:878016ae5dd29c10bad4606d6676c12a268c12aa9fcfea66403598e16eed085c", size = 358798, upload_time = "2024-11-14T09:33:17.512Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0a/2f/73de654df9e7e5f67d742c1d949b5c0c7c1203e84b2272d9e34a91faaf5c/reuse-5.0.2-cp313-cp313-manylinux_2_40_x86_64.whl", hash = "sha256:7a680f00324e87a72061677a892d8cbabfddf7adcf7a5376aeeed2d78995bbbb", size = 184309 }, + { url = "https://files.pythonhosted.org/packages/0a/2f/73de654df9e7e5f67d742c1d949b5c0c7c1203e84b2272d9e34a91faaf5c/reuse-5.0.2-cp313-cp313-manylinux_2_40_x86_64.whl", hash = "sha256:7a680f00324e87a72061677a892d8cbabfddf7adcf7a5376aeeed2d78995bbbb", size = 184309, upload_time = "2024-11-14T09:33:15.047Z" }, ] [[package]] name = "rfc3986" version = "2.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/85/40/1520d68bfa07ab5a6f065a186815fb6610c86fe957bc065754e47f7b0840/rfc3986-2.0.0.tar.gz", hash = "sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c", size = 49026 } +sdist = { url = "https://files.pythonhosted.org/packages/85/40/1520d68bfa07ab5a6f065a186815fb6610c86fe957bc065754e47f7b0840/rfc3986-2.0.0.tar.gz", hash = "sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c", size = 49026, upload_time = "2022-01-10T00:52:30.832Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ff/9a/9afaade874b2fa6c752c36f1548f718b5b83af81ed9b76628329dab81c1b/rfc3986-2.0.0-py2.py3-none-any.whl", hash = "sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd", size = 31326 }, + { url = "https://files.pythonhosted.org/packages/ff/9a/9afaade874b2fa6c752c36f1548f718b5b83af81ed9b76628329dab81c1b/rfc3986-2.0.0-py2.py3-none-any.whl", hash = "sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd", size = 31326, upload_time = "2022-01-10T00:52:29.594Z" }, ] [[package]] name = "rich" -version = "14.0.0" +version = "13.9.4" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "markdown-it-py" }, { name = "pygments" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a1/53/830aa4c3066a8ab0ae9a9955976fb770fe9c6102117c8ec4ab3ea62d89e8/rich-14.0.0.tar.gz", hash = "sha256:82f1bc23a6a21ebca4ae0c45af9bdbc492ed20231dcb63f297d6d1021a9d5725", size = 224078 } +sdist = { url = "https://files.pythonhosted.org/packages/ab/3a/0316b28d0761c6734d6bc14e770d85506c986c85ffb239e688eeaab2c2bc/rich-13.9.4.tar.gz", hash = "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098", size = 223149, upload_time = "2024-11-01T16:43:57.873Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0d/9b/63f4c7ebc259242c89b3acafdb37b41d1185c07ff0011164674e9076b491/rich-14.0.0-py3-none-any.whl", hash = "sha256:1c9491e1951aac09caffd42f448ee3d04e58923ffe14993f6e83068dc395d7e0", size = 243229 }, + { url = "https://files.pythonhosted.org/packages/19/71/39c7c0d87f8d4e6c020a393182060eaefeeae6c01dab6a84ec346f2567df/rich-13.9.4-py3-none-any.whl", hash = "sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90", size = 242424, upload_time = "2024-11-01T16:43:55.817Z" }, ] [[package]] name = "rpds-py" version = "0.26.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a5/aa/4456d84bbb54adc6a916fb10c9b374f78ac840337644e4a5eda229c81275/rpds_py-0.26.0.tar.gz", hash = "sha256:20dae58a859b0906f0685642e591056f1e787f3a8b39c8e8749a45dc7d26bdb0", size = 27385 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ea/86/90eb87c6f87085868bd077c7a9938006eb1ce19ed4d06944a90d3560fce2/rpds_py-0.26.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:894514d47e012e794f1350f076c427d2347ebf82f9b958d554d12819849a369d", size = 363933 }, - { url = "https://files.pythonhosted.org/packages/63/78/4469f24d34636242c924626082b9586f064ada0b5dbb1e9d096ee7a8e0c6/rpds_py-0.26.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc921b96fa95a097add244da36a1d9e4f3039160d1d30f1b35837bf108c21136", size = 350447 }, - { url = "https://files.pythonhosted.org/packages/ad/91/c448ed45efdfdade82348d5e7995e15612754826ea640afc20915119734f/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e1157659470aa42a75448b6e943c895be8c70531c43cb78b9ba990778955582", size = 384711 }, - { url = "https://files.pythonhosted.org/packages/ec/43/e5c86fef4be7f49828bdd4ecc8931f0287b1152c0bb0163049b3218740e7/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:521ccf56f45bb3a791182dc6b88ae5f8fa079dd705ee42138c76deb1238e554e", size = 400865 }, - { url = "https://files.pythonhosted.org/packages/55/34/e00f726a4d44f22d5c5fe2e5ddd3ac3d7fd3f74a175607781fbdd06fe375/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9def736773fd56b305c0eef698be5192c77bfa30d55a0e5885f80126c4831a15", size = 517763 }, - { url = "https://files.pythonhosted.org/packages/52/1c/52dc20c31b147af724b16104500fba13e60123ea0334beba7b40e33354b4/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cdad4ea3b4513b475e027be79e5a0ceac8ee1c113a1a11e5edc3c30c29f964d8", size = 406651 }, - { url = "https://files.pythonhosted.org/packages/2e/77/87d7bfabfc4e821caa35481a2ff6ae0b73e6a391bb6b343db2c91c2b9844/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82b165b07f416bdccf5c84546a484cc8f15137ca38325403864bfdf2b5b72f6a", size = 386079 }, - { url = "https://files.pythonhosted.org/packages/e3/d4/7f2200c2d3ee145b65b3cddc4310d51f7da6a26634f3ac87125fd789152a/rpds_py-0.26.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d04cab0a54b9dba4d278fe955a1390da3cf71f57feb78ddc7cb67cbe0bd30323", size = 421379 }, - { url = "https://files.pythonhosted.org/packages/ae/13/9fdd428b9c820869924ab62236b8688b122baa22d23efdd1c566938a39ba/rpds_py-0.26.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:79061ba1a11b6a12743a2b0f72a46aa2758613d454aa6ba4f5a265cc48850158", size = 562033 }, - { url = "https://files.pythonhosted.org/packages/f3/e1/b69686c3bcbe775abac3a4c1c30a164a2076d28df7926041f6c0eb5e8d28/rpds_py-0.26.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:f405c93675d8d4c5ac87364bb38d06c988e11028a64b52a47158a355079661f3", size = 591639 }, - { url = "https://files.pythonhosted.org/packages/5c/c9/1e3d8c8863c84a90197ac577bbc3d796a92502124c27092413426f670990/rpds_py-0.26.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dafd4c44b74aa4bed4b250f1aed165b8ef5de743bcca3b88fc9619b6087093d2", size = 557105 }, - { url = "https://files.pythonhosted.org/packages/9f/c5/90c569649057622959f6dcc40f7b516539608a414dfd54b8d77e3b201ac0/rpds_py-0.26.0-cp312-cp312-win32.whl", hash = "sha256:3da5852aad63fa0c6f836f3359647870e21ea96cf433eb393ffa45263a170d44", size = 223272 }, - { url = "https://files.pythonhosted.org/packages/7d/16/19f5d9f2a556cfed454eebe4d354c38d51c20f3db69e7b4ce6cff904905d/rpds_py-0.26.0-cp312-cp312-win_amd64.whl", hash = "sha256:cf47cfdabc2194a669dcf7a8dbba62e37a04c5041d2125fae0233b720da6f05c", size = 234995 }, - { url = "https://files.pythonhosted.org/packages/83/f0/7935e40b529c0e752dfaa7880224771b51175fce08b41ab4a92eb2fbdc7f/rpds_py-0.26.0-cp312-cp312-win_arm64.whl", hash = "sha256:20ab1ae4fa534f73647aad289003f1104092890849e0266271351922ed5574f8", size = 223198 }, - { url = "https://files.pythonhosted.org/packages/6a/67/bb62d0109493b12b1c6ab00de7a5566aa84c0e44217c2d94bee1bd370da9/rpds_py-0.26.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:696764a5be111b036256c0b18cd29783fab22154690fc698062fc1b0084b511d", size = 363917 }, - { url = "https://files.pythonhosted.org/packages/4b/f3/34e6ae1925a5706c0f002a8d2d7f172373b855768149796af87bd65dcdb9/rpds_py-0.26.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1e6c15d2080a63aaed876e228efe4f814bc7889c63b1e112ad46fdc8b368b9e1", size = 350073 }, - { url = "https://files.pythonhosted.org/packages/75/83/1953a9d4f4e4de7fd0533733e041c28135f3c21485faaef56a8aadbd96b5/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:390e3170babf42462739a93321e657444f0862c6d722a291accc46f9d21ed04e", size = 384214 }, - { url = "https://files.pythonhosted.org/packages/48/0e/983ed1b792b3322ea1d065e67f4b230f3b96025f5ce3878cc40af09b7533/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7da84c2c74c0f5bc97d853d9e17bb83e2dcafcff0dc48286916001cc114379a1", size = 400113 }, - { url = "https://files.pythonhosted.org/packages/69/7f/36c0925fff6f660a80be259c5b4f5e53a16851f946eb080351d057698528/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4c5fe114a6dd480a510b6d3661d09d67d1622c4bf20660a474507aaee7eeeee9", size = 515189 }, - { url = "https://files.pythonhosted.org/packages/13/45/cbf07fc03ba7a9b54662c9badb58294ecfb24f828b9732970bd1a431ed5c/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3100b3090269f3a7ea727b06a6080d4eb7439dca4c0e91a07c5d133bb1727ea7", size = 406998 }, - { url = "https://files.pythonhosted.org/packages/6c/b0/8fa5e36e58657997873fd6a1cf621285ca822ca75b4b3434ead047daa307/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c03c9b0c64afd0320ae57de4c982801271c0c211aa2d37f3003ff5feb75bb04", size = 385903 }, - { url = "https://files.pythonhosted.org/packages/4b/f7/b25437772f9f57d7a9fbd73ed86d0dcd76b4c7c6998348c070d90f23e315/rpds_py-0.26.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5963b72ccd199ade6ee493723d18a3f21ba7d5b957017607f815788cef50eaf1", size = 419785 }, - { url = "https://files.pythonhosted.org/packages/a7/6b/63ffa55743dfcb4baf2e9e77a0b11f7f97ed96a54558fcb5717a4b2cd732/rpds_py-0.26.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9da4e873860ad5bab3291438525cae80169daecbfafe5657f7f5fb4d6b3f96b9", size = 561329 }, - { url = "https://files.pythonhosted.org/packages/2f/07/1f4f5e2886c480a2346b1e6759c00278b8a69e697ae952d82ae2e6ee5db0/rpds_py-0.26.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5afaddaa8e8c7f1f7b4c5c725c0070b6eed0228f705b90a1732a48e84350f4e9", size = 590875 }, - { url = "https://files.pythonhosted.org/packages/cc/bc/e6639f1b91c3a55f8c41b47d73e6307051b6e246254a827ede730624c0f8/rpds_py-0.26.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4916dc96489616a6f9667e7526af8fa693c0fdb4f3acb0e5d9f4400eb06a47ba", size = 556636 }, - { url = "https://files.pythonhosted.org/packages/05/4c/b3917c45566f9f9a209d38d9b54a1833f2bb1032a3e04c66f75726f28876/rpds_py-0.26.0-cp313-cp313-win32.whl", hash = "sha256:2a343f91b17097c546b93f7999976fd6c9d5900617aa848c81d794e062ab302b", size = 222663 }, - { url = "https://files.pythonhosted.org/packages/e0/0b/0851bdd6025775aaa2365bb8de0697ee2558184c800bfef8d7aef5ccde58/rpds_py-0.26.0-cp313-cp313-win_amd64.whl", hash = "sha256:0a0b60701f2300c81b2ac88a5fb893ccfa408e1c4a555a77f908a2596eb875a5", size = 234428 }, - { url = "https://files.pythonhosted.org/packages/ed/e8/a47c64ed53149c75fb581e14a237b7b7cd18217e969c30d474d335105622/rpds_py-0.26.0-cp313-cp313-win_arm64.whl", hash = "sha256:257d011919f133a4746958257f2c75238e3ff54255acd5e3e11f3ff41fd14256", size = 222571 }, - { url = "https://files.pythonhosted.org/packages/89/bf/3d970ba2e2bcd17d2912cb42874107390f72873e38e79267224110de5e61/rpds_py-0.26.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:529c8156d7506fba5740e05da8795688f87119cce330c244519cf706a4a3d618", size = 360475 }, - { url = "https://files.pythonhosted.org/packages/82/9f/283e7e2979fc4ec2d8ecee506d5a3675fce5ed9b4b7cb387ea5d37c2f18d/rpds_py-0.26.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f53ec51f9d24e9638a40cabb95078ade8c99251945dad8d57bf4aabe86ecee35", size = 346692 }, - { url = "https://files.pythonhosted.org/packages/e3/03/7e50423c04d78daf391da3cc4330bdb97042fc192a58b186f2d5deb7befd/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab504c4d654e4a29558eaa5bb8cea5fdc1703ea60a8099ffd9c758472cf913f", size = 379415 }, - { url = "https://files.pythonhosted.org/packages/57/00/d11ee60d4d3b16808432417951c63df803afb0e0fc672b5e8d07e9edaaae/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fd0641abca296bc1a00183fe44f7fced8807ed49d501f188faa642d0e4975b83", size = 391783 }, - { url = "https://files.pythonhosted.org/packages/08/b3/1069c394d9c0d6d23c5b522e1f6546b65793a22950f6e0210adcc6f97c3e/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:69b312fecc1d017b5327afa81d4da1480f51c68810963a7336d92203dbb3d4f1", size = 512844 }, - { url = "https://files.pythonhosted.org/packages/08/3b/c4fbf0926800ed70b2c245ceca99c49f066456755f5d6eb8863c2c51e6d0/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c741107203954f6fc34d3066d213d0a0c40f7bb5aafd698fb39888af277c70d8", size = 402105 }, - { url = "https://files.pythonhosted.org/packages/1c/b0/db69b52ca07413e568dae9dc674627a22297abb144c4d6022c6d78f1e5cc/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc3e55a7db08dc9a6ed5fb7103019d2c1a38a349ac41901f9f66d7f95750942f", size = 383440 }, - { url = "https://files.pythonhosted.org/packages/4c/e1/c65255ad5b63903e56b3bb3ff9dcc3f4f5c3badde5d08c741ee03903e951/rpds_py-0.26.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9e851920caab2dbcae311fd28f4313c6953993893eb5c1bb367ec69d9a39e7ed", size = 412759 }, - { url = "https://files.pythonhosted.org/packages/e4/22/bb731077872377a93c6e93b8a9487d0406c70208985831034ccdeed39c8e/rpds_py-0.26.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:dfbf280da5f876d0b00c81f26bedce274e72a678c28845453885a9b3c22ae632", size = 556032 }, - { url = "https://files.pythonhosted.org/packages/e0/8b/393322ce7bac5c4530fb96fc79cc9ea2f83e968ff5f6e873f905c493e1c4/rpds_py-0.26.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:1cc81d14ddfa53d7f3906694d35d54d9d3f850ef8e4e99ee68bc0d1e5fed9a9c", size = 585416 }, - { url = "https://files.pythonhosted.org/packages/49/ae/769dc372211835bf759319a7aae70525c6eb523e3371842c65b7ef41c9c6/rpds_py-0.26.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dca83c498b4650a91efcf7b88d669b170256bf8017a5db6f3e06c2bf031f57e0", size = 554049 }, - { url = "https://files.pythonhosted.org/packages/6b/f9/4c43f9cc203d6ba44ce3146246cdc38619d92c7bd7bad4946a3491bd5b70/rpds_py-0.26.0-cp313-cp313t-win32.whl", hash = "sha256:4d11382bcaf12f80b51d790dee295c56a159633a8e81e6323b16e55d81ae37e9", size = 218428 }, - { url = "https://files.pythonhosted.org/packages/7e/8b/9286b7e822036a4a977f2f1e851c7345c20528dbd56b687bb67ed68a8ede/rpds_py-0.26.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ff110acded3c22c033e637dd8896e411c7d3a11289b2edf041f86663dbc791e9", size = 231524 }, - { url = "https://files.pythonhosted.org/packages/55/07/029b7c45db910c74e182de626dfdae0ad489a949d84a468465cd0ca36355/rpds_py-0.26.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:da619979df60a940cd434084355c514c25cf8eb4cf9a508510682f6c851a4f7a", size = 364292 }, - { url = "https://files.pythonhosted.org/packages/13/d1/9b3d3f986216b4d1f584878dca15ce4797aaf5d372d738974ba737bf68d6/rpds_py-0.26.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ea89a2458a1a75f87caabefe789c87539ea4e43b40f18cff526052e35bbb4fdf", size = 350334 }, - { url = "https://files.pythonhosted.org/packages/18/98/16d5e7bc9ec715fa9668731d0cf97f6b032724e61696e2db3d47aeb89214/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:feac1045b3327a45944e7dcbeb57530339f6b17baff154df51ef8b0da34c8c12", size = 384875 }, - { url = "https://files.pythonhosted.org/packages/f9/13/aa5e2b1ec5ab0e86a5c464d53514c0467bec6ba2507027d35fc81818358e/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b818a592bd69bfe437ee8368603d4a2d928c34cffcdf77c2e761a759ffd17d20", size = 399993 }, - { url = "https://files.pythonhosted.org/packages/17/03/8021810b0e97923abdbab6474c8b77c69bcb4b2c58330777df9ff69dc559/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a8b0dd8648709b62d9372fc00a57466f5fdeefed666afe3fea5a6c9539a0331", size = 516683 }, - { url = "https://files.pythonhosted.org/packages/dc/b1/da8e61c87c2f3d836954239fdbbfb477bb7b54d74974d8f6fcb34342d166/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6d3498ad0df07d81112aa6ec6c95a7e7b1ae00929fb73e7ebee0f3faaeabad2f", size = 408825 }, - { url = "https://files.pythonhosted.org/packages/38/bc/1fc173edaaa0e52c94b02a655db20697cb5fa954ad5a8e15a2c784c5cbdd/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24a4146ccb15be237fdef10f331c568e1b0e505f8c8c9ed5d67759dac58ac246", size = 387292 }, - { url = "https://files.pythonhosted.org/packages/7c/eb/3a9bb4bd90867d21916f253caf4f0d0be7098671b6715ad1cead9fe7bab9/rpds_py-0.26.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a9a63785467b2d73635957d32a4f6e73d5e4df497a16a6392fa066b753e87387", size = 420435 }, - { url = "https://files.pythonhosted.org/packages/cd/16/e066dcdb56f5632713445271a3f8d3d0b426d51ae9c0cca387799df58b02/rpds_py-0.26.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:de4ed93a8c91debfd5a047be327b7cc8b0cc6afe32a716bbbc4aedca9e2a83af", size = 562410 }, - { url = "https://files.pythonhosted.org/packages/60/22/ddbdec7eb82a0dc2e455be44c97c71c232983e21349836ce9f272e8a3c29/rpds_py-0.26.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:caf51943715b12af827696ec395bfa68f090a4c1a1d2509eb4e2cb69abbbdb33", size = 590724 }, - { url = "https://files.pythonhosted.org/packages/2c/b4/95744085e65b7187d83f2fcb0bef70716a1ea0a9e5d8f7f39a86e5d83424/rpds_py-0.26.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:4a59e5bc386de021f56337f757301b337d7ab58baa40174fb150accd480bc953", size = 558285 }, - { url = "https://files.pythonhosted.org/packages/37/37/6309a75e464d1da2559446f9c811aa4d16343cebe3dbb73701e63f760caa/rpds_py-0.26.0-cp314-cp314-win32.whl", hash = "sha256:92c8db839367ef16a662478f0a2fe13e15f2227da3c1430a782ad0f6ee009ec9", size = 223459 }, - { url = "https://files.pythonhosted.org/packages/d9/6f/8e9c11214c46098b1d1391b7e02b70bb689ab963db3b19540cba17315291/rpds_py-0.26.0-cp314-cp314-win_amd64.whl", hash = "sha256:b0afb8cdd034150d4d9f53926226ed27ad15b7f465e93d7468caaf5eafae0d37", size = 236083 }, - { url = "https://files.pythonhosted.org/packages/47/af/9c4638994dd623d51c39892edd9d08e8be8220a4b7e874fa02c2d6e91955/rpds_py-0.26.0-cp314-cp314-win_arm64.whl", hash = "sha256:ca3f059f4ba485d90c8dc75cb5ca897e15325e4e609812ce57f896607c1c0867", size = 223291 }, - { url = "https://files.pythonhosted.org/packages/4d/db/669a241144460474aab03e254326b32c42def83eb23458a10d163cb9b5ce/rpds_py-0.26.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:5afea17ab3a126006dc2f293b14ffc7ef3c85336cf451564a0515ed7648033da", size = 361445 }, - { url = "https://files.pythonhosted.org/packages/3b/2d/133f61cc5807c6c2fd086a46df0eb8f63a23f5df8306ff9f6d0fd168fecc/rpds_py-0.26.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:69f0c0a3df7fd3a7eec50a00396104bb9a843ea6d45fcc31c2d5243446ffd7a7", size = 347206 }, - { url = "https://files.pythonhosted.org/packages/05/bf/0e8fb4c05f70273469eecf82f6ccf37248558526a45321644826555db31b/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:801a71f70f9813e82d2513c9a96532551fce1e278ec0c64610992c49c04c2dad", size = 380330 }, - { url = "https://files.pythonhosted.org/packages/d4/a8/060d24185d8b24d3923322f8d0ede16df4ade226a74e747b8c7c978e3dd3/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:df52098cde6d5e02fa75c1f6244f07971773adb4a26625edd5c18fee906fa84d", size = 392254 }, - { url = "https://files.pythonhosted.org/packages/b9/7b/7c2e8a9ee3e6bc0bae26bf29f5219955ca2fbb761dca996a83f5d2f773fe/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9bc596b30f86dc6f0929499c9e574601679d0341a0108c25b9b358a042f51bca", size = 516094 }, - { url = "https://files.pythonhosted.org/packages/75/d6/f61cafbed8ba1499b9af9f1777a2a199cd888f74a96133d8833ce5eaa9c5/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9dfbe56b299cf5875b68eb6f0ebaadc9cac520a1989cac0db0765abfb3709c19", size = 402889 }, - { url = "https://files.pythonhosted.org/packages/92/19/c8ac0a8a8df2dd30cdec27f69298a5c13e9029500d6d76718130f5e5be10/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac64f4b2bdb4ea622175c9ab7cf09444e412e22c0e02e906978b3b488af5fde8", size = 384301 }, - { url = "https://files.pythonhosted.org/packages/41/e1/6b1859898bc292a9ce5776016c7312b672da00e25cec74d7beced1027286/rpds_py-0.26.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:181ef9b6bbf9845a264f9aa45c31836e9f3c1f13be565d0d010e964c661d1e2b", size = 412891 }, - { url = "https://files.pythonhosted.org/packages/ef/b9/ceb39af29913c07966a61367b3c08b4f71fad841e32c6b59a129d5974698/rpds_py-0.26.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:49028aa684c144ea502a8e847d23aed5e4c2ef7cadfa7d5eaafcb40864844b7a", size = 557044 }, - { url = "https://files.pythonhosted.org/packages/2f/27/35637b98380731a521f8ec4f3fd94e477964f04f6b2f8f7af8a2d889a4af/rpds_py-0.26.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:e5d524d68a474a9688336045bbf76cb0def88549c1b2ad9dbfec1fb7cfbe9170", size = 585774 }, - { url = "https://files.pythonhosted.org/packages/52/d9/3f0f105420fecd18551b678c9a6ce60bd23986098b252a56d35781b3e7e9/rpds_py-0.26.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:c1851f429b822831bd2edcbe0cfd12ee9ea77868f8d3daf267b189371671c80e", size = 554886 }, - { url = "https://files.pythonhosted.org/packages/6b/c5/347c056a90dc8dd9bc240a08c527315008e1b5042e7a4cf4ac027be9d38a/rpds_py-0.26.0-cp314-cp314t-win32.whl", hash = "sha256:7bdb17009696214c3b66bb3590c6d62e14ac5935e53e929bcdbc5a495987a84f", size = 219027 }, - { url = "https://files.pythonhosted.org/packages/75/04/5302cea1aa26d886d34cadbf2dc77d90d7737e576c0065f357b96dc7a1a6/rpds_py-0.26.0-cp314-cp314t-win_amd64.whl", hash = "sha256:f14440b9573a6f76b4ee4770c13f0b5921f71dde3b6fcb8dabbefd13b7fe05d7", size = 232821 }, +sdist = { url = "https://files.pythonhosted.org/packages/a5/aa/4456d84bbb54adc6a916fb10c9b374f78ac840337644e4a5eda229c81275/rpds_py-0.26.0.tar.gz", hash = "sha256:20dae58a859b0906f0685642e591056f1e787f3a8b39c8e8749a45dc7d26bdb0", size = 27385, upload_time = "2025-07-01T15:57:13.958Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ea/86/90eb87c6f87085868bd077c7a9938006eb1ce19ed4d06944a90d3560fce2/rpds_py-0.26.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:894514d47e012e794f1350f076c427d2347ebf82f9b958d554d12819849a369d", size = 363933, upload_time = "2025-07-01T15:54:15.734Z" }, + { url = "https://files.pythonhosted.org/packages/63/78/4469f24d34636242c924626082b9586f064ada0b5dbb1e9d096ee7a8e0c6/rpds_py-0.26.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc921b96fa95a097add244da36a1d9e4f3039160d1d30f1b35837bf108c21136", size = 350447, upload_time = "2025-07-01T15:54:16.922Z" }, + { url = "https://files.pythonhosted.org/packages/ad/91/c448ed45efdfdade82348d5e7995e15612754826ea640afc20915119734f/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e1157659470aa42a75448b6e943c895be8c70531c43cb78b9ba990778955582", size = 384711, upload_time = "2025-07-01T15:54:18.101Z" }, + { url = "https://files.pythonhosted.org/packages/ec/43/e5c86fef4be7f49828bdd4ecc8931f0287b1152c0bb0163049b3218740e7/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:521ccf56f45bb3a791182dc6b88ae5f8fa079dd705ee42138c76deb1238e554e", size = 400865, upload_time = "2025-07-01T15:54:19.295Z" }, + { url = "https://files.pythonhosted.org/packages/55/34/e00f726a4d44f22d5c5fe2e5ddd3ac3d7fd3f74a175607781fbdd06fe375/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9def736773fd56b305c0eef698be5192c77bfa30d55a0e5885f80126c4831a15", size = 517763, upload_time = "2025-07-01T15:54:20.858Z" }, + { url = "https://files.pythonhosted.org/packages/52/1c/52dc20c31b147af724b16104500fba13e60123ea0334beba7b40e33354b4/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cdad4ea3b4513b475e027be79e5a0ceac8ee1c113a1a11e5edc3c30c29f964d8", size = 406651, upload_time = "2025-07-01T15:54:22.508Z" }, + { url = "https://files.pythonhosted.org/packages/2e/77/87d7bfabfc4e821caa35481a2ff6ae0b73e6a391bb6b343db2c91c2b9844/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82b165b07f416bdccf5c84546a484cc8f15137ca38325403864bfdf2b5b72f6a", size = 386079, upload_time = "2025-07-01T15:54:23.987Z" }, + { url = "https://files.pythonhosted.org/packages/e3/d4/7f2200c2d3ee145b65b3cddc4310d51f7da6a26634f3ac87125fd789152a/rpds_py-0.26.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d04cab0a54b9dba4d278fe955a1390da3cf71f57feb78ddc7cb67cbe0bd30323", size = 421379, upload_time = "2025-07-01T15:54:25.073Z" }, + { url = "https://files.pythonhosted.org/packages/ae/13/9fdd428b9c820869924ab62236b8688b122baa22d23efdd1c566938a39ba/rpds_py-0.26.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:79061ba1a11b6a12743a2b0f72a46aa2758613d454aa6ba4f5a265cc48850158", size = 562033, upload_time = "2025-07-01T15:54:26.225Z" }, + { url = "https://files.pythonhosted.org/packages/f3/e1/b69686c3bcbe775abac3a4c1c30a164a2076d28df7926041f6c0eb5e8d28/rpds_py-0.26.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:f405c93675d8d4c5ac87364bb38d06c988e11028a64b52a47158a355079661f3", size = 591639, upload_time = "2025-07-01T15:54:27.424Z" }, + { url = "https://files.pythonhosted.org/packages/5c/c9/1e3d8c8863c84a90197ac577bbc3d796a92502124c27092413426f670990/rpds_py-0.26.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dafd4c44b74aa4bed4b250f1aed165b8ef5de743bcca3b88fc9619b6087093d2", size = 557105, upload_time = "2025-07-01T15:54:29.93Z" }, + { url = "https://files.pythonhosted.org/packages/9f/c5/90c569649057622959f6dcc40f7b516539608a414dfd54b8d77e3b201ac0/rpds_py-0.26.0-cp312-cp312-win32.whl", hash = "sha256:3da5852aad63fa0c6f836f3359647870e21ea96cf433eb393ffa45263a170d44", size = 223272, upload_time = "2025-07-01T15:54:31.128Z" }, + { url = "https://files.pythonhosted.org/packages/7d/16/19f5d9f2a556cfed454eebe4d354c38d51c20f3db69e7b4ce6cff904905d/rpds_py-0.26.0-cp312-cp312-win_amd64.whl", hash = "sha256:cf47cfdabc2194a669dcf7a8dbba62e37a04c5041d2125fae0233b720da6f05c", size = 234995, upload_time = "2025-07-01T15:54:32.195Z" }, + { url = "https://files.pythonhosted.org/packages/83/f0/7935e40b529c0e752dfaa7880224771b51175fce08b41ab4a92eb2fbdc7f/rpds_py-0.26.0-cp312-cp312-win_arm64.whl", hash = "sha256:20ab1ae4fa534f73647aad289003f1104092890849e0266271351922ed5574f8", size = 223198, upload_time = "2025-07-01T15:54:33.271Z" }, + { url = "https://files.pythonhosted.org/packages/6a/67/bb62d0109493b12b1c6ab00de7a5566aa84c0e44217c2d94bee1bd370da9/rpds_py-0.26.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:696764a5be111b036256c0b18cd29783fab22154690fc698062fc1b0084b511d", size = 363917, upload_time = "2025-07-01T15:54:34.755Z" }, + { url = "https://files.pythonhosted.org/packages/4b/f3/34e6ae1925a5706c0f002a8d2d7f172373b855768149796af87bd65dcdb9/rpds_py-0.26.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1e6c15d2080a63aaed876e228efe4f814bc7889c63b1e112ad46fdc8b368b9e1", size = 350073, upload_time = "2025-07-01T15:54:36.292Z" }, + { url = "https://files.pythonhosted.org/packages/75/83/1953a9d4f4e4de7fd0533733e041c28135f3c21485faaef56a8aadbd96b5/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:390e3170babf42462739a93321e657444f0862c6d722a291accc46f9d21ed04e", size = 384214, upload_time = "2025-07-01T15:54:37.469Z" }, + { url = "https://files.pythonhosted.org/packages/48/0e/983ed1b792b3322ea1d065e67f4b230f3b96025f5ce3878cc40af09b7533/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7da84c2c74c0f5bc97d853d9e17bb83e2dcafcff0dc48286916001cc114379a1", size = 400113, upload_time = "2025-07-01T15:54:38.954Z" }, + { url = "https://files.pythonhosted.org/packages/69/7f/36c0925fff6f660a80be259c5b4f5e53a16851f946eb080351d057698528/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4c5fe114a6dd480a510b6d3661d09d67d1622c4bf20660a474507aaee7eeeee9", size = 515189, upload_time = "2025-07-01T15:54:40.57Z" }, + { url = "https://files.pythonhosted.org/packages/13/45/cbf07fc03ba7a9b54662c9badb58294ecfb24f828b9732970bd1a431ed5c/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3100b3090269f3a7ea727b06a6080d4eb7439dca4c0e91a07c5d133bb1727ea7", size = 406998, upload_time = "2025-07-01T15:54:43.025Z" }, + { url = "https://files.pythonhosted.org/packages/6c/b0/8fa5e36e58657997873fd6a1cf621285ca822ca75b4b3434ead047daa307/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c03c9b0c64afd0320ae57de4c982801271c0c211aa2d37f3003ff5feb75bb04", size = 385903, upload_time = "2025-07-01T15:54:44.752Z" }, + { url = "https://files.pythonhosted.org/packages/4b/f7/b25437772f9f57d7a9fbd73ed86d0dcd76b4c7c6998348c070d90f23e315/rpds_py-0.26.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5963b72ccd199ade6ee493723d18a3f21ba7d5b957017607f815788cef50eaf1", size = 419785, upload_time = "2025-07-01T15:54:46.043Z" }, + { url = "https://files.pythonhosted.org/packages/a7/6b/63ffa55743dfcb4baf2e9e77a0b11f7f97ed96a54558fcb5717a4b2cd732/rpds_py-0.26.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9da4e873860ad5bab3291438525cae80169daecbfafe5657f7f5fb4d6b3f96b9", size = 561329, upload_time = "2025-07-01T15:54:47.64Z" }, + { url = "https://files.pythonhosted.org/packages/2f/07/1f4f5e2886c480a2346b1e6759c00278b8a69e697ae952d82ae2e6ee5db0/rpds_py-0.26.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5afaddaa8e8c7f1f7b4c5c725c0070b6eed0228f705b90a1732a48e84350f4e9", size = 590875, upload_time = "2025-07-01T15:54:48.9Z" }, + { url = "https://files.pythonhosted.org/packages/cc/bc/e6639f1b91c3a55f8c41b47d73e6307051b6e246254a827ede730624c0f8/rpds_py-0.26.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4916dc96489616a6f9667e7526af8fa693c0fdb4f3acb0e5d9f4400eb06a47ba", size = 556636, upload_time = "2025-07-01T15:54:50.619Z" }, + { url = "https://files.pythonhosted.org/packages/05/4c/b3917c45566f9f9a209d38d9b54a1833f2bb1032a3e04c66f75726f28876/rpds_py-0.26.0-cp313-cp313-win32.whl", hash = "sha256:2a343f91b17097c546b93f7999976fd6c9d5900617aa848c81d794e062ab302b", size = 222663, upload_time = "2025-07-01T15:54:52.023Z" }, + { url = "https://files.pythonhosted.org/packages/e0/0b/0851bdd6025775aaa2365bb8de0697ee2558184c800bfef8d7aef5ccde58/rpds_py-0.26.0-cp313-cp313-win_amd64.whl", hash = "sha256:0a0b60701f2300c81b2ac88a5fb893ccfa408e1c4a555a77f908a2596eb875a5", size = 234428, upload_time = "2025-07-01T15:54:53.692Z" }, + { url = "https://files.pythonhosted.org/packages/ed/e8/a47c64ed53149c75fb581e14a237b7b7cd18217e969c30d474d335105622/rpds_py-0.26.0-cp313-cp313-win_arm64.whl", hash = "sha256:257d011919f133a4746958257f2c75238e3ff54255acd5e3e11f3ff41fd14256", size = 222571, upload_time = "2025-07-01T15:54:54.822Z" }, + { url = "https://files.pythonhosted.org/packages/89/bf/3d970ba2e2bcd17d2912cb42874107390f72873e38e79267224110de5e61/rpds_py-0.26.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:529c8156d7506fba5740e05da8795688f87119cce330c244519cf706a4a3d618", size = 360475, upload_time = "2025-07-01T15:54:56.228Z" }, + { url = "https://files.pythonhosted.org/packages/82/9f/283e7e2979fc4ec2d8ecee506d5a3675fce5ed9b4b7cb387ea5d37c2f18d/rpds_py-0.26.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f53ec51f9d24e9638a40cabb95078ade8c99251945dad8d57bf4aabe86ecee35", size = 346692, upload_time = "2025-07-01T15:54:58.561Z" }, + { url = "https://files.pythonhosted.org/packages/e3/03/7e50423c04d78daf391da3cc4330bdb97042fc192a58b186f2d5deb7befd/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab504c4d654e4a29558eaa5bb8cea5fdc1703ea60a8099ffd9c758472cf913f", size = 379415, upload_time = "2025-07-01T15:54:59.751Z" }, + { url = "https://files.pythonhosted.org/packages/57/00/d11ee60d4d3b16808432417951c63df803afb0e0fc672b5e8d07e9edaaae/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fd0641abca296bc1a00183fe44f7fced8807ed49d501f188faa642d0e4975b83", size = 391783, upload_time = "2025-07-01T15:55:00.898Z" }, + { url = "https://files.pythonhosted.org/packages/08/b3/1069c394d9c0d6d23c5b522e1f6546b65793a22950f6e0210adcc6f97c3e/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:69b312fecc1d017b5327afa81d4da1480f51c68810963a7336d92203dbb3d4f1", size = 512844, upload_time = "2025-07-01T15:55:02.201Z" }, + { url = "https://files.pythonhosted.org/packages/08/3b/c4fbf0926800ed70b2c245ceca99c49f066456755f5d6eb8863c2c51e6d0/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c741107203954f6fc34d3066d213d0a0c40f7bb5aafd698fb39888af277c70d8", size = 402105, upload_time = "2025-07-01T15:55:03.698Z" }, + { url = "https://files.pythonhosted.org/packages/1c/b0/db69b52ca07413e568dae9dc674627a22297abb144c4d6022c6d78f1e5cc/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc3e55a7db08dc9a6ed5fb7103019d2c1a38a349ac41901f9f66d7f95750942f", size = 383440, upload_time = "2025-07-01T15:55:05.398Z" }, + { url = "https://files.pythonhosted.org/packages/4c/e1/c65255ad5b63903e56b3bb3ff9dcc3f4f5c3badde5d08c741ee03903e951/rpds_py-0.26.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9e851920caab2dbcae311fd28f4313c6953993893eb5c1bb367ec69d9a39e7ed", size = 412759, upload_time = "2025-07-01T15:55:08.316Z" }, + { url = "https://files.pythonhosted.org/packages/e4/22/bb731077872377a93c6e93b8a9487d0406c70208985831034ccdeed39c8e/rpds_py-0.26.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:dfbf280da5f876d0b00c81f26bedce274e72a678c28845453885a9b3c22ae632", size = 556032, upload_time = "2025-07-01T15:55:09.52Z" }, + { url = "https://files.pythonhosted.org/packages/e0/8b/393322ce7bac5c4530fb96fc79cc9ea2f83e968ff5f6e873f905c493e1c4/rpds_py-0.26.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:1cc81d14ddfa53d7f3906694d35d54d9d3f850ef8e4e99ee68bc0d1e5fed9a9c", size = 585416, upload_time = "2025-07-01T15:55:11.216Z" }, + { url = "https://files.pythonhosted.org/packages/49/ae/769dc372211835bf759319a7aae70525c6eb523e3371842c65b7ef41c9c6/rpds_py-0.26.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dca83c498b4650a91efcf7b88d669b170256bf8017a5db6f3e06c2bf031f57e0", size = 554049, upload_time = "2025-07-01T15:55:13.004Z" }, + { url = "https://files.pythonhosted.org/packages/6b/f9/4c43f9cc203d6ba44ce3146246cdc38619d92c7bd7bad4946a3491bd5b70/rpds_py-0.26.0-cp313-cp313t-win32.whl", hash = "sha256:4d11382bcaf12f80b51d790dee295c56a159633a8e81e6323b16e55d81ae37e9", size = 218428, upload_time = "2025-07-01T15:55:14.486Z" }, + { url = "https://files.pythonhosted.org/packages/7e/8b/9286b7e822036a4a977f2f1e851c7345c20528dbd56b687bb67ed68a8ede/rpds_py-0.26.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ff110acded3c22c033e637dd8896e411c7d3a11289b2edf041f86663dbc791e9", size = 231524, upload_time = "2025-07-01T15:55:15.745Z" }, + { url = "https://files.pythonhosted.org/packages/55/07/029b7c45db910c74e182de626dfdae0ad489a949d84a468465cd0ca36355/rpds_py-0.26.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:da619979df60a940cd434084355c514c25cf8eb4cf9a508510682f6c851a4f7a", size = 364292, upload_time = "2025-07-01T15:55:17.001Z" }, + { url = "https://files.pythonhosted.org/packages/13/d1/9b3d3f986216b4d1f584878dca15ce4797aaf5d372d738974ba737bf68d6/rpds_py-0.26.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ea89a2458a1a75f87caabefe789c87539ea4e43b40f18cff526052e35bbb4fdf", size = 350334, upload_time = "2025-07-01T15:55:18.922Z" }, + { url = "https://files.pythonhosted.org/packages/18/98/16d5e7bc9ec715fa9668731d0cf97f6b032724e61696e2db3d47aeb89214/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:feac1045b3327a45944e7dcbeb57530339f6b17baff154df51ef8b0da34c8c12", size = 384875, upload_time = "2025-07-01T15:55:20.399Z" }, + { url = "https://files.pythonhosted.org/packages/f9/13/aa5e2b1ec5ab0e86a5c464d53514c0467bec6ba2507027d35fc81818358e/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b818a592bd69bfe437ee8368603d4a2d928c34cffcdf77c2e761a759ffd17d20", size = 399993, upload_time = "2025-07-01T15:55:21.729Z" }, + { url = "https://files.pythonhosted.org/packages/17/03/8021810b0e97923abdbab6474c8b77c69bcb4b2c58330777df9ff69dc559/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a8b0dd8648709b62d9372fc00a57466f5fdeefed666afe3fea5a6c9539a0331", size = 516683, upload_time = "2025-07-01T15:55:22.918Z" }, + { url = "https://files.pythonhosted.org/packages/dc/b1/da8e61c87c2f3d836954239fdbbfb477bb7b54d74974d8f6fcb34342d166/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6d3498ad0df07d81112aa6ec6c95a7e7b1ae00929fb73e7ebee0f3faaeabad2f", size = 408825, upload_time = "2025-07-01T15:55:24.207Z" }, + { url = "https://files.pythonhosted.org/packages/38/bc/1fc173edaaa0e52c94b02a655db20697cb5fa954ad5a8e15a2c784c5cbdd/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24a4146ccb15be237fdef10f331c568e1b0e505f8c8c9ed5d67759dac58ac246", size = 387292, upload_time = "2025-07-01T15:55:25.554Z" }, + { url = "https://files.pythonhosted.org/packages/7c/eb/3a9bb4bd90867d21916f253caf4f0d0be7098671b6715ad1cead9fe7bab9/rpds_py-0.26.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a9a63785467b2d73635957d32a4f6e73d5e4df497a16a6392fa066b753e87387", size = 420435, upload_time = "2025-07-01T15:55:27.798Z" }, + { url = "https://files.pythonhosted.org/packages/cd/16/e066dcdb56f5632713445271a3f8d3d0b426d51ae9c0cca387799df58b02/rpds_py-0.26.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:de4ed93a8c91debfd5a047be327b7cc8b0cc6afe32a716bbbc4aedca9e2a83af", size = 562410, upload_time = "2025-07-01T15:55:29.057Z" }, + { url = "https://files.pythonhosted.org/packages/60/22/ddbdec7eb82a0dc2e455be44c97c71c232983e21349836ce9f272e8a3c29/rpds_py-0.26.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:caf51943715b12af827696ec395bfa68f090a4c1a1d2509eb4e2cb69abbbdb33", size = 590724, upload_time = "2025-07-01T15:55:30.719Z" }, + { url = "https://files.pythonhosted.org/packages/2c/b4/95744085e65b7187d83f2fcb0bef70716a1ea0a9e5d8f7f39a86e5d83424/rpds_py-0.26.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:4a59e5bc386de021f56337f757301b337d7ab58baa40174fb150accd480bc953", size = 558285, upload_time = "2025-07-01T15:55:31.981Z" }, + { url = "https://files.pythonhosted.org/packages/37/37/6309a75e464d1da2559446f9c811aa4d16343cebe3dbb73701e63f760caa/rpds_py-0.26.0-cp314-cp314-win32.whl", hash = "sha256:92c8db839367ef16a662478f0a2fe13e15f2227da3c1430a782ad0f6ee009ec9", size = 223459, upload_time = "2025-07-01T15:55:33.312Z" }, + { url = "https://files.pythonhosted.org/packages/d9/6f/8e9c11214c46098b1d1391b7e02b70bb689ab963db3b19540cba17315291/rpds_py-0.26.0-cp314-cp314-win_amd64.whl", hash = "sha256:b0afb8cdd034150d4d9f53926226ed27ad15b7f465e93d7468caaf5eafae0d37", size = 236083, upload_time = "2025-07-01T15:55:34.933Z" }, + { url = "https://files.pythonhosted.org/packages/47/af/9c4638994dd623d51c39892edd9d08e8be8220a4b7e874fa02c2d6e91955/rpds_py-0.26.0-cp314-cp314-win_arm64.whl", hash = "sha256:ca3f059f4ba485d90c8dc75cb5ca897e15325e4e609812ce57f896607c1c0867", size = 223291, upload_time = "2025-07-01T15:55:36.202Z" }, + { url = "https://files.pythonhosted.org/packages/4d/db/669a241144460474aab03e254326b32c42def83eb23458a10d163cb9b5ce/rpds_py-0.26.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:5afea17ab3a126006dc2f293b14ffc7ef3c85336cf451564a0515ed7648033da", size = 361445, upload_time = "2025-07-01T15:55:37.483Z" }, + { url = "https://files.pythonhosted.org/packages/3b/2d/133f61cc5807c6c2fd086a46df0eb8f63a23f5df8306ff9f6d0fd168fecc/rpds_py-0.26.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:69f0c0a3df7fd3a7eec50a00396104bb9a843ea6d45fcc31c2d5243446ffd7a7", size = 347206, upload_time = "2025-07-01T15:55:38.828Z" }, + { url = "https://files.pythonhosted.org/packages/05/bf/0e8fb4c05f70273469eecf82f6ccf37248558526a45321644826555db31b/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:801a71f70f9813e82d2513c9a96532551fce1e278ec0c64610992c49c04c2dad", size = 380330, upload_time = "2025-07-01T15:55:40.175Z" }, + { url = "https://files.pythonhosted.org/packages/d4/a8/060d24185d8b24d3923322f8d0ede16df4ade226a74e747b8c7c978e3dd3/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:df52098cde6d5e02fa75c1f6244f07971773adb4a26625edd5c18fee906fa84d", size = 392254, upload_time = "2025-07-01T15:55:42.015Z" }, + { url = "https://files.pythonhosted.org/packages/b9/7b/7c2e8a9ee3e6bc0bae26bf29f5219955ca2fbb761dca996a83f5d2f773fe/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9bc596b30f86dc6f0929499c9e574601679d0341a0108c25b9b358a042f51bca", size = 516094, upload_time = "2025-07-01T15:55:43.603Z" }, + { url = "https://files.pythonhosted.org/packages/75/d6/f61cafbed8ba1499b9af9f1777a2a199cd888f74a96133d8833ce5eaa9c5/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9dfbe56b299cf5875b68eb6f0ebaadc9cac520a1989cac0db0765abfb3709c19", size = 402889, upload_time = "2025-07-01T15:55:45.275Z" }, + { url = "https://files.pythonhosted.org/packages/92/19/c8ac0a8a8df2dd30cdec27f69298a5c13e9029500d6d76718130f5e5be10/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac64f4b2bdb4ea622175c9ab7cf09444e412e22c0e02e906978b3b488af5fde8", size = 384301, upload_time = "2025-07-01T15:55:47.098Z" }, + { url = "https://files.pythonhosted.org/packages/41/e1/6b1859898bc292a9ce5776016c7312b672da00e25cec74d7beced1027286/rpds_py-0.26.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:181ef9b6bbf9845a264f9aa45c31836e9f3c1f13be565d0d010e964c661d1e2b", size = 412891, upload_time = "2025-07-01T15:55:48.412Z" }, + { url = "https://files.pythonhosted.org/packages/ef/b9/ceb39af29913c07966a61367b3c08b4f71fad841e32c6b59a129d5974698/rpds_py-0.26.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:49028aa684c144ea502a8e847d23aed5e4c2ef7cadfa7d5eaafcb40864844b7a", size = 557044, upload_time = "2025-07-01T15:55:49.816Z" }, + { url = "https://files.pythonhosted.org/packages/2f/27/35637b98380731a521f8ec4f3fd94e477964f04f6b2f8f7af8a2d889a4af/rpds_py-0.26.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:e5d524d68a474a9688336045bbf76cb0def88549c1b2ad9dbfec1fb7cfbe9170", size = 585774, upload_time = "2025-07-01T15:55:51.192Z" }, + { url = "https://files.pythonhosted.org/packages/52/d9/3f0f105420fecd18551b678c9a6ce60bd23986098b252a56d35781b3e7e9/rpds_py-0.26.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:c1851f429b822831bd2edcbe0cfd12ee9ea77868f8d3daf267b189371671c80e", size = 554886, upload_time = "2025-07-01T15:55:52.541Z" }, + { url = "https://files.pythonhosted.org/packages/6b/c5/347c056a90dc8dd9bc240a08c527315008e1b5042e7a4cf4ac027be9d38a/rpds_py-0.26.0-cp314-cp314t-win32.whl", hash = "sha256:7bdb17009696214c3b66bb3590c6d62e14ac5935e53e929bcdbc5a495987a84f", size = 219027, upload_time = "2025-07-01T15:55:53.874Z" }, + { url = "https://files.pythonhosted.org/packages/75/04/5302cea1aa26d886d34cadbf2dc77d90d7737e576c0065f357b96dc7a1a6/rpds_py-0.26.0-cp314-cp314t-win_amd64.whl", hash = "sha256:f14440b9573a6f76b4ee4770c13f0b5921f71dde3b6fcb8dabbefd13b7fe05d7", size = 232821, upload_time = "2025-07-01T15:55:55.167Z" }, ] [[package]] @@ -1923,35 +2535,35 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "ruamel-yaml-clib", marker = "python_full_version < '3.14' and platform_python_implementation == 'CPython'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/39/87/6da0df742a4684263261c253f00edd5829e6aca970fff69e75028cccc547/ruamel.yaml-0.18.14.tar.gz", hash = "sha256:7227b76aaec364df15936730efbf7d72b30c0b79b1d578bbb8e3dcb2d81f52b7", size = 145511 } +sdist = { url = "https://files.pythonhosted.org/packages/39/87/6da0df742a4684263261c253f00edd5829e6aca970fff69e75028cccc547/ruamel.yaml-0.18.14.tar.gz", hash = "sha256:7227b76aaec364df15936730efbf7d72b30c0b79b1d578bbb8e3dcb2d81f52b7", size = 145511, upload_time = "2025-06-09T08:51:09.828Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/af/6d/6fe4805235e193aad4aaf979160dd1f3c487c57d48b810c816e6e842171b/ruamel.yaml-0.18.14-py3-none-any.whl", hash = "sha256:710ff198bb53da66718c7db27eec4fbcc9aa6ca7204e4c1df2f282b6fe5eb6b2", size = 118570 }, + { url = "https://files.pythonhosted.org/packages/af/6d/6fe4805235e193aad4aaf979160dd1f3c487c57d48b810c816e6e842171b/ruamel.yaml-0.18.14-py3-none-any.whl", hash = "sha256:710ff198bb53da66718c7db27eec4fbcc9aa6ca7204e4c1df2f282b6fe5eb6b2", size = 118570, upload_time = "2025-06-09T08:51:06.348Z" }, ] [[package]] name = "ruamel-yaml-clib" version = "0.2.12" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/20/84/80203abff8ea4993a87d823a5f632e4d92831ef75d404c9fc78d0176d2b5/ruamel.yaml.clib-0.2.12.tar.gz", hash = "sha256:6c8fbb13ec503f99a91901ab46e0b07ae7941cd527393187039aec586fdfd36f", size = 225315 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/48/41/e7a405afbdc26af961678474a55373e1b323605a4f5e2ddd4a80ea80f628/ruamel.yaml.clib-0.2.12-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:20b0f8dc160ba83b6dcc0e256846e1a02d044e13f7ea74a3d1d56ede4e48c632", size = 133433 }, - { url = "https://files.pythonhosted.org/packages/ec/b0/b850385604334c2ce90e3ee1013bd911aedf058a934905863a6ea95e9eb4/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:943f32bc9dedb3abff9879edc134901df92cfce2c3d5c9348f172f62eb2d771d", size = 647362 }, - { url = "https://files.pythonhosted.org/packages/44/d0/3f68a86e006448fb6c005aee66565b9eb89014a70c491d70c08de597f8e4/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95c3829bb364fdb8e0332c9931ecf57d9be3519241323c5274bd82f709cebc0c", size = 754118 }, - { url = "https://files.pythonhosted.org/packages/52/a9/d39f3c5ada0a3bb2870d7db41901125dbe2434fa4f12ca8c5b83a42d7c53/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:749c16fcc4a2b09f28843cda5a193e0283e47454b63ec4b81eaa2242f50e4ccd", size = 706497 }, - { url = "https://files.pythonhosted.org/packages/b0/fa/097e38135dadd9ac25aecf2a54be17ddf6e4c23e43d538492a90ab3d71c6/ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bf165fef1f223beae7333275156ab2022cffe255dcc51c27f066b4370da81e31", size = 698042 }, - { url = "https://files.pythonhosted.org/packages/ec/d5/a659ca6f503b9379b930f13bc6b130c9f176469b73b9834296822a83a132/ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:32621c177bbf782ca5a18ba4d7af0f1082a3f6e517ac2a18b3974d4edf349680", size = 745831 }, - { url = "https://files.pythonhosted.org/packages/db/5d/36619b61ffa2429eeaefaab4f3374666adf36ad8ac6330d855848d7d36fd/ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b82a7c94a498853aa0b272fd5bc67f29008da798d4f93a2f9f289feb8426a58d", size = 715692 }, - { url = "https://files.pythonhosted.org/packages/b1/82/85cb92f15a4231c89b95dfe08b09eb6adca929ef7df7e17ab59902b6f589/ruamel.yaml.clib-0.2.12-cp312-cp312-win32.whl", hash = "sha256:e8c4ebfcfd57177b572e2040777b8abc537cdef58a2120e830124946aa9b42c5", size = 98777 }, - { url = "https://files.pythonhosted.org/packages/d7/8f/c3654f6f1ddb75daf3922c3d8fc6005b1ab56671ad56ffb874d908bfa668/ruamel.yaml.clib-0.2.12-cp312-cp312-win_amd64.whl", hash = "sha256:0467c5965282c62203273b838ae77c0d29d7638c8a4e3a1c8bdd3602c10904e4", size = 115523 }, - { url = "https://files.pythonhosted.org/packages/29/00/4864119668d71a5fa45678f380b5923ff410701565821925c69780356ffa/ruamel.yaml.clib-0.2.12-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:4c8c5d82f50bb53986a5e02d1b3092b03622c02c2eb78e29bec33fd9593bae1a", size = 132011 }, - { url = "https://files.pythonhosted.org/packages/7f/5e/212f473a93ae78c669ffa0cb051e3fee1139cb2d385d2ae1653d64281507/ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux2014_aarch64.whl", hash = "sha256:e7e3736715fbf53e9be2a79eb4db68e4ed857017344d697e8b9749444ae57475", size = 642488 }, - { url = "https://files.pythonhosted.org/packages/1f/8f/ecfbe2123ade605c49ef769788f79c38ddb1c8fa81e01f4dbf5cf1a44b16/ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b7e75b4965e1d4690e93021adfcecccbca7d61c7bddd8e22406ef2ff20d74ef", size = 745066 }, - { url = "https://files.pythonhosted.org/packages/e2/a9/28f60726d29dfc01b8decdb385de4ced2ced9faeb37a847bd5cf26836815/ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96777d473c05ee3e5e3c3e999f5d23c6f4ec5b0c38c098b3a5229085f74236c6", size = 701785 }, - { url = "https://files.pythonhosted.org/packages/84/7e/8e7ec45920daa7f76046578e4f677a3215fe8f18ee30a9cb7627a19d9b4c/ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:3bc2a80e6420ca8b7d3590791e2dfc709c88ab9152c00eeb511c9875ce5778bf", size = 693017 }, - { url = "https://files.pythonhosted.org/packages/c5/b3/d650eaade4ca225f02a648321e1ab835b9d361c60d51150bac49063b83fa/ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:e188d2699864c11c36cdfdada94d781fd5d6b0071cd9c427bceb08ad3d7c70e1", size = 741270 }, - { url = "https://files.pythonhosted.org/packages/87/b8/01c29b924dcbbed75cc45b30c30d565d763b9c4d540545a0eeecffb8f09c/ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4f6f3eac23941b32afccc23081e1f50612bdbe4e982012ef4f5797986828cd01", size = 709059 }, - { url = "https://files.pythonhosted.org/packages/30/8c/ed73f047a73638257aa9377ad356bea4d96125b305c34a28766f4445cc0f/ruamel.yaml.clib-0.2.12-cp313-cp313-win32.whl", hash = "sha256:6442cb36270b3afb1b4951f060eccca1ce49f3d087ca1ca4563a6eb479cb3de6", size = 98583 }, - { url = "https://files.pythonhosted.org/packages/b0/85/e8e751d8791564dd333d5d9a4eab0a7a115f7e349595417fd50ecae3395c/ruamel.yaml.clib-0.2.12-cp313-cp313-win_amd64.whl", hash = "sha256:e5b8daf27af0b90da7bb903a876477a9e6d7270be6146906b276605997c7e9a3", size = 115190 }, +sdist = { url = "https://files.pythonhosted.org/packages/20/84/80203abff8ea4993a87d823a5f632e4d92831ef75d404c9fc78d0176d2b5/ruamel.yaml.clib-0.2.12.tar.gz", hash = "sha256:6c8fbb13ec503f99a91901ab46e0b07ae7941cd527393187039aec586fdfd36f", size = 225315, upload_time = "2024-10-20T10:10:56.22Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/48/41/e7a405afbdc26af961678474a55373e1b323605a4f5e2ddd4a80ea80f628/ruamel.yaml.clib-0.2.12-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:20b0f8dc160ba83b6dcc0e256846e1a02d044e13f7ea74a3d1d56ede4e48c632", size = 133433, upload_time = "2024-10-20T10:12:55.657Z" }, + { url = "https://files.pythonhosted.org/packages/ec/b0/b850385604334c2ce90e3ee1013bd911aedf058a934905863a6ea95e9eb4/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:943f32bc9dedb3abff9879edc134901df92cfce2c3d5c9348f172f62eb2d771d", size = 647362, upload_time = "2024-10-20T10:12:57.155Z" }, + { url = "https://files.pythonhosted.org/packages/44/d0/3f68a86e006448fb6c005aee66565b9eb89014a70c491d70c08de597f8e4/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95c3829bb364fdb8e0332c9931ecf57d9be3519241323c5274bd82f709cebc0c", size = 754118, upload_time = "2024-10-20T10:12:58.501Z" }, + { url = "https://files.pythonhosted.org/packages/52/a9/d39f3c5ada0a3bb2870d7db41901125dbe2434fa4f12ca8c5b83a42d7c53/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:749c16fcc4a2b09f28843cda5a193e0283e47454b63ec4b81eaa2242f50e4ccd", size = 706497, upload_time = "2024-10-20T10:13:00.211Z" }, + { url = "https://files.pythonhosted.org/packages/b0/fa/097e38135dadd9ac25aecf2a54be17ddf6e4c23e43d538492a90ab3d71c6/ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bf165fef1f223beae7333275156ab2022cffe255dcc51c27f066b4370da81e31", size = 698042, upload_time = "2024-10-21T11:26:46.038Z" }, + { url = "https://files.pythonhosted.org/packages/ec/d5/a659ca6f503b9379b930f13bc6b130c9f176469b73b9834296822a83a132/ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:32621c177bbf782ca5a18ba4d7af0f1082a3f6e517ac2a18b3974d4edf349680", size = 745831, upload_time = "2024-10-21T11:26:47.487Z" }, + { url = "https://files.pythonhosted.org/packages/db/5d/36619b61ffa2429eeaefaab4f3374666adf36ad8ac6330d855848d7d36fd/ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b82a7c94a498853aa0b272fd5bc67f29008da798d4f93a2f9f289feb8426a58d", size = 715692, upload_time = "2024-12-11T19:58:17.252Z" }, + { url = "https://files.pythonhosted.org/packages/b1/82/85cb92f15a4231c89b95dfe08b09eb6adca929ef7df7e17ab59902b6f589/ruamel.yaml.clib-0.2.12-cp312-cp312-win32.whl", hash = "sha256:e8c4ebfcfd57177b572e2040777b8abc537cdef58a2120e830124946aa9b42c5", size = 98777, upload_time = "2024-10-20T10:13:01.395Z" }, + { url = "https://files.pythonhosted.org/packages/d7/8f/c3654f6f1ddb75daf3922c3d8fc6005b1ab56671ad56ffb874d908bfa668/ruamel.yaml.clib-0.2.12-cp312-cp312-win_amd64.whl", hash = "sha256:0467c5965282c62203273b838ae77c0d29d7638c8a4e3a1c8bdd3602c10904e4", size = 115523, upload_time = "2024-10-20T10:13:02.768Z" }, + { url = "https://files.pythonhosted.org/packages/29/00/4864119668d71a5fa45678f380b5923ff410701565821925c69780356ffa/ruamel.yaml.clib-0.2.12-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:4c8c5d82f50bb53986a5e02d1b3092b03622c02c2eb78e29bec33fd9593bae1a", size = 132011, upload_time = "2024-10-20T10:13:04.377Z" }, + { url = "https://files.pythonhosted.org/packages/7f/5e/212f473a93ae78c669ffa0cb051e3fee1139cb2d385d2ae1653d64281507/ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux2014_aarch64.whl", hash = "sha256:e7e3736715fbf53e9be2a79eb4db68e4ed857017344d697e8b9749444ae57475", size = 642488, upload_time = "2024-10-20T10:13:05.906Z" }, + { url = "https://files.pythonhosted.org/packages/1f/8f/ecfbe2123ade605c49ef769788f79c38ddb1c8fa81e01f4dbf5cf1a44b16/ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b7e75b4965e1d4690e93021adfcecccbca7d61c7bddd8e22406ef2ff20d74ef", size = 745066, upload_time = "2024-10-20T10:13:07.26Z" }, + { url = "https://files.pythonhosted.org/packages/e2/a9/28f60726d29dfc01b8decdb385de4ced2ced9faeb37a847bd5cf26836815/ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96777d473c05ee3e5e3c3e999f5d23c6f4ec5b0c38c098b3a5229085f74236c6", size = 701785, upload_time = "2024-10-20T10:13:08.504Z" }, + { url = "https://files.pythonhosted.org/packages/84/7e/8e7ec45920daa7f76046578e4f677a3215fe8f18ee30a9cb7627a19d9b4c/ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:3bc2a80e6420ca8b7d3590791e2dfc709c88ab9152c00eeb511c9875ce5778bf", size = 693017, upload_time = "2024-10-21T11:26:48.866Z" }, + { url = "https://files.pythonhosted.org/packages/c5/b3/d650eaade4ca225f02a648321e1ab835b9d361c60d51150bac49063b83fa/ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:e188d2699864c11c36cdfdada94d781fd5d6b0071cd9c427bceb08ad3d7c70e1", size = 741270, upload_time = "2024-10-21T11:26:50.213Z" }, + { url = "https://files.pythonhosted.org/packages/87/b8/01c29b924dcbbed75cc45b30c30d565d763b9c4d540545a0eeecffb8f09c/ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4f6f3eac23941b32afccc23081e1f50612bdbe4e982012ef4f5797986828cd01", size = 709059, upload_time = "2024-12-11T19:58:18.846Z" }, + { url = "https://files.pythonhosted.org/packages/30/8c/ed73f047a73638257aa9377ad356bea4d96125b305c34a28766f4445cc0f/ruamel.yaml.clib-0.2.12-cp313-cp313-win32.whl", hash = "sha256:6442cb36270b3afb1b4951f060eccca1ce49f3d087ca1ca4563a6eb479cb3de6", size = 98583, upload_time = "2024-10-20T10:13:09.658Z" }, + { url = "https://files.pythonhosted.org/packages/b0/85/e8e751d8791564dd333d5d9a4eab0a7a115f7e349595417fd50ecae3395c/ruamel.yaml.clib-0.2.12-cp313-cp313-win_amd64.whl", hash = "sha256:e5b8daf27af0b90da7bb903a876477a9e6d7270be6146906b276605997c7e9a3", size = 115190, upload_time = "2024-10-20T10:13:10.66Z" }, ] [[package]] @@ -1962,54 +2574,139 @@ dependencies = [ { name = "click" }, { name = "requests" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/84/a4/b61c6e7a13b848fd985c9ed9acd525ccb1c2675e6cfa0d62292ae8015792/savepagenow-1.3.0.tar.gz", hash = "sha256:d0bc6bbe4606c700315015c3defcfab3c329208002b2b8cdc59f9b52996c6d3f", size = 42927 } +sdist = { url = "https://files.pythonhosted.org/packages/84/a4/b61c6e7a13b848fd985c9ed9acd525ccb1c2675e6cfa0d62292ae8015792/savepagenow-1.3.0.tar.gz", hash = "sha256:d0bc6bbe4606c700315015c3defcfab3c329208002b2b8cdc59f9b52996c6d3f", size = 42927, upload_time = "2023-07-01T13:31:49.607Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a6/8f/aea39979f8a7091ad2242a038a0e4c2b463593923ce598a914255dfba9ef/savepagenow-1.3.0-py2.py3-none-any.whl", hash = "sha256:4b0a4fff47254c160a37a20868ab53bb90da3d3f9f96086a9255b2375e39fcbf", size = 5649 }, + { url = "https://files.pythonhosted.org/packages/a6/8f/aea39979f8a7091ad2242a038a0e4c2b463593923ce598a914255dfba9ef/savepagenow-1.3.0-py2.py3-none-any.whl", hash = "sha256:4b0a4fff47254c160a37a20868ab53bb90da3d3f9f96086a9255b2375e39fcbf", size = 5649, upload_time = "2023-07-01T13:31:48.005Z" }, +] + +[[package]] +name = "scikit-learn" +version = "1.7.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "joblib" }, + { name = "numpy" }, + { name = "scipy" }, + { name = "threadpoolctl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/41/84/5f4af978fff619706b8961accac84780a6d298d82a8873446f72edb4ead0/scikit_learn-1.7.1.tar.gz", hash = "sha256:24b3f1e976a4665aa74ee0fcaac2b8fccc6ae77c8e07ab25da3ba6d3292b9802", size = 7190445, upload_time = "2025-07-18T08:01:54.5Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/16/57f176585b35ed865f51b04117947fe20f130f78940c6477b6d66279c9c2/scikit_learn-1.7.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3cee419b49b5bbae8796ecd690f97aa412ef1674410c23fc3257c6b8b85b8087", size = 9260431, upload_time = "2025-07-18T08:01:22.77Z" }, + { url = "https://files.pythonhosted.org/packages/67/4e/899317092f5efcab0e9bc929e3391341cec8fb0e816c4789686770024580/scikit_learn-1.7.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:2fd8b8d35817b0d9ebf0b576f7d5ffbbabdb55536b0655a8aaae629d7ffd2e1f", size = 8637191, upload_time = "2025-07-18T08:01:24.731Z" }, + { url = "https://files.pythonhosted.org/packages/f3/1b/998312db6d361ded1dd56b457ada371a8d8d77ca2195a7d18fd8a1736f21/scikit_learn-1.7.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:588410fa19a96a69763202f1d6b7b91d5d7a5d73be36e189bc6396bfb355bd87", size = 9486346, upload_time = "2025-07-18T08:01:26.713Z" }, + { url = "https://files.pythonhosted.org/packages/ad/09/a2aa0b4e644e5c4ede7006748f24e72863ba2ae71897fecfd832afea01b4/scikit_learn-1.7.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e3142f0abe1ad1d1c31a2ae987621e41f6b578144a911ff4ac94781a583adad7", size = 9290988, upload_time = "2025-07-18T08:01:28.938Z" }, + { url = "https://files.pythonhosted.org/packages/15/fa/c61a787e35f05f17fc10523f567677ec4eeee5f95aa4798dbbbcd9625617/scikit_learn-1.7.1-cp312-cp312-win_amd64.whl", hash = "sha256:3ddd9092c1bd469acab337d87930067c87eac6bd544f8d5027430983f1e1ae88", size = 8735568, upload_time = "2025-07-18T08:01:30.936Z" }, + { url = "https://files.pythonhosted.org/packages/52/f8/e0533303f318a0f37b88300d21f79b6ac067188d4824f1047a37214ab718/scikit_learn-1.7.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b7839687fa46d02e01035ad775982f2470be2668e13ddd151f0f55a5bf123bae", size = 9213143, upload_time = "2025-07-18T08:01:32.942Z" }, + { url = "https://files.pythonhosted.org/packages/71/f3/f1df377d1bdfc3e3e2adc9c119c238b182293e6740df4cbeac6de2cc3e23/scikit_learn-1.7.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:a10f276639195a96c86aa572ee0698ad64ee939a7b042060b98bd1930c261d10", size = 8591977, upload_time = "2025-07-18T08:01:34.967Z" }, + { url = "https://files.pythonhosted.org/packages/99/72/c86a4cd867816350fe8dee13f30222340b9cd6b96173955819a5561810c5/scikit_learn-1.7.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:13679981fdaebc10cc4c13c43344416a86fcbc61449cb3e6517e1df9d12c8309", size = 9436142, upload_time = "2025-07-18T08:01:37.397Z" }, + { url = "https://files.pythonhosted.org/packages/e8/66/277967b29bd297538dc7a6ecfb1a7dce751beabd0d7f7a2233be7a4f7832/scikit_learn-1.7.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4f1262883c6a63f067a980a8cdd2d2e7f2513dddcef6a9eaada6416a7a7cbe43", size = 9282996, upload_time = "2025-07-18T08:01:39.721Z" }, + { url = "https://files.pythonhosted.org/packages/e2/47/9291cfa1db1dae9880420d1e07dbc7e8dd4a7cdbc42eaba22512e6bde958/scikit_learn-1.7.1-cp313-cp313-win_amd64.whl", hash = "sha256:ca6d31fb10e04d50bfd2b50d66744729dbb512d4efd0223b864e2fdbfc4cee11", size = 8707418, upload_time = "2025-07-18T08:01:42.124Z" }, + { url = "https://files.pythonhosted.org/packages/61/95/45726819beccdaa34d3362ea9b2ff9f2b5d3b8bf721bd632675870308ceb/scikit_learn-1.7.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:781674d096303cfe3d351ae6963ff7c958db61cde3421cd490e3a5a58f2a94ae", size = 9561466, upload_time = "2025-07-18T08:01:44.195Z" }, + { url = "https://files.pythonhosted.org/packages/ee/1c/6f4b3344805de783d20a51eb24d4c9ad4b11a7f75c1801e6ec6d777361fd/scikit_learn-1.7.1-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:10679f7f125fe7ecd5fad37dd1aa2daae7e3ad8df7f3eefa08901b8254b3e12c", size = 9040467, upload_time = "2025-07-18T08:01:46.671Z" }, + { url = "https://files.pythonhosted.org/packages/6f/80/abe18fe471af9f1d181904203d62697998b27d9b62124cd281d740ded2f9/scikit_learn-1.7.1-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1f812729e38c8cb37f760dce71a9b83ccfb04f59b3dca7c6079dcdc60544fa9e", size = 9532052, upload_time = "2025-07-18T08:01:48.676Z" }, + { url = "https://files.pythonhosted.org/packages/14/82/b21aa1e0c4cee7e74864d3a5a721ab8fcae5ca55033cb6263dca297ed35b/scikit_learn-1.7.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:88e1a20131cf741b84b89567e1717f27a2ced228e0f29103426102bc2e3b8ef7", size = 9361575, upload_time = "2025-07-18T08:01:50.639Z" }, + { url = "https://files.pythonhosted.org/packages/f2/20/f4777fcd5627dc6695fa6b92179d0edb7a3ac1b91bcd9a1c7f64fa7ade23/scikit_learn-1.7.1-cp313-cp313t-win_amd64.whl", hash = "sha256:b1bd1d919210b6a10b7554b717c9000b5485aa95a1d0f177ae0d7ee8ec750da5", size = 9277310, upload_time = "2025-07-18T08:01:52.547Z" }, +] + +[[package]] +name = "scipy" +version = "1.16.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f5/4a/b927028464795439faec8eaf0b03b011005c487bb2d07409f28bf30879c4/scipy-1.16.1.tar.gz", hash = "sha256:44c76f9e8b6e8e488a586190ab38016e4ed2f8a038af7cd3defa903c0a2238b3", size = 30580861, upload_time = "2025-07-27T16:33:30.834Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f8/d9/ec4864f5896232133f51382b54a08de91a9d1af7a76dfa372894026dfee2/scipy-1.16.1-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:81b433bbeaf35728dad619afc002db9b189e45eebe2cd676effe1fb93fef2b9c", size = 36575194, upload_time = "2025-07-27T16:27:41.321Z" }, + { url = "https://files.pythonhosted.org/packages/5c/6d/40e81ecfb688e9d25d34a847dca361982a6addf8e31f0957b1a54fbfa994/scipy-1.16.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:886cc81fdb4c6903a3bb0464047c25a6d1016fef77bb97949817d0c0d79f9e04", size = 28594590, upload_time = "2025-07-27T16:27:49.204Z" }, + { url = "https://files.pythonhosted.org/packages/0e/37/9f65178edfcc629377ce9a64fc09baebea18c80a9e57ae09a52edf84880b/scipy-1.16.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:15240c3aac087a522b4eaedb09f0ad061753c5eebf1ea430859e5bf8640d5919", size = 20866458, upload_time = "2025-07-27T16:27:54.98Z" }, + { url = "https://files.pythonhosted.org/packages/2c/7b/749a66766871ea4cb1d1ea10f27004db63023074c22abed51f22f09770e0/scipy-1.16.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:65f81a25805f3659b48126b5053d9e823d3215e4a63730b5e1671852a1705921", size = 23539318, upload_time = "2025-07-27T16:28:01.604Z" }, + { url = "https://files.pythonhosted.org/packages/c4/db/8d4afec60eb833a666434d4541a3151eedbf2494ea6d4d468cbe877f00cd/scipy-1.16.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:6c62eea7f607f122069b9bad3f99489ddca1a5173bef8a0c75555d7488b6f725", size = 33292899, upload_time = "2025-07-27T16:28:09.147Z" }, + { url = "https://files.pythonhosted.org/packages/51/1e/79023ca3bbb13a015d7d2757ecca3b81293c663694c35d6541b4dca53e98/scipy-1.16.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f965bbf3235b01c776115ab18f092a95aa74c271a52577bcb0563e85738fd618", size = 35162637, upload_time = "2025-07-27T16:28:17.535Z" }, + { url = "https://files.pythonhosted.org/packages/b6/49/0648665f9c29fdaca4c679182eb972935b3b4f5ace41d323c32352f29816/scipy-1.16.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f006e323874ffd0b0b816d8c6a8e7f9a73d55ab3b8c3f72b752b226d0e3ac83d", size = 35490507, upload_time = "2025-07-27T16:28:25.705Z" }, + { url = "https://files.pythonhosted.org/packages/62/8f/66cbb9d6bbb18d8c658f774904f42a92078707a7c71e5347e8bf2f52bb89/scipy-1.16.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e8fd15fc5085ab4cca74cb91fe0a4263b1f32e4420761ddae531ad60934c2119", size = 37923998, upload_time = "2025-07-27T16:28:34.339Z" }, + { url = "https://files.pythonhosted.org/packages/14/c3/61f273ae550fbf1667675701112e380881905e28448c080b23b5a181df7c/scipy-1.16.1-cp312-cp312-win_amd64.whl", hash = "sha256:f7b8013c6c066609577d910d1a2a077021727af07b6fab0ee22c2f901f22352a", size = 38508060, upload_time = "2025-07-27T16:28:43.242Z" }, + { url = "https://files.pythonhosted.org/packages/93/0b/b5c99382b839854a71ca9482c684e3472badc62620287cbbdab499b75ce6/scipy-1.16.1-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:5451606823a5e73dfa621a89948096c6528e2896e40b39248295d3a0138d594f", size = 36533717, upload_time = "2025-07-27T16:28:51.706Z" }, + { url = "https://files.pythonhosted.org/packages/eb/e5/69ab2771062c91e23e07c12e7d5033a6b9b80b0903ee709c3c36b3eb520c/scipy-1.16.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:89728678c5ca5abd610aee148c199ac1afb16e19844401ca97d43dc548a354eb", size = 28570009, upload_time = "2025-07-27T16:28:57.017Z" }, + { url = "https://files.pythonhosted.org/packages/f4/69/bd75dbfdd3cf524f4d753484d723594aed62cfaac510123e91a6686d520b/scipy-1.16.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:e756d688cb03fd07de0fffad475649b03cb89bee696c98ce508b17c11a03f95c", size = 20841942, upload_time = "2025-07-27T16:29:01.152Z" }, + { url = "https://files.pythonhosted.org/packages/ea/74/add181c87663f178ba7d6144b370243a87af8476664d5435e57d599e6874/scipy-1.16.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:5aa2687b9935da3ed89c5dbed5234576589dd28d0bf7cd237501ccfbdf1ad608", size = 23498507, upload_time = "2025-07-27T16:29:05.202Z" }, + { url = "https://files.pythonhosted.org/packages/1d/74/ece2e582a0d9550cee33e2e416cc96737dce423a994d12bbe59716f47ff1/scipy-1.16.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0851f6a1e537fe9399f35986897e395a1aa61c574b178c0d456be5b1a0f5ca1f", size = 33286040, upload_time = "2025-07-27T16:29:10.201Z" }, + { url = "https://files.pythonhosted.org/packages/e4/82/08e4076df538fb56caa1d489588d880ec7c52d8273a606bb54d660528f7c/scipy-1.16.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fedc2cbd1baed37474b1924c331b97bdff611d762c196fac1a9b71e67b813b1b", size = 35176096, upload_time = "2025-07-27T16:29:17.091Z" }, + { url = "https://files.pythonhosted.org/packages/fa/79/cd710aab8c921375711a8321c6be696e705a120e3011a643efbbcdeeabcc/scipy-1.16.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:2ef500e72f9623a6735769e4b93e9dcb158d40752cdbb077f305487e3e2d1f45", size = 35490328, upload_time = "2025-07-27T16:29:22.928Z" }, + { url = "https://files.pythonhosted.org/packages/71/73/e9cc3d35ee4526d784520d4494a3e1ca969b071fb5ae5910c036a375ceec/scipy-1.16.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:978d8311674b05a8f7ff2ea6c6bce5d8b45a0cb09d4c5793e0318f448613ea65", size = 37939921, upload_time = "2025-07-27T16:29:29.108Z" }, + { url = "https://files.pythonhosted.org/packages/21/12/c0efd2941f01940119b5305c375ae5c0fcb7ec193f806bd8f158b73a1782/scipy-1.16.1-cp313-cp313-win_amd64.whl", hash = "sha256:81929ed0fa7a5713fcdd8b2e6f73697d3b4c4816d090dd34ff937c20fa90e8ab", size = 38479462, upload_time = "2025-07-27T16:30:24.078Z" }, + { url = "https://files.pythonhosted.org/packages/7a/19/c3d08b675260046a991040e1ea5d65f91f40c7df1045fffff412dcfc6765/scipy-1.16.1-cp313-cp313t-macosx_10_14_x86_64.whl", hash = "sha256:bcc12db731858abda693cecdb3bdc9e6d4bd200213f49d224fe22df82687bdd6", size = 36938832, upload_time = "2025-07-27T16:29:35.057Z" }, + { url = "https://files.pythonhosted.org/packages/81/f2/ce53db652c033a414a5b34598dba6b95f3d38153a2417c5a3883da429029/scipy-1.16.1-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:744d977daa4becb9fc59135e75c069f8d301a87d64f88f1e602a9ecf51e77b27", size = 29093084, upload_time = "2025-07-27T16:29:40.201Z" }, + { url = "https://files.pythonhosted.org/packages/a9/ae/7a10ff04a7dc15f9057d05b33737ade244e4bd195caa3f7cc04d77b9e214/scipy-1.16.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:dc54f76ac18073bcecffb98d93f03ed6b81a92ef91b5d3b135dcc81d55a724c7", size = 21365098, upload_time = "2025-07-27T16:29:44.295Z" }, + { url = "https://files.pythonhosted.org/packages/36/ac/029ff710959932ad3c2a98721b20b405f05f752f07344622fd61a47c5197/scipy-1.16.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:367d567ee9fc1e9e2047d31f39d9d6a7a04e0710c86e701e053f237d14a9b4f6", size = 23896858, upload_time = "2025-07-27T16:29:48.784Z" }, + { url = "https://files.pythonhosted.org/packages/71/13/d1ef77b6bd7898720e1f0b6b3743cb945f6c3cafa7718eaac8841035ab60/scipy-1.16.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:4cf5785e44e19dcd32a0e4807555e1e9a9b8d475c6afff3d21c3c543a6aa84f4", size = 33438311, upload_time = "2025-07-27T16:29:54.164Z" }, + { url = "https://files.pythonhosted.org/packages/2d/e0/e64a6821ffbb00b4c5b05169f1c1fddb4800e9307efe3db3788995a82a2c/scipy-1.16.1-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3d0b80fb26d3e13a794c71d4b837e2a589d839fd574a6bbb4ee1288c213ad4a3", size = 35279542, upload_time = "2025-07-27T16:30:00.249Z" }, + { url = "https://files.pythonhosted.org/packages/57/59/0dc3c8b43e118f1e4ee2b798dcc96ac21bb20014e5f1f7a8e85cc0653bdb/scipy-1.16.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:8503517c44c18d1030d666cb70aaac1cc8913608816e06742498833b128488b7", size = 35667665, upload_time = "2025-07-27T16:30:05.916Z" }, + { url = "https://files.pythonhosted.org/packages/45/5f/844ee26e34e2f3f9f8febb9343748e72daeaec64fe0c70e9bf1ff84ec955/scipy-1.16.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:30cc4bb81c41831ecfd6dc450baf48ffd80ef5aed0f5cf3ea775740e80f16ecc", size = 38045210, upload_time = "2025-07-27T16:30:11.655Z" }, + { url = "https://files.pythonhosted.org/packages/8d/d7/210f2b45290f444f1de64bc7353aa598ece9f0e90c384b4a156f9b1a5063/scipy-1.16.1-cp313-cp313t-win_amd64.whl", hash = "sha256:c24fa02f7ed23ae514460a22c57eca8f530dbfa50b1cfdbf4f37c05b5309cc39", size = 38593661, upload_time = "2025-07-27T16:30:17.825Z" }, + { url = "https://files.pythonhosted.org/packages/81/ea/84d481a5237ed223bd3d32d6e82d7a6a96e34756492666c260cef16011d1/scipy-1.16.1-cp314-cp314-macosx_10_14_x86_64.whl", hash = "sha256:796a5a9ad36fa3a782375db8f4241ab02a091308eb079746bc0f874c9b998318", size = 36525921, upload_time = "2025-07-27T16:30:30.081Z" }, + { url = "https://files.pythonhosted.org/packages/4e/9f/d9edbdeff9f3a664807ae3aea383e10afaa247e8e6255e6d2aa4515e8863/scipy-1.16.1-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:3ea0733a2ff73fd6fdc5fecca54ee9b459f4d74f00b99aced7d9a3adb43fb1cc", size = 28564152, upload_time = "2025-07-27T16:30:35.336Z" }, + { url = "https://files.pythonhosted.org/packages/3b/95/8125bcb1fe04bc267d103e76516243e8d5e11229e6b306bda1024a5423d1/scipy-1.16.1-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:85764fb15a2ad994e708258bb4ed8290d1305c62a4e1ef07c414356a24fcfbf8", size = 20836028, upload_time = "2025-07-27T16:30:39.421Z" }, + { url = "https://files.pythonhosted.org/packages/77/9c/bf92e215701fc70bbcd3d14d86337cf56a9b912a804b9c776a269524a9e9/scipy-1.16.1-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:ca66d980469cb623b1759bdd6e9fd97d4e33a9fad5b33771ced24d0cb24df67e", size = 23489666, upload_time = "2025-07-27T16:30:43.663Z" }, + { url = "https://files.pythonhosted.org/packages/5e/00/5e941d397d9adac41b02839011594620d54d99488d1be5be755c00cde9ee/scipy-1.16.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e7cc1ffcc230f568549fc56670bcf3df1884c30bd652c5da8138199c8c76dae0", size = 33358318, upload_time = "2025-07-27T16:30:48.982Z" }, + { url = "https://files.pythonhosted.org/packages/0e/87/8db3aa10dde6e3e8e7eb0133f24baa011377d543f5b19c71469cf2648026/scipy-1.16.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3ddfb1e8d0b540cb4ee9c53fc3dea3186f97711248fb94b4142a1b27178d8b4b", size = 35185724, upload_time = "2025-07-27T16:30:54.26Z" }, + { url = "https://files.pythonhosted.org/packages/89/b4/6ab9ae443216807622bcff02690262d8184078ea467efee2f8c93288a3b1/scipy-1.16.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4dc0e7be79e95d8ba3435d193e0d8ce372f47f774cffd882f88ea4e1e1ddc731", size = 35554335, upload_time = "2025-07-27T16:30:59.765Z" }, + { url = "https://files.pythonhosted.org/packages/9c/9a/d0e9dc03c5269a1afb60661118296a32ed5d2c24298af61b676c11e05e56/scipy-1.16.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:f23634f9e5adb51b2a77766dac217063e764337fbc816aa8ad9aaebcd4397fd3", size = 37960310, upload_time = "2025-07-27T16:31:06.151Z" }, + { url = "https://files.pythonhosted.org/packages/5e/00/c8f3130a50521a7977874817ca89e0599b1b4ee8e938bad8ae798a0e1f0d/scipy-1.16.1-cp314-cp314-win_amd64.whl", hash = "sha256:57d75524cb1c5a374958a2eae3d84e1929bb971204cc9d52213fb8589183fc19", size = 39319239, upload_time = "2025-07-27T16:31:59.942Z" }, + { url = "https://files.pythonhosted.org/packages/f2/f2/1ca3eda54c3a7e4c92f6acef7db7b3a057deb135540d23aa6343ef8ad333/scipy-1.16.1-cp314-cp314t-macosx_10_14_x86_64.whl", hash = "sha256:d8da7c3dd67bcd93f15618938f43ed0995982eb38973023d46d4646c4283ad65", size = 36939460, upload_time = "2025-07-27T16:31:11.865Z" }, + { url = "https://files.pythonhosted.org/packages/80/30/98c2840b293a132400c0940bb9e140171dcb8189588619048f42b2ce7b4f/scipy-1.16.1-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:cc1d2f2fd48ba1e0620554fe5bc44d3e8f5d4185c8c109c7fbdf5af2792cfad2", size = 29093322, upload_time = "2025-07-27T16:31:17.045Z" }, + { url = "https://files.pythonhosted.org/packages/c1/e6/1e6e006e850622cf2a039b62d1a6ddc4497d4851e58b68008526f04a9a00/scipy-1.16.1-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:21a611ced9275cb861bacadbada0b8c0623bc00b05b09eb97f23b370fc2ae56d", size = 21365329, upload_time = "2025-07-27T16:31:21.188Z" }, + { url = "https://files.pythonhosted.org/packages/8e/02/72a5aa5b820589dda9a25e329ca752842bfbbaf635e36bc7065a9b42216e/scipy-1.16.1-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:8dfbb25dffc4c3dd9371d8ab456ca81beeaf6f9e1c2119f179392f0dc1ab7695", size = 23897544, upload_time = "2025-07-27T16:31:25.408Z" }, + { url = "https://files.pythonhosted.org/packages/2b/dc/7122d806a6f9eb8a33532982234bed91f90272e990f414f2830cfe656e0b/scipy-1.16.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f0ebb7204f063fad87fc0a0e4ff4a2ff40b2a226e4ba1b7e34bf4b79bf97cd86", size = 33442112, upload_time = "2025-07-27T16:31:30.62Z" }, + { url = "https://files.pythonhosted.org/packages/24/39/e383af23564daa1021a5b3afbe0d8d6a68ec639b943661841f44ac92de85/scipy-1.16.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f1b9e5962656f2734c2b285a8745358ecb4e4efbadd00208c80a389227ec61ff", size = 35286594, upload_time = "2025-07-27T16:31:36.112Z" }, + { url = "https://files.pythonhosted.org/packages/95/47/1a0b0aff40c3056d955f38b0df5d178350c3d74734ec54f9c68d23910be5/scipy-1.16.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5e1a106f8c023d57a2a903e771228bf5c5b27b5d692088f457acacd3b54511e4", size = 35665080, upload_time = "2025-07-27T16:31:42.025Z" }, + { url = "https://files.pythonhosted.org/packages/64/df/ce88803e9ed6e27fe9b9abefa157cf2c80e4fa527cf17ee14be41f790ad4/scipy-1.16.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:709559a1db68a9abc3b2c8672c4badf1614f3b440b3ab326d86a5c0491eafae3", size = 38050306, upload_time = "2025-07-27T16:31:48.109Z" }, + { url = "https://files.pythonhosted.org/packages/6e/6c/a76329897a7cae4937d403e623aa6aaea616a0bb5b36588f0b9d1c9a3739/scipy-1.16.1-cp314-cp314t-win_amd64.whl", hash = "sha256:c0c804d60492a0aad7f5b2bb1862f4548b990049e27e828391ff2bf6f7199998", size = 39427705, upload_time = "2025-07-27T16:31:53.96Z" }, ] [[package]] name = "shellingham" version = "1.5.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310 } +sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310, upload_time = "2023-10-24T04:13:40.426Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755 }, + { url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755, upload_time = "2023-10-24T04:13:38.866Z" }, ] [[package]] name = "simpleeval" version = "1.0.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ff/6f/15be211749430f52f2c8f0c69158a6fc961c03aac93fa28d44d1a6f5ebc7/simpleeval-1.0.3.tar.gz", hash = "sha256:67bbf246040ac3b57c29cf048657b9cf31d4e7b9d6659684daa08ca8f1e45829", size = 24358 } +sdist = { url = "https://files.pythonhosted.org/packages/ff/6f/15be211749430f52f2c8f0c69158a6fc961c03aac93fa28d44d1a6f5ebc7/simpleeval-1.0.3.tar.gz", hash = "sha256:67bbf246040ac3b57c29cf048657b9cf31d4e7b9d6659684daa08ca8f1e45829", size = 24358, upload_time = "2024-11-02T10:29:46.912Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/e9/e58082fbb8cecbb6fb4133033c40cc50c248b1a331582be3a0f39138d65b/simpleeval-1.0.3-py3-none-any.whl", hash = "sha256:e3bdbb8c82c26297c9a153902d0fd1858a6c3774bf53ff4f134788c3f2035c38", size = 15762 }, + { url = "https://files.pythonhosted.org/packages/a0/e9/e58082fbb8cecbb6fb4133033c40cc50c248b1a331582be3a0f39138d65b/simpleeval-1.0.3-py3-none-any.whl", hash = "sha256:e3bdbb8c82c26297c9a153902d0fd1858a6c3774bf53ff4f134788c3f2035c38", size = 15762, upload_time = "2024-11-02T10:29:45.706Z" }, ] [[package]] name = "six" version = "1.17.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031 } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload_time = "2024-12-04T17:35:28.174Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050 }, + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload_time = "2024-12-04T17:35:26.475Z" }, ] [[package]] name = "smmap" version = "5.0.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/44/cd/a040c4b3119bbe532e5b0732286f805445375489fceaec1f48306068ee3b/smmap-5.0.2.tar.gz", hash = "sha256:26ea65a03958fa0c8a1c7e8c7a58fdc77221b8910f6be2131affade476898ad5", size = 22329 } +sdist = { url = "https://files.pythonhosted.org/packages/44/cd/a040c4b3119bbe532e5b0732286f805445375489fceaec1f48306068ee3b/smmap-5.0.2.tar.gz", hash = "sha256:26ea65a03958fa0c8a1c7e8c7a58fdc77221b8910f6be2131affade476898ad5", size = 22329, upload_time = "2025-01-02T07:14:40.909Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-py3-none-any.whl", hash = "sha256:b30115f0def7d7531d22a0fb6502488d879e75b260a9db4d0819cfb25403af5e", size = 24303 }, + { url = "https://files.pythonhosted.org/packages/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-py3-none-any.whl", hash = "sha256:b30115f0def7d7531d22a0fb6502488d879e75b260a9db4d0819cfb25403af5e", size = 24303, upload_time = "2025-01-02T07:14:38.724Z" }, ] [[package]] name = "soupsieve" version = "2.7" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/3f/f4/4a80cd6ef364b2e8b65b15816a843c0980f7a5a2b4dc701fc574952aa19f/soupsieve-2.7.tar.gz", hash = "sha256:ad282f9b6926286d2ead4750552c8a6142bc4c783fd66b0293547c8fe6ae126a", size = 103418 } +sdist = { url = "https://files.pythonhosted.org/packages/3f/f4/4a80cd6ef364b2e8b65b15816a843c0980f7a5a2b4dc701fc574952aa19f/soupsieve-2.7.tar.gz", hash = "sha256:ad282f9b6926286d2ead4750552c8a6142bc4c783fd66b0293547c8fe6ae126a", size = 103418, upload_time = "2025-04-20T18:50:08.518Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/9c/0e6afc12c269578be5c0c1c9f4b49a8d32770a080260c333ac04cc1c832d/soupsieve-2.7-py3-none-any.whl", hash = "sha256:6e60cc5c1ffaf1cebcc12e8188320b72071e922c2e897f737cadce79ad5d30c4", size = 36677 }, + { url = "https://files.pythonhosted.org/packages/e7/9c/0e6afc12c269578be5c0c1c9f4b49a8d32770a080260c333ac04cc1c832d/soupsieve-2.7-py3-none-any.whl", hash = "sha256:6e60cc5c1ffaf1cebcc12e8188320b72071e922c2e897f737cadce79ad5d30c4", size = 36677, upload_time = "2025-04-20T18:50:07.196Z" }, ] [[package]] @@ -2021,18 +2718,18 @@ dependencies = [ { name = "executing" }, { name = "pure-eval" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/28/e3/55dcc2cfbc3ca9c29519eb6884dd1415ecb53b0e934862d3559ddcb7e20b/stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9", size = 44707 } +sdist = { url = "https://files.pythonhosted.org/packages/28/e3/55dcc2cfbc3ca9c29519eb6884dd1415ecb53b0e934862d3559ddcb7e20b/stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9", size = 44707, upload_time = "2023-09-30T13:58:05.479Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521 }, + { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521, upload_time = "2023-09-30T13:58:03.53Z" }, ] [[package]] name = "structlog" version = "25.4.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/79/b9/6e672db4fec07349e7a8a8172c1a6ae235c58679ca29c3f86a61b5e59ff3/structlog-25.4.0.tar.gz", hash = "sha256:186cd1b0a8ae762e29417095664adf1d6a31702160a46dacb7796ea82f7409e4", size = 1369138 } +sdist = { url = "https://files.pythonhosted.org/packages/79/b9/6e672db4fec07349e7a8a8172c1a6ae235c58679ca29c3f86a61b5e59ff3/structlog-25.4.0.tar.gz", hash = "sha256:186cd1b0a8ae762e29417095664adf1d6a31702160a46dacb7796ea82f7409e4", size = 1369138, upload_time = "2025-06-02T08:21:12.971Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/4a/97ee6973e3a73c74c8120d59829c3861ea52210667ec3e7a16045c62b64d/structlog-25.4.0-py3-none-any.whl", hash = "sha256:fe809ff5c27e557d14e613f45ca441aabda051d119ee5a0102aaba6ce40eed2c", size = 68720 }, + { url = "https://files.pythonhosted.org/packages/a0/4a/97ee6973e3a73c74c8120d59829c3861ea52210667ec3e7a16045c62b64d/structlog-25.4.0-py3-none-any.whl", hash = "sha256:fe809ff5c27e557d14e613f45ca441aabda051d119ee5a0102aaba6ce40eed2c", size = 68720, upload_time = "2025-06-02T08:21:11.43Z" }, ] [[package]] @@ -2044,18 +2741,18 @@ dependencies = [ { name = "pyyaml" }, { name = "xlsxwriter" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/23/2d/5b5c0127e959a715c5365b3b491846fba5bc1fb7f94370cc3a4fb3f51f68/tableschema-to-template-0.0.13.tar.gz", hash = "sha256:2d8d2250efb840e0ecb9012c5e879a82ef68f65dd86bdff574200fdfc978ff1c", size = 13564 } +sdist = { url = "https://files.pythonhosted.org/packages/23/2d/5b5c0127e959a715c5365b3b491846fba5bc1fb7f94370cc3a4fb3f51f68/tableschema-to-template-0.0.13.tar.gz", hash = "sha256:2d8d2250efb840e0ecb9012c5e879a82ef68f65dd86bdff574200fdfc978ff1c", size = 13564, upload_time = "2023-02-01T21:53:17.238Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9f/7f/3c129377d9b815c0bb92b8c24bbecabe5e6b13b831f38924f80d2e5b40b2/tableschema_to_template-0.0.13-py3-none-any.whl", hash = "sha256:4905500a4235740654230c3223629d26fdccb7a0457ec1d0110ea102c4f1146c", size = 14860 }, + { url = "https://files.pythonhosted.org/packages/9f/7f/3c129377d9b815c0bb92b8c24bbecabe5e6b13b831f38924f80d2e5b40b2/tableschema_to_template-0.0.13-py3-none-any.whl", hash = "sha256:4905500a4235740654230c3223629d26fdccb7a0457ec1d0110ea102c4f1146c", size = 14860, upload_time = "2023-02-01T21:53:16.02Z" }, ] [[package]] name = "tabulate" version = "0.9.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ec/fe/802052aecb21e3797b8f7902564ab6ea0d60ff8ca23952079064155d1ae1/tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c", size = 81090 } +sdist = { url = "https://files.pythonhosted.org/packages/ec/fe/802052aecb21e3797b8f7902564ab6ea0d60ff8ca23952079064155d1ae1/tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c", size = 81090, upload_time = "2022-10-06T17:21:48.54Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/40/44/4a5f08c96eb108af5cb50b41f76142f0afa346dfa99d5296fe7202a11854/tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f", size = 35252 }, + { url = "https://files.pythonhosted.org/packages/40/44/4a5f08c96eb108af5cb50b41f76142f0afa346dfa99d5296fe7202a11854/tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f", size = 35252, upload_time = "2022-10-06T17:21:44.262Z" }, ] [[package]] @@ -2084,13 +2781,26 @@ dev = [ { name = "technologydata" }, ] docs = [ + { name = "cairosvg" }, + { name = "gurobipy" }, + { name = "mkdocs-argref-plugin" }, { name = "mkdocs-autolinks-plugin" }, + { name = "mkdocs-ezlinks-plugin" }, + { name = "mkdocs-git-committers-plugin" }, { name = "mkdocs-git-revision-date-localized-plugin" }, + { name = "mkdocs-jupyter" }, { name = "mkdocs-material" }, { name = "mkdocs-minify-plugin" }, { name = "mkdocs-open-in-new-tab" }, + { name = "mkdocs-redirects" }, + { name = "mkdocs-table-reader-plugin" }, + { name = "mkdocs-video" }, { name = "mkdocstrings" }, { name = "mkdocstrings-python" }, + { name = "openpyxl" }, + { name = "pillow" }, + { name = "python-calamine" }, + { name = "tsam" }, ] [package.metadata] @@ -2117,68 +2827,132 @@ dev = [ { name = "technologydata", editable = "." }, ] docs = [ + { name = "cairosvg", specifier = ">=2.8.2" }, + { name = "gurobipy", specifier = ">=12.0.3" }, + { name = "mkdocs-argref-plugin", specifier = ">=0.5.0" }, { name = "mkdocs-autolinks-plugin", specifier = ">=0.7.1" }, + { name = "mkdocs-ezlinks-plugin", specifier = ">=0.1.14" }, + { name = "mkdocs-git-committers-plugin", specifier = ">=0.2.3" }, { name = "mkdocs-git-revision-date-localized-plugin", specifier = ">=1.4.7" }, + { name = "mkdocs-jupyter", specifier = ">=0.25.1" }, { name = "mkdocs-material", specifier = ">=9.6.14" }, { name = "mkdocs-minify-plugin", specifier = ">=0.8.0" }, { name = "mkdocs-open-in-new-tab", specifier = ">=1.0.8" }, + { name = "mkdocs-redirects", specifier = ">=1.2.2" }, + { name = "mkdocs-table-reader-plugin", specifier = ">=3.1.0" }, + { name = "mkdocs-video", specifier = ">=1.5.0" }, { name = "mkdocstrings", specifier = ">=0.29.1" }, { name = "mkdocstrings-python", specifier = ">=1.16.11" }, + { name = "openpyxl", specifier = ">=3.1.5" }, + { name = "pillow", specifier = ">=11.3.0" }, + { name = "python-calamine", specifier = ">=0.4.0" }, + { name = "tsam", specifier = ">=2.3.9" }, ] [[package]] name = "tenacity" version = "9.1.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0a/d4/2b0cd0fe285e14b36db076e78c93766ff1d529d70408bd1d2a5a84f1d929/tenacity-9.1.2.tar.gz", hash = "sha256:1169d376c297e7de388d18b4481760d478b0e99a777cad3a9c86e556f4b697cb", size = 48036 } +sdist = { url = "https://files.pythonhosted.org/packages/0a/d4/2b0cd0fe285e14b36db076e78c93766ff1d529d70408bd1d2a5a84f1d929/tenacity-9.1.2.tar.gz", hash = "sha256:1169d376c297e7de388d18b4481760d478b0e99a777cad3a9c86e556f4b697cb", size = 48036, upload_time = "2025-04-02T08:25:09.966Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e5/30/643397144bfbfec6f6ef821f36f33e57d35946c44a2352d3c9f0ae847619/tenacity-9.1.2-py3-none-any.whl", hash = "sha256:f77bf36710d8b73a50b2dd155c97b870017ad21afe6ab300326b0371b3b05138", size = 28248 }, + { url = "https://files.pythonhosted.org/packages/e5/30/643397144bfbfec6f6ef821f36f33e57d35946c44a2352d3c9f0ae847619/tenacity-9.1.2-py3-none-any.whl", hash = "sha256:f77bf36710d8b73a50b2dd155c97b870017ad21afe6ab300326b0371b3b05138", size = 28248, upload_time = "2025-04-02T08:25:07.678Z" }, ] [[package]] name = "text-unidecode" version = "1.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ab/e2/e9a00f0ccb71718418230718b3d900e71a5d16e701a3dae079a21e9cd8f8/text-unidecode-1.3.tar.gz", hash = "sha256:bad6603bb14d279193107714b288be206cac565dfa49aa5b105294dd5c4aab93", size = 76885 } +sdist = { url = "https://files.pythonhosted.org/packages/ab/e2/e9a00f0ccb71718418230718b3d900e71a5d16e701a3dae079a21e9cd8f8/text-unidecode-1.3.tar.gz", hash = "sha256:bad6603bb14d279193107714b288be206cac565dfa49aa5b105294dd5c4aab93", size = 76885, upload_time = "2019-08-30T21:36:45.405Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a6/a5/c0b6468d3824fe3fde30dbb5e1f687b291608f9473681bbf7dabbf5a87d7/text_unidecode-1.3-py2.py3-none-any.whl", hash = "sha256:1311f10e8b895935241623731c2ba64f4c455287888b18189350b67134a822e8", size = 78154 }, + { url = "https://files.pythonhosted.org/packages/a6/a5/c0b6468d3824fe3fde30dbb5e1f687b291608f9473681bbf7dabbf5a87d7/text_unidecode-1.3-py2.py3-none-any.whl", hash = "sha256:1311f10e8b895935241623731c2ba64f4c455287888b18189350b67134a822e8", size = 78154, upload_time = "2019-08-30T21:37:03.543Z" }, +] + +[[package]] +name = "threadpoolctl" +version = "3.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b7/4d/08c89e34946fce2aec4fbb45c9016efd5f4d7f24af8e5d93296e935631d8/threadpoolctl-3.6.0.tar.gz", hash = "sha256:8ab8b4aa3491d812b623328249fab5302a68d2d71745c8a4c719a2fcaba9f44e", size = 21274, upload_time = "2025-03-13T13:49:23.031Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl", hash = "sha256:43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb", size = 18638, upload_time = "2025-03-13T13:49:21.846Z" }, +] + +[[package]] +name = "tinycss2" +version = "1.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "webencodings" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7a/fd/7a5ee21fd08ff70d3d33a5781c255cbe779659bd03278feb98b19ee550f4/tinycss2-1.4.0.tar.gz", hash = "sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7", size = 87085, upload_time = "2024-10-24T14:58:29.895Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e6/34/ebdc18bae6aa14fbee1a08b63c015c72b64868ff7dae68808ab500c492e2/tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289", size = 26610, upload_time = "2024-10-24T14:58:28.029Z" }, ] [[package]] name = "tomlkit" version = "0.13.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/cc/18/0bbf3884e9eaa38819ebe46a7bd25dcd56b67434402b66a58c4b8e552575/tomlkit-0.13.3.tar.gz", hash = "sha256:430cf247ee57df2b94ee3fbe588e71d362a941ebb545dec29b53961d61add2a1", size = 185207 } +sdist = { url = "https://files.pythonhosted.org/packages/cc/18/0bbf3884e9eaa38819ebe46a7bd25dcd56b67434402b66a58c4b8e552575/tomlkit-0.13.3.tar.gz", hash = "sha256:430cf247ee57df2b94ee3fbe588e71d362a941ebb545dec29b53961d61add2a1", size = 185207, upload_time = "2025-06-05T07:13:44.947Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/bd/75/8539d011f6be8e29f339c42e633aae3cb73bffa95dd0f9adec09b9c58e85/tomlkit-0.13.3-py3-none-any.whl", hash = "sha256:c89c649d79ee40629a9fda55f8ace8c6a1b42deb912b2a8fd8d942ddadb606b0", size = 38901 }, + { url = "https://files.pythonhosted.org/packages/bd/75/8539d011f6be8e29f339c42e633aae3cb73bffa95dd0f9adec09b9c58e85/tomlkit-0.13.3-py3-none-any.whl", hash = "sha256:c89c649d79ee40629a9fda55f8ace8c6a1b42deb912b2a8fd8d942ddadb606b0", size = 38901, upload_time = "2025-06-05T07:13:43.546Z" }, ] [[package]] name = "tornado" version = "6.5.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/51/89/c72771c81d25d53fe33e3dca61c233b665b2780f21820ba6fd2c6793c12b/tornado-6.5.1.tar.gz", hash = "sha256:84ceece391e8eb9b2b95578db65e920d2a61070260594819589609ba9bc6308c", size = 509934 } +sdist = { url = "https://files.pythonhosted.org/packages/51/89/c72771c81d25d53fe33e3dca61c233b665b2780f21820ba6fd2c6793c12b/tornado-6.5.1.tar.gz", hash = "sha256:84ceece391e8eb9b2b95578db65e920d2a61070260594819589609ba9bc6308c", size = 509934, upload_time = "2025-05-22T18:15:38.788Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/77/89/f4532dee6843c9e0ebc4e28d4be04c67f54f60813e4bf73d595fe7567452/tornado-6.5.1-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:d50065ba7fd11d3bd41bcad0825227cc9a95154bad83239357094c36708001f7", size = 441948 }, - { url = "https://files.pythonhosted.org/packages/15/9a/557406b62cffa395d18772e0cdcf03bed2fff03b374677348eef9f6a3792/tornado-6.5.1-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:9e9ca370f717997cb85606d074b0e5b247282cf5e2e1611568b8821afe0342d6", size = 440112 }, - { url = "https://files.pythonhosted.org/packages/55/82/7721b7319013a3cf881f4dffa4f60ceff07b31b394e459984e7a36dc99ec/tornado-6.5.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b77e9dfa7ed69754a54c89d82ef746398be82f749df69c4d3abe75c4d1ff4888", size = 443672 }, - { url = "https://files.pythonhosted.org/packages/7d/42/d11c4376e7d101171b94e03cef0cbce43e823ed6567ceda571f54cf6e3ce/tornado-6.5.1-cp39-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:253b76040ee3bab8bcf7ba9feb136436a3787208717a1fb9f2c16b744fba7331", size = 443019 }, - { url = "https://files.pythonhosted.org/packages/7d/f7/0c48ba992d875521ac761e6e04b0a1750f8150ae42ea26df1852d6a98942/tornado-6.5.1-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:308473f4cc5a76227157cdf904de33ac268af770b2c5f05ca6c1161d82fdd95e", size = 443252 }, - { url = "https://files.pythonhosted.org/packages/89/46/d8d7413d11987e316df4ad42e16023cd62666a3c0dfa1518ffa30b8df06c/tornado-6.5.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:caec6314ce8a81cf69bd89909f4b633b9f523834dc1a352021775d45e51d9401", size = 443930 }, - { url = "https://files.pythonhosted.org/packages/78/b2/f8049221c96a06df89bed68260e8ca94beca5ea532ffc63b1175ad31f9cc/tornado-6.5.1-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:13ce6e3396c24e2808774741331638ee6c2f50b114b97a55c5b442df65fd9692", size = 443351 }, - { url = "https://files.pythonhosted.org/packages/76/ff/6a0079e65b326cc222a54720a748e04a4db246870c4da54ece4577bfa702/tornado-6.5.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:5cae6145f4cdf5ab24744526cc0f55a17d76f02c98f4cff9daa08ae9a217448a", size = 443328 }, - { url = "https://files.pythonhosted.org/packages/49/18/e3f902a1d21f14035b5bc6246a8c0f51e0eef562ace3a2cea403c1fb7021/tornado-6.5.1-cp39-abi3-win32.whl", hash = "sha256:e0a36e1bc684dca10b1aa75a31df8bdfed656831489bc1e6a6ebed05dc1ec365", size = 444396 }, - { url = "https://files.pythonhosted.org/packages/7b/09/6526e32bf1049ee7de3bebba81572673b19a2a8541f795d887e92af1a8bc/tornado-6.5.1-cp39-abi3-win_amd64.whl", hash = "sha256:908e7d64567cecd4c2b458075589a775063453aeb1d2a1853eedb806922f568b", size = 444840 }, - { url = "https://files.pythonhosted.org/packages/55/a7/535c44c7bea4578e48281d83c615219f3ab19e6abc67625ef637c73987be/tornado-6.5.1-cp39-abi3-win_arm64.whl", hash = "sha256:02420a0eb7bf617257b9935e2b754d1b63897525d8a289c9d65690d580b4dcf7", size = 443596 }, + { url = "https://files.pythonhosted.org/packages/77/89/f4532dee6843c9e0ebc4e28d4be04c67f54f60813e4bf73d595fe7567452/tornado-6.5.1-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:d50065ba7fd11d3bd41bcad0825227cc9a95154bad83239357094c36708001f7", size = 441948, upload_time = "2025-05-22T18:15:20.862Z" }, + { url = "https://files.pythonhosted.org/packages/15/9a/557406b62cffa395d18772e0cdcf03bed2fff03b374677348eef9f6a3792/tornado-6.5.1-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:9e9ca370f717997cb85606d074b0e5b247282cf5e2e1611568b8821afe0342d6", size = 440112, upload_time = "2025-05-22T18:15:22.591Z" }, + { url = "https://files.pythonhosted.org/packages/55/82/7721b7319013a3cf881f4dffa4f60ceff07b31b394e459984e7a36dc99ec/tornado-6.5.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b77e9dfa7ed69754a54c89d82ef746398be82f749df69c4d3abe75c4d1ff4888", size = 443672, upload_time = "2025-05-22T18:15:24.027Z" }, + { url = "https://files.pythonhosted.org/packages/7d/42/d11c4376e7d101171b94e03cef0cbce43e823ed6567ceda571f54cf6e3ce/tornado-6.5.1-cp39-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:253b76040ee3bab8bcf7ba9feb136436a3787208717a1fb9f2c16b744fba7331", size = 443019, upload_time = "2025-05-22T18:15:25.735Z" }, + { url = "https://files.pythonhosted.org/packages/7d/f7/0c48ba992d875521ac761e6e04b0a1750f8150ae42ea26df1852d6a98942/tornado-6.5.1-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:308473f4cc5a76227157cdf904de33ac268af770b2c5f05ca6c1161d82fdd95e", size = 443252, upload_time = "2025-05-22T18:15:27.499Z" }, + { url = "https://files.pythonhosted.org/packages/89/46/d8d7413d11987e316df4ad42e16023cd62666a3c0dfa1518ffa30b8df06c/tornado-6.5.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:caec6314ce8a81cf69bd89909f4b633b9f523834dc1a352021775d45e51d9401", size = 443930, upload_time = "2025-05-22T18:15:29.299Z" }, + { url = "https://files.pythonhosted.org/packages/78/b2/f8049221c96a06df89bed68260e8ca94beca5ea532ffc63b1175ad31f9cc/tornado-6.5.1-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:13ce6e3396c24e2808774741331638ee6c2f50b114b97a55c5b442df65fd9692", size = 443351, upload_time = "2025-05-22T18:15:31.038Z" }, + { url = "https://files.pythonhosted.org/packages/76/ff/6a0079e65b326cc222a54720a748e04a4db246870c4da54ece4577bfa702/tornado-6.5.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:5cae6145f4cdf5ab24744526cc0f55a17d76f02c98f4cff9daa08ae9a217448a", size = 443328, upload_time = "2025-05-22T18:15:32.426Z" }, + { url = "https://files.pythonhosted.org/packages/49/18/e3f902a1d21f14035b5bc6246a8c0f51e0eef562ace3a2cea403c1fb7021/tornado-6.5.1-cp39-abi3-win32.whl", hash = "sha256:e0a36e1bc684dca10b1aa75a31df8bdfed656831489bc1e6a6ebed05dc1ec365", size = 444396, upload_time = "2025-05-22T18:15:34.205Z" }, + { url = "https://files.pythonhosted.org/packages/7b/09/6526e32bf1049ee7de3bebba81572673b19a2a8541f795d887e92af1a8bc/tornado-6.5.1-cp39-abi3-win_amd64.whl", hash = "sha256:908e7d64567cecd4c2b458075589a775063453aeb1d2a1853eedb806922f568b", size = 444840, upload_time = "2025-05-22T18:15:36.1Z" }, + { url = "https://files.pythonhosted.org/packages/55/a7/535c44c7bea4578e48281d83c615219f3ab19e6abc67625ef637c73987be/tornado-6.5.1-cp39-abi3-win_arm64.whl", hash = "sha256:02420a0eb7bf617257b9935e2b754d1b63897525d8a289c9d65690d580b4dcf7", size = 443596, upload_time = "2025-05-22T18:15:37.433Z" }, +] + +[[package]] +name = "tqdm" +version = "4.67.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a8/4b/29b4ef32e036bb34e4ab51796dd745cdba7ed47ad142a9f4a1eb8e0c744d/tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2", size = 169737, upload_time = "2024-11-24T20:12:22.481Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2", size = 78540, upload_time = "2024-11-24T20:12:19.698Z" }, ] [[package]] name = "traitlets" version = "5.14.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/eb/79/72064e6a701c2183016abbbfedaba506d81e30e232a68c9f0d6f6fcd1574/traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7", size = 161621 } +sdist = { url = "https://files.pythonhosted.org/packages/eb/79/72064e6a701c2183016abbbfedaba506d81e30e232a68c9f0d6f6fcd1574/traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7", size = 161621, upload_time = "2024-04-19T11:11:49.746Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359 }, + { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359, upload_time = "2024-04-19T11:11:46.763Z" }, +] + +[[package]] +name = "tsam" +version = "2.3.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "highspy" }, + { name = "networkx" }, + { name = "numpy" }, + { name = "pandas" }, + { name = "pyomo" }, + { name = "scikit-learn" }, + { name = "tqdm" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e7/67/c69f8c46fd46e01480ca10280ab612253255a729a850e2d61fdf0ea08258/tsam-2.3.9.tar.gz", hash = "sha256:1f219eef05788d199af1ff61bd5a3d9217a26f9279988b1ef4b7d5af2757ed15", size = 223755, upload_time = "2025-06-16T07:30:03.015Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/44/e7/5c072b990bddccc4a78a186d641e50257993c50658cddc0d4bf300acd1e1/tsam-2.3.9-py3-none-any.whl", hash = "sha256:edcc4febb9e1dacc028bc819d710974ede8f563467c3d235a250f46416f93a1b", size = 36816, upload_time = "2025-06-16T07:30:01.562Z" }, ] [[package]] @@ -2191,18 +2965,18 @@ dependencies = [ { name = "shellingham" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c5/8c/7d682431efca5fd290017663ea4588bf6f2c6aad085c7f108c5dbc316e70/typer-0.16.0.tar.gz", hash = "sha256:af377ffaee1dbe37ae9440cb4e8f11686ea5ce4e9bae01b84ae7c63b87f1dd3b", size = 102625 } +sdist = { url = "https://files.pythonhosted.org/packages/c5/8c/7d682431efca5fd290017663ea4588bf6f2c6aad085c7f108c5dbc316e70/typer-0.16.0.tar.gz", hash = "sha256:af377ffaee1dbe37ae9440cb4e8f11686ea5ce4e9bae01b84ae7c63b87f1dd3b", size = 102625, upload_time = "2025-05-26T14:30:31.824Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/76/42/3efaf858001d2c2913de7f354563e3a3a2f0decae3efe98427125a8f441e/typer-0.16.0-py3-none-any.whl", hash = "sha256:1f79bed11d4d02d4310e3c1b7ba594183bcedb0ac73b27a9e5f28f6fb5b98855", size = 46317 }, + { url = "https://files.pythonhosted.org/packages/76/42/3efaf858001d2c2913de7f354563e3a3a2f0decae3efe98427125a8f441e/typer-0.16.0-py3-none-any.whl", hash = "sha256:1f79bed11d4d02d4310e3c1b7ba594183bcedb0ac73b27a9e5f28f6fb5b98855", size = 46317, upload_time = "2025-05-26T14:30:30.523Z" }, ] [[package]] name = "typing-extensions" version = "4.14.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/98/5a/da40306b885cc8c09109dc2e1abd358d5684b1425678151cdaed4731c822/typing_extensions-4.14.1.tar.gz", hash = "sha256:38b39f4aeeab64884ce9f74c94263ef78f3c22467c8724005483154c26648d36", size = 107673 } +sdist = { url = "https://files.pythonhosted.org/packages/98/5a/da40306b885cc8c09109dc2e1abd358d5684b1425678151cdaed4731c822/typing_extensions-4.14.1.tar.gz", hash = "sha256:38b39f4aeeab64884ce9f74c94263ef78f3c22467c8724005483154c26648d36", size = 107673, upload_time = "2025-07-04T13:28:34.16Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b5/00/d631e67a838026495268c2f6884f3711a15a9a2a96cd244fdaea53b823fb/typing_extensions-4.14.1-py3-none-any.whl", hash = "sha256:d1e1e3b58374dc93031d6eda2420a48ea44a36c2b4766a4fdeb3710755731d76", size = 43906 }, + { url = "https://files.pythonhosted.org/packages/b5/00/d631e67a838026495268c2f6884f3711a15a9a2a96cd244fdaea53b823fb/typing_extensions-4.14.1-py3-none-any.whl", hash = "sha256:d1e1e3b58374dc93031d6eda2420a48ea44a36c2b4766a4fdeb3710755731d76", size = 43906, upload_time = "2025-07-04T13:28:32.743Z" }, ] [[package]] @@ -2212,45 +2986,45 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f8/b1/0c11f5058406b3af7609f121aaa6b609744687f1d158b3c3a5bf4cc94238/typing_inspection-0.4.1.tar.gz", hash = "sha256:6ae134cc0203c33377d43188d4064e9b357dba58cff3185f22924610e70a9d28", size = 75726 } +sdist = { url = "https://files.pythonhosted.org/packages/f8/b1/0c11f5058406b3af7609f121aaa6b609744687f1d158b3c3a5bf4cc94238/typing_inspection-0.4.1.tar.gz", hash = "sha256:6ae134cc0203c33377d43188d4064e9b357dba58cff3185f22924610e70a9d28", size = 75726, upload_time = "2025-05-21T18:55:23.885Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/17/69/cd203477f944c353c31bade965f880aa1061fd6bf05ded0726ca845b6ff7/typing_inspection-0.4.1-py3-none-any.whl", hash = "sha256:389055682238f53b04f7badcb49b989835495a96700ced5dab2d8feae4b26f51", size = 14552 }, + { url = "https://files.pythonhosted.org/packages/17/69/cd203477f944c353c31bade965f880aa1061fd6bf05ded0726ca845b6ff7/typing_inspection-0.4.1-py3-none-any.whl", hash = "sha256:389055682238f53b04f7badcb49b989835495a96700ced5dab2d8feae4b26f51", size = 14552, upload_time = "2025-05-21T18:55:22.152Z" }, ] [[package]] name = "tzdata" version = "2025.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/95/32/1a225d6164441be760d75c2c42e2780dc0873fe382da3e98a2e1e48361e5/tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9", size = 196380 } +sdist = { url = "https://files.pythonhosted.org/packages/95/32/1a225d6164441be760d75c2c42e2780dc0873fe382da3e98a2e1e48361e5/tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9", size = 196380, upload_time = "2025-03-23T13:54:43.652Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8", size = 347839 }, + { url = "https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8", size = 347839, upload_time = "2025-03-23T13:54:41.845Z" }, ] [[package]] name = "unidecode" version = "1.4.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/94/7d/a8a765761bbc0c836e397a2e48d498305a865b70a8600fd7a942e85dcf63/Unidecode-1.4.0.tar.gz", hash = "sha256:ce35985008338b676573023acc382d62c264f307c8f7963733405add37ea2b23", size = 200149 } +sdist = { url = "https://files.pythonhosted.org/packages/94/7d/a8a765761bbc0c836e397a2e48d498305a865b70a8600fd7a942e85dcf63/Unidecode-1.4.0.tar.gz", hash = "sha256:ce35985008338b676573023acc382d62c264f307c8f7963733405add37ea2b23", size = 200149, upload_time = "2025-04-24T08:45:03.798Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/8f/b7/559f59d57d18b44c6d1250d2eeaa676e028b9c527431f5d0736478a73ba1/Unidecode-1.4.0-py3-none-any.whl", hash = "sha256:c3c7606c27503ad8d501270406e345ddb480a7b5f38827eafe4fa82a137f0021", size = 235837 }, + { url = "https://files.pythonhosted.org/packages/8f/b7/559f59d57d18b44c6d1250d2eeaa676e028b9c527431f5d0736478a73ba1/Unidecode-1.4.0-py3-none-any.whl", hash = "sha256:c3c7606c27503ad8d501270406e345ddb480a7b5f38827eafe4fa82a137f0021", size = 235837, upload_time = "2025-04-24T08:45:01.609Z" }, ] [[package]] name = "urllib3" version = "2.5.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/15/22/9ee70a2574a4f4599c47dd506532914ce044817c7752a79b6a51286319bc/urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760", size = 393185 } +sdist = { url = "https://files.pythonhosted.org/packages/15/22/9ee70a2574a4f4599c47dd506532914ce044817c7752a79b6a51286319bc/urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760", size = 393185, upload_time = "2025-06-18T14:07:41.644Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795 }, + { url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795, upload_time = "2025-06-18T14:07:40.39Z" }, ] [[package]] name = "validators" version = "0.35.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/53/66/a435d9ae49850b2f071f7ebd8119dd4e84872b01630d6736761e6e7fd847/validators-0.35.0.tar.gz", hash = "sha256:992d6c48a4e77c81f1b4daba10d16c3a9bb0dbb79b3a19ea847ff0928e70497a", size = 73399 } +sdist = { url = "https://files.pythonhosted.org/packages/53/66/a435d9ae49850b2f071f7ebd8119dd4e84872b01630d6736761e6e7fd847/validators-0.35.0.tar.gz", hash = "sha256:992d6c48a4e77c81f1b4daba10d16c3a9bb0dbb79b3a19ea847ff0928e70497a", size = 73399, upload_time = "2025-05-01T05:42:06.7Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fa/6e/3e955517e22cbdd565f2f8b2e73d52528b14b8bcfdb04f62466b071de847/validators-0.35.0-py3-none-any.whl", hash = "sha256:e8c947097eae7892cb3d26868d637f79f47b4a0554bc6b80065dfe5aac3705dd", size = 44712 }, + { url = "https://files.pythonhosted.org/packages/fa/6e/3e955517e22cbdd565f2f8b2e73d52528b14b8bcfdb04f62466b071de847/validators-0.35.0-py3-none-any.whl", hash = "sha256:e8c947097eae7892cb3d26868d637f79f47b4a0554bc6b80065dfe5aac3705dd", size = 44712, upload_time = "2025-05-01T05:42:04.203Z" }, ] [[package]] @@ -2262,33 +3036,33 @@ dependencies = [ { name = "filelock" }, { name = "platformdirs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/56/2c/444f465fb2c65f40c3a104fd0c495184c4f2336d65baf398e3c75d72ea94/virtualenv-20.31.2.tar.gz", hash = "sha256:e10c0a9d02835e592521be48b332b6caee6887f332c111aa79a09b9e79efc2af", size = 6076316 } +sdist = { url = "https://files.pythonhosted.org/packages/56/2c/444f465fb2c65f40c3a104fd0c495184c4f2336d65baf398e3c75d72ea94/virtualenv-20.31.2.tar.gz", hash = "sha256:e10c0a9d02835e592521be48b332b6caee6887f332c111aa79a09b9e79efc2af", size = 6076316, upload_time = "2025-05-08T17:58:23.811Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f3/40/b1c265d4b2b62b58576588510fc4d1fe60a86319c8de99fd8e9fec617d2c/virtualenv-20.31.2-py3-none-any.whl", hash = "sha256:36efd0d9650ee985f0cad72065001e66d49a6f24eb44d98980f630686243cf11", size = 6057982 }, + { url = "https://files.pythonhosted.org/packages/f3/40/b1c265d4b2b62b58576588510fc4d1fe60a86319c8de99fd8e9fec617d2c/virtualenv-20.31.2-py3-none-any.whl", hash = "sha256:36efd0d9650ee985f0cad72065001e66d49a6f24eb44d98980f630686243cf11", size = 6057982, upload_time = "2025-05-08T17:58:21.15Z" }, ] [[package]] name = "watchdog" version = "6.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/db/7d/7f3d619e951c88ed75c6037b246ddcf2d322812ee8ea189be89511721d54/watchdog-6.0.0.tar.gz", hash = "sha256:9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282", size = 131220 } +sdist = { url = "https://files.pythonhosted.org/packages/db/7d/7f3d619e951c88ed75c6037b246ddcf2d322812ee8ea189be89511721d54/watchdog-6.0.0.tar.gz", hash = "sha256:9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282", size = 131220, upload_time = "2024-11-01T14:07:13.037Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/39/ea/3930d07dafc9e286ed356a679aa02d777c06e9bfd1164fa7c19c288a5483/watchdog-6.0.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:bdd4e6f14b8b18c334febb9c4425a878a2ac20efd1e0b231978e7b150f92a948", size = 96471 }, - { url = "https://files.pythonhosted.org/packages/12/87/48361531f70b1f87928b045df868a9fd4e253d9ae087fa4cf3f7113be363/watchdog-6.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c7c15dda13c4eb00d6fb6fc508b3c0ed88b9d5d374056b239c4ad1611125c860", size = 88449 }, - { url = "https://files.pythonhosted.org/packages/5b/7e/8f322f5e600812e6f9a31b75d242631068ca8f4ef0582dd3ae6e72daecc8/watchdog-6.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6f10cb2d5902447c7d0da897e2c6768bca89174d0c6e1e30abec5421af97a5b0", size = 89054 }, - { url = "https://files.pythonhosted.org/packages/68/98/b0345cabdce2041a01293ba483333582891a3bd5769b08eceb0d406056ef/watchdog-6.0.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:490ab2ef84f11129844c23fb14ecf30ef3d8a6abafd3754a6f75ca1e6654136c", size = 96480 }, - { url = "https://files.pythonhosted.org/packages/85/83/cdf13902c626b28eedef7ec4f10745c52aad8a8fe7eb04ed7b1f111ca20e/watchdog-6.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:76aae96b00ae814b181bb25b1b98076d5fc84e8a53cd8885a318b42b6d3a5134", size = 88451 }, - { url = "https://files.pythonhosted.org/packages/fe/c4/225c87bae08c8b9ec99030cd48ae9c4eca050a59bf5c2255853e18c87b50/watchdog-6.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a175f755fc2279e0b7312c0035d52e27211a5bc39719dd529625b1930917345b", size = 89057 }, - { url = "https://files.pythonhosted.org/packages/a9/c7/ca4bf3e518cb57a686b2feb4f55a1892fd9a3dd13f470fca14e00f80ea36/watchdog-6.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7607498efa04a3542ae3e05e64da8202e58159aa1fa4acddf7678d34a35d4f13", size = 79079 }, - { url = "https://files.pythonhosted.org/packages/5c/51/d46dc9332f9a647593c947b4b88e2381c8dfc0942d15b8edc0310fa4abb1/watchdog-6.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:9041567ee8953024c83343288ccc458fd0a2d811d6a0fd68c4c22609e3490379", size = 79078 }, - { url = "https://files.pythonhosted.org/packages/d4/57/04edbf5e169cd318d5f07b4766fee38e825d64b6913ca157ca32d1a42267/watchdog-6.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:82dc3e3143c7e38ec49d61af98d6558288c415eac98486a5c581726e0737c00e", size = 79076 }, - { url = "https://files.pythonhosted.org/packages/ab/cc/da8422b300e13cb187d2203f20b9253e91058aaf7db65b74142013478e66/watchdog-6.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:212ac9b8bf1161dc91bd09c048048a95ca3a4c4f5e5d4a7d1b1a7d5752a7f96f", size = 79077 }, - { url = "https://files.pythonhosted.org/packages/2c/3b/b8964e04ae1a025c44ba8e4291f86e97fac443bca31de8bd98d3263d2fcf/watchdog-6.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:e3df4cbb9a450c6d49318f6d14f4bbc80d763fa587ba46ec86f99f9e6876bb26", size = 79078 }, - { url = "https://files.pythonhosted.org/packages/62/ae/a696eb424bedff7407801c257d4b1afda455fe40821a2be430e173660e81/watchdog-6.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:2cce7cfc2008eb51feb6aab51251fd79b85d9894e98ba847408f662b3395ca3c", size = 79077 }, - { url = "https://files.pythonhosted.org/packages/b5/e8/dbf020b4d98251a9860752a094d09a65e1b436ad181faf929983f697048f/watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:20ffe5b202af80ab4266dcd3e91aae72bf2da48c0d33bdb15c66658e685e94e2", size = 79078 }, - { url = "https://files.pythonhosted.org/packages/07/f6/d0e5b343768e8bcb4cda79f0f2f55051bf26177ecd5651f84c07567461cf/watchdog-6.0.0-py3-none-win32.whl", hash = "sha256:07df1fdd701c5d4c8e55ef6cf55b8f0120fe1aef7ef39a1c6fc6bc2e606d517a", size = 79065 }, - { url = "https://files.pythonhosted.org/packages/db/d9/c495884c6e548fce18a8f40568ff120bc3a4b7b99813081c8ac0c936fa64/watchdog-6.0.0-py3-none-win_amd64.whl", hash = "sha256:cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680", size = 79070 }, - { url = "https://files.pythonhosted.org/packages/33/e8/e40370e6d74ddba47f002a32919d91310d6074130fe4e17dabcafc15cbf1/watchdog-6.0.0-py3-none-win_ia64.whl", hash = "sha256:a1914259fa9e1454315171103c6a30961236f508b9b623eae470268bbcc6a22f", size = 79067 }, + { url = "https://files.pythonhosted.org/packages/39/ea/3930d07dafc9e286ed356a679aa02d777c06e9bfd1164fa7c19c288a5483/watchdog-6.0.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:bdd4e6f14b8b18c334febb9c4425a878a2ac20efd1e0b231978e7b150f92a948", size = 96471, upload_time = "2024-11-01T14:06:37.745Z" }, + { url = "https://files.pythonhosted.org/packages/12/87/48361531f70b1f87928b045df868a9fd4e253d9ae087fa4cf3f7113be363/watchdog-6.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c7c15dda13c4eb00d6fb6fc508b3c0ed88b9d5d374056b239c4ad1611125c860", size = 88449, upload_time = "2024-11-01T14:06:39.748Z" }, + { url = "https://files.pythonhosted.org/packages/5b/7e/8f322f5e600812e6f9a31b75d242631068ca8f4ef0582dd3ae6e72daecc8/watchdog-6.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6f10cb2d5902447c7d0da897e2c6768bca89174d0c6e1e30abec5421af97a5b0", size = 89054, upload_time = "2024-11-01T14:06:41.009Z" }, + { url = "https://files.pythonhosted.org/packages/68/98/b0345cabdce2041a01293ba483333582891a3bd5769b08eceb0d406056ef/watchdog-6.0.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:490ab2ef84f11129844c23fb14ecf30ef3d8a6abafd3754a6f75ca1e6654136c", size = 96480, upload_time = "2024-11-01T14:06:42.952Z" }, + { url = "https://files.pythonhosted.org/packages/85/83/cdf13902c626b28eedef7ec4f10745c52aad8a8fe7eb04ed7b1f111ca20e/watchdog-6.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:76aae96b00ae814b181bb25b1b98076d5fc84e8a53cd8885a318b42b6d3a5134", size = 88451, upload_time = "2024-11-01T14:06:45.084Z" }, + { url = "https://files.pythonhosted.org/packages/fe/c4/225c87bae08c8b9ec99030cd48ae9c4eca050a59bf5c2255853e18c87b50/watchdog-6.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a175f755fc2279e0b7312c0035d52e27211a5bc39719dd529625b1930917345b", size = 89057, upload_time = "2024-11-01T14:06:47.324Z" }, + { url = "https://files.pythonhosted.org/packages/a9/c7/ca4bf3e518cb57a686b2feb4f55a1892fd9a3dd13f470fca14e00f80ea36/watchdog-6.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7607498efa04a3542ae3e05e64da8202e58159aa1fa4acddf7678d34a35d4f13", size = 79079, upload_time = "2024-11-01T14:06:59.472Z" }, + { url = "https://files.pythonhosted.org/packages/5c/51/d46dc9332f9a647593c947b4b88e2381c8dfc0942d15b8edc0310fa4abb1/watchdog-6.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:9041567ee8953024c83343288ccc458fd0a2d811d6a0fd68c4c22609e3490379", size = 79078, upload_time = "2024-11-01T14:07:01.431Z" }, + { url = "https://files.pythonhosted.org/packages/d4/57/04edbf5e169cd318d5f07b4766fee38e825d64b6913ca157ca32d1a42267/watchdog-6.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:82dc3e3143c7e38ec49d61af98d6558288c415eac98486a5c581726e0737c00e", size = 79076, upload_time = "2024-11-01T14:07:02.568Z" }, + { url = "https://files.pythonhosted.org/packages/ab/cc/da8422b300e13cb187d2203f20b9253e91058aaf7db65b74142013478e66/watchdog-6.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:212ac9b8bf1161dc91bd09c048048a95ca3a4c4f5e5d4a7d1b1a7d5752a7f96f", size = 79077, upload_time = "2024-11-01T14:07:03.893Z" }, + { url = "https://files.pythonhosted.org/packages/2c/3b/b8964e04ae1a025c44ba8e4291f86e97fac443bca31de8bd98d3263d2fcf/watchdog-6.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:e3df4cbb9a450c6d49318f6d14f4bbc80d763fa587ba46ec86f99f9e6876bb26", size = 79078, upload_time = "2024-11-01T14:07:05.189Z" }, + { url = "https://files.pythonhosted.org/packages/62/ae/a696eb424bedff7407801c257d4b1afda455fe40821a2be430e173660e81/watchdog-6.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:2cce7cfc2008eb51feb6aab51251fd79b85d9894e98ba847408f662b3395ca3c", size = 79077, upload_time = "2024-11-01T14:07:06.376Z" }, + { url = "https://files.pythonhosted.org/packages/b5/e8/dbf020b4d98251a9860752a094d09a65e1b436ad181faf929983f697048f/watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:20ffe5b202af80ab4266dcd3e91aae72bf2da48c0d33bdb15c66658e685e94e2", size = 79078, upload_time = "2024-11-01T14:07:07.547Z" }, + { url = "https://files.pythonhosted.org/packages/07/f6/d0e5b343768e8bcb4cda79f0f2f55051bf26177ecd5651f84c07567461cf/watchdog-6.0.0-py3-none-win32.whl", hash = "sha256:07df1fdd701c5d4c8e55ef6cf55b8f0120fe1aef7ef39a1c6fc6bc2e606d517a", size = 79065, upload_time = "2024-11-01T14:07:09.525Z" }, + { url = "https://files.pythonhosted.org/packages/db/d9/c495884c6e548fce18a8f40568ff120bc3a4b7b99813081c8ac0c936fa64/watchdog-6.0.0-py3-none-win_amd64.whl", hash = "sha256:cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680", size = 79070, upload_time = "2024-11-01T14:07:10.686Z" }, + { url = "https://files.pythonhosted.org/packages/33/e8/e40370e6d74ddba47f002a32919d91310d6074130fe4e17dabcafc15cbf1/watchdog-6.0.0-py3-none-win_ia64.whl", hash = "sha256:a1914259fa9e1454315171103c6a30961236f508b9b623eae470268bbcc6a22f", size = 79067, upload_time = "2024-11-01T14:07:11.845Z" }, ] [[package]] @@ -2300,79 +3074,88 @@ dependencies = [ { name = "requests" }, { name = "tabulate" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d7/4a/f55695bd1c9f1996b675b6e9e980eef40ebdb5e4bf8774c059c31af6ade1/wbgapi-1.0.12.tar.gz", hash = "sha256:338c3c768bd120b80596b48fa0449ecabc93513ac989c55671dce579dbb3a5be", size = 33590 } +sdist = { url = "https://files.pythonhosted.org/packages/d7/4a/f55695bd1c9f1996b675b6e9e980eef40ebdb5e4bf8774c059c31af6ade1/wbgapi-1.0.12.tar.gz", hash = "sha256:338c3c768bd120b80596b48fa0449ecabc93513ac989c55671dce579dbb3a5be", size = 33590, upload_time = "2022-07-05T15:07:22.772Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/00/12/224030af4886e119a3d03b709f7130e9601a4d15332e1d6a35671b25a4de/wbgapi-1.0.12-py3-none-any.whl", hash = "sha256:c5a1e1683b03d4264d287627c2562932f30e7f5c65509b812cb2e3de7d32633f", size = 36385 }, + { url = "https://files.pythonhosted.org/packages/00/12/224030af4886e119a3d03b709f7130e9601a4d15332e1d6a35671b25a4de/wbgapi-1.0.12-py3-none-any.whl", hash = "sha256:c5a1e1683b03d4264d287627c2562932f30e7f5c65509b812cb2e3de7d32633f", size = 36385, upload_time = "2022-07-05T15:07:20.606Z" }, ] [[package]] name = "wcwidth" version = "0.2.13" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6c/63/53559446a878410fc5a5974feb13d31d78d752eb18aeba59c7fef1af7598/wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5", size = 101301 } +sdist = { url = "https://files.pythonhosted.org/packages/6c/63/53559446a878410fc5a5974feb13d31d78d752eb18aeba59c7fef1af7598/wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5", size = 101301, upload_time = "2024-01-06T02:10:57.829Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fd/84/fd2ba7aafacbad3c4201d395674fc6348826569da3c0937e75505ead3528/wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859", size = 34166, upload_time = "2024-01-06T02:10:55.763Z" }, +] + +[[package]] +name = "webencodings" +version = "0.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0b/02/ae6ceac1baeda530866a85075641cec12989bd8d31af6d5ab4a3e8c92f47/webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923", size = 9721, upload_time = "2017-04-05T20:21:34.189Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fd/84/fd2ba7aafacbad3c4201d395674fc6348826569da3c0937e75505ead3528/wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859", size = 34166 }, + { url = "https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", size = 11774, upload_time = "2017-04-05T20:21:32.581Z" }, ] [[package]] name = "wheel" version = "0.45.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8a/98/2d9906746cdc6a6ef809ae6338005b3f21bb568bea3165cfc6a243fdc25c/wheel-0.45.1.tar.gz", hash = "sha256:661e1abd9198507b1409a20c02106d9670b2576e916d58f520316666abca6729", size = 107545 } +sdist = { url = "https://files.pythonhosted.org/packages/8a/98/2d9906746cdc6a6ef809ae6338005b3f21bb568bea3165cfc6a243fdc25c/wheel-0.45.1.tar.gz", hash = "sha256:661e1abd9198507b1409a20c02106d9670b2576e916d58f520316666abca6729", size = 107545, upload_time = "2024-11-23T00:18:23.513Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0b/2c/87f3254fd8ffd29e4c02732eee68a83a1d3c346ae39bc6822dcbcb697f2b/wheel-0.45.1-py3-none-any.whl", hash = "sha256:708e7481cc80179af0e556bbf0cc00b8444c7321e2700b8d8580231d13017248", size = 72494 }, + { url = "https://files.pythonhosted.org/packages/0b/2c/87f3254fd8ffd29e4c02732eee68a83a1d3c346ae39bc6822dcbcb697f2b/wheel-0.45.1-py3-none-any.whl", hash = "sha256:708e7481cc80179af0e556bbf0cc00b8444c7321e2700b8d8580231d13017248", size = 72494, upload_time = "2024-11-23T00:18:21.207Z" }, ] [[package]] name = "win32-setctime" version = "1.2.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b3/8f/705086c9d734d3b663af0e9bb3d4de6578d08f46b1b101c2442fd9aecaa2/win32_setctime-1.2.0.tar.gz", hash = "sha256:ae1fdf948f5640aae05c511ade119313fb6a30d7eabe25fef9764dca5873c4c0", size = 4867 } +sdist = { url = "https://files.pythonhosted.org/packages/b3/8f/705086c9d734d3b663af0e9bb3d4de6578d08f46b1b101c2442fd9aecaa2/win32_setctime-1.2.0.tar.gz", hash = "sha256:ae1fdf948f5640aae05c511ade119313fb6a30d7eabe25fef9764dca5873c4c0", size = 4867, upload_time = "2024-12-07T15:28:28.314Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e1/07/c6fe3ad3e685340704d314d765b7912993bcb8dc198f0e7a89382d37974b/win32_setctime-1.2.0-py3-none-any.whl", hash = "sha256:95d644c4e708aba81dc3704a116d8cbc974d70b3bdb8be1d150e36be6e9d1390", size = 4083 }, + { url = "https://files.pythonhosted.org/packages/e1/07/c6fe3ad3e685340704d314d765b7912993bcb8dc198f0e7a89382d37974b/win32_setctime-1.2.0-py3-none-any.whl", hash = "sha256:95d644c4e708aba81dc3704a116d8cbc974d70b3bdb8be1d150e36be6e9d1390", size = 4083, upload_time = "2024-12-07T15:28:26.465Z" }, ] [[package]] name = "xlrd" version = "2.0.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/07/5a/377161c2d3538d1990d7af382c79f3b2372e880b65de21b01b1a2b78691e/xlrd-2.0.2.tar.gz", hash = "sha256:08b5e25de58f21ce71dc7db3b3b8106c1fa776f3024c54e45b45b374e89234c9", size = 100167 } +sdist = { url = "https://files.pythonhosted.org/packages/07/5a/377161c2d3538d1990d7af382c79f3b2372e880b65de21b01b1a2b78691e/xlrd-2.0.2.tar.gz", hash = "sha256:08b5e25de58f21ce71dc7db3b3b8106c1fa776f3024c54e45b45b374e89234c9", size = 100167, upload_time = "2025-06-14T08:46:39.039Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1a/62/c8d562e7766786ba6587d09c5a8ba9f718ed3fa8af7f4553e8f91c36f302/xlrd-2.0.2-py2.py3-none-any.whl", hash = "sha256:ea762c3d29f4cca48d82df517b6d89fbce4db3107f9d78713e48cd321d5c9aa9", size = 96555 }, + { url = "https://files.pythonhosted.org/packages/1a/62/c8d562e7766786ba6587d09c5a8ba9f718ed3fa8af7f4553e8f91c36f302/xlrd-2.0.2-py2.py3-none-any.whl", hash = "sha256:ea762c3d29f4cca48d82df517b6d89fbce4db3107f9d78713e48cd321d5c9aa9", size = 96555, upload_time = "2025-06-14T08:46:37.766Z" }, ] [[package]] name = "xlrd3" version = "1.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/79/db/88d8d49ddacc203956ecb98dc86c6ffeee6e933ef1f50da9b369de518f7f/xlrd3-1.1.0.tar.gz", hash = "sha256:20e6ed2e5f7f8b4ab61e30faffebceff6fab348332b4c915373f0a72742dc177", size = 58919847 } +sdist = { url = "https://files.pythonhosted.org/packages/79/db/88d8d49ddacc203956ecb98dc86c6ffeee6e933ef1f50da9b369de518f7f/xlrd3-1.1.0.tar.gz", hash = "sha256:20e6ed2e5f7f8b4ab61e30faffebceff6fab348332b4c915373f0a72742dc177", size = 58919847, upload_time = "2021-04-25T12:27:10.03Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/5d/08/fce745025e58f160e7dcb5a45d4d43eb0bd44c0d8851425be87ef90271fa/xlrd3-1.1.0-py2.py3-none-any.whl", hash = "sha256:8e8e808f938144e7936a6e07c1d57be7a0f6c6f5b37c9c67974b43246d8aacb6", size = 105268 }, + { url = "https://files.pythonhosted.org/packages/5d/08/fce745025e58f160e7dcb5a45d4d43eb0bd44c0d8851425be87ef90271fa/xlrd3-1.1.0-py2.py3-none-any.whl", hash = "sha256:8e8e808f938144e7936a6e07c1d57be7a0f6c6f5b37c9c67974b43246d8aacb6", size = 105268, upload_time = "2021-04-25T12:26:55.264Z" }, ] [[package]] name = "xlsx2csv" version = "0.8.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/36/20/94860286a308a4213581c1beacd4fc7be724250c03583fcff23aaa6107bb/xlsx2csv-0.8.4.tar.gz", hash = "sha256:2aa809888826f6af5b26c77fc7f613f2bbeada0d8cc09e5a58e0f59684bb6911", size = 221390 } +sdist = { url = "https://files.pythonhosted.org/packages/36/20/94860286a308a4213581c1beacd4fc7be724250c03583fcff23aaa6107bb/xlsx2csv-0.8.4.tar.gz", hash = "sha256:2aa809888826f6af5b26c77fc7f613f2bbeada0d8cc09e5a58e0f59684bb6911", size = 221390, upload_time = "2024-11-19T17:06:07.818Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c4/c0/15c21556362c67f1155f3643a375d50ac67559b82c768e64e800a42a2577/xlsx2csv-0.8.4-py3-none-any.whl", hash = "sha256:52ab873fc7b2f2ca75d14aee8bd1985a9f5c1bcb3cc7b80df7a5d57a40a67473", size = 15904 }, + { url = "https://files.pythonhosted.org/packages/c4/c0/15c21556362c67f1155f3643a375d50ac67559b82c768e64e800a42a2577/xlsx2csv-0.8.4-py3-none-any.whl", hash = "sha256:52ab873fc7b2f2ca75d14aee8bd1985a9f5c1bcb3cc7b80df7a5d57a40a67473", size = 15904, upload_time = "2024-11-19T17:06:05.362Z" }, ] [[package]] name = "xlsxwriter" version = "3.2.5" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a7/47/7704bac42ac6fe1710ae099b70e6a1e68ed173ef14792b647808c357da43/xlsxwriter-3.2.5.tar.gz", hash = "sha256:7e88469d607cdc920151c0ab3ce9cf1a83992d4b7bc730c5ffdd1a12115a7dbe", size = 213306 } +sdist = { url = "https://files.pythonhosted.org/packages/a7/47/7704bac42ac6fe1710ae099b70e6a1e68ed173ef14792b647808c357da43/xlsxwriter-3.2.5.tar.gz", hash = "sha256:7e88469d607cdc920151c0ab3ce9cf1a83992d4b7bc730c5ffdd1a12115a7dbe", size = 213306, upload_time = "2025-06-17T08:59:14.619Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fa/34/a22e6664211f0c8879521328000bdcae9bf6dbafa94a923e531f6d5b3f73/xlsxwriter-3.2.5-py3-none-any.whl", hash = "sha256:4f4824234e1eaf9d95df9a8fe974585ff91d0f5e3d3f12ace5b71e443c1c6abd", size = 172347 }, + { url = "https://files.pythonhosted.org/packages/fa/34/a22e6664211f0c8879521328000bdcae9bf6dbafa94a923e531f6d5b3f73/xlsxwriter-3.2.5-py3-none-any.whl", hash = "sha256:4f4824234e1eaf9d95df9a8fe974585ff91d0f5e3d3f12ace5b71e443c1c6abd", size = 172347, upload_time = "2025-06-17T08:59:13.453Z" }, ] [[package]] name = "xlwt" version = "1.3.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/06/97/56a6f56ce44578a69343449aa5a0d98eefe04085d69da539f3034e2cd5c1/xlwt-1.3.0.tar.gz", hash = "sha256:c59912717a9b28f1a3c2a98fd60741014b06b043936dcecbc113eaaada156c88", size = 153929 } +sdist = { url = "https://files.pythonhosted.org/packages/06/97/56a6f56ce44578a69343449aa5a0d98eefe04085d69da539f3034e2cd5c1/xlwt-1.3.0.tar.gz", hash = "sha256:c59912717a9b28f1a3c2a98fd60741014b06b043936dcecbc113eaaada156c88", size = 153929, upload_time = "2017-08-22T06:47:16.498Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/44/48/def306413b25c3d01753603b1a222a011b8621aed27cd7f89cbc27e6b0f4/xlwt-1.3.0-py2.py3-none-any.whl", hash = "sha256:a082260524678ba48a297d922cc385f58278b8aa68741596a87de01a9c628b2e", size = 99981 }, + { url = "https://files.pythonhosted.org/packages/44/48/def306413b25c3d01753603b1a222a011b8621aed27cd7f89cbc27e6b0f4/xlwt-1.3.0-py2.py3-none-any.whl", hash = "sha256:a082260524678ba48a297d922cc385f58278b8aa68741596a87de01a9c628b2e", size = 99981, upload_time = "2017-08-22T06:47:15.281Z" }, ] From 938bf33a3c14990cc956041ef68c9e88fb53517c Mon Sep 17 00:00:00 2001 From: euronion Date: Tue, 23 Sep 2025 13:02:24 +0200 Subject: [PATCH 16/43] doc: Remove copy-pasta mistake from pypsa-docs --- mkdocs.yaml | 31 +++++++++++++------------------ 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/mkdocs.yaml b/mkdocs.yaml index c20fb6bc..4304e194 100644 --- a/mkdocs.yaml +++ b/mkdocs.yaml @@ -41,11 +41,11 @@ theme: - navigation.tabs - navigation.tabs.sticky - navigation.sections - - navigation.tracking # Anchor tracking - - navigation.indexes # Section indexes + - navigation.tracking # Anchor tracking + - navigation.indexes # Section indexes - navigation.path - - navigation.top # Back to top button - # - navigation.foot + - navigation.top # Back to top button + # - navigation.foot - header.autohide - content.action.edit - content.action.view @@ -79,7 +79,7 @@ extra_javascript: - https://unpkg.com/mathjax@3/es5/tex-mml-chtml.js markdown_extensions: -# Callouts/ Admonitions + # Callouts/ Admonitions - admonition - pymdownx.details - pymdownx.superfences: @@ -89,32 +89,32 @@ markdown_extensions: format: !!python/name:pymdownx.superfences.fence_code_format - pymdownx.arithmatex: generic: true -# Footnotes + # Footnotes - footnotes -# Tabbed content + # Tabbed content - pymdownx.tabbed: - alternate_style: true # Abbreviations + alternate_style: true # Abbreviations - pymdownx.snippets: auto_append: - includes/abbreviations.md - abbr - attr_list - md_in_html - # Emojis + # Emojis - pymdownx.emoji: emoji_index: !!python/name:material.extensions.emoji.twemoji emoji_generator: !!python/name:material.extensions.emoji.to_svg - # Toctree with permalinks + # Toctree with permalinks + - toc: title: On this page permalink: true toc_depth: 3 - # Grids + # Grids - md_in_html - pymdownx.caret - pymdownx.tilde - plugins: - search - tags @@ -125,10 +125,6 @@ plugins: type: timeago timezone: Europe/Berlin enable_creation_date: true -- git-committers: - repository: PyPSA/PyPSA - branch: v1-docs # TODO: Change to master before merging - token: !!python/object/apply:os.getenv ["MKDOCS_GIT_COMMITTERS_APIKEY"] - argref: autolinks: - reference_prefix: ":octicons-git-pull-request-16:" @@ -138,7 +134,7 @@ plugins: font_family: Overpass background_color: "#292F36" -# Docstring generation + # Docstring generation - mkdocstrings: enabled: true default_handler: python @@ -167,7 +163,6 @@ plugins: show_if_no_docstring: true show_inheritance_diagram: true - hooks: - docs/assets/overrides/hooks/shortcodes.py From 1c0d014de4829c4010a9187e27af8edbe2dc46de Mon Sep 17 00:00:00 2001 From: euronion Date: Tue, 23 Sep 2025 13:02:37 +0200 Subject: [PATCH 17/43] doc: Use uv for RTD building --- .readthedocs.yaml | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/.readthedocs.yaml b/.readthedocs.yaml index 0906dd5c..bc7e897f 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -6,19 +6,16 @@ build: python: "3.13" jobs: pre_system_dependencies: - - git fetch --unshallow # Needed to get version tags - pre_install: - - pip install mkdocs-material + - git fetch --unshallow # Needed to get version tags + pre_create_environment: + - asdf plugin add uv + - asdf install uv latest + - asdf global uv latest + create_environment: + - uv venv "${READTHEDOCS_VIRTUALENV_PATH}" + install: + - UV_PROJECT_ENVIRONMENT="${READTHEDOCS_VIRTUALENV_PATH}" uv sync --frozen --group docs mkdocs: configuration: mkdocs.yaml # fail_on_warning: true # TODO: Enable - -python: - install: - - method: pip - path: . - extra_requirements: - - docs - - dev - - cartopy From 899d8fa35505d3e7ed0ff6f6ea207f537df3d631 Mon Sep 17 00:00:00 2001 From: Fabrizio Finozzi <167071962+finozzifa@users.noreply.github.com> Date: Wed, 24 Sep 2025 10:30:24 +0200 Subject: [PATCH 18/43] code: modify target branch for ci triggering (#52) --- .github/workflows/ci.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index d177761d..b3364618 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -5,9 +5,9 @@ name: Technologydata prototype CI on: push: - branches: [ai-prototype] + branches: [prototype-2] pull_request: - branches: [ai-prototype] + branches: [prototype-2] jobs: test: From 6fc7dd4834358ea695d4db62c817a04e1f0ce310 Mon Sep 17 00:00:00 2001 From: Fabrizio Finozzi <167071962+finozzifa@users.noreply.github.com> Date: Thu, 25 Sep 2025 15:34:56 +0200 Subject: [PATCH 19/43] Issue 42 harmonize units (#51) * code: ensure LHV and HHV have same units * code: add pre-commit changes * test: fix unit test * test: update unit test * test:ton to metric_ton * update doc * Update docs/user_guide/parameter.md Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> --------- Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> --- docs/user_guide/parameter.md | 2 +- src/technologydata/parameter.py | 24 ++++++++++++------------ test/test_parameter.py | 19 +++++++++++++++++++ 3 files changed, 32 insertions(+), 13 deletions(-) diff --git a/docs/user_guide/parameter.md b/docs/user_guide/parameter.md index 0b1576f7..bf778a2f 100644 --- a/docs/user_guide/parameter.md +++ b/docs/user_guide/parameter.md @@ -13,7 +13,7 @@ The `Parameter` class in `technologydata` encapsulates a value, its unit, proven ## Features -- **Value and Units**: Stores a numerical value (`magnitude`) and its associated units (`units`). Units are handled using `pint` and support custom currency units (e.g., `USD_2020/kW`). +- **Value and Units**: Stores a numerical value (`magnitude`) and its associated units (`units`). Units are handled using `pint` and support custom currency units (e.g., `USD_2020/kW`). The default `pint` units definition file is available [here](https://github.com/hgrecco/pint/blob/master/pint/default_en.txt) for reference. Be mindful of false unit-friends, e.g. `t = metric_ton = tonne != ton = US_ton` - **Currency Unit Convention**: Currency units must follow the pattern `XYZ_YYYY`, where `XYZ` is the 3-letter [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) currency code (e.g., `USD`, `EUR`, `CNY`) and `YYYY` is the 4-digit year (e.g., `USD_2020`). This allows for both currency and inflation adjustment. - **Carrier and Heating Value**: Optionally specify an energy carrier (e.g., `H2`) and a heating value type (`LHV` or `HHV`). - **Provenance and Notes**: Track the origin of the data and any additional notes. diff --git a/src/technologydata/parameter.py b/src/technologydata/parameter.py index f3748013..f3264133 100644 --- a/src/technologydata/parameter.py +++ b/src/technologydata/parameter.py @@ -23,16 +23,6 @@ import technologydata from technologydata.source_collection import SourceCollection -# from technologydata.utils.units import ( -# CURRENCY_UNIT_PATTERN, -# creg, -# extract_currency_units, -# get_conversion_rate, -# get_iso3_from_currency_code, -# hvreg, -# ureg, -# ) - logger = logging.getLogger(__name__) @@ -324,15 +314,25 @@ def change_heating_value(self, to_heating_value: str) -> Self: from technologydata.constants import EnergyDensityHHV, EnergyDensityLHV # Create a dictionary of heating value ratios based on energy densities + # The units of heating values are harmonized to "hv_units". + # hv_units is the units attribute of the first element of EnergyDensityLHV hv_ratios = dict() + + # Access the key of the first element of the EnergyDensityLHV dictionary + first_pair_key = next(iter(EnergyDensityLHV)) + + # Get the units attribute of the first element of the EnergyDensityLHV dictionary + hv_units = str(EnergyDensityLHV[first_pair_key].units) + lhvs = { - str(technologydata.creg.get_dimensionality(k)): v + str(technologydata.creg.get_dimensionality(k)): v.to(hv_units) for k, v in EnergyDensityLHV.items() } hhvs = { - str(technologydata.creg.get_dimensionality(k)): v + str(technologydata.creg.get_dimensionality(k)): v.to(hv_units) for k, v in EnergyDensityHHV.items() } + for dimension in self._pint_carrier.dimensionality.keys(): if dimension in lhvs and dimension in hhvs: hv_ratios[dimension] = ( diff --git a/test/test_parameter.py b/test/test_parameter.py index 99ed45e2..e9378e53 100644 --- a/test/test_parameter.py +++ b/test/test_parameter.py @@ -12,6 +12,7 @@ import pytest import technologydata +from technologydata.constants import EnergyDensityLHV # from technologydata.utils.units import extract_currency_units, ureg @@ -689,6 +690,24 @@ def test_change_heating_value_ch4_hhv_to_lhv(self) -> None: assert p2.carrier == "methane" assert p2.units == "kilowatt_hour" + def test_change_heating_value_ch4_hhv_to_lhv_adapt_units(self) -> None: + """Test HHV to LHV conversion for CH4, where HHV has a different unit than LHV.""" + p = technologydata.Parameter( + magnitude=11.1, + units="kilowatt_hour", + carrier="methane", + heating_value="higher_heating_value", + ) + # Note: metric_ton = 1e3 * kilogram = t = tonne + # Note: ton = 2e3 * pound = _ = short_ton + EnergyDensityLHV["methane"].units = "MJ/metric_ton" + EnergyDensityLHV["methane"].magnitude = 50000 + p2 = p.change_heating_value("lower_heating_value") + assert p2.units == "kilowatt_hour" + assert pytest.approx(p2.magnitude) == 10.0 + assert p2.heating_value == "lower_heating_value" + assert p2.carrier == "methane" + def test_change_heating_value_no_carrier_in_units(self) -> None: """Test conversion when carrier does not appear in units (should treat as 1 appearance).""" p = technologydata.Parameter( From 68169979cce71d9ccb0d413b8d4dd0014d596c2a Mon Sep 17 00:00:00 2001 From: Fabrizio Finozzi <167071962+finozzifa@users.noreply.github.com> Date: Wed, 8 Oct 2025 14:40:20 +0200 Subject: [PATCH 20/43] Turn Source.store_in_wayback into a private method (#63) * code: store_in_wayback private * doc: update class-diagram.puml --- docs/user_guide/class-diagram.puml | 4 ++-- src/technologydata/source.py | 8 ++++---- test/test_source.py | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/user_guide/class-diagram.puml b/docs/user_guide/class-diagram.puml index 403c59d3..0412cafc 100644 --- a/docs/user_guide/class-diagram.puml +++ b/docs/user_guide/class-diagram.puml @@ -14,7 +14,7 @@ class Source { - url_date_archive: str + ensure_in_wayback() - + store_in_wayback() + + _store_in_wayback() + retrieve_from_wayback() + _get_save_path() + _get_content_type() @@ -24,7 +24,7 @@ class Source { + __str__(other) } -note right of Source::store_in_wayback +note right of Source::_store_in_wayback Stores the source in the Internet Archive's Wayback Machine, to keep it accessible in the future. end note diff --git a/src/technologydata/source.py b/src/technologydata/source.py index c7e3643a..c18a76c8 100644 --- a/src/technologydata/source.py +++ b/src/technologydata/source.py @@ -8,7 +8,7 @@ Examples -------- >>> src = Source(title="Example Source", authors="The Authors") ->>> src.store_in_wayback() +>>> src._store_in_wayback() >>> src.retrieve_from_wayback() """ @@ -172,7 +172,7 @@ def ensure_in_wayback(self) -> None: ) if self.url_archive is None and self.url_date_archive is None: - archived_info = self.store_in_wayback(self.url) + archived_info = self._store_in_wayback(self.url) if archived_info is not None: archived_url, new_capture_flag, timestamp = archived_info if new_capture_flag: @@ -187,7 +187,7 @@ def ensure_in_wayback(self) -> None: self.url_archive = archived_url @staticmethod - def store_in_wayback( + def _store_in_wayback( url_to_archive: str, ) -> tuple[Any, bool | None, str | None] | None: """ @@ -215,7 +215,7 @@ def store_in_wayback( -------- >>> from technologydata import Source >>> some_url = "some_url" - >>> archived_info = Source.store_in_wayback(some_url) + >>> archived_info = Source._store_in_wayback(some_url) """ archive_url = savepagenow.capture_or_cache(url_to_archive) diff --git a/test/test_source.py b/test/test_source.py index 5522cf13..05985510 100644 --- a/test/test_source.py +++ b/test/test_source.py @@ -158,7 +158,7 @@ def test_store_in_wayback(self) -> None: url_to_archive = ( "https://www.engineeringtoolbox.com/co2-emission-fuels-d_1085.html" ) - archived_info = technologydata.Source.store_in_wayback(url_to_archive) + archived_info = technologydata.Source._store_in_wayback(url_to_archive) # Check if archived_info is None assert archived_info is not None, "archived_info should not be None" From 3f1027a3717d224141ab3cf1647bf74313298926 Mon Sep 17 00:00:00 2001 From: Fabrizio Finozzi <167071962+finozzifa@users.noreply.github.com> Date: Fri, 10 Oct 2025 18:15:31 +0200 Subject: [PATCH 21/43] update from_json and to_json methods for TechnologyCollection and SourceCollection (#62) * code: update tech json file and from_json * code: new version of from_json * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * update tests --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- docs/user_guide/class-diagram.puml | 3 - src/technologydata/parameter.py | 44 +-- src/technologydata/source_collection.py | 47 ++- src/technologydata/technology.py | 44 --- src/technologydata/technology_collection.py | 24 +- .../sources.json | 0 .../technologies.json | 302 ++++++++++++++++++ .../technologies.json | 266 --------------- .../technologies.json | 156 --------- test/test_datapackage.py | 2 +- test/test_source_collection.py | 26 +- test/test_technology_collection.py | 38 ++- 12 files changed, 388 insertions(+), 564 deletions(-) rename test/test_data/{solar_photovoltaics_example_03 => solar_photovoltaics_example}/sources.json (100%) create mode 100644 test/test_data/solar_photovoltaics_example/technologies.json delete mode 100644 test/test_data/solar_photovoltaics_example_03/technologies.json delete mode 100644 test/test_data/solar_photovoltaics_example_04/technologies.json diff --git a/docs/user_guide/class-diagram.puml b/docs/user_guide/class-diagram.puml index 0412cafc..a45a6915 100644 --- a/docs/user_guide/class-diagram.puml +++ b/docs/user_guide/class-diagram.puml @@ -50,7 +50,6 @@ class Parameter { + change_currency() + change_heating_value() + to() - + from_dict(): Parameter + __add__(other: Parameter) + __sub__(other: Parameter) + __mul__(other: Parameter) @@ -87,7 +86,6 @@ class Technology { + __getitem__() + __setitem__() - + from_dict(): Technology + adjust_currency(): Technology // or inplace + adjust_region(): Technology // or inplace + adjust_scale(): Technology // or inplace @@ -133,7 +131,6 @@ end note class TechnologyCollection { - technologies: Iterable + get(**criteria): Technology | TechnologyCollection | None - + from_dict(): TechnologyCollection + to_json(): str + to_csv(): str + to_dataframe(): pd.DataFrame diff --git a/src/technologydata/parameter.py b/src/technologydata/parameter.py index f3264133..233a814a 100644 --- a/src/technologydata/parameter.py +++ b/src/technologydata/parameter.py @@ -15,7 +15,7 @@ """ import logging -from typing import Annotated, Any, Self +from typing import Annotated, Self import pint from pydantic import BaseModel, Field, PrivateAttr @@ -670,45 +670,3 @@ def __pow__(self, exponent: float | int) -> Self: note=self.note, sources=self.sources, ) - - @classmethod - def from_dict(cls, data: dict[str, Any]) -> Self: - """ - Create an instance of the class from a dictionary. - - Parameters - ---------- - cls : type - The class to instantiate. - data : dict - A dictionary containing the data to initialize the class instance. Expected keys include: - - "magnitude" - - "units" - - "carrier" - - "heating_value" - - "provenance" - - "note" - - "sources" (list): A list of source data dictionaries, to be converted into a SourceCollection. - - Returns - ------- - Parameter - An instance of the class initialized with the provided data. - - Notes - ----- - This method converts the "sources" list into a `SourceCollection` using `SourceCollection.from_json()`. - - """ - # Convert sources list into SourceCollection - sources_data = data.get("sources", []) - sources = SourceCollection.from_json(from_str=sources_data) - return cls( - magnitude=data.get("magnitude"), - units=data.get("units"), - carrier=data.get("carrier"), - heating_value=data.get("heating_value"), - provenance=data.get("provenance"), - note=data.get("note"), - sources=sources, - ) diff --git a/src/technologydata/source_collection.py b/src/technologydata/source_collection.py index 31c4e7b4..f989f291 100644 --- a/src/technologydata/source_collection.py +++ b/src/technologydata/source_collection.py @@ -8,11 +8,13 @@ import json import pathlib import re +import typing from collections.abc import Iterator -from typing import Annotated, Any, Self +from typing import Annotated, Self import pandas import pydantic +import pydantic_core from technologydata.source import Source @@ -206,44 +208,31 @@ def to_json( @classmethod def from_json( cls, - file_path: pathlib.Path | str | None = None, - from_str: list[dict[str, Any]] | None = None, + file_path: pathlib.Path | str, ) -> Self: """ Import the SourceCollection from a JSON file. Parameters ---------- - file_path : Optional[pathlib.Path | str] + file_path : pathlib.Path | str The path to the JSON file to be imported. - from_str : Optional[list] - The list of dictionaries with Source fields. """ - if file_path is None and from_str is None: - raise ValueError( - "Both file_path and from_str are None. One must be provided." - ) + if isinstance(file_path, (pathlib.Path | str)): + file_path = pathlib.Path(file_path) + else: + raise TypeError("file_path must be a pathlib.Path or str") json_data = None # Load data from file if file_path is provided - if file_path is not None: - if not isinstance(file_path, (pathlib.Path | str)): - raise TypeError( - f"file_path must be a pathlib.Path or str, but got {type(file_path)}" - ) - path = pathlib.Path(file_path) - with path.open(encoding="utf-8") as jsonfile: - json_data = json.load(jsonfile) - - # Override json_data if from_str is provided - if from_str is not None: - if not isinstance(from_str, list): - raise TypeError(f"from_str must be a list, but got {type(from_str)}") - json_data = {"sources": [Source(**source) for source in from_str]} - - if json_data is None: - raise ValueError("No data to load. Provide either a file_path or from_str.") - - return cls(**json_data) + with open(file_path, encoding="utf-8") as jsonfile: + json_data = jsonfile.read() + + # pydantic_core.from_json return Any. Therefore, typing.cast makes sure that + # the output is indeed a TechnologyCollection + return typing.cast( + SourceCollection, + cls.model_validate(pydantic_core.from_json(json_data, allow_partial=True)), + ) diff --git a/src/technologydata/technology.py b/src/technologydata/technology.py index 771b0e7b..c4655a2e 100644 --- a/src/technologydata/technology.py +++ b/src/technologydata/technology.py @@ -164,47 +164,3 @@ def adjust_scale(self, scaling_factor: float) -> Self: """ # Placeholder: implement scaling logic return self - - @classmethod - def from_dict(cls, data: dict[str, Any]) -> Self: - """ - Create an instance of the class from a dictionary. - - Parameters - ---------- - cls : type - The class to instantiate. - data : dict - A dictionary containing the data to initialize the class instance. - Expected keys include: - - "region" (str): The region associated with the instance. - - "case" (str): The case identifier. - - "year" (int): The year value. - - "name" (str): The name of the instance. - - "detailed_technology" (str): Details about the technology. - - "parameters" (dict): A dictionary where each key maps to a parameter data - dictionary, which will be converted to a Parameter object. - - Returns - ------- - instance : cls - An instance of the class initialized with the provided data. - - Notes - ----- - This method processes the "parameters" field in the input data by converting each - parameter dictionary into a Parameter object using `Parameter.from_dict()`. It then - constructs and returns an instance of the class with all the provided attributes. - - """ - params = {} - for key, param_data in data.get("parameters", {}).items(): - params[key] = Parameter.from_dict(param_data) - return cls( - region=data["region"], - case=data["case"], - year=data["year"], - name=data["name"], - detailed_technology=data["detailed_technology"], - parameters=params, - ) diff --git a/src/technologydata/technology_collection.py b/src/technologydata/technology_collection.py index 85dd3f61..cb66361f 100644 --- a/src/technologydata/technology_collection.py +++ b/src/technologydata/technology_collection.py @@ -8,11 +8,13 @@ import json import pathlib import re +import typing from collections.abc import Iterator from typing import Annotated, Self import pandas import pydantic +import pydantic_core from technologydata.technology import Technology @@ -219,20 +221,18 @@ def from_json(cls, file_path: pathlib.Path | str) -> Self: TypeError If `file_path` is not a pathlib.Path or str. - Notes - ----- - This method reads the JSON data from the specified file, creates `Technology` objects - for each item in the JSON list using `Technology.from_dict()`, and returns a new - `TechnologyCollection` containing these objects. - """ - if isinstance(file_path, pathlib.Path | str): + if isinstance(file_path, (pathlib.Path | str)): file_path = pathlib.Path(file_path) else: raise TypeError("file_path must be a pathlib.Path or str") + with open(file_path, encoding="utf-8") as jsonfile: - json_data = json.load(jsonfile) - techs = [] - for item in json_data: - techs.append(Technology.from_dict(item)) - return cls(technologies=techs) + json_data = jsonfile.read() + + # pydantic_core.from_json return Any. Therefore, typing.cast makes sure that + # the output is indeed a TechnologyCollection + return typing.cast( + TechnologyCollection, + cls.model_validate(pydantic_core.from_json(json_data, allow_partial=True)), + ) diff --git a/test/test_data/solar_photovoltaics_example_03/sources.json b/test/test_data/solar_photovoltaics_example/sources.json similarity index 100% rename from test/test_data/solar_photovoltaics_example_03/sources.json rename to test/test_data/solar_photovoltaics_example/sources.json diff --git a/test/test_data/solar_photovoltaics_example/technologies.json b/test/test_data/solar_photovoltaics_example/technologies.json new file mode 100644 index 00000000..089e7901 --- /dev/null +++ b/test/test_data/solar_photovoltaics_example/technologies.json @@ -0,0 +1,302 @@ +{ + "technologies": [ + { + "name": "Solar photovoltaics", + "region": "DEU", + "year": 2022, + "parameters": { + "capacity": { + "magnitude": 1.0, + "units": "megawatt", + "carrier": "electricity", + "heating_value": null, + "provenance": "Model calculation", + "note": "Average capacity factor of 22% assumed", + "sources": { + "sources": [ + { + "title": "atb_nrel", + "authors": "NREL/ATB", + "url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_date": "2025-05-22 15:08:02", + "url_date_archive": "2025-05-22 15:08:02" + }, + { + "title": "tech_data_generation", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/3273/download", + "url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", + "url_date": "2025-05-06 16:02:04", + "url_date_archive": "2025-05-06 16:02:04" + } + ] + } + }, + "investment": { + "magnitude": 500, + "units": "EUR_2022 / kilowatt", + "carrier": "1 / electricity", + "heating_value": null, + "provenance": "Industry report", + "note": "Average overnight cost", + "sources": { + "sources": [ + { + "title": "atb_nrel", + "authors": "NREL/ATB", + "url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_date": "2025-05-22 15:08:02", + "url_date_archive": "2025-05-22 15:08:02" + }, + { + "title": "tech_data_generation", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/3273/download", + "url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", + "url_date": "2025-05-06 16:02:04", + "url_date_archive": "2025-05-06 16:02:04" + } + ] + } + }, + "specific_investment": { + "magnitude": 0.95, + "units": "EUR_2022 / watt", + "carrier": "1 / electricity", + "heating_value": null, + "provenance": "Derived", + "note": "Calculated from investment/capacity", + "sources": { + "sources": [ + { + "title": "atb_nrel", + "authors": "NREL/ATB", + "url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_date": "2025-05-22 15:08:02", + "url_date_archive": "2025-05-22 15:08:02" + }, + { + "title": "tech_data_generation", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/3273/download", + "url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", + "url_date": "2025-05-06 16:02:04", + "url_date_archive": "2025-05-06 16:02:04" + } + ] + } + }, + "lifetime": { + "magnitude": 30, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Manufacturer specification", + "note": "With performance degradation guarantee", + "sources": { + "sources": [ + { + "title": "atb_nrel", + "authors": "NREL/ATB", + "url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_date": "2025-05-22 15:08:02", + "url_date_archive": "2025-05-22 15:08:02" + }, + { + "title": "tech_data_generation", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/3273/download", + "url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", + "url_date": "2025-05-06 16:02:04", + "url_date_archive": "2025-05-06 16:02:04" + } + ] + } + }, + "wacc": { + "magnitude": 5, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Financial analysis", + "note": "Nominal weighted average cost of capital", + "sources": { + "sources": [ + { + "title": "atb_nrel", + "authors": "NREL/ATB", + "url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_date": "2025-05-22 15:08:02", + "url_date_archive": "2025-05-22 15:08:02" + }, + { + "title": "tech_data_generation", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/3273/download", + "url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", + "url_date": "2025-05-06 16:02:04", + "url_date_archive": "2025-05-06 16:02:04" + } + ] + } + } + }, + "case": "example-scenario", + "detailed_technology": "Si-HC" + }, + { + "name": "Solar photovoltaics", + "region": "DEU", + "year": 2022, + "parameters": { + "capacity": { + "magnitude": 3.0, + "units": "megawatt", + "carrier": "electricity", + "heating_value": null, + "provenance": "Model calculation", + "note": "Average capacity factor of 25% assumed", + "sources": { + "sources": [ + { + "title": "atb_nrel", + "authors": "NREL/ATB", + "url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_date": "2025-05-22 15:08:02", + "url_date_archive": "2025-05-22 15:08:02" + }, + { + "title": "tech_data_generation", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/3273/download", + "url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", + "url_date": "2025-05-06 16:02:04", + "url_date_archive": "2025-05-06 16:02:04" + } + ] + } + }, + "investment": { + "magnitude": 350, + "units": "EUR_2022 / kilowatt", + "carrier": "1 / electricity", + "heating_value": null, + "provenance": "Industry report", + "note": "Average overnight cost", + "sources": { + "sources": [ + { + "title": "atb_nrel", + "authors": "NREL/ATB", + "url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_date": "2025-05-22 15:08:02", + "url_date_archive": "2025-05-22 15:08:02" + }, + { + "title": "tech_data_generation", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/3273/download", + "url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", + "url_date": "2025-05-06 16:02:04", + "url_date_archive": "2025-05-06 16:02:04" + } + ] + } + }, + "specific_investment": { + "magnitude": 0.92, + "units": "EUR_2022 / watt", + "carrier": "1 / electricity", + "heating_value": null, + "provenance": "Derived", + "note": "Calculated from investment/capacity", + "sources": { + "sources": [ + { + "title": "atb_nrel", + "authors": "NREL/ATB", + "url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_date": "2025-05-22 15:08:02", + "url_date_archive": "2025-05-22 15:08:02" + }, + { + "title": "tech_data_generation", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/3273/download", + "url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", + "url_date": "2025-05-06 16:02:04", + "url_date_archive": "2025-05-06 16:02:04" + } + ] + } + }, + "lifetime": { + "magnitude": 40, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Manufacturer specification", + "note": "With performance degradation guarantee", + "sources": { + "sources": [ + { + "title": "atb_nrel", + "authors": "NREL/ATB", + "url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_date": "2025-05-22 15:08:02", + "url_date_archive": "2025-05-22 15:08:02" + }, + { + "title": "tech_data_generation", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/3273/download", + "url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", + "url_date": "2025-05-06 16:02:04", + "url_date_archive": "2025-05-06 16:02:04" + } + ] + } + }, + "wacc": { + "magnitude": 2, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Financial analysis", + "note": "Nominal weighted average cost of capital", + "sources": { + "sources": [ + { + "title": "atb_nrel", + "authors": "NREL/ATB", + "url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "url_date": "2025-05-22 15:08:02", + "url_date_archive": "2025-05-22 15:08:02" + }, + { + "title": "tech_data_generation", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/3273/download", + "url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", + "url_date": "2025-05-06 16:02:04", + "url_date_archive": "2025-05-06 16:02:04" + } + ] + } + } + }, + "case": "example-project", + "detailed_technology": "Si-HC" + } + ] +} diff --git a/test/test_data/solar_photovoltaics_example_03/technologies.json b/test/test_data/solar_photovoltaics_example_03/technologies.json deleted file mode 100644 index f8acfc7d..00000000 --- a/test/test_data/solar_photovoltaics_example_03/technologies.json +++ /dev/null @@ -1,266 +0,0 @@ -[ - { - "region": "DEU", - "case": "example-scenario", - "year": 2022, - "name": "Solar photovoltaics", - "detailed_technology": "Si-HC", - "parameters": { - "capacity": { - "magnitude": 1.0, - "units": "MW", - "carrier": "electricity", - "provenance": "Model calculation", - "note": "Average capacity factor of 22% assumed", - "sources": [ - { - "title": "atb_nrel", - "authors": "NREL/ATB", - "url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", - "url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", - "url_date": "2025-05-22 15:08:02", - "url_date_archive": "2025-05-22 15:08:02" - }, - { - "title": "tech_data_generation", - "authors": "Danish Energy Agency", - "url": "https://ens.dk/media/3273/download", - "url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", - "url_date": "2025-05-06 16:02:04", - "url_date_archive": "2025-05-06 16:02:04" - } - ] - }, - "investment": { - "magnitude": 500, - "units": "EUR_2022/kW", - "carrier": "1/electricity", - "provenance": "Industry report", - "note": "Average overnight cost", - "sources": [ - { - "title": "atb_nrel", - "authors": "NREL/ATB", - "url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", - "url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", - "url_date": "2025-05-22 15:08:02", - "url_date_archive": "2025-05-22 15:08:02" - }, - { - "title": "tech_data_generation", - "authors": "Danish Energy Agency", - "url": "https://ens.dk/media/3273/download", - "url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", - "url_date": "2025-05-06 16:02:04", - "url_date_archive": "2025-05-06 16:02:04" - } - ] - }, - "specific_investment": { - "magnitude": 0.95, - "units": "EUR_2022/W", - "carrier": "1/electricity", - "provenance": "Derived", - "note": "Calculated from investment/capacity", - "sources": [ - { - "title": "atb_nrel", - "authors": "NREL/ATB", - "url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", - "url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", - "url_date": "2025-05-22 15:08:02", - "url_date_archive": "2025-05-22 15:08:02" - }, - { - "title": "tech_data_generation", - "authors": "Danish Energy Agency", - "url": "https://ens.dk/media/3273/download", - "url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", - "url_date": "2025-05-06 16:02:04", - "url_date_archive": "2025-05-06 16:02:04" - } - ] - }, - "lifetime": { - "magnitude": 30, - "units": "years", - "provenance": "Manufacturer specification", - "note": "With performance degradation guarantee", - "sources": [ - { - "title": "atb_nrel", - "authors": "NREL/ATB", - "url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", - "url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", - "url_date": "2025-05-22 15:08:02", - "url_date_archive": "2025-05-22 15:08:02" - }, - { - "title": "tech_data_generation", - "authors": "Danish Energy Agency", - "url": "https://ens.dk/media/3273/download", - "url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", - "url_date": "2025-05-06 16:02:04", - "url_date_archive": "2025-05-06 16:02:04" - } - ] - }, - "wacc": { - "magnitude": 5, - "units": "%", - "provenance": "Financial analysis", - "note": "Nominal weighted average cost of capital", - "sources": [ - { - "title": "atb_nrel", - "authors": "NREL/ATB", - "url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", - "url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", - "url_date": "2025-05-22 15:08:02", - "url_date_archive": "2025-05-22 15:08:02" - }, - { - "title": "tech_data_generation", - "authors": "Danish Energy Agency", - "url": "https://ens.dk/media/3273/download", - "url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", - "url_date": "2025-05-06 16:02:04", - "url_date_archive": "2025-05-06 16:02:04" - } - ] - } - } - }, - { - "region": "DEU", - "case": "example-project", - "year": 2022, - "name": "Solar photovoltaics", - "detailed_technology": "Si-HC", - "parameters": { - "capacity": { - "magnitude": 1.0, - "units": "MW", - "carrier": "electricity", - "provenance": "Model calculation", - "note": "Average capacity factor of 25% assumed", - "sources": [ - { - "title": "atb_nrel", - "authors": "NREL/ATB", - "url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", - "url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", - "url_date": "2025-05-22 15:08:02", - "url_date_archive": "2025-05-22 15:08:02" - }, - { - "title": "tech_data_generation", - "authors": "Danish Energy Agency", - "url": "https://ens.dk/media/3273/download", - "url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", - "url_date": "2025-05-06 16:02:04", - "url_date_archive": "2025-05-06 16:02:04" - } - ] - } - }, - "investment": { - "magnitude": 350, - "units": "EUR_2022/kW", - "carrier": "1/electricity", - "provenance": "Industry report", - "note": "Average overnight cost for another tech", - "sources": [ - { - "title": "atb_nrel", - "authors": "NREL/ATB", - "url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", - "url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", - "url_date": "2025-05-22 15:08:02", - "url_date_archive": "2025-05-22 15:08:02" - }, - { - "title": "tech_data_generation", - "authors": "Danish Energy Agency", - "url": "https://ens.dk/media/3273/download", - "url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", - "url_date": "2025-05-06 16:02:04", - "url_date_archive": "2025-05-06 16:02:04" - } - ] - }, - "specific_investment": { - "magnitude": 0.95, - "units": "EUR_2022/W", - "carrier": "1/electricity", - "provenance": "Derived", - "note": "Calculated from investment/capacity", - "sources": [ - { - "title": "atb_nrel", - "authors": "NREL/ATB", - "url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", - "url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", - "url_date": "2025-05-22 15:08:02", - "url_date_archive": "2025-05-22 15:08:02" - }, - { - "title": "tech_data_generation", - "authors": "Danish Energy Agency", - "url": "https://ens.dk/media/3273/download", - "url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", - "url_date": "2025-05-06 16:02:04", - "url_date_archive": "2025-05-06 16:02:04" - } - ] - }, - "lifetime": { - "magnitude": 30, - "units": "years", - "provenance": "Manufacturer specification", - "note": "With performance degradation guarantee", - "sources": [ - { - "title": "atb_nrel", - "authors": "NREL/ATB", - "url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", - "url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", - "url_date": "2025-05-22 15:08:02", - "url_date_archive": "2025-05-22 15:08:02" - }, - { - "title": "tech_data_generation", - "authors": "Danish Energy Agency", - "url": "https://ens.dk/media/3273/download", - "url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", - "url_date": "2025-05-06 16:02:04", - "url_date_archive": "2025-05-06 16:02:04" - } - ] - }, - "wacc": { - "magnitude": 5, - "units": "%", - "provenance": "Financial analysis", - "note": "Nominal weighted average cost of capital", - "sources": [ - { - "title": "atb_nrel", - "authors": "NREL/ATB", - "url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", - "url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", - "url_date": "2025-05-22 15:08:02", - "url_date_archive": "2025-05-22 15:08:02" - }, - { - "title": "tech_data_generation", - "authors": "Danish Energy Agency", - "url": "https://ens.dk/media/3273/download", - "url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", - "url_date": "2025-05-06 16:02:04", - "url_date_archive": "2025-05-06 16:02:04" - } - ] - } - } -] diff --git a/test/test_data/solar_photovoltaics_example_04/technologies.json b/test/test_data/solar_photovoltaics_example_04/technologies.json deleted file mode 100644 index dfa7eb50..00000000 --- a/test/test_data/solar_photovoltaics_example_04/technologies.json +++ /dev/null @@ -1,156 +0,0 @@ -[ - { - "region": "DEU", - "case": "example-scenario", - "year": 2022, - "name": "Solar photovoltaics", - "detailed_technology": "Si-HC", - "parameters": { - "capacity": { - "magnitude": 1, - "units": "MW", - "carrier": "electricity", - "provenance": "Model calculation", - "note": "Average capacity factor of 22% assumed", - "sources": [ - { - "title": "example04", - "authors": "Open Energy Transition gGmbH", - "url": "https://openenergytransition.org/outputs.html" - } - ] - }, - "investment": { - "magnitude": 500, - "units": "EUR_2022/kW", - "carrier": "1/electricity", - "provenance": "Industry report", - "note": "Average overnight cost", - "sources": [ - { - "title": "example04", - "authors": "Open Energy Transition gGmbH", - "url": "https://openenergytransition.org/outputs.html" - } - ] - }, - "specific_investment": { - "magnitude": 0.95, - "units": "EUR_2022/W", - "carrier": "1/electricity", - "provenance": "Derived", - "note": "Calculated from investment/capacity", - "sources": [ - { - "title": "example04", - "authors": "Open Energy Transition gGmbH", - "url": "https://openenergytransition.org/outputs.html" - } - ] - }, - "lifetime": { - "magnitude": 30, - "units": "years", - "provenance": "Manufacturer specification", - "note": "With performance degradation guarantee", - "sources": [ - { - "title": "example04", - "authors": "Open Energy Transition gGmbH", - "url": "https://openenergytransition.org/outputs.html" - } - ] - }, - "wacc": { - "magnitude": 5, - "units": "%", - "provenance": "Financial analysis", - "note": "Nominal weighted average cost of capital", - "sources": [ - { - "title": "example04", - "authors": "Open Energy Transition gGmbH", - "url": "https://openenergytransition.org/outputs.html" - } - ] - } - } - }, - { - "region": "DEU", - "case": "example-project", - "year": 2022, - "name": "Solar photovoltaics", - "detailed_technology": "Si-HC", - "parameters": { - "capacity": { - "magnitude": 1.0, - "units": "MW", - "carrier": "electricity", - "provenance": "Model calculation", - "note": "Average capacity factor of 25% assumed", - "sources": [ - { - "title": "example04", - "authors": "Open Energy Transition gGmbH", - "url": "https://openenergytransition.org/outputs.html" - } - ] - }, - "investment": { - "magnitude": 350, - "units": "EUR_2022/kW", - "carrier": "1/electricity", - "provenance": "Industry report", - "note": "Average overnight cost for another tech", - "sources": [ - { - "title": "example04", - "authors": "Open Energy Transition gGmbH", - "url": "https://openenergytransition.org/outputs.html" - } - ] - }, - "specific_investment": { - "magnitude": 0.95, - "units": "EUR_2022/W", - "carrier": "1/electricity", - "provenance": "Derived", - "note": "Calculated from investment/capacity", - "sources": [ - { - "title": "example04", - "authors": "Open Energy Transition gGmbH", - "url": "https://openenergytransition.org/outputs.html" - } - ] - }, - "lifetime": { - "magnitude": 30, - "units": "years", - "provenance": "Manufacturer specification", - "note": "With performance degradation guarantee", - "sources": [ - { - "title": "example04", - "authors": "Open Energy Transition gGmbH", - "url": "https://openenergytransition.org/outputs.html" - } - ] - }, - "wacc": { - "magnitude": 5, - "units": "%", - "provenance": "Financial analysis", - "note": "Nominal weighted average cost of capital", - "sources": [ - { - "title": "example04", - "authors": "Open Energy Transition gGmbH", - "url": "https://openenergytransition.org/outputs.html" - } - ] - } - } - } -] diff --git a/test/test_datapackage.py b/test/test_datapackage.py index d1611fe9..ce345e87 100644 --- a/test/test_datapackage.py +++ b/test/test_datapackage.py @@ -20,7 +20,7 @@ def test_get_source_collection(self) -> None: path_cwd, "test", "test_data", - "solar_photovoltaics_example_03", + "solar_photovoltaics_example", "technologies.json", ) diff --git a/test/test_source_collection.py b/test/test_source_collection.py index 62e95a42..f8503959 100644 --- a/test/test_source_collection.py +++ b/test/test_source_collection.py @@ -236,7 +236,7 @@ def test_from_json(self) -> None: path_cwd, "test", "test_data", - "solar_photovoltaics_example_03", + "solar_photovoltaics_example", "sources.json", ) source_collection = technologydata.SourceCollection.from_json( @@ -245,6 +245,27 @@ def test_from_json(self) -> None: assert isinstance(source_collection, technologydata.SourceCollection) assert len(source_collection) == 2 + def test_from_json_to_json(self) -> None: + """Check whether reading with from_json and exporting with to_json yields the same file.""" + input_file = pathlib.Path( + path_cwd, + "test", + "test_data", + "solar_photovoltaics_example", + "sources.json", + ) + source_collection = technologydata.SourceCollection.from_json(input_file) + output_file = pathlib.Path("to_json_test.json") + schema_file = pathlib.Path(path_cwd, "to_json_test.schema.json") + source_collection.to_json(output_file) + # Read files and strip trailing whitespace/newlines before comparing + with open(input_file) as f1, open(output_file) as f2: + assert f1.read().rstrip() == f2.read().rstrip(), "Files are not identical" + assert output_file.is_file() + assert schema_file.is_file() + output_file.unlink(missing_ok=True) + schema_file.unlink(missing_ok=True) + @pytest.mark.parametrize( "title_pattern, authors_pattern", [["ATB", "nrel"], ["TECH_DATA", "danish"]], @@ -255,10 +276,9 @@ def test_get(self, title_pattern: str, authors_pattern: str) -> None: path_cwd, "test", "test_data", - "solar_photovoltaics_example_03", + "solar_photovoltaics_example", "sources.json", ) - source_collection = technologydata.SourceCollection.from_json( file_path=input_file ) diff --git a/test/test_technology_collection.py b/test/test_technology_collection.py index 2c129f9e..89e94fd3 100644 --- a/test/test_technology_collection.py +++ b/test/test_technology_collection.py @@ -23,7 +23,7 @@ def test_to_csv(self) -> None: path_cwd, "test", "test_data", - "solar_photovoltaics_example_03", + "solar_photovoltaics_example", "technologies.json", ) technology_collection = technologydata.TechnologyCollection.from_json( @@ -40,7 +40,7 @@ def test_to_dataframe(self) -> None: path_cwd, "test", "test_data", - "solar_photovoltaics_example_03", + "solar_photovoltaics_example", "technologies.json", ) technology_collection = technologydata.TechnologyCollection.from_json( @@ -49,12 +49,12 @@ def test_to_dataframe(self) -> None: assert isinstance(technology_collection.to_dataframe(), pandas.DataFrame) def test_to_json(self) -> None: - """Check if the example technology collection is exported to JSON.""" + """Check if to_json works as expected.""" input_file = pathlib.Path( path_cwd, "test", "test_data", - "solar_photovoltaics_example_03", + "solar_photovoltaics_example", "technologies.json", ) technology_collection = technologydata.TechnologyCollection.from_json( @@ -69,12 +69,12 @@ def test_to_json(self) -> None: schema_file.unlink(missing_ok=True) def test_from_json(self) -> None: - """Check if the example technology collection is imported from JSON.""" + """Check if from_json works as expected.""" input_file = pathlib.Path( path_cwd, "test", "test_data", - "solar_photovoltaics_example_03", + "solar_photovoltaics_example", "technologies.json", ) technology_collection = technologydata.TechnologyCollection.from_json( @@ -83,6 +83,30 @@ def test_from_json(self) -> None: assert isinstance(technology_collection, technologydata.TechnologyCollection) assert len(technology_collection) == 2 + def test_from_json_to_json(self) -> None: + """Check whether reading with from_json and exporting with to_json yields the same file.""" + input_file = pathlib.Path( + path_cwd, + "test", + "test_data", + "solar_photovoltaics_example", + "technologies.json", + ) + technology_collection = technologydata.TechnologyCollection.from_json( + input_file + ) + output_file = pathlib.Path("to_json_test.json") + schema_file = pathlib.Path(path_cwd, "to_json_test.schema.json") + technology_collection.to_json(output_file) + + # Read files and strip trailing whitespace/newlines before comparing + with open(input_file) as f1, open(output_file) as f2: + assert f1.read().rstrip() == f2.read().rstrip(), "Files are not identical" + assert output_file.is_file() + assert schema_file.is_file() + output_file.unlink(missing_ok=True) + schema_file.unlink(missing_ok=True) + @pytest.mark.parametrize( "name, region, year, case, detailed_technology", [ @@ -98,7 +122,7 @@ def test_get( path_cwd, "test", "test_data", - "solar_photovoltaics_example_03", + "solar_photovoltaics_example", "technologies.json", ) technologies_collection = technologydata.TechnologyCollection.from_json( From 9e21b52b35fc7b80434b4b1870e7c2848219bbfa Mon Sep 17 00:00:00 2001 From: Johannes HAMPP <42553970+euronion@users.noreply.github.com> Date: Mon, 20 Oct 2025 10:33:06 +0200 Subject: [PATCH 22/43] code: Reorder Technology attributes (#66) --- src/technologydata/technology.py | 16 ++++++++-------- .../technologies.json | 12 ++++++------ 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/technologydata/technology.py b/src/technologydata/technology.py index c4655a2e..3ecaaf76 100644 --- a/src/technologydata/technology.py +++ b/src/technologydata/technology.py @@ -22,30 +22,30 @@ class Technology(pydantic.BaseModel): # type: ignore ---------- name : str Name of the technology. + detailed_technology : str + More detailed technology name. + case : str + Case or scenario identifier. region : str Region identifier. year : int Year of the data. parameters : Dict[str, Parameter] Dictionary of parameter names to Parameter objects. - case : str - Case or scenario identifier. - detailed_technology : str - More detailed technology name. """ name: Annotated[str, pydantic.Field(description="Name of the technology.")] + detailed_technology: Annotated[ + str, pydantic.Field(description="Detailed technology name.") + ] + case: Annotated[str, pydantic.Field(description="Case or scenario identifier.")] region: Annotated[str, pydantic.Field(description="Region identifier.")] year: Annotated[int, pydantic.Field(description="Year of the data.")] parameters: Annotated[ dict[str, Parameter], pydantic.Field(default_factory=dict, description="Parameters."), ] - case: Annotated[str, pydantic.Field(description="Case or scenario identifier.")] - detailed_technology: Annotated[ - str, pydantic.Field(description="Detailed technology name.") - ] def __getitem__(self, key: str) -> Parameter: """ diff --git a/test/test_data/solar_photovoltaics_example/technologies.json b/test/test_data/solar_photovoltaics_example/technologies.json index 089e7901..4288346a 100644 --- a/test/test_data/solar_photovoltaics_example/technologies.json +++ b/test/test_data/solar_photovoltaics_example/technologies.json @@ -2,6 +2,8 @@ "technologies": [ { "name": "Solar photovoltaics", + "detailed_technology": "Si-HC", + "case": "example-scenario", "region": "DEU", "year": 2022, "parameters": { @@ -145,12 +147,12 @@ ] } } - }, - "case": "example-scenario", - "detailed_technology": "Si-HC" + } }, { "name": "Solar photovoltaics", + "detailed_technology": "Si-HC", + "case": "example-project", "region": "DEU", "year": 2022, "parameters": { @@ -294,9 +296,7 @@ ] } } - }, - "case": "example-project", - "detailed_technology": "Si-HC" + } } ] } From c9b39baf26546d16fddc50cd1d3b58d771c93836 Mon Sep 17 00:00:00 2001 From: Johannes HAMPP <42553970+euronion@users.noreply.github.com> Date: Tue, 28 Oct 2025 14:49:57 +0100 Subject: [PATCH 23/43] 31 change currency technology collection (#69) * code: Add to_currency for Technology and TechnologyCollection * code: Rename adjust_currency to to_currency for Parameter * doc: Update class diagramm * doc: Add simple docs for to_currency methods * code: fix mypy comments and minor static typing issue --------- Co-authored-by: Fabrizio Finozzi --- docs/user_guide/class-diagram.puml | 5 +- docs/user_guide/parameter.md | 45 +++- src/technologydata/parameter.py | 18 +- src/technologydata/technology.py | 38 ++- src/technologydata/technology_collection.py | 42 +++ test/test_parameter.py | 28 +- test/test_technology.py | 271 ++++++++++++++++++++ test/test_technology_collection.py | 107 ++++++++ 8 files changed, 520 insertions(+), 34 deletions(-) create mode 100644 test/test_technology.py diff --git a/docs/user_guide/class-diagram.puml b/docs/user_guide/class-diagram.puml index a45a6915..20dac56c 100644 --- a/docs/user_guide/class-diagram.puml +++ b/docs/user_guide/class-diagram.puml @@ -47,7 +47,7 @@ class Parameter { + _update_pint_attributes() + _check_parameter_compatibility() - + change_currency() + + to_currency() + change_heating_value() + to() + __add__(other: Parameter) @@ -86,7 +86,7 @@ class Technology { + __getitem__() + __setitem__() - + adjust_currency(): Technology // or inplace + + to_currency(): Technology + adjust_region(): Technology // or inplace + adjust_scale(): Technology // or inplace + calculate_EAC(): Parameter // or inplace @@ -131,6 +131,7 @@ end note class TechnologyCollection { - technologies: Iterable + get(**criteria): Technology | TechnologyCollection | None + + to_currency(): TechnologyCollection + to_json(): str + to_csv(): str + to_dataframe(): pd.DataFrame diff --git a/docs/user_guide/parameter.md b/docs/user_guide/parameter.md index bf778a2f..5a51ca3b 100644 --- a/docs/user_guide/parameter.md +++ b/docs/user_guide/parameter.md @@ -19,7 +19,7 @@ The `Parameter` class in `technologydata` encapsulates a value, its unit, proven - **Provenance and Notes**: Track the origin of the data and any additional notes. - **Sources**: Attach a `SourceCollection` of references for traceability. - **Unit Conversion**: Convert between compatible units (excluding currency conversion) using `.to()`. -- **Currency/Inflation Adjustment**: Convert between currencies and adjust for inflation using `.change_currency()`. +- **Currency/Inflation Adjustment**: Convert between currencies and adjust for inflation using `.to_currency()`. - **Arithmetic Operations**: Supports addition, subtraction, multiplication, and division with other `Parameter` objects, with compatibility checks for carrier and heating value. **Note:** Some operations will fail if heating values or carriers are incompatible, raising a `ValueError`. ## Usage Examples @@ -59,11 +59,48 @@ converted = param.to("USD_2020 / megawatt") ```python # Convert to EUR_2023 with inflation adjustment for Germany, using World Bank data -euro_param = param.change_currency("EUR_2023", "DEU", source="worldbank") +euro_param = param.to_currency("EUR_2023", "DEU", source="worldbank") >>> print(euro_param.magnitude, euro_param.units) 950.0 EUR_2023 / kilowatt ``` +Currency conversion and infation adjustment are also available for `Technology` and `TechnologyCollection` objects. +This allows to quickly adjust and harmonise the currency of all parameters in a technology or collection. + +```python +# for a Technology +from technologydata.technology import Technology +tech = Technology( + name="Example Tech", + region="DEU", + parameters={"cost": param} +) +converted_tech = tech.to_currency("USD_2020", source="worldbank") +>>> print(converted_tech.parameters["cost"].units) +USD_2020 / kilowatt + +# and for a TechnologyCollection +from technologydata.technology_collection import TechnologyCollection +tech_collection = TechnologyCollection(technologies=[tech]) +converted_collection = tech_collection.to_currency("USD_2020", source="worldbank") +>>> print(converted_collection.technologies[0].parameters["cost"].units) +USD_2020 / kilowatt +``` + +Compared to the `to_currency()` method of the `Parameter` class, the `to_currency()` methods of `Technology` and `TechnologyCollection` do not require specifying a country for inflation adjustment. +By default the `region` field of the `Technology` object or the `Technology` objects in the `TechnologyCollection` are used for inflation adjustment. +If the value of the `region` field should not be used or is not suitable, because e.g. it is not a valid ISO 3166 alpha-3 country code, the optional `overwrite_country` argument can be used to specify a different country code for inflation adjustment. + +```python +>>> print(tech.region) +DEU +converted_tech = tech.to_currency("USD_2020") # uses tech.region (DEU) for inflation adjustment + +converted_tech = tech.to_currency("USD_2020", overwrite_country="FRA") # uses FRA for inflation adjustment +>>> print(converted_tech.region) # the region remains unchanged +DEU +``` + ### Arithmetic Operations ```python @@ -84,7 +121,7 @@ param + param_hhv ## Notes on Currency Conversion and pydeflate - **pydeflate Integration**: Currency and inflation adjustments are performed using the `pydeflate` package. This package uses data from either the World Bank or the International Monetary Fund. In order to use `pydeflate` with currency codes, we make some opinioated assumptions about the mapping from currency codes to countries which should in most cases be correct, but may not always be accurate for all currencies or years. -- **Country Mapping**: To see which country was used for a given currency code during conversion, inspect the mapping in `pydeflate` or use the helper functions in `technologydata.utils.units` (e.g., `get_iso3_from_currency_code`). The country code you provide to `.change_currency()` determines the inflation adjustment, but the mapping from currency code to country is handled internally by pydeflate and may be checked in its documentation or by printing the mapping used in your environment. +- **Country Mapping**: To see which country was used for a given currency code during conversion, inspect the mapping in `pydeflate` or use the helper functions in `technologydata.utils.units` (e.g., `get_iso3_from_currency_code`). The country code you provide to `.to_currency()` determines the inflation adjustment, but the mapping from currency code to country is handled internally by pydeflate and may be checked in its documentation or by printing the mapping used in your environment. - **Data availability**: Since we use World Bank or IMF data, the availability of currency conversion data may vary by year and currency, depending on the most recent publication. World Bank data is based on the [World Bank DataBank](https://databank.worldbank.org/home.aspx) and IMF data is based on the [World Economic Outlook](https://www.imf.org/en/Publications/WEO). If IMF data is used, this means that also short-term projections can be accessed, usually e.g. GDP deflators for up to 2 years into the future. - **Updating Data**: If `pydeflate` notices that data is older than 50 days, it will display a warning. It will also periodically try to update the data automatically. More information on how to configure the update behaviour and caching locations for `pydeflate` are available in their [documentation](https://github.com/jm-rivera/pydeflate). @@ -131,7 +168,7 @@ param_mixed_hhv = param_mixed.change_heating_value("HHV") ## Limitations & Missing Features - **Provenance/Note/Sources in Arithmetic**: When performing arithmetic operations, the handling and merging of `provenance`, `note`, and `sources` is not yet implemented (see `TODO` comments in the code). -- **Unit Conversion**: The `.to()` method does not support currency conversion; use `.change_currency()` for that. +- **Unit Conversion**: The `.to()` method does not support currency conversion; use `.to_currency()` for that. - **Partial Unit Compatibility**: Only certain combinations of units, carriers, and heating values are supported for arithmetic operations. - **No Uncertainty Handling**: There is currently no support for uncertainty or error propagation. - **No Serialization/Deserialization**: Direct methods for exporting/importing to/from JSON or DataFrame are not implemented in this class. diff --git a/src/technologydata/parameter.py b/src/technologydata/parameter.py index 233a814a..07da137d 100644 --- a/src/technologydata/parameter.py +++ b/src/technologydata/parameter.py @@ -157,8 +157,8 @@ def to(self, units: str) -> Self: sources=self.sources, ) - def change_currency( - self, to_currency: str, country: str, source: str = "worldbank" + def to_currency( + self, target_currency: str, country: str, source: str = "worldbank" ) -> Self: """ Change the currency of the parameter. @@ -173,7 +173,7 @@ def change_currency( Parameters ---------- - to_currency : str + target_currency : str The target currency unit to convert to, e.g. "USD_2020", "EUR_2024", "CNY_2022". country : str The country for which the inflation adjustment should be made for. @@ -190,22 +190,22 @@ def change_currency( Examples -------- - >>> param.change_currency("USD_2024", "USA") - >>> param.change_currency("EUR_2020", "DEU", source="imf") - >>> param.change_currency("EUR_2023", "USA", source="worldbank") + >>> param.to_currency("USD_2024", "USA") + >>> param.to_currency("EUR_2020", "DEU", source="imf") + >>> param.to_currency("EUR_2023", "USA", source="worldbank") """ self._update_pint_attributes() # Ensure the target currency is a valid unit - technologydata.ureg.ensure_currency_is_unit(to_currency) + technologydata.ureg.ensure_currency_is_unit(target_currency) # Current unit and currency/currencies from_units = self._pint_quantity.units from_currencies = technologydata.extract_currency_units(from_units) # Replace all currency units in the from_units with the target currency to_units = technologydata.CURRENCY_UNIT_PATTERN.sub( - to_currency, str(from_units) + target_currency, str(from_units) ) # Create a temporary context to which we add the conversion rates @@ -228,7 +228,7 @@ def change_currency( ) # Get conversion rates for all involved currencies - currencies = set(from_currencies).union({to_currency}) + currencies = set(from_currencies).union({target_currency}) # Avoid recursion error in pint definition by re-adding the reference currency currencies = currencies - {ref_currency} diff --git a/src/technologydata/technology.py b/src/technologydata/technology.py index 3ecaaf76..304053ea 100644 --- a/src/technologydata/technology.py +++ b/src/technologydata/technology.py @@ -111,23 +111,51 @@ def calculate_parameters(self, parameters: Any | None = None) -> Self: # Placeholder: implement calculation logic as needed return self - def adjust_currency(self, target_currency: str) -> Self: + def to_currency( + self, + target_currency: str, + overwrite_country: None | str = None, + source: str = "worldbank", + ) -> Self: """ - Adjust all currency parameters to a target currency. + Adjust the currency of all parameters of the technology to the target currency. + + The conversion includes inflation and exchange rates based on the object's region. + If a different country should be used for inflation adjustment, use `overwrite_country`. Parameters ---------- target_currency : str The target currency (e.g., 'EUR_2020'). + overwrite_country : str, optional + ISO 3166 alpha-3 country code to use for inflation adjustment instead of the object's region. + source: str, optional + The source of the inflation data, either "worldbank"/"wb" or "international_monetary_fund"/"imf". + Defaults to "worldbank". + Depending on the source, different years to adjust for inflation may be available. Returns ------- Technology - A new Technology object with adjusted currency. + A new Technology object with all its parameters adjusted to the target currency. """ - # Placeholder: implement currency adjustment logic - return self + country = self.region + if overwrite_country: + country = overwrite_country + + # Copy the Technology object + new_tech: Self = self.model_copy(deep=True) + + # Iterate over parameters and convert their currency + for name, param in new_tech.parameters.items(): + new_tech.parameters[name] = param.to_currency( + target_currency=target_currency, + country=country, + source=source, + ) + + return new_tech def adjust_region(self, target_region: str) -> Self: """ diff --git a/src/technologydata/technology_collection.py b/src/technologydata/technology_collection.py index cb66361f..c51e53d8 100644 --- a/src/technologydata/technology_collection.py +++ b/src/technologydata/technology_collection.py @@ -236,3 +236,45 @@ def from_json(cls, file_path: pathlib.Path | str) -> Self: TechnologyCollection, cls.model_validate(pydantic_core.from_json(json_data, allow_partial=True)), ) + + def to_currency( + self, + target_currency: str, + overwrite_country: None | str = None, + source: str = "worldbank", + ) -> Self: + """ + Adjust the currency of all parameters of all contained Technology objects to the target currency. + + The conversion includes inflation and exchange rates based on each Technology objects's region. + If a different country should be used for inflation adjustment, use `overwrite_country`. + + Parameters + ---------- + target_currency : str + The target currency (e.g., 'EUR_2020'). + overwrite_country : str, optional + ISO 3166 alpha-3 country code to use for inflation adjustment instead of the object's region. + source: str, optional + The source of the inflation data, either "worldbank"/"wb" or "international_monetary_fund"/"imf". + Defaults to "worldbank". + Depending on the source, different years to adjust for inflation may be available. + + Returns + ------- + TechnologyCollection + A new TechnologyCollection object with all its parameters adjusted to the target currency. + + """ + new_techs = [] + + for i, tech in enumerate(self.technologies): + new_techs.append( + tech.to_currency( + target_currency=target_currency, + overwrite_country=overwrite_country, + source=source, + ) + ) + + return TechnologyCollection(technologies=new_techs) diff --git a/test/test_parameter.py b/test/test_parameter.py index e9378e53..98d39ae2 100644 --- a/test/test_parameter.py +++ b/test/test_parameter.py @@ -142,7 +142,7 @@ def test_pint_attributes_update(self) -> None: technologydata.ureg.Unit("USD_2020 / kWh") ) - def test_parameter_change_currency(self) -> None: + def test_parameter_to_currency(self) -> None: """Test currency conversion with inflation adjustment.""" param = technologydata.Parameter( magnitude=1, @@ -150,7 +150,7 @@ def test_parameter_change_currency(self) -> None: ) # Convert to EUR with inflation adjustment for Germany - converted = param.change_currency("EUR_2023", "DEU") + converted = param.to_currency("EUR_2023", "DEU") assert isinstance(converted, technologydata.Parameter) assert converted.units is not None assert "EUR_2023" in converted.units @@ -169,7 +169,7 @@ def test_parameter_change_currency_explicit_source(self) -> None: ) # Convert using IMF data source - converted = param.change_currency("USD_2022", "USA", source="worldbank") + converted = param.to_currency("USD_2022", "USA", source="worldbank") assert isinstance(converted, technologydata.Parameter) assert converted.units is not None assert "USD_2022" in converted.units @@ -185,7 +185,7 @@ def test_parameter_change_currency_different_source(self) -> None: ) # Convert using IMF data source - converted = param.change_currency("USD_2022", "USA", source="imf") + converted = param.to_currency("USD_2022", "USA", source="imf") assert isinstance(converted, technologydata.Parameter) assert converted.units is not None assert "USD_2022" in converted.units @@ -199,7 +199,7 @@ def test_parameter_change_currency_multiple_currencies(self) -> None: ) # Convert all currencies to CNY_2023 - converted = param.change_currency("CNY_2023", "CHN") + converted = param.to_currency("CNY_2023", "CHN") assert isinstance(converted, technologydata.Parameter) # Both USD_2020 and EUR_2021 should be replaced with CNY_2023 assert converted.units is not None @@ -215,7 +215,7 @@ def test_parameter_change_currency_same_currency(self) -> None: ) # Convert to USD but different year (inflation adjustment) - converted = param.change_currency("USD_2023", "USA") + converted = param.to_currency("USD_2023", "USA") assert isinstance(converted, technologydata.Parameter) assert converted.units == "USD_2023 / kilowatt" # Magnitude should change due to inflation adjustment @@ -230,7 +230,7 @@ def test_parameter_no_currency_change(self) -> None: ) # Convert to the same currency and year - converted = param.change_currency("USD_2020", "USA") + converted = param.to_currency("USD_2020", "USA") assert isinstance(converted, technologydata.Parameter) assert converted._pint_quantity.is_compatible_with("USD_2020 / kW") # Magnitude should remain unchanged @@ -246,7 +246,7 @@ def test_parameter_change_currency_invalid_country(self) -> None: # Invalid country code should raise an error with pytest.raises((ValueError, KeyError)): - param.change_currency("EUR_2023", "USB") + param.to_currency("EUR_2023", "USB") def test_parameter_change_currency_invalid_source(self) -> None: """Test that invalid inflation data sources raise appropriate errors.""" @@ -257,7 +257,7 @@ def test_parameter_change_currency_invalid_source(self) -> None: # Invalid source should raise an error with pytest.raises(KeyError): - param.change_currency("EUR_2023", "DEU", source="invalid_source") + param.to_currency("EUR_2023", "DEU", source="invalid_source") def test_parameter_change_currency_no_units(self) -> None: """Test currency conversion with parameter that has no units.""" @@ -266,7 +266,7 @@ def test_parameter_change_currency_no_units(self) -> None: ) # Should handle parameters without currency units gracefully - converted = param.change_currency("EUR_2023", "DEU") + converted = param.to_currency("EUR_2023", "DEU") assert isinstance(converted, technologydata.Parameter) assert converted.magnitude == 42 assert converted.units is None or "EUR_2023" not in str(converted.units) @@ -283,7 +283,7 @@ def test_parameter_unchanged_other_attributes(self) -> None: ) # Convert to EUR_2023 - converted = param.change_currency("EUR_2023", "DEU") + converted = param.to_currency("EUR_2023", "DEU") # Check that other attributes remain unchanged assert converted.carrier == param.carrier @@ -737,7 +737,7 @@ def test_change_heating_value_same_hv(self) -> None: "folder_id", ["WB_CNY_2020", "WB_EUR_2020", "WB_USD_2020"], ) # type: ignore - def test_change_currency(self, folder_id: str) -> None: + def test_to_currency(self, folder_id: str) -> None: """Validate the currency conversion rates.""" input_path = pathlib.Path( path_cwd, @@ -757,8 +757,8 @@ def test_change_currency(self, folder_id: str) -> None: output_param = technologydata.Parameter( magnitude=row["input_magnitude"], units=row["input_units"], - ).change_currency( - to_currency=technologydata.extract_currency_units( + ).to_currency( + target_currency=technologydata.extract_currency_units( row["reference_units"] )[0], country=row["country"], diff --git a/test/test_technology.py b/test/test_technology.py new file mode 100644 index 00000000..14495733 --- /dev/null +++ b/test/test_technology.py @@ -0,0 +1,271 @@ +# SPDX-FileCopyrightText: The technology-data authors +# +# SPDX-License-Identifier: MIT + +"""Test the initialization and methods of the Technology class.""" + +import pathlib + +import technologydata + +path_cwd = pathlib.Path.cwd() + + +class TestTechnology: + """Test suite for the Technology class in the technologydata module.""" + + def test_technology_creation(self) -> None: + """Test the creation of a Technology instance.""" + tech = technologydata.Technology( + name="Solar photovoltaics", + detailed_technology="Si-HC", + case="example-scenario", + region="DEU", + year=2022, + parameters={ + "investment": technologydata.Parameter( + magnitude=500, + units="EUR_2022/kW", + provenance="Industry report", + note="Average overnight cost", + ), + "lifetime": technologydata.Parameter( + magnitude=25, + units="years", + provenance="Literature", + ), + }, + ) + assert tech.name == "Solar photovoltaics" + assert tech.detailed_technology == "Si-HC" + assert tech.case == "example-scenario" + assert tech.region == "DEU" + assert tech.year == 2022 + assert len(tech.parameters) == 2 + assert "investment" in tech.parameters + assert "lifetime" in tech.parameters + + def test_technology_to_currency(self) -> None: + """Test currency conversion for all parameters in a Technology.""" + tech = technologydata.Technology( + name="Solar photovoltaics", + detailed_technology="Si-HC", + case="example-scenario", + region="DEU", + year=2022, + parameters={ + "investment": technologydata.Parameter( + magnitude=500, + units="EUR_2022/kW", + provenance="Industry report", + note="Average overnight cost", + ), + "fixed_om": technologydata.Parameter( + magnitude=10, + units="EUR_2022/kW/year", + provenance="Literature", + ), + "lifetime": technologydata.Parameter( + magnitude=25, + units="years", + provenance="Literature", + ), + }, + ) + + # Convert to USD_2020 + converted = tech.to_currency("USD_2020") + + # Check that a new Technology object was returned + assert isinstance(converted, technologydata.Technology) + assert converted is not tech # Should be a different object + + # Check that basic attributes are preserved + assert converted.name == tech.name + assert converted.detailed_technology == tech.detailed_technology + assert converted.case == tech.case + assert converted.region == tech.region + assert converted.year == tech.year + + # Check that parameters with currency units are converted + assert "USD_2020" in str(converted.parameters["investment"].units) + assert "EUR_2022" not in str(converted.parameters["investment"].units) + assert "USD_2020" in str(converted.parameters["fixed_om"].units) + assert "EUR_2022" not in str(converted.parameters["fixed_om"].units) + + # Check that parameters without currency units remain unchanged + assert ( + converted.parameters["lifetime"].units == tech.parameters["lifetime"].units + ) + assert ( + converted.parameters["lifetime"].magnitude + == tech.parameters["lifetime"].magnitude + ) + + # Check that magnitude changed for currency parameters + assert ( + converted.parameters["investment"].magnitude + != tech.parameters["investment"].magnitude + ) + assert ( + converted.parameters["fixed_om"].magnitude + != tech.parameters["fixed_om"].magnitude + ) + + def test_technology_to_currency_with_overwrite_country(self) -> None: + """Test currency conversion with a different country for inflation adjustment.""" + tech = technologydata.Technology( + name="Wind turbine", + detailed_technology="Onshore", + case="base-case", + region="DEU", + year=2022, + parameters={ + "investment": technologydata.Parameter( + magnitude=1200, + units="EUR_2020/kW", + provenance="Industry data", + ), + }, + ) + + # Convert using a different country (USA) for inflation adjustment + converted = tech.to_currency("USD_2023", overwrite_country="USA") + + assert isinstance(converted, technologydata.Technology) + assert "USD_2023" in str(converted.parameters["investment"].units) + assert ( + converted.parameters["investment"].magnitude + != tech.parameters["investment"].magnitude + ) + + def test_technology_to_currency_with_source(self) -> None: + """Test currency conversion with different inflation data sources.""" + tech = technologydata.Technology( + name="Battery storage", + detailed_technology="Li-ion", + case="scenario-1", + region="USA", + year=2022, + parameters={ + "investment": technologydata.Parameter( + magnitude=300, + units="USD_2020/kWh", + ), + }, + ) + + # Convert using worldbank source + converted_wb = tech.to_currency("EUR_2022", source="worldbank") + assert isinstance(converted_wb, technologydata.Technology) + assert "EUR_2022" in str(converted_wb.parameters["investment"].units) + + # Convert using IMF source + converted_imf = tech.to_currency("EUR_2022", source="imf") + assert isinstance(converted_imf, technologydata.Technology) + assert "EUR_2022" in str(converted_imf.parameters["investment"].units) + + def test_technology_to_currency_preserves_other_attributes(self) -> None: + """Test that currency conversion preserves other parameter attributes.""" + tech = technologydata.Technology( + name="Solar photovoltaics", + detailed_technology="Si-HC", + case="example-scenario", + region="DEU", + year=2022, + parameters={ + "investment": technologydata.Parameter( + magnitude=500, + units="EUR_2022/kW", + carrier="electricity", + provenance="Industry report", + note="Average overnight cost", + sources=technologydata.SourceCollection( + sources=[ + technologydata.Source( + title="Test Source", + authors="Test Authors", + ) + ] + ), + ), + }, + ) + + converted = tech.to_currency("USD_2020") + + # Check that non-currency attributes are preserved + assert ( + converted.parameters["investment"].carrier + == tech.parameters["investment"].carrier + ) + assert ( + converted.parameters["investment"].provenance + == tech.parameters["investment"].provenance + ) + assert ( + converted.parameters["investment"].note + == tech.parameters["investment"].note + ) + assert len(converted.parameters["investment"].sources.sources) == len( + tech.parameters["investment"].sources.sources + ) + + def test_technology_to_currency_empty_parameters(self) -> None: + """Test currency conversion on a Technology with no parameters.""" + tech = technologydata.Technology( + name="Solar photovoltaics", + detailed_technology="Si-HC", + case="example-scenario", + region="DEU", + year=2022, + parameters={}, + ) + + # Should handle empty parameters gracefully + converted = tech.to_currency("USD_2020") + + assert isinstance(converted, technologydata.Technology) + assert len(converted.parameters) == 0 + + def test_technology_to_currency_mixed_currencies(self) -> None: + """Test currency conversion when parameters have different currencies.""" + tech = technologydata.Technology( + name="Hybrid system", + detailed_technology="Solar+Wind", + case="scenario-1", + region="DEU", + year=2022, + parameters={ + "investment_solar": technologydata.Parameter( + magnitude=500, + units="EUR_2022/kW", + ), + "investment_wind": technologydata.Parameter( + magnitude=1000, + units="USD_2020/kW", + ), + "capacity": technologydata.Parameter( + magnitude=100, + units="MW", + ), + }, + ) + + # Convert all to GBP_2021 + converted = tech.to_currency("GBP_2021") + + # All currency parameters should be converted to GBP_2021 + assert "GBP_2021" in str(converted.parameters["investment_solar"].units) + assert "EUR_2022" not in str(converted.parameters["investment_solar"].units) + assert "GBP_2021" in str(converted.parameters["investment_wind"].units) + assert "USD_2020" not in str(converted.parameters["investment_wind"].units) + + # Non-currency parameter should remain unchanged + assert ( + converted.parameters["capacity"].units == tech.parameters["capacity"].units + ) + assert ( + converted.parameters["capacity"].magnitude + == tech.parameters["capacity"].magnitude + ) diff --git a/test/test_technology_collection.py b/test/test_technology_collection.py index 89e94fd3..c2608f63 100644 --- a/test/test_technology_collection.py +++ b/test/test_technology_collection.py @@ -137,3 +137,110 @@ def test_get( ) assert isinstance(result, technologydata.TechnologyCollection) assert len(result.technologies) == 1 + + def test_to_currency(self) -> None: + """Test currency conversion for all technologies in the collection.""" + input_file = pathlib.Path( + path_cwd, + "test", + "test_data", + "solar_photovoltaics_example", + "technologies.json", + ) + technology_collection = technologydata.TechnologyCollection.from_json( + input_file + ) + + # Convert to USD_2020 + converted = technology_collection.to_currency("USD_2020") + + # Check that a new TechnologyCollection object was returned + assert isinstance(converted, technologydata.TechnologyCollection) + assert converted is not technology_collection + + # Check that the number of technologies is the same + assert len(converted) == len(technology_collection) + + # Check that all technologies have been converted + for tech in converted: + for param_name, param in tech.parameters.items(): + if param.units and "EUR_2022" in param.units: + # Should not happen - all EUR_2022 should be converted + assert False, f"Parameter {param_name} still has EUR_2022" + + def test_to_currency_with_overwrite_country(self) -> None: + """Test currency conversion with a different country for inflation adjustment.""" + input_file = pathlib.Path( + path_cwd, + "test", + "test_data", + "solar_photovoltaics_example", + "technologies.json", + ) + technology_collection = technologydata.TechnologyCollection.from_json( + input_file + ) + + # Convert using a different country (USA) for inflation adjustment + converted = technology_collection.to_currency( + "USD_2023", overwrite_country="USA" + ) + + assert isinstance(converted, technologydata.TechnologyCollection) + assert len(converted) == len(technology_collection) + + # Check that currencies have been converted + for tech in converted: + for param in tech.parameters.values(): + if param.units and "USD" in param.units: + assert "USD_2023" in param.units + + def test_to_currency_with_source(self) -> None: + """Test currency conversion with different inflation data sources.""" + input_file = pathlib.Path( + path_cwd, + "test", + "test_data", + "solar_photovoltaics_example", + "technologies.json", + ) + technology_collection = technologydata.TechnologyCollection.from_json( + input_file + ) + + # Convert using worldbank source + converted_wb = technology_collection.to_currency( + "USD_2022", source="international_monetary_fund" + ) + assert isinstance(converted_wb, technologydata.TechnologyCollection) + assert len(converted_wb) == len(technology_collection) + + # Convert using IMF source + converted_imf = technology_collection.to_currency("USD_2022", source="imf") + assert isinstance(converted_imf, technologydata.TechnologyCollection) + assert len(converted_imf) == len(technology_collection) + + def test_to_currency_preserves_technology_attributes(self) -> None: + """Test that currency conversion preserves technology attributes.""" + input_file = pathlib.Path( + path_cwd, + "test", + "test_data", + "solar_photovoltaics_example", + "technologies.json", + ) + technology_collection = technologydata.TechnologyCollection.from_json( + input_file + ) + + converted = technology_collection.to_currency("USD_2020") + + # Check that technology attributes are preserved + for orig_tech, conv_tech in zip( + technology_collection.technologies, converted.technologies + ): + assert orig_tech.name == conv_tech.name + assert orig_tech.detailed_technology == conv_tech.detailed_technology + assert orig_tech.case == conv_tech.case + assert orig_tech.region == conv_tech.region + assert orig_tech.year == conv_tech.year From b8ad7141eebc2fa0c45cd8755a8c8c9e31740b42 Mon Sep 17 00:00:00 2001 From: Fabrizio Finozzi <167071962+finozzifa@users.noreply.github.com> Date: Mon, 3 Nov 2025 15:00:53 +0100 Subject: [PATCH 24/43] Custom error message for CCC_YYYY (#72) * code: modify units.py * code: new attempt to modify registry function * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * code: add method to patch pint error handling register * code: add validation * code: update test * code: refine message * code: Fix and expand test * code: fix issues in CustomUndefinedUnitError * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * add pre-commit * code: add some extra test --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: euronion --- src/technologydata/utils/units.py | 109 ++++++++++++++++++++++++++++++ test/test_parameter.py | 36 +++++++++- 2 files changed, 143 insertions(+), 2 deletions(-) diff --git a/src/technologydata/utils/units.py b/src/technologydata/utils/units.py index 8e91272d..548d1ef9 100644 --- a/src/technologydata/utils/units.py +++ b/src/technologydata/utils/units.py @@ -6,6 +6,7 @@ import json import logging import re +import typing from functools import lru_cache from pathlib import Path from typing import Any @@ -309,6 +310,112 @@ def get_iso3_from_currency_code( ) from e +def patch_pint_registry_error_handling(registry: pint.registry.UnitRegistry) -> None: + """ + Patch a Pint registry to use CustomUndefinedUnitError. + + Parameters + ---------- + registry : pint.registry.UnitRegistry + The Pint unit registry to patch. + + """ + # Store the original method + original_get_name = registry.get_name + + def patched_get_name( + self: pint.registry.UnitRegistry, name: str, *args: Any, **kwargs: Any + ) -> Any: + try: + return original_get_name(name, *args, **kwargs) + except pint.errors.UndefinedUnitError as e: + # Raise the custom error with the same arguments + raise CustomUndefinedUnitError(e.args[0]) from e + + # Replace the method + registry.get_name = patched_get_name.__get__(registry) + + +class CustomUndefinedUnitError(pint.errors.UndefinedUnitError): # type: ignore + """ + Custom message for undefined unit errors. + + This custom error is raised when a unit is not defined in the unit registry. + It provides more specific error messages, especially for currency units + that are missing the currency year. + + Parameters + ---------- + unit_names : list of str + The names of the units that are not defined in the unit registry. + + Attributes + ---------- + unit_names : list of str + The names of the units that are not defined in the unit registry. + + Notes + ----- + This error is a subclass of `pint.errors.UndefinedUnitError` and is designed + to provide more specific error messages for currency units that are missing + the currency year. + + """ + + def __init__(self, unit_names: str | typing.Iterable[str]) -> None: + """ + Initialize a CustomUndefinedUnitError instance. + + This constructor creates a new `CustomUndefinedUnitError` object, + inheriting all default behaviors from `pint.errors.UndefinedUnitError`. + + Parameters + ---------- + unit_names : str or iterable of str + The name or names of the undefined units that caused the error. + + """ + # Use all defaults definitions from a standard pint.errors.UndefinedUnitError + super().__init__(unit_names) + + def __str__(self) -> str: + """ + Generate a custom error message string. + + This method generates a custom error message string based on the + unit names that are not defined in the unit registry. It provides + specific messages for currency units that are missing the currency year. + + Returns + ------- + str + The custom error message string. + + """ + # Retrieve unit names, defaulting to an empty list if not present + unit_names = getattr(self, "unit_names", []) + + # Precompute valid currency codes for efficiency + all_currency_codes = set(get_iso3_to_currency_codes().values()) + + # Identify currency units without a year specification + currency_errors = [ + code + for unit in unit_names + for code in re.findall(r"[A-Z]{3}", str(unit)) + if code in all_currency_codes + and not CURRENCY_UNIT_PATTERN.search(str(unit)) + ] + + # Generate specific error message for currency units + if currency_errors: + missing_code = currency_errors[0] + return f"Currency unit '{missing_code}' is missing the 4-digit currency year (e.g. {missing_code}_2020)." + + # Fallback to parent class error message if no specific currency error found + return super().__str__() # type: ignore + + class SpecialUnitRegistry(pint.UnitRegistry): # type: ignore """A special pint.UnitRegistry subclass that includes methods for handling currency units and conversion using pydeflate.""" @@ -405,3 +512,5 @@ def ensure_currency_is_unit(self, units: str) -> None: hvreg = pint.UnitRegistry( filename=Path(__file__).parent / "heating_values.txt" ) # For tracking heating values and ensuring compatibility between them + +patch_pint_registry_error_handling(ureg) diff --git a/test/test_parameter.py b/test/test_parameter.py index 98d39ae2..e99a1a42 100644 --- a/test/test_parameter.py +++ b/test/test_parameter.py @@ -13,8 +13,7 @@ import technologydata from technologydata.constants import EnergyDensityLHV - -# from technologydata.utils.units import extract_currency_units, ureg +from technologydata.utils.units import CustomUndefinedUnitError path_cwd = pathlib.Path.cwd() @@ -55,6 +54,39 @@ def test_parameter_creation(self) -> None: def test_parameter_invalid_units(self) -> None: """Test that an error is raised when invalid units are provided.""" + with pytest.raises(CustomUndefinedUnitError) as excinfo: + technologydata.Parameter( + magnitude=1000, + units="USD", + ) + assert ( + str(excinfo.value) + == "Currency unit 'USD' is missing the 4-digit currency year (e.g. USD_2020)." + ) + assert excinfo.type == CustomUndefinedUnitError + + with pytest.raises(CustomUndefinedUnitError) as excinfo: + technologydata.Parameter( + magnitude=1000, + units="USD_20/kW", + ) + assert ( + str(excinfo.value) + == "Currency unit 'USD' is missing the 4-digit currency year (e.g. USD_2020)." + ) + assert excinfo.type == CustomUndefinedUnitError + + with pytest.raises(CustomUndefinedUnitError) as excinfo: + technologydata.Parameter( + magnitude=1000, + units="abc_USD_20/kW", + ) + assert ( + str(excinfo.value) + == "Currency unit 'USD' is missing the 4-digit currency year (e.g. USD_2020)." + ) + assert excinfo.type == CustomUndefinedUnitError + with pytest.raises(pint.errors.UndefinedUnitError) as excinfo: technologydata.Parameter( magnitude=1000, From 9a656efa885d1ba41571bd7f21241195e28b70ce Mon Sep 17 00:00:00 2001 From: Johannes HAMPP <42553970+euronion@users.noreply.github.com> Date: Wed, 5 Nov 2025 10:36:05 +0100 Subject: [PATCH 25/43] Technology collection models (#18) * doc: Add proposal for GrowthModels * doc: Add proposal for LearningModels * code: Add implementation for growth models and linear growth * doc: Document growth models and linear growth * code: Remove model default affected parameters * code: Fix up docstrings * code: Sort imports * code: Fix type annotations * spelling and doc-string fixes * code: Implement exponential growth * code: Cleanup * code: Implement logistical growth * code: Expand package structure * code: Revise implementation for GrowthModel(s), start with LinearGrowth * code: Expand the abstract GrowthModel class * code: Allow starting values to be only a subset of all missing parameters * code: Reimplement LogisticGrowth and ExponentialGrowth * code Fix mypy issues * code: Add missing scipy dependency * Revert "code: Add missing scipy dependency" This reverts commit c053bfc6558a5b5395e2df97b39d67308ea059be. * code: Add missing scipy dependency * code: Cleanup + add GompertzGrowth model * doc: Update docs on GrowthModels * code: Add simple tests for growth_model.py * code: Add GeneralLogisticGrowth and harmonise parameter names * code: Update tests * doc: Update class diagramm * doc: ValueError in docstring * code: Implement fitting and projections on TCs * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * code: Simplify signature * code: Address pydantic deprecations * code: basic tests for fit and project on TechnologyCollection * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * code: add more tests * code: Update uv.lock file * code: Add x0 to all growth model functions * doc: Update docs for GrowthModel and integration with TechnologyCollection * code: TODO ideas for growth_models.py * git: Ignore dev folder * code: Fix tests * code: Address mypy errors * code: Add support for pydantic in mypy * code: update mypy issues * code: update growth models * doc: change currency to_currency * code: fix mypy issues --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Fabrizio Finozzi --- .gitignore | 3 + .pre-commit-config.yaml | 2 +- docs/models.md | 310 ++ docs/user_guide/class-diagram.puml | 112 +- pyproject.toml | 2 + src/technologydata/datapackage.py | 2 +- src/technologydata/parameter.py | 24 +- src/technologydata/source.py | 2 +- src/technologydata/source_collection.py | 12 +- src/technologydata/technologies/__init__.py | 5 + .../technologies/growth_models.py | 502 ++++ src/technologydata/technology.py | 2 +- src/technologydata/technology_collection.py | 195 +- test/test_growth_models.py | 281 ++ test/test_technology_collection.py | 138 + uv.lock | 2621 +++++++++-------- 16 files changed, 2966 insertions(+), 1247 deletions(-) create mode 100644 docs/models.md create mode 100644 src/technologydata/technologies/__init__.py create mode 100644 src/technologydata/technologies/growth_models.py create mode 100644 test/test_growth_models.py diff --git a/.gitignore b/.gitignore index 3ce78b52..63839d78 100644 --- a/.gitignore +++ b/.gitignore @@ -72,3 +72,6 @@ coverage.xml # mypy .mypy_cache/ .dmypy.json + +# folder for misc developments +dev/ diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 30c759f0..640f85d4 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -52,7 +52,7 @@ repos: hooks: - id: mypy args: [--strict, --ignore-missing-imports, --config-file=pyproject.toml] - additional_dependencies: [tokenize-rt==3.2.0] + additional_dependencies: [tokenize-rt==3.2.0, pydantic>=2.11.7] exclude: ^docs/ # Pyupgrade: Automatically upgrades Python syntax diff --git a/docs/models.md b/docs/models.md new file mode 100644 index 00000000..21ba4e3c --- /dev/null +++ b/docs/models.md @@ -0,0 +1,310 @@ +# Title + + + +## Models + +Different models can be used to modify assumptions to fit specific scenarios. + +## Supported Model Types + +- **Growth models**: For projecting technology parameters forward in time using mathematical models. + +These are implemented as Python classes and can be used for fitting to data and making projections. + +## Growth Models + +Growth models are mathematical models for projecting technology parameters over time. They are implemented as Pydantic classes in `technologydata.technologies.growth_models` and can be used for both fitting to data and making projections. The following growth models are available: + +### Available Growth Models + +- `LinearGrowth`: Linear model, $f(x) = m \cdot (x - x_0) + c$ +- `ExponentialGrowth`: Exponential model, $f(x) = A \cdot \exp(k \cdot (x - x_0))$ +- `LogisticGrowth`: Logistic (sigmoid) model, $f(x) = \frac{L}{1 + \exp(-k \cdot (x - x_0))}$ +- `GeneralLogisticGrowth`: Generalized logistic model, $f(x) = A + \frac{K - A}{(C + Q \cdot \exp(-B \cdot (x - x_0)))^{1/\nu}}$ +- `GompertzGrowth`: Gompertz model, $f(x) = A \cdot \exp(-b \cdot \exp(-k \cdot (x - x_0)))$ + +Each model exposes: + +- A `function(x, ...)` method for the mathematical form +- A `fit()` method to fit parameters to the data points registered with the model +- A `project(to_year)` method to project to a given year. Requires all parameters of the models to be set, either manually or via fitting. +- Data points can be added via each models constructor or later via the `add_data((x, y))` function + +#### Model Parameters + +Each model has its own parameters, e.g. for `LinearGrowth` those are `x0`, `A` and `m`. +These parameters can either be set when instantiating the model or later by setting the attributes directly. +Not all parameters need to be set, e.g. if you are planning on fitting one parameter based on the data of the model, it makes sense to only set the other parameters. +Omitting parameters can be done by either not providing them at all or setting them to `None`. + +```python +model = LinearGrowth(x0=2020, A=None) # Set only x0; A and m are not set + +# Set A after instantiation of the model +model.A = 5_000_000 + +# All principal model parameters are available as +print(model.model_parameters) +> ['x0', 'A', 'm'] + +# All already set model parameters are available as +print(model.provided_parameters) +> ['x0', 'A'] + +# All parameters that are still missing (None) are available as +print(model.missing_parameters) +> ['m'] +``` + +The meaning of the parameters is documented in the Pydantic field descriptions: + +```python +print(LinearGrowth.model_fields["A"].description) +> Starting value of the linear function. +``` + +and the function docstring: + +```python +::: technologydata.technologies.growth_models.LinearGrowth.function +``` + +#### Creating a model and projecting a value + +To create a model, e.g. for the growth of electric vehicles over time, instantiate the model with the known parameters: + +```python +from technologydata.technologies.growth_models import LinearGrowth + +# start with 5 million in 2020, and grow linearly by 2 million per year +model = LinearGrowth(x0=2020, A=5_000_000, m=2_000_000) + +# Project to 2030, should be 5 million + 2 million * (2030 - 2020) = 25 million +model.project(2030) +> 25000000 + +``` + +The underlying function for each model can also be inspected and called directly, e.g.: + +```python +LinearGrowth().function(2030, x0=2020, A=5_000_000, m=2_000_000) +> 25000000 +``` + +Note that when using the `function` method directly, all parameters must be explicitly provided. +(TODO: maybe function should be a classmethod or read the parameters from the instance if they are set?) + +#### Fitting a model to data + +To fit a model to data points, provide the data points to the model via the `data_points` argument when instantiating the model or add them later via the `add_data((x, y))` method: + +```python +import numpy as np +from technologydata.technologies.growth_models import LinearGrowth + +# Dummy data to fit to +x0 = 2020 +m = 2_000_000 +A = 5_000_000 +x = np.arange(2020, 2025) +y = A + m * (x - x0) + +# Create the model with data points +# note that a linear growth is not a great model for this type data +model = LinearGrowth(data_points=[*zip(x, y)]) + +# More data points can be added later as (x, y) tuples +model.add_data((2030 - x0, A + m * (2030 - x0))) + +# The model can now be fitted to the data points +model.fit() + +# After fitting, the model parameters are set and can be inspected ... +print(model.x0) +> -12173.437639145683 +print(model.m) +> 121803685.25127366 +print(model.A) +> 121803685.25127366 + +# ... or used for projection +print(f"Projected: {model.project(2050)}, expected: {A + m * (2050 - x0)}") +> Projected: 8779498.59552154, expected: 65000000 +``` + +In the above example, the model yielded a projected value and the fitted parameters were not a good what was expected compared to the original values for `x0`, `A` and `m`. +This can have multiple reasons, common problems are: + +1. Insufficient or poor quality data points +2. The model being not suitable for matching the data trend +3. Parameters of the model competing against each other during fitting + +In the example above, the third case applies. +The model has three parameters, `x0`, `A` and `m`, of which `x0` and `A` are competing against each other. +To get a better fit of the model to the data the model parameters can either be partially fixed such that only some of the parameters need to be fitted, or initial guesses for the parameters can be provided to guide the fitting process. + +To fix parameters, simply set them when instantiating the model or later by setting the attributes directly: + +```python +# Fix x0 for the model +model = LinearGrowth(x0=2020, data_points=[*zip(x, y)]) + +# Fix m for the model +model.m = 2_000_000 + +# Now only A is a free and missing parameter +print(model.missing_parameters) +> ['A'] + +# Fitting the model again now yields a better fit +model.fit() +print(model.A) +> 5000000.0 +``` + +Instead of fixing parameters, initial guesses can be provided via the `p0` argument to the `fit` method. +Initial guesses are ways of providing the model with some context information about the data and the expected parameter values. +This method does not guarantee that the parameters will be fitted to the provided values, but it can help to guide the fitting process and find a better fit. +By default, if no initial guesses are provided, the fitting algorithm will start with `1.0` for parameters for which no starting value is provided. +In the example `x0` should be around the current year or slightly in the past and `m` should be a large positive number. +This knowledge is provided as initial guess to the model fitting: + +```python +model = LinearGrowth(data_points=[*zip(x, y)]) + +# Guess x0 to be around the 2010s and m to be a large number +# nothing is known about A, so it is not provided +model.fit(p0={"x0": 2015, "m": 100_000}) + +# Resulting in parameters +print(model.x0, model.A, model.m) +> 2016.759002811191 -1481994.3776179291 2000000.0000000002 +``` + +As we can see, the fit for `m` now is the expected value. +The value for `x0` is still a bit off, and because `A` and `x0` are still competing against each other, the fit for `A` is also not as expected. +The model does however yield projected values that are corresponding to the expected values from the original function: + +```python +print(f"Projected: {model.project(2050)}, expected: {A + m * (2050 - x0)}") +> Projected: 64999999.99999994, expected: 65000000 +``` + +Best results for the quality of a fitted model can be achieved by combining the approaches and partially fixing a model as well as providing initial guesses. + +## Using models to create consistent datasets + +The main intention for models is for them to be used on combination with a `TechnologyCollection` to create consistent scenario for parameters over time. + +Given a `TechnologyCollection` with multiple entries for a technology, e.g. solar photovoltaics and one or more parameters, e.g. electricity supply and lifetime, models can be used to create consistent scenarios for this technology and parameters. + +Take for example the following `TechnologyCollection` for utility scale solar photovoltaics: + +```python +from technologydata import TechnologyCollection, Technology, Parameter +from technologydata.technologies.growth_models import ExponentialGrowth, LinearGrowth + +tc = TechnologyCollection( + technologies=[ + Technology( + case="historic", + name="Solar Photovoltaics", + detailed_technology="Any", + region="Global", + year=2010, + parameters={ + "electricity supply": Parameter(magnitude=1_000, units="PJ", carrier="electricity"), + "lifetime": Parameter(magnitude=20, units="years"), + "efficiency": Parameter(magnitude=0.22, units="%"), + "specific investment cost": Parameter(magnitude=600, units="USD_2024/kW"), + }, + ), + Technology( + case="historic", + name="Solar Photovoltaics", + detailed_technology="Any", + region="Global", + year=2022, + parameters={ + "electricity supply": Parameter(magnitude=6_000, units="PJ", carrier="electricity"), + "lifetime": Parameter(magnitude=24, units="years"), + "efficiency": Parameter(magnitude=0.20, units="%"), + "specific investment cost": Parameter(magnitude=400, units="USD_2024/kW"), + }, + ), + Technology( + case="IEA STEPS 2024", + name="Solar Photovoltaics", + detailed_technology="Any", + region="Global", + year=2030, + parameters={ + "electricity supply": Parameter(magnitude=26_000, units="PJ", carrier="electricity"), + "lifetime": Parameter(magnitude=30, units="years"), + "efficiency": Parameter(magnitude=0.21, units="%"), + "specific investment cost": Parameter(magnitude=300, units="USD_2024/kW"), + }, + ), + ] +) +``` + +By using models it is possible to create consistent scenarios for the parameters over time, e.g. for 2040 and 2050. +Using the `.project()` method of the `TechnologyCollection`, models can be specified for each parameter to be projected to specified years: + +```python +tc.project( + to_years=[2010, 2020, 2030, 2040, 2050], + parameters={ + "electricity supply": ExponentialGrowth(x0=2010, A=1_000), + "lifetime": LinearGrowth(x0=2010), + "efficiency": "mean", + "specific investment cost": "NaN", + }, +) +``` + +This returns a new `TechnologyCollection` with the entries for the years 2010, 2020, 2030, 2040 and 2050 and the four parameters projected according to the specified models: + +- for `electricity supply` an exponential growth model is assumed and fitted to the three data points from the original collection +- for `lifetime` a linear growth model is assumed, with the starting year fixed to 2010 and the remaining model parameters fitted to the data points +- for `efficiency` the mean of the data points is taken for all projected years, representing high quality and expensive solar panels being deployed in earlier years, then cheaper and less efficient panels being deployed in later years and then efficiency increasing again as technology improves and production methods get better +- for `specific investment cost` no model is provided and instead the value is set to `NaN` for all projected years; this carries over the `Parameter` into the projected collection, and only keeps it as a placeholder; this can be useful for cases where other methods will be used to fill the parameter values later, e.g. via an external model or manual input. + +The returning `TechnologyCollection` now has new values for all specified years. +The included values do not represent the original values, but modelled values using the original values. +That is also the reason why values from the original collection are different from the new collection, e.g. for 2010: +With the provided data and the requested model (`ExponentialGrowth`), the modelled yields a value of `1426.5 PJ` for 2010 instead of the original `1000 PJ`. + +An already existing and initialised model can also be provided to the `project` method. +This allows models to be reused across multiple projections, e.g. for different regions or technologies. + +A model can also be fit to data points before being provided to the `project` method, allowing more control over the fitting process like providing initial guesses `p0`: + +```python +model = tc.fit( + parameter="electricity supply", + model=ExponentialGrowth(x0=2010), + p0={"A": 1_000, "k": 0.2}, +) +print(model.model_dump(include=model.provided_parameters)) +> {'x0': 2010.0, 'A': 434.75658280114783, 'm': 565.2434171988522, 'k': 0.19058662818514885} +``` + +TODO: Might be helpful to allow passing `p0` directly to the `project` method or while instantiating a model +TODO: Would a method to allow keeping the original values in the `TechnologyCollection` be useful, or should this rather be done by the user merging the original and the returned collection? I believe the latter would be better design. + +### Model API + +- `add_data((x, y))`: Add a data point for fitting +- `fit()`: Fit model parameters to data +- `project(to_year)`: Project to a given year (parameters must be set) + +See the Python docstrings for each model for parameter details. diff --git a/docs/user_guide/class-diagram.puml b/docs/user_guide/class-diagram.puml index 20dac56c..1892e442 100644 --- a/docs/user_guide/class-diagram.puml +++ b/docs/user_guide/class-diagram.puml @@ -136,7 +136,8 @@ class TechnologyCollection { + to_csv(): str + to_dataframe(): pd.DataFrame + from_json(): TechnologyCollection - + create_projection(): TechnologyCollection + + create_projection(method: GrowthModel): TechnologyCollection + + learn(method: LearningModel): TechnologyCollection + __iter__() + __len__() ' TODO: Think about more methods here @@ -155,6 +156,80 @@ note right of TechnologyCollection::create_projection based on the Technology objects in the collection. Either returns a new TechnologyCollection or adds the Technology objects to the current collection. + Uses a GrowthModel (see below) to project values. +end note + +abstract class GrowthModel { + - data_points: list[tuple[float, float]] + - model_parameters: list[str] + - provided_parameters: dict[str, float] + - missing_parameters: list[str] + + add_data(data_points: tuple[float, float]): self + + project(to_x: float): float + + fit(p0): self + + _kwpartial(func: Callable, **fixed_kwargs): Callable + + function(x, ...): float // abstract method +} + +class LinearGrowth { + Project with linear growth model. + + - A + - m + + function(x, A, m) +} + +class ExponentialGrowth { + Project with exponential growth model. + + - A + - m + - k + - x0 + + function(x, A, m, k, x0) +} + +class LogisticGrowth { + Project with logistic growth model. + + - A + - L + - k + - x0 + + function(x, A, L, k, x0) +} + +class GompertzGrowth { + Project with Gompertz growth model. + + - A + - k + - x0 + - b + + function(x, A, k, x0, b) +} + +class GeneralLogisticGrowth { + Project with a general logistic growth model, + + - A + - K + - B + - Q + - C + - nu + + function(x, A, K, B, Q, C, nu) +} + +note right of GrowthModel + Abstract base for growth models used in projections. + Subclasses implement specific growth curve logic. + Each subclass should support two approaches: fitting around + data from the TechnologyCollection, and extrapolating using a + single value as support with parameters for the GrowthModels specified + by the user. + `project()` returns a new `TechnologyCollection` with + the original Technology objects and new objects for the projection. end note class SourceCollection { @@ -183,7 +258,7 @@ note left of SourceCollection::to_csv Export the source collection into a csv file. end note -note left of SourceCollection::to_dataframe +note right of SourceCollection::to_dataframe Export the source collection into a Pandas dataframe. end note @@ -219,4 +294,37 @@ Technology --> "*" Parameter : uses for its members TechnologyCollection --> "*" Technology : consists of SourceCollection --> "*" Source : consists of Datapackage --> "1" TechnologyCollection : contains +TechnologyCollection --> GrowthModel : used for learn(...) +GrowthModel <|-- LinearGrowth +GrowthModel <|-- ExponentialGrowth +GrowthModel <|-- LogisticGrowth +GrowthModel <|-- GompertzGrowth +GrowthModel <|-- GeneralLogisticGrowth + +abstract class LearningModel { + + project_costs(collection: TechnologyCollection): TechnologyCollection +} + +class ExperienceLearning { + Implements cost change via experience curve \n(cumulative experience). +} + +class ProductionLearning { + Implements cost change via production-based \nlearning (cumulative production). +} + +class TimebasedLearning { + Implements cost change via time-based learning \n(improvement over time). +} + +note right of LearningModel + Abstract base for learning models used in cost projections. + Subclasses implement specific learning logic. + `project_costs()` returns a new TechnologyCollection with cost projections. +end note + +TechnologyCollection --> LearningModel : uses for learn(...) \n (cost modifications) +LearningModel <|-- ExperienceLearning +LearningModel <|-- ProductionLearning +LearningModel <|-- TimebasedLearning @enduml diff --git a/pyproject.toml b/pyproject.toml index 299f7a5b..7e168f7d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -36,6 +36,7 @@ dependencies = [ "pydeflate>=2.1.3", "requests>=2.32.3", "savepagenow>=1.3.0", + "scipy>=1.16.1", ] [project.urls] @@ -114,6 +115,7 @@ source = [ # Static type checker settings [tool.mypy] +plugins = ["pydantic.mypy"] ignore_missing_imports = true no_implicit_optional = true warn_unused_ignores = true diff --git a/src/technologydata/datapackage.py b/src/technologydata/datapackage.py index d52e8361..10c0c340 100644 --- a/src/technologydata/datapackage.py +++ b/src/technologydata/datapackage.py @@ -23,7 +23,7 @@ logger = logging.getLogger(__name__) -class DataPackage(pydantic.BaseModel): # type: ignore +class DataPackage(pydantic.BaseModel): """ Container for a collection of Technology objects and/or Source objects, with batch operations and loading utilities. diff --git a/src/technologydata/parameter.py b/src/technologydata/parameter.py index 07da137d..34d59200 100644 --- a/src/technologydata/parameter.py +++ b/src/technologydata/parameter.py @@ -26,7 +26,7 @@ logger = logging.getLogger(__name__) -class Parameter(BaseModel): # type: ignore +class Parameter(BaseModel): """ Encapsulate a value with its unit, provenance, notes, sources, and more optional attributes required to describe technology parameters, like carrier, and heating value. @@ -143,7 +143,7 @@ def to(self, units: str) -> Self: ) != technologydata.extract_currency_units(units): raise NotImplementedError( "Currency conversion is not supported in the `to` method. " - "Use `change_currency` for currency conversions." + "Use `to_currency` for currency conversions." ) self._pint_quantity = self._pint_quantity.to(units) @@ -155,7 +155,7 @@ def to(self, units: str) -> Self: provenance=self.provenance, note=self.note, sources=self.sources, - ) + ) # type: ignore def to_currency( self, target_currency: str, country: str, source: str = "worldbank" @@ -266,7 +266,7 @@ def to_currency( provenance=self.provenance, note=self.note, sources=self.sources, - ) + ) # type: ignore def change_heating_value(self, to_heating_value: str) -> Self: """ @@ -370,7 +370,7 @@ def change_heating_value(self, to_heating_value: str) -> Self: provenance=self.provenance, # TODO implement for this function note=self.note, sources=self.sources, - ) + ) # type: ignore def _check_parameter_compatibility(self, other: Self) -> None: """ @@ -433,7 +433,7 @@ def __add__(self, other: Self) -> Self: sources=SourceCollection( sources=(self.sources.sources + other.sources.sources) ), - ) + ) # type: ignore def __sub__(self, other: Self) -> Self: """ @@ -468,7 +468,7 @@ def __sub__(self, other: Self) -> Self: sources=SourceCollection( sources=(self.sources.sources + other.sources.sources) ), - ) + ) # type: ignore def __truediv__(self, other: int | float | Self) -> Self: """ @@ -504,7 +504,7 @@ def __truediv__(self, other: int | float | Self) -> Self: provenance=self.provenance, note=self.note, sources=self.sources, - ) + ) # type: ignore # We don't check general compatibility here, as division is not a common operation for parameters. # Only ensure that the heating values are compatible. @@ -537,7 +537,7 @@ def __truediv__(self, other: int | float | Self) -> Self: sources=SourceCollection( sources=(self.sources.sources + other.sources.sources) ), - ) + ) # type: ignore def __mul__(self, other: int | float | Self) -> Self: """ @@ -576,7 +576,7 @@ def __mul__(self, other: int | float | Self) -> Self: provenance=self.provenance, note=self.note, sources=self.sources, - ) + ) # type: ignore # We don't check general compatibility here, as multiplication is not a common operation for parameters. # Only ensure that the heating values are compatible. @@ -605,7 +605,7 @@ def __mul__(self, other: int | float | Self) -> Self: sources=SourceCollection( sources=(self.sources.sources + other.sources.sources) ), - ) + ) # type: ignore def __eq__(self, other: object) -> bool: """ @@ -669,4 +669,4 @@ def __pow__(self, exponent: float | int) -> Self: provenance=self.provenance, note=self.note, sources=self.sources, - ) + ) # type: ignore diff --git a/src/technologydata/source.py b/src/technologydata/source.py index c18a76c8..7fda6b9b 100644 --- a/src/technologydata/source.py +++ b/src/technologydata/source.py @@ -26,7 +26,7 @@ logger = logging.getLogger(__name__) -class Source(pydantic.BaseModel): # type: ignore +class Source(pydantic.BaseModel): """ Represent a data source, including bibliographic and web information. diff --git a/src/technologydata/source_collection.py b/src/technologydata/source_collection.py index f989f291..f4beb955 100644 --- a/src/technologydata/source_collection.py +++ b/src/technologydata/source_collection.py @@ -8,7 +8,6 @@ import json import pathlib import re -import typing from collections.abc import Iterator from typing import Annotated, Self @@ -19,7 +18,7 @@ from technologydata.source import Source -class SourceCollection(pydantic.BaseModel): # type: ignore +class SourceCollection(pydantic.BaseModel): """ Represent a collection of sources. @@ -34,7 +33,7 @@ class SourceCollection(pydantic.BaseModel): # type: ignore list[Source], pydantic.Field(description="List of Source objects.") ] - def __iter__(self) -> Iterator["Source"]: + def __iter__(self) -> Iterator["Source"]: # type: ignore """ Return an iterator over the list of Source objects. @@ -102,7 +101,7 @@ def get(self, title: str, authors: str) -> Self: s for s in filtered_sources if pattern_authors.search(s.authors) ] - return SourceCollection(sources=filtered_sources) + return SourceCollection(sources=filtered_sources) # type: ignore def retrieve_all_from_wayback( self, download_directory: pathlib.Path @@ -232,7 +231,6 @@ def from_json( # pydantic_core.from_json return Any. Therefore, typing.cast makes sure that # the output is indeed a TechnologyCollection - return typing.cast( - SourceCollection, - cls.model_validate(pydantic_core.from_json(json_data, allow_partial=True)), + return cls.model_validate( + pydantic_core.from_json(json_data, allow_partial=True) ) diff --git a/src/technologydata/technologies/__init__.py b/src/technologydata/technologies/__init__.py new file mode 100644 index 00000000..5cbb4a64 --- /dev/null +++ b/src/technologydata/technologies/__init__.py @@ -0,0 +1,5 @@ +# SPDX-FileCopyrightText: 2025 The technology-data authors +# +# SPDX-License-Identifier: MIT + +"""Provide models to create scenario-specific technology projections.""" diff --git a/src/technologydata/technologies/growth_models.py b/src/technologydata/technologies/growth_models.py new file mode 100644 index 00000000..dbfa2774 --- /dev/null +++ b/src/technologydata/technologies/growth_models.py @@ -0,0 +1,502 @@ +# SPDX-FileCopyrightText: 2025 The technology-data authors +# +# SPDX-License-Identifier: MIT +"""Growth models for projecting technology parameters over time.""" + +import inspect +import logging +import typing +from abc import abstractmethod +from collections.abc import Callable +from typing import Annotated, Self + +import numpy as np +from pydantic import BaseModel, ConfigDict, Field +from scipy.optimize import curve_fit + +logger = logging.getLogger(__name__) + + +class GrowthModel(BaseModel): + """ + Abstract base for growth models used in projections. + + To implement a new growth model that inherits from this class, the following must be provided: + 1. A mathematical function representing the growth model by implementing the abstract method `function(self, x: float, **parameters) -> float`. + The parameters of the function (besides `x`) will be automatically detected and used for fitting and projection. + 2. The parameters should be defined as attributes of the class, initialized to `None` if they are to be fitted. + + pydantic configuration: + - `validate_assignment = True`: Ensures that any assignment to model attributes is validated, + as growth models may be created first with missing parameters (set to None) and then fitted later + and data points may be added after creation. + """ + + model_config = ConfigDict(validate_assignment=True) + + data_points: Annotated[ + list[tuple[float, float]], + Field(description="Data points (x, y) for fitting the model, where f(x) = y."), + ] = list() + + @abstractmethod + def function(self, *args: typing.Any, **kwargs: typing.Any) -> float | np.ndarray: + """Represent the growth model function.""" + pass + + @property + def model_parameters(self) -> list[str]: + """Return the set of model parameters that have been provided (are not None).""" + return [f for f in type(self).model_fields.keys() if f != "data_points"] + + @property + def provided_parameters(self) -> list[str]: + """Return the set of model parameters that have been provided (are not None).""" + return list( + self.model_dump( + include=set(self.model_parameters), exclude_none=True + ).keys() + ) + + @property + def missing_parameters(self) -> list[str]: + """Return the set of model parameters that are missing (have not been provided).""" + return [p for p in self.model_parameters if p not in self.provided_parameters] + + def add_data(self, data_point: tuple[float, float]) -> Self: + """Add a data point to the model for fitting.""" + self.data_points.append(data_point) + return self + + def project( + self, + to_year: int, + ) -> float: + """ + Project using the model to the specified year. + + This function uses the parameters that have been provided for the model either directly or through fitting to data points. + + Parameters + ---------- + to_year : int + The year to which to project the values. + + Returns + ------- + float + The projected value for the specified year. + + """ + if len(self.missing_parameters) > 0: + raise ValueError( + f"Cannot project. The following parameters have not been specified yet and are missing: {self.missing_parameters}." + ) + + return self.function( + to_year, **self.model_dump(include=set(self.provided_parameters)) + ) + + @classmethod + def _kwpartial( + cls, f: Callable[..., float], **fixed_params: dict[str, float] + ) -> Callable[..., float]: + """ + Like functools.partial, but for keyword arguments. + + Enables us to wrap a function in a way that is compatible with scipy.optimize.curve_fit, + which does not play nicely with standard functools.partial. + For details see: https://stackoverflow.com/questions/79749129/use-curve-fit-with-partial-using-named-parameters-instead-of-positional-para/79749198#79749198 + + """ + f_sig = inspect.signature(f) + positional_params = ( + inspect.Parameter.POSITIONAL_OR_KEYWORD, + inspect.Parameter.POSITIONAL_ONLY, + ) + args = [ + p.name for p in f_sig.parameters.values() if p.kind in positional_params + ] + new_args = [ + inspect.Parameter(arg, inspect.Parameter.POSITIONAL_OR_KEYWORD) + for arg in args + if arg not in fixed_params + ] + new_sig = inspect.Signature(new_args) + + def wrapper(*f_args: float, **f_kwargs: dict[str, float]) -> float: + bound_args = new_sig.bind(*f_args, **f_kwargs) + bound_args.apply_defaults() + return f(**bound_args.arguments, **fixed_params) + + wrapper.__signature__ = new_sig # type: ignore[attr-defined] + wrapper.__name__ = f"kwpartial({f.__name__}, {fixed_params})" + + return wrapper + + def fit(self, p0: dict[str, float] | None = None) -> Self: + """ + Fit the growth model using the parameters and data points provided to the model. + + Parameters + ---------- + p0 : dict[str, float], optional + Initial guesses for the missing parameters to be fitted. + May contain all or a subset of the missing parameters. + Any parameter not provided will be initialized with a starting guess of 1.0 (scipy's default). + + Returns + ------- + Self + The model instance with the fitted parameters set. + + Raises + ------ + ValueError + If there are not enough data points to fit the model. + + """ + # if all parameters of the model are already fixed, then we cannot fit anything + if len(self.provided_parameters) == len(self.model_parameters): + logger.info("All parameters are already fixed, cannot fit anything.") + return self + + # The number of data points must be at least equal to the number of parameters to fit + if len(self.data_points) < len(self.missing_parameters): + raise ValueError( + f"Not enough data points to fit the model. Need at least {len(self.missing_parameters)}, got {len(self.data_points)}." + ) + + # Fit the model to the data points: + # build a partial function that includes the already fixed parameters + func = self._kwpartial( + self.function, + **self.model_dump(include=set(self.provided_parameters), exclude_none=True), + ) + + # p0 optionally allows to provide initial guesses for the parameters to fit + if p0 is None: + p0 = {} + + # the dict needs to be transformed into a list with the parameters in the correct order + # if a parameter is missing from p0, we use 1 as a default initial guess (scipy's default) + p0_ = [p0.get(param, 1) for param in self.missing_parameters] + + # fit the function to the data points + xdata, ydata = zip(*self.data_points) + popt, pcov = curve_fit(f=func, xdata=xdata, ydata=ydata, p0=p0_) + + logger.debug(f"Fitted parameters: {popt}") + logger.debug(f"Covariance of the parameters: {pcov}") + + # assign the fitted parameters to the model + for param, value in zip(self.missing_parameters, popt): + logger.debug(f"Setting parameter {param} to fitted value {value}") + setattr(self, param, value) + + return self + + +class LinearGrowth(GrowthModel): + """Project with linear growth model.""" + + x0: Annotated[ + float | None, + Field( + description="The reference x-value (e.g., starting year) for the linear function.", + ), + ] = None + m: Annotated[ + float | None, + Field(description="Annual growth rate for the linear function."), + ] = None + A: Annotated[ + float | None, + Field(description="Starting value for the linear function."), + ] = None + + def function( + self, x: float | np.ndarray, x0: float, m: float, A: float + ) -> float | np.ndarray: + """ + Linear function for the growth model. + + f(x) = m * (x - x0) + a + + Parameters + ---------- + x : float | numpy Array + The input value(s) on which to evaluate the function, e.g. a year '2025'. + x0 : float + The reference x-value (e.g., starting year) for the linear function. + m : float, optional + The slope of the linear function. + A : float, optional + The constant offset of the linear function. + + Returns + ------- + float | numpy Array + The result(s) of the linear function evaluation at x. + + """ + return m * (x - x0) + A + + +class ExponentialGrowth(GrowthModel): + """Project with exponential growth model.""" + + x0: Annotated[ + float | None, + Field( + description="The reference x-value (e.g., starting year) for the exponential function.", + ), + ] = None + A: Annotated[ + float | None, + Field(description="Initial value for the exponential function."), + ] = None + m: Annotated[ + float | None, + Field(description="The multiplier for the exponential function."), + ] = None + k: Annotated[ + float | None, + Field(description="Growth rate for the exponential function."), + ] = None + + def function( + self, x: float | np.ndarray, x0: float, A: float, m: float, k: float + ) -> float | np.ndarray: + """ + Exponential function for the growth model. + + f(x) = A + m * exp(k * (x - x0)) + + Parameters + ---------- + x : float | numpy Array + The input value(s) on which to evaluate the function, e.g. a year '2025'. + x0 : float + The reference x-value (e.g., starting year) for the exponential function. + A : float + The lower horizontal asymptote of the exponential function. + m : float + The initial value of the exponential function. + k : float + The growth rate of the exponential function. + + Returns + ------- + float | numpy Array + The result(s) of the exponential function evaluation at x. + + """ + return A + m * np.exp(k * (x - x0)) + + +class GeneralLogisticGrowth(GrowthModel): + """Project with a generalized logistic growth model.""" + + x0: Annotated[ + float | None, + Field( + description="The x-value of the sigmoid's midpoint (inflection point/midpoint year).", + ), + ] = None + A: Annotated[ + float | None, + Field( + description="The lower horizontal asymptote of the logistic function.", + ), + ] = None + K: Annotated[ + float | None, + Field( + description="The upper horizontal asymptote of the logistic function for C=1.", + ), + ] = None + B: Annotated[ + float | None, + Field( + description="The growth rate of the logistic function.", + ), + ] = None + Q: Annotated[ + float | None, + Field( + description="Parameter related to the value of f(0).", + ), + ] = None + C: Annotated[ + float | None, + Field( + description="Parameter related to the upper horizontal asymptote, often set to 1.", + ), + ] = None + nu: Annotated[ + float | None, + Field( + description="Parameter affecting near which asymptote the maximum growth occurs.", + ), + ] = None + + def function( + self, + x: float | np.ndarray, + x0: float, + A: float, + K: float, + B: float, + Q: float, + C: float, + nu: float, + ) -> float | np.ndarray: + """ + Generalized logistic function for the growth model. + + f(x) = A + (K - A) / (C + Q * exp(-B * (x - M)))^(1/nu) + + Parameters + ---------- + x : float | numpy Array + The input value(s) on which to evaluate the function, e.g. a year '2025'. + x0 : float + The x-value of the sigmoid's midpoint (inflection point). + A : float + The lower horizontal asymptote of the logistic function. + K : float + The upper horizontal asymptote of the logistic function for C=1. + If A=0 and C=1, then K is the carrying capacity. + B : float + The growth rate of the logistic function. + Q : float + Related to the value of f(0). + C : float + Parameter related to the upper horizontal asymptote, often set to 1. + nu : float + Parameter affecting near which asymptote the maximum growth occurs. + + Returns + ------- + float | numpy Array + The result(s) of the generalized logistic function evaluation at x. + + """ + return A + (K - A) / (C + Q * np.exp(-B * (x - x0))) ** (1.0 / nu) + + +class LogisticGrowth(GrowthModel): + """Project with a logistic growth model.""" + + x0: Annotated[ + float | None, + Field( + description="The x-value of the sigmoid's midpoint (inflection point/midpoint year).", + ), + ] = None + A: Annotated[ + float | None, + Field( + description="The lower horizontal asymptote of the logistic function.", + ), + ] = None + L: Annotated[ + float | None, + Field( + description="Carrying capacity of the logistic function.", + ), + ] = None + k: Annotated[ + float | None, + Field( + description="Growth rate of the logistic function.", + ), + ] = None + + def function( + self, x: float | np.ndarray, x0: float, A: float, L: float, k: float + ) -> float | np.ndarray: + """ + Logistic function for the growth model. + + f(x) = A + L / (1 + exp(-k * (x - x0))) + + Parameters + ---------- + x : float | numpy Array + The input value(s) on which to evaluate the function, e.g. a year '2025'. + x0 : float + The x-value of the sigmoid's midpoint (inflection point). + A : float + The lower horizontal asymptote of the logistic function. + L : float + The carrying capacity of the logistic function. + k : float + The growth rate of the logistic function. + + Returns + ------- + float | numpy Array + The result(s) of the logistic function evaluation at x. + + """ + return A + L / (1 + np.exp(-k * (x - x0))) + + +class GompertzGrowth(GrowthModel): + """Project with a Gompertz growth model.""" + + A: Annotated[ + float | None, + Field( + description="The upper asymptote (maximum value) of the Gompertz function.", + ), + ] = None + k: Annotated[ + float | None, + Field( + description="The growth rate of the Gompertz function.", + ), + ] = None + x0: Annotated[ + float | None, + Field( + description="The x-value of the inflection point (midpoint year) of the Gompertz function.", + ), + ] = None + b: Annotated[ + float | None, + Field( + description="The displacement along the x-axis of the Gompertz function.", + ), + ] = None + + def function( + self, x: float | np.ndarray, A: float, k: float, x0: float, b: float + ) -> float | np.ndarray: + """ + Gompertz function for the growth model. + + f(x) = A * exp(-b * exp(-k * (x - x0))) + + Parameters + ---------- + x : float | numpy Array + The input value(s) on which to evaluate the function, e.g. a year '2025'. + A : float + The upper asymptote (maximum value) of the Gompertz function. + k : float + The growth rate of the Gompertz function. + x0 : float + The x-value of the inflection point (midpoint year) of the Gompertz function. + b : float + The displacement along the x-axis of the Gompertz function. + + Returns + ------- + float | numpy Array + The result(s) of the Gompertz function evaluation at x. + + """ + return A * np.exp(-b * np.exp(-k * (x - x0))) diff --git a/src/technologydata/technology.py b/src/technologydata/technology.py index 304053ea..6f94a5cb 100644 --- a/src/technologydata/technology.py +++ b/src/technologydata/technology.py @@ -14,7 +14,7 @@ from technologydata.parameter import Parameter -class Technology(pydantic.BaseModel): # type: ignore +class Technology(pydantic.BaseModel): """ Represent a technology with region, year, and a flexible set of parameters. diff --git a/src/technologydata/technology_collection.py b/src/technologydata/technology_collection.py index c51e53d8..00b88005 100644 --- a/src/technologydata/technology_collection.py +++ b/src/technologydata/technology_collection.py @@ -6,9 +6,9 @@ import csv import json +import logging import pathlib import re -import typing from collections.abc import Iterator from typing import Annotated, Self @@ -16,10 +16,14 @@ import pydantic import pydantic_core +from technologydata.parameter import Parameter +from technologydata.technologies.growth_models import GrowthModel, LinearGrowth from technologydata.technology import Technology +logger = logging.getLogger(__name__) -class TechnologyCollection(pydantic.BaseModel): # type: ignore + +class TechnologyCollection(pydantic.BaseModel): """ Represent a collection of technologies. @@ -34,7 +38,7 @@ class TechnologyCollection(pydantic.BaseModel): # type: ignore list[Technology], pydantic.Field(description="List of Technology objects.") ] - def __iter__(self) -> Iterator[Technology]: + def __iter__(self) -> Iterator[Technology]: # type: ignore """ Return an iterator over the list of Technology objects. @@ -117,7 +121,7 @@ def get( if pattern_detailed_technology.search(t.detailed_technology) ] - return TechnologyCollection(technologies=filtered_technologies) + return TechnologyCollection(technologies=filtered_technologies) # type: ignore def to_dataframe(self) -> pandas.DataFrame: """ @@ -232,9 +236,8 @@ def from_json(cls, file_path: pathlib.Path | str) -> Self: # pydantic_core.from_json return Any. Therefore, typing.cast makes sure that # the output is indeed a TechnologyCollection - return typing.cast( - TechnologyCollection, - cls.model_validate(pydantic_core.from_json(json_data, allow_partial=True)), + return cls.model_validate( + pydantic_core.from_json(json_data, allow_partial=True) ) def to_currency( @@ -277,4 +280,180 @@ def to_currency( ) ) - return TechnologyCollection(technologies=new_techs) + return TechnologyCollection(technologies=new_techs) # type: ignore + + def fit( + self, parameter: str, model: GrowthModel, p0: dict[str, float] | None = None + ) -> GrowthModel: + """ + Fit a growth model to a specified parameter across all technologies in the collection. + + This method aggregates data points for the specified parameter from all technologies + in the collection, adds them to the provided growth model, and fits the model using + the initial parameter guesses provided in `p0`. + + Parameters + ---------- + parameter : str + The name of the parameter to fit the model to (e.g., "installed capacity"). + model : GrowthModel + An instance of a growth model (e.g., LinearGrowth, ExponentialGrowth) to be fitted. + May already be partially initialized with some parameters and/or data points. + p0 : dict[str, float], optional + Initial guess for the model parameters. + + Returns + ------- + GrowthModel + The fitted growth model with optimized parameters. + + Raises + ------ + ValueError + If the collection contains incompatible parameters with different units, heating values, or carriers. + + """ + first_param = None + # Aggregate data points for the specified parameter from all technologies + for tech in self.technologies: + param = tech.parameters[parameter] + if first_param is None: + first_param = param + + try: + first_param._check_parameter_compatibility(param) + except ValueError as e: + raise ValueError( + f"The collection contains one or more parameters with incompatible units/heating values/carriers:\n" + f"* {first_param}, and\n" + f"* {param}." + ) from e + + model.add_data((tech.year, param.magnitude)) + + # Fit the model using the provided initial parameter guesses + model.fit(p0=p0) + + return model + + def project( + self, + to_years: list[int], + parameters: dict[str, GrowthModel | str], + ) -> Self: + """ + Project specified parameters for all technologies in the collection to future years. + + This method uses the provided growth models to project the specified parameters + for each technology in the collection to the given future years. + + To keep other parameters that should not be projected, add them to the dictionary as well + without a growth model. Instead, there are other options available: + 'mean', 'closest' and 'NaN'. + 'mean' will set the parameter to the mean of all existing values in the collection, + while 'NaN' will add the parameter with NaN values as a placeholder. + 'closest' will set the parameter to the value of the closest year in the original data, + with a preference for past years if equidistant. (Not yet implemented.) + + The method creates new Technology objects for each combination of original technology + and future year, applying the appropriate growth model projections. + + Parameters + ---------- + to_years : list[int] + List of future years to which the parameters should be projected. + parameters : dict[str, GrowthModel | str] + A dictionary mapping parameter names to their respective growth models for projection. + If provided, `parameter` and `model` cannot be used. + To keep other parameters without projecting, available options are 'mean', 'closest' and 'NaN'. + + Returns + ------- + TechnologyCollection + A new TechnologyCollection with technologies projected to the specified future years. + + Raises + ------ + ValueError + If neither `parameter` and `model`, or `parameters` are not or all provided. + + Examples + -------- + >>> tc.project( + ... to_years=[2030, 2040], + ... parameters={ + ... "installed capacity": LinearGrowth(m=0.5, A=10), + ... "lifetime": "mean", + ... "efficiency": "NaN" + ... } + ... ) + + """ + logger.debug(f"Projecting parameters as follows: {parameters}") + + projected_technologies = [] + for to_year in to_years: + # Create a new Technology object for the projected year + new_tech = Technology( + name=self.technologies[0].name, + region=self.technologies[0].region, + year=to_year, + case=self.technologies[0].case, + detailed_technology=self.technologies[0].detailed_technology, + parameters={}, + ) + + for param, model in parameters.items(): + new_param: Parameter + + # Trick: A linear growth with m=0 returns the mean of the provided data points + # this way we can reuse the logic already implemented for fitting and projecting below + if model == "mean": + model = LinearGrowth(m=0) + + if isinstance(model, GrowthModel): + # Fit the model to the parameter data + model = self.fit(param, model.model_copy()) + + # Project the model to the specified future years + param_value = model.project(to_year) + + logger.debug( + f"Resulting model for {param} in year {to_year}: {model}" + ) + # Add the projected parameter to the new technology + new_param = ( + self.technologies[0] + .parameters[param] + .model_copy( + deep=True, + update={ + "magnitude": param_value, + "provenance": f"Projected to {to_year} using {model}.", + "note": None, # Clear any existing note + "sources": None, # Clear any existing sources + }, + ) + ) + + elif model == "NaN": + new_param = Parameter( + magnitude=float("nan"), + note="Placeholder parameters with NaN value.", + ) + elif model == "closest": + raise NotImplementedError( + "'closest' option for '{param}' not yet implemented." + ) # TODO + else: + raise ValueError( + f"Unexpected model type for parameter '{param}': {model}" + ) + + new_tech.parameters[param] = new_param + + logger.debug(f"Projected technology for year {to_year}: {new_tech}") + + projected_technologies.append(new_tech) + + return TechnologyCollection(technologies=projected_technologies) # type: ignore diff --git a/test/test_growth_models.py b/test/test_growth_models.py new file mode 100644 index 00000000..a29a10f9 --- /dev/null +++ b/test/test_growth_models.py @@ -0,0 +1,281 @@ +# SPDX-FileCopyrightText: 2025 The technology-data authors +# SPDX-License-Identifier: MIT +"""Unit tests for growth models in technologydata.technologies.growth_models.""" + +import numpy as np +import pytest + +from technologydata.technologies.growth_models import ( + ExponentialGrowth, + GeneralLogisticGrowth, + GompertzGrowth, + LinearGrowth, + LogisticGrowth, +) + + +def test_linear_add_data_points() -> None: + """Test adding data points to LinearGrowth model.""" + x0 = 0 + m = 2.0 + A = 1.0 + + x = np.arange(-10, 30) + y = m * x + A + + model = LinearGrowth() + for xi, yi in zip(x, y): + model.add_data((xi, yi)) + model.fit(p0={"x0": x0, "m": m, "A": A}) + + assert model.x0 == pytest.approx(x0, rel=1e-2) + assert model.m == pytest.approx(m, rel=1e-2) + assert model.A == pytest.approx(A, rel=1e-2) + + +def test_linear_growth_projection() -> None: + """Test the projection method of LinearGrowth.""" + x0 = 0 + m = 2.0 + A = 5.0 + x = 10 + model = LinearGrowth(x0=x0, m=2.0, A=5.0, data_points=[]) + assert model.project(10) == pytest.approx(m * x + A) + + +def test_linear_growth_fit() -> None: + """Test fitting of the LinearGrowth model.""" + x0 = 0 + m = 2.0 + A = 1.0 + + x = np.arange(-10, 30) + y = m * x + A + + model = LinearGrowth(x0=x0, m=None, A=None, data_points=[*zip(x, y)]) + model.fit(p0={"x0": x0, "m": m, "A": A}) + assert model.x0 == pytest.approx(x0, rel=1e-2) + assert model.m == pytest.approx(m, rel=1e-2) + assert model.A == pytest.approx(A, rel=1e-2) + + +def test_exponential_growth_projection() -> None: + """Test the projection method of ExponentialGrowth.""" + A = 2.0 + m = 1.0 + k = 0.5 + x0 = 0.0 + x = 2 + + model = ExponentialGrowth(A=A, m=m, k=k, x0=x0, data_points=[]) + assert model.project(2) == pytest.approx(A + m * np.exp(k * (x - x0))) + + +def test_exponential_growth_fit() -> None: + """Test fitting of the ExponentialGrowth model.""" + A = 2.0 + m = 1.0 + k = 0.5 + x0 = 0.0 + + x = np.arange(0, 30) + y = A + m * np.exp(k * (x - x0)) + + model = ExponentialGrowth(A=None, m=None, k=None, x0=None, data_points=[*zip(x, y)]) + model.fit(p0={"A": A, "m": m, "k": k, "x0": x0}) + + assert model.A == pytest.approx(A, rel=1e-2) + assert model.m == pytest.approx(m, rel=1e-2) + assert model.k == pytest.approx(k, rel=1e-2) + assert model.x0 == pytest.approx(x0, rel=1e-2) + + +def test_logistic_growth_projection() -> None: + """Test the projection method of LogisticGrowth.""" + A = 2.0 + L = 10.0 + k = 1.0 + x0 = 0.0 + + model = LogisticGrowth(A=A, L=L, k=k, x0=x0, data_points=[]) + assert model.project(0) == pytest.approx(A + L / (1 + np.exp(-k * (0 - x0)))) + + +def test_logistic_growth_fit() -> None: + """Test fitting of the LogisticGrowth model.""" + A = 2.0 + L = 10.0 + k = 1.0 + x0 = 0.0 + + x = np.arange(-2, 30) + y = A + L / (1 + np.exp(-k * (x - x0))) + + model = LogisticGrowth(A=None, L=None, k=None, x0=None, data_points=[*zip(x, y)]) + model.fit(p0={"A": A, "L": L, "k": k, "x0": x0}) + + assert model.A == pytest.approx(A, rel=1e-2) + assert model.L == pytest.approx(L, rel=1e-2) + assert model.k == pytest.approx(k, rel=1e-2) + assert model.x0 == pytest.approx(x0, rel=1e-2) + + +def test_gompertz_growth_projection() -> None: + """Test the projection method of GompertzGrowth.""" + A = 10.0 + k = 1.0 + x0 = 0.0 + b = 1.0 + + model = GompertzGrowth(A=A, k=k, x0=x0, b=b, data_points=[]) + + assert model.project(0) == pytest.approx(A * np.exp(-b * np.exp(-k * (0 - x0)))) + + +def test_gompertz_growth_fit() -> None: + """Test fitting of the GompertzGrowth model.""" + A = 10.0 + k = 1.0 + x0 = 0.0 + b = 1.0 + + x = np.arange(-2, 30) + y = A * np.exp(-b * np.exp(-k * (x - x0))) + + model = GompertzGrowth(A=None, k=None, x0=None, b=None, data_points=[*zip(x, y)]) + model.fit(p0={"A": A, "k": k, "x0": x0, "b": b}) + + assert model.A == pytest.approx(A, rel=1e-2) + assert model.k == pytest.approx(k, rel=1e-2) + assert model.x0 == pytest.approx(x0, rel=1e-2) + assert model.b == pytest.approx(b, rel=1e-2) + + +def test_general_logistic_growth_projection() -> None: + """Test the projection method of GeneralLogisticGrowth.""" + x0 = 0 + A = 2.0 + K = 10.0 + B = 1.0 + nu = 1.0 + Q = 1.0 + C = 1.0 + + model = GeneralLogisticGrowth(x0=x0, A=A, K=K, B=B, nu=nu, Q=Q, C=C, data_points=[]) + + assert model.project(0) == pytest.approx(model.function(0, x0, A, K, B, nu, Q, C)) + + +def test_general_logistic_growth_fit() -> None: + """Test fitting of the GeneralLogisticGrowth model.""" + x0 = 0 + A = 2.0 + K = 10.0 + B = 1.0 + nu = 1.0 + Q = 1.0 + C = 1.0 + + x: np.array = np.arange(-2, 30) + y: np.array = GeneralLogisticGrowth().function(x, x0, A, K, B, Q, C, nu) + + model = GeneralLogisticGrowth(data_points=[*zip(x, y)]) + model.fit(p0={"x0": x0, "A": A, "K": K, "B": B, "nu": nu, "Q": Q, "C": C}) + + assert model.A == pytest.approx(A, rel=1e-2) + assert model.K == pytest.approx(K, rel=1e-2) + assert model.B == pytest.approx(B, rel=1e-2) + assert model.nu == pytest.approx(nu, rel=1e-2) + assert model.Q == pytest.approx(Q, rel=1e-2) + assert model.C == pytest.approx(C, rel=1e-2) + + +# TODO: Add tests for +# - partial fitting (some parameters fixed) +# - fitting with noise/without p0 +# - illegal arguments to p0 + + +def test_partial_fitting_linear_growth() -> None: + """Test fitting LinearGrowth with one parameter fixed and one to fit.""" + x0 = 0 + m = 2.0 + A = 1.0 + x: np.array = np.arange(-10, 30) + y: np.array = LinearGrowth().function(x, x0, m, A) + + # Fix x0 and m, only fit A + model = LinearGrowth(x0=x0, m=m, A=None, data_points=[*zip(x, y)]) + model.fit(p0={"A": A * 0.5}) + + assert model.m == pytest.approx(m, rel=1e-2) + assert model.A == pytest.approx(A, rel=1e-2) + + +def test_fit_with_noisy_data() -> None: + """Test fitting LinearGrowth with noisy data to check robustness.""" + rng = np.random.default_rng(42) + x0 = 0 + m = 2.0 + A = 20.0 + x: np.array = np.arange(-10, 30) + noise = rng.normal(0, 0.1, size=x.shape) + y: np.array = LinearGrowth().function(x, x0, m, A) + noise + + # Fitting with x0 and A free can lead to competing solutions, so fix x0 + model = LinearGrowth(x0=x0, data_points=[*zip(x, y)]) + model.fit() + + # Should be close to true values despite noise + assert model.m == pytest.approx(m, rel=1e-1) + assert model.A == pytest.approx(A, rel=1e-1) + + +def test_fit_without_p0() -> None: + """Test fitting LinearGrowth without providing p0 (should use defaults and still work).""" + x0 = 0 + m = 10.0 + A = 5.0 + x: np.array = np.arange(-25, 25) + y: np.array = LinearGrowth().function(x, x0, m, A) + + # Fix x0 to avoid competing solutions + model = LinearGrowth(x0=x0, data_points=[*zip(x, y)]) + model.fit() # No p0 provided + + assert model.m == pytest.approx(m, rel=1e-2) + assert model.A == pytest.approx(A, rel=1e-2) + + +def test_illegal_p0_argument() -> None: + """Test that fitting works with missing p0 keys (should use defaults, not raise).""" + x0 = 5 + m = 2.0 + A = 1.0 + x: np.array = np.arange(-10, 30) + y: np.array = LinearGrowth().function(x, x0, m, A) + + model = LinearGrowth(data_points=[*zip(x, y)]) + # Provide p0 missing one parameter (A missing) + model.fit(p0={"x0": x0, "m": m}) + + # Should still fit correctly + assert model.m == pytest.approx(m, rel=1e-2) + assert model.A == pytest.approx(A, rel=1e-2) + + +def test_fit_with_p0_far_from_target() -> None: + """Test fitting LinearGrowth with p0 far from the true values (should still converge).""" + x0 = 0 + m = 20.0 + A = 5.0 + x: np.array = np.arange(-10, 30) + y: np.array = LinearGrowth().function(x, x0, m, A) + + # Fix x0 to avoid competing solutions + model = LinearGrowth(x0=x0, data_points=[*zip(x, y)]) + # Provide p0 far from the actual values + model.fit(p0={"m": m * 10, "A": A * -2}) + + assert model.m == pytest.approx(m, rel=1e-2) + assert model.A == pytest.approx(A, rel=1e-2) diff --git a/test/test_technology_collection.py b/test/test_technology_collection.py index c2608f63..57b0f609 100644 --- a/test/test_technology_collection.py +++ b/test/test_technology_collection.py @@ -138,6 +138,144 @@ def test_get( assert isinstance(result, technologydata.TechnologyCollection) assert len(result.technologies) == 1 + def test_fit_linear_growth(self) -> None: + """Test TechnologyCollection.fit with LinearGrowth model.""" + tech = technologydata.Technology( + name="Amazing technology", + detailed_technology="", + region="", + case="", + year=2020, + parameters={ + "total units": technologydata.Parameter(magnitude=2020), + }, + ) + + tc = technologydata.TechnologyCollection( + technologies=[ + tech, + tech.model_copy( + deep=True, + update={ + "year": 2030, + "parameters": { + "total units": technologydata.Parameter(magnitude=2030), + }, + }, + ), + tech.model_copy( + deep=True, + update={ + "year": 2040, + "parameters": { + "total units": technologydata.Parameter(magnitude=2040), + }, + }, + ), + ] + ) + + # Fit 'total units' parameter with LinearGrowth + from technologydata.technologies.growth_models import LinearGrowth + + model = LinearGrowth() + fitted = tc.fit("total units", model, p0={"x0": 0, "m": 1, "A": 0}) + assert isinstance(fitted, LinearGrowth) + print(fitted) + assert pytest.approx(fitted.x0) == 0 + assert pytest.approx(fitted.m) == 1 + assert pytest.approx(fitted.A) == 0 + + def test_project_linear_growth(self) -> None: + """Test TechnologyCollection.project with LinearGrowth model.""" + input_file = pathlib.Path( + path_cwd, + "test", + "test_data", + "solar_photovoltaics_example", + "technologies.json", + ) + tc = technologydata.TechnologyCollection.from_json(input_file) + from technologydata.technologies.growth_models import LinearGrowth + + projected_tc = tc.project( + to_years=[2030], + parameters={"capacity": LinearGrowth(x0=2020)}, + ) + assert isinstance(projected_tc, technologydata.TechnologyCollection) + assert projected_tc.technologies[0].year == 2030 + assert "capacity" in projected_tc.technologies[0].parameters + assert isinstance( + projected_tc.technologies[0].parameters["capacity"].magnitude, float + ) + + # non-projected parameters should not be present + assert "investment" not in projected_tc.technologies[0].parameters + + def test_project_other_parameter_options(self) -> None: + """Test projection of parameters using 'mean', 'closest', and 'NaN' options.""" + tech = technologydata.Technology( + name="Amazing technology", + detailed_technology="", + region="", + case="", + year=2020, + parameters={ + "total units": technologydata.Parameter(magnitude=2000), + }, + ) + + tc = technologydata.TechnologyCollection( + technologies=[ + tech, + tech.model_copy( + deep=True, + update={ + "year": 2030, + "parameters": { + "total units": technologydata.Parameter(magnitude=3000), + }, + }, + ), + ] + ) + + ptc = tc.project( + to_years=[2025], + parameters={ + "total units": "mean", + }, + ) + + assert ( + pytest.approx( + ( + tc.technologies[0].parameters["total units"].magnitude + + tc.technologies[1].parameters["total units"].magnitude + ) + / 2, + ) + == ptc.technologies[0].parameters["total units"].magnitude + ) + + ptc = tc.project( + to_years=[2025], + parameters={ + "total units": "NaN", + }, + ) + + assert pandas.isna(ptc.technologies[0].parameters["total units"].magnitude) + + # "closest" currently raises NotImplementedError + with pytest.raises(NotImplementedError): + _ = tc.project( + to_years=[2025], + parameters={ + "total units": "closest", + }, + ) + def test_to_currency(self) -> None: """Test currency conversion for all technologies in the collection.""" input_file = pathlib.Path( diff --git a/uv.lock b/uv.lock index d1d98700..6f09e707 100644 --- a/uv.lock +++ b/uv.lock @@ -1,77 +1,82 @@ version = 1 -revision = 2 +revision = 1 requires-python = ">=3.12" +resolution-markers = [ + "python_full_version >= '3.14' and platform_python_implementation != 'PyPy'", + "python_full_version < '3.14' and platform_python_implementation != 'PyPy'", + "platform_python_implementation == 'PyPy'", +] [[package]] name = "annotated-types" version = "0.7.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081, upload_time = "2024-05-20T21:33:25.928Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081 } wheels = [ - { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload_time = "2024-05-20T21:33:24.1Z" }, + { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643 }, ] [[package]] name = "appnope" version = "0.1.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/35/5d/752690df9ef5b76e169e68d6a129fa6d08a7100ca7f754c89495db3c6019/appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee", size = 4170, upload_time = "2024-02-06T09:43:11.258Z" } +sdist = { url = "https://files.pythonhosted.org/packages/35/5d/752690df9ef5b76e169e68d6a129fa6d08a7100ca7f754c89495db3c6019/appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee", size = 4170 } wheels = [ - { url = "https://files.pythonhosted.org/packages/81/29/5ecc3a15d5a33e31b26c11426c45c501e439cb865d0bff96315d86443b78/appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c", size = 4321, upload_time = "2024-02-06T09:43:09.663Z" }, + { url = "https://files.pythonhosted.org/packages/81/29/5ecc3a15d5a33e31b26c11426c45c501e439cb865d0bff96315d86443b78/appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c", size = 4321 }, ] [[package]] name = "asttokens" version = "3.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/4a/e7/82da0a03e7ba5141f05cce0d302e6eed121ae055e0456ca228bf693984bc/asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7", size = 61978, upload_time = "2024-11-30T04:30:14.439Z" } +sdist = { url = "https://files.pythonhosted.org/packages/4a/e7/82da0a03e7ba5141f05cce0d302e6eed121ae055e0456ca228bf693984bc/asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7", size = 61978 } wheels = [ - { url = "https://files.pythonhosted.org/packages/25/8a/c46dcc25341b5bce5472c718902eb3d38600a903b14fa6aeecef3f21a46f/asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2", size = 26918, upload_time = "2024-11-30T04:30:10.946Z" }, + { url = "https://files.pythonhosted.org/packages/25/8a/c46dcc25341b5bce5472c718902eb3d38600a903b14fa6aeecef3f21a46f/asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2", size = 26918 }, ] [[package]] name = "attrs" version = "25.3.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5a/b0/1367933a8532ee6ff8d63537de4f1177af4bff9f3e829baf7331f595bb24/attrs-25.3.0.tar.gz", hash = "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b", size = 812032, upload_time = "2025-03-13T11:10:22.779Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5a/b0/1367933a8532ee6ff8d63537de4f1177af4bff9f3e829baf7331f595bb24/attrs-25.3.0.tar.gz", hash = "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b", size = 812032 } wheels = [ - { url = "https://files.pythonhosted.org/packages/77/06/bb80f5f86020c4551da315d78b3ab75e8228f89f0162f2c3a819e407941a/attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3", size = 63815, upload_time = "2025-03-13T11:10:21.14Z" }, + { url = "https://files.pythonhosted.org/packages/77/06/bb80f5f86020c4551da315d78b3ab75e8228f89f0162f2c3a819e407941a/attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3", size = 63815 }, ] [[package]] name = "babel" version = "2.17.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7d/6b/d52e42361e1aa00709585ecc30b3f9684b3ab62530771402248b1b1d6240/babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d", size = 9951852, upload_time = "2025-02-01T15:17:41.026Z" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/6b/d52e42361e1aa00709585ecc30b3f9684b3ab62530771402248b1b1d6240/babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d", size = 9951852 } wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2", size = 10182537, upload_time = "2025-02-01T15:17:37.39Z" }, + { url = "https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2", size = 10182537 }, ] [[package]] name = "backrefs" version = "5.9" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/eb/a7/312f673df6a79003279e1f55619abbe7daebbb87c17c976ddc0345c04c7b/backrefs-5.9.tar.gz", hash = "sha256:808548cb708d66b82ee231f962cb36faaf4f2baab032f2fbb783e9c2fdddaa59", size = 5765857, upload_time = "2025-06-22T19:34:13.97Z" } +sdist = { url = "https://files.pythonhosted.org/packages/eb/a7/312f673df6a79003279e1f55619abbe7daebbb87c17c976ddc0345c04c7b/backrefs-5.9.tar.gz", hash = "sha256:808548cb708d66b82ee231f962cb36faaf4f2baab032f2fbb783e9c2fdddaa59", size = 5765857 } wheels = [ - { url = "https://files.pythonhosted.org/packages/19/4d/798dc1f30468134906575156c089c492cf79b5a5fd373f07fe26c4d046bf/backrefs-5.9-py310-none-any.whl", hash = "sha256:db8e8ba0e9de81fcd635f440deab5ae5f2591b54ac1ebe0550a2ca063488cd9f", size = 380267, upload_time = "2025-06-22T19:34:05.252Z" }, - { url = "https://files.pythonhosted.org/packages/55/07/f0b3375bf0d06014e9787797e6b7cc02b38ac9ff9726ccfe834d94e9991e/backrefs-5.9-py311-none-any.whl", hash = "sha256:6907635edebbe9b2dc3de3a2befff44d74f30a4562adbb8b36f21252ea19c5cf", size = 392072, upload_time = "2025-06-22T19:34:06.743Z" }, - { url = "https://files.pythonhosted.org/packages/9d/12/4f345407259dd60a0997107758ba3f221cf89a9b5a0f8ed5b961aef97253/backrefs-5.9-py312-none-any.whl", hash = "sha256:7fdf9771f63e6028d7fee7e0c497c81abda597ea45d6b8f89e8ad76994f5befa", size = 397947, upload_time = "2025-06-22T19:34:08.172Z" }, - { url = "https://files.pythonhosted.org/packages/10/bf/fa31834dc27a7f05e5290eae47c82690edc3a7b37d58f7fb35a1bdbf355b/backrefs-5.9-py313-none-any.whl", hash = "sha256:cc37b19fa219e93ff825ed1fed8879e47b4d89aa7a1884860e2db64ccd7c676b", size = 399843, upload_time = "2025-06-22T19:34:09.68Z" }, - { url = "https://files.pythonhosted.org/packages/fc/24/b29af34b2c9c41645a9f4ff117bae860291780d73880f449e0b5d948c070/backrefs-5.9-py314-none-any.whl", hash = "sha256:df5e169836cc8acb5e440ebae9aad4bf9d15e226d3bad049cf3f6a5c20cc8dc9", size = 411762, upload_time = "2025-06-22T19:34:11.037Z" }, - { url = "https://files.pythonhosted.org/packages/41/ff/392bff89415399a979be4a65357a41d92729ae8580a66073d8ec8d810f98/backrefs-5.9-py39-none-any.whl", hash = "sha256:f48ee18f6252b8f5777a22a00a09a85de0ca931658f1dd96d4406a34f3748c60", size = 380265, upload_time = "2025-06-22T19:34:12.405Z" }, + { url = "https://files.pythonhosted.org/packages/19/4d/798dc1f30468134906575156c089c492cf79b5a5fd373f07fe26c4d046bf/backrefs-5.9-py310-none-any.whl", hash = "sha256:db8e8ba0e9de81fcd635f440deab5ae5f2591b54ac1ebe0550a2ca063488cd9f", size = 380267 }, + { url = "https://files.pythonhosted.org/packages/55/07/f0b3375bf0d06014e9787797e6b7cc02b38ac9ff9726ccfe834d94e9991e/backrefs-5.9-py311-none-any.whl", hash = "sha256:6907635edebbe9b2dc3de3a2befff44d74f30a4562adbb8b36f21252ea19c5cf", size = 392072 }, + { url = "https://files.pythonhosted.org/packages/9d/12/4f345407259dd60a0997107758ba3f221cf89a9b5a0f8ed5b961aef97253/backrefs-5.9-py312-none-any.whl", hash = "sha256:7fdf9771f63e6028d7fee7e0c497c81abda597ea45d6b8f89e8ad76994f5befa", size = 397947 }, + { url = "https://files.pythonhosted.org/packages/10/bf/fa31834dc27a7f05e5290eae47c82690edc3a7b37d58f7fb35a1bdbf355b/backrefs-5.9-py313-none-any.whl", hash = "sha256:cc37b19fa219e93ff825ed1fed8879e47b4d89aa7a1884860e2db64ccd7c676b", size = 399843 }, + { url = "https://files.pythonhosted.org/packages/fc/24/b29af34b2c9c41645a9f4ff117bae860291780d73880f449e0b5d948c070/backrefs-5.9-py314-none-any.whl", hash = "sha256:df5e169836cc8acb5e440ebae9aad4bf9d15e226d3bad049cf3f6a5c20cc8dc9", size = 411762 }, + { url = "https://files.pythonhosted.org/packages/41/ff/392bff89415399a979be4a65357a41d92729ae8580a66073d8ec8d810f98/backrefs-5.9-py39-none-any.whl", hash = "sha256:f48ee18f6252b8f5777a22a00a09a85de0ca931658f1dd96d4406a34f3748c60", size = 380265 }, ] [[package]] name = "beautifulsoup4" -version = "4.13.4" +version = "4.13.5" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "soupsieve" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d8/e4/0c4c39e18fd76d6a628d4dd8da40543d136ce2d1752bd6eeeab0791f4d6b/beautifulsoup4-4.13.4.tar.gz", hash = "sha256:dbb3c4e1ceae6aefebdaf2423247260cd062430a410e38c66f2baa50a8437195", size = 621067, upload_time = "2025-04-15T17:05:13.836Z" } +sdist = { url = "https://files.pythonhosted.org/packages/85/2e/3e5079847e653b1f6dc647aa24549d68c6addb4c595cc0d902d1b19308ad/beautifulsoup4-4.13.5.tar.gz", hash = "sha256:5e70131382930e7c3de33450a2f54a63d5e4b19386eab43a5b34d594268f3695", size = 622954 } wheels = [ - { url = "https://files.pythonhosted.org/packages/50/cd/30110dc0ffcf3b131156077b90e9f60ed75711223f306da4db08eff8403b/beautifulsoup4-4.13.4-py3-none-any.whl", hash = "sha256:9bbbb14bfde9d79f38b8cd5f8c7c85f4b8f2523190ebed90e950a8dea4cb1c4b", size = 187285, upload_time = "2025-04-15T17:05:12.221Z" }, + { url = "https://files.pythonhosted.org/packages/04/eb/f4151e0c7377a6e08a38108609ba5cede57986802757848688aeedd1b9e8/beautifulsoup4-4.13.5-py3-none-any.whl", hash = "sha256:642085eaa22233aceadff9c69651bc51e8bf3f874fb6d7104ece2beb24b47c4a", size = 105113 }, ] [[package]] @@ -81,9 +86,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "chardet" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a7/fe/7ebfec74d49f97fc55cd38240c7a7d08134002b1e14be8c3897c0dd5e49b/binaryornot-0.4.4.tar.gz", hash = "sha256:359501dfc9d40632edc9fac890e19542db1a287bbcfa58175b66658392018061", size = 371054, upload_time = "2017-08-03T15:55:25.08Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a7/fe/7ebfec74d49f97fc55cd38240c7a7d08134002b1e14be8c3897c0dd5e49b/binaryornot-0.4.4.tar.gz", hash = "sha256:359501dfc9d40632edc9fac890e19542db1a287bbcfa58175b66658392018061", size = 371054 } wheels = [ - { url = "https://files.pythonhosted.org/packages/24/7e/f7b6f453e6481d1e233540262ccbfcf89adcd43606f44a028d7f5fae5eb2/binaryornot-0.4.4-py2.py3-none-any.whl", hash = "sha256:b8b71173c917bddcd2c16070412e369c3ed7f0528926f70cac18a6c97fd563e4", size = 9006, upload_time = "2017-08-03T15:55:31.23Z" }, + { url = "https://files.pythonhosted.org/packages/24/7e/f7b6f453e6481d1e233540262ccbfcf89adcd43606f44a028d7f5fae5eb2/binaryornot-0.4.4-py2.py3-none-any.whl", hash = "sha256:b8b71173c917bddcd2c16070412e369c3ed7f0528926f70cac18a6c97fd563e4", size = 9006 }, ] [[package]] @@ -93,9 +98,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "webencodings" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/76/9a/0e33f5054c54d349ea62c277191c020c2d6ef1d65ab2cb1993f91ec846d1/bleach-6.2.0.tar.gz", hash = "sha256:123e894118b8a599fd80d3ec1a6d4cc7ce4e5882b1317a7e1ba69b56e95f991f", size = 203083, upload_time = "2024-10-29T18:30:40.477Z" } +sdist = { url = "https://files.pythonhosted.org/packages/76/9a/0e33f5054c54d349ea62c277191c020c2d6ef1d65ab2cb1993f91ec846d1/bleach-6.2.0.tar.gz", hash = "sha256:123e894118b8a599fd80d3ec1a6d4cc7ce4e5882b1317a7e1ba69b56e95f991f", size = 203083 } wheels = [ - { url = "https://files.pythonhosted.org/packages/fc/55/96142937f66150805c25c4d0f31ee4132fd33497753400734f9dfdcbdc66/bleach-6.2.0-py3-none-any.whl", hash = "sha256:117d9c6097a7c3d22fd578fcd8d35ff1e125df6736f554da4e432fdd63f31e5e", size = 163406, upload_time = "2024-10-29T18:30:38.186Z" }, + { url = "https://files.pythonhosted.org/packages/fc/55/96142937f66150805c25c4d0f31ee4132fd33497753400734f9dfdcbdc66/bleach-6.2.0-py3-none-any.whl", hash = "sha256:117d9c6097a7c3d22fd578fcd8d35ff1e125df6736f554da4e432fdd63f31e5e", size = 163406 }, ] [package.optional-dependencies] @@ -107,9 +112,9 @@ css = [ name = "boolean-py" version = "5.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c4/cf/85379f13b76f3a69bca86b60237978af17d6aa0bc5998978c3b8cf05abb2/boolean_py-5.0.tar.gz", hash = "sha256:60cbc4bad079753721d32649545505362c754e121570ada4658b852a3a318d95", size = 37047, upload_time = "2025-04-03T10:39:49.734Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c4/cf/85379f13b76f3a69bca86b60237978af17d6aa0bc5998978c3b8cf05abb2/boolean_py-5.0.tar.gz", hash = "sha256:60cbc4bad079753721d32649545505362c754e121570ada4658b852a3a318d95", size = 37047 } wheels = [ - { url = "https://files.pythonhosted.org/packages/e5/ca/78d423b324b8d77900030fa59c4aa9054261ef0925631cd2501dd015b7b7/boolean_py-5.0-py3-none-any.whl", hash = "sha256:ef28a70bd43115208441b53a045d1549e2f0ec6e3d08a9d142cbc41c1938e8d9", size = 26577, upload_time = "2025-04-03T10:39:48.449Z" }, + { url = "https://files.pythonhosted.org/packages/e5/ca/78d423b324b8d77900030fa59c4aa9054261ef0925631cd2501dd015b7b7/boolean_py-5.0-py3-none-any.whl", hash = "sha256:ef28a70bd43115208441b53a045d1549e2f0ec6e3d08a9d142cbc41c1938e8d9", size = 26577 }, ] [[package]] @@ -119,9 +124,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cffi" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/70/c5/1a4dc131459e68a173cbdab5fad6b524f53f9c1ef7861b7698e998b837cc/cairocffi-1.7.1.tar.gz", hash = "sha256:2e48ee864884ec4a3a34bfa8c9ab9999f688286eb714a15a43ec9d068c36557b", size = 88096, upload_time = "2024-06-18T10:56:06.741Z" } +sdist = { url = "https://files.pythonhosted.org/packages/70/c5/1a4dc131459e68a173cbdab5fad6b524f53f9c1ef7861b7698e998b837cc/cairocffi-1.7.1.tar.gz", hash = "sha256:2e48ee864884ec4a3a34bfa8c9ab9999f688286eb714a15a43ec9d068c36557b", size = 88096 } wheels = [ - { url = "https://files.pythonhosted.org/packages/93/d8/ba13451aa6b745c49536e87b6bf8f629b950e84bd0e8308f7dc6883b67e2/cairocffi-1.7.1-py3-none-any.whl", hash = "sha256:9803a0e11f6c962f3b0ae2ec8ba6ae45e957a146a004697a1ac1bbf16b073b3f", size = 75611, upload_time = "2024-06-18T10:55:59.489Z" }, + { url = "https://files.pythonhosted.org/packages/93/d8/ba13451aa6b745c49536e87b6bf8f629b950e84bd0e8308f7dc6883b67e2/cairocffi-1.7.1-py3-none-any.whl", hash = "sha256:9803a0e11f6c962f3b0ae2ec8ba6ae45e957a146a004697a1ac1bbf16b073b3f", size = 75611 }, ] [[package]] @@ -135,104 +140,135 @@ dependencies = [ { name = "pillow" }, { name = "tinycss2" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ab/b9/5106168bd43d7cd8b7cc2a2ee465b385f14b63f4c092bb89eee2d48c8e67/cairosvg-2.8.2.tar.gz", hash = "sha256:07cbf4e86317b27a92318a4cac2a4bb37a5e9c1b8a27355d06874b22f85bef9f", size = 8398590, upload_time = "2025-05-15T06:56:32.653Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ab/b9/5106168bd43d7cd8b7cc2a2ee465b385f14b63f4c092bb89eee2d48c8e67/cairosvg-2.8.2.tar.gz", hash = "sha256:07cbf4e86317b27a92318a4cac2a4bb37a5e9c1b8a27355d06874b22f85bef9f", size = 8398590 } wheels = [ - { url = "https://files.pythonhosted.org/packages/67/48/816bd4aaae93dbf9e408c58598bc32f4a8c65f4b86ab560864cb3ee60adb/cairosvg-2.8.2-py3-none-any.whl", hash = "sha256:eab46dad4674f33267a671dce39b64be245911c901c70d65d2b7b0821e852bf5", size = 45773, upload_time = "2025-05-15T06:56:28.552Z" }, + { url = "https://files.pythonhosted.org/packages/67/48/816bd4aaae93dbf9e408c58598bc32f4a8c65f4b86ab560864cb3ee60adb/cairosvg-2.8.2-py3-none-any.whl", hash = "sha256:eab46dad4674f33267a671dce39b64be245911c901c70d65d2b7b0821e852bf5", size = 45773 }, ] [[package]] name = "certifi" -version = "2025.7.9" +version = "2025.8.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/de/8a/c729b6b60c66a38f590c4e774decc4b2ec7b0576be8f1aa984a53ffa812a/certifi-2025.7.9.tar.gz", hash = "sha256:c1d2ec05395148ee10cf672ffc28cd37ea0ab0d99f9cc74c43e588cbd111b079", size = 160386, upload_time = "2025-07-09T02:13:58.874Z" } +sdist = { url = "https://files.pythonhosted.org/packages/dc/67/960ebe6bf230a96cda2e0abcf73af550ec4f090005363542f0765df162e0/certifi-2025.8.3.tar.gz", hash = "sha256:e564105f78ded564e3ae7c923924435e1daa7463faeab5bb932bc53ffae63407", size = 162386 } wheels = [ - { url = "https://files.pythonhosted.org/packages/66/f3/80a3f974c8b535d394ff960a11ac20368e06b736da395b551a49ce950cce/certifi-2025.7.9-py3-none-any.whl", hash = "sha256:d842783a14f8fdd646895ac26f719a061408834473cfc10203f6a575beb15d39", size = 159230, upload_time = "2025-07-09T02:13:57.007Z" }, + { url = "https://files.pythonhosted.org/packages/e5/48/1549795ba7742c948d2ad169c1c8cdbae65bc450d6cd753d124b17c8cd32/certifi-2025.8.3-py3-none-any.whl", hash = "sha256:f6c12493cfb1b06ba2ff328595af9350c65d6644968e5d3a2ffd78699af217a5", size = 161216 }, ] [[package]] name = "cffi" -version = "1.17.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pycparser" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", size = 516621, upload_time = "2024-09-04T20:45:21.852Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5a/84/e94227139ee5fb4d600a7a4927f322e1d4aea6fdc50bd3fca8493caba23f/cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4", size = 183178, upload_time = "2024-09-04T20:44:12.232Z" }, - { url = "https://files.pythonhosted.org/packages/da/ee/fb72c2b48656111c4ef27f0f91da355e130a923473bf5ee75c5643d00cca/cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c", size = 178840, upload_time = "2024-09-04T20:44:13.739Z" }, - { url = "https://files.pythonhosted.org/packages/cc/b6/db007700f67d151abadf508cbfd6a1884f57eab90b1bb985c4c8c02b0f28/cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36", size = 454803, upload_time = "2024-09-04T20:44:15.231Z" }, - { url = "https://files.pythonhosted.org/packages/1a/df/f8d151540d8c200eb1c6fba8cd0dfd40904f1b0682ea705c36e6c2e97ab3/cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5", size = 478850, upload_time = "2024-09-04T20:44:17.188Z" }, - { url = "https://files.pythonhosted.org/packages/28/c0/b31116332a547fd2677ae5b78a2ef662dfc8023d67f41b2a83f7c2aa78b1/cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff", size = 485729, upload_time = "2024-09-04T20:44:18.688Z" }, - { url = "https://files.pythonhosted.org/packages/91/2b/9a1ddfa5c7f13cab007a2c9cc295b70fbbda7cb10a286aa6810338e60ea1/cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99", size = 471256, upload_time = "2024-09-04T20:44:20.248Z" }, - { url = "https://files.pythonhosted.org/packages/b2/d5/da47df7004cb17e4955df6a43d14b3b4ae77737dff8bf7f8f333196717bf/cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93", size = 479424, upload_time = "2024-09-04T20:44:21.673Z" }, - { url = "https://files.pythonhosted.org/packages/0b/ac/2a28bcf513e93a219c8a4e8e125534f4f6db03e3179ba1c45e949b76212c/cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3", size = 484568, upload_time = "2024-09-04T20:44:23.245Z" }, - { url = "https://files.pythonhosted.org/packages/d4/38/ca8a4f639065f14ae0f1d9751e70447a261f1a30fa7547a828ae08142465/cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8", size = 488736, upload_time = "2024-09-04T20:44:24.757Z" }, - { url = "https://files.pythonhosted.org/packages/86/c5/28b2d6f799ec0bdecf44dced2ec5ed43e0eb63097b0f58c293583b406582/cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65", size = 172448, upload_time = "2024-09-04T20:44:26.208Z" }, - { url = "https://files.pythonhosted.org/packages/50/b9/db34c4755a7bd1cb2d1603ac3863f22bcecbd1ba29e5ee841a4bc510b294/cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903", size = 181976, upload_time = "2024-09-04T20:44:27.578Z" }, - { url = "https://files.pythonhosted.org/packages/8d/f8/dd6c246b148639254dad4d6803eb6a54e8c85c6e11ec9df2cffa87571dbe/cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", size = 182989, upload_time = "2024-09-04T20:44:28.956Z" }, - { url = "https://files.pythonhosted.org/packages/8b/f1/672d303ddf17c24fc83afd712316fda78dc6fce1cd53011b839483e1ecc8/cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", size = 178802, upload_time = "2024-09-04T20:44:30.289Z" }, - { url = "https://files.pythonhosted.org/packages/0e/2d/eab2e858a91fdff70533cab61dcff4a1f55ec60425832ddfdc9cd36bc8af/cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", size = 454792, upload_time = "2024-09-04T20:44:32.01Z" }, - { url = "https://files.pythonhosted.org/packages/75/b2/fbaec7c4455c604e29388d55599b99ebcc250a60050610fadde58932b7ee/cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", size = 478893, upload_time = "2024-09-04T20:44:33.606Z" }, - { url = "https://files.pythonhosted.org/packages/4f/b7/6e4a2162178bf1935c336d4da8a9352cccab4d3a5d7914065490f08c0690/cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", size = 485810, upload_time = "2024-09-04T20:44:35.191Z" }, - { url = "https://files.pythonhosted.org/packages/c7/8a/1d0e4a9c26e54746dc08c2c6c037889124d4f59dffd853a659fa545f1b40/cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4", size = 471200, upload_time = "2024-09-04T20:44:36.743Z" }, - { url = "https://files.pythonhosted.org/packages/26/9f/1aab65a6c0db35f43c4d1b4f580e8df53914310afc10ae0397d29d697af4/cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", size = 479447, upload_time = "2024-09-04T20:44:38.492Z" }, - { url = "https://files.pythonhosted.org/packages/5f/e4/fb8b3dd8dc0e98edf1135ff067ae070bb32ef9d509d6cb0f538cd6f7483f/cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", size = 484358, upload_time = "2024-09-04T20:44:40.046Z" }, - { url = "https://files.pythonhosted.org/packages/f1/47/d7145bf2dc04684935d57d67dff9d6d795b2ba2796806bb109864be3a151/cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", size = 488469, upload_time = "2024-09-04T20:44:41.616Z" }, - { url = "https://files.pythonhosted.org/packages/bf/ee/f94057fa6426481d663b88637a9a10e859e492c73d0384514a17d78ee205/cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", size = 172475, upload_time = "2024-09-04T20:44:43.733Z" }, - { url = "https://files.pythonhosted.org/packages/7c/fc/6a8cb64e5f0324877d503c854da15d76c1e50eb722e320b15345c4d0c6de/cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", size = 182009, upload_time = "2024-09-04T20:44:45.309Z" }, +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser", marker = "implementation_name != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", size = 523588 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ea/47/4f61023ea636104d4f16ab488e268b93008c3d0bb76893b1b31db1f96802/cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d", size = 185271 }, + { url = "https://files.pythonhosted.org/packages/df/a2/781b623f57358e360d62cdd7a8c681f074a71d445418a776eef0aadb4ab4/cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c", size = 181048 }, + { url = "https://files.pythonhosted.org/packages/ff/df/a4f0fbd47331ceeba3d37c2e51e9dfc9722498becbeec2bd8bc856c9538a/cffi-2.0.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe", size = 212529 }, + { url = "https://files.pythonhosted.org/packages/d5/72/12b5f8d3865bf0f87cf1404d8c374e7487dcf097a1c91c436e72e6badd83/cffi-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062", size = 220097 }, + { url = "https://files.pythonhosted.org/packages/c2/95/7a135d52a50dfa7c882ab0ac17e8dc11cec9d55d2c18dda414c051c5e69e/cffi-2.0.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e", size = 207983 }, + { url = "https://files.pythonhosted.org/packages/3a/c8/15cb9ada8895957ea171c62dc78ff3e99159ee7adb13c0123c001a2546c1/cffi-2.0.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037", size = 206519 }, + { url = "https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba", size = 219572 }, + { url = "https://files.pythonhosted.org/packages/07/e0/267e57e387b4ca276b90f0434ff88b2c2241ad72b16d31836adddfd6031b/cffi-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94", size = 222963 }, + { url = "https://files.pythonhosted.org/packages/b6/75/1f2747525e06f53efbd878f4d03bac5b859cbc11c633d0fb81432d98a795/cffi-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187", size = 221361 }, + { url = "https://files.pythonhosted.org/packages/7b/2b/2b6435f76bfeb6bbf055596976da087377ede68df465419d192acf00c437/cffi-2.0.0-cp312-cp312-win32.whl", hash = "sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18", size = 172932 }, + { url = "https://files.pythonhosted.org/packages/f8/ed/13bd4418627013bec4ed6e54283b1959cf6db888048c7cf4b4c3b5b36002/cffi-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5", size = 183557 }, + { url = "https://files.pythonhosted.org/packages/95/31/9f7f93ad2f8eff1dbc1c3656d7ca5bfd8fb52c9d786b4dcf19b2d02217fa/cffi-2.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6", size = 177762 }, + { url = "https://files.pythonhosted.org/packages/4b/8d/a0a47a0c9e413a658623d014e91e74a50cdd2c423f7ccfd44086ef767f90/cffi-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb", size = 185230 }, + { url = "https://files.pythonhosted.org/packages/4a/d2/a6c0296814556c68ee32009d9c2ad4f85f2707cdecfd7727951ec228005d/cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca", size = 181043 }, + { url = "https://files.pythonhosted.org/packages/b0/1e/d22cc63332bd59b06481ceaac49d6c507598642e2230f201649058a7e704/cffi-2.0.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b", size = 212446 }, + { url = "https://files.pythonhosted.org/packages/a9/f5/a2c23eb03b61a0b8747f211eb716446c826ad66818ddc7810cc2cc19b3f2/cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b", size = 220101 }, + { url = "https://files.pythonhosted.org/packages/f2/7f/e6647792fc5850d634695bc0e6ab4111ae88e89981d35ac269956605feba/cffi-2.0.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2", size = 207948 }, + { url = "https://files.pythonhosted.org/packages/cb/1e/a5a1bd6f1fb30f22573f76533de12a00bf274abcdc55c8edab639078abb6/cffi-2.0.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3", size = 206422 }, + { url = "https://files.pythonhosted.org/packages/98/df/0a1755e750013a2081e863e7cd37e0cdd02664372c754e5560099eb7aa44/cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26", size = 219499 }, + { url = "https://files.pythonhosted.org/packages/50/e1/a969e687fcf9ea58e6e2a928ad5e2dd88cc12f6f0ab477e9971f2309b57c/cffi-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c", size = 222928 }, + { url = "https://files.pythonhosted.org/packages/36/54/0362578dd2c9e557a28ac77698ed67323ed5b9775ca9d3fe73fe191bb5d8/cffi-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b", size = 221302 }, + { url = "https://files.pythonhosted.org/packages/eb/6d/bf9bda840d5f1dfdbf0feca87fbdb64a918a69bca42cfa0ba7b137c48cb8/cffi-2.0.0-cp313-cp313-win32.whl", hash = "sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27", size = 172909 }, + { url = "https://files.pythonhosted.org/packages/37/18/6519e1ee6f5a1e579e04b9ddb6f1676c17368a7aba48299c3759bbc3c8b3/cffi-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75", size = 183402 }, + { url = "https://files.pythonhosted.org/packages/cb/0e/02ceeec9a7d6ee63bb596121c2c8e9b3a9e150936f4fbef6ca1943e6137c/cffi-2.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91", size = 177780 }, + { url = "https://files.pythonhosted.org/packages/92/c4/3ce07396253a83250ee98564f8d7e9789fab8e58858f35d07a9a2c78de9f/cffi-2.0.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5", size = 185320 }, + { url = "https://files.pythonhosted.org/packages/59/dd/27e9fa567a23931c838c6b02d0764611c62290062a6d4e8ff7863daf9730/cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13", size = 181487 }, + { url = "https://files.pythonhosted.org/packages/d6/43/0e822876f87ea8a4ef95442c3d766a06a51fc5298823f884ef87aaad168c/cffi-2.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b", size = 220049 }, + { url = "https://files.pythonhosted.org/packages/b4/89/76799151d9c2d2d1ead63c2429da9ea9d7aac304603de0c6e8764e6e8e70/cffi-2.0.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c", size = 207793 }, + { url = "https://files.pythonhosted.org/packages/bb/dd/3465b14bb9e24ee24cb88c9e3730f6de63111fffe513492bf8c808a3547e/cffi-2.0.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef", size = 206300 }, + { url = "https://files.pythonhosted.org/packages/47/d9/d83e293854571c877a92da46fdec39158f8d7e68da75bf73581225d28e90/cffi-2.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775", size = 219244 }, + { url = "https://files.pythonhosted.org/packages/2b/0f/1f177e3683aead2bb00f7679a16451d302c436b5cbf2505f0ea8146ef59e/cffi-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205", size = 222828 }, + { url = "https://files.pythonhosted.org/packages/c6/0f/cafacebd4b040e3119dcb32fed8bdef8dfe94da653155f9d0b9dc660166e/cffi-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1", size = 220926 }, + { url = "https://files.pythonhosted.org/packages/3e/aa/df335faa45b395396fcbc03de2dfcab242cd61a9900e914fe682a59170b1/cffi-2.0.0-cp314-cp314-win32.whl", hash = "sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f", size = 175328 }, + { url = "https://files.pythonhosted.org/packages/bb/92/882c2d30831744296ce713f0feb4c1cd30f346ef747b530b5318715cc367/cffi-2.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25", size = 185650 }, + { url = "https://files.pythonhosted.org/packages/9f/2c/98ece204b9d35a7366b5b2c6539c350313ca13932143e79dc133ba757104/cffi-2.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad", size = 180687 }, + { url = "https://files.pythonhosted.org/packages/3e/61/c768e4d548bfa607abcda77423448df8c471f25dbe64fb2ef6d555eae006/cffi-2.0.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9", size = 188773 }, + { url = "https://files.pythonhosted.org/packages/2c/ea/5f76bce7cf6fcd0ab1a1058b5af899bfbef198bea4d5686da88471ea0336/cffi-2.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d", size = 185013 }, + { url = "https://files.pythonhosted.org/packages/be/b4/c56878d0d1755cf9caa54ba71e5d049479c52f9e4afc230f06822162ab2f/cffi-2.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c", size = 221593 }, + { url = "https://files.pythonhosted.org/packages/e0/0d/eb704606dfe8033e7128df5e90fee946bbcb64a04fcdaa97321309004000/cffi-2.0.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8", size = 209354 }, + { url = "https://files.pythonhosted.org/packages/d8/19/3c435d727b368ca475fb8742ab97c9cb13a0de600ce86f62eab7fa3eea60/cffi-2.0.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc", size = 208480 }, + { url = "https://files.pythonhosted.org/packages/d0/44/681604464ed9541673e486521497406fadcc15b5217c3e326b061696899a/cffi-2.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592", size = 221584 }, + { url = "https://files.pythonhosted.org/packages/25/8e/342a504ff018a2825d395d44d63a767dd8ebc927ebda557fecdaca3ac33a/cffi-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512", size = 224443 }, + { url = "https://files.pythonhosted.org/packages/e1/5e/b666bacbbc60fbf415ba9988324a132c9a7a0448a9a8f125074671c0f2c3/cffi-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4", size = 223437 }, + { url = "https://files.pythonhosted.org/packages/a0/1d/ec1a60bd1a10daa292d3cd6bb0b359a81607154fb8165f3ec95fe003b85c/cffi-2.0.0-cp314-cp314t-win32.whl", hash = "sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e", size = 180487 }, + { url = "https://files.pythonhosted.org/packages/bf/41/4c1168c74fac325c0c8156f04b6749c8b6a8f405bbf91413ba088359f60d/cffi-2.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6", size = 191726 }, + { url = "https://files.pythonhosted.org/packages/ae/3a/dbeec9d1ee0844c679f6bb5d6ad4e9f198b1224f4e7a32825f47f6192b0c/cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9", size = 184195 }, ] [[package]] name = "cfgv" version = "3.4.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/11/74/539e56497d9bd1d484fd863dd69cbbfa653cd2aa27abfe35653494d85e94/cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560", size = 7114, upload_time = "2023-08-12T20:38:17.776Z" } +sdist = { url = "https://files.pythonhosted.org/packages/11/74/539e56497d9bd1d484fd863dd69cbbfa653cd2aa27abfe35653494d85e94/cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560", size = 7114 } wheels = [ - { url = "https://files.pythonhosted.org/packages/c5/55/51844dd50c4fc7a33b653bfaba4c2456f06955289ca770a5dbd5fd267374/cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9", size = 7249, upload_time = "2023-08-12T20:38:16.269Z" }, + { url = "https://files.pythonhosted.org/packages/c5/55/51844dd50c4fc7a33b653bfaba4c2456f06955289ca770a5dbd5fd267374/cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9", size = 7249 }, ] [[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" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/0d/f7b6ab21ec75897ed80c17d79b15951a719226b9fababf1e40ea74d69079/chardet-5.2.0.tar.gz", hash = "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7", size = 2069618 } 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" }, + { url = "https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl", hash = "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970", size = 199385 }, ] [[package]] name = "charset-normalizer" -version = "3.4.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e4/33/89c2ced2b67d1c2a61c19c6751aa8902d46ce3dacb23600a283619f5a12d/charset_normalizer-3.4.2.tar.gz", hash = "sha256:5baececa9ecba31eff645232d59845c07aa030f0c81ee70184a90d35099a0e63", size = 126367, upload_time = "2025-05-02T08:34:42.01Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d7/a4/37f4d6035c89cac7930395a35cc0f1b872e652eaafb76a6075943754f095/charset_normalizer-3.4.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0c29de6a1a95f24b9a1aa7aefd27d2487263f00dfd55a77719b530788f75cff7", size = 199936, upload_time = "2025-05-02T08:32:33.712Z" }, - { url = "https://files.pythonhosted.org/packages/ee/8a/1a5e33b73e0d9287274f899d967907cd0bf9c343e651755d9307e0dbf2b3/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cddf7bd982eaa998934a91f69d182aec997c6c468898efe6679af88283b498d3", size = 143790, upload_time = "2025-05-02T08:32:35.768Z" }, - { url = "https://files.pythonhosted.org/packages/66/52/59521f1d8e6ab1482164fa21409c5ef44da3e9f653c13ba71becdd98dec3/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcbe676a55d7445b22c10967bceaaf0ee69407fbe0ece4d032b6eb8d4565982a", size = 153924, upload_time = "2025-05-02T08:32:37.284Z" }, - { url = "https://files.pythonhosted.org/packages/86/2d/fb55fdf41964ec782febbf33cb64be480a6b8f16ded2dbe8db27a405c09f/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d41c4d287cfc69060fa91cae9683eacffad989f1a10811995fa309df656ec214", size = 146626, upload_time = "2025-05-02T08:32:38.803Z" }, - { url = "https://files.pythonhosted.org/packages/8c/73/6ede2ec59bce19b3edf4209d70004253ec5f4e319f9a2e3f2f15601ed5f7/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e594135de17ab3866138f496755f302b72157d115086d100c3f19370839dd3a", size = 148567, upload_time = "2025-05-02T08:32:40.251Z" }, - { url = "https://files.pythonhosted.org/packages/09/14/957d03c6dc343c04904530b6bef4e5efae5ec7d7990a7cbb868e4595ee30/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cf713fe9a71ef6fd5adf7a79670135081cd4431c2943864757f0fa3a65b1fafd", size = 150957, upload_time = "2025-05-02T08:32:41.705Z" }, - { url = "https://files.pythonhosted.org/packages/0d/c8/8174d0e5c10ccebdcb1b53cc959591c4c722a3ad92461a273e86b9f5a302/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a370b3e078e418187da8c3674eddb9d983ec09445c99a3a263c2011993522981", size = 145408, upload_time = "2025-05-02T08:32:43.709Z" }, - { url = "https://files.pythonhosted.org/packages/58/aa/8904b84bc8084ac19dc52feb4f5952c6df03ffb460a887b42615ee1382e8/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a955b438e62efdf7e0b7b52a64dc5c3396e2634baa62471768a64bc2adb73d5c", size = 153399, upload_time = "2025-05-02T08:32:46.197Z" }, - { url = "https://files.pythonhosted.org/packages/c2/26/89ee1f0e264d201cb65cf054aca6038c03b1a0c6b4ae998070392a3ce605/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:7222ffd5e4de8e57e03ce2cef95a4c43c98fcb72ad86909abdfc2c17d227fc1b", size = 156815, upload_time = "2025-05-02T08:32:48.105Z" }, - { url = "https://files.pythonhosted.org/packages/fd/07/68e95b4b345bad3dbbd3a8681737b4338ff2c9df29856a6d6d23ac4c73cb/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:bee093bf902e1d8fc0ac143c88902c3dfc8941f7ea1d6a8dd2bcb786d33db03d", size = 154537, upload_time = "2025-05-02T08:32:49.719Z" }, - { url = "https://files.pythonhosted.org/packages/77/1a/5eefc0ce04affb98af07bc05f3bac9094513c0e23b0562d64af46a06aae4/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dedb8adb91d11846ee08bec4c8236c8549ac721c245678282dcb06b221aab59f", size = 149565, upload_time = "2025-05-02T08:32:51.404Z" }, - { url = "https://files.pythonhosted.org/packages/37/a0/2410e5e6032a174c95e0806b1a6585eb21e12f445ebe239fac441995226a/charset_normalizer-3.4.2-cp312-cp312-win32.whl", hash = "sha256:db4c7bf0e07fc3b7d89ac2a5880a6a8062056801b83ff56d8464b70f65482b6c", size = 98357, upload_time = "2025-05-02T08:32:53.079Z" }, - { url = "https://files.pythonhosted.org/packages/6c/4f/c02d5c493967af3eda9c771ad4d2bbc8df6f99ddbeb37ceea6e8716a32bc/charset_normalizer-3.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:5a9979887252a82fefd3d3ed2a8e3b937a7a809f65dcb1e068b090e165bbe99e", size = 105776, upload_time = "2025-05-02T08:32:54.573Z" }, - { url = "https://files.pythonhosted.org/packages/ea/12/a93df3366ed32db1d907d7593a94f1fe6293903e3e92967bebd6950ed12c/charset_normalizer-3.4.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:926ca93accd5d36ccdabd803392ddc3e03e6d4cd1cf17deff3b989ab8e9dbcf0", size = 199622, upload_time = "2025-05-02T08:32:56.363Z" }, - { url = "https://files.pythonhosted.org/packages/04/93/bf204e6f344c39d9937d3c13c8cd5bbfc266472e51fc8c07cb7f64fcd2de/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eba9904b0f38a143592d9fc0e19e2df0fa2e41c3c3745554761c5f6447eedabf", size = 143435, upload_time = "2025-05-02T08:32:58.551Z" }, - { url = "https://files.pythonhosted.org/packages/22/2a/ea8a2095b0bafa6c5b5a55ffdc2f924455233ee7b91c69b7edfcc9e02284/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3fddb7e2c84ac87ac3a947cb4e66d143ca5863ef48e4a5ecb83bd48619e4634e", size = 153653, upload_time = "2025-05-02T08:33:00.342Z" }, - { url = "https://files.pythonhosted.org/packages/b6/57/1b090ff183d13cef485dfbe272e2fe57622a76694061353c59da52c9a659/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98f862da73774290f251b9df8d11161b6cf25b599a66baf087c1ffe340e9bfd1", size = 146231, upload_time = "2025-05-02T08:33:02.081Z" }, - { url = "https://files.pythonhosted.org/packages/e2/28/ffc026b26f441fc67bd21ab7f03b313ab3fe46714a14b516f931abe1a2d8/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c9379d65defcab82d07b2a9dfbfc2e95bc8fe0ebb1b176a3190230a3ef0e07c", size = 148243, upload_time = "2025-05-02T08:33:04.063Z" }, - { url = "https://files.pythonhosted.org/packages/c0/0f/9abe9bd191629c33e69e47c6ef45ef99773320e9ad8e9cb08b8ab4a8d4cb/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e635b87f01ebc977342e2697d05b56632f5f879a4f15955dfe8cef2448b51691", size = 150442, upload_time = "2025-05-02T08:33:06.418Z" }, - { url = "https://files.pythonhosted.org/packages/67/7c/a123bbcedca91d5916c056407f89a7f5e8fdfce12ba825d7d6b9954a1a3c/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1c95a1e2902a8b722868587c0e1184ad5c55631de5afc0eb96bc4b0d738092c0", size = 145147, upload_time = "2025-05-02T08:33:08.183Z" }, - { url = "https://files.pythonhosted.org/packages/ec/fe/1ac556fa4899d967b83e9893788e86b6af4d83e4726511eaaad035e36595/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ef8de666d6179b009dce7bcb2ad4c4a779f113f12caf8dc77f0162c29d20490b", size = 153057, upload_time = "2025-05-02T08:33:09.986Z" }, - { url = "https://files.pythonhosted.org/packages/2b/ff/acfc0b0a70b19e3e54febdd5301a98b72fa07635e56f24f60502e954c461/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:32fc0341d72e0f73f80acb0a2c94216bd704f4f0bce10aedea38f30502b271ff", size = 156454, upload_time = "2025-05-02T08:33:11.814Z" }, - { url = "https://files.pythonhosted.org/packages/92/08/95b458ce9c740d0645feb0e96cea1f5ec946ea9c580a94adfe0b617f3573/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:289200a18fa698949d2b39c671c2cc7a24d44096784e76614899a7ccf2574b7b", size = 154174, upload_time = "2025-05-02T08:33:13.707Z" }, - { url = "https://files.pythonhosted.org/packages/78/be/8392efc43487ac051eee6c36d5fbd63032d78f7728cb37aebcc98191f1ff/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4a476b06fbcf359ad25d34a057b7219281286ae2477cc5ff5e3f70a246971148", size = 149166, upload_time = "2025-05-02T08:33:15.458Z" }, - { url = "https://files.pythonhosted.org/packages/44/96/392abd49b094d30b91d9fbda6a69519e95802250b777841cf3bda8fe136c/charset_normalizer-3.4.2-cp313-cp313-win32.whl", hash = "sha256:aaeeb6a479c7667fbe1099af9617c83aaca22182d6cf8c53966491a0f1b7ffb7", size = 98064, upload_time = "2025-05-02T08:33:17.06Z" }, - { url = "https://files.pythonhosted.org/packages/e9/b0/0200da600134e001d91851ddc797809e2fe0ea72de90e09bec5a2fbdaccb/charset_normalizer-3.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980", size = 105641, upload_time = "2025-05-02T08:33:18.753Z" }, - { url = "https://files.pythonhosted.org/packages/20/94/c5790835a017658cbfabd07f3bfb549140c3ac458cfc196323996b10095a/charset_normalizer-3.4.2-py3-none-any.whl", hash = "sha256:7f56930ab0abd1c45cd15be65cc741c28b1c9a34876ce8c17a2fa107810c0af0", size = 52626, upload_time = "2025-05-02T08:34:40.053Z" }, +version = "3.4.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/83/2d/5fd176ceb9b2fc619e63405525573493ca23441330fcdaee6bef9460e924/charset_normalizer-3.4.3.tar.gz", hash = "sha256:6fce4b8500244f6fcb71465d4a4930d132ba9ab8e71a7859e6a5d59851068d14", size = 122371 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e9/5e/14c94999e418d9b87682734589404a25854d5f5d0408df68bc15b6ff54bb/charset_normalizer-3.4.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e28e334d3ff134e88989d90ba04b47d84382a828c061d0d1027b1b12a62b39b1", size = 205655 }, + { url = "https://files.pythonhosted.org/packages/7d/a8/c6ec5d389672521f644505a257f50544c074cf5fc292d5390331cd6fc9c3/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0cacf8f7297b0c4fcb74227692ca46b4a5852f8f4f24b3c766dd94a1075c4884", size = 146223 }, + { url = "https://files.pythonhosted.org/packages/fc/eb/a2ffb08547f4e1e5415fb69eb7db25932c52a52bed371429648db4d84fb1/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c6fd51128a41297f5409deab284fecbe5305ebd7e5a1f959bee1c054622b7018", size = 159366 }, + { url = "https://files.pythonhosted.org/packages/82/10/0fd19f20c624b278dddaf83b8464dcddc2456cb4b02bb902a6da126b87a1/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3cfb2aad70f2c6debfbcb717f23b7eb55febc0bb23dcffc0f076009da10c6392", size = 157104 }, + { url = "https://files.pythonhosted.org/packages/16/ab/0233c3231af734f5dfcf0844aa9582d5a1466c985bbed6cedab85af9bfe3/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1606f4a55c0fd363d754049cdf400175ee96c992b1f8018b993941f221221c5f", size = 151830 }, + { url = "https://files.pythonhosted.org/packages/ae/02/e29e22b4e02839a0e4a06557b1999d0a47db3567e82989b5bb21f3fbbd9f/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:027b776c26d38b7f15b26a5da1044f376455fb3766df8fc38563b4efbc515154", size = 148854 }, + { url = "https://files.pythonhosted.org/packages/05/6b/e2539a0a4be302b481e8cafb5af8792da8093b486885a1ae4d15d452bcec/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:42e5088973e56e31e4fa58eb6bd709e42fc03799c11c42929592889a2e54c491", size = 160670 }, + { url = "https://files.pythonhosted.org/packages/31/e7/883ee5676a2ef217a40ce0bffcc3d0dfbf9e64cbcfbdf822c52981c3304b/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:cc34f233c9e71701040d772aa7490318673aa7164a0efe3172b2981218c26d93", size = 158501 }, + { url = "https://files.pythonhosted.org/packages/c1/35/6525b21aa0db614cf8b5792d232021dca3df7f90a1944db934efa5d20bb1/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:320e8e66157cc4e247d9ddca8e21f427efc7a04bbd0ac8a9faf56583fa543f9f", size = 153173 }, + { url = "https://files.pythonhosted.org/packages/50/ee/f4704bad8201de513fdc8aac1cabc87e38c5818c93857140e06e772b5892/charset_normalizer-3.4.3-cp312-cp312-win32.whl", hash = "sha256:fb6fecfd65564f208cbf0fba07f107fb661bcd1a7c389edbced3f7a493f70e37", size = 99822 }, + { url = "https://files.pythonhosted.org/packages/39/f5/3b3836ca6064d0992c58c7561c6b6eee1b3892e9665d650c803bd5614522/charset_normalizer-3.4.3-cp312-cp312-win_amd64.whl", hash = "sha256:86df271bf921c2ee3818f0522e9a5b8092ca2ad8b065ece5d7d9d0e9f4849bcc", size = 107543 }, + { url = "https://files.pythonhosted.org/packages/65/ca/2135ac97709b400c7654b4b764daf5c5567c2da45a30cdd20f9eefe2d658/charset_normalizer-3.4.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:14c2a87c65b351109f6abfc424cab3927b3bdece6f706e4d12faaf3d52ee5efe", size = 205326 }, + { url = "https://files.pythonhosted.org/packages/71/11/98a04c3c97dd34e49c7d247083af03645ca3730809a5509443f3c37f7c99/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:41d1fc408ff5fdfb910200ec0e74abc40387bccb3252f3f27c0676731df2b2c8", size = 146008 }, + { url = "https://files.pythonhosted.org/packages/60/f5/4659a4cb3c4ec146bec80c32d8bb16033752574c20b1252ee842a95d1a1e/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1bb60174149316da1c35fa5233681f7c0f9f514509b8e399ab70fea5f17e45c9", size = 159196 }, + { url = "https://files.pythonhosted.org/packages/86/9e/f552f7a00611f168b9a5865a1414179b2c6de8235a4fa40189f6f79a1753/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:30d006f98569de3459c2fc1f2acde170b7b2bd265dc1943e87e1a4efe1b67c31", size = 156819 }, + { url = "https://files.pythonhosted.org/packages/7e/95/42aa2156235cbc8fa61208aded06ef46111c4d3f0de233107b3f38631803/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:416175faf02e4b0810f1f38bcb54682878a4af94059a1cd63b8747244420801f", size = 151350 }, + { url = "https://files.pythonhosted.org/packages/c2/a9/3865b02c56f300a6f94fc631ef54f0a8a29da74fb45a773dfd3dcd380af7/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6aab0f181c486f973bc7262a97f5aca3ee7e1437011ef0c2ec04b5a11d16c927", size = 148644 }, + { url = "https://files.pythonhosted.org/packages/77/d9/cbcf1a2a5c7d7856f11e7ac2d782aec12bdfea60d104e60e0aa1c97849dc/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:fdabf8315679312cfa71302f9bd509ded4f2f263fb5b765cf1433b39106c3cc9", size = 160468 }, + { url = "https://files.pythonhosted.org/packages/f6/42/6f45efee8697b89fda4d50580f292b8f7f9306cb2971d4b53f8914e4d890/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:bd28b817ea8c70215401f657edef3a8aa83c29d447fb0b622c35403780ba11d5", size = 158187 }, + { url = "https://files.pythonhosted.org/packages/70/99/f1c3bdcfaa9c45b3ce96f70b14f070411366fa19549c1d4832c935d8e2c3/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:18343b2d246dc6761a249ba1fb13f9ee9a2bcd95decc767319506056ea4ad4dc", size = 152699 }, + { url = "https://files.pythonhosted.org/packages/a3/ad/b0081f2f99a4b194bcbb1934ef3b12aa4d9702ced80a37026b7607c72e58/charset_normalizer-3.4.3-cp313-cp313-win32.whl", hash = "sha256:6fb70de56f1859a3f71261cbe41005f56a7842cc348d3aeb26237560bfa5e0ce", size = 99580 }, + { url = "https://files.pythonhosted.org/packages/9a/8f/ae790790c7b64f925e5c953b924aaa42a243fb778fed9e41f147b2a5715a/charset_normalizer-3.4.3-cp313-cp313-win_amd64.whl", hash = "sha256:cf1ebb7d78e1ad8ec2a8c4732c7be2e736f6e5123a4146c5b89c9d1f585f8cef", size = 107366 }, + { url = "https://files.pythonhosted.org/packages/8e/91/b5a06ad970ddc7a0e513112d40113e834638f4ca1120eb727a249fb2715e/charset_normalizer-3.4.3-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:3cd35b7e8aedeb9e34c41385fda4f73ba609e561faedfae0a9e75e44ac558a15", size = 204342 }, + { url = "https://files.pythonhosted.org/packages/ce/ec/1edc30a377f0a02689342f214455c3f6c2fbedd896a1d2f856c002fc3062/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b89bc04de1d83006373429975f8ef9e7932534b8cc9ca582e4db7d20d91816db", size = 145995 }, + { url = "https://files.pythonhosted.org/packages/17/e5/5e67ab85e6d22b04641acb5399c8684f4d37caf7558a53859f0283a650e9/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2001a39612b241dae17b4687898843f254f8748b796a2e16f1051a17078d991d", size = 158640 }, + { url = "https://files.pythonhosted.org/packages/f1/e5/38421987f6c697ee3722981289d554957c4be652f963d71c5e46a262e135/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8dcfc373f888e4fb39a7bc57e93e3b845e7f462dacc008d9749568b1c4ece096", size = 156636 }, + { url = "https://files.pythonhosted.org/packages/a0/e4/5a075de8daa3ec0745a9a3b54467e0c2967daaaf2cec04c845f73493e9a1/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:18b97b8404387b96cdbd30ad660f6407799126d26a39ca65729162fd810a99aa", size = 150939 }, + { url = "https://files.pythonhosted.org/packages/02/f7/3611b32318b30974131db62b4043f335861d4d9b49adc6d57c1149cc49d4/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ccf600859c183d70eb47e05a44cd80a4ce77394d1ac0f79dbd2dd90a69a3a049", size = 148580 }, + { url = "https://files.pythonhosted.org/packages/7e/61/19b36f4bd67f2793ab6a99b979b4e4f3d8fc754cbdffb805335df4337126/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:53cd68b185d98dde4ad8990e56a58dea83a4162161b1ea9272e5c9182ce415e0", size = 159870 }, + { url = "https://files.pythonhosted.org/packages/06/57/84722eefdd338c04cf3030ada66889298eaedf3e7a30a624201e0cbe424a/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:30a96e1e1f865f78b030d65241c1ee850cdf422d869e9028e2fc1d5e4db73b92", size = 157797 }, + { url = "https://files.pythonhosted.org/packages/72/2a/aff5dd112b2f14bcc3462c312dce5445806bfc8ab3a7328555da95330e4b/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d716a916938e03231e86e43782ca7878fb602a125a91e7acb8b5112e2e96ac16", size = 152224 }, + { url = "https://files.pythonhosted.org/packages/b7/8c/9839225320046ed279c6e839d51f028342eb77c91c89b8ef2549f951f3ec/charset_normalizer-3.4.3-cp314-cp314-win32.whl", hash = "sha256:c6dbd0ccdda3a2ba7c2ecd9d77b37f3b5831687d8dc1b6ca5f56a4880cc7b7ce", size = 100086 }, + { url = "https://files.pythonhosted.org/packages/ee/7a/36fbcf646e41f710ce0a563c1c9a343c6edf9be80786edeb15b6f62e17db/charset_normalizer-3.4.3-cp314-cp314-win_amd64.whl", hash = "sha256:73dc19b562516fc9bcf6e5d6e596df0b4eb98d87e4f79f3ae71840e6ed21361c", size = 107400 }, + { url = "https://files.pythonhosted.org/packages/8a/1f/f041989e93b001bc4e44bb1669ccdcf54d3f00e628229a85b08d330615c5/charset_normalizer-3.4.3-py3-none-any.whl", hash = "sha256:ce571ab16d890d23b5c278547ba694193a45011ff86a9162a71307ed9f86759a", size = 53175 }, ] [[package]] @@ -242,136 +278,164 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/60/6c/8ca2efa64cf75a977a0d7fac081354553ebe483345c734fb6b6515d96bbc/click-8.2.1.tar.gz", hash = "sha256:27c491cc05d968d271d5a1db13e3b5a184636d9d930f148c50b038f0d0646202", size = 286342, upload_time = "2025-05-20T23:19:49.832Z" } +sdist = { url = "https://files.pythonhosted.org/packages/60/6c/8ca2efa64cf75a977a0d7fac081354553ebe483345c734fb6b6515d96bbc/click-8.2.1.tar.gz", hash = "sha256:27c491cc05d968d271d5a1db13e3b5a184636d9d930f148c50b038f0d0646202", size = 286342 } wheels = [ - { url = "https://files.pythonhosted.org/packages/85/32/10bb5764d90a8eee674e9dc6f4db6a0ab47c8c4d0d83c27f7c39ac415a4d/click-8.2.1-py3-none-any.whl", hash = "sha256:61a3265b914e850b85317d0b3109c7f8cd35a670f963866005d6ef1d5175a12b", size = 102215, upload_time = "2025-05-20T23:19:47.796Z" }, + { url = "https://files.pythonhosted.org/packages/85/32/10bb5764d90a8eee674e9dc6f4db6a0ab47c8c4d0d83c27f7c39ac415a4d/click-8.2.1-py3-none-any.whl", hash = "sha256:61a3265b914e850b85317d0b3109c7f8cd35a670f963866005d6ef1d5175a12b", size = 102215 }, ] [[package]] name = "colorama" version = "0.4.6" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload_time = "2022-10-25T02:36:22.414Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 } wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload_time = "2022-10-25T02:36:20.889Z" }, + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 }, ] [[package]] name = "comm" -version = "0.2.2" +version = "0.2.3" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "traitlets" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/e9/a8/fb783cb0abe2b5fded9f55e5703015cdf1c9c85b3669087c538dd15a6a86/comm-0.2.2.tar.gz", hash = "sha256:3fd7a84065306e07bea1773df6eb8282de51ba82f77c72f9c85716ab11fe980e", size = 6210, upload_time = "2024-03-12T16:53:41.133Z" } +sdist = { url = "https://files.pythonhosted.org/packages/4c/13/7d740c5849255756bc17888787313b61fd38a0a8304fc4f073dfc46122aa/comm-0.2.3.tar.gz", hash = "sha256:2dc8048c10962d55d7ad693be1e7045d891b7ce8d999c97963a5e3e99c055971", size = 6319 } wheels = [ - { url = "https://files.pythonhosted.org/packages/e6/75/49e5bfe642f71f272236b5b2d2691cf915a7283cc0ceda56357b61daa538/comm-0.2.2-py3-none-any.whl", hash = "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3", size = 7180, upload_time = "2024-03-12T16:53:39.226Z" }, + { url = "https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl", hash = "sha256:c615d91d75f7f04f095b30d1c1711babd43bdc6419c1be9886a85f2f4e489417", size = 7294 }, ] [[package]] name = "coverage" -version = "7.10.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/87/0e/66dbd4c6a7f0758a8d18044c048779ba21fb94856e1edcf764bd5403e710/coverage-7.10.1.tar.gz", hash = "sha256:ae2b4856f29ddfe827106794f3589949a57da6f0d38ab01e24ec35107979ba57", size = 819938, upload_time = "2025-07-27T14:13:39.045Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a5/3f/b051feeb292400bd22d071fdf933b3ad389a8cef5c80c7866ed0c7414b9e/coverage-7.10.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6b7dc7f0a75a7eaa4584e5843c873c561b12602439d2351ee28c7478186c4da4", size = 214934, upload_time = "2025-07-27T14:11:36.096Z" }, - { url = "https://files.pythonhosted.org/packages/f8/e4/a61b27d5c4c2d185bdfb0bfe9d15ab4ac4f0073032665544507429ae60eb/coverage-7.10.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:607f82389f0ecafc565813aa201a5cade04f897603750028dd660fb01797265e", size = 215173, upload_time = "2025-07-27T14:11:38.005Z" }, - { url = "https://files.pythonhosted.org/packages/8a/01/40a6ee05b60d02d0bc53742ad4966e39dccd450aafb48c535a64390a3552/coverage-7.10.1-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:f7da31a1ba31f1c1d4d5044b7c5813878adae1f3af8f4052d679cc493c7328f4", size = 246190, upload_time = "2025-07-27T14:11:39.887Z" }, - { url = "https://files.pythonhosted.org/packages/11/ef/a28d64d702eb583c377255047281305dc5a5cfbfb0ee36e721f78255adb6/coverage-7.10.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:51fe93f3fe4f5d8483d51072fddc65e717a175490804e1942c975a68e04bf97a", size = 248618, upload_time = "2025-07-27T14:11:41.841Z" }, - { url = "https://files.pythonhosted.org/packages/6a/ad/73d018bb0c8317725370c79d69b5c6e0257df84a3b9b781bda27a438a3be/coverage-7.10.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3e59d00830da411a1feef6ac828b90bbf74c9b6a8e87b8ca37964925bba76dbe", size = 250081, upload_time = "2025-07-27T14:11:43.705Z" }, - { url = "https://files.pythonhosted.org/packages/2d/dd/496adfbbb4503ebca5d5b2de8bed5ec00c0a76558ffc5b834fd404166bc9/coverage-7.10.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:924563481c27941229cb4e16eefacc35da28563e80791b3ddc5597b062a5c386", size = 247990, upload_time = "2025-07-27T14:11:45.244Z" }, - { url = "https://files.pythonhosted.org/packages/18/3c/a9331a7982facfac0d98a4a87b36ae666fe4257d0f00961a3a9ef73e015d/coverage-7.10.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:ca79146ee421b259f8131f153102220b84d1a5e6fb9c8aed13b3badfd1796de6", size = 246191, upload_time = "2025-07-27T14:11:47.093Z" }, - { url = "https://files.pythonhosted.org/packages/62/0c/75345895013b83f7afe92ec595e15a9a525ede17491677ceebb2ba5c3d85/coverage-7.10.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2b225a06d227f23f386fdc0eab471506d9e644be699424814acc7d114595495f", size = 247400, upload_time = "2025-07-27T14:11:48.643Z" }, - { url = "https://files.pythonhosted.org/packages/e2/a9/98b268cfc5619ef9df1d5d34fee408ecb1542d9fd43d467e5c2f28668cd4/coverage-7.10.1-cp312-cp312-win32.whl", hash = "sha256:5ba9a8770effec5baaaab1567be916c87d8eea0c9ad11253722d86874d885eca", size = 217338, upload_time = "2025-07-27T14:11:50.258Z" }, - { url = "https://files.pythonhosted.org/packages/fe/31/22a5440e4d1451f253c5cd69fdcead65e92ef08cd4ec237b8756dc0b20a7/coverage-7.10.1-cp312-cp312-win_amd64.whl", hash = "sha256:9eb245a8d8dd0ad73b4062135a251ec55086fbc2c42e0eb9725a9b553fba18a3", size = 218125, upload_time = "2025-07-27T14:11:52.034Z" }, - { url = "https://files.pythonhosted.org/packages/d6/2b/40d9f0ce7ee839f08a43c5bfc9d05cec28aaa7c9785837247f96cbe490b9/coverage-7.10.1-cp312-cp312-win_arm64.whl", hash = "sha256:7718060dd4434cc719803a5e526838a5d66e4efa5dc46d2b25c21965a9c6fcc4", size = 216523, upload_time = "2025-07-27T14:11:53.965Z" }, - { url = "https://files.pythonhosted.org/packages/ef/72/135ff5fef09b1ffe78dbe6fcf1e16b2e564cd35faeacf3d63d60d887f12d/coverage-7.10.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ebb08d0867c5a25dffa4823377292a0ffd7aaafb218b5d4e2e106378b1061e39", size = 214960, upload_time = "2025-07-27T14:11:55.959Z" }, - { url = "https://files.pythonhosted.org/packages/b1/aa/73a5d1a6fc08ca709a8177825616aa95ee6bf34d522517c2595484a3e6c9/coverage-7.10.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f32a95a83c2e17422f67af922a89422cd24c6fa94041f083dd0bb4f6057d0bc7", size = 215220, upload_time = "2025-07-27T14:11:57.899Z" }, - { url = "https://files.pythonhosted.org/packages/8d/40/3124fdd45ed3772a42fc73ca41c091699b38a2c3bd4f9cb564162378e8b6/coverage-7.10.1-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:c4c746d11c8aba4b9f58ca8bfc6fbfd0da4efe7960ae5540d1a1b13655ee8892", size = 245772, upload_time = "2025-07-27T14:12:00.422Z" }, - { url = "https://files.pythonhosted.org/packages/42/62/a77b254822efa8c12ad59e8039f2bc3df56dc162ebda55e1943e35ba31a5/coverage-7.10.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:7f39edd52c23e5c7ed94e0e4bf088928029edf86ef10b95413e5ea670c5e92d7", size = 248116, upload_time = "2025-07-27T14:12:03.099Z" }, - { url = "https://files.pythonhosted.org/packages/1d/01/8101f062f472a3a6205b458d18ef0444a63ae5d36a8a5ed5dd0f6167f4db/coverage-7.10.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ab6e19b684981d0cd968906e293d5628e89faacb27977c92f3600b201926b994", size = 249554, upload_time = "2025-07-27T14:12:04.668Z" }, - { url = "https://files.pythonhosted.org/packages/8f/7b/e51bc61573e71ff7275a4f167aecbd16cb010aefdf54bcd8b0a133391263/coverage-7.10.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5121d8cf0eacb16133501455d216bb5f99899ae2f52d394fe45d59229e6611d0", size = 247766, upload_time = "2025-07-27T14:12:06.234Z" }, - { url = "https://files.pythonhosted.org/packages/4b/71/1c96d66a51d4204a9d6d12df53c4071d87e110941a2a1fe94693192262f5/coverage-7.10.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:df1c742ca6f46a6f6cbcaef9ac694dc2cb1260d30a6a2f5c68c5f5bcfee1cfd7", size = 245735, upload_time = "2025-07-27T14:12:08.305Z" }, - { url = "https://files.pythonhosted.org/packages/13/d5/efbc2ac4d35ae2f22ef6df2ca084c60e13bd9378be68655e3268c80349ab/coverage-7.10.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:40f9a38676f9c073bf4b9194707aa1eb97dca0e22cc3766d83879d72500132c7", size = 247118, upload_time = "2025-07-27T14:12:09.903Z" }, - { url = "https://files.pythonhosted.org/packages/d1/22/073848352bec28ca65f2b6816b892fcf9a31abbef07b868487ad15dd55f1/coverage-7.10.1-cp313-cp313-win32.whl", hash = "sha256:2348631f049e884839553b9974f0821d39241c6ffb01a418efce434f7eba0fe7", size = 217381, upload_time = "2025-07-27T14:12:11.535Z" }, - { url = "https://files.pythonhosted.org/packages/b7/df/df6a0ff33b042f000089bd11b6bb034bab073e2ab64a56e78ed882cba55d/coverage-7.10.1-cp313-cp313-win_amd64.whl", hash = "sha256:4072b31361b0d6d23f750c524f694e1a417c1220a30d3ef02741eed28520c48e", size = 218152, upload_time = "2025-07-27T14:12:13.182Z" }, - { url = "https://files.pythonhosted.org/packages/30/e3/5085ca849a40ed6b47cdb8f65471c2f754e19390b5a12fa8abd25cbfaa8f/coverage-7.10.1-cp313-cp313-win_arm64.whl", hash = "sha256:3e31dfb8271937cab9425f19259b1b1d1f556790e98eb266009e7a61d337b6d4", size = 216559, upload_time = "2025-07-27T14:12:14.807Z" }, - { url = "https://files.pythonhosted.org/packages/cc/93/58714efbfdeb547909feaabe1d67b2bdd59f0597060271b9c548d5efb529/coverage-7.10.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:1c4f679c6b573a5257af6012f167a45be4c749c9925fd44d5178fd641ad8bf72", size = 215677, upload_time = "2025-07-27T14:12:16.68Z" }, - { url = "https://files.pythonhosted.org/packages/c0/0c/18eaa5897e7e8cb3f8c45e563e23e8a85686b4585e29d53cacb6bc9cb340/coverage-7.10.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:871ebe8143da284bd77b84a9136200bd638be253618765d21a1fce71006d94af", size = 215899, upload_time = "2025-07-27T14:12:18.758Z" }, - { url = "https://files.pythonhosted.org/packages/84/c1/9d1affacc3c75b5a184c140377701bbf14fc94619367f07a269cd9e4fed6/coverage-7.10.1-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:998c4751dabf7d29b30594af416e4bf5091f11f92a8d88eb1512c7ba136d1ed7", size = 257140, upload_time = "2025-07-27T14:12:20.357Z" }, - { url = "https://files.pythonhosted.org/packages/3d/0f/339bc6b8fa968c346df346068cca1f24bdea2ddfa93bb3dc2e7749730962/coverage-7.10.1-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:780f750a25e7749d0af6b3631759c2c14f45de209f3faaa2398312d1c7a22759", size = 259005, upload_time = "2025-07-27T14:12:22.007Z" }, - { url = "https://files.pythonhosted.org/packages/c8/22/89390864b92ea7c909079939b71baba7e5b42a76bf327c1d615bd829ba57/coverage-7.10.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:590bdba9445df4763bdbebc928d8182f094c1f3947a8dc0fc82ef014dbdd8324", size = 261143, upload_time = "2025-07-27T14:12:23.746Z" }, - { url = "https://files.pythonhosted.org/packages/2c/56/3d04d89017c0c41c7a71bd69b29699d919b6bbf2649b8b2091240b97dd6a/coverage-7.10.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b2df80cb6a2af86d300e70acb82e9b79dab2c1e6971e44b78dbfc1a1e736b53", size = 258735, upload_time = "2025-07-27T14:12:25.73Z" }, - { url = "https://files.pythonhosted.org/packages/cb/40/312252c8afa5ca781063a09d931f4b9409dc91526cd0b5a2b84143ffafa2/coverage-7.10.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:d6a558c2725bfb6337bf57c1cd366c13798bfd3bfc9e3dd1f4a6f6fc95a4605f", size = 256871, upload_time = "2025-07-27T14:12:27.767Z" }, - { url = "https://files.pythonhosted.org/packages/1f/2b/564947d5dede068215aaddb9e05638aeac079685101462218229ddea9113/coverage-7.10.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e6150d167f32f2a54690e572e0a4c90296fb000a18e9b26ab81a6489e24e78dd", size = 257692, upload_time = "2025-07-27T14:12:29.347Z" }, - { url = "https://files.pythonhosted.org/packages/93/1b/c8a867ade85cb26d802aea2209b9c2c80613b9c122baa8c8ecea6799648f/coverage-7.10.1-cp313-cp313t-win32.whl", hash = "sha256:d946a0c067aa88be4a593aad1236493313bafaa27e2a2080bfe88db827972f3c", size = 218059, upload_time = "2025-07-27T14:12:31.076Z" }, - { url = "https://files.pythonhosted.org/packages/a1/fe/cd4ab40570ae83a516bf5e754ea4388aeedd48e660e40c50b7713ed4f930/coverage-7.10.1-cp313-cp313t-win_amd64.whl", hash = "sha256:e37c72eaccdd5ed1130c67a92ad38f5b2af66eeff7b0abe29534225db2ef7b18", size = 219150, upload_time = "2025-07-27T14:12:32.746Z" }, - { url = "https://files.pythonhosted.org/packages/8d/16/6e5ed5854be6d70d0c39e9cb9dd2449f2c8c34455534c32c1a508c7dbdb5/coverage-7.10.1-cp313-cp313t-win_arm64.whl", hash = "sha256:89ec0ffc215c590c732918c95cd02b55c7d0f569d76b90bb1a5e78aa340618e4", size = 217014, upload_time = "2025-07-27T14:12:34.406Z" }, - { url = "https://files.pythonhosted.org/packages/54/8e/6d0bfe9c3d7121cf936c5f8b03e8c3da1484fb801703127dba20fb8bd3c7/coverage-7.10.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:166d89c57e877e93d8827dac32cedae6b0277ca684c6511497311249f35a280c", size = 214951, upload_time = "2025-07-27T14:12:36.069Z" }, - { url = "https://files.pythonhosted.org/packages/f2/29/e3e51a8c653cf2174c60532aafeb5065cea0911403fa144c9abe39790308/coverage-7.10.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:bed4a2341b33cd1a7d9ffc47df4a78ee61d3416d43b4adc9e18b7d266650b83e", size = 215229, upload_time = "2025-07-27T14:12:37.759Z" }, - { url = "https://files.pythonhosted.org/packages/e0/59/3c972080b2fa18b6c4510201f6d4dc87159d450627d062cd9ad051134062/coverage-7.10.1-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:ddca1e4f5f4c67980533df01430184c19b5359900e080248bbf4ed6789584d8b", size = 245738, upload_time = "2025-07-27T14:12:39.453Z" }, - { url = "https://files.pythonhosted.org/packages/2e/04/fc0d99d3f809452654e958e1788454f6e27b34e43f8f8598191c8ad13537/coverage-7.10.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:37b69226001d8b7de7126cad7366b0778d36777e4d788c66991455ba817c5b41", size = 248045, upload_time = "2025-07-27T14:12:41.387Z" }, - { url = "https://files.pythonhosted.org/packages/5e/2e/afcbf599e77e0dfbf4c97197747250d13d397d27e185b93987d9eaac053d/coverage-7.10.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b2f22102197bcb1722691296f9e589f02b616f874e54a209284dd7b9294b0b7f", size = 249666, upload_time = "2025-07-27T14:12:43.056Z" }, - { url = "https://files.pythonhosted.org/packages/6e/ae/bc47f7f8ecb7a06cbae2bf86a6fa20f479dd902bc80f57cff7730438059d/coverage-7.10.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:1e0c768b0f9ac5839dac5cf88992a4bb459e488ee8a1f8489af4cb33b1af00f1", size = 247692, upload_time = "2025-07-27T14:12:44.83Z" }, - { url = "https://files.pythonhosted.org/packages/b6/26/cbfa3092d31ccba8ba7647e4d25753263e818b4547eba446b113d7d1efdf/coverage-7.10.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:991196702d5e0b120a8fef2664e1b9c333a81d36d5f6bcf6b225c0cf8b0451a2", size = 245536, upload_time = "2025-07-27T14:12:46.527Z" }, - { url = "https://files.pythonhosted.org/packages/56/77/9c68e92500e6a1c83d024a70eadcc9a173f21aadd73c4675fe64c9c43fdf/coverage-7.10.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ae8e59e5f4fd85d6ad34c2bb9d74037b5b11be072b8b7e9986beb11f957573d4", size = 246954, upload_time = "2025-07-27T14:12:49.279Z" }, - { url = "https://files.pythonhosted.org/packages/7f/a5/ba96671c5a669672aacd9877a5987c8551501b602827b4e84256da2a30a7/coverage-7.10.1-cp314-cp314-win32.whl", hash = "sha256:042125c89cf74a074984002e165d61fe0e31c7bd40ebb4bbebf07939b5924613", size = 217616, upload_time = "2025-07-27T14:12:51.214Z" }, - { url = "https://files.pythonhosted.org/packages/e7/3c/e1e1eb95fc1585f15a410208c4795db24a948e04d9bde818fe4eb893bc85/coverage-7.10.1-cp314-cp314-win_amd64.whl", hash = "sha256:a22c3bfe09f7a530e2c94c87ff7af867259c91bef87ed2089cd69b783af7b84e", size = 218412, upload_time = "2025-07-27T14:12:53.429Z" }, - { url = "https://files.pythonhosted.org/packages/b0/85/7e1e5be2cb966cba95566ba702b13a572ca744fbb3779df9888213762d67/coverage-7.10.1-cp314-cp314-win_arm64.whl", hash = "sha256:ee6be07af68d9c4fca4027c70cea0c31a0f1bc9cb464ff3c84a1f916bf82e652", size = 216776, upload_time = "2025-07-27T14:12:55.482Z" }, - { url = "https://files.pythonhosted.org/packages/62/0f/5bb8f29923141cca8560fe2217679caf4e0db643872c1945ac7d8748c2a7/coverage-7.10.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:d24fb3c0c8ff0d517c5ca5de7cf3994a4cd559cde0315201511dbfa7ab528894", size = 215698, upload_time = "2025-07-27T14:12:57.225Z" }, - { url = "https://files.pythonhosted.org/packages/80/29/547038ffa4e8e4d9e82f7dfc6d152f75fcdc0af146913f0ba03875211f03/coverage-7.10.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1217a54cfd79be20512a67ca81c7da3f2163f51bbfd188aab91054df012154f5", size = 215902, upload_time = "2025-07-27T14:12:59.071Z" }, - { url = "https://files.pythonhosted.org/packages/e1/8a/7aaa8fbfaed900147987a424e112af2e7790e1ac9cd92601e5bd4e1ba60a/coverage-7.10.1-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:51f30da7a52c009667e02f125737229d7d8044ad84b79db454308033a7808ab2", size = 257230, upload_time = "2025-07-27T14:13:01.248Z" }, - { url = "https://files.pythonhosted.org/packages/e5/1d/c252b5ffac44294e23a0d79dd5acf51749b39795ccc898faeabf7bee903f/coverage-7.10.1-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:ed3718c757c82d920f1c94089066225ca2ad7f00bb904cb72b1c39ebdd906ccb", size = 259194, upload_time = "2025-07-27T14:13:03.247Z" }, - { url = "https://files.pythonhosted.org/packages/16/ad/6c8d9f83d08f3bac2e7507534d0c48d1a4f52c18e6f94919d364edbdfa8f/coverage-7.10.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cc452481e124a819ced0c25412ea2e144269ef2f2534b862d9f6a9dae4bda17b", size = 261316, upload_time = "2025-07-27T14:13:04.957Z" }, - { url = "https://files.pythonhosted.org/packages/d6/4e/f9bbf3a36c061e2e0e0f78369c006d66416561a33d2bee63345aee8ee65e/coverage-7.10.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:9d6f494c307e5cb9b1e052ec1a471060f1dea092c8116e642e7a23e79d9388ea", size = 258794, upload_time = "2025-07-27T14:13:06.715Z" }, - { url = "https://files.pythonhosted.org/packages/87/82/e600bbe78eb2cb0541751d03cef9314bcd0897e8eea156219c39b685f869/coverage-7.10.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:fc0e46d86905ddd16b85991f1f4919028092b4e511689bbdaff0876bd8aab3dd", size = 256869, upload_time = "2025-07-27T14:13:08.933Z" }, - { url = "https://files.pythonhosted.org/packages/ce/5d/2fc9a9236c5268f68ac011d97cd3a5ad16cc420535369bedbda659fdd9b7/coverage-7.10.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:80b9ccd82e30038b61fc9a692a8dc4801504689651b281ed9109f10cc9fe8b4d", size = 257765, upload_time = "2025-07-27T14:13:10.778Z" }, - { url = "https://files.pythonhosted.org/packages/8a/05/b4e00b2bd48a2dc8e1c7d2aea7455f40af2e36484ab2ef06deb85883e9fe/coverage-7.10.1-cp314-cp314t-win32.whl", hash = "sha256:e58991a2b213417285ec866d3cd32db17a6a88061a985dbb7e8e8f13af429c47", size = 218420, upload_time = "2025-07-27T14:13:12.882Z" }, - { url = "https://files.pythonhosted.org/packages/77/fb/d21d05f33ea27ece327422240e69654b5932b0b29e7fbc40fbab3cf199bf/coverage-7.10.1-cp314-cp314t-win_amd64.whl", hash = "sha256:e88dd71e4ecbc49d9d57d064117462c43f40a21a1383507811cf834a4a620651", size = 219536, upload_time = "2025-07-27T14:13:14.718Z" }, - { url = "https://files.pythonhosted.org/packages/a6/68/7fea94b141281ed8be3d1d5c4319a97f2befc3e487ce33657fc64db2c45e/coverage-7.10.1-cp314-cp314t-win_arm64.whl", hash = "sha256:1aadfb06a30c62c2eb82322171fe1f7c288c80ca4156d46af0ca039052814bab", size = 217190, upload_time = "2025-07-27T14:13:16.85Z" }, - { url = "https://files.pythonhosted.org/packages/0f/64/922899cff2c0fd3496be83fa8b81230f5a8d82a2ad30f98370b133c2c83b/coverage-7.10.1-py3-none-any.whl", hash = "sha256:fa2a258aa6bf188eb9a8948f7102a83da7c430a0dce918dbd8b60ef8fcb772d7", size = 206597, upload_time = "2025-07-27T14:13:37.221Z" }, +version = "7.10.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/51/26/d22c300112504f5f9a9fd2297ce33c35f3d353e4aeb987c8419453b2a7c2/coverage-7.10.7.tar.gz", hash = "sha256:f4ab143ab113be368a3e9b795f9cd7906c5ef407d6173fe9675a902e1fffc239", size = 827704 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/13/e4/eb12450f71b542a53972d19117ea5a5cea1cab3ac9e31b0b5d498df1bd5a/coverage-7.10.7-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7bb3b9ddb87ef7725056572368040c32775036472d5a033679d1fa6c8dc08417", size = 218290 }, + { url = "https://files.pythonhosted.org/packages/37/66/593f9be12fc19fb36711f19a5371af79a718537204d16ea1d36f16bd78d2/coverage-7.10.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:18afb24843cbc175687225cab1138c95d262337f5473512010e46831aa0c2973", size = 218515 }, + { url = "https://files.pythonhosted.org/packages/66/80/4c49f7ae09cafdacc73fbc30949ffe77359635c168f4e9ff33c9ebb07838/coverage-7.10.7-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:399a0b6347bcd3822be369392932884b8216d0944049ae22925631a9b3d4ba4c", size = 250020 }, + { url = "https://files.pythonhosted.org/packages/a6/90/a64aaacab3b37a17aaedd83e8000142561a29eb262cede42d94a67f7556b/coverage-7.10.7-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:314f2c326ded3f4b09be11bc282eb2fc861184bc95748ae67b360ac962770be7", size = 252769 }, + { url = "https://files.pythonhosted.org/packages/98/2e/2dda59afd6103b342e096f246ebc5f87a3363b5412609946c120f4e7750d/coverage-7.10.7-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c41e71c9cfb854789dee6fc51e46743a6d138b1803fab6cb860af43265b42ea6", size = 253901 }, + { url = "https://files.pythonhosted.org/packages/53/dc/8d8119c9051d50f3119bb4a75f29f1e4a6ab9415cd1fa8bf22fcc3fb3b5f/coverage-7.10.7-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc01f57ca26269c2c706e838f6422e2a8788e41b3e3c65e2f41148212e57cd59", size = 250413 }, + { url = "https://files.pythonhosted.org/packages/98/b3/edaff9c5d79ee4d4b6d3fe046f2b1d799850425695b789d491a64225d493/coverage-7.10.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a6442c59a8ac8b85812ce33bc4d05bde3fb22321fa8294e2a5b487c3505f611b", size = 251820 }, + { url = "https://files.pythonhosted.org/packages/11/25/9a0728564bb05863f7e513e5a594fe5ffef091b325437f5430e8cfb0d530/coverage-7.10.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:78a384e49f46b80fb4c901d52d92abe098e78768ed829c673fbb53c498bef73a", size = 249941 }, + { url = "https://files.pythonhosted.org/packages/e0/fd/ca2650443bfbef5b0e74373aac4df67b08180d2f184b482c41499668e258/coverage-7.10.7-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:5e1e9802121405ede4b0133aa4340ad8186a1d2526de5b7c3eca519db7bb89fb", size = 249519 }, + { url = "https://files.pythonhosted.org/packages/24/79/f692f125fb4299b6f963b0745124998ebb8e73ecdfce4ceceb06a8c6bec5/coverage-7.10.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d41213ea25a86f69efd1575073d34ea11aabe075604ddf3d148ecfec9e1e96a1", size = 251375 }, + { url = "https://files.pythonhosted.org/packages/5e/75/61b9bbd6c7d24d896bfeec57acba78e0f8deac68e6baf2d4804f7aae1f88/coverage-7.10.7-cp312-cp312-win32.whl", hash = "sha256:77eb4c747061a6af8d0f7bdb31f1e108d172762ef579166ec84542f711d90256", size = 220699 }, + { url = "https://files.pythonhosted.org/packages/ca/f3/3bf7905288b45b075918d372498f1cf845b5b579b723c8fd17168018d5f5/coverage-7.10.7-cp312-cp312-win_amd64.whl", hash = "sha256:f51328ffe987aecf6d09f3cd9d979face89a617eacdaea43e7b3080777f647ba", size = 221512 }, + { url = "https://files.pythonhosted.org/packages/5c/44/3e32dbe933979d05cf2dac5e697c8599cfe038aaf51223ab901e208d5a62/coverage-7.10.7-cp312-cp312-win_arm64.whl", hash = "sha256:bda5e34f8a75721c96085903c6f2197dc398c20ffd98df33f866a9c8fd95f4bf", size = 220147 }, + { url = "https://files.pythonhosted.org/packages/9a/94/b765c1abcb613d103b64fcf10395f54d69b0ef8be6a0dd9c524384892cc7/coverage-7.10.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:981a651f543f2854abd3b5fcb3263aac581b18209be49863ba575de6edf4c14d", size = 218320 }, + { url = "https://files.pythonhosted.org/packages/72/4f/732fff31c119bb73b35236dd333030f32c4bfe909f445b423e6c7594f9a2/coverage-7.10.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:73ab1601f84dc804f7812dc297e93cd99381162da39c47040a827d4e8dafe63b", size = 218575 }, + { url = "https://files.pythonhosted.org/packages/87/02/ae7e0af4b674be47566707777db1aa375474f02a1d64b9323e5813a6cdd5/coverage-7.10.7-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:a8b6f03672aa6734e700bbcd65ff050fd19cddfec4b031cc8cf1c6967de5a68e", size = 249568 }, + { url = "https://files.pythonhosted.org/packages/a2/77/8c6d22bf61921a59bce5471c2f1f7ac30cd4ac50aadde72b8c48d5727902/coverage-7.10.7-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:10b6ba00ab1132a0ce4428ff68cf50a25efd6840a42cdf4239c9b99aad83be8b", size = 252174 }, + { url = "https://files.pythonhosted.org/packages/b1/20/b6ea4f69bbb52dac0aebd62157ba6a9dddbfe664f5af8122dac296c3ee15/coverage-7.10.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c79124f70465a150e89340de5963f936ee97097d2ef76c869708c4248c63ca49", size = 253447 }, + { url = "https://files.pythonhosted.org/packages/f9/28/4831523ba483a7f90f7b259d2018fef02cb4d5b90bc7c1505d6e5a84883c/coverage-7.10.7-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:69212fbccdbd5b0e39eac4067e20a4a5256609e209547d86f740d68ad4f04911", size = 249779 }, + { url = "https://files.pythonhosted.org/packages/a7/9f/4331142bc98c10ca6436d2d620c3e165f31e6c58d43479985afce6f3191c/coverage-7.10.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7ea7c6c9d0d286d04ed3541747e6597cbe4971f22648b68248f7ddcd329207f0", size = 251604 }, + { url = "https://files.pythonhosted.org/packages/ce/60/bda83b96602036b77ecf34e6393a3836365481b69f7ed7079ab85048202b/coverage-7.10.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b9be91986841a75042b3e3243d0b3cb0b2434252b977baaf0cd56e960fe1e46f", size = 249497 }, + { url = "https://files.pythonhosted.org/packages/5f/af/152633ff35b2af63977edd835d8e6430f0caef27d171edf2fc76c270ef31/coverage-7.10.7-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:b281d5eca50189325cfe1f365fafade89b14b4a78d9b40b05ddd1fc7d2a10a9c", size = 249350 }, + { url = "https://files.pythonhosted.org/packages/9d/71/d92105d122bd21cebba877228990e1646d862e34a98bb3374d3fece5a794/coverage-7.10.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:99e4aa63097ab1118e75a848a28e40d68b08a5e19ce587891ab7fd04475e780f", size = 251111 }, + { url = "https://files.pythonhosted.org/packages/a2/9e/9fdb08f4bf476c912f0c3ca292e019aab6712c93c9344a1653986c3fd305/coverage-7.10.7-cp313-cp313-win32.whl", hash = "sha256:dc7c389dce432500273eaf48f410b37886be9208b2dd5710aaf7c57fd442c698", size = 220746 }, + { url = "https://files.pythonhosted.org/packages/b1/b1/a75fd25df44eab52d1931e89980d1ada46824c7a3210be0d3c88a44aaa99/coverage-7.10.7-cp313-cp313-win_amd64.whl", hash = "sha256:cac0fdca17b036af3881a9d2729a850b76553f3f716ccb0360ad4dbc06b3b843", size = 221541 }, + { url = "https://files.pythonhosted.org/packages/14/3a/d720d7c989562a6e9a14b2c9f5f2876bdb38e9367126d118495b89c99c37/coverage-7.10.7-cp313-cp313-win_arm64.whl", hash = "sha256:4b6f236edf6e2f9ae8fcd1332da4e791c1b6ba0dc16a2dc94590ceccb482e546", size = 220170 }, + { url = "https://files.pythonhosted.org/packages/bb/22/e04514bf2a735d8b0add31d2b4ab636fc02370730787c576bb995390d2d5/coverage-7.10.7-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a0ec07fd264d0745ee396b666d47cef20875f4ff2375d7c4f58235886cc1ef0c", size = 219029 }, + { url = "https://files.pythonhosted.org/packages/11/0b/91128e099035ece15da3445d9015e4b4153a6059403452d324cbb0a575fa/coverage-7.10.7-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:dd5e856ebb7bfb7672b0086846db5afb4567a7b9714b8a0ebafd211ec7ce6a15", size = 219259 }, + { url = "https://files.pythonhosted.org/packages/8b/51/66420081e72801536a091a0c8f8c1f88a5c4bf7b9b1bdc6222c7afe6dc9b/coverage-7.10.7-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:f57b2a3c8353d3e04acf75b3fed57ba41f5c0646bbf1d10c7c282291c97936b4", size = 260592 }, + { url = "https://files.pythonhosted.org/packages/5d/22/9b8d458c2881b22df3db5bb3e7369e63d527d986decb6c11a591ba2364f7/coverage-7.10.7-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:1ef2319dd15a0b009667301a3f84452a4dc6fddfd06b0c5c53ea472d3989fbf0", size = 262768 }, + { url = "https://files.pythonhosted.org/packages/f7/08/16bee2c433e60913c610ea200b276e8eeef084b0d200bdcff69920bd5828/coverage-7.10.7-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:83082a57783239717ceb0ad584de3c69cf581b2a95ed6bf81ea66034f00401c0", size = 264995 }, + { url = "https://files.pythonhosted.org/packages/20/9d/e53eb9771d154859b084b90201e5221bca7674ba449a17c101a5031d4054/coverage-7.10.7-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:50aa94fb1fb9a397eaa19c0d5ec15a5edd03a47bf1a3a6111a16b36e190cff65", size = 259546 }, + { url = "https://files.pythonhosted.org/packages/ad/b0/69bc7050f8d4e56a89fb550a1577d5d0d1db2278106f6f626464067b3817/coverage-7.10.7-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2120043f147bebb41c85b97ac45dd173595ff14f2a584f2963891cbcc3091541", size = 262544 }, + { url = "https://files.pythonhosted.org/packages/ef/4b/2514b060dbd1bc0aaf23b852c14bb5818f244c664cb16517feff6bb3a5ab/coverage-7.10.7-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:2fafd773231dd0378fdba66d339f84904a8e57a262f583530f4f156ab83863e6", size = 260308 }, + { url = "https://files.pythonhosted.org/packages/54/78/7ba2175007c246d75e496f64c06e94122bdb914790a1285d627a918bd271/coverage-7.10.7-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:0b944ee8459f515f28b851728ad224fa2d068f1513ef6b7ff1efafeb2185f999", size = 258920 }, + { url = "https://files.pythonhosted.org/packages/c0/b3/fac9f7abbc841409b9a410309d73bfa6cfb2e51c3fada738cb607ce174f8/coverage-7.10.7-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4b583b97ab2e3efe1b3e75248a9b333bd3f8b0b1b8e5b45578e05e5850dfb2c2", size = 261434 }, + { url = "https://files.pythonhosted.org/packages/ee/51/a03bec00d37faaa891b3ff7387192cef20f01604e5283a5fabc95346befa/coverage-7.10.7-cp313-cp313t-win32.whl", hash = "sha256:2a78cd46550081a7909b3329e2266204d584866e8d97b898cd7fb5ac8d888b1a", size = 221403 }, + { url = "https://files.pythonhosted.org/packages/53/22/3cf25d614e64bf6d8e59c7c669b20d6d940bb337bdee5900b9ca41c820bb/coverage-7.10.7-cp313-cp313t-win_amd64.whl", hash = "sha256:33a5e6396ab684cb43dc7befa386258acb2d7fae7f67330ebb85ba4ea27938eb", size = 222469 }, + { url = "https://files.pythonhosted.org/packages/49/a1/00164f6d30d8a01c3c9c48418a7a5be394de5349b421b9ee019f380df2a0/coverage-7.10.7-cp313-cp313t-win_arm64.whl", hash = "sha256:86b0e7308289ddde73d863b7683f596d8d21c7d8664ce1dee061d0bcf3fbb4bb", size = 220731 }, + { url = "https://files.pythonhosted.org/packages/23/9c/5844ab4ca6a4dd97a1850e030a15ec7d292b5c5cb93082979225126e35dd/coverage-7.10.7-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:b06f260b16ead11643a5a9f955bd4b5fd76c1a4c6796aeade8520095b75de520", size = 218302 }, + { url = "https://files.pythonhosted.org/packages/f0/89/673f6514b0961d1f0e20ddc242e9342f6da21eaba3489901b565c0689f34/coverage-7.10.7-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:212f8f2e0612778f09c55dd4872cb1f64a1f2b074393d139278ce902064d5b32", size = 218578 }, + { url = "https://files.pythonhosted.org/packages/05/e8/261cae479e85232828fb17ad536765c88dd818c8470aca690b0ac6feeaa3/coverage-7.10.7-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3445258bcded7d4aa630ab8296dea4d3f15a255588dd535f980c193ab6b95f3f", size = 249629 }, + { url = "https://files.pythonhosted.org/packages/82/62/14ed6546d0207e6eda876434e3e8475a3e9adbe32110ce896c9e0c06bb9a/coverage-7.10.7-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:bb45474711ba385c46a0bfe696c695a929ae69ac636cda8f532be9e8c93d720a", size = 252162 }, + { url = "https://files.pythonhosted.org/packages/ff/49/07f00db9ac6478e4358165a08fb41b469a1b053212e8a00cb02f0d27a05f/coverage-7.10.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:813922f35bd800dca9994c5971883cbc0d291128a5de6b167c7aa697fcf59360", size = 253517 }, + { url = "https://files.pythonhosted.org/packages/a2/59/c5201c62dbf165dfbc91460f6dbbaa85a8b82cfa6131ac45d6c1bfb52deb/coverage-7.10.7-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:93c1b03552081b2a4423091d6fb3787265b8f86af404cff98d1b5342713bdd69", size = 249632 }, + { url = "https://files.pythonhosted.org/packages/07/ae/5920097195291a51fb00b3a70b9bbd2edbfe3c84876a1762bd1ef1565ebc/coverage-7.10.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:cc87dd1b6eaf0b848eebb1c86469b9f72a1891cb42ac7adcfbce75eadb13dd14", size = 251520 }, + { url = "https://files.pythonhosted.org/packages/b9/3c/a815dde77a2981f5743a60b63df31cb322c944843e57dbd579326625a413/coverage-7.10.7-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:39508ffda4f343c35f3236fe8d1a6634a51f4581226a1262769d7f970e73bffe", size = 249455 }, + { url = "https://files.pythonhosted.org/packages/aa/99/f5cdd8421ea656abefb6c0ce92556709db2265c41e8f9fc6c8ae0f7824c9/coverage-7.10.7-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:925a1edf3d810537c5a3abe78ec5530160c5f9a26b1f4270b40e62cc79304a1e", size = 249287 }, + { url = "https://files.pythonhosted.org/packages/c3/7a/e9a2da6a1fc5d007dd51fca083a663ab930a8c4d149c087732a5dbaa0029/coverage-7.10.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2c8b9a0636f94c43cd3576811e05b89aa9bc2d0a85137affc544ae5cb0e4bfbd", size = 250946 }, + { url = "https://files.pythonhosted.org/packages/ef/5b/0b5799aa30380a949005a353715095d6d1da81927d6dbed5def2200a4e25/coverage-7.10.7-cp314-cp314-win32.whl", hash = "sha256:b7b8288eb7cdd268b0304632da8cb0bb93fadcfec2fe5712f7b9cc8f4d487be2", size = 221009 }, + { url = "https://files.pythonhosted.org/packages/da/b0/e802fbb6eb746de006490abc9bb554b708918b6774b722bb3a0e6aa1b7de/coverage-7.10.7-cp314-cp314-win_amd64.whl", hash = "sha256:1ca6db7c8807fb9e755d0379ccc39017ce0a84dcd26d14b5a03b78563776f681", size = 221804 }, + { url = "https://files.pythonhosted.org/packages/9e/e8/71d0c8e374e31f39e3389bb0bd19e527d46f00ea8571ec7ec8fd261d8b44/coverage-7.10.7-cp314-cp314-win_arm64.whl", hash = "sha256:097c1591f5af4496226d5783d036bf6fd6cd0cbc132e071b33861de756efb880", size = 220384 }, + { url = "https://files.pythonhosted.org/packages/62/09/9a5608d319fa3eba7a2019addeacb8c746fb50872b57a724c9f79f146969/coverage-7.10.7-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:a62c6ef0d50e6de320c270ff91d9dd0a05e7250cac2a800b7784bae474506e63", size = 219047 }, + { url = "https://files.pythonhosted.org/packages/f5/6f/f58d46f33db9f2e3647b2d0764704548c184e6f5e014bef528b7f979ef84/coverage-7.10.7-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:9fa6e4dd51fe15d8738708a973470f67a855ca50002294852e9571cdbd9433f2", size = 219266 }, + { url = "https://files.pythonhosted.org/packages/74/5c/183ffc817ba68e0b443b8c934c8795553eb0c14573813415bd59941ee165/coverage-7.10.7-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:8fb190658865565c549b6b4706856d6a7b09302c797eb2cf8e7fe9dabb043f0d", size = 260767 }, + { url = "https://files.pythonhosted.org/packages/0f/48/71a8abe9c1ad7e97548835e3cc1adbf361e743e9d60310c5f75c9e7bf847/coverage-7.10.7-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:affef7c76a9ef259187ef31599a9260330e0335a3011732c4b9effa01e1cd6e0", size = 262931 }, + { url = "https://files.pythonhosted.org/packages/84/fd/193a8fb132acfc0a901f72020e54be5e48021e1575bb327d8ee1097a28fd/coverage-7.10.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6e16e07d85ca0cf8bafe5f5d23a0b850064e8e945d5677492b06bbe6f09cc699", size = 265186 }, + { url = "https://files.pythonhosted.org/packages/b1/8f/74ecc30607dd95ad50e3034221113ccb1c6d4e8085cc761134782995daae/coverage-7.10.7-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:03ffc58aacdf65d2a82bbeb1ffe4d01ead4017a21bfd0454983b88ca73af94b9", size = 259470 }, + { url = "https://files.pythonhosted.org/packages/0f/55/79ff53a769f20d71b07023ea115c9167c0bb56f281320520cf64c5298a96/coverage-7.10.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:1b4fd784344d4e52647fd7857b2af5b3fbe6c239b0b5fa63e94eb67320770e0f", size = 262626 }, + { url = "https://files.pythonhosted.org/packages/88/e2/dac66c140009b61ac3fc13af673a574b00c16efdf04f9b5c740703e953c0/coverage-7.10.7-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:0ebbaddb2c19b71912c6f2518e791aa8b9f054985a0769bdb3a53ebbc765c6a1", size = 260386 }, + { url = "https://files.pythonhosted.org/packages/a2/f1/f48f645e3f33bb9ca8a496bc4a9671b52f2f353146233ebd7c1df6160440/coverage-7.10.7-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:a2d9a3b260cc1d1dbdb1c582e63ddcf5363426a1a68faa0f5da28d8ee3c722a0", size = 258852 }, + { url = "https://files.pythonhosted.org/packages/bb/3b/8442618972c51a7affeead957995cfa8323c0c9bcf8fa5a027421f720ff4/coverage-7.10.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a3cc8638b2480865eaa3926d192e64ce6c51e3d29c849e09d5b4ad95efae5399", size = 261534 }, + { url = "https://files.pythonhosted.org/packages/b2/dc/101f3fa3a45146db0cb03f5b4376e24c0aac818309da23e2de0c75295a91/coverage-7.10.7-cp314-cp314t-win32.whl", hash = "sha256:67f8c5cbcd3deb7a60b3345dffc89a961a484ed0af1f6f73de91705cc6e31235", size = 221784 }, + { url = "https://files.pythonhosted.org/packages/4c/a1/74c51803fc70a8a40d7346660379e144be772bab4ac7bb6e6b905152345c/coverage-7.10.7-cp314-cp314t-win_amd64.whl", hash = "sha256:e1ed71194ef6dea7ed2d5cb5f7243d4bcd334bfb63e59878519be558078f848d", size = 222905 }, + { url = "https://files.pythonhosted.org/packages/12/65/f116a6d2127df30bcafbceef0302d8a64ba87488bf6f73a6d8eebf060873/coverage-7.10.7-cp314-cp314t-win_arm64.whl", hash = "sha256:7fe650342addd8524ca63d77b2362b02345e5f1a093266787d210c70a50b471a", size = 220922 }, + { url = "https://files.pythonhosted.org/packages/ec/16/114df1c291c22cac3b0c127a73e0af5c12ed7bbb6558d310429a0ae24023/coverage-7.10.7-py3-none-any.whl", hash = "sha256:f7941f6f2fe6dd6807a1208737b8a0cbcf1cc6d7b07d24998ad2d63590868260", size = 209952 }, ] [[package]] name = "cryptography" -version = "45.0.6" +version = "46.0.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d6/0d/d13399c94234ee8f3df384819dc67e0c5ce215fb751d567a55a1f4b028c7/cryptography-45.0.6.tar.gz", hash = "sha256:5c966c732cf6e4a276ce83b6e4c729edda2df6929083a952cc7da973c539c719", size = 744949, upload_time = "2025-08-05T23:59:27.93Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/8c/29/2793d178d0eda1ca4a09a7c4e09a5185e75738cc6d526433e8663b460ea6/cryptography-45.0.6-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:048e7ad9e08cf4c0ab07ff7f36cc3115924e22e2266e034450a890d9e312dd74", size = 7042702, upload_time = "2025-08-05T23:58:23.464Z" }, - { url = "https://files.pythonhosted.org/packages/b3/b6/cabd07410f222f32c8d55486c464f432808abaa1f12af9afcbe8f2f19030/cryptography-45.0.6-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:44647c5d796f5fc042bbc6d61307d04bf29bccb74d188f18051b635f20a9c75f", size = 4206483, upload_time = "2025-08-05T23:58:27.132Z" }, - { url = "https://files.pythonhosted.org/packages/8b/9e/f9c7d36a38b1cfeb1cc74849aabe9bf817990f7603ff6eb485e0d70e0b27/cryptography-45.0.6-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e40b80ecf35ec265c452eea0ba94c9587ca763e739b8e559c128d23bff7ebbbf", size = 4429679, upload_time = "2025-08-05T23:58:29.152Z" }, - { url = "https://files.pythonhosted.org/packages/9c/2a/4434c17eb32ef30b254b9e8b9830cee4e516f08b47fdd291c5b1255b8101/cryptography-45.0.6-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:00e8724bdad672d75e6f069b27970883179bd472cd24a63f6e620ca7e41cc0c5", size = 4210553, upload_time = "2025-08-05T23:58:30.596Z" }, - { url = "https://files.pythonhosted.org/packages/ef/1d/09a5df8e0c4b7970f5d1f3aff1b640df6d4be28a64cae970d56c6cf1c772/cryptography-45.0.6-cp311-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7a3085d1b319d35296176af31c90338eeb2ddac8104661df79f80e1d9787b8b2", size = 3894499, upload_time = "2025-08-05T23:58:32.03Z" }, - { url = "https://files.pythonhosted.org/packages/79/62/120842ab20d9150a9d3a6bdc07fe2870384e82f5266d41c53b08a3a96b34/cryptography-45.0.6-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:1b7fa6a1c1188c7ee32e47590d16a5a0646270921f8020efc9a511648e1b2e08", size = 4458484, upload_time = "2025-08-05T23:58:33.526Z" }, - { url = "https://files.pythonhosted.org/packages/fd/80/1bc3634d45ddfed0871bfba52cf8f1ad724761662a0c792b97a951fb1b30/cryptography-45.0.6-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:275ba5cc0d9e320cd70f8e7b96d9e59903c815ca579ab96c1e37278d231fc402", size = 4210281, upload_time = "2025-08-05T23:58:35.445Z" }, - { url = "https://files.pythonhosted.org/packages/7d/fe/ffb12c2d83d0ee625f124880a1f023b5878f79da92e64c37962bbbe35f3f/cryptography-45.0.6-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:f4028f29a9f38a2025abedb2e409973709c660d44319c61762202206ed577c42", size = 4456890, upload_time = "2025-08-05T23:58:36.923Z" }, - { url = "https://files.pythonhosted.org/packages/8c/8e/b3f3fe0dc82c77a0deb5f493b23311e09193f2268b77196ec0f7a36e3f3e/cryptography-45.0.6-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:ee411a1b977f40bd075392c80c10b58025ee5c6b47a822a33c1198598a7a5f05", size = 4333247, upload_time = "2025-08-05T23:58:38.781Z" }, - { url = "https://files.pythonhosted.org/packages/b3/a6/c3ef2ab9e334da27a1d7b56af4a2417d77e7806b2e0f90d6267ce120d2e4/cryptography-45.0.6-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:e2a21a8eda2d86bb604934b6b37691585bd095c1f788530c1fcefc53a82b3453", size = 4565045, upload_time = "2025-08-05T23:58:40.415Z" }, - { url = "https://files.pythonhosted.org/packages/31/c3/77722446b13fa71dddd820a5faab4ce6db49e7e0bf8312ef4192a3f78e2f/cryptography-45.0.6-cp311-abi3-win32.whl", hash = "sha256:d063341378d7ee9c91f9d23b431a3502fc8bfacd54ef0a27baa72a0843b29159", size = 2928923, upload_time = "2025-08-05T23:58:41.919Z" }, - { url = "https://files.pythonhosted.org/packages/38/63/a025c3225188a811b82932a4dcc8457a26c3729d81578ccecbcce2cb784e/cryptography-45.0.6-cp311-abi3-win_amd64.whl", hash = "sha256:833dc32dfc1e39b7376a87b9a6a4288a10aae234631268486558920029b086ec", size = 3403805, upload_time = "2025-08-05T23:58:43.792Z" }, - { url = "https://files.pythonhosted.org/packages/5b/af/bcfbea93a30809f126d51c074ee0fac5bd9d57d068edf56c2a73abedbea4/cryptography-45.0.6-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:3436128a60a5e5490603ab2adbabc8763613f638513ffa7d311c900a8349a2a0", size = 7020111, upload_time = "2025-08-05T23:58:45.316Z" }, - { url = "https://files.pythonhosted.org/packages/98/c6/ea5173689e014f1a8470899cd5beeb358e22bb3cf5a876060f9d1ca78af4/cryptography-45.0.6-cp37-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0d9ef57b6768d9fa58e92f4947cea96ade1233c0e236db22ba44748ffedca394", size = 4198169, upload_time = "2025-08-05T23:58:47.121Z" }, - { url = "https://files.pythonhosted.org/packages/ba/73/b12995edc0c7e2311ffb57ebd3b351f6b268fed37d93bfc6f9856e01c473/cryptography-45.0.6-cp37-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ea3c42f2016a5bbf71825537c2ad753f2870191134933196bee408aac397b3d9", size = 4421273, upload_time = "2025-08-05T23:58:48.557Z" }, - { url = "https://files.pythonhosted.org/packages/f7/6e/286894f6f71926bc0da67408c853dd9ba953f662dcb70993a59fd499f111/cryptography-45.0.6-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:20ae4906a13716139d6d762ceb3e0e7e110f7955f3bc3876e3a07f5daadec5f3", size = 4199211, upload_time = "2025-08-05T23:58:50.139Z" }, - { url = "https://files.pythonhosted.org/packages/de/34/a7f55e39b9623c5cb571d77a6a90387fe557908ffc44f6872f26ca8ae270/cryptography-45.0.6-cp37-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:2dac5ec199038b8e131365e2324c03d20e97fe214af051d20c49db129844e8b3", size = 3883732, upload_time = "2025-08-05T23:58:52.253Z" }, - { url = "https://files.pythonhosted.org/packages/f9/b9/c6d32edbcba0cd9f5df90f29ed46a65c4631c4fbe11187feb9169c6ff506/cryptography-45.0.6-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:18f878a34b90d688982e43f4b700408b478102dd58b3e39de21b5ebf6509c301", size = 4450655, upload_time = "2025-08-05T23:58:53.848Z" }, - { url = "https://files.pythonhosted.org/packages/77/2d/09b097adfdee0227cfd4c699b3375a842080f065bab9014248933497c3f9/cryptography-45.0.6-cp37-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:5bd6020c80c5b2b2242d6c48487d7b85700f5e0038e67b29d706f98440d66eb5", size = 4198956, upload_time = "2025-08-05T23:58:55.209Z" }, - { url = "https://files.pythonhosted.org/packages/55/66/061ec6689207d54effdff535bbdf85cc380d32dd5377173085812565cf38/cryptography-45.0.6-cp37-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:eccddbd986e43014263eda489abbddfbc287af5cddfd690477993dbb31e31016", size = 4449859, upload_time = "2025-08-05T23:58:56.639Z" }, - { url = "https://files.pythonhosted.org/packages/41/ff/e7d5a2ad2d035e5a2af116e1a3adb4d8fcd0be92a18032917a089c6e5028/cryptography-45.0.6-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:550ae02148206beb722cfe4ef0933f9352bab26b087af00e48fdfb9ade35c5b3", size = 4320254, upload_time = "2025-08-05T23:58:58.833Z" }, - { url = "https://files.pythonhosted.org/packages/82/27/092d311af22095d288f4db89fcaebadfb2f28944f3d790a4cf51fe5ddaeb/cryptography-45.0.6-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:5b64e668fc3528e77efa51ca70fadcd6610e8ab231e3e06ae2bab3b31c2b8ed9", size = 4554815, upload_time = "2025-08-05T23:59:00.283Z" }, - { url = "https://files.pythonhosted.org/packages/7e/01/aa2f4940262d588a8fdf4edabe4cda45854d00ebc6eaac12568b3a491a16/cryptography-45.0.6-cp37-abi3-win32.whl", hash = "sha256:780c40fb751c7d2b0c6786ceee6b6f871e86e8718a8ff4bc35073ac353c7cd02", size = 2912147, upload_time = "2025-08-05T23:59:01.716Z" }, - { url = "https://files.pythonhosted.org/packages/0a/bc/16e0276078c2de3ceef6b5a34b965f4436215efac45313df90d55f0ba2d2/cryptography-45.0.6-cp37-abi3-win_amd64.whl", hash = "sha256:20d15aed3ee522faac1a39fbfdfee25d17b1284bafd808e1640a74846d7c4d1b", size = 3390459, upload_time = "2025-08-05T23:59:03.358Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/a9/62/e3664e6ffd7743e1694b244dde70b43a394f6f7fbcacf7014a8ff5197c73/cryptography-46.0.1.tar.gz", hash = "sha256:ed570874e88f213437f5cf758f9ef26cbfc3f336d889b1e592ee11283bb8d1c7", size = 749198 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4c/8c/44ee01267ec01e26e43ebfdae3f120ec2312aa72fa4c0507ebe41a26739f/cryptography-46.0.1-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:1cd6d50c1a8b79af1a6f703709d8973845f677c8e97b1268f5ff323d38ce8475", size = 7285044 }, + { url = "https://files.pythonhosted.org/packages/22/59/9ae689a25047e0601adfcb159ec4f83c0b4149fdb5c3030cc94cd218141d/cryptography-46.0.1-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0ff483716be32690c14636e54a1f6e2e1b7bf8e22ca50b989f88fa1b2d287080", size = 4308182 }, + { url = "https://files.pythonhosted.org/packages/c4/ee/ca6cc9df7118f2fcd142c76b1da0f14340d77518c05b1ebfbbabca6b9e7d/cryptography-46.0.1-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9873bf7c1f2a6330bdfe8621e7ce64b725784f9f0c3a6a55c3047af5849f920e", size = 4572393 }, + { url = "https://files.pythonhosted.org/packages/7f/a3/0f5296f63815d8e985922b05c31f77ce44787b3127a67c0b7f70f115c45f/cryptography-46.0.1-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:0dfb7c88d4462a0cfdd0d87a3c245a7bc3feb59de101f6ff88194f740f72eda6", size = 4308400 }, + { url = "https://files.pythonhosted.org/packages/5d/8c/74fcda3e4e01be1d32775d5b4dd841acaac3c1b8fa4d0774c7ac8d52463d/cryptography-46.0.1-cp311-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e22801b61613ebdebf7deb18b507919e107547a1d39a3b57f5f855032dd7cfb8", size = 4015786 }, + { url = "https://files.pythonhosted.org/packages/dc/b8/85d23287baeef273b0834481a3dd55bbed3a53587e3b8d9f0898235b8f91/cryptography-46.0.1-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:757af4f6341ce7a1e47c326ca2a81f41d236070217e5fbbad61bbfe299d55d28", size = 4982606 }, + { url = "https://files.pythonhosted.org/packages/e5/d3/de61ad5b52433b389afca0bc70f02a7a1f074651221f599ce368da0fe437/cryptography-46.0.1-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:f7a24ea78de345cfa7f6a8d3bde8b242c7fac27f2bd78fa23474ca38dfaeeab9", size = 4604234 }, + { url = "https://files.pythonhosted.org/packages/dc/1f/dbd4d6570d84748439237a7478d124ee0134bf166ad129267b7ed8ea6d22/cryptography-46.0.1-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:9e8776dac9e660c22241b6587fae51a67b4b0147daa4d176b172c3ff768ad736", size = 4307669 }, + { url = "https://files.pythonhosted.org/packages/ec/fd/ca0a14ce7f0bfe92fa727aacaf2217eb25eb7e4ed513b14d8e03b26e63ed/cryptography-46.0.1-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:9f40642a140c0c8649987027867242b801486865277cbabc8c6059ddef16dc8b", size = 4947579 }, + { url = "https://files.pythonhosted.org/packages/89/6b/09c30543bb93401f6f88fce556b3bdbb21e55ae14912c04b7bf355f5f96c/cryptography-46.0.1-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:449ef2b321bec7d97ef2c944173275ebdab78f3abdd005400cc409e27cd159ab", size = 4603669 }, + { url = "https://files.pythonhosted.org/packages/23/9a/38cb01cb09ce0adceda9fc627c9cf98eb890fc8d50cacbe79b011df20f8a/cryptography-46.0.1-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:2dd339ba3345b908fa3141ddba4025568fa6fd398eabce3ef72a29ac2d73ad75", size = 4435828 }, + { url = "https://files.pythonhosted.org/packages/0f/53/435b5c36a78d06ae0bef96d666209b0ecd8f8181bfe4dda46536705df59e/cryptography-46.0.1-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:7411c910fb2a412053cf33cfad0153ee20d27e256c6c3f14d7d7d1d9fec59fd5", size = 4709553 }, + { url = "https://files.pythonhosted.org/packages/f5/c4/0da6e55595d9b9cd3b6eb5dc22f3a07ded7f116a3ea72629cab595abb804/cryptography-46.0.1-cp311-abi3-win32.whl", hash = "sha256:cbb8e769d4cac884bb28e3ff620ef1001b75588a5c83c9c9f1fdc9afbe7f29b0", size = 3058327 }, + { url = "https://files.pythonhosted.org/packages/95/0f/cd29a35e0d6e78a0ee61793564c8cff0929c38391cb0de27627bdc7525aa/cryptography-46.0.1-cp311-abi3-win_amd64.whl", hash = "sha256:92e8cfe8bd7dd86eac0a677499894862cd5cc2fd74de917daa881d00871ac8e7", size = 3523893 }, + { url = "https://files.pythonhosted.org/packages/f2/dd/eea390f3e78432bc3d2f53952375f8b37cb4d37783e626faa6a51e751719/cryptography-46.0.1-cp311-abi3-win_arm64.whl", hash = "sha256:db5597a4c7353b2e5fb05a8e6cb74b56a4658a2b7bf3cb6b1821ae7e7fd6eaa0", size = 2932145 }, + { url = "https://files.pythonhosted.org/packages/0a/fb/c73588561afcd5e24b089952bd210b14676c0c5bf1213376350ae111945c/cryptography-46.0.1-cp314-cp314t-macosx_10_9_universal2.whl", hash = "sha256:4c49eda9a23019e11d32a0eb51a27b3e7ddedde91e099c0ac6373e3aacc0d2ee", size = 7193928 }, + { url = "https://files.pythonhosted.org/packages/26/34/0ff0bb2d2c79f25a2a63109f3b76b9108a906dd2a2eb5c1d460b9938adbb/cryptography-46.0.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:9babb7818fdd71394e576cf26c5452df77a355eac1a27ddfa24096665a27f8fd", size = 4293515 }, + { url = "https://files.pythonhosted.org/packages/df/b7/d4f848aee24ecd1be01db6c42c4a270069a4f02a105d9c57e143daf6cf0f/cryptography-46.0.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9f2c4cc63be3ef43c0221861177cee5d14b505cd4d4599a89e2cd273c4d3542a", size = 4545619 }, + { url = "https://files.pythonhosted.org/packages/44/a5/42fedefc754fd1901e2d95a69815ea4ec8a9eed31f4c4361fcab80288661/cryptography-46.0.1-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:41c281a74df173876da1dc9a9b6953d387f06e3d3ed9284e3baae3ab3f40883a", size = 4299160 }, + { url = "https://files.pythonhosted.org/packages/86/a1/cd21174f56e769c831fbbd6399a1b7519b0ff6280acec1b826d7b072640c/cryptography-46.0.1-cp314-cp314t-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0a17377fa52563d730248ba1f68185461fff36e8bc75d8787a7dd2e20a802b7a", size = 3994491 }, + { url = "https://files.pythonhosted.org/packages/8d/2f/a8cbfa1c029987ddc746fd966711d4fa71efc891d37fbe9f030fe5ab4eec/cryptography-46.0.1-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:0d1922d9280e08cde90b518a10cd66831f632960a8d08cb3418922d83fce6f12", size = 4960157 }, + { url = "https://files.pythonhosted.org/packages/67/ae/63a84e6789e0d5a2502edf06b552bcb0fa9ff16147265d5c44a211942abe/cryptography-46.0.1-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:af84e8e99f1a82cea149e253014ea9dc89f75b82c87bb6c7242203186f465129", size = 4577263 }, + { url = "https://files.pythonhosted.org/packages/ef/8f/1b9fa8e92bd9cbcb3b7e1e593a5232f2c1e6f9bd72b919c1a6b37d315f92/cryptography-46.0.1-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:ef648d2c690703501714588b2ba640facd50fd16548133b11b2859e8655a69da", size = 4298703 }, + { url = "https://files.pythonhosted.org/packages/c3/af/bb95db070e73fea3fae31d8a69ac1463d89d1c084220f549b00dd01094a8/cryptography-46.0.1-cp314-cp314t-manylinux_2_34_ppc64le.whl", hash = "sha256:e94eb5fa32a8a9f9bf991f424f002913e3dd7c699ef552db9b14ba6a76a6313b", size = 4926363 }, + { url = "https://files.pythonhosted.org/packages/f5/3b/d8fb17ffeb3a83157a1cc0aa5c60691d062aceecba09c2e5e77ebfc1870c/cryptography-46.0.1-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:534b96c0831855e29fc3b069b085fd185aa5353033631a585d5cd4dd5d40d657", size = 4576958 }, + { url = "https://files.pythonhosted.org/packages/d9/46/86bc3a05c10c8aa88c8ae7e953a8b4e407c57823ed201dbcba55c4d655f4/cryptography-46.0.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:f9b55038b5c6c47559aa33626d8ecd092f354e23de3c6975e4bb205df128a2a0", size = 4422507 }, + { url = "https://files.pythonhosted.org/packages/a8/4e/387e5a21dfd2b4198e74968a541cfd6128f66f8ec94ed971776e15091ac3/cryptography-46.0.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ec13b7105117dbc9afd023300fb9954d72ca855c274fe563e72428ece10191c0", size = 4683964 }, + { url = "https://files.pythonhosted.org/packages/25/a3/f9f5907b166adb8f26762071474b38bbfcf89858a5282f032899075a38a1/cryptography-46.0.1-cp314-cp314t-win32.whl", hash = "sha256:504e464944f2c003a0785b81668fe23c06f3b037e9cb9f68a7c672246319f277", size = 3029705 }, + { url = "https://files.pythonhosted.org/packages/12/66/4d3a4f1850db2e71c2b1628d14b70b5e4c1684a1bd462f7fffb93c041c38/cryptography-46.0.1-cp314-cp314t-win_amd64.whl", hash = "sha256:c52fded6383f7e20eaf70a60aeddd796b3677c3ad2922c801be330db62778e05", size = 3502175 }, + { url = "https://files.pythonhosted.org/packages/52/c7/9f10ad91435ef7d0d99a0b93c4360bea3df18050ff5b9038c489c31ac2f5/cryptography-46.0.1-cp314-cp314t-win_arm64.whl", hash = "sha256:9495d78f52c804b5ec8878b5b8c7873aa8e63db9cd9ee387ff2db3fffe4df784", size = 2912354 }, + { url = "https://files.pythonhosted.org/packages/98/e5/fbd632385542a3311915976f88e0dfcf09e62a3fc0aff86fb6762162a24d/cryptography-46.0.1-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:d84c40bdb8674c29fa192373498b6cb1e84f882889d21a471b45d1f868d8d44b", size = 7255677 }, + { url = "https://files.pythonhosted.org/packages/56/3e/13ce6eab9ad6eba1b15a7bd476f005a4c1b3f299f4c2f32b22408b0edccf/cryptography-46.0.1-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:9ed64e5083fa806709e74fc5ea067dfef9090e5b7a2320a49be3c9df3583a2d8", size = 4301110 }, + { url = "https://files.pythonhosted.org/packages/a2/67/65dc233c1ddd688073cf7b136b06ff4b84bf517ba5529607c9d79720fc67/cryptography-46.0.1-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:341fb7a26bc9d6093c1b124b9f13acc283d2d51da440b98b55ab3f79f2522ead", size = 4562369 }, + { url = "https://files.pythonhosted.org/packages/17/db/d64ae4c6f4e98c3dac5bf35dd4d103f4c7c345703e43560113e5e8e31b2b/cryptography-46.0.1-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:6ef1488967e729948d424d09c94753d0167ce59afba8d0f6c07a22b629c557b2", size = 4302126 }, + { url = "https://files.pythonhosted.org/packages/3d/19/5f1eea17d4805ebdc2e685b7b02800c4f63f3dd46cfa8d4c18373fea46c8/cryptography-46.0.1-cp38-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7823bc7cdf0b747ecfb096d004cc41573c2f5c7e3a29861603a2871b43d3ef32", size = 4009431 }, + { url = "https://files.pythonhosted.org/packages/81/b5/229ba6088fe7abccbfe4c5edb96c7a5ad547fac5fdd0d40aa6ea540b2985/cryptography-46.0.1-cp38-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:f736ab8036796f5a119ff8211deda416f8c15ce03776db704a7a4e17381cb2ef", size = 4980739 }, + { url = "https://files.pythonhosted.org/packages/3a/9c/50aa38907b201e74bc43c572f9603fa82b58e831bd13c245613a23cff736/cryptography-46.0.1-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:e46710a240a41d594953012213ea8ca398cd2448fbc5d0f1be8160b5511104a0", size = 4592289 }, + { url = "https://files.pythonhosted.org/packages/5a/33/229858f8a5bb22f82468bb285e9f4c44a31978d5f5830bb4ea1cf8a4e454/cryptography-46.0.1-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:84ef1f145de5aee82ea2447224dc23f065ff4cc5791bb3b506615957a6ba8128", size = 4301815 }, + { url = "https://files.pythonhosted.org/packages/52/cb/b76b2c87fbd6ed4a231884bea3ce073406ba8e2dae9defad910d33cbf408/cryptography-46.0.1-cp38-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:9394c7d5a7565ac5f7d9ba38b2617448eba384d7b107b262d63890079fad77ca", size = 4943251 }, + { url = "https://files.pythonhosted.org/packages/94/0f/f66125ecf88e4cb5b8017ff43f3a87ede2d064cb54a1c5893f9da9d65093/cryptography-46.0.1-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:ed957044e368ed295257ae3d212b95456bd9756df490e1ac4538857f67531fcc", size = 4591247 }, + { url = "https://files.pythonhosted.org/packages/f6/22/9f3134ae436b63b463cfdf0ff506a0570da6873adb4bf8c19b8a5b4bac64/cryptography-46.0.1-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:f7de12fa0eee6234de9a9ce0ffcfa6ce97361db7a50b09b65c63ac58e5f22fc7", size = 4428534 }, + { url = "https://files.pythonhosted.org/packages/89/39/e6042bcb2638650b0005c752c38ea830cbfbcbb1830e4d64d530000aa8dc/cryptography-46.0.1-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:7fab1187b6c6b2f11a326f33b036f7168f5b996aedd0c059f9738915e4e8f53a", size = 4699541 }, + { url = "https://files.pythonhosted.org/packages/68/46/753d457492d15458c7b5a653fc9a84a1c9c7a83af6ebdc94c3fc373ca6e8/cryptography-46.0.1-cp38-abi3-win32.whl", hash = "sha256:45f790934ac1018adeba46a0f7289b2b8fe76ba774a88c7f1922213a56c98bc1", size = 3043779 }, + { url = "https://files.pythonhosted.org/packages/2f/50/b6f3b540c2f6ee712feeb5fa780bb11fad76634e71334718568e7695cb55/cryptography-46.0.1-cp38-abi3-win_amd64.whl", hash = "sha256:7176a5ab56fac98d706921f6416a05e5aff7df0e4b91516f450f8627cda22af3", size = 3517226 }, + { url = "https://files.pythonhosted.org/packages/ff/e8/77d17d00981cdd27cc493e81e1749a0b8bbfb843780dbd841e30d7f50743/cryptography-46.0.1-cp38-abi3-win_arm64.whl", hash = "sha256:efc9e51c3e595267ff84adf56e9b357db89ab2279d7e375ffcaf8f678606f3d9", size = 2923149 }, ] [[package]] name = "csscompressor" version = "0.9.5" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f1/2a/8c3ac3d8bc94e6de8d7ae270bb5bc437b210bb9d6d9e46630c98f4abd20c/csscompressor-0.9.5.tar.gz", hash = "sha256:afa22badbcf3120a4f392e4d22f9fff485c044a1feda4a950ecc5eba9dd31a05", size = 237808, upload_time = "2017-11-26T21:13:08.238Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f1/2a/8c3ac3d8bc94e6de8d7ae270bb5bc437b210bb9d6d9e46630c98f4abd20c/csscompressor-0.9.5.tar.gz", hash = "sha256:afa22badbcf3120a4f392e4d22f9fff485c044a1feda4a950ecc5eba9dd31a05", size = 237808 } [[package]] name = "cssselect2" @@ -381,98 +445,102 @@ dependencies = [ { name = "tinycss2" }, { name = "webencodings" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/9f/86/fd7f58fc498b3166f3a7e8e0cddb6e620fe1da35b02248b1bd59e95dbaaa/cssselect2-0.8.0.tar.gz", hash = "sha256:7674ffb954a3b46162392aee2a3a0aedb2e14ecf99fcc28644900f4e6e3e9d3a", size = 35716, upload_time = "2025-03-05T14:46:07.988Z" } +sdist = { url = "https://files.pythonhosted.org/packages/9f/86/fd7f58fc498b3166f3a7e8e0cddb6e620fe1da35b02248b1bd59e95dbaaa/cssselect2-0.8.0.tar.gz", hash = "sha256:7674ffb954a3b46162392aee2a3a0aedb2e14ecf99fcc28644900f4e6e3e9d3a", size = 35716 } wheels = [ - { url = "https://files.pythonhosted.org/packages/0f/e7/aa315e6a749d9b96c2504a1ba0ba031ba2d0517e972ce22682e3fccecb09/cssselect2-0.8.0-py3-none-any.whl", hash = "sha256:46fc70ebc41ced7a32cd42d58b1884d72ade23d21e5a4eaaf022401c13f0e76e", size = 15454, upload_time = "2025-03-05T14:46:06.463Z" }, + { url = "https://files.pythonhosted.org/packages/0f/e7/aa315e6a749d9b96c2504a1ba0ba031ba2d0517e972ce22682e3fccecb09/cssselect2-0.8.0-py3-none-any.whl", hash = "sha256:46fc70ebc41ced7a32cd42d58b1884d72ade23d21e5a4eaaf022401c13f0e76e", size = 15454 }, ] [[package]] name = "debugpy" -version = "1.8.14" +version = "1.8.17" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/bd/75/087fe07d40f490a78782ff3b0a30e3968936854105487decdb33446d4b0e/debugpy-1.8.14.tar.gz", hash = "sha256:7cd287184318416850aa8b60ac90105837bb1e59531898c07569d197d2ed5322", size = 1641444, upload_time = "2025-04-10T19:46:10.981Z" } +sdist = { url = "https://files.pythonhosted.org/packages/15/ad/71e708ff4ca377c4230530d6a7aa7992592648c122a2cd2b321cf8b35a76/debugpy-1.8.17.tar.gz", hash = "sha256:fd723b47a8c08892b1a16b2c6239a8b96637c62a59b94bb5dab4bac592a58a8e", size = 1644129 } wheels = [ - { url = "https://files.pythonhosted.org/packages/d9/2a/ac2df0eda4898f29c46eb6713a5148e6f8b2b389c8ec9e425a4a1d67bf07/debugpy-1.8.14-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:8899c17920d089cfa23e6005ad9f22582fd86f144b23acb9feeda59e84405b84", size = 2501268, upload_time = "2025-04-10T19:46:26.044Z" }, - { url = "https://files.pythonhosted.org/packages/10/53/0a0cb5d79dd9f7039169f8bf94a144ad3efa52cc519940b3b7dde23bcb89/debugpy-1.8.14-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6bb5c0dcf80ad5dbc7b7d6eac484e2af34bdacdf81df09b6a3e62792b722826", size = 4221077, upload_time = "2025-04-10T19:46:27.464Z" }, - { url = "https://files.pythonhosted.org/packages/f8/d5/84e01821f362327bf4828728aa31e907a2eca7c78cd7c6ec062780d249f8/debugpy-1.8.14-cp312-cp312-win32.whl", hash = "sha256:281d44d248a0e1791ad0eafdbbd2912ff0de9eec48022a5bfbc332957487ed3f", size = 5255127, upload_time = "2025-04-10T19:46:29.467Z" }, - { url = "https://files.pythonhosted.org/packages/33/16/1ed929d812c758295cac7f9cf3dab5c73439c83d9091f2d91871e648093e/debugpy-1.8.14-cp312-cp312-win_amd64.whl", hash = "sha256:5aa56ef8538893e4502a7d79047fe39b1dae08d9ae257074c6464a7b290b806f", size = 5297249, upload_time = "2025-04-10T19:46:31.538Z" }, - { url = "https://files.pythonhosted.org/packages/4d/e4/395c792b243f2367d84202dc33689aa3d910fb9826a7491ba20fc9e261f5/debugpy-1.8.14-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:329a15d0660ee09fec6786acdb6e0443d595f64f5d096fc3e3ccf09a4259033f", size = 2485676, upload_time = "2025-04-10T19:46:32.96Z" }, - { url = "https://files.pythonhosted.org/packages/ba/f1/6f2ee3f991327ad9e4c2f8b82611a467052a0fb0e247390192580e89f7ff/debugpy-1.8.14-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f920c7f9af409d90f5fd26e313e119d908b0dd2952c2393cd3247a462331f15", size = 4217514, upload_time = "2025-04-10T19:46:34.336Z" }, - { url = "https://files.pythonhosted.org/packages/79/28/b9d146f8f2dc535c236ee09ad3e5ac899adb39d7a19b49f03ac95d216beb/debugpy-1.8.14-cp313-cp313-win32.whl", hash = "sha256:3784ec6e8600c66cbdd4ca2726c72d8ca781e94bce2f396cc606d458146f8f4e", size = 5254756, upload_time = "2025-04-10T19:46:36.199Z" }, - { url = "https://files.pythonhosted.org/packages/e0/62/a7b4a57013eac4ccaef6977966e6bec5c63906dd25a86e35f155952e29a1/debugpy-1.8.14-cp313-cp313-win_amd64.whl", hash = "sha256:684eaf43c95a3ec39a96f1f5195a7ff3d4144e4a18d69bb66beeb1a6de605d6e", size = 5297119, upload_time = "2025-04-10T19:46:38.141Z" }, - { url = "https://files.pythonhosted.org/packages/97/1a/481f33c37ee3ac8040d3d51fc4c4e4e7e61cb08b8bc8971d6032acc2279f/debugpy-1.8.14-py2.py3-none-any.whl", hash = "sha256:5cd9a579d553b6cb9759a7908a41988ee6280b961f24f63336835d9418216a20", size = 5256230, upload_time = "2025-04-10T19:46:54.077Z" }, + { url = "https://files.pythonhosted.org/packages/08/2b/9d8e65beb2751876c82e1aceb32f328c43ec872711fa80257c7674f45650/debugpy-1.8.17-cp312-cp312-macosx_15_0_universal2.whl", hash = "sha256:f14467edef672195c6f6b8e27ce5005313cb5d03c9239059bc7182b60c176e2d", size = 2549522 }, + { url = "https://files.pythonhosted.org/packages/b4/78/eb0d77f02971c05fca0eb7465b18058ba84bd957062f5eec82f941ac792a/debugpy-1.8.17-cp312-cp312-manylinux_2_34_x86_64.whl", hash = "sha256:24693179ef9dfa20dca8605905a42b392be56d410c333af82f1c5dff807a64cc", size = 4309417 }, + { url = "https://files.pythonhosted.org/packages/37/42/c40f1d8cc1fed1e75ea54298a382395b8b937d923fcf41ab0797a554f555/debugpy-1.8.17-cp312-cp312-win32.whl", hash = "sha256:6a4e9dacf2cbb60d2514ff7b04b4534b0139facbf2abdffe0639ddb6088e59cf", size = 5277130 }, + { url = "https://files.pythonhosted.org/packages/72/22/84263b205baad32b81b36eac076de0cdbe09fe2d0637f5b32243dc7c925b/debugpy-1.8.17-cp312-cp312-win_amd64.whl", hash = "sha256:e8f8f61c518952fb15f74a302e068b48d9c4691768ade433e4adeea961993464", size = 5319053 }, + { url = "https://files.pythonhosted.org/packages/50/76/597e5cb97d026274ba297af8d89138dfd9e695767ba0e0895edb20963f40/debugpy-1.8.17-cp313-cp313-macosx_15_0_universal2.whl", hash = "sha256:857c1dd5d70042502aef1c6d1c2801211f3ea7e56f75e9c335f434afb403e464", size = 2538386 }, + { url = "https://files.pythonhosted.org/packages/5f/60/ce5c34fcdfec493701f9d1532dba95b21b2f6394147234dce21160bd923f/debugpy-1.8.17-cp313-cp313-manylinux_2_34_x86_64.whl", hash = "sha256:3bea3b0b12f3946e098cce9b43c3c46e317b567f79570c3f43f0b96d00788088", size = 4292100 }, + { url = "https://files.pythonhosted.org/packages/e8/95/7873cf2146577ef71d2a20bf553f12df865922a6f87b9e8ee1df04f01785/debugpy-1.8.17-cp313-cp313-win32.whl", hash = "sha256:e34ee844c2f17b18556b5bbe59e1e2ff4e86a00282d2a46edab73fd7f18f4a83", size = 5277002 }, + { url = "https://files.pythonhosted.org/packages/46/11/18c79a1cee5ff539a94ec4aa290c1c069a5580fd5cfd2fb2e282f8e905da/debugpy-1.8.17-cp313-cp313-win_amd64.whl", hash = "sha256:6c5cd6f009ad4fca8e33e5238210dc1e5f42db07d4b6ab21ac7ffa904a196420", size = 5319047 }, + { url = "https://files.pythonhosted.org/packages/de/45/115d55b2a9da6de812696064ceb505c31e952c5d89c4ed1d9bb983deec34/debugpy-1.8.17-cp314-cp314-macosx_15_0_universal2.whl", hash = "sha256:045290c010bcd2d82bc97aa2daf6837443cd52f6328592698809b4549babcee1", size = 2536899 }, + { url = "https://files.pythonhosted.org/packages/5a/73/2aa00c7f1f06e997ef57dc9b23d61a92120bec1437a012afb6d176585197/debugpy-1.8.17-cp314-cp314-manylinux_2_34_x86_64.whl", hash = "sha256:b69b6bd9dba6a03632534cdf67c760625760a215ae289f7489a452af1031fe1f", size = 4268254 }, + { url = "https://files.pythonhosted.org/packages/86/b5/ed3e65c63c68a6634e3ba04bd10255c8e46ec16ebed7d1c79e4816d8a760/debugpy-1.8.17-cp314-cp314-win32.whl", hash = "sha256:5c59b74aa5630f3a5194467100c3b3d1c77898f9ab27e3f7dc5d40fc2f122670", size = 5277203 }, + { url = "https://files.pythonhosted.org/packages/b0/26/394276b71c7538445f29e792f589ab7379ae70fd26ff5577dfde71158e96/debugpy-1.8.17-cp314-cp314-win_amd64.whl", hash = "sha256:893cba7bb0f55161de4365584b025f7064e1f88913551bcd23be3260b231429c", size = 5318493 }, + { url = "https://files.pythonhosted.org/packages/b0/d0/89247ec250369fc76db477720a26b2fce7ba079ff1380e4ab4529d2fe233/debugpy-1.8.17-py2.py3-none-any.whl", hash = "sha256:60c7dca6571efe660ccb7a9508d73ca14b8796c4ed484c2002abba714226cfef", size = 5283210 }, ] [[package]] name = "decorator" version = "5.2.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/43/fa/6d96a0978d19e17b68d634497769987b16c8f4cd0a7a05048bec693caa6b/decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360", size = 56711, upload_time = "2025-02-24T04:41:34.073Z" } +sdist = { url = "https://files.pythonhosted.org/packages/43/fa/6d96a0978d19e17b68d634497769987b16c8f4cd0a7a05048bec693caa6b/decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360", size = 56711 } wheels = [ - { url = "https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a", size = 9190, upload_time = "2025-02-24T04:41:32.565Z" }, + { url = "https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a", size = 9190 }, ] [[package]] name = "defusedxml" version = "0.7.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0f/d5/c66da9b79e5bdb124974bfe172b4daf3c984ebd9c2a06e2b8a4dc7331c72/defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69", size = 75520, upload_time = "2021-03-08T10:59:26.269Z" } +sdist = { url = "https://files.pythonhosted.org/packages/0f/d5/c66da9b79e5bdb124974bfe172b4daf3c984ebd9c2a06e2b8a4dc7331c72/defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69", size = 75520 } wheels = [ - { url = "https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61", size = 25604, upload_time = "2021-03-08T10:59:24.45Z" }, + { url = "https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61", size = 25604 }, ] [[package]] name = "distlib" -version = "0.3.9" +version = "0.4.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0d/dd/1bec4c5ddb504ca60fc29472f3d27e8d4da1257a854e1d96742f15c1d02d/distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403", size = 613923, upload_time = "2024-10-09T18:35:47.551Z" } +sdist = { url = "https://files.pythonhosted.org/packages/96/8e/709914eb2b5749865801041647dc7f4e6d00b549cfe88b65ca192995f07c/distlib-0.4.0.tar.gz", hash = "sha256:feec40075be03a04501a973d81f633735b4b69f98b05450592310c0f401a4e0d", size = 614605 } wheels = [ - { url = "https://files.pythonhosted.org/packages/91/a1/cf2472db20f7ce4a6be1253a81cfdf85ad9c7885ffbed7047fb72c24cf87/distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87", size = 468973, upload_time = "2024-10-09T18:35:44.272Z" }, + { url = "https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl", hash = "sha256:9659f7d87e46584a30b5780e43ac7a2143098441670ff0a49d5f9034c54a6c16", size = 469047 }, ] [[package]] name = "et-xmlfile" version = "2.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d3/38/af70d7ab1ae9d4da450eeec1fa3918940a5fafb9055e934af8d6eb0c2313/et_xmlfile-2.0.0.tar.gz", hash = "sha256:dab3f4764309081ce75662649be815c4c9081e88f0837825f90fd28317d4da54", size = 17234, upload_time = "2024-10-25T17:25:40.039Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d3/38/af70d7ab1ae9d4da450eeec1fa3918940a5fafb9055e934af8d6eb0c2313/et_xmlfile-2.0.0.tar.gz", hash = "sha256:dab3f4764309081ce75662649be815c4c9081e88f0837825f90fd28317d4da54", size = 17234 } wheels = [ - { url = "https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl", hash = "sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa", size = 18059, upload_time = "2024-10-25T17:25:39.051Z" }, + { url = "https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl", hash = "sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa", size = 18059 }, ] [[package]] name = "execnet" version = "2.1.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/bb/ff/b4c0dc78fbe20c3e59c0c7334de0c27eb4001a2b2017999af398bf730817/execnet-2.1.1.tar.gz", hash = "sha256:5189b52c6121c24feae288166ab41b32549c7e2348652736540b9e6e7d4e72e3", size = 166524, upload_time = "2024-04-08T09:04:19.245Z" } +sdist = { url = "https://files.pythonhosted.org/packages/bb/ff/b4c0dc78fbe20c3e59c0c7334de0c27eb4001a2b2017999af398bf730817/execnet-2.1.1.tar.gz", hash = "sha256:5189b52c6121c24feae288166ab41b32549c7e2348652736540b9e6e7d4e72e3", size = 166524 } wheels = [ - { url = "https://files.pythonhosted.org/packages/43/09/2aea36ff60d16dd8879bdb2f5b3ee0ba8d08cbbdcdfe870e695ce3784385/execnet-2.1.1-py3-none-any.whl", hash = "sha256:26dee51f1b80cebd6d0ca8e74dd8745419761d3bef34163928cbebbdc4749fdc", size = 40612, upload_time = "2024-04-08T09:04:17.414Z" }, + { url = "https://files.pythonhosted.org/packages/43/09/2aea36ff60d16dd8879bdb2f5b3ee0ba8d08cbbdcdfe870e695ce3784385/execnet-2.1.1-py3-none-any.whl", hash = "sha256:26dee51f1b80cebd6d0ca8e74dd8745419761d3bef34163928cbebbdc4749fdc", size = 40612 }, ] [[package]] name = "executing" -version = "2.2.0" +version = "2.2.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/91/50/a9d80c47ff289c611ff12e63f7c5d13942c65d68125160cefd768c73e6e4/executing-2.2.0.tar.gz", hash = "sha256:5d108c028108fe2551d1a7b2e8b713341e2cb4fc0aa7dcf966fa4327a5226755", size = 978693, upload_time = "2025-01-22T15:41:29.403Z" } +sdist = { url = "https://files.pythonhosted.org/packages/cc/28/c14e053b6762b1044f34a13aab6859bbf40456d37d23aa286ac24cfd9a5d/executing-2.2.1.tar.gz", hash = "sha256:3632cc370565f6648cc328b32435bd120a1e4ebb20c77e3fdde9a13cd1e533c4", size = 1129488 } wheels = [ - { url = "https://files.pythonhosted.org/packages/7b/8f/c4d9bafc34ad7ad5d8dc16dd1347ee0e507a52c3adb6bfa8887e1c6a26ba/executing-2.2.0-py2.py3-none-any.whl", hash = "sha256:11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa", size = 26702, upload_time = "2025-01-22T15:41:25.929Z" }, + { url = "https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl", hash = "sha256:760643d3452b4d777d295bb167ccc74c64a81df23fb5e08eff250c425a4b2017", size = 28317 }, ] [[package]] name = "fastjsonschema" version = "2.21.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/20/b5/23b216d9d985a956623b6bd12d4086b60f0059b27799f23016af04a74ea1/fastjsonschema-2.21.2.tar.gz", hash = "sha256:b1eb43748041c880796cd077f1a07c3d94e93ae84bba5ed36800a33554ae05de", size = 374130, upload_time = "2025-08-14T18:49:36.666Z" } +sdist = { url = "https://files.pythonhosted.org/packages/20/b5/23b216d9d985a956623b6bd12d4086b60f0059b27799f23016af04a74ea1/fastjsonschema-2.21.2.tar.gz", hash = "sha256:b1eb43748041c880796cd077f1a07c3d94e93ae84bba5ed36800a33554ae05de", size = 374130 } wheels = [ - { url = "https://files.pythonhosted.org/packages/cb/a8/20d0723294217e47de6d9e2e40fd4a9d2f7c4b6ef974babd482a59743694/fastjsonschema-2.21.2-py3-none-any.whl", hash = "sha256:1c797122d0a86c5cace2e54bf4e819c36223b552017172f32c5c024a6b77e463", size = 24024, upload_time = "2025-08-14T18:49:34.776Z" }, + { url = "https://files.pythonhosted.org/packages/cb/a8/20d0723294217e47de6d9e2e40fd4a9d2f7c4b6ef974babd482a59743694/fastjsonschema-2.21.2-py3-none-any.whl", hash = "sha256:1c797122d0a86c5cace2e54bf4e819c36223b552017172f32c5c024a6b77e463", size = 24024 }, ] [[package]] name = "filelock" -version = "3.18.0" +version = "3.19.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0a/10/c23352565a6544bdc5353e0b15fc1c563352101f30e24bf500207a54df9a/filelock-3.18.0.tar.gz", hash = "sha256:adbc88eabb99d2fec8c9c1b229b171f18afa655400173ddc653d5d01501fb9f2", size = 18075, upload_time = "2025-03-14T07:11:40.47Z" } +sdist = { url = "https://files.pythonhosted.org/packages/40/bb/0ab3e58d22305b6f5440629d20683af28959bf793d98d11950e305c1c326/filelock-3.19.1.tar.gz", hash = "sha256:66eda1888b0171c998b35be2bcc0f6d75c388a7ce20c3f3f37aa8e96c2dddf58", size = 17687 } wheels = [ - { url = "https://files.pythonhosted.org/packages/4d/36/2a115987e2d8c300a974597416d9de88f2444426de9571f4b59b2cca3acc/filelock-3.18.0-py3-none-any.whl", hash = "sha256:c401f4f8377c4464e6db25fff06205fd89bdd83b65eb0488ed1b160f780e21de", size = 16215, upload_time = "2025-03-14T07:11:39.145Z" }, + { url = "https://files.pythonhosted.org/packages/42/14/42b2651a2f46b022ccd948bca9f2d5af0fd8929c4eec235b8d6d844fbe67/filelock-3.19.1-py3-none-any.whl", hash = "sha256:d38e30481def20772f5baf097c122c3babc4fcdb7e14e57049eb9d88c6dc017d", size = 15988 }, ] [[package]] @@ -482,9 +550,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/55/b0/8a21e330561c65653d010ef112bf38f60890051d244ede197ddaa08e50c1/flexcache-0.3.tar.gz", hash = "sha256:18743bd5a0621bfe2cf8d519e4c3bfdf57a269c15d1ced3fb4b64e0ff4600656", size = 15816, upload_time = "2024-03-09T03:21:07.555Z" } +sdist = { url = "https://files.pythonhosted.org/packages/55/b0/8a21e330561c65653d010ef112bf38f60890051d244ede197ddaa08e50c1/flexcache-0.3.tar.gz", hash = "sha256:18743bd5a0621bfe2cf8d519e4c3bfdf57a269c15d1ced3fb4b64e0ff4600656", size = 15816 } wheels = [ - { url = "https://files.pythonhosted.org/packages/27/cd/c883e1a7c447479d6e13985565080e3fea88ab5a107c21684c813dba1875/flexcache-0.3-py3-none-any.whl", hash = "sha256:d43c9fea82336af6e0115e308d9d33a185390b8346a017564611f1466dcd2e32", size = 13263, upload_time = "2024-03-09T03:21:05.635Z" }, + { url = "https://files.pythonhosted.org/packages/27/cd/c883e1a7c447479d6e13985565080e3fea88ab5a107c21684c813dba1875/flexcache-0.3-py3-none-any.whl", hash = "sha256:d43c9fea82336af6e0115e308d9d33a185390b8346a017564611f1466dcd2e32", size = 13263 }, ] [[package]] @@ -494,9 +562,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/82/99/b4de7e39e8eaf8207ba1a8fa2241dd98b2ba72ae6e16960d8351736d8702/flexparser-0.4.tar.gz", hash = "sha256:266d98905595be2ccc5da964fe0a2c3526fbbffdc45b65b3146d75db992ef6b2", size = 31799, upload_time = "2024-11-07T02:00:56.249Z" } +sdist = { url = "https://files.pythonhosted.org/packages/82/99/b4de7e39e8eaf8207ba1a8fa2241dd98b2ba72ae6e16960d8351736d8702/flexparser-0.4.tar.gz", hash = "sha256:266d98905595be2ccc5da964fe0a2c3526fbbffdc45b65b3146d75db992ef6b2", size = 31799 } wheels = [ - { url = "https://files.pythonhosted.org/packages/fe/5e/3be305568fe5f34448807976dc82fc151d76c3e0e03958f34770286278c1/flexparser-0.4-py3-none-any.whl", hash = "sha256:3738b456192dcb3e15620f324c447721023c0293f6af9955b481e91d00179846", size = 27625, upload_time = "2024-11-07T02:00:54.523Z" }, + { url = "https://files.pythonhosted.org/packages/fe/5e/3be305568fe5f34448807976dc82fc151d76c3e0e03958f34770286278c1/flexparser-0.4-py3-none-any.whl", hash = "sha256:3738b456192dcb3e15620f324c447721023c0293f6af9955b481e91d00179846", size = 27625 }, ] [[package]] @@ -524,20 +592,20 @@ dependencies = [ { name = "typing-extensions" }, { name = "validators" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/11/d0/c94675a1c1b8c12fd68489e2b4a924f80a2b122199cd986c58a5136197d2/frictionless-5.18.1.tar.gz", hash = "sha256:daeaf55f896eeb52b43e62600466af9528fe0aeeebd28b1b917e13322f370a8b", size = 74372478, upload_time = "2025-03-25T21:32:50.081Z" } +sdist = { url = "https://files.pythonhosted.org/packages/11/d0/c94675a1c1b8c12fd68489e2b4a924f80a2b122199cd986c58a5136197d2/frictionless-5.18.1.tar.gz", hash = "sha256:daeaf55f896eeb52b43e62600466af9528fe0aeeebd28b1b917e13322f370a8b", size = 74372478 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a9/7a/dac76d31584bb4f874ae860490c9465f5b59bd8c110f68fbbb07aba48845/frictionless-5.18.1-py3-none-any.whl", hash = "sha256:3f4c87469a89bdb88e9cc318088553a26f3d14839098f95c183ea01fc89628dd", size = 531615, upload_time = "2025-03-25T21:32:45.534Z" }, + { url = "https://files.pythonhosted.org/packages/a9/7a/dac76d31584bb4f874ae860490c9465f5b59bd8c110f68fbbb07aba48845/frictionless-5.18.1-py3-none-any.whl", hash = "sha256:3f4c87469a89bdb88e9cc318088553a26f3d14839098f95c183ea01fc89628dd", size = 531615 }, ] [[package]] name = "frozendict" version = "2.4.6" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/bb/59/19eb300ba28e7547538bdf603f1c6c34793240a90e1a7b61b65d8517e35e/frozendict-2.4.6.tar.gz", hash = "sha256:df7cd16470fbd26fc4969a208efadc46319334eb97def1ddf48919b351192b8e", size = 316416, upload_time = "2024-10-13T12:15:32.449Z" } +sdist = { url = "https://files.pythonhosted.org/packages/bb/59/19eb300ba28e7547538bdf603f1c6c34793240a90e1a7b61b65d8517e35e/frozendict-2.4.6.tar.gz", hash = "sha256:df7cd16470fbd26fc4969a208efadc46319334eb97def1ddf48919b351192b8e", size = 316416 } wheels = [ - { url = "https://files.pythonhosted.org/packages/04/13/d9839089b900fa7b479cce495d62110cddc4bd5630a04d8469916c0e79c5/frozendict-2.4.6-py311-none-any.whl", hash = "sha256:d065db6a44db2e2375c23eac816f1a022feb2fa98cbb50df44a9e83700accbea", size = 16148, upload_time = "2024-10-13T12:15:26.839Z" }, - { url = "https://files.pythonhosted.org/packages/ba/d0/d482c39cee2ab2978a892558cf130681d4574ea208e162da8958b31e9250/frozendict-2.4.6-py312-none-any.whl", hash = "sha256:49344abe90fb75f0f9fdefe6d4ef6d4894e640fadab71f11009d52ad97f370b9", size = 16146, upload_time = "2024-10-13T12:15:28.16Z" }, - { url = "https://files.pythonhosted.org/packages/a5/8e/b6bf6a0de482d7d7d7a2aaac8fdc4a4d0bb24a809f5ddd422aa7060eb3d2/frozendict-2.4.6-py313-none-any.whl", hash = "sha256:7134a2bb95d4a16556bb5f2b9736dceb6ea848fa5b6f3f6c2d6dba93b44b4757", size = 16146, upload_time = "2024-10-13T12:15:29.495Z" }, + { url = "https://files.pythonhosted.org/packages/04/13/d9839089b900fa7b479cce495d62110cddc4bd5630a04d8469916c0e79c5/frozendict-2.4.6-py311-none-any.whl", hash = "sha256:d065db6a44db2e2375c23eac816f1a022feb2fa98cbb50df44a9e83700accbea", size = 16148 }, + { url = "https://files.pythonhosted.org/packages/ba/d0/d482c39cee2ab2978a892558cf130681d4574ea208e162da8958b31e9250/frozendict-2.4.6-py312-none-any.whl", hash = "sha256:49344abe90fb75f0f9fdefe6d4ef6d4894e640fadab71f11009d52ad97f370b9", size = 16146 }, + { url = "https://files.pythonhosted.org/packages/a5/8e/b6bf6a0de482d7d7d7a2aaac8fdc4a4d0bb24a809f5ddd422aa7060eb3d2/frozendict-2.4.6-py313-none-any.whl", hash = "sha256:7134a2bb95d4a16556bb5f2b9736dceb6ea848fa5b6f3f6c2d6dba93b44b4757", size = 16146 }, ] [[package]] @@ -547,9 +615,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "python-dateutil" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d9/29/d40217cbe2f6b1359e00c6c307bb3fc876ba74068cbab3dde77f03ca0dc4/ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343", size = 10943, upload_time = "2022-05-02T15:47:16.11Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d9/29/d40217cbe2f6b1359e00c6c307bb3fc876ba74068cbab3dde77f03ca0dc4/ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343", size = 10943 } wheels = [ - { url = "https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619", size = 11034, upload_time = "2022-05-02T15:47:14.552Z" }, + { url = "https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619", size = 11034 }, ] [[package]] @@ -559,33 +627,33 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "smmap" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/72/94/63b0fc47eb32792c7ba1fe1b694daec9a63620db1e313033d18140c2320a/gitdb-4.0.12.tar.gz", hash = "sha256:5ef71f855d191a3326fcfbc0d5da835f26b13fbcba60c32c21091c349ffdb571", size = 394684, upload_time = "2025-01-02T07:20:46.413Z" } +sdist = { url = "https://files.pythonhosted.org/packages/72/94/63b0fc47eb32792c7ba1fe1b694daec9a63620db1e313033d18140c2320a/gitdb-4.0.12.tar.gz", hash = "sha256:5ef71f855d191a3326fcfbc0d5da835f26b13fbcba60c32c21091c349ffdb571", size = 394684 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl", hash = "sha256:67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf", size = 62794, upload_time = "2025-01-02T07:20:43.624Z" }, + { url = "https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl", hash = "sha256:67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf", size = 62794 }, ] [[package]] name = "gitpython" -version = "3.1.44" +version = "3.1.45" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "gitdb" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c0/89/37df0b71473153574a5cdef8f242de422a0f5d26d7a9e231e6f169b4ad14/gitpython-3.1.44.tar.gz", hash = "sha256:c87e30b26253bf5418b01b0660f818967f3c503193838337fe5e573331249269", size = 214196, upload_time = "2025-01-02T07:32:43.59Z" } +sdist = { url = "https://files.pythonhosted.org/packages/9a/c8/dd58967d119baab745caec2f9d853297cec1989ec1d63f677d3880632b88/gitpython-3.1.45.tar.gz", hash = "sha256:85b0ee964ceddf211c41b9f27a49086010a190fd8132a24e21f362a4b36a791c", size = 215076 } wheels = [ - { url = "https://files.pythonhosted.org/packages/1d/9a/4114a9057db2f1462d5c8f8390ab7383925fe1ac012eaa42402ad65c2963/GitPython-3.1.44-py3-none-any.whl", hash = "sha256:9e0e10cda9bed1ee64bc9a6de50e7e38a9c9943241cd7f585f6df3ed28011110", size = 207599, upload_time = "2025-01-02T07:32:40.731Z" }, + { url = "https://files.pythonhosted.org/packages/01/61/d4b89fec821f72385526e1b9d9a3a0385dda4a72b206d28049e2c7cd39b8/gitpython-3.1.45-py3-none-any.whl", hash = "sha256:8908cb2e02fb3b93b7eb0f2827125cb699869470432cc885f019b8fd0fccff77", size = 208168 }, ] [[package]] name = "griffe" -version = "1.7.3" +version = "1.14.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a9/3e/5aa9a61f7c3c47b0b52a1d930302992229d191bf4bc76447b324b731510a/griffe-1.7.3.tar.gz", hash = "sha256:52ee893c6a3a968b639ace8015bec9d36594961e156e23315c8e8e51401fa50b", size = 395137, upload_time = "2025-04-23T11:29:09.147Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ec/d7/6c09dd7ce4c7837e4cdb11dce980cb45ae3cd87677298dc3b781b6bce7d3/griffe-1.14.0.tar.gz", hash = "sha256:9d2a15c1eca966d68e00517de5d69dd1bc5c9f2335ef6c1775362ba5b8651a13", size = 424684 } wheels = [ - { url = "https://files.pythonhosted.org/packages/58/c6/5c20af38c2a57c15d87f7f38bee77d63c1d2a3689f74fefaf35915dd12b2/griffe-1.7.3-py3-none-any.whl", hash = "sha256:c6b3ee30c2f0f17f30bcdef5068d6ab7a2a4f1b8bf1a3e74b56fffd21e1c5f75", size = 129303, upload_time = "2025-04-23T11:29:07.145Z" }, + { url = "https://files.pythonhosted.org/packages/2a/b1/9ff6578d789a89812ff21e4e0f80ffae20a65d5dd84e7a17873fe3b365be/griffe-1.14.0-py3-none-any.whl", hash = "sha256:0e9d52832cccf0f7188cfe585ba962d2674b241c01916d780925df34873bceb0", size = 144439 }, ] [[package]] @@ -593,33 +661,33 @@ name = "gurobipy" version = "12.0.3" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6f/bb/b3784497115c64c2bd122cc9d411f167026d4ec42a26b1ff3c43a779275d/gurobipy-12.0.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:020f23277f630e079eac114385eabd1bd9fb4ac22f8796ed5ba6d915ce4f141b", size = 12222234, upload_time = "2025-07-15T07:19:24.64Z" }, - { url = "https://files.pythonhosted.org/packages/18/ea/c065984de5287c99fd30ee8d700fd78f83692e992471f9667ab5d36612b9/gurobipy-12.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:72bbf544bc05060bb93909b79715ace4c0f416198f7622a985cabb9e8e99aa1c", size = 62583866, upload_time = "2025-07-15T07:20:17.576Z" }, - { url = "https://files.pythonhosted.org/packages/9b/8b/2b9f26e4e19a258229b8a8ffc377ca372cc2059a22a0a7c67572efe308d8/gurobipy-12.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b3f971caf270f671b6ffcf5b937b3c0430a5264b0f01529dc8681d61c221f215", size = 14268480, upload_time = "2025-07-15T07:20:26.898Z" }, - { url = "https://files.pythonhosted.org/packages/26/0f/3544a323635f37cdfe1e011d2903b7ef94ba18e10224fa1419f64d0c1968/gurobipy-12.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:af18fd03d5dc3f6e5f590c372ad288b8430a6d88a5b5e66cfcd8432f86ee8650", size = 11121565, upload_time = "2025-07-15T07:20:34.576Z" }, - { url = "https://files.pythonhosted.org/packages/5e/95/f0e5b5cf85298f42482cf4e53d8114c45bb962f55195d531fe4e62b5afa1/gurobipy-12.0.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a8552e47673cb6f1fd351edf8fcad86b02f832cbfb57d90ef21e0397e96d138e", size = 12183439, upload_time = "2025-07-15T07:20:44.224Z" }, - { url = "https://files.pythonhosted.org/packages/61/6e/aea725b4143faa4eb6878414a91fa74e7871aba0ab9453803a9eeef781c2/gurobipy-12.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:be05c074141c8a126c8aaeccc41795ab091a666eabb39ca1ff98a74bde81e663", size = 62583451, upload_time = "2025-07-15T07:21:38.825Z" }, - { url = "https://files.pythonhosted.org/packages/75/47/7b9c63ce2cd85d796403b91a6d211d5c8baac7b694edd94e2151f365d6a9/gurobipy-12.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:79a333766e27fef7902ceeefbcf0279a1ca393a27a72ea62f8e301b21aa17d59", size = 14271076, upload_time = "2025-07-15T07:21:55.102Z" }, - { url = "https://files.pythonhosted.org/packages/2a/93/b10cd6112c05675fed5c817fd7933c9d4ba3a7039e42cba844a9ac09242a/gurobipy-12.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:e0f9ed55077e622021369bb9df2ca3b00c86b678792a3b1556cc59f67348fab0", size = 11111414, upload_time = "2025-07-15T07:22:05.079Z" }, + { url = "https://files.pythonhosted.org/packages/6f/bb/b3784497115c64c2bd122cc9d411f167026d4ec42a26b1ff3c43a779275d/gurobipy-12.0.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:020f23277f630e079eac114385eabd1bd9fb4ac22f8796ed5ba6d915ce4f141b", size = 12222234 }, + { url = "https://files.pythonhosted.org/packages/18/ea/c065984de5287c99fd30ee8d700fd78f83692e992471f9667ab5d36612b9/gurobipy-12.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:72bbf544bc05060bb93909b79715ace4c0f416198f7622a985cabb9e8e99aa1c", size = 62583866 }, + { url = "https://files.pythonhosted.org/packages/9b/8b/2b9f26e4e19a258229b8a8ffc377ca372cc2059a22a0a7c67572efe308d8/gurobipy-12.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b3f971caf270f671b6ffcf5b937b3c0430a5264b0f01529dc8681d61c221f215", size = 14268480 }, + { url = "https://files.pythonhosted.org/packages/26/0f/3544a323635f37cdfe1e011d2903b7ef94ba18e10224fa1419f64d0c1968/gurobipy-12.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:af18fd03d5dc3f6e5f590c372ad288b8430a6d88a5b5e66cfcd8432f86ee8650", size = 11121565 }, + { url = "https://files.pythonhosted.org/packages/5e/95/f0e5b5cf85298f42482cf4e53d8114c45bb962f55195d531fe4e62b5afa1/gurobipy-12.0.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a8552e47673cb6f1fd351edf8fcad86b02f832cbfb57d90ef21e0397e96d138e", size = 12183439 }, + { url = "https://files.pythonhosted.org/packages/61/6e/aea725b4143faa4eb6878414a91fa74e7871aba0ab9453803a9eeef781c2/gurobipy-12.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:be05c074141c8a126c8aaeccc41795ab091a666eabb39ca1ff98a74bde81e663", size = 62583451 }, + { url = "https://files.pythonhosted.org/packages/75/47/7b9c63ce2cd85d796403b91a6d211d5c8baac7b694edd94e2151f365d6a9/gurobipy-12.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:79a333766e27fef7902ceeefbcf0279a1ca393a27a72ea62f8e301b21aa17d59", size = 14271076 }, + { url = "https://files.pythonhosted.org/packages/2a/93/b10cd6112c05675fed5c817fd7933c9d4ba3a7039e42cba844a9ac09242a/gurobipy-12.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:e0f9ed55077e622021369bb9df2ca3b00c86b678792a3b1556cc59f67348fab0", size = 11111414 }, ] [[package]] name = "hdx-python-country" -version = "3.9.6" +version = "3.9.8" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "hdx-python-utilities" }, { name = "libhxl" }, { name = "tenacity" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/88/96/ac55b204699cd216a22a943f64aafac32bba818f624a5d44879d60368fad/hdx_python_country-3.9.6.tar.gz", hash = "sha256:7791f4b9c5ae3e62e82795c266a3ca6ee23c7bab706c91533844edf2ebd9bb18", size = 529232, upload_time = "2025-07-09T22:56:32.162Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ce/cc/5621c48b79a510a87288495f4bdde38a292f0f97dd14177e2cc77c8a79bb/hdx_python_country-3.9.8.tar.gz", hash = "sha256:de9d928e490490fe6fa2d743597464fa8bae317f808667a947e734c1ea26e4d9", size = 531031 } wheels = [ - { url = "https://files.pythonhosted.org/packages/45/90/646b56ec12df459799510d6d0869ada210ad9f765ad104e50dae4867eb50/hdx_python_country-3.9.6-py3-none-any.whl", hash = "sha256:4c1833bdf3cbd14dfff0146e0bdcae5763931d344fce5f1b42493dc8751e3d4a", size = 55554, upload_time = "2025-07-09T22:56:30.128Z" }, + { url = "https://files.pythonhosted.org/packages/ce/8f/7d961e17372bb9df875e988432a2abb9ca4883b4a0592dfccefa50cb697f/hdx_python_country-3.9.8-py3-none-any.whl", hash = "sha256:602e495028e474e2f93094136007b2c0e765d88af55b2cae7e0ba778e178bcaf", size = 56383 }, ] [[package]] name = "hdx-python-utilities" -version = "3.8.7" +version = "3.9.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "frictionless" }, @@ -637,9 +705,9 @@ dependencies = [ { name = "xlsx2csv" }, { name = "xlwt" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/66/de/b812b6b242f47db98ed043b7f3211c81443f0e59959377e97a93915331c0/hdx_python_utilities-3.8.7.tar.gz", hash = "sha256:41212cd5b682777d393ee991b546f1b4326665d981714a829e5483101fd15a60", size = 656009, upload_time = "2025-05-14T02:31:28.578Z" } +sdist = { url = "https://files.pythonhosted.org/packages/7e/13/f22d36f9146beaefe27b1a888acd31ddd09c1a9730ed1d42df9af33f99e2/hdx_python_utilities-3.9.2.tar.gz", hash = "sha256:de39248afdca00ab636fdfa0c3259fa80e4b95dba026170a4efc5bee14eda3f3", size = 656826 } wheels = [ - { url = "https://files.pythonhosted.org/packages/db/38/44f2a0b83e103bb3d47dbc66dfaa4aaa65c34c60fd26d5445fb2bbd3c09a/hdx_python_utilities-3.8.7-py3-none-any.whl", hash = "sha256:47e67810e81a481504b8653c429b31b8c237da594dc27604075c8e79077c8640", size = 60787, upload_time = "2025-05-14T02:31:26.794Z" }, + { url = "https://files.pythonhosted.org/packages/95/6d/06994f86c2cc172b5ea127dedbb19e809205e06b1ba7532e2f0aea5631cd/hdx_python_utilities-3.9.2-py3-none-any.whl", hash = "sha256:fae3cc241420ae7ebb0a7a53cc8034c6851886396b2f0880685aba9045973111", size = 61187 }, ] [[package]] @@ -649,28 +717,28 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b4/fc/aa1325331c320598ce60cc31060087681cd05123b6fb2a8a571e882b7f05/highspy-1.11.0.tar.gz", hash = "sha256:771e58c076122d207ff1b19759c21d3227f0da5b80dfd89a4145681524969cef", size = 1285415, upload_time = "2025-06-06T00:47:22.562Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/bb/ad/b54ad6740b950faab3b7f1465fbb5c740fc522928a8d9f01cac181f8f9a6/highspy-1.11.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:28fffd3e733833a7b2569df6761088046e8aca868ab328828711dbe15b102ad4", size = 2232856, upload_time = "2025-06-06T00:46:11.161Z" }, - { url = "https://files.pythonhosted.org/packages/a3/0c/3921a207f47d52abc81a9d00d8f4d579b05b85670e23bc7140e39268490d/highspy-1.11.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:20a3adf8820a5f7a9cee6fc76df625e651ecfd8b5898af2a77042e79269ce0bc", size = 1908641, upload_time = "2025-06-06T00:46:12.706Z" }, - { url = "https://files.pythonhosted.org/packages/0a/b6/ea7ea6c4c3f781b007fe928b2aefa40c49287b4689985d04c3b20d383475/highspy-1.11.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d4bc0a84cf613bb8565f9b5f610eb0655384162f509b5d86f9c888570275fdc", size = 2119574, upload_time = "2025-06-06T00:46:14.261Z" }, - { url = "https://files.pythonhosted.org/packages/ff/0c/94f1ccb6606e8445a7a0c68d983e47f64899582c64fcea651f488eaaaea0/highspy-1.11.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:543789b75c396a904cb550de34eb333f1a184e123dadc9903b5e6dbca18a007b", size = 2441487, upload_time = "2025-06-06T00:46:16.286Z" }, - { url = "https://files.pythonhosted.org/packages/ad/aa/e7c4ac05162187c484bb121f50d8e037c13bf894ed5cf4e781e1cff68762/highspy-1.11.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a23949e4f44b6df0ed8c387a7c733d683a0fa66e3ff15d65719979ce2099ee99", size = 2302302, upload_time = "2025-06-06T00:46:18.819Z" }, - { url = "https://files.pythonhosted.org/packages/04/ce/fd2473bed635eb06d116f987767d5c5fe3c62b317fb1a788c31966d7fa0a/highspy-1.11.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:50dacf300ebe7c4dca92891c0bf61b694f2ca744207cf7d0d24f2a30ffb5608c", size = 3101885, upload_time = "2025-06-06T00:46:20.774Z" }, - { url = "https://files.pythonhosted.org/packages/6e/e1/bf174389656de5d302ed53dd5cdeb5f7e9ad84156ad2fc95d5a63ba023f2/highspy-1.11.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a782c242b4b047f86110787b0dafce9d77cc10f079adab1fd51c5331e5760127", size = 3647952, upload_time = "2025-06-06T00:46:22.847Z" }, - { url = "https://files.pythonhosted.org/packages/f3/f5/42f6f2ce99c5b9d7aa864ac3abeaf8a2b66da707821ab42b0a31ec2a0dc1/highspy-1.11.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:15b804387089a389e5f01b056a4b3ad74c7d1cf00ab00a0faaf3b4a582bb664c", size = 3309616, upload_time = "2025-06-06T00:46:24.888Z" }, - { url = "https://files.pythonhosted.org/packages/47/f5/cf13640ed65ea934b45e0c3e786497f4696f286faf45e8e62579a0f15462/highspy-1.11.0-cp312-cp312-win32.whl", hash = "sha256:8c33f68df8ab9666d379b0d64d04775c0a9db31882d4f87b3ec8cece0003b47d", size = 1710641, upload_time = "2025-06-06T00:46:26.462Z" }, - { url = "https://files.pythonhosted.org/packages/b7/2f/7acfea5b8d32b86bdec018f858bc195236b804a22a7cd3349da711498692/highspy-1.11.0-cp312-cp312-win_amd64.whl", hash = "sha256:a0aed8c80d33e2fc2eb1def75dbd34c9fa463acb589d19a5ed5dcc0178ae7062", size = 1985767, upload_time = "2025-06-06T00:46:28.144Z" }, - { url = "https://files.pythonhosted.org/packages/96/84/3e899c5d95dc9d5400a308e0aaf4a5143f69016a4f46dd528ff7cd65d341/highspy-1.11.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f675cda73860c7c8a22546db3c80db985720baea84866b08a971cfa03cc7a156", size = 2232867, upload_time = "2025-06-06T00:46:29.651Z" }, - { url = "https://files.pythonhosted.org/packages/74/e2/2853095a74e9fc2c2081340647be8edba7122696534ebbaf159ceb53f9b4/highspy-1.11.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7babebfc01b7682c69c95e0520614ec9400e10cec1b84d3fb7cd48535c606244", size = 1908601, upload_time = "2025-06-06T00:46:31.232Z" }, - { url = "https://files.pythonhosted.org/packages/e6/36/3cabdd3ae8610912962bad96f4d4d6702255d6c01d050754e4050a9eaa4a/highspy-1.11.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39fb60d84d7a58e58f923ea6f0641e6978eb9049033b84de1a2add723e01cd3f", size = 2119726, upload_time = "2025-06-06T00:46:32.796Z" }, - { url = "https://files.pythonhosted.org/packages/a9/da/200d3f13ca9ad3f9fc11a1f3f76cc2734de42dae064510365d42caeb5ed4/highspy-1.11.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6c2e7cf4d504287cd8910de322a726d58428af43bb985d6bae602bf84a7454b9", size = 2441449, upload_time = "2025-06-06T00:46:35.147Z" }, - { url = "https://files.pythonhosted.org/packages/6c/58/fc3775850dc668006039637a4f23f03a9c0eb533643c9d3a7370f9d63de2/highspy-1.11.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79682aa7855d94106ccbbb750082d156dcbb57dff9d489f167320ae0ce768867", size = 2302685, upload_time = "2025-06-06T00:46:36.791Z" }, - { url = "https://files.pythonhosted.org/packages/b5/16/e13326a9706c407d32e39ad14aa79a696c1eb49bb13d50fde5d96afb02b5/highspy-1.11.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:65232aa496fb27be56cc85b2c7c785fac866107c32ea00cc38ec474d6a9f6494", size = 3102306, upload_time = "2025-06-06T00:46:38.341Z" }, - { url = "https://files.pythonhosted.org/packages/0e/93/468e63b16d9bf123174e7f8f7b8bd5a2f96b18d7370a2cc35e6485871749/highspy-1.11.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:f78f27e18275d3c7868dcd0314ea535ed361322e7f0817363872d75a4cc15abc", size = 3648234, upload_time = "2025-06-06T00:46:40.895Z" }, - { url = "https://files.pythonhosted.org/packages/dc/c5/37b849a69c9cbccf533a9a51e309a49e83d704f06bf45370c2e78ceb15d4/highspy-1.11.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6156a7d643268456427b6fe310626ad9ee9d908ff812cc64ee8bad7b9872ea98", size = 3309724, upload_time = "2025-06-06T00:46:43.083Z" }, - { url = "https://files.pythonhosted.org/packages/90/0f/89c579b2f718dc419fd76067a03ecb3c96e6919b7cffee1b9f5a2dfe4f56/highspy-1.11.0-cp313-cp313-win32.whl", hash = "sha256:e61facebb0127eb3661db79a11c7665e47229ec63d2b425996d04aeede26d46b", size = 1710676, upload_time = "2025-06-06T00:46:45.132Z" }, - { url = "https://files.pythonhosted.org/packages/20/ca/ba2af91f2418bee0d0e99df71dcd171ca863675de6a5260bbf06c120f084/highspy-1.11.0-cp313-cp313-win_amd64.whl", hash = "sha256:ceac08be37f75dc0af95669a0cfb073e5db5f07ead05cdcc81fd4b4394708d53", size = 1985967, upload_time = "2025-06-06T00:46:46.767Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/b4/fc/aa1325331c320598ce60cc31060087681cd05123b6fb2a8a571e882b7f05/highspy-1.11.0.tar.gz", hash = "sha256:771e58c076122d207ff1b19759c21d3227f0da5b80dfd89a4145681524969cef", size = 1285415 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bb/ad/b54ad6740b950faab3b7f1465fbb5c740fc522928a8d9f01cac181f8f9a6/highspy-1.11.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:28fffd3e733833a7b2569df6761088046e8aca868ab328828711dbe15b102ad4", size = 2232856 }, + { url = "https://files.pythonhosted.org/packages/a3/0c/3921a207f47d52abc81a9d00d8f4d579b05b85670e23bc7140e39268490d/highspy-1.11.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:20a3adf8820a5f7a9cee6fc76df625e651ecfd8b5898af2a77042e79269ce0bc", size = 1908641 }, + { url = "https://files.pythonhosted.org/packages/0a/b6/ea7ea6c4c3f781b007fe928b2aefa40c49287b4689985d04c3b20d383475/highspy-1.11.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d4bc0a84cf613bb8565f9b5f610eb0655384162f509b5d86f9c888570275fdc", size = 2119574 }, + { url = "https://files.pythonhosted.org/packages/ff/0c/94f1ccb6606e8445a7a0c68d983e47f64899582c64fcea651f488eaaaea0/highspy-1.11.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:543789b75c396a904cb550de34eb333f1a184e123dadc9903b5e6dbca18a007b", size = 2441487 }, + { url = "https://files.pythonhosted.org/packages/ad/aa/e7c4ac05162187c484bb121f50d8e037c13bf894ed5cf4e781e1cff68762/highspy-1.11.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a23949e4f44b6df0ed8c387a7c733d683a0fa66e3ff15d65719979ce2099ee99", size = 2302302 }, + { url = "https://files.pythonhosted.org/packages/04/ce/fd2473bed635eb06d116f987767d5c5fe3c62b317fb1a788c31966d7fa0a/highspy-1.11.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:50dacf300ebe7c4dca92891c0bf61b694f2ca744207cf7d0d24f2a30ffb5608c", size = 3101885 }, + { url = "https://files.pythonhosted.org/packages/6e/e1/bf174389656de5d302ed53dd5cdeb5f7e9ad84156ad2fc95d5a63ba023f2/highspy-1.11.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a782c242b4b047f86110787b0dafce9d77cc10f079adab1fd51c5331e5760127", size = 3647952 }, + { url = "https://files.pythonhosted.org/packages/f3/f5/42f6f2ce99c5b9d7aa864ac3abeaf8a2b66da707821ab42b0a31ec2a0dc1/highspy-1.11.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:15b804387089a389e5f01b056a4b3ad74c7d1cf00ab00a0faaf3b4a582bb664c", size = 3309616 }, + { url = "https://files.pythonhosted.org/packages/47/f5/cf13640ed65ea934b45e0c3e786497f4696f286faf45e8e62579a0f15462/highspy-1.11.0-cp312-cp312-win32.whl", hash = "sha256:8c33f68df8ab9666d379b0d64d04775c0a9db31882d4f87b3ec8cece0003b47d", size = 1710641 }, + { url = "https://files.pythonhosted.org/packages/b7/2f/7acfea5b8d32b86bdec018f858bc195236b804a22a7cd3349da711498692/highspy-1.11.0-cp312-cp312-win_amd64.whl", hash = "sha256:a0aed8c80d33e2fc2eb1def75dbd34c9fa463acb589d19a5ed5dcc0178ae7062", size = 1985767 }, + { url = "https://files.pythonhosted.org/packages/96/84/3e899c5d95dc9d5400a308e0aaf4a5143f69016a4f46dd528ff7cd65d341/highspy-1.11.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f675cda73860c7c8a22546db3c80db985720baea84866b08a971cfa03cc7a156", size = 2232867 }, + { url = "https://files.pythonhosted.org/packages/74/e2/2853095a74e9fc2c2081340647be8edba7122696534ebbaf159ceb53f9b4/highspy-1.11.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7babebfc01b7682c69c95e0520614ec9400e10cec1b84d3fb7cd48535c606244", size = 1908601 }, + { url = "https://files.pythonhosted.org/packages/e6/36/3cabdd3ae8610912962bad96f4d4d6702255d6c01d050754e4050a9eaa4a/highspy-1.11.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39fb60d84d7a58e58f923ea6f0641e6978eb9049033b84de1a2add723e01cd3f", size = 2119726 }, + { url = "https://files.pythonhosted.org/packages/a9/da/200d3f13ca9ad3f9fc11a1f3f76cc2734de42dae064510365d42caeb5ed4/highspy-1.11.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6c2e7cf4d504287cd8910de322a726d58428af43bb985d6bae602bf84a7454b9", size = 2441449 }, + { url = "https://files.pythonhosted.org/packages/6c/58/fc3775850dc668006039637a4f23f03a9c0eb533643c9d3a7370f9d63de2/highspy-1.11.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79682aa7855d94106ccbbb750082d156dcbb57dff9d489f167320ae0ce768867", size = 2302685 }, + { url = "https://files.pythonhosted.org/packages/b5/16/e13326a9706c407d32e39ad14aa79a696c1eb49bb13d50fde5d96afb02b5/highspy-1.11.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:65232aa496fb27be56cc85b2c7c785fac866107c32ea00cc38ec474d6a9f6494", size = 3102306 }, + { url = "https://files.pythonhosted.org/packages/0e/93/468e63b16d9bf123174e7f8f7b8bd5a2f96b18d7370a2cc35e6485871749/highspy-1.11.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:f78f27e18275d3c7868dcd0314ea535ed361322e7f0817363872d75a4cc15abc", size = 3648234 }, + { url = "https://files.pythonhosted.org/packages/dc/c5/37b849a69c9cbccf533a9a51e309a49e83d704f06bf45370c2e78ceb15d4/highspy-1.11.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6156a7d643268456427b6fe310626ad9ee9d908ff812cc64ee8bad7b9872ea98", size = 3309724 }, + { url = "https://files.pythonhosted.org/packages/90/0f/89c579b2f718dc419fd76067a03ecb3c96e6919b7cffee1b9f5a2dfe4f56/highspy-1.11.0-cp313-cp313-win32.whl", hash = "sha256:e61facebb0127eb3661db79a11c7665e47229ec63d2b425996d04aeede26d46b", size = 1710676 }, + { url = "https://files.pythonhosted.org/packages/20/ca/ba2af91f2418bee0d0e99df71dcd171ca863675de6a5260bbf06c120f084/highspy-1.11.0-cp313-cp313-win_amd64.whl", hash = "sha256:ceac08be37f75dc0af95669a0cfb073e5db5f07ead05cdcc81fd4b4394708d53", size = 1985967 }, ] [[package]] @@ -678,75 +746,75 @@ name = "htmlmin2" version = "0.1.13" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/be/31/a76f4bfa885f93b8167cb4c85cf32b54d1f64384d0b897d45bc6d19b7b45/htmlmin2-0.1.13-py3-none-any.whl", hash = "sha256:75609f2a42e64f7ce57dbff28a39890363bde9e7e5885db633317efbdf8c79a2", size = 34486, upload_time = "2023-03-14T21:28:30.388Z" }, + { url = "https://files.pythonhosted.org/packages/be/31/a76f4bfa885f93b8167cb4c85cf32b54d1f64384d0b897d45bc6d19b7b45/htmlmin2-0.1.13-py3-none-any.whl", hash = "sha256:75609f2a42e64f7ce57dbff28a39890363bde9e7e5885db633317efbdf8c79a2", size = 34486 }, ] [[package]] name = "humanize" -version = "4.12.3" +version = "4.13.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/22/d1/bbc4d251187a43f69844f7fd8941426549bbe4723e8ff0a7441796b0789f/humanize-4.12.3.tar.gz", hash = "sha256:8430be3a615106fdfceb0b2c1b41c4c98c6b0fc5cc59663a5539b111dd325fb0", size = 80514, upload_time = "2025-04-30T11:51:07.98Z" } +sdist = { url = "https://files.pythonhosted.org/packages/98/1d/3062fcc89ee05a715c0b9bfe6490c00c576314f27ffee3a704122c6fd259/humanize-4.13.0.tar.gz", hash = "sha256:78f79e68f76f0b04d711c4e55d32bebef5be387148862cb1ef83d2b58e7935a0", size = 81884 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/1e/62a2ec3104394a2975a2629eec89276ede9dbe717092f6966fcf963e1bf0/humanize-4.12.3-py3-none-any.whl", hash = "sha256:2cbf6370af06568fa6d2da77c86edb7886f3160ecd19ee1ffef07979efc597f6", size = 128487, upload_time = "2025-04-30T11:51:06.468Z" }, + { url = "https://files.pythonhosted.org/packages/1e/c7/316e7ca04d26695ef0635dc81683d628350810eb8e9b2299fc08ba49f366/humanize-4.13.0-py3-none-any.whl", hash = "sha256:b810820b31891813b1673e8fec7f1ed3312061eab2f26e3fa192c393d11ed25f", size = 128869 }, ] [[package]] name = "identify" -version = "2.6.12" +version = "2.6.14" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a2/88/d193a27416618628a5eea64e3223acd800b40749a96ffb322a9b55a49ed1/identify-2.6.12.tar.gz", hash = "sha256:d8de45749f1efb108badef65ee8386f0f7bb19a7f26185f74de6367bffbaf0e6", size = 99254, upload_time = "2025-05-23T20:37:53.3Z" } +sdist = { url = "https://files.pythonhosted.org/packages/52/c4/62963f25a678f6a050fb0505a65e9e726996171e6dbe1547f79619eefb15/identify-2.6.14.tar.gz", hash = "sha256:663494103b4f717cb26921c52f8751363dc89db64364cd836a9bf1535f53cd6a", size = 99283 } wheels = [ - { url = "https://files.pythonhosted.org/packages/7a/cd/18f8da995b658420625f7ef13f037be53ae04ec5ad33f9b718240dcfd48c/identify-2.6.12-py2.py3-none-any.whl", hash = "sha256:ad9672d5a72e0d2ff7c5c8809b62dfa60458626352fb0eb7b55e69bdc45334a2", size = 99145, upload_time = "2025-05-23T20:37:51.495Z" }, + { url = "https://files.pythonhosted.org/packages/e5/ae/2ad30f4652712c82f1c23423d79136fbce338932ad166d70c1efb86a5998/identify-2.6.14-py2.py3-none-any.whl", hash = "sha256:11a073da82212c6646b1f39bb20d4483bfb9543bd5566fec60053c4bb309bf2e", size = 99172 }, ] [[package]] name = "idna" version = "3.10" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490, upload_time = "2024-09-15T18:07:39.745Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490 } wheels = [ - { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442, upload_time = "2024-09-15T18:07:37.964Z" }, + { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 }, ] [[package]] name = "ijson" version = "3.4.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a3/4f/1cfeada63f5fce87536651268ddf5cca79b8b4bbb457aee4e45777964a0a/ijson-3.4.0.tar.gz", hash = "sha256:5f74dcbad9d592c428d3ca3957f7115a42689ee7ee941458860900236ae9bb13", size = 65782, upload_time = "2025-05-08T02:37:20.135Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f8/ec/317ee5b2d13e50448833ead3aa906659a32b376191f6abc2a7c6112d2b27/ijson-3.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:956b148f88259a80a9027ffbe2d91705fae0c004fbfba3e5a24028fbe72311a9", size = 87212, upload_time = "2025-05-08T02:35:51.835Z" }, - { url = "https://files.pythonhosted.org/packages/f8/43/b06c96ced30cacecc5d518f89b0fd1c98c294a30ff88848b70ed7b7f72a1/ijson-3.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:06b89960f5c721106394c7fba5760b3f67c515b8eb7d80f612388f5eca2f4621", size = 59175, upload_time = "2025-05-08T02:35:52.988Z" }, - { url = "https://files.pythonhosted.org/packages/e9/df/b4aeafb7ecde463130840ee9be36130823ec94a00525049bf700883378b8/ijson-3.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9a0bb591cf250dd7e9dfab69d634745a7f3272d31cfe879f9156e0a081fd97ee", size = 59011, upload_time = "2025-05-08T02:35:54.394Z" }, - { url = "https://files.pythonhosted.org/packages/e3/7c/a80b8e361641609507f62022089626d4b8067f0826f51e1c09e4ba86eba8/ijson-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:72e92de999977f4c6b660ffcf2b8d59604ccd531edcbfde05b642baf283e0de8", size = 146094, upload_time = "2025-05-08T02:35:55.601Z" }, - { url = "https://files.pythonhosted.org/packages/01/44/fa416347b9a802e3646c6ff377fc3278bd7d6106e17beb339514b6a3184e/ijson-3.4.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e9602157a5b869d44b6896e64f502c712a312fcde044c2e586fccb85d3e316e", size = 137903, upload_time = "2025-05-08T02:35:56.814Z" }, - { url = "https://files.pythonhosted.org/packages/24/c6/41a9ad4d42df50ff6e70fdce79b034f09b914802737ebbdc141153d8d791/ijson-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e83660edb931a425b7ff662eb49db1f10d30ca6d4d350e5630edbed098bc01", size = 148339, upload_time = "2025-05-08T02:35:58.595Z" }, - { url = "https://files.pythonhosted.org/packages/5f/6f/7d01efda415b8502dce67e067ed9e8a124f53e763002c02207e542e1a2f1/ijson-3.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:49bf8eac1c7b7913073865a859c215488461f7591b4fa6a33c14b51cb73659d0", size = 149383, upload_time = "2025-05-08T02:36:00.197Z" }, - { url = "https://files.pythonhosted.org/packages/95/6c/0d67024b9ecb57916c5e5ab0350251c9fe2f86dc9c8ca2b605c194bdad6a/ijson-3.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:160b09273cb42019f1811469508b0a057d19f26434d44752bde6f281da6d3f32", size = 141580, upload_time = "2025-05-08T02:36:01.998Z" }, - { url = "https://files.pythonhosted.org/packages/06/43/e10edcc1c6a3b619294de835e7678bfb3a1b8a75955f3689fd66a1e9e7b4/ijson-3.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2019ff4e6f354aa00c76c8591bd450899111c61f2354ad55cc127e2ce2492c44", size = 150280, upload_time = "2025-05-08T02:36:03.926Z" }, - { url = "https://files.pythonhosted.org/packages/07/84/1cbeee8e8190a1ebe6926569a92cf1fa80ddb380c129beb6f86559e1bb24/ijson-3.4.0-cp312-cp312-win32.whl", hash = "sha256:931c007bf6bb8330705429989b2deed6838c22b63358a330bf362b6e458ba0bf", size = 51512, upload_time = "2025-05-08T02:36:05.595Z" }, - { url = "https://files.pythonhosted.org/packages/66/13/530802bc391c95be6fe9f96e9aa427d94067e7c0b7da7a9092344dc44c4b/ijson-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:71523f2b64cb856a820223e94d23e88369f193017ecc789bb4de198cc9d349eb", size = 54081, upload_time = "2025-05-08T02:36:07.099Z" }, - { url = "https://files.pythonhosted.org/packages/77/b3/b1d2eb2745e5204ec7a25365a6deb7868576214feb5e109bce368fb692c9/ijson-3.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e8d96f88d75196a61c9d9443de2b72c2d4a7ba9456ff117b57ae3bba23a54256", size = 87216, upload_time = "2025-05-08T02:36:08.414Z" }, - { url = "https://files.pythonhosted.org/packages/b1/cd/cd6d340087617f8cc9bedbb21d974542fe2f160ed0126b8288d3499a469b/ijson-3.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c45906ce2c1d3b62f15645476fc3a6ca279549127f01662a39ca5ed334a00cf9", size = 59170, upload_time = "2025-05-08T02:36:09.604Z" }, - { url = "https://files.pythonhosted.org/packages/3e/4d/32d3a9903b488d3306e3c8288f6ee4217d2eea82728261db03a1045eb5d1/ijson-3.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4ab4bc2119b35c4363ea49f29563612237cae9413d2fbe54b223be098b97bc9e", size = 59013, upload_time = "2025-05-08T02:36:10.696Z" }, - { url = "https://files.pythonhosted.org/packages/d5/c8/db15465ab4b0b477cee5964c8bfc94bf8c45af8e27a23e1ad78d1926e587/ijson-3.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97b0a9b5a15e61dfb1f14921ea4e0dba39f3a650df6d8f444ddbc2b19b479ff1", size = 146564, upload_time = "2025-05-08T02:36:11.916Z" }, - { url = "https://files.pythonhosted.org/packages/c4/d8/0755545bc122473a9a434ab90e0f378780e603d75495b1ca3872de757873/ijson-3.4.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e3047bb994dabedf11de11076ed1147a307924b6e5e2df6784fb2599c4ad8c60", size = 137917, upload_time = "2025-05-08T02:36:13.532Z" }, - { url = "https://files.pythonhosted.org/packages/d0/c6/aeb89c8939ebe3f534af26c8c88000c5e870dbb6ae33644c21a4531f87d2/ijson-3.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68c83161b052e9f5dc8191acbc862bb1e63f8a35344cb5cd0db1afd3afd487a6", size = 148897, upload_time = "2025-05-08T02:36:14.813Z" }, - { url = "https://files.pythonhosted.org/packages/be/0e/7ef6e9b372106f2682a4a32b3c65bf86bb471a1670e4dac242faee4a7d3f/ijson-3.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1eebd9b6c20eb1dffde0ae1f0fbb4aeacec2eb7b89adb5c7c0449fc9fd742760", size = 149711, upload_time = "2025-05-08T02:36:16.476Z" }, - { url = "https://files.pythonhosted.org/packages/d1/5d/9841c3ed75bcdabf19b3202de5f862a9c9c86ce5c7c9d95fa32347fdbf5f/ijson-3.4.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:13fb6d5c35192c541421f3ee81239d91fc15a8d8f26c869250f941f4b346a86c", size = 141691, upload_time = "2025-05-08T02:36:18.044Z" }, - { url = "https://files.pythonhosted.org/packages/d5/d2/ce74e17218dba292e9be10a44ed0c75439f7958cdd263adb0b5b92d012d5/ijson-3.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:28b7196ff7b37c4897c547a28fa4876919696739fc91c1f347651c9736877c69", size = 150738, upload_time = "2025-05-08T02:36:19.483Z" }, - { url = "https://files.pythonhosted.org/packages/4e/43/dcc480f94453b1075c9911d4755b823f3ace275761bb37b40139f22109ca/ijson-3.4.0-cp313-cp313-win32.whl", hash = "sha256:3c2691d2da42629522140f77b99587d6f5010440d58d36616f33bc7bdc830cc3", size = 51512, upload_time = "2025-05-08T02:36:20.99Z" }, - { url = "https://files.pythonhosted.org/packages/35/dd/d8c5f15efd85ba51e6e11451ebe23d779361a9ec0d192064c2a8c3cdfcb8/ijson-3.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:c4554718c275a044c47eb3874f78f2c939f300215d9031e785a6711cc51b83fc", size = 54074, upload_time = "2025-05-08T02:36:22.075Z" }, - { url = "https://files.pythonhosted.org/packages/79/73/24ad8cd106203419c4d22bed627e02e281d66b83e91bc206a371893d0486/ijson-3.4.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:915a65e3f3c0eee2ea937bc62aaedb6c14cc1e8f0bb9f3f4fb5a9e2bbfa4b480", size = 91694, upload_time = "2025-05-08T02:36:23.289Z" }, - { url = "https://files.pythonhosted.org/packages/17/2d/f7f680984bcb7324a46a4c2df3bd73cf70faef0acfeb85a3f811abdfd590/ijson-3.4.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:afbe9748707684b6c5adc295c4fdcf27765b300aec4d484e14a13dca4e5c0afa", size = 61390, upload_time = "2025-05-08T02:36:24.42Z" }, - { url = "https://files.pythonhosted.org/packages/09/a1/f3ca7bab86f95bdb82494739e71d271410dfefce4590785d511669127145/ijson-3.4.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:d823f8f321b4d8d5fa020d0a84f089fec5d52b7c0762430476d9f8bf95bbc1a9", size = 61140, upload_time = "2025-05-08T02:36:26.708Z" }, - { url = "https://files.pythonhosted.org/packages/51/79/dd340df3d4fc7771c95df29997956b92ed0570fe7b616d1792fea9ad93f2/ijson-3.4.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8a0a2c54f3becf76881188beefd98b484b1d3bd005769a740d5b433b089fa23", size = 214739, upload_time = "2025-05-08T02:36:27.973Z" }, - { url = "https://files.pythonhosted.org/packages/59/f0/85380b7f51d1f5fb7065d76a7b623e02feca920cc678d329b2eccc0011e0/ijson-3.4.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ced19a83ab09afa16257a0b15bc1aa888dbc555cb754be09d375c7f8d41051f2", size = 198338, upload_time = "2025-05-08T02:36:29.496Z" }, - { url = "https://files.pythonhosted.org/packages/a5/cd/313264cf2ec42e0f01d198c49deb7b6fadeb793b3685e20e738eb6b3fa13/ijson-3.4.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8100f9885eff1f38d35cef80ef759a1bbf5fc946349afa681bd7d0e681b7f1a0", size = 207515, upload_time = "2025-05-08T02:36:30.981Z" }, - { url = "https://files.pythonhosted.org/packages/12/94/bf14457aa87ea32641f2db577c9188ef4e4ae373478afef422b31fc7f309/ijson-3.4.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d7bcc3f7f21b0f703031ecd15209b1284ea51b2a329d66074b5261de3916c1eb", size = 210081, upload_time = "2025-05-08T02:36:32.403Z" }, - { url = "https://files.pythonhosted.org/packages/7d/b4/eaee39e290e40e52d665db9bd1492cfdce86bd1e47948e0440db209c6023/ijson-3.4.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:2dcb190227b09dd171bdcbfe4720fddd574933c66314818dfb3960c8a6246a77", size = 199253, upload_time = "2025-05-08T02:36:33.861Z" }, - { url = "https://files.pythonhosted.org/packages/c5/9c/e09c7b9ac720a703ab115b221b819f149ed54c974edfff623c1e925e57da/ijson-3.4.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:eda4cfb1d49c6073a901735aaa62e39cb7ab47f3ad7bb184862562f776f1fa8a", size = 203816, upload_time = "2025-05-08T02:36:35.348Z" }, - { url = "https://files.pythonhosted.org/packages/7c/14/acd304f412e32d16a2c12182b9d78206bb0ae35354d35664f45db05c1b3b/ijson-3.4.0-cp313-cp313t-win32.whl", hash = "sha256:0772638efa1f3b72b51736833404f1cbd2f5beeb9c1a3d392e7d385b9160cba7", size = 53760, upload_time = "2025-05-08T02:36:36.608Z" }, - { url = "https://files.pythonhosted.org/packages/2f/24/93dd0a467191590a5ed1fc2b35842bca9d09900d001e00b0b497c0208ef6/ijson-3.4.0-cp313-cp313t-win_amd64.whl", hash = "sha256:3d8a0d67f36e4fb97c61a724456ef0791504b16ce6f74917a31c2e92309bbeb9", size = 56948, upload_time = "2025-05-08T02:36:37.849Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/a3/4f/1cfeada63f5fce87536651268ddf5cca79b8b4bbb457aee4e45777964a0a/ijson-3.4.0.tar.gz", hash = "sha256:5f74dcbad9d592c428d3ca3957f7115a42689ee7ee941458860900236ae9bb13", size = 65782 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f8/ec/317ee5b2d13e50448833ead3aa906659a32b376191f6abc2a7c6112d2b27/ijson-3.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:956b148f88259a80a9027ffbe2d91705fae0c004fbfba3e5a24028fbe72311a9", size = 87212 }, + { url = "https://files.pythonhosted.org/packages/f8/43/b06c96ced30cacecc5d518f89b0fd1c98c294a30ff88848b70ed7b7f72a1/ijson-3.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:06b89960f5c721106394c7fba5760b3f67c515b8eb7d80f612388f5eca2f4621", size = 59175 }, + { url = "https://files.pythonhosted.org/packages/e9/df/b4aeafb7ecde463130840ee9be36130823ec94a00525049bf700883378b8/ijson-3.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9a0bb591cf250dd7e9dfab69d634745a7f3272d31cfe879f9156e0a081fd97ee", size = 59011 }, + { url = "https://files.pythonhosted.org/packages/e3/7c/a80b8e361641609507f62022089626d4b8067f0826f51e1c09e4ba86eba8/ijson-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:72e92de999977f4c6b660ffcf2b8d59604ccd531edcbfde05b642baf283e0de8", size = 146094 }, + { url = "https://files.pythonhosted.org/packages/01/44/fa416347b9a802e3646c6ff377fc3278bd7d6106e17beb339514b6a3184e/ijson-3.4.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e9602157a5b869d44b6896e64f502c712a312fcde044c2e586fccb85d3e316e", size = 137903 }, + { url = "https://files.pythonhosted.org/packages/24/c6/41a9ad4d42df50ff6e70fdce79b034f09b914802737ebbdc141153d8d791/ijson-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e83660edb931a425b7ff662eb49db1f10d30ca6d4d350e5630edbed098bc01", size = 148339 }, + { url = "https://files.pythonhosted.org/packages/5f/6f/7d01efda415b8502dce67e067ed9e8a124f53e763002c02207e542e1a2f1/ijson-3.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:49bf8eac1c7b7913073865a859c215488461f7591b4fa6a33c14b51cb73659d0", size = 149383 }, + { url = "https://files.pythonhosted.org/packages/95/6c/0d67024b9ecb57916c5e5ab0350251c9fe2f86dc9c8ca2b605c194bdad6a/ijson-3.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:160b09273cb42019f1811469508b0a057d19f26434d44752bde6f281da6d3f32", size = 141580 }, + { url = "https://files.pythonhosted.org/packages/06/43/e10edcc1c6a3b619294de835e7678bfb3a1b8a75955f3689fd66a1e9e7b4/ijson-3.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2019ff4e6f354aa00c76c8591bd450899111c61f2354ad55cc127e2ce2492c44", size = 150280 }, + { url = "https://files.pythonhosted.org/packages/07/84/1cbeee8e8190a1ebe6926569a92cf1fa80ddb380c129beb6f86559e1bb24/ijson-3.4.0-cp312-cp312-win32.whl", hash = "sha256:931c007bf6bb8330705429989b2deed6838c22b63358a330bf362b6e458ba0bf", size = 51512 }, + { url = "https://files.pythonhosted.org/packages/66/13/530802bc391c95be6fe9f96e9aa427d94067e7c0b7da7a9092344dc44c4b/ijson-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:71523f2b64cb856a820223e94d23e88369f193017ecc789bb4de198cc9d349eb", size = 54081 }, + { url = "https://files.pythonhosted.org/packages/77/b3/b1d2eb2745e5204ec7a25365a6deb7868576214feb5e109bce368fb692c9/ijson-3.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e8d96f88d75196a61c9d9443de2b72c2d4a7ba9456ff117b57ae3bba23a54256", size = 87216 }, + { url = "https://files.pythonhosted.org/packages/b1/cd/cd6d340087617f8cc9bedbb21d974542fe2f160ed0126b8288d3499a469b/ijson-3.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c45906ce2c1d3b62f15645476fc3a6ca279549127f01662a39ca5ed334a00cf9", size = 59170 }, + { url = "https://files.pythonhosted.org/packages/3e/4d/32d3a9903b488d3306e3c8288f6ee4217d2eea82728261db03a1045eb5d1/ijson-3.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4ab4bc2119b35c4363ea49f29563612237cae9413d2fbe54b223be098b97bc9e", size = 59013 }, + { url = "https://files.pythonhosted.org/packages/d5/c8/db15465ab4b0b477cee5964c8bfc94bf8c45af8e27a23e1ad78d1926e587/ijson-3.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97b0a9b5a15e61dfb1f14921ea4e0dba39f3a650df6d8f444ddbc2b19b479ff1", size = 146564 }, + { url = "https://files.pythonhosted.org/packages/c4/d8/0755545bc122473a9a434ab90e0f378780e603d75495b1ca3872de757873/ijson-3.4.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e3047bb994dabedf11de11076ed1147a307924b6e5e2df6784fb2599c4ad8c60", size = 137917 }, + { url = "https://files.pythonhosted.org/packages/d0/c6/aeb89c8939ebe3f534af26c8c88000c5e870dbb6ae33644c21a4531f87d2/ijson-3.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68c83161b052e9f5dc8191acbc862bb1e63f8a35344cb5cd0db1afd3afd487a6", size = 148897 }, + { url = "https://files.pythonhosted.org/packages/be/0e/7ef6e9b372106f2682a4a32b3c65bf86bb471a1670e4dac242faee4a7d3f/ijson-3.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1eebd9b6c20eb1dffde0ae1f0fbb4aeacec2eb7b89adb5c7c0449fc9fd742760", size = 149711 }, + { url = "https://files.pythonhosted.org/packages/d1/5d/9841c3ed75bcdabf19b3202de5f862a9c9c86ce5c7c9d95fa32347fdbf5f/ijson-3.4.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:13fb6d5c35192c541421f3ee81239d91fc15a8d8f26c869250f941f4b346a86c", size = 141691 }, + { url = "https://files.pythonhosted.org/packages/d5/d2/ce74e17218dba292e9be10a44ed0c75439f7958cdd263adb0b5b92d012d5/ijson-3.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:28b7196ff7b37c4897c547a28fa4876919696739fc91c1f347651c9736877c69", size = 150738 }, + { url = "https://files.pythonhosted.org/packages/4e/43/dcc480f94453b1075c9911d4755b823f3ace275761bb37b40139f22109ca/ijson-3.4.0-cp313-cp313-win32.whl", hash = "sha256:3c2691d2da42629522140f77b99587d6f5010440d58d36616f33bc7bdc830cc3", size = 51512 }, + { url = "https://files.pythonhosted.org/packages/35/dd/d8c5f15efd85ba51e6e11451ebe23d779361a9ec0d192064c2a8c3cdfcb8/ijson-3.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:c4554718c275a044c47eb3874f78f2c939f300215d9031e785a6711cc51b83fc", size = 54074 }, + { url = "https://files.pythonhosted.org/packages/79/73/24ad8cd106203419c4d22bed627e02e281d66b83e91bc206a371893d0486/ijson-3.4.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:915a65e3f3c0eee2ea937bc62aaedb6c14cc1e8f0bb9f3f4fb5a9e2bbfa4b480", size = 91694 }, + { url = "https://files.pythonhosted.org/packages/17/2d/f7f680984bcb7324a46a4c2df3bd73cf70faef0acfeb85a3f811abdfd590/ijson-3.4.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:afbe9748707684b6c5adc295c4fdcf27765b300aec4d484e14a13dca4e5c0afa", size = 61390 }, + { url = "https://files.pythonhosted.org/packages/09/a1/f3ca7bab86f95bdb82494739e71d271410dfefce4590785d511669127145/ijson-3.4.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:d823f8f321b4d8d5fa020d0a84f089fec5d52b7c0762430476d9f8bf95bbc1a9", size = 61140 }, + { url = "https://files.pythonhosted.org/packages/51/79/dd340df3d4fc7771c95df29997956b92ed0570fe7b616d1792fea9ad93f2/ijson-3.4.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8a0a2c54f3becf76881188beefd98b484b1d3bd005769a740d5b433b089fa23", size = 214739 }, + { url = "https://files.pythonhosted.org/packages/59/f0/85380b7f51d1f5fb7065d76a7b623e02feca920cc678d329b2eccc0011e0/ijson-3.4.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ced19a83ab09afa16257a0b15bc1aa888dbc555cb754be09d375c7f8d41051f2", size = 198338 }, + { url = "https://files.pythonhosted.org/packages/a5/cd/313264cf2ec42e0f01d198c49deb7b6fadeb793b3685e20e738eb6b3fa13/ijson-3.4.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8100f9885eff1f38d35cef80ef759a1bbf5fc946349afa681bd7d0e681b7f1a0", size = 207515 }, + { url = "https://files.pythonhosted.org/packages/12/94/bf14457aa87ea32641f2db577c9188ef4e4ae373478afef422b31fc7f309/ijson-3.4.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d7bcc3f7f21b0f703031ecd15209b1284ea51b2a329d66074b5261de3916c1eb", size = 210081 }, + { url = "https://files.pythonhosted.org/packages/7d/b4/eaee39e290e40e52d665db9bd1492cfdce86bd1e47948e0440db209c6023/ijson-3.4.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:2dcb190227b09dd171bdcbfe4720fddd574933c66314818dfb3960c8a6246a77", size = 199253 }, + { url = "https://files.pythonhosted.org/packages/c5/9c/e09c7b9ac720a703ab115b221b819f149ed54c974edfff623c1e925e57da/ijson-3.4.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:eda4cfb1d49c6073a901735aaa62e39cb7ab47f3ad7bb184862562f776f1fa8a", size = 203816 }, + { url = "https://files.pythonhosted.org/packages/7c/14/acd304f412e32d16a2c12182b9d78206bb0ae35354d35664f45db05c1b3b/ijson-3.4.0-cp313-cp313t-win32.whl", hash = "sha256:0772638efa1f3b72b51736833404f1cbd2f5beeb9c1a3d392e7d385b9160cba7", size = 53760 }, + { url = "https://files.pythonhosted.org/packages/2f/24/93dd0a467191590a5ed1fc2b35842bca9d09900d001e00b0b497c0208ef6/ijson-3.4.0-cp313-cp313t-win_amd64.whl", hash = "sha256:3d8a0d67f36e4fb97c61a724456ef0791504b16ce6f74917a31c2e92309bbeb9", size = 56948 }, ] [[package]] @@ -759,23 +827,23 @@ dependencies = [ { name = "pandas" }, { name = "requests" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/af/45/24521d229aec5c058d998510794567788bc7b1b764dfaa02fb8e0aeda4b7/imf_reader-1.3.0.tar.gz", hash = "sha256:3f3130dd793a112fdd5913a7c7b733847a5a07fd70dee14d57624ae4e021a141", size = 12990, upload_time = "2025-02-06T09:16:10.723Z" } +sdist = { url = "https://files.pythonhosted.org/packages/af/45/24521d229aec5c058d998510794567788bc7b1b764dfaa02fb8e0aeda4b7/imf_reader-1.3.0.tar.gz", hash = "sha256:3f3130dd793a112fdd5913a7c7b733847a5a07fd70dee14d57624ae4e021a141", size = 12990 } wheels = [ - { url = "https://files.pythonhosted.org/packages/fd/5b/3a063116950f2aa2b450120e78162bb5b87098dde3b75ae90210c6f2c099/imf_reader-1.3.0-py3-none-any.whl", hash = "sha256:3515c6644dfef44d5fda89f5bb3786b4f83da20f49184911f0df2386782106f1", size = 16520, upload_time = "2025-02-06T09:16:09.042Z" }, + { url = "https://files.pythonhosted.org/packages/fd/5b/3a063116950f2aa2b450120e78162bb5b87098dde3b75ae90210c6f2c099/imf_reader-1.3.0-py3-none-any.whl", hash = "sha256:3515c6644dfef44d5fda89f5bb3786b4f83da20f49184911f0df2386782106f1", size = 16520 }, ] [[package]] name = "iniconfig" version = "2.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f2/97/ebf4da567aa6827c909642694d71c9fcf53e5b504f2d96afea02718862f3/iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", size = 4793, upload_time = "2025-03-19T20:09:59.721Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f2/97/ebf4da567aa6827c909642694d71c9fcf53e5b504f2d96afea02718862f3/iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", size = 4793 } wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050, upload_time = "2025-03-19T20:10:01.071Z" }, + { url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050 }, ] [[package]] name = "ipykernel" -version = "6.29.5" +version = "6.30.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "appnope", marker = "sys_platform == 'darwin'" }, @@ -792,14 +860,14 @@ dependencies = [ { name = "tornado" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/e9/5c/67594cb0c7055dc50814b21731c22a601101ea3b1b50a9a1b090e11f5d0f/ipykernel-6.29.5.tar.gz", hash = "sha256:f093a22c4a40f8828f8e330a9c297cb93dcab13bd9678ded6de8e5cf81c56215", size = 163367, upload_time = "2024-07-01T14:07:22.543Z" } +sdist = { url = "https://files.pythonhosted.org/packages/bb/76/11082e338e0daadc89c8ff866185de11daf67d181901038f9e139d109761/ipykernel-6.30.1.tar.gz", hash = "sha256:6abb270161896402e76b91394fcdce5d1be5d45f456671e5080572f8505be39b", size = 166260 } wheels = [ - { url = "https://files.pythonhosted.org/packages/94/5c/368ae6c01c7628438358e6d337c19b05425727fbb221d2a3c4303c372f42/ipykernel-6.29.5-py3-none-any.whl", hash = "sha256:afdb66ba5aa354b09b91379bac28ae4afebbb30e8b39510c9690afb7a10421b5", size = 117173, upload_time = "2024-07-01T14:07:19.603Z" }, + { url = "https://files.pythonhosted.org/packages/fc/c7/b445faca8deb954fe536abebff4ece5b097b923de482b26e78448c89d1dd/ipykernel-6.30.1-py3-none-any.whl", hash = "sha256:aa6b9fb93dca949069d8b85b6c79b2518e32ac583ae9c7d37c51d119e18b3fb4", size = 117484 }, ] [[package]] name = "ipython" -version = "9.4.0" +version = "9.5.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, @@ -813,9 +881,9 @@ dependencies = [ { name = "stack-data" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/54/80/406f9e3bde1c1fd9bf5a0be9d090f8ae623e401b7670d8f6fdf2ab679891/ipython-9.4.0.tar.gz", hash = "sha256:c033c6d4e7914c3d9768aabe76bbe87ba1dc66a92a05db6bfa1125d81f2ee270", size = 4385338, upload_time = "2025-07-01T11:11:30.606Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6e/71/a86262bf5a68bf211bcc71fe302af7e05f18a2852fdc610a854d20d085e6/ipython-9.5.0.tar.gz", hash = "sha256:129c44b941fe6d9b82d36fc7a7c18127ddb1d6f02f78f867f402e2e3adde3113", size = 4389137 } wheels = [ - { url = "https://files.pythonhosted.org/packages/63/f8/0031ee2b906a15a33d6bfc12dd09c3dfa966b3cb5b284ecfb7549e6ac3c4/ipython-9.4.0-py3-none-any.whl", hash = "sha256:25850f025a446d9b359e8d296ba175a36aedd32e83ca9b5060430fe16801f066", size = 611021, upload_time = "2025-07-01T11:11:27.85Z" }, + { url = "https://files.pythonhosted.org/packages/08/2a/5628a99d04acb2d2f2e749cdf4ea571d2575e898df0528a090948018b726/ipython-9.5.0-py3-none-any.whl", hash = "sha256:88369ffa1d5817d609120daa523a6da06d02518e582347c29f8451732a9c5e72", size = 612426 }, ] [[package]] @@ -825,18 +893,18 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pygments" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ef/4c/5dd1d8af08107f88c7f741ead7a40854b8ac24ddf9ae850afbcf698aa552/ipython_pygments_lexers-1.1.1.tar.gz", hash = "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81", size = 8393, upload_time = "2025-01-17T11:24:34.505Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ef/4c/5dd1d8af08107f88c7f741ead7a40854b8ac24ddf9ae850afbcf698aa552/ipython_pygments_lexers-1.1.1.tar.gz", hash = "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81", size = 8393 } wheels = [ - { url = "https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl", hash = "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c", size = 8074, upload_time = "2025-01-17T11:24:33.271Z" }, + { url = "https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl", hash = "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c", size = 8074 }, ] [[package]] name = "isodate" version = "0.7.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/54/4d/e940025e2ce31a8ce1202635910747e5a87cc3a6a6bb2d00973375014749/isodate-0.7.2.tar.gz", hash = "sha256:4cd1aa0f43ca76f4a6c6c0292a85f40b35ec2e43e315b59f06e6d32171a953e6", size = 29705, upload_time = "2024-10-08T23:04:11.5Z" } +sdist = { url = "https://files.pythonhosted.org/packages/54/4d/e940025e2ce31a8ce1202635910747e5a87cc3a6a6bb2d00973375014749/isodate-0.7.2.tar.gz", hash = "sha256:4cd1aa0f43ca76f4a6c6c0292a85f40b35ec2e43e315b59f06e6d32171a953e6", size = 29705 } wheels = [ - { url = "https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl", hash = "sha256:28009937d8031054830160fce6d409ed342816b543597cece116d966c6d99e15", size = 22320, upload_time = "2024-10-08T23:04:09.501Z" }, + { url = "https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl", hash = "sha256:28009937d8031054830160fce6d409ed342816b543597cece116d966c6d99e15", size = 22320 }, ] [[package]] @@ -846,9 +914,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "parso" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/72/3a/79a912fbd4d8dd6fbb02bf69afd3bb72cf0c729bb3063c6f4498603db17a/jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0", size = 1231287, upload_time = "2024-11-11T01:41:42.873Z" } +sdist = { url = "https://files.pythonhosted.org/packages/72/3a/79a912fbd4d8dd6fbb02bf69afd3bb72cf0c729bb3063c6f4498603db17a/jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0", size = 1231287 } wheels = [ - { url = "https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9", size = 1572278, upload_time = "2024-11-11T01:41:40.175Z" }, + { url = "https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9", size = 1572278 }, ] [[package]] @@ -858,25 +926,25 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "markupsafe" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload_time = "2025-03-05T20:05:02.478Z" } +sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115 } wheels = [ - { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload_time = "2025-03-05T20:05:00.369Z" }, + { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899 }, ] [[package]] name = "joblib" -version = "1.5.1" +version = "1.5.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/dc/fe/0f5a938c54105553436dbff7a61dc4fed4b1b2c98852f8833beaf4d5968f/joblib-1.5.1.tar.gz", hash = "sha256:f4f86e351f39fe3d0d32a9f2c3d8af1ee4cec285aafcb27003dda5205576b444", size = 330475, upload_time = "2025-05-23T12:04:37.097Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e8/5d/447af5ea094b9e4c4054f82e223ada074c552335b9b4b2d14bd9b35a67c4/joblib-1.5.2.tar.gz", hash = "sha256:3faa5c39054b2f03ca547da9b2f52fde67c06240c31853f306aea97f13647b55", size = 331077 } wheels = [ - { url = "https://files.pythonhosted.org/packages/7d/4f/1195bbac8e0c2acc5f740661631d8d750dc38d4a32b23ee5df3cde6f4e0d/joblib-1.5.1-py3-none-any.whl", hash = "sha256:4719a31f054c7d766948dcd83e9613686b27114f190f717cec7eaa2084f8a74a", size = 307746, upload_time = "2025-05-23T12:04:35.124Z" }, + { url = "https://files.pythonhosted.org/packages/1e/e8/685f47e0d754320684db4425a0967f7d3fa70126bffd76110b7009a0090f/joblib-1.5.2-py3-none-any.whl", hash = "sha256:4e1f0bdbb987e6d843c70cf43714cb276623def372df3c22fe5266b2670bc241", size = 308396 }, ] [[package]] name = "jsmin" version = "3.0.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5e/73/e01e4c5e11ad0494f4407a3f623ad4d87714909f50b17a06ed121034ff6e/jsmin-3.0.1.tar.gz", hash = "sha256:c0959a121ef94542e807a674142606f7e90214a2b3d1eb17300244bbb5cc2bfc", size = 13925, upload_time = "2022-01-16T20:35:59.13Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5e/73/e01e4c5e11ad0494f4407a3f623ad4d87714909f50b17a06ed121034ff6e/jsmin-3.0.1.tar.gz", hash = "sha256:c0959a121ef94542e807a674142606f7e90214a2b3d1eb17300244bbb5cc2bfc", size = 13925 } [[package]] name = "jsonlines" @@ -885,9 +953,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "attrs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/35/87/bcda8e46c88d0e34cad2f09ee2d0c7f5957bccdb9791b0b934ec84d84be4/jsonlines-4.0.0.tar.gz", hash = "sha256:0c6d2c09117550c089995247f605ae4cf77dd1533041d366351f6f298822ea74", size = 11359, upload_time = "2023-09-01T12:34:44.187Z" } +sdist = { url = "https://files.pythonhosted.org/packages/35/87/bcda8e46c88d0e34cad2f09ee2d0c7f5957bccdb9791b0b934ec84d84be4/jsonlines-4.0.0.tar.gz", hash = "sha256:0c6d2c09117550c089995247f605ae4cf77dd1533041d366351f6f298822ea74", size = 11359 } wheels = [ - { url = "https://files.pythonhosted.org/packages/f8/62/d9ba6323b9202dd2fe166beab8a86d29465c41a0288cbe229fac60c1ab8d/jsonlines-4.0.0-py3-none-any.whl", hash = "sha256:185b334ff2ca5a91362993f42e83588a360cf95ce4b71a73548502bda52a7c55", size = 8701, upload_time = "2023-09-01T12:34:42.563Z" }, + { url = "https://files.pythonhosted.org/packages/f8/62/d9ba6323b9202dd2fe166beab8a86d29465c41a0288cbe229fac60c1ab8d/jsonlines-4.0.0-py3-none-any.whl", hash = "sha256:185b334ff2ca5a91362993f42e83588a360cf95ce4b71a73548502bda52a7c55", size = 8701 }, ] [[package]] @@ -897,14 +965,14 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "ply" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/6d/86/08646239a313f895186ff0a4573452038eed8c86f54380b3ebac34d32fb2/jsonpath-ng-1.7.0.tar.gz", hash = "sha256:f6f5f7fd4e5ff79c785f1573b394043b39849fb2bb47bcead935d12b00beab3c", size = 37838, upload_time = "2024-10-11T15:41:42.404Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6d/86/08646239a313f895186ff0a4573452038eed8c86f54380b3ebac34d32fb2/jsonpath-ng-1.7.0.tar.gz", hash = "sha256:f6f5f7fd4e5ff79c785f1573b394043b39849fb2bb47bcead935d12b00beab3c", size = 37838 } wheels = [ - { url = "https://files.pythonhosted.org/packages/35/5a/73ecb3d82f8615f32ccdadeb9356726d6cae3a4bbc840b437ceb95708063/jsonpath_ng-1.7.0-py3-none-any.whl", hash = "sha256:f3d7f9e848cba1b6da28c55b1c26ff915dc9e0b1ba7e752a53d6da8d5cbd00b6", size = 30105, upload_time = "2024-11-20T17:58:30.418Z" }, + { url = "https://files.pythonhosted.org/packages/35/5a/73ecb3d82f8615f32ccdadeb9356726d6cae3a4bbc840b437ceb95708063/jsonpath_ng-1.7.0-py3-none-any.whl", hash = "sha256:f3d7f9e848cba1b6da28c55b1c26ff915dc9e0b1ba7e752a53d6da8d5cbd00b6", size = 30105 }, ] [[package]] name = "jsonschema" -version = "4.24.0" +version = "4.25.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "attrs" }, @@ -912,21 +980,21 @@ dependencies = [ { name = "referencing" }, { name = "rpds-py" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/bf/d3/1cf5326b923a53515d8f3a2cd442e6d7e94fcc444716e879ea70a0ce3177/jsonschema-4.24.0.tar.gz", hash = "sha256:0b4e8069eb12aedfa881333004bccaec24ecef5a8a6a4b6df142b2cc9599d196", size = 353480, upload_time = "2025-05-26T18:48:10.459Z" } +sdist = { url = "https://files.pythonhosted.org/packages/74/69/f7185de793a29082a9f3c7728268ffb31cb5095131a9c139a74078e27336/jsonschema-4.25.1.tar.gz", hash = "sha256:e4a9655ce0da0c0b67a085847e00a3a51449e1157f4f75e9fb5aa545e122eb85", size = 357342 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a2/3d/023389198f69c722d039351050738d6755376c8fd343e91dc493ea485905/jsonschema-4.24.0-py3-none-any.whl", hash = "sha256:a462455f19f5faf404a7902952b6f0e3ce868f3ee09a359b05eca6673bd8412d", size = 88709, upload_time = "2025-05-26T18:48:08.417Z" }, + { url = "https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl", hash = "sha256:3fba0169e345c7175110351d456342c364814cfcf3b964ba4587f22915230a63", size = 90040 }, ] [[package]] name = "jsonschema-specifications" -version = "2025.4.1" +version = "2025.9.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "referencing" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/bf/ce/46fbd9c8119cfc3581ee5643ea49464d168028cfb5caff5fc0596d0cf914/jsonschema_specifications-2025.4.1.tar.gz", hash = "sha256:630159c9f4dbea161a6a2205c3011cc4f18ff381b189fff48bb39b9bf26ae608", size = 15513, upload_time = "2025-04-23T12:34:07.418Z" } +sdist = { url = "https://files.pythonhosted.org/packages/19/74/a633ee74eb36c44aa6d1095e7cc5569bebf04342ee146178e2d36600708b/jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d", size = 32855 } wheels = [ - { url = "https://files.pythonhosted.org/packages/01/0e/b27cdbaccf30b890c40ed1da9fd4a3593a5cf94dae54fb34f8a4b74fcd3f/jsonschema_specifications-2025.4.1-py3-none-any.whl", hash = "sha256:4653bffbd6584f7de83a67e0d620ef16900b390ddc7939d56684d6c81e33f1af", size = 18437, upload_time = "2025-04-23T12:34:05.422Z" }, + { url = "https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe", size = 18437 }, ] [[package]] @@ -940,9 +1008,9 @@ dependencies = [ { name = "tornado" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/71/22/bf9f12fdaeae18019a468b68952a60fe6dbab5d67cd2a103cac7659b41ca/jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419", size = 342019, upload_time = "2024-09-17T10:44:17.613Z" } +sdist = { url = "https://files.pythonhosted.org/packages/71/22/bf9f12fdaeae18019a468b68952a60fe6dbab5d67cd2a103cac7659b41ca/jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419", size = 342019 } wheels = [ - { url = "https://files.pythonhosted.org/packages/11/85/b0394e0b6fcccd2c1eeefc230978a6f8cb0c5df1e4cd3e7625735a0d7d1e/jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f", size = 106105, upload_time = "2024-09-17T10:44:15.218Z" }, + { url = "https://files.pythonhosted.org/packages/11/85/b0394e0b6fcccd2c1eeefc230978a6f8cb0c5df1e4cd3e7625735a0d7d1e/jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f", size = 106105 }, ] [[package]] @@ -954,23 +1022,23 @@ dependencies = [ { name = "pywin32", marker = "platform_python_implementation != 'PyPy' and sys_platform == 'win32'" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/99/1b/72906d554acfeb588332eaaa6f61577705e9ec752ddb486f302dafa292d9/jupyter_core-5.8.1.tar.gz", hash = "sha256:0a5f9706f70e64786b75acba995988915ebd4601c8a52e534a40b51c95f59941", size = 88923, upload_time = "2025-05-27T07:38:16.655Z" } +sdist = { url = "https://files.pythonhosted.org/packages/99/1b/72906d554acfeb588332eaaa6f61577705e9ec752ddb486f302dafa292d9/jupyter_core-5.8.1.tar.gz", hash = "sha256:0a5f9706f70e64786b75acba995988915ebd4601c8a52e534a40b51c95f59941", size = 88923 } wheels = [ - { url = "https://files.pythonhosted.org/packages/2f/57/6bffd4b20b88da3800c5d691e0337761576ee688eb01299eae865689d2df/jupyter_core-5.8.1-py3-none-any.whl", hash = "sha256:c28d268fc90fb53f1338ded2eb410704c5449a358406e8a948b75706e24863d0", size = 28880, upload_time = "2025-05-27T07:38:15.137Z" }, + { url = "https://files.pythonhosted.org/packages/2f/57/6bffd4b20b88da3800c5d691e0337761576ee688eb01299eae865689d2df/jupyter_core-5.8.1-py3-none-any.whl", hash = "sha256:c28d268fc90fb53f1338ded2eb410704c5449a358406e8a948b75706e24863d0", size = 28880 }, ] [[package]] name = "jupyterlab-pygments" version = "0.3.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/90/51/9187be60d989df97f5f0aba133fa54e7300f17616e065d1ada7d7646b6d6/jupyterlab_pygments-0.3.0.tar.gz", hash = "sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d", size = 512900, upload_time = "2023-11-23T09:26:37.44Z" } +sdist = { url = "https://files.pythonhosted.org/packages/90/51/9187be60d989df97f5f0aba133fa54e7300f17616e065d1ada7d7646b6d6/jupyterlab_pygments-0.3.0.tar.gz", hash = "sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d", size = 512900 } wheels = [ - { url = "https://files.pythonhosted.org/packages/b1/dd/ead9d8ea85bf202d90cc513b533f9c363121c7792674f78e0d8a854b63b4/jupyterlab_pygments-0.3.0-py3-none-any.whl", hash = "sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780", size = 15884, upload_time = "2023-11-23T09:26:34.325Z" }, + { url = "https://files.pythonhosted.org/packages/b1/dd/ead9d8ea85bf202d90cc513b533f9c363121c7792674f78e0d8a854b63b4/jupyterlab_pygments-0.3.0-py3-none-any.whl", hash = "sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780", size = 15884 }, ] [[package]] name = "jupytext" -version = "1.17.2" +version = "1.17.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "markdown-it-py" }, @@ -979,9 +1047,9 @@ dependencies = [ { name = "packaging" }, { name = "pyyaml" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/30/ce/0bd5290ca4978777154e2683413dca761781aacf57f7dc0146f5210df8b1/jupytext-1.17.2.tar.gz", hash = "sha256:772d92898ac1f2ded69106f897b34af48ce4a85c985fa043a378ff5a65455f02", size = 3748577, upload_time = "2025-06-01T21:31:48.231Z" } +sdist = { url = "https://files.pythonhosted.org/packages/15/14/41faf71e168fcc6c48268f0fc67ba0d6acf6ee4e2c5c785c2bccb967c29d/jupytext-1.17.3.tar.gz", hash = "sha256:8b6dae76d63c95cad47b493c38f0d9c74491fb621dcd0980abfcac4c8f168679", size = 3753151 } wheels = [ - { url = "https://files.pythonhosted.org/packages/ed/f1/82ea8e783433707cafd9790099a2d19f113c22f32a31c8bb5abdc7a61dbb/jupytext-1.17.2-py3-none-any.whl", hash = "sha256:4f85dc43bb6a24b75491c5c434001ad5ef563932f68f15dd3e1c8ce12a4a426b", size = 164401, upload_time = "2025-06-01T21:31:46.319Z" }, + { url = "https://files.pythonhosted.org/packages/36/86/751ec86adb66104d15e650b704f89dddd64ba29283178b9651b9bc84b624/jupytext-1.17.3-py3-none-any.whl", hash = "sha256:09b0a94cd904416e823a5ba9f41bd181031215b6fc682d2b5c18e68354feb17c", size = 166548 }, ] [[package]] @@ -1000,7 +1068,7 @@ dependencies = [ { name = "wheel" }, { name = "xlrd3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/63/ad/c1dafb7c59e685692a2eeafce83245b7c5f46e05881fdb77a0cbb7c19c74/libhxl-5.2.2.tar.gz", hash = "sha256:3a74d9f23561bfcefd20e5229c574bc68dfc114fdb6ba1ba684d9e9d7ea52483", size = 127736, upload_time = "2024-10-25T09:19:11.202Z" } +sdist = { url = "https://files.pythonhosted.org/packages/63/ad/c1dafb7c59e685692a2eeafce83245b7c5f46e05881fdb77a0cbb7c19c74/libhxl-5.2.2.tar.gz", hash = "sha256:3a74d9f23561bfcefd20e5229c574bc68dfc114fdb6ba1ba684d9e9d7ea52483", size = 127736 } [[package]] name = "license-expression" @@ -1009,9 +1077,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "boolean-py" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/40/71/d89bb0e71b1415453980fd32315f2a037aad9f7f70f695c7cec7035feb13/license_expression-30.4.4.tar.gz", hash = "sha256:73448f0aacd8d0808895bdc4b2c8e01a8d67646e4188f887375398c761f340fd", size = 186402, upload_time = "2025-07-22T11:13:32.17Z" } +sdist = { url = "https://files.pythonhosted.org/packages/40/71/d89bb0e71b1415453980fd32315f2a037aad9f7f70f695c7cec7035feb13/license_expression-30.4.4.tar.gz", hash = "sha256:73448f0aacd8d0808895bdc4b2c8e01a8d67646e4188f887375398c761f340fd", size = 186402 } wheels = [ - { url = "https://files.pythonhosted.org/packages/af/40/791891d4c0c4dab4c5e187c17261cedc26285fd41541577f900470a45a4d/license_expression-30.4.4-py3-none-any.whl", hash = "sha256:421788fdcadb41f049d2dc934ce666626265aeccefddd25e162a26f23bcbf8a4", size = 120615, upload_time = "2025-07-22T11:13:31.217Z" }, + { url = "https://files.pythonhosted.org/packages/af/40/791891d4c0c4dab4c5e187c17261cedc26285fd41541577f900470a45a4d/license_expression-30.4.4-py3-none-any.whl", hash = "sha256:421788fdcadb41f049d2dc934ce666626265aeccefddd25e162a26f23bcbf8a4", size = 120615 }, ] [[package]] @@ -1022,139 +1090,157 @@ dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, { name = "win32-setctime", marker = "sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/3a/05/a1dae3dffd1116099471c643b8924f5aa6524411dc6c63fdae648c4f1aca/loguru-0.7.3.tar.gz", hash = "sha256:19480589e77d47b8d85b2c827ad95d49bf31b0dcde16593892eb51dd18706eb6", size = 63559, upload_time = "2024-12-06T11:20:56.608Z" } +sdist = { url = "https://files.pythonhosted.org/packages/3a/05/a1dae3dffd1116099471c643b8924f5aa6524411dc6c63fdae648c4f1aca/loguru-0.7.3.tar.gz", hash = "sha256:19480589e77d47b8d85b2c827ad95d49bf31b0dcde16593892eb51dd18706eb6", size = 63559 } wheels = [ - { url = "https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl", hash = "sha256:31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c", size = 61595, upload_time = "2024-12-06T11:20:54.538Z" }, + { url = "https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl", hash = "sha256:31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c", size = 61595 }, ] [[package]] name = "lxml" -version = "6.0.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8f/bd/f9d01fd4132d81c6f43ab01983caea69ec9614b913c290a26738431a015d/lxml-6.0.1.tar.gz", hash = "sha256:2b3a882ebf27dd026df3801a87cf49ff791336e0f94b0fad195db77e01240690", size = 4070214, upload_time = "2025-08-22T10:37:53.525Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b0/a9/82b244c8198fcdf709532e39a1751943a36b3e800b420adc739d751e0299/lxml-6.0.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:c03ac546adaabbe0b8e4a15d9ad815a281afc8d36249c246aecf1aaad7d6f200", size = 8422788, upload_time = "2025-08-22T10:32:56.612Z" }, - { url = "https://files.pythonhosted.org/packages/c9/8d/1ed2bc20281b0e7ed3e6c12b0a16e64ae2065d99be075be119ba88486e6d/lxml-6.0.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:33b862c7e3bbeb4ba2c96f3a039f925c640eeba9087a4dc7a572ec0f19d89392", size = 4593547, upload_time = "2025-08-22T10:32:59.016Z" }, - { url = "https://files.pythonhosted.org/packages/76/53/d7fd3af95b72a3493bf7fbe842a01e339d8f41567805cecfecd5c71aa5ee/lxml-6.0.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7a3ec1373f7d3f519de595032d4dcafae396c29407cfd5073f42d267ba32440d", size = 4948101, upload_time = "2025-08-22T10:33:00.765Z" }, - { url = "https://files.pythonhosted.org/packages/9d/51/4e57cba4d55273c400fb63aefa2f0d08d15eac021432571a7eeefee67bed/lxml-6.0.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:03b12214fb1608f4cffa181ec3d046c72f7e77c345d06222144744c122ded870", size = 5108090, upload_time = "2025-08-22T10:33:03.108Z" }, - { url = "https://files.pythonhosted.org/packages/f6/6e/5f290bc26fcc642bc32942e903e833472271614e24d64ad28aaec09d5dae/lxml-6.0.1-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:207ae0d5f0f03b30f95e649a6fa22aa73f5825667fee9c7ec6854d30e19f2ed8", size = 5021791, upload_time = "2025-08-22T10:33:06.972Z" }, - { url = "https://files.pythonhosted.org/packages/13/d4/2e7551a86992ece4f9a0f6eebd4fb7e312d30f1e372760e2109e721d4ce6/lxml-6.0.1-cp312-cp312-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:32297b09ed4b17f7b3f448de87a92fb31bb8747496623483788e9f27c98c0f00", size = 5358861, upload_time = "2025-08-22T10:33:08.967Z" }, - { url = "https://files.pythonhosted.org/packages/8a/5f/cb49d727fc388bf5fd37247209bab0da11697ddc5e976ccac4826599939e/lxml-6.0.1-cp312-cp312-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7e18224ea241b657a157c85e9cac82c2b113ec90876e01e1f127312006233756", size = 5652569, upload_time = "2025-08-22T10:33:10.815Z" }, - { url = "https://files.pythonhosted.org/packages/ca/b8/66c1ef8c87ad0f958b0a23998851e610607c74849e75e83955d5641272e6/lxml-6.0.1-cp312-cp312-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a07a994d3c46cd4020c1ea566345cf6815af205b1e948213a4f0f1d392182072", size = 5252262, upload_time = "2025-08-22T10:33:12.673Z" }, - { url = "https://files.pythonhosted.org/packages/1a/ef/131d3d6b9590e64fdbb932fbc576b81fcc686289da19c7cb796257310e82/lxml-6.0.1-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:2287fadaa12418a813b05095485c286c47ea58155930cfbd98c590d25770e225", size = 4710309, upload_time = "2025-08-22T10:33:14.952Z" }, - { url = "https://files.pythonhosted.org/packages/bc/3f/07f48ae422dce44902309aa7ed386c35310929dc592439c403ec16ef9137/lxml-6.0.1-cp312-cp312-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b4e597efca032ed99f418bd21314745522ab9fa95af33370dcee5533f7f70136", size = 5265786, upload_time = "2025-08-22T10:33:16.721Z" }, - { url = "https://files.pythonhosted.org/packages/11/c7/125315d7b14ab20d9155e8316f7d287a4956098f787c22d47560b74886c4/lxml-6.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9696d491f156226decdd95d9651c6786d43701e49f32bf23715c975539aa2b3b", size = 5062272, upload_time = "2025-08-22T10:33:18.478Z" }, - { url = "https://files.pythonhosted.org/packages/8b/c3/51143c3a5fc5168a7c3ee626418468ff20d30f5a59597e7b156c1e61fba8/lxml-6.0.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:e4e3cd3585f3c6f87cdea44cda68e692cc42a012f0131d25957ba4ce755241a7", size = 4786955, upload_time = "2025-08-22T10:33:20.34Z" }, - { url = "https://files.pythonhosted.org/packages/11/86/73102370a420ec4529647b31c4a8ce8c740c77af3a5fae7a7643212d6f6e/lxml-6.0.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:45cbc92f9d22c28cd3b97f8d07fcefa42e569fbd587dfdac76852b16a4924277", size = 5673557, upload_time = "2025-08-22T10:33:22.282Z" }, - { url = "https://files.pythonhosted.org/packages/d7/2d/aad90afaec51029aef26ef773b8fd74a9e8706e5e2f46a57acd11a421c02/lxml-6.0.1-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:f8c9bcfd2e12299a442fba94459adf0b0d001dbc68f1594439bfa10ad1ecb74b", size = 5254211, upload_time = "2025-08-22T10:33:24.15Z" }, - { url = "https://files.pythonhosted.org/packages/63/01/c9e42c8c2d8b41f4bdefa42ab05448852e439045f112903dd901b8fbea4d/lxml-6.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1e9dc2b9f1586e7cd77753eae81f8d76220eed9b768f337dc83a3f675f2f0cf9", size = 5275817, upload_time = "2025-08-22T10:33:26.007Z" }, - { url = "https://files.pythonhosted.org/packages/bc/1f/962ea2696759abe331c3b0e838bb17e92224f39c638c2068bf0d8345e913/lxml-6.0.1-cp312-cp312-win32.whl", hash = "sha256:987ad5c3941c64031f59c226167f55a04d1272e76b241bfafc968bdb778e07fb", size = 3610889, upload_time = "2025-08-22T10:33:28.169Z" }, - { url = "https://files.pythonhosted.org/packages/41/e2/22c86a990b51b44442b75c43ecb2f77b8daba8c4ba63696921966eac7022/lxml-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:abb05a45394fd76bf4a60c1b7bec0e6d4e8dfc569fc0e0b1f634cd983a006ddc", size = 4010925, upload_time = "2025-08-22T10:33:29.874Z" }, - { url = "https://files.pythonhosted.org/packages/b2/21/dc0c73325e5eb94ef9c9d60dbb5dcdcb2e7114901ea9509735614a74e75a/lxml-6.0.1-cp312-cp312-win_arm64.whl", hash = "sha256:c4be29bce35020d8579d60aa0a4e95effd66fcfce31c46ffddf7e5422f73a299", size = 3671922, upload_time = "2025-08-22T10:33:31.535Z" }, - { url = "https://files.pythonhosted.org/packages/43/c4/cd757eeec4548e6652eff50b944079d18ce5f8182d2b2cf514e125e8fbcb/lxml-6.0.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:485eda5d81bb7358db96a83546949c5fe7474bec6c68ef3fa1fb61a584b00eea", size = 8405139, upload_time = "2025-08-22T10:33:34.09Z" }, - { url = "https://files.pythonhosted.org/packages/ff/99/0290bb86a7403893f5e9658490c705fcea103b9191f2039752b071b4ef07/lxml-6.0.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d12160adea318ce3d118f0b4fbdff7d1225c75fb7749429541b4d217b85c3f76", size = 4585954, upload_time = "2025-08-22T10:33:36.294Z" }, - { url = "https://files.pythonhosted.org/packages/88/a7/4bb54dd1e626342a0f7df6ec6ca44fdd5d0e100ace53acc00e9a689ead04/lxml-6.0.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:48c8d335d8ab72f9265e7ba598ae5105a8272437403f4032107dbcb96d3f0b29", size = 4944052, upload_time = "2025-08-22T10:33:38.19Z" }, - { url = "https://files.pythonhosted.org/packages/71/8d/20f51cd07a7cbef6214675a8a5c62b2559a36d9303fe511645108887c458/lxml-6.0.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:405e7cf9dbdbb52722c231e0f1257214202dfa192327fab3de45fd62e0554082", size = 5098885, upload_time = "2025-08-22T10:33:40.035Z" }, - { url = "https://files.pythonhosted.org/packages/5a/63/efceeee7245d45f97d548e48132258a36244d3c13c6e3ddbd04db95ff496/lxml-6.0.1-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:299a790d403335a6a057ade46f92612ebab87b223e4e8c5308059f2dc36f45ed", size = 5017542, upload_time = "2025-08-22T10:33:41.896Z" }, - { url = "https://files.pythonhosted.org/packages/57/5d/92cb3d3499f5caba17f7933e6be3b6c7de767b715081863337ced42eb5f2/lxml-6.0.1-cp313-cp313-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:48da704672f6f9c461e9a73250440c647638cc6ff9567ead4c3b1f189a604ee8", size = 5347303, upload_time = "2025-08-22T10:33:43.868Z" }, - { url = "https://files.pythonhosted.org/packages/69/f8/606fa16a05d7ef5e916c6481c634f40870db605caffed9d08b1a4fb6b989/lxml-6.0.1-cp313-cp313-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:21e364e1bb731489e3f4d51db416f991a5d5da5d88184728d80ecfb0904b1d68", size = 5641055, upload_time = "2025-08-22T10:33:45.784Z" }, - { url = "https://files.pythonhosted.org/packages/b3/01/15d5fc74ebb49eac4e5df031fbc50713dcc081f4e0068ed963a510b7d457/lxml-6.0.1-cp313-cp313-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1bce45a2c32032afddbd84ed8ab092130649acb935536ef7a9559636ce7ffd4a", size = 5242719, upload_time = "2025-08-22T10:33:48.089Z" }, - { url = "https://files.pythonhosted.org/packages/42/a5/1b85e2aaaf8deaa67e04c33bddb41f8e73d07a077bf9db677cec7128bfb4/lxml-6.0.1-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:fa164387ff20ab0e575fa909b11b92ff1481e6876835014e70280769920c4433", size = 4717310, upload_time = "2025-08-22T10:33:49.852Z" }, - { url = "https://files.pythonhosted.org/packages/42/23/f3bb1292f55a725814317172eeb296615db3becac8f1a059b53c51fc1da8/lxml-6.0.1-cp313-cp313-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:7587ac5e000e1594e62278422c5783b34a82b22f27688b1074d71376424b73e8", size = 5254024, upload_time = "2025-08-22T10:33:52.22Z" }, - { url = "https://files.pythonhosted.org/packages/b4/be/4d768f581ccd0386d424bac615d9002d805df7cc8482ae07d529f60a3c1e/lxml-6.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:57478424ac4c9170eabf540237125e8d30fad1940648924c058e7bc9fb9cf6dd", size = 5055335, upload_time = "2025-08-22T10:33:54.041Z" }, - { url = "https://files.pythonhosted.org/packages/40/07/ed61d1a3e77d1a9f856c4fab15ee5c09a2853fb7af13b866bb469a3a6d42/lxml-6.0.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:09c74afc7786c10dd6afaa0be2e4805866beadc18f1d843cf517a7851151b499", size = 4784864, upload_time = "2025-08-22T10:33:56.382Z" }, - { url = "https://files.pythonhosted.org/packages/01/37/77e7971212e5c38a55431744f79dff27fd751771775165caea096d055ca4/lxml-6.0.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:7fd70681aeed83b196482d42a9b0dc5b13bab55668d09ad75ed26dff3be5a2f5", size = 5657173, upload_time = "2025-08-22T10:33:58.698Z" }, - { url = "https://files.pythonhosted.org/packages/32/a3/e98806d483941cd9061cc838b1169626acef7b2807261fbe5e382fcef881/lxml-6.0.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:10a72e456319b030b3dd900df6b1f19d89adf06ebb688821636dc406788cf6ac", size = 5245896, upload_time = "2025-08-22T10:34:00.586Z" }, - { url = "https://files.pythonhosted.org/packages/07/de/9bb5a05e42e8623bf06b4638931ea8c8f5eb5a020fe31703abdbd2e83547/lxml-6.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b0fa45fb5f55111ce75b56c703843b36baaf65908f8b8d2fbbc0e249dbc127ed", size = 5267417, upload_time = "2025-08-22T10:34:02.719Z" }, - { url = "https://files.pythonhosted.org/packages/f2/43/c1cb2a7c67226266c463ef8a53b82d42607228beb763b5fbf4867e88a21f/lxml-6.0.1-cp313-cp313-win32.whl", hash = "sha256:01dab65641201e00c69338c9c2b8a0f2f484b6b3a22d10779bb417599fae32b5", size = 3610051, upload_time = "2025-08-22T10:34:04.553Z" }, - { url = "https://files.pythonhosted.org/packages/34/96/6a6c3b8aa480639c1a0b9b6faf2a63fb73ab79ffcd2a91cf28745faa22de/lxml-6.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:bdf8f7c8502552d7bff9e4c98971910a0a59f60f88b5048f608d0a1a75e94d1c", size = 4009325, upload_time = "2025-08-22T10:34:06.24Z" }, - { url = "https://files.pythonhosted.org/packages/8c/66/622e8515121e1fd773e3738dae71b8df14b12006d9fb554ce90886689fd0/lxml-6.0.1-cp313-cp313-win_arm64.whl", hash = "sha256:a6aeca75959426b9fd8d4782c28723ba224fe07cfa9f26a141004210528dcbe2", size = 3670443, upload_time = "2025-08-22T10:34:07.974Z" }, - { url = "https://files.pythonhosted.org/packages/38/e3/b7eb612ce07abe766918a7e581ec6a0e5212352194001fd287c3ace945f0/lxml-6.0.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:29b0e849ec7030e3ecb6112564c9f7ad6881e3b2375dd4a0c486c5c1f3a33859", size = 8426160, upload_time = "2025-08-22T10:34:10.154Z" }, - { url = "https://files.pythonhosted.org/packages/35/8f/ab3639a33595cf284fe733c6526da2ca3afbc5fd7f244ae67f3303cec654/lxml-6.0.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:02a0f7e629f73cc0be598c8b0611bf28ec3b948c549578a26111b01307fd4051", size = 4589288, upload_time = "2025-08-22T10:34:12.972Z" }, - { url = "https://files.pythonhosted.org/packages/2c/65/819d54f2e94d5c4458c1db8c1ccac9d05230b27c1038937d3d788eb406f9/lxml-6.0.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:beab5e54de016e730875f612ba51e54c331e2fa6dc78ecf9a5415fc90d619348", size = 4964523, upload_time = "2025-08-22T10:34:15.474Z" }, - { url = "https://files.pythonhosted.org/packages/5b/4a/d4a74ce942e60025cdaa883c5a4478921a99ce8607fc3130f1e349a83b28/lxml-6.0.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:92a08aefecd19ecc4ebf053c27789dd92c87821df2583a4337131cf181a1dffa", size = 5101108, upload_time = "2025-08-22T10:34:17.348Z" }, - { url = "https://files.pythonhosted.org/packages/cb/48/67f15461884074edd58af17b1827b983644d1fae83b3d909e9045a08b61e/lxml-6.0.1-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:36c8fa7e177649470bc3dcf7eae6bee1e4984aaee496b9ccbf30e97ac4127fa2", size = 5053498, upload_time = "2025-08-22T10:34:19.232Z" }, - { url = "https://files.pythonhosted.org/packages/b6/d4/ec1bf1614828a5492f4af0b6a9ee2eb3e92440aea3ac4fa158e5228b772b/lxml-6.0.1-cp314-cp314-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:5d08e0f1af6916267bb7eff21c09fa105620f07712424aaae09e8cb5dd4164d1", size = 5351057, upload_time = "2025-08-22T10:34:21.143Z" }, - { url = "https://files.pythonhosted.org/packages/65/2b/c85929dacac08821f2100cea3eb258ce5c8804a4e32b774f50ebd7592850/lxml-6.0.1-cp314-cp314-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9705cdfc05142f8c38c97a61bd3a29581ceceb973a014e302ee4a73cc6632476", size = 5671579, upload_time = "2025-08-22T10:34:23.528Z" }, - { url = "https://files.pythonhosted.org/packages/d0/36/cf544d75c269b9aad16752fd9f02d8e171c5a493ca225cb46bb7ba72868c/lxml-6.0.1-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:74555e2da7c1636e30bff4e6e38d862a634cf020ffa591f1f63da96bf8b34772", size = 5250403, upload_time = "2025-08-22T10:34:25.642Z" }, - { url = "https://files.pythonhosted.org/packages/c2/e8/83dbc946ee598fd75fdeae6151a725ddeaab39bb321354a9468d4c9f44f3/lxml-6.0.1-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:e38b5f94c5a2a5dadaddd50084098dfd005e5a2a56cd200aaf5e0a20e8941782", size = 4696712, upload_time = "2025-08-22T10:34:27.753Z" }, - { url = "https://files.pythonhosted.org/packages/f4/72/889c633b47c06205743ba935f4d1f5aa4eb7f0325d701ed2b0540df1b004/lxml-6.0.1-cp314-cp314-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a5ec101a92ddacb4791977acfc86c1afd624c032974bfb6a21269d1083c9bc49", size = 5268177, upload_time = "2025-08-22T10:34:29.804Z" }, - { url = "https://files.pythonhosted.org/packages/b0/b6/f42a21a1428479b66ea0da7bd13e370436aecaff0cfe93270c7e165bd2a4/lxml-6.0.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:5c17e70c82fd777df586c12114bbe56e4e6f823a971814fd40dec9c0de518772", size = 5094648, upload_time = "2025-08-22T10:34:31.703Z" }, - { url = "https://files.pythonhosted.org/packages/51/b0/5f8c1e8890e2ee1c2053c2eadd1cb0e4b79e2304e2912385f6ca666f48b1/lxml-6.0.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:45fdd0415a0c3d91640b5d7a650a8f37410966a2e9afebb35979d06166fd010e", size = 4745220, upload_time = "2025-08-22T10:34:33.595Z" }, - { url = "https://files.pythonhosted.org/packages/eb/f9/820b5125660dae489ca3a21a36d9da2e75dd6b5ffe922088f94bbff3b8a0/lxml-6.0.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:d417eba28981e720a14fcb98f95e44e7a772fe25982e584db38e5d3b6ee02e79", size = 5692913, upload_time = "2025-08-22T10:34:35.482Z" }, - { url = "https://files.pythonhosted.org/packages/23/8e/a557fae9eec236618aecf9ff35fec18df41b6556d825f3ad6017d9f6e878/lxml-6.0.1-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:8e5d116b9e59be7934febb12c41cce2038491ec8fdb743aeacaaf36d6e7597e4", size = 5259816, upload_time = "2025-08-22T10:34:37.482Z" }, - { url = "https://files.pythonhosted.org/packages/fa/fd/b266cfaab81d93a539040be699b5854dd24c84e523a1711ee5f615aa7000/lxml-6.0.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c238f0d0d40fdcb695c439fe5787fa69d40f45789326b3bb6ef0d61c4b588d6e", size = 5276162, upload_time = "2025-08-22T10:34:39.507Z" }, - { url = "https://files.pythonhosted.org/packages/25/6c/6f9610fbf1de002048e80585ea4719591921a0316a8565968737d9f125ca/lxml-6.0.1-cp314-cp314-win32.whl", hash = "sha256:537b6cf1c5ab88cfd159195d412edb3e434fee880f206cbe68dff9c40e17a68a", size = 3669595, upload_time = "2025-08-22T10:34:41.783Z" }, - { url = "https://files.pythonhosted.org/packages/72/a5/506775e3988677db24dc75a7b03e04038e0b3d114ccd4bccea4ce0116c15/lxml-6.0.1-cp314-cp314-win_amd64.whl", hash = "sha256:911d0a2bb3ef3df55b3d97ab325a9ca7e438d5112c102b8495321105d25a441b", size = 4079818, upload_time = "2025-08-22T10:34:44.04Z" }, - { url = "https://files.pythonhosted.org/packages/0a/44/9613f300201b8700215856e5edd056d4e58dd23368699196b58877d4408b/lxml-6.0.1-cp314-cp314-win_arm64.whl", hash = "sha256:2834377b0145a471a654d699bdb3a2155312de492142ef5a1d426af2c60a0a31", size = 3753901, upload_time = "2025-08-22T10:34:45.799Z" }, +version = "6.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/88/262177de60548e5a2bfc46ad28232c9e9cbde697bd94132aeb80364675cb/lxml-6.0.2.tar.gz", hash = "sha256:cd79f3367bd74b317dda655dc8fcfa304d9eb6e4fb06b7168c5cf27f96e0cd62", size = 4073426 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f3/c8/8ff2bc6b920c84355146cd1ab7d181bc543b89241cfb1ebee824a7c81457/lxml-6.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:a59f5448ba2ceccd06995c95ea59a7674a10de0810f2ce90c9006f3cbc044456", size = 8661887 }, + { url = "https://files.pythonhosted.org/packages/37/6f/9aae1008083bb501ef63284220ce81638332f9ccbfa53765b2b7502203cf/lxml-6.0.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e8113639f3296706fbac34a30813929e29247718e88173ad849f57ca59754924", size = 4667818 }, + { url = "https://files.pythonhosted.org/packages/f1/ca/31fb37f99f37f1536c133476674c10b577e409c0a624384147653e38baf2/lxml-6.0.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:a8bef9b9825fa8bc816a6e641bb67219489229ebc648be422af695f6e7a4fa7f", size = 4950807 }, + { url = "https://files.pythonhosted.org/packages/da/87/f6cb9442e4bada8aab5ae7e1046264f62fdbeaa6e3f6211b93f4c0dd97f1/lxml-6.0.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:65ea18d710fd14e0186c2f973dc60bb52039a275f82d3c44a0e42b43440ea534", size = 5109179 }, + { url = "https://files.pythonhosted.org/packages/c8/20/a7760713e65888db79bbae4f6146a6ae5c04e4a204a3c48896c408cd6ed2/lxml-6.0.2-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c371aa98126a0d4c739ca93ceffa0fd7a5d732e3ac66a46e74339acd4d334564", size = 5023044 }, + { url = "https://files.pythonhosted.org/packages/a2/b0/7e64e0460fcb36471899f75831509098f3fd7cd02a3833ac517433cb4f8f/lxml-6.0.2-cp312-cp312-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:700efd30c0fa1a3581d80a748157397559396090a51d306ea59a70020223d16f", size = 5359685 }, + { url = "https://files.pythonhosted.org/packages/b9/e1/e5df362e9ca4e2f48ed6411bd4b3a0ae737cc842e96877f5bf9428055ab4/lxml-6.0.2-cp312-cp312-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c33e66d44fe60e72397b487ee92e01da0d09ba2d66df8eae42d77b6d06e5eba0", size = 5654127 }, + { url = "https://files.pythonhosted.org/packages/c6/d1/232b3309a02d60f11e71857778bfcd4acbdb86c07db8260caf7d008b08f8/lxml-6.0.2-cp312-cp312-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:90a345bbeaf9d0587a3aaffb7006aa39ccb6ff0e96a57286c0cb2fd1520ea192", size = 5253958 }, + { url = "https://files.pythonhosted.org/packages/35/35/d955a070994725c4f7d80583a96cab9c107c57a125b20bb5f708fe941011/lxml-6.0.2-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:064fdadaf7a21af3ed1dcaa106b854077fbeada827c18f72aec9346847cd65d0", size = 4711541 }, + { url = "https://files.pythonhosted.org/packages/1e/be/667d17363b38a78c4bd63cfd4b4632029fd68d2c2dc81f25ce9eb5224dd5/lxml-6.0.2-cp312-cp312-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fbc74f42c3525ac4ffa4b89cbdd00057b6196bcefe8bce794abd42d33a018092", size = 5267426 }, + { url = "https://files.pythonhosted.org/packages/ea/47/62c70aa4a1c26569bc958c9ca86af2bb4e1f614e8c04fb2989833874f7ae/lxml-6.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6ddff43f702905a4e32bc24f3f2e2edfe0f8fde3277d481bffb709a4cced7a1f", size = 5064917 }, + { url = "https://files.pythonhosted.org/packages/bd/55/6ceddaca353ebd0f1908ef712c597f8570cc9c58130dbb89903198e441fd/lxml-6.0.2-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:6da5185951d72e6f5352166e3da7b0dc27aa70bd1090b0eb3f7f7212b53f1bb8", size = 4788795 }, + { url = "https://files.pythonhosted.org/packages/cf/e8/fd63e15da5e3fd4c2146f8bbb3c14e94ab850589beab88e547b2dbce22e1/lxml-6.0.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:57a86e1ebb4020a38d295c04fc79603c7899e0df71588043eb218722dabc087f", size = 5676759 }, + { url = "https://files.pythonhosted.org/packages/76/47/b3ec58dc5c374697f5ba37412cd2728f427d056315d124dd4b61da381877/lxml-6.0.2-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:2047d8234fe735ab77802ce5f2297e410ff40f5238aec569ad7c8e163d7b19a6", size = 5255666 }, + { url = "https://files.pythonhosted.org/packages/19/93/03ba725df4c3d72afd9596eef4a37a837ce8e4806010569bedfcd2cb68fd/lxml-6.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6f91fd2b2ea15a6800c8e24418c0775a1694eefc011392da73bc6cef2623b322", size = 5277989 }, + { url = "https://files.pythonhosted.org/packages/c6/80/c06de80bfce881d0ad738576f243911fccf992687ae09fd80b734712b39c/lxml-6.0.2-cp312-cp312-win32.whl", hash = "sha256:3ae2ce7d6fedfb3414a2b6c5e20b249c4c607f72cb8d2bb7cc9c6ec7c6f4e849", size = 3611456 }, + { url = "https://files.pythonhosted.org/packages/f7/d7/0cdfb6c3e30893463fb3d1e52bc5f5f99684a03c29a0b6b605cfae879cd5/lxml-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:72c87e5ee4e58a8354fb9c7c84cbf95a1c8236c127a5d1b7683f04bed8361e1f", size = 4011793 }, + { url = "https://files.pythonhosted.org/packages/ea/7b/93c73c67db235931527301ed3785f849c78991e2e34f3fd9a6663ffda4c5/lxml-6.0.2-cp312-cp312-win_arm64.whl", hash = "sha256:61cb10eeb95570153e0c0e554f58df92ecf5109f75eacad4a95baa709e26c3d6", size = 3672836 }, + { url = "https://files.pythonhosted.org/packages/53/fd/4e8f0540608977aea078bf6d79f128e0e2c2bba8af1acf775c30baa70460/lxml-6.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:9b33d21594afab46f37ae58dfadd06636f154923c4e8a4d754b0127554eb2e77", size = 8648494 }, + { url = "https://files.pythonhosted.org/packages/5d/f4/2a94a3d3dfd6c6b433501b8d470a1960a20ecce93245cf2db1706adf6c19/lxml-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:6c8963287d7a4c5c9a432ff487c52e9c5618667179c18a204bdedb27310f022f", size = 4661146 }, + { url = "https://files.pythonhosted.org/packages/25/2e/4efa677fa6b322013035d38016f6ae859d06cac67437ca7dc708a6af7028/lxml-6.0.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1941354d92699fb5ffe6ed7b32f9649e43c2feb4b97205f75866f7d21aa91452", size = 4946932 }, + { url = "https://files.pythonhosted.org/packages/ce/0f/526e78a6d38d109fdbaa5049c62e1d32fdd70c75fb61c4eadf3045d3d124/lxml-6.0.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bb2f6ca0ae2d983ded09357b84af659c954722bbf04dea98030064996d156048", size = 5100060 }, + { url = "https://files.pythonhosted.org/packages/81/76/99de58d81fa702cc0ea7edae4f4640416c2062813a00ff24bd70ac1d9c9b/lxml-6.0.2-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eb2a12d704f180a902d7fa778c6d71f36ceb7b0d317f34cdc76a5d05aa1dd1df", size = 5019000 }, + { url = "https://files.pythonhosted.org/packages/b5/35/9e57d25482bc9a9882cb0037fdb9cc18f4b79d85df94fa9d2a89562f1d25/lxml-6.0.2-cp313-cp313-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:6ec0e3f745021bfed19c456647f0298d60a24c9ff86d9d051f52b509663feeb1", size = 5348496 }, + { url = "https://files.pythonhosted.org/packages/a6/8e/cb99bd0b83ccc3e8f0f528e9aa1f7a9965dfec08c617070c5db8d63a87ce/lxml-6.0.2-cp313-cp313-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:846ae9a12d54e368933b9759052d6206a9e8b250291109c48e350c1f1f49d916", size = 5643779 }, + { url = "https://files.pythonhosted.org/packages/d0/34/9e591954939276bb679b73773836c6684c22e56d05980e31d52a9a8deb18/lxml-6.0.2-cp313-cp313-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ef9266d2aa545d7374938fb5c484531ef5a2ec7f2d573e62f8ce722c735685fd", size = 5244072 }, + { url = "https://files.pythonhosted.org/packages/8d/27/b29ff065f9aaca443ee377aff699714fcbffb371b4fce5ac4ca759e436d5/lxml-6.0.2-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:4077b7c79f31755df33b795dc12119cb557a0106bfdab0d2c2d97bd3cf3dffa6", size = 4718675 }, + { url = "https://files.pythonhosted.org/packages/2b/9f/f756f9c2cd27caa1a6ef8c32ae47aadea697f5c2c6d07b0dae133c244fbe/lxml-6.0.2-cp313-cp313-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a7c5d5e5f1081955358533be077166ee97ed2571d6a66bdba6ec2f609a715d1a", size = 5255171 }, + { url = "https://files.pythonhosted.org/packages/61/46/bb85ea42d2cb1bd8395484fd72f38e3389611aa496ac7772da9205bbda0e/lxml-6.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:8f8d0cbd0674ee89863a523e6994ac25fd5be9c8486acfc3e5ccea679bad2679", size = 5057175 }, + { url = "https://files.pythonhosted.org/packages/95/0c/443fc476dcc8e41577f0af70458c50fe299a97bb6b7505bb1ae09aa7f9ac/lxml-6.0.2-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:2cbcbf6d6e924c28f04a43f3b6f6e272312a090f269eff68a2982e13e5d57659", size = 4785688 }, + { url = "https://files.pythonhosted.org/packages/48/78/6ef0b359d45bb9697bc5a626e1992fa5d27aa3f8004b137b2314793b50a0/lxml-6.0.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:dfb874cfa53340009af6bdd7e54ebc0d21012a60a4e65d927c2e477112e63484", size = 5660655 }, + { url = "https://files.pythonhosted.org/packages/ff/ea/e1d33808f386bc1339d08c0dcada6e4712d4ed8e93fcad5f057070b7988a/lxml-6.0.2-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:fb8dae0b6b8b7f9e96c26fdd8121522ce5de9bb5538010870bd538683d30e9a2", size = 5247695 }, + { url = "https://files.pythonhosted.org/packages/4f/47/eba75dfd8183673725255247a603b4ad606f4ae657b60c6c145b381697da/lxml-6.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:358d9adae670b63e95bc59747c72f4dc97c9ec58881d4627fe0120da0f90d314", size = 5269841 }, + { url = "https://files.pythonhosted.org/packages/76/04/5c5e2b8577bc936e219becb2e98cdb1aca14a4921a12995b9d0c523502ae/lxml-6.0.2-cp313-cp313-win32.whl", hash = "sha256:e8cd2415f372e7e5a789d743d133ae474290a90b9023197fd78f32e2dc6873e2", size = 3610700 }, + { url = "https://files.pythonhosted.org/packages/fe/0a/4643ccc6bb8b143e9f9640aa54e38255f9d3b45feb2cbe7ae2ca47e8782e/lxml-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:b30d46379644fbfc3ab81f8f82ae4de55179414651f110a1514f0b1f8f6cb2d7", size = 4010347 }, + { url = "https://files.pythonhosted.org/packages/31/ef/dcf1d29c3f530577f61e5fe2f1bd72929acf779953668a8a47a479ae6f26/lxml-6.0.2-cp313-cp313-win_arm64.whl", hash = "sha256:13dcecc9946dca97b11b7c40d29fba63b55ab4170d3c0cf8c0c164343b9bfdcf", size = 3671248 }, + { url = "https://files.pythonhosted.org/packages/03/15/d4a377b385ab693ce97b472fe0c77c2b16ec79590e688b3ccc71fba19884/lxml-6.0.2-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:b0c732aa23de8f8aec23f4b580d1e52905ef468afb4abeafd3fec77042abb6fe", size = 8659801 }, + { url = "https://files.pythonhosted.org/packages/c8/e8/c128e37589463668794d503afaeb003987373c5f94d667124ffd8078bbd9/lxml-6.0.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:4468e3b83e10e0317a89a33d28f7aeba1caa4d1a6fd457d115dd4ffe90c5931d", size = 4659403 }, + { url = "https://files.pythonhosted.org/packages/00/ce/74903904339decdf7da7847bb5741fc98a5451b42fc419a86c0c13d26fe2/lxml-6.0.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:abd44571493973bad4598a3be7e1d807ed45aa2adaf7ab92ab7c62609569b17d", size = 4966974 }, + { url = "https://files.pythonhosted.org/packages/1f/d3/131dec79ce61c5567fecf82515bd9bc36395df42501b50f7f7f3bd065df0/lxml-6.0.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:370cd78d5855cfbffd57c422851f7d3864e6ae72d0da615fca4dad8c45d375a5", size = 5102953 }, + { url = "https://files.pythonhosted.org/packages/3a/ea/a43ba9bb750d4ffdd885f2cd333572f5bb900cd2408b67fdda07e85978a0/lxml-6.0.2-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:901e3b4219fa04ef766885fb40fa516a71662a4c61b80c94d25336b4934b71c0", size = 5055054 }, + { url = "https://files.pythonhosted.org/packages/60/23/6885b451636ae286c34628f70a7ed1fcc759f8d9ad382d132e1c8d3d9bfd/lxml-6.0.2-cp314-cp314-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:a4bf42d2e4cf52c28cc1812d62426b9503cdb0c87a6de81442626aa7d69707ba", size = 5352421 }, + { url = "https://files.pythonhosted.org/packages/48/5b/fc2ddfc94ddbe3eebb8e9af6e3fd65e2feba4967f6a4e9683875c394c2d8/lxml-6.0.2-cp314-cp314-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b2c7fdaa4d7c3d886a42534adec7cfac73860b89b4e5298752f60aa5984641a0", size = 5673684 }, + { url = "https://files.pythonhosted.org/packages/29/9c/47293c58cc91769130fbf85531280e8cc7868f7fbb6d92f4670071b9cb3e/lxml-6.0.2-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:98a5e1660dc7de2200b00d53fa00bcd3c35a3608c305d45a7bbcaf29fa16e83d", size = 5252463 }, + { url = "https://files.pythonhosted.org/packages/9b/da/ba6eceb830c762b48e711ded880d7e3e89fc6c7323e587c36540b6b23c6b/lxml-6.0.2-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:dc051506c30b609238d79eda75ee9cab3e520570ec8219844a72a46020901e37", size = 4698437 }, + { url = "https://files.pythonhosted.org/packages/a5/24/7be3f82cb7990b89118d944b619e53c656c97dc89c28cfb143fdb7cd6f4d/lxml-6.0.2-cp314-cp314-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:8799481bbdd212470d17513a54d568f44416db01250f49449647b5ab5b5dccb9", size = 5269890 }, + { url = "https://files.pythonhosted.org/packages/1b/bd/dcfb9ea1e16c665efd7538fc5d5c34071276ce9220e234217682e7d2c4a5/lxml-6.0.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:9261bb77c2dab42f3ecd9103951aeca2c40277701eb7e912c545c1b16e0e4917", size = 5097185 }, + { url = "https://files.pythonhosted.org/packages/21/04/a60b0ff9314736316f28316b694bccbbabe100f8483ad83852d77fc7468e/lxml-6.0.2-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:65ac4a01aba353cfa6d5725b95d7aed6356ddc0a3cd734de00124d285b04b64f", size = 4745895 }, + { url = "https://files.pythonhosted.org/packages/d6/bd/7d54bd1846e5a310d9c715921c5faa71cf5c0853372adf78aee70c8d7aa2/lxml-6.0.2-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:b22a07cbb82fea98f8a2fd814f3d1811ff9ed76d0fc6abc84eb21527596e7cc8", size = 5695246 }, + { url = "https://files.pythonhosted.org/packages/fd/32/5643d6ab947bc371da21323acb2a6e603cedbe71cb4c99c8254289ab6f4e/lxml-6.0.2-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:d759cdd7f3e055d6bc8d9bec3ad905227b2e4c785dc16c372eb5b5e83123f48a", size = 5260797 }, + { url = "https://files.pythonhosted.org/packages/33/da/34c1ec4cff1eea7d0b4cd44af8411806ed943141804ac9c5d565302afb78/lxml-6.0.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:945da35a48d193d27c188037a05fec5492937f66fb1958c24fc761fb9d40d43c", size = 5277404 }, + { url = "https://files.pythonhosted.org/packages/82/57/4eca3e31e54dc89e2c3507e1cd411074a17565fa5ffc437c4ae0a00d439e/lxml-6.0.2-cp314-cp314-win32.whl", hash = "sha256:be3aaa60da67e6153eb15715cc2e19091af5dc75faef8b8a585aea372507384b", size = 3670072 }, + { url = "https://files.pythonhosted.org/packages/e3/e0/c96cf13eccd20c9421ba910304dae0f619724dcf1702864fd59dd386404d/lxml-6.0.2-cp314-cp314-win_amd64.whl", hash = "sha256:fa25afbadead523f7001caf0c2382afd272c315a033a7b06336da2637d92d6ed", size = 4080617 }, + { url = "https://files.pythonhosted.org/packages/d5/5d/b3f03e22b3d38d6f188ef044900a9b29b2fe0aebb94625ce9fe244011d34/lxml-6.0.2-cp314-cp314-win_arm64.whl", hash = "sha256:063eccf89df5b24e361b123e257e437f9e9878f425ee9aae3144c77faf6da6d8", size = 3754930 }, + { url = "https://files.pythonhosted.org/packages/5e/5c/42c2c4c03554580708fc738d13414801f340c04c3eff90d8d2d227145275/lxml-6.0.2-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:6162a86d86893d63084faaf4ff937b3daea233e3682fb4474db07395794fa80d", size = 8910380 }, + { url = "https://files.pythonhosted.org/packages/bf/4f/12df843e3e10d18d468a7557058f8d3733e8b6e12401f30b1ef29360740f/lxml-6.0.2-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:414aaa94e974e23a3e92e7ca5b97d10c0cf37b6481f50911032c69eeb3991bba", size = 4775632 }, + { url = "https://files.pythonhosted.org/packages/e4/0c/9dc31e6c2d0d418483cbcb469d1f5a582a1cd00a1f4081953d44051f3c50/lxml-6.0.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:48461bd21625458dd01e14e2c38dd0aea69addc3c4f960c30d9f59d7f93be601", size = 4975171 }, + { url = "https://files.pythonhosted.org/packages/e7/2b/9b870c6ca24c841bdd887504808f0417aa9d8d564114689266f19ddf29c8/lxml-6.0.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:25fcc59afc57d527cfc78a58f40ab4c9b8fd096a9a3f964d2781ffb6eb33f4ed", size = 5110109 }, + { url = "https://files.pythonhosted.org/packages/bf/0c/4f5f2a4dd319a178912751564471355d9019e220c20d7db3fb8307ed8582/lxml-6.0.2-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5179c60288204e6ddde3f774a93350177e08876eaf3ab78aa3a3649d43eb7d37", size = 5041061 }, + { url = "https://files.pythonhosted.org/packages/12/64/554eed290365267671fe001a20d72d14f468ae4e6acef1e179b039436967/lxml-6.0.2-cp314-cp314t-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:967aab75434de148ec80597b75062d8123cadf2943fb4281f385141e18b21338", size = 5306233 }, + { url = "https://files.pythonhosted.org/packages/7a/31/1d748aa275e71802ad9722df32a7a35034246b42c0ecdd8235412c3396ef/lxml-6.0.2-cp314-cp314t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d100fcc8930d697c6561156c6810ab4a508fb264c8b6779e6e61e2ed5e7558f9", size = 5604739 }, + { url = "https://files.pythonhosted.org/packages/8f/41/2c11916bcac09ed561adccacceaedd2bf0e0b25b297ea92aab99fd03d0fa/lxml-6.0.2-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ca59e7e13e5981175b8b3e4ab84d7da57993eeff53c07764dcebda0d0e64ecd", size = 5225119 }, + { url = "https://files.pythonhosted.org/packages/99/05/4e5c2873d8f17aa018e6afde417c80cc5d0c33be4854cce3ef5670c49367/lxml-6.0.2-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:957448ac63a42e2e49531b9d6c0fa449a1970dbc32467aaad46f11545be9af1d", size = 4633665 }, + { url = "https://files.pythonhosted.org/packages/0f/c9/dcc2da1bebd6275cdc723b515f93edf548b82f36a5458cca3578bc899332/lxml-6.0.2-cp314-cp314t-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b7fc49c37f1786284b12af63152fe1d0990722497e2d5817acfe7a877522f9a9", size = 5234997 }, + { url = "https://files.pythonhosted.org/packages/9c/e2/5172e4e7468afca64a37b81dba152fc5d90e30f9c83c7c3213d6a02a5ce4/lxml-6.0.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e19e0643cc936a22e837f79d01a550678da8377d7d801a14487c10c34ee49c7e", size = 5090957 }, + { url = "https://files.pythonhosted.org/packages/a5/b3/15461fd3e5cd4ddcb7938b87fc20b14ab113b92312fc97afe65cd7c85de1/lxml-6.0.2-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:1db01e5cf14345628e0cbe71067204db658e2fb8e51e7f33631f5f4735fefd8d", size = 4764372 }, + { url = "https://files.pythonhosted.org/packages/05/33/f310b987c8bf9e61c4dd8e8035c416bd3230098f5e3cfa69fc4232de7059/lxml-6.0.2-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:875c6b5ab39ad5291588aed6925fac99d0097af0dd62f33c7b43736043d4a2ec", size = 5634653 }, + { url = "https://files.pythonhosted.org/packages/70/ff/51c80e75e0bc9382158133bdcf4e339b5886c6ee2418b5199b3f1a61ed6d/lxml-6.0.2-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:cdcbed9ad19da81c480dfd6dd161886db6096083c9938ead313d94b30aadf272", size = 5233795 }, + { url = "https://files.pythonhosted.org/packages/56/4d/4856e897df0d588789dd844dbed9d91782c4ef0b327f96ce53c807e13128/lxml-6.0.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:80dadc234ebc532e09be1975ff538d154a7fa61ea5031c03d25178855544728f", size = 5257023 }, + { url = "https://files.pythonhosted.org/packages/0f/85/86766dfebfa87bea0ab78e9ff7a4b4b45225df4b4d3b8cc3c03c5cd68464/lxml-6.0.2-cp314-cp314t-win32.whl", hash = "sha256:da08e7bb297b04e893d91087df19638dc7a6bb858a954b0cc2b9f5053c922312", size = 3911420 }, + { url = "https://files.pythonhosted.org/packages/fe/1a/b248b355834c8e32614650b8008c69ffeb0ceb149c793961dd8c0b991bb3/lxml-6.0.2-cp314-cp314t-win_amd64.whl", hash = "sha256:252a22982dca42f6155125ac76d3432e548a7625d56f5a273ee78a5057216eca", size = 4406837 }, + { url = "https://files.pythonhosted.org/packages/92/aa/df863bcc39c5e0946263454aba394de8a9084dbaff8ad143846b0d844739/lxml-6.0.2-cp314-cp314t-win_arm64.whl", hash = "sha256:bb4c1847b303835d89d785a18801a883436cdfd5dc3d62947f9c49e24f0f5a2c", size = 3822205 }, ] [[package]] name = "markdown" -version = "3.8.2" +version = "3.9" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d7/c2/4ab49206c17f75cb08d6311171f2d65798988db4360c4d1485bd0eedd67c/markdown-3.8.2.tar.gz", hash = "sha256:247b9a70dd12e27f67431ce62523e675b866d254f900c4fe75ce3dda62237c45", size = 362071, upload_time = "2025-06-19T17:12:44.483Z" } +sdist = { url = "https://files.pythonhosted.org/packages/8d/37/02347f6d6d8279247a5837082ebc26fc0d5aaeaf75aa013fcbb433c777ab/markdown-3.9.tar.gz", hash = "sha256:d2900fe1782bd33bdbbd56859defef70c2e78fc46668f8eb9df3128138f2cb6a", size = 364585 } wheels = [ - { url = "https://files.pythonhosted.org/packages/96/2b/34cc11786bc00d0f04d0f5fdc3a2b1ae0b6239eef72d3d345805f9ad92a1/markdown-3.8.2-py3-none-any.whl", hash = "sha256:5c83764dbd4e00bdd94d85a19b8d55ccca20fe35b2e678a1422b380324dd5f24", size = 106827, upload_time = "2025-06-19T17:12:42.994Z" }, + { url = "https://files.pythonhosted.org/packages/70/ae/44c4a6a4cbb496d93c6257954260fe3a6e91b7bed2240e5dad2a717f5111/markdown-3.9-py3-none-any.whl", hash = "sha256:9f4d91ed810864ea88a6f32c07ba8bee1346c0cc1f6b1f9f6c822f2a9667d280", size = 107441 }, ] [[package]] name = "markdown-it-py" -version = "3.0.0" +version = "4.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "mdurl" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596, upload_time = "2023-06-03T06:41:14.443Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5b/f5/4ec618ed16cc4f8fb3b701563655a69816155e79e24a17b651541804721d/markdown_it_py-4.0.0.tar.gz", hash = "sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3", size = 73070 } wheels = [ - { url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528, upload_time = "2023-06-03T06:41:11.019Z" }, + { url = "https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl", hash = "sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147", size = 87321 }, ] [[package]] name = "marko" -version = "2.1.4" +version = "2.2.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/72/dc/c8cadbd83de1b38d95a48568b445a5553005ebdd32e00a333ca940113db4/marko-2.1.4.tar.gz", hash = "sha256:dd7d66f3706732bf8f994790e674649a4fd0a6c67f16b80246f30de8e16a1eac", size = 142795, upload_time = "2025-06-13T03:25:50.857Z" } +sdist = { url = "https://files.pythonhosted.org/packages/9c/6a/32545d2379822fb9a8843f01150011402888492541977a1193fe8d695df0/marko-2.2.0.tar.gz", hash = "sha256:213c146ba197c1d6bcb06ae3658b7d87e45f6def35c09905b86aa6bb1984eba6", size = 143406 } wheels = [ - { url = "https://files.pythonhosted.org/packages/c3/66/49e3691d14898fb6e34ccb337c7677dfb7e18269ed170f12e4b85315eae6/marko-2.1.4-py3-none-any.whl", hash = "sha256:81c2b9f570ca485bc356678d9ba1a1b3eb78b4a315d01f3ded25442fdc796990", size = 42186, upload_time = "2025-06-13T03:25:49.858Z" }, + { url = "https://files.pythonhosted.org/packages/94/b1/87f54d8842b2aafdbb162301ac730587e04f30ad0fe9aabb12fa29f7a6f7/marko-2.2.0-py3-none-any.whl", hash = "sha256:d84f867429142627e896322c8ef167664f3a6cd6ea5a2b70c6af055998041bb7", size = 42683 }, ] [[package]] name = "markupsafe" version = "3.0.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537, upload_time = "2024-10-18T15:21:54.129Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/22/09/d1f21434c97fc42f09d290cbb6350d44eb12f09cc62c9476effdb33a18aa/MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", size = 14274, upload_time = "2024-10-18T15:21:13.777Z" }, - { url = "https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", size = 12348, upload_time = "2024-10-18T15:21:14.822Z" }, - { url = "https://files.pythonhosted.org/packages/e0/25/dd5c0f6ac1311e9b40f4af06c78efde0f3b5cbf02502f8ef9501294c425b/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", size = 24149, upload_time = "2024-10-18T15:21:15.642Z" }, - { url = "https://files.pythonhosted.org/packages/f3/f0/89e7aadfb3749d0f52234a0c8c7867877876e0a20b60e2188e9850794c17/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", size = 23118, upload_time = "2024-10-18T15:21:17.133Z" }, - { url = "https://files.pythonhosted.org/packages/d5/da/f2eeb64c723f5e3777bc081da884b414671982008c47dcc1873d81f625b6/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", size = 22993, upload_time = "2024-10-18T15:21:18.064Z" }, - { url = "https://files.pythonhosted.org/packages/da/0e/1f32af846df486dce7c227fe0f2398dc7e2e51d4a370508281f3c1c5cddc/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", size = 24178, upload_time = "2024-10-18T15:21:18.859Z" }, - { url = "https://files.pythonhosted.org/packages/c4/f6/bb3ca0532de8086cbff5f06d137064c8410d10779c4c127e0e47d17c0b71/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", size = 23319, upload_time = "2024-10-18T15:21:19.671Z" }, - { url = "https://files.pythonhosted.org/packages/a2/82/8be4c96ffee03c5b4a034e60a31294daf481e12c7c43ab8e34a1453ee48b/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", size = 23352, upload_time = "2024-10-18T15:21:20.971Z" }, - { url = "https://files.pythonhosted.org/packages/51/ae/97827349d3fcffee7e184bdf7f41cd6b88d9919c80f0263ba7acd1bbcb18/MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", size = 15097, upload_time = "2024-10-18T15:21:22.646Z" }, - { url = "https://files.pythonhosted.org/packages/c1/80/a61f99dc3a936413c3ee4e1eecac96c0da5ed07ad56fd975f1a9da5bc630/MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", size = 15601, upload_time = "2024-10-18T15:21:23.499Z" }, - { url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274, upload_time = "2024-10-18T15:21:24.577Z" }, - { url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352, upload_time = "2024-10-18T15:21:25.382Z" }, - { url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122, upload_time = "2024-10-18T15:21:26.199Z" }, - { url = "https://files.pythonhosted.org/packages/0c/91/96cf928db8236f1bfab6ce15ad070dfdd02ed88261c2afafd4b43575e9e9/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", size = 23085, upload_time = "2024-10-18T15:21:27.029Z" }, - { url = "https://files.pythonhosted.org/packages/c2/cf/c9d56af24d56ea04daae7ac0940232d31d5a8354f2b457c6d856b2057d69/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", size = 22978, upload_time = "2024-10-18T15:21:27.846Z" }, - { url = "https://files.pythonhosted.org/packages/2a/9f/8619835cd6a711d6272d62abb78c033bda638fdc54c4e7f4272cf1c0962b/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", size = 24208, upload_time = "2024-10-18T15:21:28.744Z" }, - { url = "https://files.pythonhosted.org/packages/f9/bf/176950a1792b2cd2102b8ffeb5133e1ed984547b75db47c25a67d3359f77/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", size = 23357, upload_time = "2024-10-18T15:21:29.545Z" }, - { url = "https://files.pythonhosted.org/packages/ce/4f/9a02c1d335caabe5c4efb90e1b6e8ee944aa245c1aaaab8e8a618987d816/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", size = 23344, upload_time = "2024-10-18T15:21:30.366Z" }, - { url = "https://files.pythonhosted.org/packages/ee/55/c271b57db36f748f0e04a759ace9f8f759ccf22b4960c270c78a394f58be/MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", size = 15101, upload_time = "2024-10-18T15:21:31.207Z" }, - { url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", size = 15603, upload_time = "2024-10-18T15:21:32.032Z" }, - { url = "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", size = 14510, upload_time = "2024-10-18T15:21:33.625Z" }, - { url = "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", size = 12486, upload_time = "2024-10-18T15:21:34.611Z" }, - { url = "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", size = 25480, upload_time = "2024-10-18T15:21:35.398Z" }, - { url = "https://files.pythonhosted.org/packages/0c/e3/90e9651924c430b885468b56b3d597cabf6d72be4b24a0acd1fa0e12af67/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", size = 23914, upload_time = "2024-10-18T15:21:36.231Z" }, - { url = "https://files.pythonhosted.org/packages/66/8c/6c7cf61f95d63bb866db39085150df1f2a5bd3335298f14a66b48e92659c/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", size = 23796, upload_time = "2024-10-18T15:21:37.073Z" }, - { url = "https://files.pythonhosted.org/packages/bb/35/cbe9238ec3f47ac9a7c8b3df7a808e7cb50fe149dc7039f5f454b3fba218/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", size = 25473, upload_time = "2024-10-18T15:21:37.932Z" }, - { url = "https://files.pythonhosted.org/packages/e6/32/7621a4382488aa283cc05e8984a9c219abad3bca087be9ec77e89939ded9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", size = 24114, upload_time = "2024-10-18T15:21:39.799Z" }, - { url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098, upload_time = "2024-10-18T15:21:40.813Z" }, - { url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208, upload_time = "2024-10-18T15:21:41.814Z" }, - { url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739, upload_time = "2024-10-18T15:21:42.784Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/09/d1f21434c97fc42f09d290cbb6350d44eb12f09cc62c9476effdb33a18aa/MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", size = 14274 }, + { url = "https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", size = 12348 }, + { url = "https://files.pythonhosted.org/packages/e0/25/dd5c0f6ac1311e9b40f4af06c78efde0f3b5cbf02502f8ef9501294c425b/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", size = 24149 }, + { url = "https://files.pythonhosted.org/packages/f3/f0/89e7aadfb3749d0f52234a0c8c7867877876e0a20b60e2188e9850794c17/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", size = 23118 }, + { url = "https://files.pythonhosted.org/packages/d5/da/f2eeb64c723f5e3777bc081da884b414671982008c47dcc1873d81f625b6/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", size = 22993 }, + { url = "https://files.pythonhosted.org/packages/da/0e/1f32af846df486dce7c227fe0f2398dc7e2e51d4a370508281f3c1c5cddc/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", size = 24178 }, + { url = "https://files.pythonhosted.org/packages/c4/f6/bb3ca0532de8086cbff5f06d137064c8410d10779c4c127e0e47d17c0b71/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", size = 23319 }, + { url = "https://files.pythonhosted.org/packages/a2/82/8be4c96ffee03c5b4a034e60a31294daf481e12c7c43ab8e34a1453ee48b/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", size = 23352 }, + { url = "https://files.pythonhosted.org/packages/51/ae/97827349d3fcffee7e184bdf7f41cd6b88d9919c80f0263ba7acd1bbcb18/MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", size = 15097 }, + { url = "https://files.pythonhosted.org/packages/c1/80/a61f99dc3a936413c3ee4e1eecac96c0da5ed07ad56fd975f1a9da5bc630/MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", size = 15601 }, + { url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274 }, + { url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352 }, + { url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122 }, + { url = "https://files.pythonhosted.org/packages/0c/91/96cf928db8236f1bfab6ce15ad070dfdd02ed88261c2afafd4b43575e9e9/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", size = 23085 }, + { url = "https://files.pythonhosted.org/packages/c2/cf/c9d56af24d56ea04daae7ac0940232d31d5a8354f2b457c6d856b2057d69/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", size = 22978 }, + { url = "https://files.pythonhosted.org/packages/2a/9f/8619835cd6a711d6272d62abb78c033bda638fdc54c4e7f4272cf1c0962b/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", size = 24208 }, + { url = "https://files.pythonhosted.org/packages/f9/bf/176950a1792b2cd2102b8ffeb5133e1ed984547b75db47c25a67d3359f77/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", size = 23357 }, + { url = "https://files.pythonhosted.org/packages/ce/4f/9a02c1d335caabe5c4efb90e1b6e8ee944aa245c1aaaab8e8a618987d816/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", size = 23344 }, + { url = "https://files.pythonhosted.org/packages/ee/55/c271b57db36f748f0e04a759ace9f8f759ccf22b4960c270c78a394f58be/MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", size = 15101 }, + { url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", size = 15603 }, + { url = "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", size = 14510 }, + { url = "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", size = 12486 }, + { url = "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", size = 25480 }, + { url = "https://files.pythonhosted.org/packages/0c/e3/90e9651924c430b885468b56b3d597cabf6d72be4b24a0acd1fa0e12af67/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", size = 23914 }, + { url = "https://files.pythonhosted.org/packages/66/8c/6c7cf61f95d63bb866db39085150df1f2a5bd3335298f14a66b48e92659c/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", size = 23796 }, + { url = "https://files.pythonhosted.org/packages/bb/35/cbe9238ec3f47ac9a7c8b3df7a808e7cb50fe149dc7039f5f454b3fba218/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", size = 25473 }, + { url = "https://files.pythonhosted.org/packages/e6/32/7621a4382488aa283cc05e8984a9c219abad3bca087be9ec77e89939ded9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", size = 24114 }, + { url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098 }, + { url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208 }, + { url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739 }, ] [[package]] @@ -1164,9 +1250,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/99/5b/a36a337438a14116b16480db471ad061c36c3694df7c2084a0da7ba538b7/matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90", size = 8159, upload_time = "2024-04-15T13:44:44.803Z" } +sdist = { url = "https://files.pythonhosted.org/packages/99/5b/a36a337438a14116b16480db471ad061c36c3694df7c2084a0da7ba538b7/matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90", size = 8159 } wheels = [ - { url = "https://files.pythonhosted.org/packages/8f/8e/9ad090d3553c280a8060fbf6e24dc1c0c29704ee7d1c372f0c174aa59285/matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca", size = 9899, upload_time = "2024-04-15T13:44:43.265Z" }, + { url = "https://files.pythonhosted.org/packages/8f/8e/9ad090d3553c280a8060fbf6e24dc1c0c29704ee7d1c372f0c174aa59285/matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca", size = 9899 }, ] [[package]] @@ -1176,36 +1262,36 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "markdown-it-py" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b2/fd/a756d36c0bfba5f6e39a1cdbdbfdd448dc02692467d83816dff4592a1ebc/mdit_py_plugins-0.5.0.tar.gz", hash = "sha256:f4918cb50119f50446560513a8e311d574ff6aaed72606ddae6d35716fe809c6", size = 44655, upload_time = "2025-08-11T07:25:49.083Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b2/fd/a756d36c0bfba5f6e39a1cdbdbfdd448dc02692467d83816dff4592a1ebc/mdit_py_plugins-0.5.0.tar.gz", hash = "sha256:f4918cb50119f50446560513a8e311d574ff6aaed72606ddae6d35716fe809c6", size = 44655 } wheels = [ - { url = "https://files.pythonhosted.org/packages/fb/86/dd6e5db36df29e76c7a7699123569a4a18c1623ce68d826ed96c62643cae/mdit_py_plugins-0.5.0-py3-none-any.whl", hash = "sha256:07a08422fc1936a5d26d146759e9155ea466e842f5ab2f7d2266dd084c8dab1f", size = 57205, upload_time = "2025-08-11T07:25:47.597Z" }, + { url = "https://files.pythonhosted.org/packages/fb/86/dd6e5db36df29e76c7a7699123569a4a18c1623ce68d826ed96c62643cae/mdit_py_plugins-0.5.0-py3-none-any.whl", hash = "sha256:07a08422fc1936a5d26d146759e9155ea466e842f5ab2f7d2266dd084c8dab1f", size = 57205 }, ] [[package]] name = "mdurl" version = "0.1.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload_time = "2022-08-14T12:40:10.846Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729 } wheels = [ - { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload_time = "2022-08-14T12:40:09.779Z" }, + { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979 }, ] [[package]] name = "mergedeep" version = "1.3.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/3a/41/580bb4006e3ed0361b8151a01d324fb03f420815446c7def45d02f74c270/mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8", size = 4661, upload_time = "2021-02-05T18:55:30.623Z" } +sdist = { url = "https://files.pythonhosted.org/packages/3a/41/580bb4006e3ed0361b8151a01d324fb03f420815446c7def45d02f74c270/mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8", size = 4661 } wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307", size = 6354, upload_time = "2021-02-05T18:55:29.583Z" }, + { url = "https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307", size = 6354 }, ] [[package]] name = "mistune" -version = "3.1.3" +version = "3.1.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c4/79/bda47f7dd7c3c55770478d6d02c9960c430b0cf1773b72366ff89126ea31/mistune-3.1.3.tar.gz", hash = "sha256:a7035c21782b2becb6be62f8f25d3df81ccb4d6fa477a6525b15af06539f02a0", size = 94347, upload_time = "2025-03-19T14:27:24.955Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/02/a7fb8b21d4d55ac93cdcde9d3638da5dd0ebdd3a4fed76c7725e10b81cbe/mistune-3.1.4.tar.gz", hash = "sha256:b5a7f801d389f724ec702840c11d8fc48f2b33519102fc7ee739e8177b672164", size = 94588 } wheels = [ - { url = "https://files.pythonhosted.org/packages/01/4d/23c4e4f09da849e127e9f123241946c23c1e30f45a88366879e064211815/mistune-3.1.3-py3-none-any.whl", hash = "sha256:1a32314113cff28aa6432e99e522677c8587fd83e3d51c29b82a52409c842bd9", size = 53410, upload_time = "2025-03-19T14:27:23.451Z" }, + { url = "https://files.pythonhosted.org/packages/7a/f0/8282d9641415e9e33df173516226b404d367a0fc55e1a60424a152913abc/mistune-3.1.4-py3-none-any.whl", hash = "sha256:93691da911e5d9d2e23bc54472892aff676df27a75274962ff9edc210364266d", size = 53481 }, ] [[package]] @@ -1227,9 +1313,9 @@ dependencies = [ { name = "pyyaml-env-tag" }, { name = "watchdog" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/bc/c6/bbd4f061bd16b378247f12953ffcb04786a618ce5e904b8c5a01a0309061/mkdocs-1.6.1.tar.gz", hash = "sha256:7b432f01d928c084353ab39c57282f29f92136665bdd6abf7c1ec8d822ef86f2", size = 3889159, upload_time = "2024-08-30T12:24:06.899Z" } +sdist = { url = "https://files.pythonhosted.org/packages/bc/c6/bbd4f061bd16b378247f12953ffcb04786a618ce5e904b8c5a01a0309061/mkdocs-1.6.1.tar.gz", hash = "sha256:7b432f01d928c084353ab39c57282f29f92136665bdd6abf7c1ec8d822ef86f2", size = 3889159 } wheels = [ - { url = "https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl", hash = "sha256:db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e", size = 3864451, upload_time = "2024-08-30T12:24:05.054Z" }, + { url = "https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl", hash = "sha256:db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e", size = 3864451 }, ] [[package]] @@ -1239,9 +1325,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "mkdocs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/26/7c/fea9d842705ca8c9e7dd21da2d0b7b61dbdd8b6e58ca3c7c85b5604914e9/mkdocs_argref_plugin-0.5.0.tar.gz", hash = "sha256:b2982f9670419911f671ddff3f773b27fdc9184762ecd1e00c42aaab3e905e70", size = 7012, upload_time = "2024-08-25T12:50:09.138Z" } +sdist = { url = "https://files.pythonhosted.org/packages/26/7c/fea9d842705ca8c9e7dd21da2d0b7b61dbdd8b6e58ca3c7c85b5604914e9/mkdocs_argref_plugin-0.5.0.tar.gz", hash = "sha256:b2982f9670419911f671ddff3f773b27fdc9184762ecd1e00c42aaab3e905e70", size = 7012 } wheels = [ - { url = "https://files.pythonhosted.org/packages/1e/eb/e7e7ea2f7e374e52fc8425d5cf67890be8278a6e620aa74775da2f1039f7/mkdocs_argref_plugin-0.5.0-py3-none-any.whl", hash = "sha256:6ec4be422bfb5654c38f96785b0093078c3ca3e16774162be607d6f8d483ceb9", size = 6790, upload_time = "2024-08-25T12:50:08.151Z" }, + { url = "https://files.pythonhosted.org/packages/1e/eb/e7e7ea2f7e374e52fc8425d5cf67890be8278a6e620aa74775da2f1039f7/mkdocs_argref_plugin-0.5.0-py3-none-any.whl", hash = "sha256:6ec4be422bfb5654c38f96785b0093078c3ca3e16774162be607d6f8d483ceb9", size = 6790 }, ] [[package]] @@ -1251,23 +1337,23 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "mkdocs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/63/b7/efc75b7870a4fecbc9a05ba94ce622462a40b5a13670d00036c5b47bf82f/mkdocs-autolinks-plugin-0.7.1.tar.gz", hash = "sha256:445ddb9b417b7795856c30801bb430773186c1daf210bdeecf8305f55a47d151", size = 4375, upload_time = "2023-08-04T14:42:25.67Z" } +sdist = { url = "https://files.pythonhosted.org/packages/63/b7/efc75b7870a4fecbc9a05ba94ce622462a40b5a13670d00036c5b47bf82f/mkdocs-autolinks-plugin-0.7.1.tar.gz", hash = "sha256:445ddb9b417b7795856c30801bb430773186c1daf210bdeecf8305f55a47d151", size = 4375 } wheels = [ - { url = "https://files.pythonhosted.org/packages/d4/9c/ee3d81a799b8b0b73a89625bcbf3c58cd369c8a26a1b415413edea9bf259/mkdocs_autolinks_plugin-0.7.1-py3-none-any.whl", hash = "sha256:5c6c17f6649b68e79a9ef0b2648d59f3072e18002b90ee1586a64c505f11ab12", size = 4235, upload_time = "2023-08-04T14:42:23.955Z" }, + { url = "https://files.pythonhosted.org/packages/d4/9c/ee3d81a799b8b0b73a89625bcbf3c58cd369c8a26a1b415413edea9bf259/mkdocs_autolinks_plugin-0.7.1-py3-none-any.whl", hash = "sha256:5c6c17f6649b68e79a9ef0b2648d59f3072e18002b90ee1586a64c505f11ab12", size = 4235 }, ] [[package]] name = "mkdocs-autorefs" -version = "1.4.2" +version = "1.4.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "markdown" }, { name = "markupsafe" }, { name = "mkdocs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/47/0c/c9826f35b99c67fa3a7cddfa094c1a6c43fafde558c309c6e4403e5b37dc/mkdocs_autorefs-1.4.2.tar.gz", hash = "sha256:e2ebe1abd2b67d597ed19378c0fff84d73d1dbce411fce7a7cc6f161888b6749", size = 54961, upload_time = "2025-05-20T13:09:09.886Z" } +sdist = { url = "https://files.pythonhosted.org/packages/51/fa/9124cd63d822e2bcbea1450ae68cdc3faf3655c69b455f3a7ed36ce6c628/mkdocs_autorefs-1.4.3.tar.gz", hash = "sha256:beee715b254455c4aa93b6ef3c67579c399ca092259cc41b7d9342573ff1fc75", size = 55425 } wheels = [ - { url = "https://files.pythonhosted.org/packages/87/dc/fc063b78f4b769d1956319351704e23ebeba1e9e1d6a41b4b602325fd7e4/mkdocs_autorefs-1.4.2-py3-none-any.whl", hash = "sha256:83d6d777b66ec3c372a1aad4ae0cf77c243ba5bcda5bf0c6b8a2c5e7a3d89f13", size = 24969, upload_time = "2025-05-20T13:09:08.237Z" }, + { url = "https://files.pythonhosted.org/packages/9f/4d/7123b6fa2278000688ebd338e2a06d16870aaf9eceae6ba047ea05f92df1/mkdocs_autorefs-1.4.3-py3-none-any.whl", hash = "sha256:469d85eb3114801d08e9cc55d102b3ba65917a869b893403b8987b601cf55dc9", size = 25034 }, ] [[package]] @@ -1278,7 +1364,7 @@ dependencies = [ { name = "mkdocs" }, { name = "pygtrie" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/9a/3b/490d1b51fba7da69394e5a17f2c081eb65a10fb73565dc6793d53e4e4206/mkdocs-ezlinks-plugin-0.1.14.tar.gz", hash = "sha256:3e2085c16a850e022393e80194c17612e7b55de87fb45b3ffb618b5dfdb10811", size = 13366, upload_time = "2022-01-24T20:10:30.91Z" } +sdist = { url = "https://files.pythonhosted.org/packages/9a/3b/490d1b51fba7da69394e5a17f2c081eb65a10fb73565dc6793d53e4e4206/mkdocs-ezlinks-plugin-0.1.14.tar.gz", hash = "sha256:3e2085c16a850e022393e80194c17612e7b55de87fb45b3ffb618b5dfdb10811", size = 13366 } [[package]] name = "mkdocs-get-deps" @@ -1289,9 +1375,9 @@ dependencies = [ { name = "platformdirs" }, { name = "pyyaml" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/98/f5/ed29cd50067784976f25ed0ed6fcd3c2ce9eb90650aa3b2796ddf7b6870b/mkdocs_get_deps-0.2.0.tar.gz", hash = "sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c", size = 10239, upload_time = "2023-11-20T17:51:09.981Z" } +sdist = { url = "https://files.pythonhosted.org/packages/98/f5/ed29cd50067784976f25ed0ed6fcd3c2ce9eb90650aa3b2796ddf7b6870b/mkdocs_get_deps-0.2.0.tar.gz", hash = "sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c", size = 10239 } wheels = [ - { url = "https://files.pythonhosted.org/packages/9f/d4/029f984e8d3f3b6b726bd33cafc473b75e9e44c0f7e80a5b29abc466bdea/mkdocs_get_deps-0.2.0-py3-none-any.whl", hash = "sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134", size = 9521, upload_time = "2023-11-20T17:51:08.587Z" }, + { url = "https://files.pythonhosted.org/packages/9f/d4/029f984e8d3f3b6b726bd33cafc473b75e9e44c0f7e80a5b29abc466bdea/mkdocs_get_deps-0.2.0-py3-none-any.whl", hash = "sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134", size = 9521 }, ] [[package]] @@ -1302,9 +1388,9 @@ dependencies = [ { name = "mkdocs" }, { name = "pygithub" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c6/88/e724563e9ff1b119869ef0704157caa8d7b9b9b4a8a8faf8120aa01620e2/mkdocs-git-committers-plugin-0.2.3.tar.gz", hash = "sha256:77188d8aacc11d5233d6949435670e3d6545ffb7a0e274d56f32ed3984353c61", size = 5379, upload_time = "2023-11-06T17:13:30.207Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c6/88/e724563e9ff1b119869ef0704157caa8d7b9b9b4a8a8faf8120aa01620e2/mkdocs-git-committers-plugin-0.2.3.tar.gz", hash = "sha256:77188d8aacc11d5233d6949435670e3d6545ffb7a0e274d56f32ed3984353c61", size = 5379 } wheels = [ - { url = "https://files.pythonhosted.org/packages/81/56/15fdbb6afa718a6c9de626bd11672040832ba547c03daf205e295be4e0d4/mkdocs_git_committers_plugin-0.2.3-py3-none-any.whl", hash = "sha256:4ca79efb7e61a72652d3512d61af5c40a4572e36667e1a00032aad524250780d", size = 4340, upload_time = "2023-11-06T17:13:28.979Z" }, + { url = "https://files.pythonhosted.org/packages/81/56/15fdbb6afa718a6c9de626bd11672040832ba547c03daf205e295be4e0d4/mkdocs_git_committers_plugin-0.2.3-py3-none-any.whl", hash = "sha256:4ca79efb7e61a72652d3512d61af5c40a4572e36667e1a00032aad524250780d", size = 4340 }, ] [[package]] @@ -1317,9 +1403,9 @@ dependencies = [ { name = "mkdocs" }, { name = "pytz" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/5e/f8/a17ec39a4fc314d40cc96afdc1d401e393ebd4f42309d454cc940a2cf38a/mkdocs_git_revision_date_localized_plugin-1.4.7.tar.gz", hash = "sha256:10a49eff1e1c3cb766e054b9d8360c904ce4fe8c33ac3f6cc083ac6459c91953", size = 450473, upload_time = "2025-05-28T18:26:20.697Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5e/f8/a17ec39a4fc314d40cc96afdc1d401e393ebd4f42309d454cc940a2cf38a/mkdocs_git_revision_date_localized_plugin-1.4.7.tar.gz", hash = "sha256:10a49eff1e1c3cb766e054b9d8360c904ce4fe8c33ac3f6cc083ac6459c91953", size = 450473 } wheels = [ - { url = "https://files.pythonhosted.org/packages/53/b6/106fcc15287e7228658fbd0ad9e8b0d775becced0a089cc39984641f4a0f/mkdocs_git_revision_date_localized_plugin-1.4.7-py3-none-any.whl", hash = "sha256:056c0a90242409148f1dc94d5c9d2c25b5b8ddd8de45489fa38f7fa7ccad2bc4", size = 25382, upload_time = "2025-05-28T18:26:18.907Z" }, + { url = "https://files.pythonhosted.org/packages/53/b6/106fcc15287e7228658fbd0ad9e8b0d775becced0a089cc39984641f4a0f/mkdocs_git_revision_date_localized_plugin-1.4.7-py3-none-any.whl", hash = "sha256:056c0a90242409148f1dc94d5c9d2c25b5b8ddd8de45489fa38f7fa7ccad2bc4", size = 25382 }, ] [[package]] @@ -1334,18 +1420,19 @@ dependencies = [ { name = "nbconvert" }, { name = "pygments" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/6c/23/6ffb8d2fd2117aa860a04c6fe2510b21bc3c3c085907ffdd851caba53152/mkdocs_jupyter-0.25.1.tar.gz", hash = "sha256:0e9272ff4947e0ec683c92423a4bfb42a26477c103ab1a6ab8277e2dcc8f7afe", size = 1626747, upload_time = "2024-10-15T14:56:32.373Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6c/23/6ffb8d2fd2117aa860a04c6fe2510b21bc3c3c085907ffdd851caba53152/mkdocs_jupyter-0.25.1.tar.gz", hash = "sha256:0e9272ff4947e0ec683c92423a4bfb42a26477c103ab1a6ab8277e2dcc8f7afe", size = 1626747 } wheels = [ - { url = "https://files.pythonhosted.org/packages/08/37/5f1fd5c3f6954b3256f8126275e62af493b96fb6aef6c0dbc4ee326032ad/mkdocs_jupyter-0.25.1-py3-none-any.whl", hash = "sha256:3f679a857609885d322880e72533ef5255561bbfdb13cfee2a1e92ef4d4ad8d8", size = 1456197, upload_time = "2024-10-15T14:56:29.854Z" }, + { url = "https://files.pythonhosted.org/packages/08/37/5f1fd5c3f6954b3256f8126275e62af493b96fb6aef6c0dbc4ee326032ad/mkdocs_jupyter-0.25.1-py3-none-any.whl", hash = "sha256:3f679a857609885d322880e72533ef5255561bbfdb13cfee2a1e92ef4d4ad8d8", size = 1456197 }, ] [[package]] name = "mkdocs-material" -version = "9.6.15" +version = "9.6.20" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "babel" }, { name = "backrefs" }, + { name = "click" }, { name = "colorama" }, { name = "jinja2" }, { name = "markdown" }, @@ -1356,18 +1443,18 @@ dependencies = [ { name = "pymdown-extensions" }, { name = "requests" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/95/c1/f804ba2db2ddc2183e900befe7dad64339a34fa935034e1ab405289d0a97/mkdocs_material-9.6.15.tar.gz", hash = "sha256:64adf8fa8dba1a17905b6aee1894a5aafd966d4aeb44a11088519b0f5ca4f1b5", size = 3951836, upload_time = "2025-07-01T10:14:15.671Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ba/ee/6ed7fc739bd7591485c8bec67d5984508d3f2733e708f32714c21593341a/mkdocs_material-9.6.20.tar.gz", hash = "sha256:e1f84d21ec5fb730673c4259b2e0d39f8d32a3fef613e3a8e7094b012d43e790", size = 4037822 } wheels = [ - { url = "https://files.pythonhosted.org/packages/1d/30/dda19f0495a9096b64b6b3c07c4bfcff1c76ee0fc521086d53593f18b4c0/mkdocs_material-9.6.15-py3-none-any.whl", hash = "sha256:ac969c94d4fe5eb7c924b6d2f43d7db41159ea91553d18a9afc4780c34f2717a", size = 8716840, upload_time = "2025-07-01T10:14:13.18Z" }, + { url = "https://files.pythonhosted.org/packages/67/d8/a31dd52e657bf12b20574706d07df8d767e1ab4340f9bfb9ce73950e5e59/mkdocs_material-9.6.20-py3-none-any.whl", hash = "sha256:b8d8c8b0444c7c06dd984b55ba456ce731f0035c5a1533cc86793618eb1e6c82", size = 9193367 }, ] [[package]] name = "mkdocs-material-extensions" version = "1.3.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/79/9b/9b4c96d6593b2a541e1cb8b34899a6d021d208bb357042823d4d2cabdbe7/mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443", size = 11847, upload_time = "2023-11-22T19:09:45.208Z" } +sdist = { url = "https://files.pythonhosted.org/packages/79/9b/9b4c96d6593b2a541e1cb8b34899a6d021d208bb357042823d4d2cabdbe7/mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443", size = 11847 } wheels = [ - { url = "https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31", size = 8728, upload_time = "2023-11-22T19:09:43.465Z" }, + { url = "https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31", size = 8728 }, ] [[package]] @@ -1380,9 +1467,9 @@ dependencies = [ { name = "jsmin" }, { name = "mkdocs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/52/67/fe4b77e7a8ae7628392e28b14122588beaf6078b53eb91c7ed000fd158ac/mkdocs-minify-plugin-0.8.0.tar.gz", hash = "sha256:bc11b78b8120d79e817308e2b11539d790d21445eb63df831e393f76e52e753d", size = 8366, upload_time = "2024-01-29T16:11:32.982Z" } +sdist = { url = "https://files.pythonhosted.org/packages/52/67/fe4b77e7a8ae7628392e28b14122588beaf6078b53eb91c7ed000fd158ac/mkdocs-minify-plugin-0.8.0.tar.gz", hash = "sha256:bc11b78b8120d79e817308e2b11539d790d21445eb63df831e393f76e52e753d", size = 8366 } wheels = [ - { url = "https://files.pythonhosted.org/packages/1b/cd/2e8d0d92421916e2ea4ff97f10a544a9bd5588eb747556701c983581df13/mkdocs_minify_plugin-0.8.0-py3-none-any.whl", hash = "sha256:5fba1a3f7bd9a2142c9954a6559a57e946587b21f133165ece30ea145c66aee6", size = 6723, upload_time = "2024-01-29T16:11:31.851Z" }, + { url = "https://files.pythonhosted.org/packages/1b/cd/2e8d0d92421916e2ea4ff97f10a544a9bd5588eb747556701c983581df13/mkdocs_minify_plugin-0.8.0-py3-none-any.whl", hash = "sha256:5fba1a3f7bd9a2142c9954a6559a57e946587b21f133165ece30ea145c66aee6", size = 6723 }, ] [[package]] @@ -1392,9 +1479,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "mkdocs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/0a/0e/f72a506a21bdb27b807124e00c688226848a388d1fd3980b80ae3cc27203/mkdocs_open_in_new_tab-1.0.8.tar.gz", hash = "sha256:3e0dad08cc9938b0b13097be8e0aa435919de1eeb2d1a648e66b5dee8d57e048", size = 5791, upload_time = "2024-11-18T13:15:13.977Z" } +sdist = { url = "https://files.pythonhosted.org/packages/0a/0e/f72a506a21bdb27b807124e00c688226848a388d1fd3980b80ae3cc27203/mkdocs_open_in_new_tab-1.0.8.tar.gz", hash = "sha256:3e0dad08cc9938b0b13097be8e0aa435919de1eeb2d1a648e66b5dee8d57e048", size = 5791 } wheels = [ - { url = "https://files.pythonhosted.org/packages/21/94/44f3c868495481c868d08eea065c82803f1affd8553d3383b782f497613c/mkdocs_open_in_new_tab-1.0.8-py3-none-any.whl", hash = "sha256:051d767a4467b12d89827e1fea0ec660b05b027c726317fe4fceee5456e36ad2", size = 7717, upload_time = "2024-11-18T13:15:12.286Z" }, + { url = "https://files.pythonhosted.org/packages/21/94/44f3c868495481c868d08eea065c82803f1affd8553d3383b782f497613c/mkdocs_open_in_new_tab-1.0.8-py3-none-any.whl", hash = "sha256:051d767a4467b12d89827e1fea0ec660b05b027c726317fe4fceee5456e36ad2", size = 7717 }, ] [[package]] @@ -1404,9 +1491,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "mkdocs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f1/a8/6d44a6cf07e969c7420cb36ab287b0669da636a2044de38a7d2208d5a758/mkdocs_redirects-1.2.2.tar.gz", hash = "sha256:3094981b42ffab29313c2c1b8ac3969861109f58b2dd58c45fc81cd44bfa0095", size = 7162, upload_time = "2024-11-07T14:57:21.109Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f1/a8/6d44a6cf07e969c7420cb36ab287b0669da636a2044de38a7d2208d5a758/mkdocs_redirects-1.2.2.tar.gz", hash = "sha256:3094981b42ffab29313c2c1b8ac3969861109f58b2dd58c45fc81cd44bfa0095", size = 7162 } wheels = [ - { url = "https://files.pythonhosted.org/packages/c4/ec/38443b1f2a3821bbcb24e46cd8ba979154417794d54baf949fefde1c2146/mkdocs_redirects-1.2.2-py3-none-any.whl", hash = "sha256:7dbfa5647b79a3589da4401403d69494bd1f4ad03b9c15136720367e1f340ed5", size = 6142, upload_time = "2024-11-07T14:57:19.143Z" }, + { url = "https://files.pythonhosted.org/packages/c4/ec/38443b1f2a3821bbcb24e46cd8ba979154417794d54baf949fefde1c2146/mkdocs_redirects-1.2.2-py3-none-any.whl", hash = "sha256:7dbfa5647b79a3589da4401403d69494bd1f4ad03b9c15136720367e1f340ed5", size = 6142 }, ] [[package]] @@ -1419,9 +1506,9 @@ dependencies = [ { name = "pyyaml" }, { name = "tabulate" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a1/1b/ca35e4b51a1814924153f7c8afa5a9c2f961688a9c275fa9f4afe7f5083a/mkdocs_table_reader_plugin-3.1.0.tar.gz", hash = "sha256:eb15688ee8c0cd1a842f506f18973b87be22bd7baa5e2e551089de6b7f9ec25b", size = 12510, upload_time = "2024-08-29T14:08:09.54Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a1/1b/ca35e4b51a1814924153f7c8afa5a9c2f961688a9c275fa9f4afe7f5083a/mkdocs_table_reader_plugin-3.1.0.tar.gz", hash = "sha256:eb15688ee8c0cd1a842f506f18973b87be22bd7baa5e2e551089de6b7f9ec25b", size = 12510 } wheels = [ - { url = "https://files.pythonhosted.org/packages/b3/6f/dcc966874f74f8580b99d2ffecbdc85dfd00c4a5039fedbee4ddd7fc8c7f/mkdocs_table_reader_plugin-3.1.0-py3-none-any.whl", hash = "sha256:50a1302661c14d96b90ba0434ae96110441e0c653ce23559e3c6911fe79e7bd2", size = 10564, upload_time = "2024-08-29T14:08:07.367Z" }, + { url = "https://files.pythonhosted.org/packages/b3/6f/dcc966874f74f8580b99d2ffecbdc85dfd00c4a5039fedbee4ddd7fc8c7f/mkdocs_table_reader_plugin-3.1.0-py3-none-any.whl", hash = "sha256:50a1302661c14d96b90ba0434ae96110441e0c653ce23559e3c6911fe79e7bd2", size = 10564 }, ] [[package]] @@ -1432,14 +1519,14 @@ dependencies = [ { name = "lxml" }, { name = "mkdocs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/cf/16/45213649b6756744f36f31014fc8673df1d7c998bb9a801c2d769fff4114/mkdocs-video-1.5.0.tar.gz", hash = "sha256:0defc018f4b7927f8afffc4d8e039c84dfba636dffc5e25e2bfa8d6350bc8eca", size = 5633, upload_time = "2023-03-17T17:36:43.343Z" } +sdist = { url = "https://files.pythonhosted.org/packages/cf/16/45213649b6756744f36f31014fc8673df1d7c998bb9a801c2d769fff4114/mkdocs-video-1.5.0.tar.gz", hash = "sha256:0defc018f4b7927f8afffc4d8e039c84dfba636dffc5e25e2bfa8d6350bc8eca", size = 5633 } wheels = [ - { url = "https://files.pythonhosted.org/packages/cc/3a/b51e305eca21cdd58f4eb06973099ba0ea679b1f437a92a49f8fc576310e/mkdocs_video-1.5.0-py3-none-any.whl", hash = "sha256:b35613d4dacbac2dfa94d8c2600383cda14ad99a1fa1542b5fc4e9c6d19e9fe1", size = 6570, upload_time = "2023-03-17T17:36:40.776Z" }, + { url = "https://files.pythonhosted.org/packages/cc/3a/b51e305eca21cdd58f4eb06973099ba0ea679b1f437a92a49f8fc576310e/mkdocs_video-1.5.0-py3-none-any.whl", hash = "sha256:b35613d4dacbac2dfa94d8c2600383cda14ad99a1fa1542b5fc4e9c6d19e9fe1", size = 6570 }, ] [[package]] name = "mkdocstrings" -version = "0.29.1" +version = "0.30.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "jinja2" }, @@ -1449,58 +1536,64 @@ dependencies = [ { name = "mkdocs-autorefs" }, { name = "pymdown-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/41/e8/d22922664a627a0d3d7ff4a6ca95800f5dde54f411982591b4621a76225d/mkdocstrings-0.29.1.tar.gz", hash = "sha256:8722f8f8c5cd75da56671e0a0c1bbed1df9946c0cef74794d6141b34011abd42", size = 1212686, upload_time = "2025-03-31T08:33:11.997Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c5/33/2fa3243439f794e685d3e694590d28469a9b8ea733af4b48c250a3ffc9a0/mkdocstrings-0.30.1.tar.gz", hash = "sha256:84a007aae9b707fb0aebfc9da23db4b26fc9ab562eb56e335e9ec480cb19744f", size = 106350 } wheels = [ - { url = "https://files.pythonhosted.org/packages/98/14/22533a578bf8b187e05d67e2c1721ce10e3f526610eebaf7a149d557ea7a/mkdocstrings-0.29.1-py3-none-any.whl", hash = "sha256:37a9736134934eea89cbd055a513d40a020d87dfcae9e3052c2a6b8cd4af09b6", size = 1631075, upload_time = "2025-03-31T08:33:09.661Z" }, + { url = "https://files.pythonhosted.org/packages/7b/2c/f0dc4e1ee7f618f5bff7e05898d20bf8b6e7fa612038f768bfa295f136a4/mkdocstrings-0.30.1-py3-none-any.whl", hash = "sha256:41bd71f284ca4d44a668816193e4025c950b002252081e387433656ae9a70a82", size = 36704 }, ] [[package]] name = "mkdocstrings-python" -version = "1.16.12" +version = "1.18.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "griffe" }, { name = "mkdocs-autorefs" }, { name = "mkdocstrings" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/bf/ed/b886f8c714fd7cccc39b79646b627dbea84cd95c46be43459ef46852caf0/mkdocstrings_python-1.16.12.tar.gz", hash = "sha256:9b9eaa066e0024342d433e332a41095c4e429937024945fea511afe58f63175d", size = 206065, upload_time = "2025-06-03T12:52:49.276Z" } +sdist = { url = "https://files.pythonhosted.org/packages/95/ae/58ab2bfbee2792e92a98b97e872f7c003deb903071f75d8d83aa55db28fa/mkdocstrings_python-1.18.2.tar.gz", hash = "sha256:4ad536920a07b6336f50d4c6d5603316fafb1172c5c882370cbbc954770ad323", size = 207972 } wheels = [ - { url = "https://files.pythonhosted.org/packages/3b/dd/a24ee3de56954bfafb6ede7cd63c2413bb842cc48eb45e41c43a05a33074/mkdocstrings_python-1.16.12-py3-none-any.whl", hash = "sha256:22ded3a63b3d823d57457a70ff9860d5a4de9e8b1e482876fc9baabaf6f5f374", size = 124287, upload_time = "2025-06-03T12:52:47.819Z" }, + { url = "https://files.pythonhosted.org/packages/d5/8f/ce008599d9adebf33ed144e7736914385e8537f5fc686fdb7cceb8c22431/mkdocstrings_python-1.18.2-py3-none-any.whl", hash = "sha256:944fe6deb8f08f33fa936d538233c4036e9f53e840994f6146e8e94eb71b600d", size = 138215 }, ] [[package]] name = "mypy" -version = "1.16.1" +version = "1.18.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "mypy-extensions" }, { name = "pathspec" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/81/69/92c7fa98112e4d9eb075a239caa4ef4649ad7d441545ccffbd5e34607cbb/mypy-1.16.1.tar.gz", hash = "sha256:6bd00a0a2094841c5e47e7374bb42b83d64c527a502e3334e1173a0c24437bab", size = 3324747, upload_time = "2025-06-16T16:51:35.145Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b4/d6/39482e5fcc724c15bf6280ff5806548c7185e0c090712a3736ed4d07e8b7/mypy-1.16.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:af4792433f09575d9eeca5c63d7d90ca4aeceda9d8355e136f80f8967639183d", size = 11066493, upload_time = "2025-06-16T16:47:01.683Z" }, - { url = "https://files.pythonhosted.org/packages/e6/e5/26c347890efc6b757f4d5bb83f4a0cf5958b8cf49c938ac99b8b72b420a6/mypy-1.16.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:66df38405fd8466ce3517eda1f6640611a0b8e70895e2a9462d1d4323c5eb4b9", size = 10081687, upload_time = "2025-06-16T16:48:19.367Z" }, - { url = "https://files.pythonhosted.org/packages/44/c7/b5cb264c97b86914487d6a24bd8688c0172e37ec0f43e93b9691cae9468b/mypy-1.16.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:44e7acddb3c48bd2713994d098729494117803616e116032af192871aed80b79", size = 11839723, upload_time = "2025-06-16T16:49:20.912Z" }, - { url = "https://files.pythonhosted.org/packages/15/f8/491997a9b8a554204f834ed4816bda813aefda31cf873bb099deee3c9a99/mypy-1.16.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0ab5eca37b50188163fa7c1b73c685ac66c4e9bdee4a85c9adac0e91d8895e15", size = 12722980, upload_time = "2025-06-16T16:37:40.929Z" }, - { url = "https://files.pythonhosted.org/packages/df/f0/2bd41e174b5fd93bc9de9a28e4fb673113633b8a7f3a607fa4a73595e468/mypy-1.16.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dedb6229b2c9086247e21a83c309754b9058b438704ad2f6807f0d8227f6ebdd", size = 12903328, upload_time = "2025-06-16T16:34:35.099Z" }, - { url = "https://files.pythonhosted.org/packages/61/81/5572108a7bec2c46b8aff7e9b524f371fe6ab5efb534d38d6b37b5490da8/mypy-1.16.1-cp312-cp312-win_amd64.whl", hash = "sha256:1f0435cf920e287ff68af3d10a118a73f212deb2ce087619eb4e648116d1fe9b", size = 9562321, upload_time = "2025-06-16T16:48:58.823Z" }, - { url = "https://files.pythonhosted.org/packages/28/e3/96964af4a75a949e67df4b95318fe2b7427ac8189bbc3ef28f92a1c5bc56/mypy-1.16.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ddc91eb318c8751c69ddb200a5937f1232ee8efb4e64e9f4bc475a33719de438", size = 11063480, upload_time = "2025-06-16T16:47:56.205Z" }, - { url = "https://files.pythonhosted.org/packages/f5/4d/cd1a42b8e5be278fab7010fb289d9307a63e07153f0ae1510a3d7b703193/mypy-1.16.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:87ff2c13d58bdc4bbe7dc0dedfe622c0f04e2cb2a492269f3b418df2de05c536", size = 10090538, upload_time = "2025-06-16T16:46:43.92Z" }, - { url = "https://files.pythonhosted.org/packages/c9/4f/c3c6b4b66374b5f68bab07c8cabd63a049ff69796b844bc759a0ca99bb2a/mypy-1.16.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a7cfb0fe29fe5a9841b7c8ee6dffb52382c45acdf68f032145b75620acfbd6f", size = 11836839, upload_time = "2025-06-16T16:36:28.039Z" }, - { url = "https://files.pythonhosted.org/packages/b4/7e/81ca3b074021ad9775e5cb97ebe0089c0f13684b066a750b7dc208438403/mypy-1.16.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:051e1677689c9d9578b9c7f4d206d763f9bbd95723cd1416fad50db49d52f359", size = 12715634, upload_time = "2025-06-16T16:50:34.441Z" }, - { url = "https://files.pythonhosted.org/packages/e9/95/bdd40c8be346fa4c70edb4081d727a54d0a05382d84966869738cfa8a497/mypy-1.16.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d5d2309511cc56c021b4b4e462907c2b12f669b2dbeb68300110ec27723971be", size = 12895584, upload_time = "2025-06-16T16:34:54.857Z" }, - { url = "https://files.pythonhosted.org/packages/5a/fd/d486a0827a1c597b3b48b1bdef47228a6e9ee8102ab8c28f944cb83b65dc/mypy-1.16.1-cp313-cp313-win_amd64.whl", hash = "sha256:4f58ac32771341e38a853c5d0ec0dfe27e18e27da9cdb8bbc882d2249c71a3ee", size = 9573886, upload_time = "2025-06-16T16:36:43.589Z" }, - { url = "https://files.pythonhosted.org/packages/cf/d3/53e684e78e07c1a2bf7105715e5edd09ce951fc3f47cf9ed095ec1b7a037/mypy-1.16.1-py3-none-any.whl", hash = "sha256:5fc2ac4027d0ef28d6ba69a0343737a23c4d1b83672bf38d1fe237bdc0643b37", size = 2265923, upload_time = "2025-06-16T16:48:02.366Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/c0/77/8f0d0001ffad290cef2f7f216f96c814866248a0b92a722365ed54648e7e/mypy-1.18.2.tar.gz", hash = "sha256:06a398102a5f203d7477b2923dda3634c36727fa5c237d8f859ef90c42a9924b", size = 3448846 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/06/dfdd2bc60c66611dd8335f463818514733bc763e4760dee289dcc33df709/mypy-1.18.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:33eca32dd124b29400c31d7cf784e795b050ace0e1f91b8dc035672725617e34", size = 12908273 }, + { url = "https://files.pythonhosted.org/packages/81/14/6a9de6d13a122d5608e1a04130724caf9170333ac5a924e10f670687d3eb/mypy-1.18.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a3c47adf30d65e89b2dcd2fa32f3aeb5e94ca970d2c15fcb25e297871c8e4764", size = 11920910 }, + { url = "https://files.pythonhosted.org/packages/5f/a9/b29de53e42f18e8cc547e38daa9dfa132ffdc64f7250e353f5c8cdd44bee/mypy-1.18.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5d6c838e831a062f5f29d11c9057c6009f60cb294fea33a98422688181fe2893", size = 12465585 }, + { url = "https://files.pythonhosted.org/packages/77/ae/6c3d2c7c61ff21f2bee938c917616c92ebf852f015fb55917fd6e2811db2/mypy-1.18.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01199871b6110a2ce984bde85acd481232d17413868c9807e95c1b0739a58914", size = 13348562 }, + { url = "https://files.pythonhosted.org/packages/4d/31/aec68ab3b4aebdf8f36d191b0685d99faa899ab990753ca0fee60fb99511/mypy-1.18.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a2afc0fa0b0e91b4599ddfe0f91e2c26c2b5a5ab263737e998d6817874c5f7c8", size = 13533296 }, + { url = "https://files.pythonhosted.org/packages/9f/83/abcb3ad9478fca3ebeb6a5358bb0b22c95ea42b43b7789c7fb1297ca44f4/mypy-1.18.2-cp312-cp312-win_amd64.whl", hash = "sha256:d8068d0afe682c7c4897c0f7ce84ea77f6de953262b12d07038f4d296d547074", size = 9828828 }, + { url = "https://files.pythonhosted.org/packages/5f/04/7f462e6fbba87a72bc8097b93f6842499c428a6ff0c81dd46948d175afe8/mypy-1.18.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:07b8b0f580ca6d289e69209ec9d3911b4a26e5abfde32228a288eb79df129fcc", size = 12898728 }, + { url = "https://files.pythonhosted.org/packages/99/5b/61ed4efb64f1871b41fd0b82d29a64640f3516078f6c7905b68ab1ad8b13/mypy-1.18.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ed4482847168439651d3feee5833ccedbf6657e964572706a2adb1f7fa4dfe2e", size = 11910758 }, + { url = "https://files.pythonhosted.org/packages/3c/46/d297d4b683cc89a6e4108c4250a6a6b717f5fa96e1a30a7944a6da44da35/mypy-1.18.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c3ad2afadd1e9fea5cf99a45a822346971ede8685cc581ed9cd4d42eaf940986", size = 12475342 }, + { url = "https://files.pythonhosted.org/packages/83/45/4798f4d00df13eae3bfdf726c9244bcb495ab5bd588c0eed93a2f2dd67f3/mypy-1.18.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a431a6f1ef14cf8c144c6b14793a23ec4eae3db28277c358136e79d7d062f62d", size = 13338709 }, + { url = "https://files.pythonhosted.org/packages/d7/09/479f7358d9625172521a87a9271ddd2441e1dab16a09708f056e97007207/mypy-1.18.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7ab28cc197f1dd77a67e1c6f35cd1f8e8b73ed2217e4fc005f9e6a504e46e7ba", size = 13529806 }, + { url = "https://files.pythonhosted.org/packages/71/cf/ac0f2c7e9d0ea3c75cd99dff7aec1c9df4a1376537cb90e4c882267ee7e9/mypy-1.18.2-cp313-cp313-win_amd64.whl", hash = "sha256:0e2785a84b34a72ba55fb5daf079a1003a34c05b22238da94fcae2bbe46f3544", size = 9833262 }, + { url = "https://files.pythonhosted.org/packages/5a/0c/7d5300883da16f0063ae53996358758b2a2df2a09c72a5061fa79a1f5006/mypy-1.18.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:62f0e1e988ad41c2a110edde6c398383a889d95b36b3e60bcf155f5164c4fdce", size = 12893775 }, + { url = "https://files.pythonhosted.org/packages/50/df/2cffbf25737bdb236f60c973edf62e3e7b4ee1c25b6878629e88e2cde967/mypy-1.18.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:8795a039bab805ff0c1dfdb8cd3344642c2b99b8e439d057aba30850b8d3423d", size = 11936852 }, + { url = "https://files.pythonhosted.org/packages/be/50/34059de13dd269227fb4a03be1faee6e2a4b04a2051c82ac0a0b5a773c9a/mypy-1.18.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6ca1e64b24a700ab5ce10133f7ccd956a04715463d30498e64ea8715236f9c9c", size = 12480242 }, + { url = "https://files.pythonhosted.org/packages/5b/11/040983fad5132d85914c874a2836252bbc57832065548885b5bb5b0d4359/mypy-1.18.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d924eef3795cc89fecf6bedc6ed32b33ac13e8321344f6ddbf8ee89f706c05cb", size = 13326683 }, + { url = "https://files.pythonhosted.org/packages/e9/ba/89b2901dd77414dd7a8c8729985832a5735053be15b744c18e4586e506ef/mypy-1.18.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:20c02215a080e3a2be3aa50506c67242df1c151eaba0dcbc1e4e557922a26075", size = 13514749 }, + { url = "https://files.pythonhosted.org/packages/25/bc/cc98767cffd6b2928ba680f3e5bc969c4152bf7c2d83f92f5a504b92b0eb/mypy-1.18.2-cp314-cp314-win_amd64.whl", hash = "sha256:749b5f83198f1ca64345603118a6f01a4e99ad4bf9d103ddc5a3200cc4614adf", size = 9982959 }, + { url = "https://files.pythonhosted.org/packages/87/e3/be76d87158ebafa0309946c4a73831974d4d6ab4f4ef40c3b53a385a66fd/mypy-1.18.2-py3-none-any.whl", hash = "sha256:22a1748707dd62b58d2ae53562ffc4d7f8bcc727e8ac7cbc69c053ddc874d47e", size = 2352367 }, ] [[package]] name = "mypy-extensions" version = "1.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a2/6e/371856a3fb9d31ca8dac321cda606860fa4548858c0cc45d9d1d4ca2628b/mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558", size = 6343, upload_time = "2025-04-22T14:54:24.164Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/6e/371856a3fb9d31ca8dac321cda606860fa4548858c0cc45d9d1d4ca2628b/mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558", size = 6343 } wheels = [ - { url = "https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505", size = 4963, upload_time = "2025-04-22T14:54:22.983Z" }, + { url = "https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505", size = 4963 }, ] [[package]] @@ -1513,9 +1606,9 @@ dependencies = [ { name = "nbformat" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/87/66/7ffd18d58eae90d5721f9f39212327695b749e23ad44b3881744eaf4d9e8/nbclient-0.10.2.tar.gz", hash = "sha256:90b7fc6b810630db87a6d0c2250b1f0ab4cf4d3c27a299b0cde78a4ed3fd9193", size = 62424, upload_time = "2024-12-19T10:32:27.164Z" } +sdist = { url = "https://files.pythonhosted.org/packages/87/66/7ffd18d58eae90d5721f9f39212327695b749e23ad44b3881744eaf4d9e8/nbclient-0.10.2.tar.gz", hash = "sha256:90b7fc6b810630db87a6d0c2250b1f0ab4cf4d3c27a299b0cde78a4ed3fd9193", size = 62424 } wheels = [ - { url = "https://files.pythonhosted.org/packages/34/6d/e7fa07f03a4a7b221d94b4d586edb754a9b0dc3c9e2c93353e9fa4e0d117/nbclient-0.10.2-py3-none-any.whl", hash = "sha256:4ffee11e788b4a27fabeb7955547e4318a5298f34342a4bfd01f2e1faaeadc3d", size = 25434, upload_time = "2024-12-19T10:32:24.139Z" }, + { url = "https://files.pythonhosted.org/packages/34/6d/e7fa07f03a4a7b221d94b4d586edb754a9b0dc3c9e2c93353e9fa4e0d117/nbclient-0.10.2-py3-none-any.whl", hash = "sha256:4ffee11e788b4a27fabeb7955547e4318a5298f34342a4bfd01f2e1faaeadc3d", size = 25434 }, ] [[package]] @@ -1538,9 +1631,9 @@ dependencies = [ { name = "pygments" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a3/59/f28e15fc47ffb73af68a8d9b47367a8630d76e97ae85ad18271b9db96fdf/nbconvert-7.16.6.tar.gz", hash = "sha256:576a7e37c6480da7b8465eefa66c17844243816ce1ccc372633c6b71c3c0f582", size = 857715, upload_time = "2025-01-28T09:29:14.724Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a3/59/f28e15fc47ffb73af68a8d9b47367a8630d76e97ae85ad18271b9db96fdf/nbconvert-7.16.6.tar.gz", hash = "sha256:576a7e37c6480da7b8465eefa66c17844243816ce1ccc372633c6b71c3c0f582", size = 857715 } wheels = [ - { url = "https://files.pythonhosted.org/packages/cc/9a/cd673b2f773a12c992f41309ef81b99da1690426bd2f96957a7ade0d3ed7/nbconvert-7.16.6-py3-none-any.whl", hash = "sha256:1375a7b67e0c2883678c48e506dc320febb57685e5ee67faa51b18a90f3a712b", size = 258525, upload_time = "2025-01-28T09:29:12.551Z" }, + { url = "https://files.pythonhosted.org/packages/cc/9a/cd673b2f773a12c992f41309ef81b99da1690426bd2f96957a7ade0d3ed7/nbconvert-7.16.6-py3-none-any.whl", hash = "sha256:1375a7b67e0c2883678c48e506dc320febb57685e5ee67faa51b18a90f3a712b", size = 258525 }, ] [[package]] @@ -1553,77 +1646,99 @@ dependencies = [ { name = "jupyter-core" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/6d/fd/91545e604bc3dad7dca9ed03284086039b294c6b3d75c0d2fa45f9e9caf3/nbformat-5.10.4.tar.gz", hash = "sha256:322168b14f937a5d11362988ecac2a4952d3d8e3a2cbeb2319584631226d5b3a", size = 142749, upload_time = "2024-04-04T11:20:37.371Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6d/fd/91545e604bc3dad7dca9ed03284086039b294c6b3d75c0d2fa45f9e9caf3/nbformat-5.10.4.tar.gz", hash = "sha256:322168b14f937a5d11362988ecac2a4952d3d8e3a2cbeb2319584631226d5b3a", size = 142749 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl", hash = "sha256:3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b", size = 78454, upload_time = "2024-04-04T11:20:34.895Z" }, + { url = "https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl", hash = "sha256:3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b", size = 78454 }, ] [[package]] name = "nest-asyncio" version = "1.6.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/83/f8/51569ac65d696c8ecbee95938f89d4abf00f47d58d48f6fbabfe8f0baefe/nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe", size = 7418, upload_time = "2024-01-21T14:25:19.227Z" } +sdist = { url = "https://files.pythonhosted.org/packages/83/f8/51569ac65d696c8ecbee95938f89d4abf00f47d58d48f6fbabfe8f0baefe/nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe", size = 7418 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c", size = 5195, upload_time = "2024-01-21T14:25:17.223Z" }, + { url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c", size = 5195 }, ] [[package]] name = "networkx" version = "3.5" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6c/4f/ccdb8ad3a38e583f214547fd2f7ff1fc160c43a75af88e6aec213404b96a/networkx-3.5.tar.gz", hash = "sha256:d4c6f9cf81f52d69230866796b82afbccdec3db7ae4fbd1b65ea750feed50037", size = 2471065, upload_time = "2025-05-29T11:35:07.804Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6c/4f/ccdb8ad3a38e583f214547fd2f7ff1fc160c43a75af88e6aec213404b96a/networkx-3.5.tar.gz", hash = "sha256:d4c6f9cf81f52d69230866796b82afbccdec3db7ae4fbd1b65ea750feed50037", size = 2471065 } wheels = [ - { url = "https://files.pythonhosted.org/packages/eb/8d/776adee7bbf76365fdd7f2552710282c79a4ead5d2a46408c9043a2b70ba/networkx-3.5-py3-none-any.whl", hash = "sha256:0030d386a9a06dee3565298b4a734b68589749a544acbb6c412dc9e2489ec6ec", size = 2034406, upload_time = "2025-05-29T11:35:04.961Z" }, + { url = "https://files.pythonhosted.org/packages/eb/8d/776adee7bbf76365fdd7f2552710282c79a4ead5d2a46408c9043a2b70ba/networkx-3.5-py3-none-any.whl", hash = "sha256:0030d386a9a06dee3565298b4a734b68589749a544acbb6c412dc9e2489ec6ec", size = 2034406 }, ] [[package]] name = "nodeenv" version = "1.9.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/43/16/fc88b08840de0e0a72a2f9d8c6bae36be573e475a6326ae854bcc549fc45/nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f", size = 47437, upload_time = "2024-06-04T18:44:11.171Z" } +sdist = { url = "https://files.pythonhosted.org/packages/43/16/fc88b08840de0e0a72a2f9d8c6bae36be573e475a6326ae854bcc549fc45/nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f", size = 47437 } wheels = [ - { url = "https://files.pythonhosted.org/packages/d2/1d/1b658dbd2b9fa9c4c9f32accbfc0205d532c8c6194dc0f2a4c0428e7128a/nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9", size = 22314, upload_time = "2024-06-04T18:44:08.352Z" }, + { url = "https://files.pythonhosted.org/packages/d2/1d/1b658dbd2b9fa9c4c9f32accbfc0205d532c8c6194dc0f2a4c0428e7128a/nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9", size = 22314 }, ] [[package]] name = "numpy" -version = "2.3.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2e/19/d7c972dfe90a353dbd3efbbe1d14a5951de80c99c9dc1b93cd998d51dc0f/numpy-2.3.1.tar.gz", hash = "sha256:1ec9ae20a4226da374362cca3c62cd753faf2f951440b0e3b98e93c235441d2b", size = 20390372, upload_time = "2025-06-21T12:28:33.469Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c6/56/71ad5022e2f63cfe0ca93559403d0edef14aea70a841d640bd13cdba578e/numpy-2.3.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2959d8f268f3d8ee402b04a9ec4bb7604555aeacf78b360dc4ec27f1d508177d", size = 20896664, upload_time = "2025-06-21T12:15:30.845Z" }, - { url = "https://files.pythonhosted.org/packages/25/65/2db52ba049813670f7f987cc5db6dac9be7cd95e923cc6832b3d32d87cef/numpy-2.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:762e0c0c6b56bdedfef9a8e1d4538556438288c4276901ea008ae44091954e29", size = 14131078, upload_time = "2025-06-21T12:15:52.23Z" }, - { url = "https://files.pythonhosted.org/packages/57/dd/28fa3c17b0e751047ac928c1e1b6990238faad76e9b147e585b573d9d1bd/numpy-2.3.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:867ef172a0976aaa1f1d1b63cf2090de8b636a7674607d514505fb7276ab08fc", size = 5112554, upload_time = "2025-06-21T12:16:01.434Z" }, - { url = "https://files.pythonhosted.org/packages/c9/fc/84ea0cba8e760c4644b708b6819d91784c290288c27aca916115e3311d17/numpy-2.3.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:4e602e1b8682c2b833af89ba641ad4176053aaa50f5cacda1a27004352dde943", size = 6646560, upload_time = "2025-06-21T12:16:11.895Z" }, - { url = "https://files.pythonhosted.org/packages/61/b2/512b0c2ddec985ad1e496b0bd853eeb572315c0f07cd6997473ced8f15e2/numpy-2.3.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:8e333040d069eba1652fb08962ec5b76af7f2c7bce1df7e1418c8055cf776f25", size = 14260638, upload_time = "2025-06-21T12:16:32.611Z" }, - { url = "https://files.pythonhosted.org/packages/6e/45/c51cb248e679a6c6ab14b7a8e3ead3f4a3fe7425fc7a6f98b3f147bec532/numpy-2.3.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:e7cbf5a5eafd8d230a3ce356d892512185230e4781a361229bd902ff403bc660", size = 16632729, upload_time = "2025-06-21T12:16:57.439Z" }, - { url = "https://files.pythonhosted.org/packages/e4/ff/feb4be2e5c09a3da161b412019caf47183099cbea1132fd98061808c2df2/numpy-2.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5f1b8f26d1086835f442286c1d9b64bb3974b0b1e41bb105358fd07d20872952", size = 15565330, upload_time = "2025-06-21T12:17:20.638Z" }, - { url = "https://files.pythonhosted.org/packages/bc/6d/ceafe87587101e9ab0d370e4f6e5f3f3a85b9a697f2318738e5e7e176ce3/numpy-2.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ee8340cb48c9b7a5899d1149eece41ca535513a9698098edbade2a8e7a84da77", size = 18361734, upload_time = "2025-06-21T12:17:47.938Z" }, - { url = "https://files.pythonhosted.org/packages/2b/19/0fb49a3ea088be691f040c9bf1817e4669a339d6e98579f91859b902c636/numpy-2.3.1-cp312-cp312-win32.whl", hash = "sha256:e772dda20a6002ef7061713dc1e2585bc1b534e7909b2030b5a46dae8ff077ab", size = 6320411, upload_time = "2025-06-21T12:17:58.475Z" }, - { url = "https://files.pythonhosted.org/packages/b1/3e/e28f4c1dd9e042eb57a3eb652f200225e311b608632bc727ae378623d4f8/numpy-2.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:cfecc7822543abdea6de08758091da655ea2210b8ffa1faf116b940693d3df76", size = 12734973, upload_time = "2025-06-21T12:18:17.601Z" }, - { url = "https://files.pythonhosted.org/packages/04/a8/8a5e9079dc722acf53522b8f8842e79541ea81835e9b5483388701421073/numpy-2.3.1-cp312-cp312-win_arm64.whl", hash = "sha256:7be91b2239af2658653c5bb6f1b8bccafaf08226a258caf78ce44710a0160d30", size = 10191491, upload_time = "2025-06-21T12:18:33.585Z" }, - { url = "https://files.pythonhosted.org/packages/d4/bd/35ad97006d8abff8631293f8ea6adf07b0108ce6fec68da3c3fcca1197f2/numpy-2.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:25a1992b0a3fdcdaec9f552ef10d8103186f5397ab45e2d25f8ac51b1a6b97e8", size = 20889381, upload_time = "2025-06-21T12:19:04.103Z" }, - { url = "https://files.pythonhosted.org/packages/f1/4f/df5923874d8095b6062495b39729178eef4a922119cee32a12ee1bd4664c/numpy-2.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7dea630156d39b02a63c18f508f85010230409db5b2927ba59c8ba4ab3e8272e", size = 14152726, upload_time = "2025-06-21T12:19:25.599Z" }, - { url = "https://files.pythonhosted.org/packages/8c/0f/a1f269b125806212a876f7efb049b06c6f8772cf0121139f97774cd95626/numpy-2.3.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:bada6058dd886061f10ea15f230ccf7dfff40572e99fef440a4a857c8728c9c0", size = 5105145, upload_time = "2025-06-21T12:19:34.782Z" }, - { url = "https://files.pythonhosted.org/packages/6d/63/a7f7fd5f375b0361682f6ffbf686787e82b7bbd561268e4f30afad2bb3c0/numpy-2.3.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:a894f3816eb17b29e4783e5873f92faf55b710c2519e5c351767c51f79d8526d", size = 6639409, upload_time = "2025-06-21T12:19:45.228Z" }, - { url = "https://files.pythonhosted.org/packages/bf/0d/1854a4121af895aab383f4aa233748f1df4671ef331d898e32426756a8a6/numpy-2.3.1-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:18703df6c4a4fee55fd3d6e5a253d01c5d33a295409b03fda0c86b3ca2ff41a1", size = 14257630, upload_time = "2025-06-21T12:20:06.544Z" }, - { url = "https://files.pythonhosted.org/packages/50/30/af1b277b443f2fb08acf1c55ce9d68ee540043f158630d62cef012750f9f/numpy-2.3.1-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:5902660491bd7a48b2ec16c23ccb9124b8abfd9583c5fdfa123fe6b421e03de1", size = 16627546, upload_time = "2025-06-21T12:20:31.002Z" }, - { url = "https://files.pythonhosted.org/packages/6e/ec/3b68220c277e463095342d254c61be8144c31208db18d3fd8ef02712bcd6/numpy-2.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:36890eb9e9d2081137bd78d29050ba63b8dab95dff7912eadf1185e80074b2a0", size = 15562538, upload_time = "2025-06-21T12:20:54.322Z" }, - { url = "https://files.pythonhosted.org/packages/77/2b/4014f2bcc4404484021c74d4c5ee8eb3de7e3f7ac75f06672f8dcf85140a/numpy-2.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a780033466159c2270531e2b8ac063704592a0bc62ec4a1b991c7c40705eb0e8", size = 18360327, upload_time = "2025-06-21T12:21:21.053Z" }, - { url = "https://files.pythonhosted.org/packages/40/8d/2ddd6c9b30fcf920837b8672f6c65590c7d92e43084c25fc65edc22e93ca/numpy-2.3.1-cp313-cp313-win32.whl", hash = "sha256:39bff12c076812595c3a306f22bfe49919c5513aa1e0e70fac756a0be7c2a2b8", size = 6312330, upload_time = "2025-06-21T12:25:07.447Z" }, - { url = "https://files.pythonhosted.org/packages/dd/c8/beaba449925988d415efccb45bf977ff8327a02f655090627318f6398c7b/numpy-2.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:8d5ee6eec45f08ce507a6570e06f2f879b374a552087a4179ea7838edbcbfa42", size = 12731565, upload_time = "2025-06-21T12:25:26.444Z" }, - { url = "https://files.pythonhosted.org/packages/0b/c3/5c0c575d7ec78c1126998071f58facfc124006635da75b090805e642c62e/numpy-2.3.1-cp313-cp313-win_arm64.whl", hash = "sha256:0c4d9e0a8368db90f93bd192bfa771ace63137c3488d198ee21dfb8e7771916e", size = 10190262, upload_time = "2025-06-21T12:25:42.196Z" }, - { url = "https://files.pythonhosted.org/packages/ea/19/a029cd335cf72f79d2644dcfc22d90f09caa86265cbbde3b5702ccef6890/numpy-2.3.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:b0b5397374f32ec0649dd98c652a1798192042e715df918c20672c62fb52d4b8", size = 20987593, upload_time = "2025-06-21T12:21:51.664Z" }, - { url = "https://files.pythonhosted.org/packages/25/91/8ea8894406209107d9ce19b66314194675d31761fe2cb3c84fe2eeae2f37/numpy-2.3.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:c5bdf2015ccfcee8253fb8be695516ac4457c743473a43290fd36eba6a1777eb", size = 14300523, upload_time = "2025-06-21T12:22:13.583Z" }, - { url = "https://files.pythonhosted.org/packages/a6/7f/06187b0066eefc9e7ce77d5f2ddb4e314a55220ad62dd0bfc9f2c44bac14/numpy-2.3.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:d70f20df7f08b90a2062c1f07737dd340adccf2068d0f1b9b3d56e2038979fee", size = 5227993, upload_time = "2025-06-21T12:22:22.53Z" }, - { url = "https://files.pythonhosted.org/packages/e8/ec/a926c293c605fa75e9cfb09f1e4840098ed46d2edaa6e2152ee35dc01ed3/numpy-2.3.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:2fb86b7e58f9ac50e1e9dd1290154107e47d1eef23a0ae9145ded06ea606f992", size = 6736652, upload_time = "2025-06-21T12:22:33.629Z" }, - { url = "https://files.pythonhosted.org/packages/e3/62/d68e52fb6fde5586650d4c0ce0b05ff3a48ad4df4ffd1b8866479d1d671d/numpy-2.3.1-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:23ab05b2d241f76cb883ce8b9a93a680752fbfcbd51c50eff0b88b979e471d8c", size = 14331561, upload_time = "2025-06-21T12:22:55.056Z" }, - { url = "https://files.pythonhosted.org/packages/fc/ec/b74d3f2430960044bdad6900d9f5edc2dc0fb8bf5a0be0f65287bf2cbe27/numpy-2.3.1-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:ce2ce9e5de4703a673e705183f64fd5da5bf36e7beddcb63a25ee2286e71ca48", size = 16693349, upload_time = "2025-06-21T12:23:20.53Z" }, - { url = "https://files.pythonhosted.org/packages/0d/15/def96774b9d7eb198ddadfcbd20281b20ebb510580419197e225f5c55c3e/numpy-2.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c4913079974eeb5c16ccfd2b1f09354b8fed7e0d6f2cab933104a09a6419b1ee", size = 15642053, upload_time = "2025-06-21T12:23:43.697Z" }, - { url = "https://files.pythonhosted.org/packages/2b/57/c3203974762a759540c6ae71d0ea2341c1fa41d84e4971a8e76d7141678a/numpy-2.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:010ce9b4f00d5c036053ca684c77441f2f2c934fd23bee058b4d6f196efd8280", size = 18434184, upload_time = "2025-06-21T12:24:10.708Z" }, - { url = "https://files.pythonhosted.org/packages/22/8a/ccdf201457ed8ac6245187850aff4ca56a79edbea4829f4e9f14d46fa9a5/numpy-2.3.1-cp313-cp313t-win32.whl", hash = "sha256:6269b9edfe32912584ec496d91b00b6d34282ca1d07eb10e82dfc780907d6c2e", size = 6440678, upload_time = "2025-06-21T12:24:21.596Z" }, - { url = "https://files.pythonhosted.org/packages/f1/7e/7f431d8bd8eb7e03d79294aed238b1b0b174b3148570d03a8a8a8f6a0da9/numpy-2.3.1-cp313-cp313t-win_amd64.whl", hash = "sha256:2a809637460e88a113e186e87f228d74ae2852a2e0c44de275263376f17b5bdc", size = 12870697, upload_time = "2025-06-21T12:24:40.644Z" }, - { url = "https://files.pythonhosted.org/packages/d4/ca/af82bf0fad4c3e573c6930ed743b5308492ff19917c7caaf2f9b6f9e2e98/numpy-2.3.1-cp313-cp313t-win_arm64.whl", hash = "sha256:eccb9a159db9aed60800187bc47a6d3451553f0e1b08b068d8b277ddfbb9b244", size = 10260376, upload_time = "2025-06-21T12:24:56.884Z" }, +version = "2.3.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d0/19/95b3d357407220ed24c139018d2518fab0a61a948e68286a25f1a4d049ff/numpy-2.3.3.tar.gz", hash = "sha256:ddc7c39727ba62b80dfdbedf400d1c10ddfa8eefbd7ec8dcb118be8b56d31029", size = 20576648 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/5d/bb7fc075b762c96329147799e1bcc9176ab07ca6375ea976c475482ad5b3/numpy-2.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cfdd09f9c84a1a934cde1eec2267f0a43a7cd44b2cca4ff95b7c0d14d144b0bf", size = 20957014 }, + { url = "https://files.pythonhosted.org/packages/6b/0e/c6211bb92af26517acd52125a237a92afe9c3124c6a68d3b9f81b62a0568/numpy-2.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cb32e3cf0f762aee47ad1ddc6672988f7f27045b0783c887190545baba73aa25", size = 14185220 }, + { url = "https://files.pythonhosted.org/packages/22/f2/07bb754eb2ede9073f4054f7c0286b0d9d2e23982e090a80d478b26d35ca/numpy-2.3.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:396b254daeb0a57b1fe0ecb5e3cff6fa79a380fa97c8f7781a6d08cd429418fe", size = 5113918 }, + { url = "https://files.pythonhosted.org/packages/81/0a/afa51697e9fb74642f231ea36aca80fa17c8fb89f7a82abd5174023c3960/numpy-2.3.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:067e3d7159a5d8f8a0b46ee11148fc35ca9b21f61e3c49fbd0a027450e65a33b", size = 6647922 }, + { url = "https://files.pythonhosted.org/packages/5d/f5/122d9cdb3f51c520d150fef6e87df9279e33d19a9611a87c0d2cf78a89f4/numpy-2.3.3-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c02d0629d25d426585fb2e45a66154081b9fa677bc92a881ff1d216bc9919a8", size = 14281991 }, + { url = "https://files.pythonhosted.org/packages/51/64/7de3c91e821a2debf77c92962ea3fe6ac2bc45d0778c1cbe15d4fce2fd94/numpy-2.3.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d9192da52b9745f7f0766531dcfa978b7763916f158bb63bdb8a1eca0068ab20", size = 16641643 }, + { url = "https://files.pythonhosted.org/packages/30/e4/961a5fa681502cd0d68907818b69f67542695b74e3ceaa513918103b7e80/numpy-2.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:cd7de500a5b66319db419dc3c345244404a164beae0d0937283b907d8152e6ea", size = 16056787 }, + { url = "https://files.pythonhosted.org/packages/99/26/92c912b966e47fbbdf2ad556cb17e3a3088e2e1292b9833be1dfa5361a1a/numpy-2.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:93d4962d8f82af58f0b2eb85daaf1b3ca23fe0a85d0be8f1f2b7bb46034e56d7", size = 18579598 }, + { url = "https://files.pythonhosted.org/packages/17/b6/fc8f82cb3520768718834f310c37d96380d9dc61bfdaf05fe5c0b7653e01/numpy-2.3.3-cp312-cp312-win32.whl", hash = "sha256:5534ed6b92f9b7dca6c0a19d6df12d41c68b991cef051d108f6dbff3babc4ebf", size = 6320800 }, + { url = "https://files.pythonhosted.org/packages/32/ee/de999f2625b80d043d6d2d628c07d0d5555a677a3cf78fdf868d409b8766/numpy-2.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:497d7cad08e7092dba36e3d296fe4c97708c93daf26643a1ae4b03f6294d30eb", size = 12786615 }, + { url = "https://files.pythonhosted.org/packages/49/6e/b479032f8a43559c383acb20816644f5f91c88f633d9271ee84f3b3a996c/numpy-2.3.3-cp312-cp312-win_arm64.whl", hash = "sha256:ca0309a18d4dfea6fc6262a66d06c26cfe4640c3926ceec90e57791a82b6eee5", size = 10195936 }, + { url = "https://files.pythonhosted.org/packages/7d/b9/984c2b1ee61a8b803bf63582b4ac4242cf76e2dbd663efeafcb620cc0ccb/numpy-2.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f5415fb78995644253370985342cd03572ef8620b934da27d77377a2285955bf", size = 20949588 }, + { url = "https://files.pythonhosted.org/packages/a6/e4/07970e3bed0b1384d22af1e9912527ecbeb47d3b26e9b6a3bced068b3bea/numpy-2.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d00de139a3324e26ed5b95870ce63be7ec7352171bc69a4cf1f157a48e3eb6b7", size = 14177802 }, + { url = "https://files.pythonhosted.org/packages/35/c7/477a83887f9de61f1203bad89cf208b7c19cc9fef0cebef65d5a1a0619f2/numpy-2.3.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:9dc13c6a5829610cc07422bc74d3ac083bd8323f14e2827d992f9e52e22cd6a6", size = 5106537 }, + { url = "https://files.pythonhosted.org/packages/52/47/93b953bd5866a6f6986344d045a207d3f1cfbad99db29f534ea9cee5108c/numpy-2.3.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:d79715d95f1894771eb4e60fb23f065663b2298f7d22945d66877aadf33d00c7", size = 6640743 }, + { url = "https://files.pythonhosted.org/packages/23/83/377f84aaeb800b64c0ef4de58b08769e782edcefa4fea712910b6f0afd3c/numpy-2.3.3-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:952cfd0748514ea7c3afc729a0fc639e61655ce4c55ab9acfab14bda4f402b4c", size = 14278881 }, + { url = "https://files.pythonhosted.org/packages/9a/a5/bf3db6e66c4b160d6ea10b534c381a1955dfab34cb1017ea93aa33c70ed3/numpy-2.3.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5b83648633d46f77039c29078751f80da65aa64d5622a3cd62aaef9d835b6c93", size = 16636301 }, + { url = "https://files.pythonhosted.org/packages/a2/59/1287924242eb4fa3f9b3a2c30400f2e17eb2707020d1c5e3086fe7330717/numpy-2.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b001bae8cea1c7dfdb2ae2b017ed0a6f2102d7a70059df1e338e307a4c78a8ae", size = 16053645 }, + { url = "https://files.pythonhosted.org/packages/e6/93/b3d47ed882027c35e94ac2320c37e452a549f582a5e801f2d34b56973c97/numpy-2.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8e9aced64054739037d42fb84c54dd38b81ee238816c948c8f3ed134665dcd86", size = 18578179 }, + { url = "https://files.pythonhosted.org/packages/20/d9/487a2bccbf7cc9d4bfc5f0f197761a5ef27ba870f1e3bbb9afc4bbe3fcc2/numpy-2.3.3-cp313-cp313-win32.whl", hash = "sha256:9591e1221db3f37751e6442850429b3aabf7026d3b05542d102944ca7f00c8a8", size = 6312250 }, + { url = "https://files.pythonhosted.org/packages/1b/b5/263ebbbbcede85028f30047eab3d58028d7ebe389d6493fc95ae66c636ab/numpy-2.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:f0dadeb302887f07431910f67a14d57209ed91130be0adea2f9793f1a4f817cf", size = 12783269 }, + { url = "https://files.pythonhosted.org/packages/fa/75/67b8ca554bbeaaeb3fac2e8bce46967a5a06544c9108ec0cf5cece559b6c/numpy-2.3.3-cp313-cp313-win_arm64.whl", hash = "sha256:3c7cf302ac6e0b76a64c4aecf1a09e51abd9b01fc7feee80f6c43e3ab1b1dbc5", size = 10195314 }, + { url = "https://files.pythonhosted.org/packages/11/d0/0d1ddec56b162042ddfafeeb293bac672de9b0cfd688383590090963720a/numpy-2.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:eda59e44957d272846bb407aad19f89dc6f58fecf3504bd144f4c5cf81a7eacc", size = 21048025 }, + { url = "https://files.pythonhosted.org/packages/36/9e/1996ca6b6d00415b6acbdd3c42f7f03ea256e2c3f158f80bd7436a8a19f3/numpy-2.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:823d04112bc85ef5c4fda73ba24e6096c8f869931405a80aa8b0e604510a26bc", size = 14301053 }, + { url = "https://files.pythonhosted.org/packages/05/24/43da09aa764c68694b76e84b3d3f0c44cb7c18cdc1ba80e48b0ac1d2cd39/numpy-2.3.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:40051003e03db4041aa325da2a0971ba41cf65714e65d296397cc0e32de6018b", size = 5229444 }, + { url = "https://files.pythonhosted.org/packages/bc/14/50ffb0f22f7218ef8af28dd089f79f68289a7a05a208db9a2c5dcbe123c1/numpy-2.3.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:6ee9086235dd6ab7ae75aba5662f582a81ced49f0f1c6de4260a78d8f2d91a19", size = 6738039 }, + { url = "https://files.pythonhosted.org/packages/55/52/af46ac0795e09657d45a7f4db961917314377edecf66db0e39fa7ab5c3d3/numpy-2.3.3-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:94fcaa68757c3e2e668ddadeaa86ab05499a70725811e582b6a9858dd472fb30", size = 14352314 }, + { url = "https://files.pythonhosted.org/packages/a7/b1/dc226b4c90eb9f07a3fff95c2f0db3268e2e54e5cce97c4ac91518aee71b/numpy-2.3.3-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:da1a74b90e7483d6ce5244053399a614b1d6b7bc30a60d2f570e5071f8959d3e", size = 16701722 }, + { url = "https://files.pythonhosted.org/packages/9d/9d/9d8d358f2eb5eced14dba99f110d83b5cd9a4460895230f3b396ad19a323/numpy-2.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2990adf06d1ecee3b3dcbb4977dfab6e9f09807598d647f04d385d29e7a3c3d3", size = 16132755 }, + { url = "https://files.pythonhosted.org/packages/b6/27/b3922660c45513f9377b3fb42240bec63f203c71416093476ec9aa0719dc/numpy-2.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ed635ff692483b8e3f0fcaa8e7eb8a75ee71aa6d975388224f70821421800cea", size = 18651560 }, + { url = "https://files.pythonhosted.org/packages/5b/8e/3ab61a730bdbbc201bb245a71102aa609f0008b9ed15255500a99cd7f780/numpy-2.3.3-cp313-cp313t-win32.whl", hash = "sha256:a333b4ed33d8dc2b373cc955ca57babc00cd6f9009991d9edc5ddbc1bac36bcd", size = 6442776 }, + { url = "https://files.pythonhosted.org/packages/1c/3a/e22b766b11f6030dc2decdeff5c2fb1610768055603f9f3be88b6d192fb2/numpy-2.3.3-cp313-cp313t-win_amd64.whl", hash = "sha256:4384a169c4d8f97195980815d6fcad04933a7e1ab3b530921c3fef7a1c63426d", size = 12927281 }, + { url = "https://files.pythonhosted.org/packages/7b/42/c2e2bc48c5e9b2a83423f99733950fbefd86f165b468a3d85d52b30bf782/numpy-2.3.3-cp313-cp313t-win_arm64.whl", hash = "sha256:75370986cc0bc66f4ce5110ad35aae6d182cc4ce6433c40ad151f53690130bf1", size = 10265275 }, + { url = "https://files.pythonhosted.org/packages/6b/01/342ad585ad82419b99bcf7cebe99e61da6bedb89e213c5fd71acc467faee/numpy-2.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:cd052f1fa6a78dee696b58a914b7229ecfa41f0a6d96dc663c1220a55e137593", size = 20951527 }, + { url = "https://files.pythonhosted.org/packages/ef/d8/204e0d73fc1b7a9ee80ab1fe1983dd33a4d64a4e30a05364b0208e9a241a/numpy-2.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:414a97499480067d305fcac9716c29cf4d0d76db6ebf0bf3cbce666677f12652", size = 14186159 }, + { url = "https://files.pythonhosted.org/packages/22/af/f11c916d08f3a18fb8ba81ab72b5b74a6e42ead4c2846d270eb19845bf74/numpy-2.3.3-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:50a5fe69f135f88a2be9b6ca0481a68a136f6febe1916e4920e12f1a34e708a7", size = 5114624 }, + { url = "https://files.pythonhosted.org/packages/fb/11/0ed919c8381ac9d2ffacd63fd1f0c34d27e99cab650f0eb6f110e6ae4858/numpy-2.3.3-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:b912f2ed2b67a129e6a601e9d93d4fa37bef67e54cac442a2f588a54afe5c67a", size = 6642627 }, + { url = "https://files.pythonhosted.org/packages/ee/83/deb5f77cb0f7ba6cb52b91ed388b47f8f3c2e9930d4665c600408d9b90b9/numpy-2.3.3-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9e318ee0596d76d4cb3d78535dc005fa60e5ea348cd131a51e99d0bdbe0b54fe", size = 14296926 }, + { url = "https://files.pythonhosted.org/packages/77/cc/70e59dcb84f2b005d4f306310ff0a892518cc0c8000a33d0e6faf7ca8d80/numpy-2.3.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ce020080e4a52426202bdb6f7691c65bb55e49f261f31a8f506c9f6bc7450421", size = 16638958 }, + { url = "https://files.pythonhosted.org/packages/b6/5a/b2ab6c18b4257e099587d5b7f903317bd7115333ad8d4ec4874278eafa61/numpy-2.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e6687dc183aa55dae4a705b35f9c0f8cb178bcaa2f029b241ac5356221d5c021", size = 16071920 }, + { url = "https://files.pythonhosted.org/packages/b8/f1/8b3fdc44324a259298520dd82147ff648979bed085feeacc1250ef1656c0/numpy-2.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d8f3b1080782469fdc1718c4ed1d22549b5fb12af0d57d35e992158a772a37cf", size = 18577076 }, + { url = "https://files.pythonhosted.org/packages/f0/a1/b87a284fb15a42e9274e7fcea0dad259d12ddbf07c1595b26883151ca3b4/numpy-2.3.3-cp314-cp314-win32.whl", hash = "sha256:cb248499b0bc3be66ebd6578b83e5acacf1d6cb2a77f2248ce0e40fbec5a76d0", size = 6366952 }, + { url = "https://files.pythonhosted.org/packages/70/5f/1816f4d08f3b8f66576d8433a66f8fa35a5acfb3bbd0bf6c31183b003f3d/numpy-2.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:691808c2b26b0f002a032c73255d0bd89751425f379f7bcd22d140db593a96e8", size = 12919322 }, + { url = "https://files.pythonhosted.org/packages/8c/de/072420342e46a8ea41c324a555fa90fcc11637583fb8df722936aed1736d/numpy-2.3.3-cp314-cp314-win_arm64.whl", hash = "sha256:9ad12e976ca7b10f1774b03615a2a4bab8addce37ecc77394d8e986927dc0dfe", size = 10478630 }, + { url = "https://files.pythonhosted.org/packages/d5/df/ee2f1c0a9de7347f14da5dd3cd3c3b034d1b8607ccb6883d7dd5c035d631/numpy-2.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9cc48e09feb11e1db00b320e9d30a4151f7369afb96bd0e48d942d09da3a0d00", size = 21047987 }, + { url = "https://files.pythonhosted.org/packages/d6/92/9453bdc5a4e9e69cf4358463f25e8260e2ffc126d52e10038b9077815989/numpy-2.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:901bf6123879b7f251d3631967fd574690734236075082078e0571977c6a8e6a", size = 14301076 }, + { url = "https://files.pythonhosted.org/packages/13/77/1447b9eb500f028bb44253105bd67534af60499588a5149a94f18f2ca917/numpy-2.3.3-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:7f025652034199c301049296b59fa7d52c7e625017cae4c75d8662e377bf487d", size = 5229491 }, + { url = "https://files.pythonhosted.org/packages/3d/f9/d72221b6ca205f9736cb4b2ce3b002f6e45cd67cd6a6d1c8af11a2f0b649/numpy-2.3.3-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:533ca5f6d325c80b6007d4d7fb1984c303553534191024ec6a524a4c92a5935a", size = 6737913 }, + { url = "https://files.pythonhosted.org/packages/3c/5f/d12834711962ad9c46af72f79bb31e73e416ee49d17f4c797f72c96b6ca5/numpy-2.3.3-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0edd58682a399824633b66885d699d7de982800053acf20be1eaa46d92009c54", size = 14352811 }, + { url = "https://files.pythonhosted.org/packages/a1/0d/fdbec6629d97fd1bebed56cd742884e4eead593611bbe1abc3eb40d304b2/numpy-2.3.3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:367ad5d8fbec5d9296d18478804a530f1191e24ab4d75ab408346ae88045d25e", size = 16702689 }, + { url = "https://files.pythonhosted.org/packages/9b/09/0a35196dc5575adde1eb97ddfbc3e1687a814f905377621d18ca9bc2b7dd/numpy-2.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8f6ac61a217437946a1fa48d24c47c91a0c4f725237871117dea264982128097", size = 16133855 }, + { url = "https://files.pythonhosted.org/packages/7a/ca/c9de3ea397d576f1b6753eaa906d4cdef1bf97589a6d9825a349b4729cc2/numpy-2.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:179a42101b845a816d464b6fe9a845dfaf308fdfc7925387195570789bb2c970", size = 18652520 }, + { url = "https://files.pythonhosted.org/packages/fd/c2/e5ed830e08cd0196351db55db82f65bc0ab05da6ef2b72a836dcf1936d2f/numpy-2.3.3-cp314-cp314t-win32.whl", hash = "sha256:1250c5d3d2562ec4174bce2e3a1523041595f9b651065e4a4473f5f48a6bc8a5", size = 6515371 }, + { url = "https://files.pythonhosted.org/packages/47/c7/b0f6b5b67f6788a0725f744496badbb604d226bf233ba716683ebb47b570/numpy-2.3.3-cp314-cp314t-win_amd64.whl", hash = "sha256:b37a0b2e5935409daebe82c1e42274d30d9dd355852529eab91dab8dcca7419f", size = 13112576 }, + { url = "https://files.pythonhosted.org/packages/06/b9/33bba5ff6fb679aa0b1f8a07e853f002a6b04b9394db3069a1270a7784ca/numpy-2.3.3-cp314-cp314t-win_arm64.whl", hash = "sha256:78c9f6560dc7e6b3990e32df7ea1a50bbd0e2a111e05209963f5ddcab7073b0b", size = 10545953 }, ] [[package]] @@ -1637,9 +1752,9 @@ dependencies = [ { name = "pyarrow" }, { name = "requests" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/1a/d1/5c0bb2a714ebea7df131b8e87010eab39d0df75878f6785f2a214ff66bb2/oda_reader-1.2.2.tar.gz", hash = "sha256:55be081e1744e75184eca3d09e794fad71958201d08b48fb497aac97a95f3685", size = 35630, upload_time = "2025-06-16T16:15:05.49Z" } +sdist = { url = "https://files.pythonhosted.org/packages/1a/d1/5c0bb2a714ebea7df131b8e87010eab39d0df75878f6785f2a214ff66bb2/oda_reader-1.2.2.tar.gz", hash = "sha256:55be081e1744e75184eca3d09e794fad71958201d08b48fb497aac97a95f3685", size = 35630 } wheels = [ - { url = "https://files.pythonhosted.org/packages/d8/ec/59338ec9108848dc53f50e7381b9817595bf98f414f4a732100a06828a3b/oda_reader-1.2.2-py3-none-any.whl", hash = "sha256:7f7b854ab1e9bc2cf64b6c63bd56a2ac64cb90ec054518fd01b741fd518cf007", size = 45314, upload_time = "2025-06-16T16:15:04.328Z" }, + { url = "https://files.pythonhosted.org/packages/d8/ec/59338ec9108848dc53f50e7381b9817595bf98f414f4a732100a06828a3b/oda_reader-1.2.2-py3-none-any.whl", hash = "sha256:7f7b854ab1e9bc2cf64b6c63bd56a2ac64cb90ec054518fd01b741fd518cf007", size = 45314 }, ] [[package]] @@ -1649,32 +1764,32 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "et-xmlfile" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/3d/f9/88d94a75de065ea32619465d2f77b29a0469500e99012523b91cc4141cd1/openpyxl-3.1.5.tar.gz", hash = "sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050", size = 186464, upload_time = "2024-06-28T14:03:44.161Z" } +sdist = { url = "https://files.pythonhosted.org/packages/3d/f9/88d94a75de065ea32619465d2f77b29a0469500e99012523b91cc4141cd1/openpyxl-3.1.5.tar.gz", hash = "sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050", size = 186464 } wheels = [ - { url = "https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl", hash = "sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2", size = 250910, upload_time = "2024-06-28T14:03:41.161Z" }, + { url = "https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl", hash = "sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2", size = 250910 }, ] [[package]] name = "packaging" version = "25.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727, upload_time = "2025-04-19T11:48:59.673Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727 } wheels = [ - { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469, upload_time = "2025-04-19T11:48:57.875Z" }, + { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469 }, ] [[package]] name = "paginate" version = "0.5.7" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ec/46/68dde5b6bc00c1296ec6466ab27dddede6aec9af1b99090e1107091b3b84/paginate-0.5.7.tar.gz", hash = "sha256:22bd083ab41e1a8b4f3690544afb2c60c25e5c9a63a30fa2f483f6c60c8e5945", size = 19252, upload_time = "2024-08-25T14:17:24.139Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ec/46/68dde5b6bc00c1296ec6466ab27dddede6aec9af1b99090e1107091b3b84/paginate-0.5.7.tar.gz", hash = "sha256:22bd083ab41e1a8b4f3690544afb2c60c25e5c9a63a30fa2f483f6c60c8e5945", size = 19252 } wheels = [ - { url = "https://files.pythonhosted.org/packages/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl", hash = "sha256:b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591", size = 13746, upload_time = "2024-08-25T14:17:22.55Z" }, + { url = "https://files.pythonhosted.org/packages/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl", hash = "sha256:b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591", size = 13746 }, ] [[package]] name = "pandas" -version = "2.3.1" +version = "2.3.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, @@ -1682,62 +1797,65 @@ dependencies = [ { name = "pytz" }, { name = "tzdata" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d1/6f/75aa71f8a14267117adeeed5d21b204770189c0a0025acbdc03c337b28fc/pandas-2.3.1.tar.gz", hash = "sha256:0a95b9ac964fe83ce317827f80304d37388ea77616b1425f0ae41c9d2d0d7bb2", size = 4487493, upload_time = "2025-07-07T19:20:04.079Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/46/de/b8445e0f5d217a99fe0eeb2f4988070908979bec3587c0633e5428ab596c/pandas-2.3.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:689968e841136f9e542020698ee1c4fbe9caa2ed2213ae2388dc7b81721510d3", size = 11588172, upload_time = "2025-07-07T19:18:52.054Z" }, - { url = "https://files.pythonhosted.org/packages/1e/e0/801cdb3564e65a5ac041ab99ea6f1d802a6c325bb6e58c79c06a3f1cd010/pandas-2.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:025e92411c16cbe5bb2a4abc99732a6b132f439b8aab23a59fa593eb00704232", size = 10717365, upload_time = "2025-07-07T19:18:54.785Z" }, - { url = "https://files.pythonhosted.org/packages/51/a5/c76a8311833c24ae61a376dbf360eb1b1c9247a5d9c1e8b356563b31b80c/pandas-2.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b7ff55f31c4fcb3e316e8f7fa194566b286d6ac430afec0d461163312c5841e", size = 11280411, upload_time = "2025-07-07T19:18:57.045Z" }, - { url = "https://files.pythonhosted.org/packages/da/01/e383018feba0a1ead6cf5fe8728e5d767fee02f06a3d800e82c489e5daaf/pandas-2.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7dcb79bf373a47d2a40cf7232928eb7540155abbc460925c2c96d2d30b006eb4", size = 11988013, upload_time = "2025-07-07T19:18:59.771Z" }, - { url = "https://files.pythonhosted.org/packages/5b/14/cec7760d7c9507f11c97d64f29022e12a6cc4fc03ac694535e89f88ad2ec/pandas-2.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:56a342b231e8862c96bdb6ab97170e203ce511f4d0429589c8ede1ee8ece48b8", size = 12767210, upload_time = "2025-07-07T19:19:02.944Z" }, - { url = "https://files.pythonhosted.org/packages/50/b9/6e2d2c6728ed29fb3d4d4d302504fb66f1a543e37eb2e43f352a86365cdf/pandas-2.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ca7ed14832bce68baef331f4d7f294411bed8efd032f8109d690df45e00c4679", size = 13440571, upload_time = "2025-07-07T19:19:06.82Z" }, - { url = "https://files.pythonhosted.org/packages/80/a5/3a92893e7399a691bad7664d977cb5e7c81cf666c81f89ea76ba2bff483d/pandas-2.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:ac942bfd0aca577bef61f2bc8da8147c4ef6879965ef883d8e8d5d2dc3e744b8", size = 10987601, upload_time = "2025-07-07T19:19:09.589Z" }, - { url = "https://files.pythonhosted.org/packages/32/ed/ff0a67a2c5505e1854e6715586ac6693dd860fbf52ef9f81edee200266e7/pandas-2.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9026bd4a80108fac2239294a15ef9003c4ee191a0f64b90f170b40cfb7cf2d22", size = 11531393, upload_time = "2025-07-07T19:19:12.245Z" }, - { url = "https://files.pythonhosted.org/packages/c7/db/d8f24a7cc9fb0972adab0cc80b6817e8bef888cfd0024eeb5a21c0bb5c4a/pandas-2.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6de8547d4fdb12421e2d047a2c446c623ff4c11f47fddb6b9169eb98ffba485a", size = 10668750, upload_time = "2025-07-07T19:19:14.612Z" }, - { url = "https://files.pythonhosted.org/packages/0f/b0/80f6ec783313f1e2356b28b4fd8d2148c378370045da918c73145e6aab50/pandas-2.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:782647ddc63c83133b2506912cc6b108140a38a37292102aaa19c81c83db2928", size = 11342004, upload_time = "2025-07-07T19:19:16.857Z" }, - { url = "https://files.pythonhosted.org/packages/e9/e2/20a317688435470872885e7fc8f95109ae9683dec7c50be29b56911515a5/pandas-2.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ba6aff74075311fc88504b1db890187a3cd0f887a5b10f5525f8e2ef55bfdb9", size = 12050869, upload_time = "2025-07-07T19:19:19.265Z" }, - { url = "https://files.pythonhosted.org/packages/55/79/20d746b0a96c67203a5bee5fb4e00ac49c3e8009a39e1f78de264ecc5729/pandas-2.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e5635178b387bd2ba4ac040f82bc2ef6e6b500483975c4ebacd34bec945fda12", size = 12750218, upload_time = "2025-07-07T19:19:21.547Z" }, - { url = "https://files.pythonhosted.org/packages/7c/0f/145c8b41e48dbf03dd18fdd7f24f8ba95b8254a97a3379048378f33e7838/pandas-2.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6f3bf5ec947526106399a9e1d26d40ee2b259c66422efdf4de63c848492d91bb", size = 13416763, upload_time = "2025-07-07T19:19:23.939Z" }, - { url = "https://files.pythonhosted.org/packages/b2/c0/54415af59db5cdd86a3d3bf79863e8cc3fa9ed265f0745254061ac09d5f2/pandas-2.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:1c78cf43c8fde236342a1cb2c34bcff89564a7bfed7e474ed2fffa6aed03a956", size = 10987482, upload_time = "2025-07-07T19:19:42.699Z" }, - { url = "https://files.pythonhosted.org/packages/48/64/2fd2e400073a1230e13b8cd604c9bc95d9e3b962e5d44088ead2e8f0cfec/pandas-2.3.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:8dfc17328e8da77be3cf9f47509e5637ba8f137148ed0e9b5241e1baf526e20a", size = 12029159, upload_time = "2025-07-07T19:19:26.362Z" }, - { url = "https://files.pythonhosted.org/packages/d8/0a/d84fd79b0293b7ef88c760d7dca69828d867c89b6d9bc52d6a27e4d87316/pandas-2.3.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:ec6c851509364c59a5344458ab935e6451b31b818be467eb24b0fe89bd05b6b9", size = 11393287, upload_time = "2025-07-07T19:19:29.157Z" }, - { url = "https://files.pythonhosted.org/packages/50/ae/ff885d2b6e88f3c7520bb74ba319268b42f05d7e583b5dded9837da2723f/pandas-2.3.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:911580460fc4884d9b05254b38a6bfadddfcc6aaef856fb5859e7ca202e45275", size = 11309381, upload_time = "2025-07-07T19:19:31.436Z" }, - { url = "https://files.pythonhosted.org/packages/85/86/1fa345fc17caf5d7780d2699985c03dbe186c68fee00b526813939062bb0/pandas-2.3.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f4d6feeba91744872a600e6edbbd5b033005b431d5ae8379abee5bcfa479fab", size = 11883998, upload_time = "2025-07-07T19:19:34.267Z" }, - { url = "https://files.pythonhosted.org/packages/81/aa/e58541a49b5e6310d89474333e994ee57fea97c8aaa8fc7f00b873059bbf/pandas-2.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:fe37e757f462d31a9cd7580236a82f353f5713a80e059a29753cf938c6775d96", size = 12704705, upload_time = "2025-07-07T19:19:36.856Z" }, - { url = "https://files.pythonhosted.org/packages/d5/f9/07086f5b0f2a19872554abeea7658200824f5835c58a106fa8f2ae96a46c/pandas-2.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5db9637dbc24b631ff3707269ae4559bce4b7fd75c1c4d7e13f40edc42df4444", size = 13189044, upload_time = "2025-07-07T19:19:39.999Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/79/8e/0e90233ac205ad182bd6b422532695d2b9414944a280488105d598c70023/pandas-2.3.2.tar.gz", hash = "sha256:ab7b58f8f82706890924ccdfb5f48002b83d2b5a3845976a9fb705d36c34dcdb", size = 4488684 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/db/614c20fb7a85a14828edd23f1c02db58a30abf3ce76f38806155d160313c/pandas-2.3.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3fbb977f802156e7a3f829e9d1d5398f6192375a3e2d1a9ee0803e35fe70a2b9", size = 11587652 }, + { url = "https://files.pythonhosted.org/packages/99/b0/756e52f6582cade5e746f19bad0517ff27ba9c73404607c0306585c201b3/pandas-2.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1b9b52693123dd234b7c985c68b709b0b009f4521000d0525f2b95c22f15944b", size = 10717686 }, + { url = "https://files.pythonhosted.org/packages/37/4c/dd5ccc1e357abfeee8353123282de17997f90ff67855f86154e5a13b81e5/pandas-2.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0bd281310d4f412733f319a5bc552f86d62cddc5f51d2e392c8787335c994175", size = 11278722 }, + { url = "https://files.pythonhosted.org/packages/d3/a4/f7edcfa47e0a88cda0be8b068a5bae710bf264f867edfdf7b71584ace362/pandas-2.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96d31a6b4354e3b9b8a2c848af75d31da390657e3ac6f30c05c82068b9ed79b9", size = 11987803 }, + { url = "https://files.pythonhosted.org/packages/f6/61/1bce4129f93ab66f1c68b7ed1c12bac6a70b1b56c5dab359c6bbcd480b52/pandas-2.3.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:df4df0b9d02bb873a106971bb85d448378ef14b86ba96f035f50bbd3688456b4", size = 12766345 }, + { url = "https://files.pythonhosted.org/packages/8e/46/80d53de70fee835531da3a1dae827a1e76e77a43ad22a8cd0f8142b61587/pandas-2.3.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:213a5adf93d020b74327cb2c1b842884dbdd37f895f42dcc2f09d451d949f811", size = 13439314 }, + { url = "https://files.pythonhosted.org/packages/28/30/8114832daff7489f179971dbc1d854109b7f4365a546e3ea75b6516cea95/pandas-2.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:8c13b81a9347eb8c7548f53fd9a4f08d4dfe996836543f805c987bafa03317ae", size = 10983326 }, + { url = "https://files.pythonhosted.org/packages/27/64/a2f7bf678af502e16b472527735d168b22b7824e45a4d7e96a4fbb634b59/pandas-2.3.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0c6ecbac99a354a051ef21c5307601093cb9e0f4b1855984a084bfec9302699e", size = 11531061 }, + { url = "https://files.pythonhosted.org/packages/54/4c/c3d21b2b7769ef2f4c2b9299fcadd601efa6729f1357a8dbce8dd949ed70/pandas-2.3.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c6f048aa0fd080d6a06cc7e7537c09b53be6642d330ac6f54a600c3ace857ee9", size = 10668666 }, + { url = "https://files.pythonhosted.org/packages/50/e2/f775ba76ecfb3424d7f5862620841cf0edb592e9abd2d2a5387d305fe7a8/pandas-2.3.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0064187b80a5be6f2f9c9d6bdde29372468751dfa89f4211a3c5871854cfbf7a", size = 11332835 }, + { url = "https://files.pythonhosted.org/packages/8f/52/0634adaace9be2d8cac9ef78f05c47f3a675882e068438b9d7ec7ef0c13f/pandas-2.3.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ac8c320bded4718b298281339c1a50fb00a6ba78cb2a63521c39bec95b0209b", size = 12057211 }, + { url = "https://files.pythonhosted.org/packages/0b/9d/2df913f14b2deb9c748975fdb2491da1a78773debb25abbc7cbc67c6b549/pandas-2.3.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:114c2fe4f4328cf98ce5716d1532f3ab79c5919f95a9cfee81d9140064a2e4d6", size = 12749277 }, + { url = "https://files.pythonhosted.org/packages/87/af/da1a2417026bd14d98c236dba88e39837182459d29dcfcea510b2ac9e8a1/pandas-2.3.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:48fa91c4dfb3b2b9bfdb5c24cd3567575f4e13f9636810462ffed8925352be5a", size = 13415256 }, + { url = "https://files.pythonhosted.org/packages/22/3c/f2af1ce8840ef648584a6156489636b5692c162771918aa95707c165ad2b/pandas-2.3.2-cp313-cp313-win_amd64.whl", hash = "sha256:12d039facec710f7ba305786837d0225a3444af7bbd9c15c32ca2d40d157ed8b", size = 10982579 }, + { url = "https://files.pythonhosted.org/packages/f3/98/8df69c4097a6719e357dc249bf437b8efbde808038268e584421696cbddf/pandas-2.3.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:c624b615ce97864eb588779ed4046186f967374185c047070545253a52ab2d57", size = 12028163 }, + { url = "https://files.pythonhosted.org/packages/0e/23/f95cbcbea319f349e10ff90db488b905c6883f03cbabd34f6b03cbc3c044/pandas-2.3.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:0cee69d583b9b128823d9514171cabb6861e09409af805b54459bd0c821a35c2", size = 11391860 }, + { url = "https://files.pythonhosted.org/packages/ad/1b/6a984e98c4abee22058aa75bfb8eb90dce58cf8d7296f8bc56c14bc330b0/pandas-2.3.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2319656ed81124982900b4c37f0e0c58c015af9a7bbc62342ba5ad07ace82ba9", size = 11309830 }, + { url = "https://files.pythonhosted.org/packages/15/d5/f0486090eb18dd8710bf60afeaf638ba6817047c0c8ae5c6a25598665609/pandas-2.3.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b37205ad6f00d52f16b6d09f406434ba928c1a1966e2771006a9033c736d30d2", size = 11883216 }, + { url = "https://files.pythonhosted.org/packages/10/86/692050c119696da19e20245bbd650d8dfca6ceb577da027c3a73c62a047e/pandas-2.3.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:837248b4fc3a9b83b9c6214699a13f069dc13510a6a6d7f9ba33145d2841a012", size = 12699743 }, + { url = "https://files.pythonhosted.org/packages/cd/d7/612123674d7b17cf345aad0a10289b2a384bff404e0463a83c4a3a59d205/pandas-2.3.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:d2c3554bd31b731cd6490d94a28f3abb8dd770634a9e06eb6d2911b9827db370", size = 13186141 }, ] [[package]] name = "pandocfilters" version = "1.5.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/70/6f/3dd4940bbe001c06a65f88e36bad298bc7a0de5036115639926b0c5c0458/pandocfilters-1.5.1.tar.gz", hash = "sha256:002b4a555ee4ebc03f8b66307e287fa492e4a77b4ea14d3f934328297bb4939e", size = 8454, upload_time = "2024-01-18T20:08:13.726Z" } +sdist = { url = "https://files.pythonhosted.org/packages/70/6f/3dd4940bbe001c06a65f88e36bad298bc7a0de5036115639926b0c5c0458/pandocfilters-1.5.1.tar.gz", hash = "sha256:002b4a555ee4ebc03f8b66307e287fa492e4a77b4ea14d3f934328297bb4939e", size = 8454 } wheels = [ - { url = "https://files.pythonhosted.org/packages/ef/af/4fbc8cab944db5d21b7e2a5b8e9211a03a79852b1157e2c102fcc61ac440/pandocfilters-1.5.1-py2.py3-none-any.whl", hash = "sha256:93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc", size = 8663, upload_time = "2024-01-18T20:08:11.28Z" }, + { url = "https://files.pythonhosted.org/packages/ef/af/4fbc8cab944db5d21b7e2a5b8e9211a03a79852b1157e2c102fcc61ac440/pandocfilters-1.5.1-py2.py3-none-any.whl", hash = "sha256:93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc", size = 8663 }, ] [[package]] name = "parso" -version = "0.8.4" +version = "0.8.5" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/66/94/68e2e17afaa9169cf6412ab0f28623903be73d1b32e208d9e8e541bb086d/parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d", size = 400609, upload_time = "2024-04-05T09:43:55.897Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d4/de/53e0bcf53d13e005bd8c92e7855142494f41171b34c2536b86187474184d/parso-0.8.5.tar.gz", hash = "sha256:034d7354a9a018bdce352f48b2a8a450f05e9d6ee85db84764e9b6bd96dafe5a", size = 401205 } wheels = [ - { url = "https://files.pythonhosted.org/packages/c6/ac/dac4a63f978e4dcb3c6d3a78c4d8e0192a113d288502a1216950c41b1027/parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18", size = 103650, upload_time = "2024-04-05T09:43:53.299Z" }, + { url = "https://files.pythonhosted.org/packages/16/32/f8e3c85d1d5250232a5d3477a2a28cc291968ff175caeadaf3cc19ce0e4a/parso-0.8.5-py2.py3-none-any.whl", hash = "sha256:646204b5ee239c396d040b90f9e272e9a8017c630092bf59980beb62fd033887", size = 106668 }, ] [[package]] name = "pathspec" version = "0.12.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ca/bc/f35b8446f4531a7cb215605d100cd88b7ac6f44ab3fc94870c120ab3adbf/pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712", size = 51043, upload_time = "2023-12-10T22:30:45Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ca/bc/f35b8446f4531a7cb215605d100cd88b7ac6f44ab3fc94870c120ab3adbf/pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712", size = 51043 } wheels = [ - { url = "https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", size = 31191, upload_time = "2023-12-10T22:30:43.14Z" }, + { url = "https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", size = 31191 }, ] [[package]] name = "petl" -version = "1.7.16" +version = "1.7.17" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/99/28/ce7321fbd3b981fd9c212adf7455e0e4e42babebd83b92e24f8265d13dd3/petl-1.7.16.tar.gz", hash = "sha256:9c2fea64d859da45e120fd86d471e5387396cc45d5d4986efa79679f18eb8752", size = 420780, upload_time = "2025-04-04T23:54:50.921Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a5/07/16a40e30700f7c6975e62cba01c2f94afbb347dd8ed224a5918c686a47fe/petl-1.7.17.tar.gz", hash = "sha256:802696187c2ef35894c4acf3c0ff9fecff6035cb335944c194416b9a18e8390b", size = 424376 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9f/5c/ea831abc18dd3268046d7d9a0119f1f8ddc69642e0a5245f839602b8114d/petl-1.7.17-py3-none-any.whl", hash = "sha256:53785128bcdf46eb4472638ad572acc6d87cc83f80b567fed06ee4a947eea5d1", size = 233093 }, +] [[package]] name = "pexpect" @@ -1746,80 +1864,80 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "ptyprocess" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450, upload_time = "2023-11-25T09:07:26.339Z" } +sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450 } wheels = [ - { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772, upload_time = "2023-11-25T06:56:14.81Z" }, + { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772 }, ] [[package]] name = "pillow" version = "11.3.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f3/0d/d0d6dea55cd152ce3d6767bb38a8fc10e33796ba4ba210cbab9354b6d238/pillow-11.3.0.tar.gz", hash = "sha256:3828ee7586cd0b2091b6209e5ad53e20d0649bbe87164a459d0676e035e8f523", size = 47113069, upload_time = "2025-07-01T09:16:30.666Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/40/fe/1bc9b3ee13f68487a99ac9529968035cca2f0a51ec36892060edcc51d06a/pillow-11.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fdae223722da47b024b867c1ea0be64e0df702c5e0a60e27daad39bf960dd1e4", size = 5278800, upload_time = "2025-07-01T09:14:17.648Z" }, - { url = "https://files.pythonhosted.org/packages/2c/32/7e2ac19b5713657384cec55f89065fb306b06af008cfd87e572035b27119/pillow-11.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:921bd305b10e82b4d1f5e802b6850677f965d8394203d182f078873851dada69", size = 4686296, upload_time = "2025-07-01T09:14:19.828Z" }, - { url = "https://files.pythonhosted.org/packages/8e/1e/b9e12bbe6e4c2220effebc09ea0923a07a6da1e1f1bfbc8d7d29a01ce32b/pillow-11.3.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:eb76541cba2f958032d79d143b98a3a6b3ea87f0959bbe256c0b5e416599fd5d", size = 5871726, upload_time = "2025-07-03T13:10:04.448Z" }, - { url = "https://files.pythonhosted.org/packages/8d/33/e9200d2bd7ba00dc3ddb78df1198a6e80d7669cce6c2bdbeb2530a74ec58/pillow-11.3.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:67172f2944ebba3d4a7b54f2e95c786a3a50c21b88456329314caaa28cda70f6", size = 7644652, upload_time = "2025-07-03T13:10:10.391Z" }, - { url = "https://files.pythonhosted.org/packages/41/f1/6f2427a26fc683e00d985bc391bdd76d8dd4e92fac33d841127eb8fb2313/pillow-11.3.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97f07ed9f56a3b9b5f49d3661dc9607484e85c67e27f3e8be2c7d28ca032fec7", size = 5977787, upload_time = "2025-07-01T09:14:21.63Z" }, - { url = "https://files.pythonhosted.org/packages/e4/c9/06dd4a38974e24f932ff5f98ea3c546ce3f8c995d3f0985f8e5ba48bba19/pillow-11.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:676b2815362456b5b3216b4fd5bd89d362100dc6f4945154ff172e206a22c024", size = 6645236, upload_time = "2025-07-01T09:14:23.321Z" }, - { url = "https://files.pythonhosted.org/packages/40/e7/848f69fb79843b3d91241bad658e9c14f39a32f71a301bcd1d139416d1be/pillow-11.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3e184b2f26ff146363dd07bde8b711833d7b0202e27d13540bfe2e35a323a809", size = 6086950, upload_time = "2025-07-01T09:14:25.237Z" }, - { url = "https://files.pythonhosted.org/packages/0b/1a/7cff92e695a2a29ac1958c2a0fe4c0b2393b60aac13b04a4fe2735cad52d/pillow-11.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6be31e3fc9a621e071bc17bb7de63b85cbe0bfae91bb0363c893cbe67247780d", size = 6723358, upload_time = "2025-07-01T09:14:27.053Z" }, - { url = "https://files.pythonhosted.org/packages/26/7d/73699ad77895f69edff76b0f332acc3d497f22f5d75e5360f78cbcaff248/pillow-11.3.0-cp312-cp312-win32.whl", hash = "sha256:7b161756381f0918e05e7cb8a371fff367e807770f8fe92ecb20d905d0e1c149", size = 6275079, upload_time = "2025-07-01T09:14:30.104Z" }, - { url = "https://files.pythonhosted.org/packages/8c/ce/e7dfc873bdd9828f3b6e5c2bbb74e47a98ec23cc5c74fc4e54462f0d9204/pillow-11.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:a6444696fce635783440b7f7a9fc24b3ad10a9ea3f0ab66c5905be1c19ccf17d", size = 6986324, upload_time = "2025-07-01T09:14:31.899Z" }, - { url = "https://files.pythonhosted.org/packages/16/8f/b13447d1bf0b1f7467ce7d86f6e6edf66c0ad7cf44cf5c87a37f9bed9936/pillow-11.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:2aceea54f957dd4448264f9bf40875da0415c83eb85f55069d89c0ed436e3542", size = 2423067, upload_time = "2025-07-01T09:14:33.709Z" }, - { url = "https://files.pythonhosted.org/packages/1e/93/0952f2ed8db3a5a4c7a11f91965d6184ebc8cd7cbb7941a260d5f018cd2d/pillow-11.3.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:1c627742b539bba4309df89171356fcb3cc5a9178355b2727d1b74a6cf155fbd", size = 2128328, upload_time = "2025-07-01T09:14:35.276Z" }, - { url = "https://files.pythonhosted.org/packages/4b/e8/100c3d114b1a0bf4042f27e0f87d2f25e857e838034e98ca98fe7b8c0a9c/pillow-11.3.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:30b7c02f3899d10f13d7a48163c8969e4e653f8b43416d23d13d1bbfdc93b9f8", size = 2170652, upload_time = "2025-07-01T09:14:37.203Z" }, - { url = "https://files.pythonhosted.org/packages/aa/86/3f758a28a6e381758545f7cdb4942e1cb79abd271bea932998fc0db93cb6/pillow-11.3.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:7859a4cc7c9295f5838015d8cc0a9c215b77e43d07a25e460f35cf516df8626f", size = 2227443, upload_time = "2025-07-01T09:14:39.344Z" }, - { url = "https://files.pythonhosted.org/packages/01/f4/91d5b3ffa718df2f53b0dc109877993e511f4fd055d7e9508682e8aba092/pillow-11.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ec1ee50470b0d050984394423d96325b744d55c701a439d2bd66089bff963d3c", size = 5278474, upload_time = "2025-07-01T09:14:41.843Z" }, - { url = "https://files.pythonhosted.org/packages/f9/0e/37d7d3eca6c879fbd9dba21268427dffda1ab00d4eb05b32923d4fbe3b12/pillow-11.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7db51d222548ccfd274e4572fdbf3e810a5e66b00608862f947b163e613b67dd", size = 4686038, upload_time = "2025-07-01T09:14:44.008Z" }, - { url = "https://files.pythonhosted.org/packages/ff/b0/3426e5c7f6565e752d81221af9d3676fdbb4f352317ceafd42899aaf5d8a/pillow-11.3.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2d6fcc902a24ac74495df63faad1884282239265c6839a0a6416d33faedfae7e", size = 5864407, upload_time = "2025-07-03T13:10:15.628Z" }, - { url = "https://files.pythonhosted.org/packages/fc/c1/c6c423134229f2a221ee53f838d4be9d82bab86f7e2f8e75e47b6bf6cd77/pillow-11.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f0f5d8f4a08090c6d6d578351a2b91acf519a54986c055af27e7a93feae6d3f1", size = 7639094, upload_time = "2025-07-03T13:10:21.857Z" }, - { url = "https://files.pythonhosted.org/packages/ba/c9/09e6746630fe6372c67c648ff9deae52a2bc20897d51fa293571977ceb5d/pillow-11.3.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c37d8ba9411d6003bba9e518db0db0c58a680ab9fe5179f040b0463644bc9805", size = 5973503, upload_time = "2025-07-01T09:14:45.698Z" }, - { url = "https://files.pythonhosted.org/packages/d5/1c/a2a29649c0b1983d3ef57ee87a66487fdeb45132df66ab30dd37f7dbe162/pillow-11.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:13f87d581e71d9189ab21fe0efb5a23e9f28552d5be6979e84001d3b8505abe8", size = 6642574, upload_time = "2025-07-01T09:14:47.415Z" }, - { url = "https://files.pythonhosted.org/packages/36/de/d5cc31cc4b055b6c6fd990e3e7f0f8aaf36229a2698501bcb0cdf67c7146/pillow-11.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:023f6d2d11784a465f09fd09a34b150ea4672e85fb3d05931d89f373ab14abb2", size = 6084060, upload_time = "2025-07-01T09:14:49.636Z" }, - { url = "https://files.pythonhosted.org/packages/d5/ea/502d938cbaeec836ac28a9b730193716f0114c41325db428e6b280513f09/pillow-11.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:45dfc51ac5975b938e9809451c51734124e73b04d0f0ac621649821a63852e7b", size = 6721407, upload_time = "2025-07-01T09:14:51.962Z" }, - { url = "https://files.pythonhosted.org/packages/45/9c/9c5e2a73f125f6cbc59cc7087c8f2d649a7ae453f83bd0362ff7c9e2aee2/pillow-11.3.0-cp313-cp313-win32.whl", hash = "sha256:a4d336baed65d50d37b88ca5b60c0fa9d81e3a87d4a7930d3880d1624d5b31f3", size = 6273841, upload_time = "2025-07-01T09:14:54.142Z" }, - { url = "https://files.pythonhosted.org/packages/23/85/397c73524e0cd212067e0c969aa245b01d50183439550d24d9f55781b776/pillow-11.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:0bce5c4fd0921f99d2e858dc4d4d64193407e1b99478bc5cacecba2311abde51", size = 6978450, upload_time = "2025-07-01T09:14:56.436Z" }, - { url = "https://files.pythonhosted.org/packages/17/d2/622f4547f69cd173955194b78e4d19ca4935a1b0f03a302d655c9f6aae65/pillow-11.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:1904e1264881f682f02b7f8167935cce37bc97db457f8e7849dc3a6a52b99580", size = 2423055, upload_time = "2025-07-01T09:14:58.072Z" }, - { url = "https://files.pythonhosted.org/packages/dd/80/a8a2ac21dda2e82480852978416cfacd439a4b490a501a288ecf4fe2532d/pillow-11.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:4c834a3921375c48ee6b9624061076bc0a32a60b5532b322cc0ea64e639dd50e", size = 5281110, upload_time = "2025-07-01T09:14:59.79Z" }, - { url = "https://files.pythonhosted.org/packages/44/d6/b79754ca790f315918732e18f82a8146d33bcd7f4494380457ea89eb883d/pillow-11.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5e05688ccef30ea69b9317a9ead994b93975104a677a36a8ed8106be9260aa6d", size = 4689547, upload_time = "2025-07-01T09:15:01.648Z" }, - { url = "https://files.pythonhosted.org/packages/49/20/716b8717d331150cb00f7fdd78169c01e8e0c219732a78b0e59b6bdb2fd6/pillow-11.3.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1019b04af07fc0163e2810167918cb5add8d74674b6267616021ab558dc98ced", size = 5901554, upload_time = "2025-07-03T13:10:27.018Z" }, - { url = "https://files.pythonhosted.org/packages/74/cf/a9f3a2514a65bb071075063a96f0a5cf949c2f2fce683c15ccc83b1c1cab/pillow-11.3.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f944255db153ebb2b19c51fe85dd99ef0ce494123f21b9db4877ffdfc5590c7c", size = 7669132, upload_time = "2025-07-03T13:10:33.01Z" }, - { url = "https://files.pythonhosted.org/packages/98/3c/da78805cbdbee9cb43efe8261dd7cc0b4b93f2ac79b676c03159e9db2187/pillow-11.3.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1f85acb69adf2aaee8b7da124efebbdb959a104db34d3a2cb0f3793dbae422a8", size = 6005001, upload_time = "2025-07-01T09:15:03.365Z" }, - { url = "https://files.pythonhosted.org/packages/6c/fa/ce044b91faecf30e635321351bba32bab5a7e034c60187fe9698191aef4f/pillow-11.3.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:05f6ecbeff5005399bb48d198f098a9b4b6bdf27b8487c7f38ca16eeb070cd59", size = 6668814, upload_time = "2025-07-01T09:15:05.655Z" }, - { url = "https://files.pythonhosted.org/packages/7b/51/90f9291406d09bf93686434f9183aba27b831c10c87746ff49f127ee80cb/pillow-11.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a7bc6e6fd0395bc052f16b1a8670859964dbd7003bd0af2ff08342eb6e442cfe", size = 6113124, upload_time = "2025-07-01T09:15:07.358Z" }, - { url = "https://files.pythonhosted.org/packages/cd/5a/6fec59b1dfb619234f7636d4157d11fb4e196caeee220232a8d2ec48488d/pillow-11.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:83e1b0161c9d148125083a35c1c5a89db5b7054834fd4387499e06552035236c", size = 6747186, upload_time = "2025-07-01T09:15:09.317Z" }, - { url = "https://files.pythonhosted.org/packages/49/6b/00187a044f98255225f172de653941e61da37104a9ea60e4f6887717e2b5/pillow-11.3.0-cp313-cp313t-win32.whl", hash = "sha256:2a3117c06b8fb646639dce83694f2f9eac405472713fcb1ae887469c0d4f6788", size = 6277546, upload_time = "2025-07-01T09:15:11.311Z" }, - { url = "https://files.pythonhosted.org/packages/e8/5c/6caaba7e261c0d75bab23be79f1d06b5ad2a2ae49f028ccec801b0e853d6/pillow-11.3.0-cp313-cp313t-win_amd64.whl", hash = "sha256:857844335c95bea93fb39e0fa2726b4d9d758850b34075a7e3ff4f4fa3aa3b31", size = 6985102, upload_time = "2025-07-01T09:15:13.164Z" }, - { url = "https://files.pythonhosted.org/packages/f3/7e/b623008460c09a0cb38263c93b828c666493caee2eb34ff67f778b87e58c/pillow-11.3.0-cp313-cp313t-win_arm64.whl", hash = "sha256:8797edc41f3e8536ae4b10897ee2f637235c94f27404cac7297f7b607dd0716e", size = 2424803, upload_time = "2025-07-01T09:15:15.695Z" }, - { url = "https://files.pythonhosted.org/packages/73/f4/04905af42837292ed86cb1b1dabe03dce1edc008ef14c473c5c7e1443c5d/pillow-11.3.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:d9da3df5f9ea2a89b81bb6087177fb1f4d1c7146d583a3fe5c672c0d94e55e12", size = 5278520, upload_time = "2025-07-01T09:15:17.429Z" }, - { url = "https://files.pythonhosted.org/packages/41/b0/33d79e377a336247df6348a54e6d2a2b85d644ca202555e3faa0cf811ecc/pillow-11.3.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0b275ff9b04df7b640c59ec5a3cb113eefd3795a8df80bac69646ef699c6981a", size = 4686116, upload_time = "2025-07-01T09:15:19.423Z" }, - { url = "https://files.pythonhosted.org/packages/49/2d/ed8bc0ab219ae8768f529597d9509d184fe8a6c4741a6864fea334d25f3f/pillow-11.3.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0743841cabd3dba6a83f38a92672cccbd69af56e3e91777b0ee7f4dba4385632", size = 5864597, upload_time = "2025-07-03T13:10:38.404Z" }, - { url = "https://files.pythonhosted.org/packages/b5/3d/b932bb4225c80b58dfadaca9d42d08d0b7064d2d1791b6a237f87f661834/pillow-11.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2465a69cf967b8b49ee1b96d76718cd98c4e925414ead59fdf75cf0fd07df673", size = 7638246, upload_time = "2025-07-03T13:10:44.987Z" }, - { url = "https://files.pythonhosted.org/packages/09/b5/0487044b7c096f1b48f0d7ad416472c02e0e4bf6919541b111efd3cae690/pillow-11.3.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:41742638139424703b4d01665b807c6468e23e699e8e90cffefe291c5832b027", size = 5973336, upload_time = "2025-07-01T09:15:21.237Z" }, - { url = "https://files.pythonhosted.org/packages/a8/2d/524f9318f6cbfcc79fbc004801ea6b607ec3f843977652fdee4857a7568b/pillow-11.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:93efb0b4de7e340d99057415c749175e24c8864302369e05914682ba642e5d77", size = 6642699, upload_time = "2025-07-01T09:15:23.186Z" }, - { url = "https://files.pythonhosted.org/packages/6f/d2/a9a4f280c6aefedce1e8f615baaa5474e0701d86dd6f1dede66726462bbd/pillow-11.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7966e38dcd0fa11ca390aed7c6f20454443581d758242023cf36fcb319b1a874", size = 6083789, upload_time = "2025-07-01T09:15:25.1Z" }, - { url = "https://files.pythonhosted.org/packages/fe/54/86b0cd9dbb683a9d5e960b66c7379e821a19be4ac5810e2e5a715c09a0c0/pillow-11.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:98a9afa7b9007c67ed84c57c9e0ad86a6000da96eaa638e4f8abe5b65ff83f0a", size = 6720386, upload_time = "2025-07-01T09:15:27.378Z" }, - { url = "https://files.pythonhosted.org/packages/e7/95/88efcaf384c3588e24259c4203b909cbe3e3c2d887af9e938c2022c9dd48/pillow-11.3.0-cp314-cp314-win32.whl", hash = "sha256:02a723e6bf909e7cea0dac1b0e0310be9d7650cd66222a5f1c571455c0a45214", size = 6370911, upload_time = "2025-07-01T09:15:29.294Z" }, - { url = "https://files.pythonhosted.org/packages/2e/cc/934e5820850ec5eb107e7b1a72dd278140731c669f396110ebc326f2a503/pillow-11.3.0-cp314-cp314-win_amd64.whl", hash = "sha256:a418486160228f64dd9e9efcd132679b7a02a5f22c982c78b6fc7dab3fefb635", size = 7117383, upload_time = "2025-07-01T09:15:31.128Z" }, - { url = "https://files.pythonhosted.org/packages/d6/e9/9c0a616a71da2a5d163aa37405e8aced9a906d574b4a214bede134e731bc/pillow-11.3.0-cp314-cp314-win_arm64.whl", hash = "sha256:155658efb5e044669c08896c0c44231c5e9abcaadbc5cd3648df2f7c0b96b9a6", size = 2511385, upload_time = "2025-07-01T09:15:33.328Z" }, - { url = "https://files.pythonhosted.org/packages/1a/33/c88376898aff369658b225262cd4f2659b13e8178e7534df9e6e1fa289f6/pillow-11.3.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:59a03cdf019efbfeeed910bf79c7c93255c3d54bc45898ac2a4140071b02b4ae", size = 5281129, upload_time = "2025-07-01T09:15:35.194Z" }, - { url = "https://files.pythonhosted.org/packages/1f/70/d376247fb36f1844b42910911c83a02d5544ebd2a8bad9efcc0f707ea774/pillow-11.3.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f8a5827f84d973d8636e9dc5764af4f0cf2318d26744b3d902931701b0d46653", size = 4689580, upload_time = "2025-07-01T09:15:37.114Z" }, - { url = "https://files.pythonhosted.org/packages/eb/1c/537e930496149fbac69efd2fc4329035bbe2e5475b4165439e3be9cb183b/pillow-11.3.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ee92f2fd10f4adc4b43d07ec5e779932b4eb3dbfbc34790ada5a6669bc095aa6", size = 5902860, upload_time = "2025-07-03T13:10:50.248Z" }, - { url = "https://files.pythonhosted.org/packages/bd/57/80f53264954dcefeebcf9dae6e3eb1daea1b488f0be8b8fef12f79a3eb10/pillow-11.3.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c96d333dcf42d01f47b37e0979b6bd73ec91eae18614864622d9b87bbd5bbf36", size = 7670694, upload_time = "2025-07-03T13:10:56.432Z" }, - { url = "https://files.pythonhosted.org/packages/70/ff/4727d3b71a8578b4587d9c276e90efad2d6fe0335fd76742a6da08132e8c/pillow-11.3.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4c96f993ab8c98460cd0c001447bff6194403e8b1d7e149ade5f00594918128b", size = 6005888, upload_time = "2025-07-01T09:15:39.436Z" }, - { url = "https://files.pythonhosted.org/packages/05/ae/716592277934f85d3be51d7256f3636672d7b1abfafdc42cf3f8cbd4b4c8/pillow-11.3.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:41342b64afeba938edb034d122b2dda5db2139b9a4af999729ba8818e0056477", size = 6670330, upload_time = "2025-07-01T09:15:41.269Z" }, - { url = "https://files.pythonhosted.org/packages/e7/bb/7fe6cddcc8827b01b1a9766f5fdeb7418680744f9082035bdbabecf1d57f/pillow-11.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:068d9c39a2d1b358eb9f245ce7ab1b5c3246c7c8c7d9ba58cfa5b43146c06e50", size = 6114089, upload_time = "2025-07-01T09:15:43.13Z" }, - { url = "https://files.pythonhosted.org/packages/8b/f5/06bfaa444c8e80f1a8e4bff98da9c83b37b5be3b1deaa43d27a0db37ef84/pillow-11.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a1bc6ba083b145187f648b667e05a2534ecc4b9f2784c2cbe3089e44868f2b9b", size = 6748206, upload_time = "2025-07-01T09:15:44.937Z" }, - { url = "https://files.pythonhosted.org/packages/f0/77/bc6f92a3e8e6e46c0ca78abfffec0037845800ea38c73483760362804c41/pillow-11.3.0-cp314-cp314t-win32.whl", hash = "sha256:118ca10c0d60b06d006be10a501fd6bbdfef559251ed31b794668ed569c87e12", size = 6377370, upload_time = "2025-07-01T09:15:46.673Z" }, - { url = "https://files.pythonhosted.org/packages/4a/82/3a721f7d69dca802befb8af08b7c79ebcab461007ce1c18bd91a5d5896f9/pillow-11.3.0-cp314-cp314t-win_amd64.whl", hash = "sha256:8924748b688aa210d79883357d102cd64690e56b923a186f35a82cbc10f997db", size = 7121500, upload_time = "2025-07-01T09:15:48.512Z" }, - { url = "https://files.pythonhosted.org/packages/89/c7/5572fa4a3f45740eaab6ae86fcdf7195b55beac1371ac8c619d880cfe948/pillow-11.3.0-cp314-cp314t-win_arm64.whl", hash = "sha256:79ea0d14d3ebad43ec77ad5272e6ff9bba5b679ef73375ea760261207fa8e0aa", size = 2512835, upload_time = "2025-07-01T09:15:50.399Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/f3/0d/d0d6dea55cd152ce3d6767bb38a8fc10e33796ba4ba210cbab9354b6d238/pillow-11.3.0.tar.gz", hash = "sha256:3828ee7586cd0b2091b6209e5ad53e20d0649bbe87164a459d0676e035e8f523", size = 47113069 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/40/fe/1bc9b3ee13f68487a99ac9529968035cca2f0a51ec36892060edcc51d06a/pillow-11.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fdae223722da47b024b867c1ea0be64e0df702c5e0a60e27daad39bf960dd1e4", size = 5278800 }, + { url = "https://files.pythonhosted.org/packages/2c/32/7e2ac19b5713657384cec55f89065fb306b06af008cfd87e572035b27119/pillow-11.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:921bd305b10e82b4d1f5e802b6850677f965d8394203d182f078873851dada69", size = 4686296 }, + { url = "https://files.pythonhosted.org/packages/8e/1e/b9e12bbe6e4c2220effebc09ea0923a07a6da1e1f1bfbc8d7d29a01ce32b/pillow-11.3.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:eb76541cba2f958032d79d143b98a3a6b3ea87f0959bbe256c0b5e416599fd5d", size = 5871726 }, + { url = "https://files.pythonhosted.org/packages/8d/33/e9200d2bd7ba00dc3ddb78df1198a6e80d7669cce6c2bdbeb2530a74ec58/pillow-11.3.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:67172f2944ebba3d4a7b54f2e95c786a3a50c21b88456329314caaa28cda70f6", size = 7644652 }, + { url = "https://files.pythonhosted.org/packages/41/f1/6f2427a26fc683e00d985bc391bdd76d8dd4e92fac33d841127eb8fb2313/pillow-11.3.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97f07ed9f56a3b9b5f49d3661dc9607484e85c67e27f3e8be2c7d28ca032fec7", size = 5977787 }, + { url = "https://files.pythonhosted.org/packages/e4/c9/06dd4a38974e24f932ff5f98ea3c546ce3f8c995d3f0985f8e5ba48bba19/pillow-11.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:676b2815362456b5b3216b4fd5bd89d362100dc6f4945154ff172e206a22c024", size = 6645236 }, + { url = "https://files.pythonhosted.org/packages/40/e7/848f69fb79843b3d91241bad658e9c14f39a32f71a301bcd1d139416d1be/pillow-11.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3e184b2f26ff146363dd07bde8b711833d7b0202e27d13540bfe2e35a323a809", size = 6086950 }, + { url = "https://files.pythonhosted.org/packages/0b/1a/7cff92e695a2a29ac1958c2a0fe4c0b2393b60aac13b04a4fe2735cad52d/pillow-11.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6be31e3fc9a621e071bc17bb7de63b85cbe0bfae91bb0363c893cbe67247780d", size = 6723358 }, + { url = "https://files.pythonhosted.org/packages/26/7d/73699ad77895f69edff76b0f332acc3d497f22f5d75e5360f78cbcaff248/pillow-11.3.0-cp312-cp312-win32.whl", hash = "sha256:7b161756381f0918e05e7cb8a371fff367e807770f8fe92ecb20d905d0e1c149", size = 6275079 }, + { url = "https://files.pythonhosted.org/packages/8c/ce/e7dfc873bdd9828f3b6e5c2bbb74e47a98ec23cc5c74fc4e54462f0d9204/pillow-11.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:a6444696fce635783440b7f7a9fc24b3ad10a9ea3f0ab66c5905be1c19ccf17d", size = 6986324 }, + { url = "https://files.pythonhosted.org/packages/16/8f/b13447d1bf0b1f7467ce7d86f6e6edf66c0ad7cf44cf5c87a37f9bed9936/pillow-11.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:2aceea54f957dd4448264f9bf40875da0415c83eb85f55069d89c0ed436e3542", size = 2423067 }, + { url = "https://files.pythonhosted.org/packages/1e/93/0952f2ed8db3a5a4c7a11f91965d6184ebc8cd7cbb7941a260d5f018cd2d/pillow-11.3.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:1c627742b539bba4309df89171356fcb3cc5a9178355b2727d1b74a6cf155fbd", size = 2128328 }, + { url = "https://files.pythonhosted.org/packages/4b/e8/100c3d114b1a0bf4042f27e0f87d2f25e857e838034e98ca98fe7b8c0a9c/pillow-11.3.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:30b7c02f3899d10f13d7a48163c8969e4e653f8b43416d23d13d1bbfdc93b9f8", size = 2170652 }, + { url = "https://files.pythonhosted.org/packages/aa/86/3f758a28a6e381758545f7cdb4942e1cb79abd271bea932998fc0db93cb6/pillow-11.3.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:7859a4cc7c9295f5838015d8cc0a9c215b77e43d07a25e460f35cf516df8626f", size = 2227443 }, + { url = "https://files.pythonhosted.org/packages/01/f4/91d5b3ffa718df2f53b0dc109877993e511f4fd055d7e9508682e8aba092/pillow-11.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ec1ee50470b0d050984394423d96325b744d55c701a439d2bd66089bff963d3c", size = 5278474 }, + { url = "https://files.pythonhosted.org/packages/f9/0e/37d7d3eca6c879fbd9dba21268427dffda1ab00d4eb05b32923d4fbe3b12/pillow-11.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7db51d222548ccfd274e4572fdbf3e810a5e66b00608862f947b163e613b67dd", size = 4686038 }, + { url = "https://files.pythonhosted.org/packages/ff/b0/3426e5c7f6565e752d81221af9d3676fdbb4f352317ceafd42899aaf5d8a/pillow-11.3.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2d6fcc902a24ac74495df63faad1884282239265c6839a0a6416d33faedfae7e", size = 5864407 }, + { url = "https://files.pythonhosted.org/packages/fc/c1/c6c423134229f2a221ee53f838d4be9d82bab86f7e2f8e75e47b6bf6cd77/pillow-11.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f0f5d8f4a08090c6d6d578351a2b91acf519a54986c055af27e7a93feae6d3f1", size = 7639094 }, + { url = "https://files.pythonhosted.org/packages/ba/c9/09e6746630fe6372c67c648ff9deae52a2bc20897d51fa293571977ceb5d/pillow-11.3.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c37d8ba9411d6003bba9e518db0db0c58a680ab9fe5179f040b0463644bc9805", size = 5973503 }, + { url = "https://files.pythonhosted.org/packages/d5/1c/a2a29649c0b1983d3ef57ee87a66487fdeb45132df66ab30dd37f7dbe162/pillow-11.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:13f87d581e71d9189ab21fe0efb5a23e9f28552d5be6979e84001d3b8505abe8", size = 6642574 }, + { url = "https://files.pythonhosted.org/packages/36/de/d5cc31cc4b055b6c6fd990e3e7f0f8aaf36229a2698501bcb0cdf67c7146/pillow-11.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:023f6d2d11784a465f09fd09a34b150ea4672e85fb3d05931d89f373ab14abb2", size = 6084060 }, + { url = "https://files.pythonhosted.org/packages/d5/ea/502d938cbaeec836ac28a9b730193716f0114c41325db428e6b280513f09/pillow-11.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:45dfc51ac5975b938e9809451c51734124e73b04d0f0ac621649821a63852e7b", size = 6721407 }, + { url = "https://files.pythonhosted.org/packages/45/9c/9c5e2a73f125f6cbc59cc7087c8f2d649a7ae453f83bd0362ff7c9e2aee2/pillow-11.3.0-cp313-cp313-win32.whl", hash = "sha256:a4d336baed65d50d37b88ca5b60c0fa9d81e3a87d4a7930d3880d1624d5b31f3", size = 6273841 }, + { url = "https://files.pythonhosted.org/packages/23/85/397c73524e0cd212067e0c969aa245b01d50183439550d24d9f55781b776/pillow-11.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:0bce5c4fd0921f99d2e858dc4d4d64193407e1b99478bc5cacecba2311abde51", size = 6978450 }, + { url = "https://files.pythonhosted.org/packages/17/d2/622f4547f69cd173955194b78e4d19ca4935a1b0f03a302d655c9f6aae65/pillow-11.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:1904e1264881f682f02b7f8167935cce37bc97db457f8e7849dc3a6a52b99580", size = 2423055 }, + { url = "https://files.pythonhosted.org/packages/dd/80/a8a2ac21dda2e82480852978416cfacd439a4b490a501a288ecf4fe2532d/pillow-11.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:4c834a3921375c48ee6b9624061076bc0a32a60b5532b322cc0ea64e639dd50e", size = 5281110 }, + { url = "https://files.pythonhosted.org/packages/44/d6/b79754ca790f315918732e18f82a8146d33bcd7f4494380457ea89eb883d/pillow-11.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5e05688ccef30ea69b9317a9ead994b93975104a677a36a8ed8106be9260aa6d", size = 4689547 }, + { url = "https://files.pythonhosted.org/packages/49/20/716b8717d331150cb00f7fdd78169c01e8e0c219732a78b0e59b6bdb2fd6/pillow-11.3.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1019b04af07fc0163e2810167918cb5add8d74674b6267616021ab558dc98ced", size = 5901554 }, + { url = "https://files.pythonhosted.org/packages/74/cf/a9f3a2514a65bb071075063a96f0a5cf949c2f2fce683c15ccc83b1c1cab/pillow-11.3.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f944255db153ebb2b19c51fe85dd99ef0ce494123f21b9db4877ffdfc5590c7c", size = 7669132 }, + { url = "https://files.pythonhosted.org/packages/98/3c/da78805cbdbee9cb43efe8261dd7cc0b4b93f2ac79b676c03159e9db2187/pillow-11.3.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1f85acb69adf2aaee8b7da124efebbdb959a104db34d3a2cb0f3793dbae422a8", size = 6005001 }, + { url = "https://files.pythonhosted.org/packages/6c/fa/ce044b91faecf30e635321351bba32bab5a7e034c60187fe9698191aef4f/pillow-11.3.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:05f6ecbeff5005399bb48d198f098a9b4b6bdf27b8487c7f38ca16eeb070cd59", size = 6668814 }, + { url = "https://files.pythonhosted.org/packages/7b/51/90f9291406d09bf93686434f9183aba27b831c10c87746ff49f127ee80cb/pillow-11.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a7bc6e6fd0395bc052f16b1a8670859964dbd7003bd0af2ff08342eb6e442cfe", size = 6113124 }, + { url = "https://files.pythonhosted.org/packages/cd/5a/6fec59b1dfb619234f7636d4157d11fb4e196caeee220232a8d2ec48488d/pillow-11.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:83e1b0161c9d148125083a35c1c5a89db5b7054834fd4387499e06552035236c", size = 6747186 }, + { url = "https://files.pythonhosted.org/packages/49/6b/00187a044f98255225f172de653941e61da37104a9ea60e4f6887717e2b5/pillow-11.3.0-cp313-cp313t-win32.whl", hash = "sha256:2a3117c06b8fb646639dce83694f2f9eac405472713fcb1ae887469c0d4f6788", size = 6277546 }, + { url = "https://files.pythonhosted.org/packages/e8/5c/6caaba7e261c0d75bab23be79f1d06b5ad2a2ae49f028ccec801b0e853d6/pillow-11.3.0-cp313-cp313t-win_amd64.whl", hash = "sha256:857844335c95bea93fb39e0fa2726b4d9d758850b34075a7e3ff4f4fa3aa3b31", size = 6985102 }, + { url = "https://files.pythonhosted.org/packages/f3/7e/b623008460c09a0cb38263c93b828c666493caee2eb34ff67f778b87e58c/pillow-11.3.0-cp313-cp313t-win_arm64.whl", hash = "sha256:8797edc41f3e8536ae4b10897ee2f637235c94f27404cac7297f7b607dd0716e", size = 2424803 }, + { url = "https://files.pythonhosted.org/packages/73/f4/04905af42837292ed86cb1b1dabe03dce1edc008ef14c473c5c7e1443c5d/pillow-11.3.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:d9da3df5f9ea2a89b81bb6087177fb1f4d1c7146d583a3fe5c672c0d94e55e12", size = 5278520 }, + { url = "https://files.pythonhosted.org/packages/41/b0/33d79e377a336247df6348a54e6d2a2b85d644ca202555e3faa0cf811ecc/pillow-11.3.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0b275ff9b04df7b640c59ec5a3cb113eefd3795a8df80bac69646ef699c6981a", size = 4686116 }, + { url = "https://files.pythonhosted.org/packages/49/2d/ed8bc0ab219ae8768f529597d9509d184fe8a6c4741a6864fea334d25f3f/pillow-11.3.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0743841cabd3dba6a83f38a92672cccbd69af56e3e91777b0ee7f4dba4385632", size = 5864597 }, + { url = "https://files.pythonhosted.org/packages/b5/3d/b932bb4225c80b58dfadaca9d42d08d0b7064d2d1791b6a237f87f661834/pillow-11.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2465a69cf967b8b49ee1b96d76718cd98c4e925414ead59fdf75cf0fd07df673", size = 7638246 }, + { url = "https://files.pythonhosted.org/packages/09/b5/0487044b7c096f1b48f0d7ad416472c02e0e4bf6919541b111efd3cae690/pillow-11.3.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:41742638139424703b4d01665b807c6468e23e699e8e90cffefe291c5832b027", size = 5973336 }, + { url = "https://files.pythonhosted.org/packages/a8/2d/524f9318f6cbfcc79fbc004801ea6b607ec3f843977652fdee4857a7568b/pillow-11.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:93efb0b4de7e340d99057415c749175e24c8864302369e05914682ba642e5d77", size = 6642699 }, + { url = "https://files.pythonhosted.org/packages/6f/d2/a9a4f280c6aefedce1e8f615baaa5474e0701d86dd6f1dede66726462bbd/pillow-11.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7966e38dcd0fa11ca390aed7c6f20454443581d758242023cf36fcb319b1a874", size = 6083789 }, + { url = "https://files.pythonhosted.org/packages/fe/54/86b0cd9dbb683a9d5e960b66c7379e821a19be4ac5810e2e5a715c09a0c0/pillow-11.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:98a9afa7b9007c67ed84c57c9e0ad86a6000da96eaa638e4f8abe5b65ff83f0a", size = 6720386 }, + { url = "https://files.pythonhosted.org/packages/e7/95/88efcaf384c3588e24259c4203b909cbe3e3c2d887af9e938c2022c9dd48/pillow-11.3.0-cp314-cp314-win32.whl", hash = "sha256:02a723e6bf909e7cea0dac1b0e0310be9d7650cd66222a5f1c571455c0a45214", size = 6370911 }, + { url = "https://files.pythonhosted.org/packages/2e/cc/934e5820850ec5eb107e7b1a72dd278140731c669f396110ebc326f2a503/pillow-11.3.0-cp314-cp314-win_amd64.whl", hash = "sha256:a418486160228f64dd9e9efcd132679b7a02a5f22c982c78b6fc7dab3fefb635", size = 7117383 }, + { url = "https://files.pythonhosted.org/packages/d6/e9/9c0a616a71da2a5d163aa37405e8aced9a906d574b4a214bede134e731bc/pillow-11.3.0-cp314-cp314-win_arm64.whl", hash = "sha256:155658efb5e044669c08896c0c44231c5e9abcaadbc5cd3648df2f7c0b96b9a6", size = 2511385 }, + { url = "https://files.pythonhosted.org/packages/1a/33/c88376898aff369658b225262cd4f2659b13e8178e7534df9e6e1fa289f6/pillow-11.3.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:59a03cdf019efbfeeed910bf79c7c93255c3d54bc45898ac2a4140071b02b4ae", size = 5281129 }, + { url = "https://files.pythonhosted.org/packages/1f/70/d376247fb36f1844b42910911c83a02d5544ebd2a8bad9efcc0f707ea774/pillow-11.3.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f8a5827f84d973d8636e9dc5764af4f0cf2318d26744b3d902931701b0d46653", size = 4689580 }, + { url = "https://files.pythonhosted.org/packages/eb/1c/537e930496149fbac69efd2fc4329035bbe2e5475b4165439e3be9cb183b/pillow-11.3.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ee92f2fd10f4adc4b43d07ec5e779932b4eb3dbfbc34790ada5a6669bc095aa6", size = 5902860 }, + { url = "https://files.pythonhosted.org/packages/bd/57/80f53264954dcefeebcf9dae6e3eb1daea1b488f0be8b8fef12f79a3eb10/pillow-11.3.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c96d333dcf42d01f47b37e0979b6bd73ec91eae18614864622d9b87bbd5bbf36", size = 7670694 }, + { url = "https://files.pythonhosted.org/packages/70/ff/4727d3b71a8578b4587d9c276e90efad2d6fe0335fd76742a6da08132e8c/pillow-11.3.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4c96f993ab8c98460cd0c001447bff6194403e8b1d7e149ade5f00594918128b", size = 6005888 }, + { url = "https://files.pythonhosted.org/packages/05/ae/716592277934f85d3be51d7256f3636672d7b1abfafdc42cf3f8cbd4b4c8/pillow-11.3.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:41342b64afeba938edb034d122b2dda5db2139b9a4af999729ba8818e0056477", size = 6670330 }, + { url = "https://files.pythonhosted.org/packages/e7/bb/7fe6cddcc8827b01b1a9766f5fdeb7418680744f9082035bdbabecf1d57f/pillow-11.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:068d9c39a2d1b358eb9f245ce7ab1b5c3246c7c8c7d9ba58cfa5b43146c06e50", size = 6114089 }, + { url = "https://files.pythonhosted.org/packages/8b/f5/06bfaa444c8e80f1a8e4bff98da9c83b37b5be3b1deaa43d27a0db37ef84/pillow-11.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a1bc6ba083b145187f648b667e05a2534ecc4b9f2784c2cbe3089e44868f2b9b", size = 6748206 }, + { url = "https://files.pythonhosted.org/packages/f0/77/bc6f92a3e8e6e46c0ca78abfffec0037845800ea38c73483760362804c41/pillow-11.3.0-cp314-cp314t-win32.whl", hash = "sha256:118ca10c0d60b06d006be10a501fd6bbdfef559251ed31b794668ed569c87e12", size = 6377370 }, + { url = "https://files.pythonhosted.org/packages/4a/82/3a721f7d69dca802befb8af08b7c79ebcab461007ce1c18bd91a5d5896f9/pillow-11.3.0-cp314-cp314t-win_amd64.whl", hash = "sha256:8924748b688aa210d79883357d102cd64690e56b923a186f35a82cbc10f997db", size = 7121500 }, + { url = "https://files.pythonhosted.org/packages/89/c7/5572fa4a3f45740eaab6ae86fcdf7195b55beac1371ac8c619d880cfe948/pillow-11.3.0-cp314-cp314t-win_arm64.whl", hash = "sha256:79ea0d14d3ebad43ec77ad5272e6ff9bba5b679ef73375ea760261207fa8e0aa", size = 2512835 }, ] [[package]] name = "pint" -version = "0.24.4" +version = "0.25" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "flexcache" }, @@ -1827,41 +1945,41 @@ dependencies = [ { name = "platformdirs" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/20/bb/52b15ddf7b7706ed591134a895dbf6e41c8348171fb635e655e0a4bbb0ea/pint-0.24.4.tar.gz", hash = "sha256:35275439b574837a6cd3020a5a4a73645eb125ce4152a73a2f126bf164b91b80", size = 342225, upload_time = "2024-11-07T16:29:46.061Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5a/cb/e6ffaf3d019e8501b1264dac529bf829ac2f1fe1d488cfcf67f1fccadacf/pint-0.25.tar.gz", hash = "sha256:22911a30d682ee0540d656571c19a7b1806ce00b2be88a16f67218108b7b8cc2", size = 253010 } wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/16/bd2f5904557265882108dc2e04f18abc05ab0c2b7082ae9430091daf1d5c/Pint-0.24.4-py3-none-any.whl", hash = "sha256:aa54926c8772159fcf65f82cc0d34de6768c151b32ad1deb0331291c38fe7659", size = 302029, upload_time = "2024-11-07T16:29:43.976Z" }, + { url = "https://files.pythonhosted.org/packages/76/cc/c528311d798e22ec884b816e8aa2989e0f1f28cdc8e5969e2be5f10bce85/pint-0.25-py3-none-any.whl", hash = "sha256:cc20ae3dff010b9bbea41fb80c2de008f683cc83512cea73633d55aead80aa1e", size = 305462 }, ] [[package]] name = "platformdirs" -version = "4.3.8" +version = "4.4.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/fe/8b/3c73abc9c759ecd3f1f7ceff6685840859e8070c4d947c93fae71f6a0bf2/platformdirs-4.3.8.tar.gz", hash = "sha256:3d512d96e16bcb959a814c9f348431070822a6496326a4be0911c40b5a74c2bc", size = 21362, upload_time = "2025-05-07T22:47:42.121Z" } +sdist = { url = "https://files.pythonhosted.org/packages/23/e8/21db9c9987b0e728855bd57bff6984f67952bea55d6f75e055c46b5383e8/platformdirs-4.4.0.tar.gz", hash = "sha256:ca753cf4d81dc309bc67b0ea38fd15dc97bc30ce419a7f58d13eb3bf14c4febf", size = 21634 } wheels = [ - { url = "https://files.pythonhosted.org/packages/fe/39/979e8e21520d4e47a0bbe349e2713c0aac6f3d853d0e5b34d76206c439aa/platformdirs-4.3.8-py3-none-any.whl", hash = "sha256:ff7059bb7eb1179e2685604f4aaf157cfd9535242bd23742eadc3c13542139b4", size = 18567, upload_time = "2025-05-07T22:47:40.376Z" }, + { url = "https://files.pythonhosted.org/packages/40/4b/2028861e724d3bd36227adfa20d3fd24c3fc6d52032f4a93c133be5d17ce/platformdirs-4.4.0-py3-none-any.whl", hash = "sha256:abd01743f24e5287cd7a5db3752faf1a2d65353f38ec26d98e25a6db65958c85", size = 18654 }, ] [[package]] name = "pluggy" version = "1.6.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload_time = "2025-05-15T12:30:07.975Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412 } wheels = [ - { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload_time = "2025-05-15T12:30:06.134Z" }, + { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538 }, ] [[package]] name = "ply" version = "3.11" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e5/69/882ee5c9d017149285cab114ebeab373308ef0f874fcdac9beb90e0ac4da/ply-3.11.tar.gz", hash = "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3", size = 159130, upload_time = "2018-02-15T19:01:31.097Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e5/69/882ee5c9d017149285cab114ebeab373308ef0f874fcdac9beb90e0ac4da/ply-3.11.tar.gz", hash = "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3", size = 159130 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a3/58/35da89ee790598a0700ea49b2a66594140f44dec458c07e8e3d4979137fc/ply-3.11-py2.py3-none-any.whl", hash = "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce", size = 49567, upload_time = "2018-02-15T19:01:27.172Z" }, + { url = "https://files.pythonhosted.org/packages/a3/58/35da89ee790598a0700ea49b2a66594140f44dec458c07e8e3d4979137fc/ply-3.11-py2.py3-none-any.whl", hash = "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce", size = 49567 }, ] [[package]] name = "pre-commit" -version = "4.2.0" +version = "4.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cfgv" }, @@ -1870,103 +1988,98 @@ dependencies = [ { name = "pyyaml" }, { name = "virtualenv" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/08/39/679ca9b26c7bb2999ff122d50faa301e49af82ca9c066ec061cfbc0c6784/pre_commit-4.2.0.tar.gz", hash = "sha256:601283b9757afd87d40c4c4a9b2b5de9637a8ea02eaff7adc2d0fb4e04841146", size = 193424, upload_time = "2025-03-18T21:35:20.987Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ff/29/7cf5bbc236333876e4b41f56e06857a87937ce4bf91e117a6991a2dbb02a/pre_commit-4.3.0.tar.gz", hash = "sha256:499fe450cc9d42e9d58e606262795ecb64dd05438943c62b66f6a8673da30b16", size = 193792 } wheels = [ - { url = "https://files.pythonhosted.org/packages/88/74/a88bf1b1efeae488a0c0b7bdf71429c313722d1fc0f377537fbe554e6180/pre_commit-4.2.0-py2.py3-none-any.whl", hash = "sha256:a009ca7205f1eb497d10b845e52c838a98b6cdd2102a6c8e4540e94ee75c58bd", size = 220707, upload_time = "2025-03-18T21:35:19.343Z" }, + { url = "https://files.pythonhosted.org/packages/5b/a5/987a405322d78a73b66e39e4a90e4ef156fd7141bf71df987e50717c321b/pre_commit-4.3.0-py2.py3-none-any.whl", hash = "sha256:2b0747ad7e6e967169136edffee14c16e148a778a54e4f967921aa1ebf2308d8", size = 220965 }, ] [[package]] name = "prompt-toolkit" -version = "3.0.51" +version = "3.0.52" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "wcwidth" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/bb/6e/9d084c929dfe9e3bfe0c6a47e31f78a25c54627d64a66e884a8bf5474f1c/prompt_toolkit-3.0.51.tar.gz", hash = "sha256:931a162e3b27fc90c86f1b48bb1fb2c528c2761475e57c9c06de13311c7b54ed", size = 428940, upload_time = "2025-04-15T09:18:47.731Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a1/96/06e01a7b38dce6fe1db213e061a4602dd6032a8a97ef6c1a862537732421/prompt_toolkit-3.0.52.tar.gz", hash = "sha256:28cde192929c8e7321de85de1ddbe736f1375148b02f2e17edd840042b1be855", size = 434198 } wheels = [ - { url = "https://files.pythonhosted.org/packages/ce/4f/5249960887b1fbe561d9ff265496d170b55a735b76724f10ef19f9e40716/prompt_toolkit-3.0.51-py3-none-any.whl", hash = "sha256:52742911fde84e2d423e2f9a4cf1de7d7ac4e51958f648d9540e0fb8db077b07", size = 387810, upload_time = "2025-04-15T09:18:44.753Z" }, + { url = "https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl", hash = "sha256:9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955", size = 391431 }, ] [[package]] name = "psutil" -version = "7.0.0" +version = "7.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2a/80/336820c1ad9286a4ded7e845b2eccfcb27851ab8ac6abece774a6ff4d3de/psutil-7.0.0.tar.gz", hash = "sha256:7be9c3eba38beccb6495ea33afd982a44074b78f28c434a1f51cc07fd315c456", size = 497003, upload_time = "2025-02-13T21:54:07.946Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b3/31/4723d756b59344b643542936e37a31d1d3204bcdc42a7daa8ee9eb06fb50/psutil-7.1.0.tar.gz", hash = "sha256:655708b3c069387c8b77b072fc429a57d0e214221d01c0a772df7dfedcb3bcd2", size = 497660 } wheels = [ - { url = "https://files.pythonhosted.org/packages/ed/e6/2d26234410f8b8abdbf891c9da62bee396583f713fb9f3325a4760875d22/psutil-7.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:101d71dc322e3cffd7cea0650b09b3d08b8e7c4109dd6809fe452dfd00e58b25", size = 238051, upload_time = "2025-02-13T21:54:12.36Z" }, - { url = "https://files.pythonhosted.org/packages/04/8b/30f930733afe425e3cbfc0e1468a30a18942350c1a8816acfade80c005c4/psutil-7.0.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:39db632f6bb862eeccf56660871433e111b6ea58f2caea825571951d4b6aa3da", size = 239535, upload_time = "2025-02-13T21:54:16.07Z" }, - { url = "https://files.pythonhosted.org/packages/2a/ed/d362e84620dd22876b55389248e522338ed1bf134a5edd3b8231d7207f6d/psutil-7.0.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fcee592b4c6f146991ca55919ea3d1f8926497a713ed7faaf8225e174581e91", size = 275004, upload_time = "2025-02-13T21:54:18.662Z" }, - { url = "https://files.pythonhosted.org/packages/bf/b9/b0eb3f3cbcb734d930fdf839431606844a825b23eaf9a6ab371edac8162c/psutil-7.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b1388a4f6875d7e2aff5c4ca1cc16c545ed41dd8bb596cefea80111db353a34", size = 277986, upload_time = "2025-02-13T21:54:21.811Z" }, - { url = "https://files.pythonhosted.org/packages/eb/a2/709e0fe2f093556c17fbafda93ac032257242cabcc7ff3369e2cb76a97aa/psutil-7.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5f098451abc2828f7dc6b58d44b532b22f2088f4999a937557b603ce72b1993", size = 279544, upload_time = "2025-02-13T21:54:24.68Z" }, - { url = "https://files.pythonhosted.org/packages/50/e6/eecf58810b9d12e6427369784efe814a1eec0f492084ce8eb8f4d89d6d61/psutil-7.0.0-cp37-abi3-win32.whl", hash = "sha256:ba3fcef7523064a6c9da440fc4d6bd07da93ac726b5733c29027d7dc95b39d99", size = 241053, upload_time = "2025-02-13T21:54:34.31Z" }, - { url = "https://files.pythonhosted.org/packages/50/1b/6921afe68c74868b4c9fa424dad3be35b095e16687989ebbb50ce4fceb7c/psutil-7.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:4cf3d4eb1aa9b348dec30105c55cd9b7d4629285735a102beb4441e38db90553", size = 244885, upload_time = "2025-02-13T21:54:37.486Z" }, + { url = "https://files.pythonhosted.org/packages/46/62/ce4051019ee20ce0ed74432dd73a5bb087a6704284a470bb8adff69a0932/psutil-7.1.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:76168cef4397494250e9f4e73eb3752b146de1dd950040b29186d0cce1d5ca13", size = 245242 }, + { url = "https://files.pythonhosted.org/packages/38/61/f76959fba841bf5b61123fbf4b650886dc4094c6858008b5bf73d9057216/psutil-7.1.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:5d007560c8c372efdff9e4579c2846d71de737e4605f611437255e81efcca2c5", size = 246682 }, + { url = "https://files.pythonhosted.org/packages/88/7a/37c99d2e77ec30d63398ffa6a660450b8a62517cabe44b3e9bae97696e8d/psutil-7.1.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22e4454970b32472ce7deaa45d045b34d3648ce478e26a04c7e858a0a6e75ff3", size = 287994 }, + { url = "https://files.pythonhosted.org/packages/9d/de/04c8c61232f7244aa0a4b9a9fbd63a89d5aeaf94b2fc9d1d16e2faa5cbb0/psutil-7.1.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c70e113920d51e89f212dd7be06219a9b88014e63a4cec69b684c327bc474e3", size = 291163 }, + { url = "https://files.pythonhosted.org/packages/f4/58/c4f976234bf6d4737bc8c02a81192f045c307b72cf39c9e5c5a2d78927f6/psutil-7.1.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7d4a113425c037300de3ac8b331637293da9be9713855c4fc9d2d97436d7259d", size = 293625 }, + { url = "https://files.pythonhosted.org/packages/79/87/157c8e7959ec39ced1b11cc93c730c4fb7f9d408569a6c59dbd92ceb35db/psutil-7.1.0-cp37-abi3-win32.whl", hash = "sha256:09ad740870c8d219ed8daae0ad3b726d3bf9a028a198e7f3080f6a1888b99bca", size = 244812 }, + { url = "https://files.pythonhosted.org/packages/bf/e9/b44c4f697276a7a95b8e94d0e320a7bf7f3318521b23de69035540b39838/psutil-7.1.0-cp37-abi3-win_amd64.whl", hash = "sha256:57f5e987c36d3146c0dd2528cd42151cf96cd359b9d67cfff836995cc5df9a3d", size = 247965 }, + { url = "https://files.pythonhosted.org/packages/26/65/1070a6e3c036f39142c2820c4b52e9243246fcfc3f96239ac84472ba361e/psutil-7.1.0-cp37-abi3-win_arm64.whl", hash = "sha256:6937cb68133e7c97b6cc9649a570c9a18ba0efebed46d8c5dae4c07fa1b67a07", size = 244971 }, ] [[package]] name = "ptyprocess" version = "0.7.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220", size = 70762, upload_time = "2020-12-28T15:15:30.155Z" } +sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220", size = 70762 } wheels = [ - { url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", size = 13993, upload_time = "2020-12-28T15:15:28.35Z" }, + { url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", size = 13993 }, ] [[package]] name = "pure-eval" version = "0.2.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/cd/05/0a34433a064256a578f1783a10da6df098ceaa4a57bbeaa96a6c0352786b/pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42", size = 19752, upload_time = "2024-07-21T12:58:21.801Z" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/05/0a34433a064256a578f1783a10da6df098ceaa4a57bbeaa96a6c0352786b/pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42", size = 19752 } wheels = [ - { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842, upload_time = "2024-07-21T12:58:20.04Z" }, + { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842 }, ] [[package]] name = "pyarrow" -version = "20.0.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a2/ee/a7810cb9f3d6e9238e61d312076a9859bf3668fd21c69744de9532383912/pyarrow-20.0.0.tar.gz", hash = "sha256:febc4a913592573c8d5805091a6c2b5064c8bd6e002131f01061797d91c783c1", size = 1125187, upload_time = "2025-04-27T12:34:23.264Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a1/d6/0c10e0d54f6c13eb464ee9b67a68b8c71bcf2f67760ef5b6fbcddd2ab05f/pyarrow-20.0.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:75a51a5b0eef32727a247707d4755322cb970be7e935172b6a3a9f9ae98404ba", size = 30815067, upload_time = "2025-04-27T12:29:44.384Z" }, - { url = "https://files.pythonhosted.org/packages/7e/e2/04e9874abe4094a06fd8b0cbb0f1312d8dd7d707f144c2ec1e5e8f452ffa/pyarrow-20.0.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:211d5e84cecc640c7a3ab900f930aaff5cd2702177e0d562d426fb7c4f737781", size = 32297128, upload_time = "2025-04-27T12:29:52.038Z" }, - { url = "https://files.pythonhosted.org/packages/31/fd/c565e5dcc906a3b471a83273039cb75cb79aad4a2d4a12f76cc5ae90a4b8/pyarrow-20.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ba3cf4182828be7a896cbd232aa8dd6a31bd1f9e32776cc3796c012855e1199", size = 41334890, upload_time = "2025-04-27T12:29:59.452Z" }, - { url = "https://files.pythonhosted.org/packages/af/a9/3bdd799e2c9b20c1ea6dc6fa8e83f29480a97711cf806e823f808c2316ac/pyarrow-20.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c3a01f313ffe27ac4126f4c2e5ea0f36a5fc6ab51f8726cf41fee4b256680bd", size = 42421775, upload_time = "2025-04-27T12:30:06.875Z" }, - { url = "https://files.pythonhosted.org/packages/10/f7/da98ccd86354c332f593218101ae56568d5dcedb460e342000bd89c49cc1/pyarrow-20.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:a2791f69ad72addd33510fec7bb14ee06c2a448e06b649e264c094c5b5f7ce28", size = 40687231, upload_time = "2025-04-27T12:30:13.954Z" }, - { url = "https://files.pythonhosted.org/packages/bb/1b/2168d6050e52ff1e6cefc61d600723870bf569cbf41d13db939c8cf97a16/pyarrow-20.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:4250e28a22302ce8692d3a0e8ec9d9dde54ec00d237cff4dfa9c1fbf79e472a8", size = 42295639, upload_time = "2025-04-27T12:30:21.949Z" }, - { url = "https://files.pythonhosted.org/packages/b2/66/2d976c0c7158fd25591c8ca55aee026e6d5745a021915a1835578707feb3/pyarrow-20.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:89e030dc58fc760e4010148e6ff164d2f44441490280ef1e97a542375e41058e", size = 42908549, upload_time = "2025-04-27T12:30:29.551Z" }, - { url = "https://files.pythonhosted.org/packages/31/a9/dfb999c2fc6911201dcbf348247f9cc382a8990f9ab45c12eabfd7243a38/pyarrow-20.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6102b4864d77102dbbb72965618e204e550135a940c2534711d5ffa787df2a5a", size = 44557216, upload_time = "2025-04-27T12:30:36.977Z" }, - { url = "https://files.pythonhosted.org/packages/a0/8e/9adee63dfa3911be2382fb4d92e4b2e7d82610f9d9f668493bebaa2af50f/pyarrow-20.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:96d6a0a37d9c98be08f5ed6a10831d88d52cac7b13f5287f1e0f625a0de8062b", size = 25660496, upload_time = "2025-04-27T12:30:42.809Z" }, - { url = "https://files.pythonhosted.org/packages/9b/aa/daa413b81446d20d4dad2944110dcf4cf4f4179ef7f685dd5a6d7570dc8e/pyarrow-20.0.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:a15532e77b94c61efadde86d10957950392999503b3616b2ffcef7621a002893", size = 30798501, upload_time = "2025-04-27T12:30:48.351Z" }, - { url = "https://files.pythonhosted.org/packages/ff/75/2303d1caa410925de902d32ac215dc80a7ce7dd8dfe95358c165f2adf107/pyarrow-20.0.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:dd43f58037443af715f34f1322c782ec463a3c8a94a85fdb2d987ceb5658e061", size = 32277895, upload_time = "2025-04-27T12:30:55.238Z" }, - { url = "https://files.pythonhosted.org/packages/92/41/fe18c7c0b38b20811b73d1bdd54b1fccba0dab0e51d2048878042d84afa8/pyarrow-20.0.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa0d288143a8585806e3cc7c39566407aab646fb9ece164609dac1cfff45f6ae", size = 41327322, upload_time = "2025-04-27T12:31:05.587Z" }, - { url = "https://files.pythonhosted.org/packages/da/ab/7dbf3d11db67c72dbf36ae63dcbc9f30b866c153b3a22ef728523943eee6/pyarrow-20.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6953f0114f8d6f3d905d98e987d0924dabce59c3cda380bdfaa25a6201563b4", size = 42411441, upload_time = "2025-04-27T12:31:15.675Z" }, - { url = "https://files.pythonhosted.org/packages/90/c3/0c7da7b6dac863af75b64e2f827e4742161128c350bfe7955b426484e226/pyarrow-20.0.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:991f85b48a8a5e839b2128590ce07611fae48a904cae6cab1f089c5955b57eb5", size = 40677027, upload_time = "2025-04-27T12:31:24.631Z" }, - { url = "https://files.pythonhosted.org/packages/be/27/43a47fa0ff9053ab5203bb3faeec435d43c0d8bfa40179bfd076cdbd4e1c/pyarrow-20.0.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:97c8dc984ed09cb07d618d57d8d4b67a5100a30c3818c2fb0b04599f0da2de7b", size = 42281473, upload_time = "2025-04-27T12:31:31.311Z" }, - { url = "https://files.pythonhosted.org/packages/bc/0b/d56c63b078876da81bbb9ba695a596eabee9b085555ed12bf6eb3b7cab0e/pyarrow-20.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9b71daf534f4745818f96c214dbc1e6124d7daf059167330b610fc69b6f3d3e3", size = 42893897, upload_time = "2025-04-27T12:31:39.406Z" }, - { url = "https://files.pythonhosted.org/packages/92/ac/7d4bd020ba9145f354012838692d48300c1b8fe5634bfda886abcada67ed/pyarrow-20.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e8b88758f9303fa5a83d6c90e176714b2fd3852e776fc2d7e42a22dd6c2fb368", size = 44543847, upload_time = "2025-04-27T12:31:45.997Z" }, - { url = "https://files.pythonhosted.org/packages/9d/07/290f4abf9ca702c5df7b47739c1b2c83588641ddfa2cc75e34a301d42e55/pyarrow-20.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:30b3051b7975801c1e1d387e17c588d8ab05ced9b1e14eec57915f79869b5031", size = 25653219, upload_time = "2025-04-27T12:31:54.11Z" }, - { url = "https://files.pythonhosted.org/packages/95/df/720bb17704b10bd69dde086e1400b8eefb8f58df3f8ac9cff6c425bf57f1/pyarrow-20.0.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:ca151afa4f9b7bc45bcc791eb9a89e90a9eb2772767d0b1e5389609c7d03db63", size = 30853957, upload_time = "2025-04-27T12:31:59.215Z" }, - { url = "https://files.pythonhosted.org/packages/d9/72/0d5f875efc31baef742ba55a00a25213a19ea64d7176e0fe001c5d8b6e9a/pyarrow-20.0.0-cp313-cp313t-macosx_12_0_x86_64.whl", hash = "sha256:4680f01ecd86e0dd63e39eb5cd59ef9ff24a9d166db328679e36c108dc993d4c", size = 32247972, upload_time = "2025-04-27T12:32:05.369Z" }, - { url = "https://files.pythonhosted.org/packages/d5/bc/e48b4fa544d2eea72f7844180eb77f83f2030b84c8dad860f199f94307ed/pyarrow-20.0.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f4c8534e2ff059765647aa69b75d6543f9fef59e2cd4c6d18015192565d2b70", size = 41256434, upload_time = "2025-04-27T12:32:11.814Z" }, - { url = "https://files.pythonhosted.org/packages/c3/01/974043a29874aa2cf4f87fb07fd108828fc7362300265a2a64a94965e35b/pyarrow-20.0.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e1f8a47f4b4ae4c69c4d702cfbdfe4d41e18e5c7ef6f1bb1c50918c1e81c57b", size = 42353648, upload_time = "2025-04-27T12:32:20.766Z" }, - { url = "https://files.pythonhosted.org/packages/68/95/cc0d3634cde9ca69b0e51cbe830d8915ea32dda2157560dda27ff3b3337b/pyarrow-20.0.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:a1f60dc14658efaa927f8214734f6a01a806d7690be4b3232ba526836d216122", size = 40619853, upload_time = "2025-04-27T12:32:28.1Z" }, - { url = "https://files.pythonhosted.org/packages/29/c2/3ad40e07e96a3e74e7ed7cc8285aadfa84eb848a798c98ec0ad009eb6bcc/pyarrow-20.0.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:204a846dca751428991346976b914d6d2a82ae5b8316a6ed99789ebf976551e6", size = 42241743, upload_time = "2025-04-27T12:32:35.792Z" }, - { url = "https://files.pythonhosted.org/packages/eb/cb/65fa110b483339add6a9bc7b6373614166b14e20375d4daa73483755f830/pyarrow-20.0.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:f3b117b922af5e4c6b9a9115825726cac7d8b1421c37c2b5e24fbacc8930612c", size = 42839441, upload_time = "2025-04-27T12:32:46.64Z" }, - { url = "https://files.pythonhosted.org/packages/98/7b/f30b1954589243207d7a0fbc9997401044bf9a033eec78f6cb50da3f304a/pyarrow-20.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e724a3fd23ae5b9c010e7be857f4405ed5e679db5c93e66204db1a69f733936a", size = 44503279, upload_time = "2025-04-27T12:32:56.503Z" }, - { url = "https://files.pythonhosted.org/packages/37/40/ad395740cd641869a13bcf60851296c89624662575621968dcfafabaa7f6/pyarrow-20.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:82f1ee5133bd8f49d31be1299dc07f585136679666b502540db854968576faf9", size = 25944982, upload_time = "2025-04-27T12:33:04.72Z" }, +version = "21.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ef/c2/ea068b8f00905c06329a3dfcd40d0fcc2b7d0f2e355bdb25b65e0a0e4cd4/pyarrow-21.0.0.tar.gz", hash = "sha256:5051f2dccf0e283ff56335760cbc8622cf52264d67e359d5569541ac11b6d5bc", size = 1133487 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ca/d4/d4f817b21aacc30195cf6a46ba041dd1be827efa4a623cc8bf39a1c2a0c0/pyarrow-21.0.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:3a302f0e0963db37e0a24a70c56cf91a4faa0bca51c23812279ca2e23481fccd", size = 31160305 }, + { url = "https://files.pythonhosted.org/packages/a2/9c/dcd38ce6e4b4d9a19e1d36914cb8e2b1da4e6003dd075474c4cfcdfe0601/pyarrow-21.0.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:b6b27cf01e243871390474a211a7922bfbe3bda21e39bc9160daf0da3fe48876", size = 32684264 }, + { url = "https://files.pythonhosted.org/packages/4f/74/2a2d9f8d7a59b639523454bec12dba35ae3d0a07d8ab529dc0809f74b23c/pyarrow-21.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:e72a8ec6b868e258a2cd2672d91f2860ad532d590ce94cdf7d5e7ec674ccf03d", size = 41108099 }, + { url = "https://files.pythonhosted.org/packages/ad/90/2660332eeb31303c13b653ea566a9918484b6e4d6b9d2d46879a33ab0622/pyarrow-21.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:b7ae0bbdc8c6674259b25bef5d2a1d6af5d39d7200c819cf99e07f7dfef1c51e", size = 42829529 }, + { url = "https://files.pythonhosted.org/packages/33/27/1a93a25c92717f6aa0fca06eb4700860577d016cd3ae51aad0e0488ac899/pyarrow-21.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:58c30a1729f82d201627c173d91bd431db88ea74dcaa3885855bc6203e433b82", size = 43367883 }, + { url = "https://files.pythonhosted.org/packages/05/d9/4d09d919f35d599bc05c6950095e358c3e15148ead26292dfca1fb659b0c/pyarrow-21.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:072116f65604b822a7f22945a7a6e581cfa28e3454fdcc6939d4ff6090126623", size = 45133802 }, + { url = "https://files.pythonhosted.org/packages/71/30/f3795b6e192c3ab881325ffe172e526499eb3780e306a15103a2764916a2/pyarrow-21.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:cf56ec8b0a5c8c9d7021d6fd754e688104f9ebebf1bf4449613c9531f5346a18", size = 26203175 }, + { url = "https://files.pythonhosted.org/packages/16/ca/c7eaa8e62db8fb37ce942b1ea0c6d7abfe3786ca193957afa25e71b81b66/pyarrow-21.0.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:e99310a4ebd4479bcd1964dff9e14af33746300cb014aa4a3781738ac63baf4a", size = 31154306 }, + { url = "https://files.pythonhosted.org/packages/ce/e8/e87d9e3b2489302b3a1aea709aaca4b781c5252fcb812a17ab6275a9a484/pyarrow-21.0.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:d2fe8e7f3ce329a71b7ddd7498b3cfac0eeb200c2789bd840234f0dc271a8efe", size = 32680622 }, + { url = "https://files.pythonhosted.org/packages/84/52/79095d73a742aa0aba370c7942b1b655f598069489ab387fe47261a849e1/pyarrow-21.0.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:f522e5709379d72fb3da7785aa489ff0bb87448a9dc5a75f45763a795a089ebd", size = 41104094 }, + { url = "https://files.pythonhosted.org/packages/89/4b/7782438b551dbb0468892a276b8c789b8bbdb25ea5c5eb27faadd753e037/pyarrow-21.0.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:69cbbdf0631396e9925e048cfa5bce4e8c3d3b41562bbd70c685a8eb53a91e61", size = 42825576 }, + { url = "https://files.pythonhosted.org/packages/b3/62/0f29de6e0a1e33518dec92c65be0351d32d7ca351e51ec5f4f837a9aab91/pyarrow-21.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:731c7022587006b755d0bdb27626a1a3bb004bb56b11fb30d98b6c1b4718579d", size = 43368342 }, + { url = "https://files.pythonhosted.org/packages/90/c7/0fa1f3f29cf75f339768cc698c8ad4ddd2481c1742e9741459911c9ac477/pyarrow-21.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dc56bc708f2d8ac71bd1dcb927e458c93cec10b98eb4120206a4091db7b67b99", size = 45131218 }, + { url = "https://files.pythonhosted.org/packages/01/63/581f2076465e67b23bc5a37d4a2abff8362d389d29d8105832e82c9c811c/pyarrow-21.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:186aa00bca62139f75b7de8420f745f2af12941595bbbfa7ed3870ff63e25636", size = 26087551 }, + { url = "https://files.pythonhosted.org/packages/c9/ab/357d0d9648bb8241ee7348e564f2479d206ebe6e1c47ac5027c2e31ecd39/pyarrow-21.0.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:a7a102574faa3f421141a64c10216e078df467ab9576684d5cd696952546e2da", size = 31290064 }, + { url = "https://files.pythonhosted.org/packages/3f/8a/5685d62a990e4cac2043fc76b4661bf38d06efed55cf45a334b455bd2759/pyarrow-21.0.0-cp313-cp313t-macosx_12_0_x86_64.whl", hash = "sha256:1e005378c4a2c6db3ada3ad4c217b381f6c886f0a80d6a316fe586b90f77efd7", size = 32727837 }, + { url = "https://files.pythonhosted.org/packages/fc/de/c0828ee09525c2bafefd3e736a248ebe764d07d0fd762d4f0929dbc516c9/pyarrow-21.0.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:65f8e85f79031449ec8706b74504a316805217b35b6099155dd7e227eef0d4b6", size = 41014158 }, + { url = "https://files.pythonhosted.org/packages/6e/26/a2865c420c50b7a3748320b614f3484bfcde8347b2639b2b903b21ce6a72/pyarrow-21.0.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:3a81486adc665c7eb1a2bde0224cfca6ceaba344a82a971ef059678417880eb8", size = 42667885 }, + { url = "https://files.pythonhosted.org/packages/0a/f9/4ee798dc902533159250fb4321267730bc0a107d8c6889e07c3add4fe3a5/pyarrow-21.0.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:fc0d2f88b81dcf3ccf9a6ae17f89183762c8a94a5bdcfa09e05cfe413acf0503", size = 43276625 }, + { url = "https://files.pythonhosted.org/packages/5a/da/e02544d6997037a4b0d22d8e5f66bc9315c3671371a8b18c79ade1cefe14/pyarrow-21.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6299449adf89df38537837487a4f8d3bd91ec94354fdd2a7d30bc11c48ef6e79", size = 44951890 }, + { url = "https://files.pythonhosted.org/packages/e5/4e/519c1bc1876625fe6b71e9a28287c43ec2f20f73c658b9ae1d485c0c206e/pyarrow-21.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:222c39e2c70113543982c6b34f3077962b44fca38c0bd9e68bb6781534425c10", size = 26371006 }, ] [[package]] name = "pycparser" -version = "2.22" +version = "2.23" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1d/b2/31537cf4b1ca988837256c910a668b553fceb8f069bedc4b1c826024b52c/pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", size = 172736, upload_time = "2024-03-30T13:22:22.564Z" } +sdist = { url = "https://files.pythonhosted.org/packages/fe/cf/d2d3b9f5699fb1e4615c8e32ff220203e43b248e1dfcc6736ad9057731ca/pycparser-2.23.tar.gz", hash = "sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2", size = 173734 } wheels = [ - { url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552, upload_time = "2024-03-30T13:22:20.476Z" }, + { url = "https://files.pythonhosted.org/packages/a0/e3/59cd50310fc9b59512193629e1984c1f95e5c8ae6e5d8c69532ccc65a7fe/pycparser-2.23-py3-none-any.whl", hash = "sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934", size = 118140 }, ] [[package]] name = "pydantic" -version = "2.11.7" +version = "2.11.9" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "annotated-types" }, @@ -1974,9 +2087,9 @@ dependencies = [ { name = "typing-extensions" }, { name = "typing-inspection" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/00/dd/4325abf92c39ba8623b5af936ddb36ffcfe0beae70405d456ab1fb2f5b8c/pydantic-2.11.7.tar.gz", hash = "sha256:d989c3c6cb79469287b1569f7447a17848c998458d49ebe294e975b9baf0f0db", size = 788350, upload_time = "2025-06-14T08:33:17.137Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ff/5d/09a551ba512d7ca404d785072700d3f6727a02f6f3c24ecfd081c7cf0aa8/pydantic-2.11.9.tar.gz", hash = "sha256:6b8ffda597a14812a7975c90b82a8a2e777d9257aba3453f973acd3c032a18e2", size = 788495 } wheels = [ - { url = "https://files.pythonhosted.org/packages/6a/c0/ec2b1c8712ca690e5d61979dee872603e92b8a32f94cc1b72d53beab008a/pydantic-2.11.7-py3-none-any.whl", hash = "sha256:dde5df002701f6de26248661f6835bbe296a47bf73990135c7d07ce741b9623b", size = 444782, upload_time = "2025-06-14T08:33:14.905Z" }, + { url = "https://files.pythonhosted.org/packages/3e/d3/108f2006987c58e76691d5ae5d200dd3e0f532cb4e5fa3560751c3a1feba/pydantic-2.11.9-py3-none-any.whl", hash = "sha256:c42dd626f5cfc1c6950ce6205ea58c93efa406da65f479dcb4029d5934857da2", size = 444855 }, ] [[package]] @@ -1986,39 +2099,39 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ad/88/5f2260bdfae97aabf98f1778d43f69574390ad787afb646292a638c923d4/pydantic_core-2.33.2.tar.gz", hash = "sha256:7cb8bc3605c29176e1b105350d2e6474142d7c1bd1d9327c4a9bdb46bf827acc", size = 435195, upload_time = "2025-04-23T18:33:52.104Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/18/8a/2b41c97f554ec8c71f2a8a5f85cb56a8b0956addfe8b0efb5b3d77e8bdc3/pydantic_core-2.33.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a7ec89dc587667f22b6a0b6579c249fca9026ce7c333fc142ba42411fa243cdc", size = 2009000, upload_time = "2025-04-23T18:31:25.863Z" }, - { url = "https://files.pythonhosted.org/packages/a1/02/6224312aacb3c8ecbaa959897af57181fb6cf3a3d7917fd44d0f2917e6f2/pydantic_core-2.33.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3c6db6e52c6d70aa0d00d45cdb9b40f0433b96380071ea80b09277dba021ddf7", size = 1847996, upload_time = "2025-04-23T18:31:27.341Z" }, - { url = "https://files.pythonhosted.org/packages/d6/46/6dcdf084a523dbe0a0be59d054734b86a981726f221f4562aed313dbcb49/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e61206137cbc65e6d5256e1166f88331d3b6238e082d9f74613b9b765fb9025", size = 1880957, upload_time = "2025-04-23T18:31:28.956Z" }, - { url = "https://files.pythonhosted.org/packages/ec/6b/1ec2c03837ac00886ba8160ce041ce4e325b41d06a034adbef11339ae422/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb8c529b2819c37140eb51b914153063d27ed88e3bdc31b71198a198e921e011", size = 1964199, upload_time = "2025-04-23T18:31:31.025Z" }, - { url = "https://files.pythonhosted.org/packages/2d/1d/6bf34d6adb9debd9136bd197ca72642203ce9aaaa85cfcbfcf20f9696e83/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c52b02ad8b4e2cf14ca7b3d918f3eb0ee91e63b3167c32591e57c4317e134f8f", size = 2120296, upload_time = "2025-04-23T18:31:32.514Z" }, - { url = "https://files.pythonhosted.org/packages/e0/94/2bd0aaf5a591e974b32a9f7123f16637776c304471a0ab33cf263cf5591a/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96081f1605125ba0855dfda83f6f3df5ec90c61195421ba72223de35ccfb2f88", size = 2676109, upload_time = "2025-04-23T18:31:33.958Z" }, - { url = "https://files.pythonhosted.org/packages/f9/41/4b043778cf9c4285d59742281a769eac371b9e47e35f98ad321349cc5d61/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f57a69461af2a5fa6e6bbd7a5f60d3b7e6cebb687f55106933188e79ad155c1", size = 2002028, upload_time = "2025-04-23T18:31:39.095Z" }, - { url = "https://files.pythonhosted.org/packages/cb/d5/7bb781bf2748ce3d03af04d5c969fa1308880e1dca35a9bd94e1a96a922e/pydantic_core-2.33.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:572c7e6c8bb4774d2ac88929e3d1f12bc45714ae5ee6d9a788a9fb35e60bb04b", size = 2100044, upload_time = "2025-04-23T18:31:41.034Z" }, - { url = "https://files.pythonhosted.org/packages/fe/36/def5e53e1eb0ad896785702a5bbfd25eed546cdcf4087ad285021a90ed53/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:db4b41f9bd95fbe5acd76d89920336ba96f03e149097365afe1cb092fceb89a1", size = 2058881, upload_time = "2025-04-23T18:31:42.757Z" }, - { url = "https://files.pythonhosted.org/packages/01/6c/57f8d70b2ee57fc3dc8b9610315949837fa8c11d86927b9bb044f8705419/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:fa854f5cf7e33842a892e5c73f45327760bc7bc516339fda888c75ae60edaeb6", size = 2227034, upload_time = "2025-04-23T18:31:44.304Z" }, - { url = "https://files.pythonhosted.org/packages/27/b9/9c17f0396a82b3d5cbea4c24d742083422639e7bb1d5bf600e12cb176a13/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5f483cfb75ff703095c59e365360cb73e00185e01aaea067cd19acffd2ab20ea", size = 2234187, upload_time = "2025-04-23T18:31:45.891Z" }, - { url = "https://files.pythonhosted.org/packages/b0/6a/adf5734ffd52bf86d865093ad70b2ce543415e0e356f6cacabbc0d9ad910/pydantic_core-2.33.2-cp312-cp312-win32.whl", hash = "sha256:9cb1da0f5a471435a7bc7e439b8a728e8b61e59784b2af70d7c169f8dd8ae290", size = 1892628, upload_time = "2025-04-23T18:31:47.819Z" }, - { url = "https://files.pythonhosted.org/packages/43/e4/5479fecb3606c1368d496a825d8411e126133c41224c1e7238be58b87d7e/pydantic_core-2.33.2-cp312-cp312-win_amd64.whl", hash = "sha256:f941635f2a3d96b2973e867144fde513665c87f13fe0e193c158ac51bfaaa7b2", size = 1955866, upload_time = "2025-04-23T18:31:49.635Z" }, - { url = "https://files.pythonhosted.org/packages/0d/24/8b11e8b3e2be9dd82df4b11408a67c61bb4dc4f8e11b5b0fc888b38118b5/pydantic_core-2.33.2-cp312-cp312-win_arm64.whl", hash = "sha256:cca3868ddfaccfbc4bfb1d608e2ccaaebe0ae628e1416aeb9c4d88c001bb45ab", size = 1888894, upload_time = "2025-04-23T18:31:51.609Z" }, - { url = "https://files.pythonhosted.org/packages/46/8c/99040727b41f56616573a28771b1bfa08a3d3fe74d3d513f01251f79f172/pydantic_core-2.33.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:1082dd3e2d7109ad8b7da48e1d4710c8d06c253cbc4a27c1cff4fbcaa97a9e3f", size = 2015688, upload_time = "2025-04-23T18:31:53.175Z" }, - { url = "https://files.pythonhosted.org/packages/3a/cc/5999d1eb705a6cefc31f0b4a90e9f7fc400539b1a1030529700cc1b51838/pydantic_core-2.33.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f517ca031dfc037a9c07e748cefd8d96235088b83b4f4ba8939105d20fa1dcd6", size = 1844808, upload_time = "2025-04-23T18:31:54.79Z" }, - { url = "https://files.pythonhosted.org/packages/6f/5e/a0a7b8885c98889a18b6e376f344da1ef323d270b44edf8174d6bce4d622/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a9f2c9dd19656823cb8250b0724ee9c60a82f3cdf68a080979d13092a3b0fef", size = 1885580, upload_time = "2025-04-23T18:31:57.393Z" }, - { url = "https://files.pythonhosted.org/packages/3b/2a/953581f343c7d11a304581156618c3f592435523dd9d79865903272c256a/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2b0a451c263b01acebe51895bfb0e1cc842a5c666efe06cdf13846c7418caa9a", size = 1973859, upload_time = "2025-04-23T18:31:59.065Z" }, - { url = "https://files.pythonhosted.org/packages/e6/55/f1a813904771c03a3f97f676c62cca0c0a4138654107c1b61f19c644868b/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ea40a64d23faa25e62a70ad163571c0b342b8bf66d5fa612ac0dec4f069d916", size = 2120810, upload_time = "2025-04-23T18:32:00.78Z" }, - { url = "https://files.pythonhosted.org/packages/aa/c3/053389835a996e18853ba107a63caae0b9deb4a276c6b472931ea9ae6e48/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fb2d542b4d66f9470e8065c5469ec676978d625a8b7a363f07d9a501a9cb36a", size = 2676498, upload_time = "2025-04-23T18:32:02.418Z" }, - { url = "https://files.pythonhosted.org/packages/eb/3c/f4abd740877a35abade05e437245b192f9d0ffb48bbbbd708df33d3cda37/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdac5d6ffa1b5a83bca06ffe7583f5576555e6c8b3a91fbd25ea7780f825f7d", size = 2000611, upload_time = "2025-04-23T18:32:04.152Z" }, - { url = "https://files.pythonhosted.org/packages/59/a7/63ef2fed1837d1121a894d0ce88439fe3e3b3e48c7543b2a4479eb99c2bd/pydantic_core-2.33.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04a1a413977ab517154eebb2d326da71638271477d6ad87a769102f7c2488c56", size = 2107924, upload_time = "2025-04-23T18:32:06.129Z" }, - { url = "https://files.pythonhosted.org/packages/04/8f/2551964ef045669801675f1cfc3b0d74147f4901c3ffa42be2ddb1f0efc4/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c8e7af2f4e0194c22b5b37205bfb293d166a7344a5b0d0eaccebc376546d77d5", size = 2063196, upload_time = "2025-04-23T18:32:08.178Z" }, - { url = "https://files.pythonhosted.org/packages/26/bd/d9602777e77fc6dbb0c7db9ad356e9a985825547dce5ad1d30ee04903918/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:5c92edd15cd58b3c2d34873597a1e20f13094f59cf88068adb18947df5455b4e", size = 2236389, upload_time = "2025-04-23T18:32:10.242Z" }, - { url = "https://files.pythonhosted.org/packages/42/db/0e950daa7e2230423ab342ae918a794964b053bec24ba8af013fc7c94846/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:65132b7b4a1c0beded5e057324b7e16e10910c106d43675d9bd87d4f38dde162", size = 2239223, upload_time = "2025-04-23T18:32:12.382Z" }, - { url = "https://files.pythonhosted.org/packages/58/4d/4f937099c545a8a17eb52cb67fe0447fd9a373b348ccfa9a87f141eeb00f/pydantic_core-2.33.2-cp313-cp313-win32.whl", hash = "sha256:52fb90784e0a242bb96ec53f42196a17278855b0f31ac7c3cc6f5c1ec4811849", size = 1900473, upload_time = "2025-04-23T18:32:14.034Z" }, - { url = "https://files.pythonhosted.org/packages/a0/75/4a0a9bac998d78d889def5e4ef2b065acba8cae8c93696906c3a91f310ca/pydantic_core-2.33.2-cp313-cp313-win_amd64.whl", hash = "sha256:c083a3bdd5a93dfe480f1125926afcdbf2917ae714bdb80b36d34318b2bec5d9", size = 1955269, upload_time = "2025-04-23T18:32:15.783Z" }, - { url = "https://files.pythonhosted.org/packages/f9/86/1beda0576969592f1497b4ce8e7bc8cbdf614c352426271b1b10d5f0aa64/pydantic_core-2.33.2-cp313-cp313-win_arm64.whl", hash = "sha256:e80b087132752f6b3d714f041ccf74403799d3b23a72722ea2e6ba2e892555b9", size = 1893921, upload_time = "2025-04-23T18:32:18.473Z" }, - { url = "https://files.pythonhosted.org/packages/a4/7d/e09391c2eebeab681df2b74bfe6c43422fffede8dc74187b2b0bf6fd7571/pydantic_core-2.33.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:61c18fba8e5e9db3ab908620af374db0ac1baa69f0f32df4f61ae23f15e586ac", size = 1806162, upload_time = "2025-04-23T18:32:20.188Z" }, - { url = "https://files.pythonhosted.org/packages/f1/3d/847b6b1fed9f8ed3bb95a9ad04fbd0b212e832d4f0f50ff4d9ee5a9f15cf/pydantic_core-2.33.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95237e53bb015f67b63c91af7518a62a8660376a6a0db19b89acc77a4d6199f5", size = 1981560, upload_time = "2025-04-23T18:32:22.354Z" }, - { url = "https://files.pythonhosted.org/packages/6f/9a/e73262f6c6656262b5fdd723ad90f518f579b7bc8622e43a942eec53c938/pydantic_core-2.33.2-cp313-cp313t-win_amd64.whl", hash = "sha256:c2fc0a768ef76c15ab9238afa6da7f69895bb5d1ee83aeea2e3509af4472d0b9", size = 1935777, upload_time = "2025-04-23T18:32:25.088Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/ad/88/5f2260bdfae97aabf98f1778d43f69574390ad787afb646292a638c923d4/pydantic_core-2.33.2.tar.gz", hash = "sha256:7cb8bc3605c29176e1b105350d2e6474142d7c1bd1d9327c4a9bdb46bf827acc", size = 435195 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/8a/2b41c97f554ec8c71f2a8a5f85cb56a8b0956addfe8b0efb5b3d77e8bdc3/pydantic_core-2.33.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a7ec89dc587667f22b6a0b6579c249fca9026ce7c333fc142ba42411fa243cdc", size = 2009000 }, + { url = "https://files.pythonhosted.org/packages/a1/02/6224312aacb3c8ecbaa959897af57181fb6cf3a3d7917fd44d0f2917e6f2/pydantic_core-2.33.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3c6db6e52c6d70aa0d00d45cdb9b40f0433b96380071ea80b09277dba021ddf7", size = 1847996 }, + { url = "https://files.pythonhosted.org/packages/d6/46/6dcdf084a523dbe0a0be59d054734b86a981726f221f4562aed313dbcb49/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e61206137cbc65e6d5256e1166f88331d3b6238e082d9f74613b9b765fb9025", size = 1880957 }, + { url = "https://files.pythonhosted.org/packages/ec/6b/1ec2c03837ac00886ba8160ce041ce4e325b41d06a034adbef11339ae422/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb8c529b2819c37140eb51b914153063d27ed88e3bdc31b71198a198e921e011", size = 1964199 }, + { url = "https://files.pythonhosted.org/packages/2d/1d/6bf34d6adb9debd9136bd197ca72642203ce9aaaa85cfcbfcf20f9696e83/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c52b02ad8b4e2cf14ca7b3d918f3eb0ee91e63b3167c32591e57c4317e134f8f", size = 2120296 }, + { url = "https://files.pythonhosted.org/packages/e0/94/2bd0aaf5a591e974b32a9f7123f16637776c304471a0ab33cf263cf5591a/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96081f1605125ba0855dfda83f6f3df5ec90c61195421ba72223de35ccfb2f88", size = 2676109 }, + { url = "https://files.pythonhosted.org/packages/f9/41/4b043778cf9c4285d59742281a769eac371b9e47e35f98ad321349cc5d61/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f57a69461af2a5fa6e6bbd7a5f60d3b7e6cebb687f55106933188e79ad155c1", size = 2002028 }, + { url = "https://files.pythonhosted.org/packages/cb/d5/7bb781bf2748ce3d03af04d5c969fa1308880e1dca35a9bd94e1a96a922e/pydantic_core-2.33.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:572c7e6c8bb4774d2ac88929e3d1f12bc45714ae5ee6d9a788a9fb35e60bb04b", size = 2100044 }, + { url = "https://files.pythonhosted.org/packages/fe/36/def5e53e1eb0ad896785702a5bbfd25eed546cdcf4087ad285021a90ed53/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:db4b41f9bd95fbe5acd76d89920336ba96f03e149097365afe1cb092fceb89a1", size = 2058881 }, + { url = "https://files.pythonhosted.org/packages/01/6c/57f8d70b2ee57fc3dc8b9610315949837fa8c11d86927b9bb044f8705419/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:fa854f5cf7e33842a892e5c73f45327760bc7bc516339fda888c75ae60edaeb6", size = 2227034 }, + { url = "https://files.pythonhosted.org/packages/27/b9/9c17f0396a82b3d5cbea4c24d742083422639e7bb1d5bf600e12cb176a13/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5f483cfb75ff703095c59e365360cb73e00185e01aaea067cd19acffd2ab20ea", size = 2234187 }, + { url = "https://files.pythonhosted.org/packages/b0/6a/adf5734ffd52bf86d865093ad70b2ce543415e0e356f6cacabbc0d9ad910/pydantic_core-2.33.2-cp312-cp312-win32.whl", hash = "sha256:9cb1da0f5a471435a7bc7e439b8a728e8b61e59784b2af70d7c169f8dd8ae290", size = 1892628 }, + { url = "https://files.pythonhosted.org/packages/43/e4/5479fecb3606c1368d496a825d8411e126133c41224c1e7238be58b87d7e/pydantic_core-2.33.2-cp312-cp312-win_amd64.whl", hash = "sha256:f941635f2a3d96b2973e867144fde513665c87f13fe0e193c158ac51bfaaa7b2", size = 1955866 }, + { url = "https://files.pythonhosted.org/packages/0d/24/8b11e8b3e2be9dd82df4b11408a67c61bb4dc4f8e11b5b0fc888b38118b5/pydantic_core-2.33.2-cp312-cp312-win_arm64.whl", hash = "sha256:cca3868ddfaccfbc4bfb1d608e2ccaaebe0ae628e1416aeb9c4d88c001bb45ab", size = 1888894 }, + { url = "https://files.pythonhosted.org/packages/46/8c/99040727b41f56616573a28771b1bfa08a3d3fe74d3d513f01251f79f172/pydantic_core-2.33.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:1082dd3e2d7109ad8b7da48e1d4710c8d06c253cbc4a27c1cff4fbcaa97a9e3f", size = 2015688 }, + { url = "https://files.pythonhosted.org/packages/3a/cc/5999d1eb705a6cefc31f0b4a90e9f7fc400539b1a1030529700cc1b51838/pydantic_core-2.33.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f517ca031dfc037a9c07e748cefd8d96235088b83b4f4ba8939105d20fa1dcd6", size = 1844808 }, + { url = "https://files.pythonhosted.org/packages/6f/5e/a0a7b8885c98889a18b6e376f344da1ef323d270b44edf8174d6bce4d622/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a9f2c9dd19656823cb8250b0724ee9c60a82f3cdf68a080979d13092a3b0fef", size = 1885580 }, + { url = "https://files.pythonhosted.org/packages/3b/2a/953581f343c7d11a304581156618c3f592435523dd9d79865903272c256a/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2b0a451c263b01acebe51895bfb0e1cc842a5c666efe06cdf13846c7418caa9a", size = 1973859 }, + { url = "https://files.pythonhosted.org/packages/e6/55/f1a813904771c03a3f97f676c62cca0c0a4138654107c1b61f19c644868b/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ea40a64d23faa25e62a70ad163571c0b342b8bf66d5fa612ac0dec4f069d916", size = 2120810 }, + { url = "https://files.pythonhosted.org/packages/aa/c3/053389835a996e18853ba107a63caae0b9deb4a276c6b472931ea9ae6e48/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fb2d542b4d66f9470e8065c5469ec676978d625a8b7a363f07d9a501a9cb36a", size = 2676498 }, + { url = "https://files.pythonhosted.org/packages/eb/3c/f4abd740877a35abade05e437245b192f9d0ffb48bbbbd708df33d3cda37/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdac5d6ffa1b5a83bca06ffe7583f5576555e6c8b3a91fbd25ea7780f825f7d", size = 2000611 }, + { url = "https://files.pythonhosted.org/packages/59/a7/63ef2fed1837d1121a894d0ce88439fe3e3b3e48c7543b2a4479eb99c2bd/pydantic_core-2.33.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04a1a413977ab517154eebb2d326da71638271477d6ad87a769102f7c2488c56", size = 2107924 }, + { url = "https://files.pythonhosted.org/packages/04/8f/2551964ef045669801675f1cfc3b0d74147f4901c3ffa42be2ddb1f0efc4/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c8e7af2f4e0194c22b5b37205bfb293d166a7344a5b0d0eaccebc376546d77d5", size = 2063196 }, + { url = "https://files.pythonhosted.org/packages/26/bd/d9602777e77fc6dbb0c7db9ad356e9a985825547dce5ad1d30ee04903918/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:5c92edd15cd58b3c2d34873597a1e20f13094f59cf88068adb18947df5455b4e", size = 2236389 }, + { url = "https://files.pythonhosted.org/packages/42/db/0e950daa7e2230423ab342ae918a794964b053bec24ba8af013fc7c94846/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:65132b7b4a1c0beded5e057324b7e16e10910c106d43675d9bd87d4f38dde162", size = 2239223 }, + { url = "https://files.pythonhosted.org/packages/58/4d/4f937099c545a8a17eb52cb67fe0447fd9a373b348ccfa9a87f141eeb00f/pydantic_core-2.33.2-cp313-cp313-win32.whl", hash = "sha256:52fb90784e0a242bb96ec53f42196a17278855b0f31ac7c3cc6f5c1ec4811849", size = 1900473 }, + { url = "https://files.pythonhosted.org/packages/a0/75/4a0a9bac998d78d889def5e4ef2b065acba8cae8c93696906c3a91f310ca/pydantic_core-2.33.2-cp313-cp313-win_amd64.whl", hash = "sha256:c083a3bdd5a93dfe480f1125926afcdbf2917ae714bdb80b36d34318b2bec5d9", size = 1955269 }, + { url = "https://files.pythonhosted.org/packages/f9/86/1beda0576969592f1497b4ce8e7bc8cbdf614c352426271b1b10d5f0aa64/pydantic_core-2.33.2-cp313-cp313-win_arm64.whl", hash = "sha256:e80b087132752f6b3d714f041ccf74403799d3b23a72722ea2e6ba2e892555b9", size = 1893921 }, + { url = "https://files.pythonhosted.org/packages/a4/7d/e09391c2eebeab681df2b74bfe6c43422fffede8dc74187b2b0bf6fd7571/pydantic_core-2.33.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:61c18fba8e5e9db3ab908620af374db0ac1baa69f0f32df4f61ae23f15e586ac", size = 1806162 }, + { url = "https://files.pythonhosted.org/packages/f1/3d/847b6b1fed9f8ed3bb95a9ad04fbd0b212e832d4f0f50ff4d9ee5a9f15cf/pydantic_core-2.33.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95237e53bb015f67b63c91af7518a62a8660376a6a0db19b89acc77a4d6199f5", size = 1981560 }, + { url = "https://files.pythonhosted.org/packages/6f/9a/e73262f6c6656262b5fdd723ad90f518f579b7bc8622e43a942eec53c938/pydantic_core-2.33.2-cp313-cp313t-win_amd64.whl", hash = "sha256:c2fc0a768ef76c15ab9238afa6da7f69895bb5d1ee83aeea2e3509af4472d0b9", size = 1935777 }, ] [[package]] @@ -2034,14 +2147,14 @@ dependencies = [ { name = "requests" }, { name = "wbgapi" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/5e/72/3e56d8166ca4b366a4e37c85711a706bba66768f70ba690bdb279f728d8d/pydeflate-2.1.3.tar.gz", hash = "sha256:48a2b74ad900dd8c50dfb1e4cdfcea8ca11cbd2d3a713bf9208f2028fea4cf4f", size = 26586, upload_time = "2025-06-03T09:38:12.25Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5e/72/3e56d8166ca4b366a4e37c85711a706bba66768f70ba690bdb279f728d8d/pydeflate-2.1.3.tar.gz", hash = "sha256:48a2b74ad900dd8c50dfb1e4cdfcea8ca11cbd2d3a713bf9208f2028fea4cf4f", size = 26586 } wheels = [ - { url = "https://files.pythonhosted.org/packages/31/31/e703ab5bc311c58e4dc00759d7a48a850877b8bbcd64c9778e2315e06bd5/pydeflate-2.1.3-py3-none-any.whl", hash = "sha256:09ebdde04eb2fea1c4b6712889cb2a9d4c2dd22ce0204aaeae64f4335667354f", size = 32540, upload_time = "2025-06-03T09:38:10.858Z" }, + { url = "https://files.pythonhosted.org/packages/31/31/e703ab5bc311c58e4dc00759d7a48a850877b8bbcd64c9778e2315e06bd5/pydeflate-2.1.3-py3-none-any.whl", hash = "sha256:09ebdde04eb2fea1c4b6712889cb2a9d4c2dd22ce0204aaeae64f4335667354f", size = 32540 }, ] [[package]] name = "pygithub" -version = "2.7.0" +version = "2.8.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pyjwt", extra = ["crypto"] }, @@ -2050,36 +2163,36 @@ dependencies = [ { name = "typing-extensions" }, { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/6a/a7/403e04aa96e2d94e1518d518d69718c2ba978c8d3ffa4ab3b101b94dbafa/pygithub-2.7.0.tar.gz", hash = "sha256:7cd6eafabb09b5369afba3586d86b1f1ad6f1326d2ff01bc47bb26615dce4cbb", size = 3707928, upload_time = "2025-07-31T11:52:53.714Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c1/74/e560bdeffea72ecb26cff27f0fad548bbff5ecc51d6a155311ea7f9e4c4c/pygithub-2.8.1.tar.gz", hash = "sha256:341b7c78521cb07324ff670afd1baa2bf5c286f8d9fd302c1798ba594a5400c9", size = 2246994 } wheels = [ - { url = "https://files.pythonhosted.org/packages/57/76/d768dd31322173b3956692b75471ac37bf3759c7abb603152f6a9b6594a8/pygithub-2.7.0-py3-none-any.whl", hash = "sha256:40ecbfe26dc55cc34ab4b0ffa1d455e6f816ef9a2bc8d6f5ad18ce572f163700", size = 416514, upload_time = "2025-07-31T11:52:51.909Z" }, + { url = "https://files.pythonhosted.org/packages/07/ba/7049ce39f653f6140aac4beb53a5aaf08b4407b6a3019aae394c1c5244ff/pygithub-2.8.1-py3-none-any.whl", hash = "sha256:23a0a5bca93baef082e03411bf0ce27204c32be8bfa7abc92fe4a3e132936df0", size = 432709 }, ] [[package]] name = "pygments" version = "2.19.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b0/77/a5b8c569bf593b0140bde72ea885a803b82086995367bf2037de0159d924/pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", size = 4968631, upload_time = "2025-06-21T13:39:12.283Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b0/77/a5b8c569bf593b0140bde72ea885a803b82086995367bf2037de0159d924/pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", size = 4968631 } wheels = [ - { url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217, upload_time = "2025-06-21T13:39:07.939Z" }, + { url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217 }, ] [[package]] name = "pygtrie" version = "2.5.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b9/13/55deec25bf09383216fa7f1dfcdbfca40a04aa00b6d15a5cbf25af8fce5f/pygtrie-2.5.0.tar.gz", hash = "sha256:203514ad826eb403dab1d2e2ddd034e0d1534bbe4dbe0213bb0593f66beba4e2", size = 39266, upload_time = "2022-07-16T14:29:47.459Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b9/13/55deec25bf09383216fa7f1dfcdbfca40a04aa00b6d15a5cbf25af8fce5f/pygtrie-2.5.0.tar.gz", hash = "sha256:203514ad826eb403dab1d2e2ddd034e0d1534bbe4dbe0213bb0593f66beba4e2", size = 39266 } wheels = [ - { url = "https://files.pythonhosted.org/packages/ec/cd/bd196b2cf014afb1009de8b0f05ecd54011d881944e62763f3c1b1e8ef37/pygtrie-2.5.0-py3-none-any.whl", hash = "sha256:8795cda8105493d5ae159a5bef313ff13156c5d4d72feddefacaad59f8c8ce16", size = 25099, upload_time = "2022-09-23T20:30:05.12Z" }, + { url = "https://files.pythonhosted.org/packages/ec/cd/bd196b2cf014afb1009de8b0f05ecd54011d881944e62763f3c1b1e8ef37/pygtrie-2.5.0-py3-none-any.whl", hash = "sha256:8795cda8105493d5ae159a5bef313ff13156c5d4d72feddefacaad59f8c8ce16", size = 25099 }, ] [[package]] name = "pyjwt" version = "2.10.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e7/46/bd74733ff231675599650d3e47f361794b22ef3e3770998dda30d3b63726/pyjwt-2.10.1.tar.gz", hash = "sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953", size = 87785, upload_time = "2024-11-28T03:43:29.933Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e7/46/bd74733ff231675599650d3e47f361794b22ef3e3770998dda30d3b63726/pyjwt-2.10.1.tar.gz", hash = "sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953", size = 87785 } wheels = [ - { url = "https://files.pythonhosted.org/packages/61/ad/689f02752eeec26aed679477e80e632ef1b682313be70793d798c1d5fc8f/PyJWT-2.10.1-py3-none-any.whl", hash = "sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb", size = 22997, upload_time = "2024-11-28T03:43:27.893Z" }, + { url = "https://files.pythonhosted.org/packages/61/ad/689f02752eeec26aed679477e80e632ef1b682313be70793d798c1d5fc8f/PyJWT-2.10.1-py3-none-any.whl", hash = "sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb", size = 22997 }, ] [package.optional-dependencies] @@ -2089,35 +2202,52 @@ crypto = [ [[package]] name = "pymdown-extensions" -version = "10.16" +version = "10.16.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "markdown" }, { name = "pyyaml" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/1a/0a/c06b542ac108bfc73200677309cd9188a3a01b127a63f20cadc18d873d88/pymdown_extensions-10.16.tar.gz", hash = "sha256:71dac4fca63fabeffd3eb9038b756161a33ec6e8d230853d3cecf562155ab3de", size = 853197, upload_time = "2025-06-21T17:56:36.974Z" } +sdist = { url = "https://files.pythonhosted.org/packages/55/b3/6d2b3f149bc5413b0a29761c2c5832d8ce904a1d7f621e86616d96f505cc/pymdown_extensions-10.16.1.tar.gz", hash = "sha256:aace82bcccba3efc03e25d584e6a22d27a8e17caa3f4dd9f207e49b787aa9a91", size = 853277 } wheels = [ - { url = "https://files.pythonhosted.org/packages/98/d4/10bb14004d3c792811e05e21b5e5dcae805aacb739bd12a0540967b99592/pymdown_extensions-10.16-py3-none-any.whl", hash = "sha256:f5dd064a4db588cb2d95229fc4ee63a1b16cc8b4d0e6145c0899ed8723da1df2", size = 266143, upload_time = "2025-06-21T17:56:35.356Z" }, + { url = "https://files.pythonhosted.org/packages/e4/06/43084e6cbd4b3bc0e80f6be743b2e79fbc6eed8de9ad8c629939fa55d972/pymdown_extensions-10.16.1-py3-none-any.whl", hash = "sha256:d6ba157a6c03146a7fb122b2b9a121300056384eafeec9c9f9e584adfdb2a32d", size = 266178 }, ] [[package]] name = "pynacl" -version = "1.5.0" +version = "1.6.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "cffi" }, + { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a7/22/27582568be639dfe22ddb3902225f91f2f17ceff88ce80e4db396c8986da/PyNaCl-1.5.0.tar.gz", hash = "sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba", size = 3392854, upload_time = "2022-01-07T22:05:41.134Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ce/75/0b8ede18506041c0bf23ac4d8e2971b4161cd6ce630b177d0a08eb0d8857/PyNaCl-1.5.0-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1", size = 349920, upload_time = "2022-01-07T22:05:49.156Z" }, - { url = "https://files.pythonhosted.org/packages/59/bb/fddf10acd09637327a97ef89d2a9d621328850a72f1fdc8c08bdf72e385f/PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92", size = 601722, upload_time = "2022-01-07T22:05:50.989Z" }, - { url = "https://files.pythonhosted.org/packages/5d/70/87a065c37cca41a75f2ce113a5a2c2aa7533be648b184ade58971b5f7ccc/PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a36d4a9dda1f19ce6e03c9a784a2921a4b726b02e1c736600ca9c22029474394", size = 680087, upload_time = "2022-01-07T22:05:52.539Z" }, - { url = "https://files.pythonhosted.org/packages/ee/87/f1bb6a595f14a327e8285b9eb54d41fef76c585a0edef0a45f6fc95de125/PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0c84947a22519e013607c9be43706dd42513f9e6ae5d39d3613ca1e142fba44d", size = 856678, upload_time = "2022-01-07T22:05:54.251Z" }, - { url = "https://files.pythonhosted.org/packages/66/28/ca86676b69bf9f90e710571b67450508484388bfce09acf8a46f0b8c785f/PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06b8f6fa7f5de8d5d2f7573fe8c863c051225a27b61e6860fd047b1775807858", size = 1133660, upload_time = "2022-01-07T22:05:56.056Z" }, - { url = "https://files.pythonhosted.org/packages/3d/85/c262db650e86812585e2bc59e497a8f59948a005325a11bbbc9ecd3fe26b/PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b", size = 663824, upload_time = "2022-01-07T22:05:57.434Z" }, - { url = "https://files.pythonhosted.org/packages/fd/1a/cc308a884bd299b651f1633acb978e8596c71c33ca85e9dc9fa33a5399b9/PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:61f642bf2378713e2c2e1de73444a3778e5f0a38be6fee0fe532fe30060282ff", size = 1117912, upload_time = "2022-01-07T22:05:58.665Z" }, - { url = "https://files.pythonhosted.org/packages/25/2d/b7df6ddb0c2a33afdb358f8af6ea3b8c4d1196ca45497dd37a56f0c122be/PyNaCl-1.5.0-cp36-abi3-win32.whl", hash = "sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543", size = 204624, upload_time = "2022-01-07T22:06:00.085Z" }, - { url = "https://files.pythonhosted.org/packages/5e/22/d3db169895faaf3e2eda892f005f433a62db2decbcfbc2f61e6517adfa87/PyNaCl-1.5.0-cp36-abi3-win_amd64.whl", hash = "sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93", size = 212141, upload_time = "2022-01-07T22:06:01.861Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/06/c6/a3124dee667a423f2c637cfd262a54d67d8ccf3e160f3c50f622a85b7723/pynacl-1.6.0.tar.gz", hash = "sha256:cb36deafe6e2bce3b286e5d1f3e1c246e0ccdb8808ddb4550bb2792f2df298f2", size = 3505641 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/70/24/1b639176401255605ba7c2b93a7b1eb1e379e0710eca62613633eb204201/pynacl-1.6.0-cp314-cp314t-macosx_10_10_universal2.whl", hash = "sha256:f46386c24a65383a9081d68e9c2de909b1834ec74ff3013271f1bca9c2d233eb", size = 384141 }, + { url = "https://files.pythonhosted.org/packages/5e/7b/874efdf57d6bf172db0df111b479a553c3d9e8bb4f1f69eb3ffff772d6e8/pynacl-1.6.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:dea103a1afcbc333bc0e992e64233d360d393d1e63d0bc88554f572365664348", size = 808132 }, + { url = "https://files.pythonhosted.org/packages/f3/61/9b53f5913f3b75ac3d53170cdb897101b2b98afc76f4d9d3c8de5aa3ac05/pynacl-1.6.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:04f20784083014e265ad58c1b2dd562c3e35864b5394a14ab54f5d150ee9e53e", size = 1407253 }, + { url = "https://files.pythonhosted.org/packages/7c/0a/b138916b22bbf03a1bdbafecec37d714e7489dd7bcaf80cd17852f8b67be/pynacl-1.6.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bbcc4452a1eb10cd5217318c822fde4be279c9de8567f78bad24c773c21254f8", size = 843719 }, + { url = "https://files.pythonhosted.org/packages/01/3b/17c368197dfb2c817ce033f94605a47d0cc27901542109e640cef263f0af/pynacl-1.6.0-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:51fed9fe1bec9e7ff9af31cd0abba179d0e984a2960c77e8e5292c7e9b7f7b5d", size = 1445441 }, + { url = "https://files.pythonhosted.org/packages/35/3c/f79b185365ab9be80cd3cd01dacf30bf5895f9b7b001e683b369e0bb6d3d/pynacl-1.6.0-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:10d755cf2a455d8c0f8c767a43d68f24d163b8fe93ccfaabfa7bafd26be58d73", size = 825691 }, + { url = "https://files.pythonhosted.org/packages/f7/1f/8b37d25e95b8f2a434a19499a601d4d272b9839ab8c32f6b0fc1e40c383f/pynacl-1.6.0-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:536703b8f90e911294831a7fbcd0c062b837f3ccaa923d92a6254e11178aaf42", size = 1410726 }, + { url = "https://files.pythonhosted.org/packages/bd/93/5a4a4cf9913014f83d615ad6a2df9187330f764f606246b3a744c0788c03/pynacl-1.6.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:6b08eab48c9669d515a344fb0ef27e2cbde847721e34bba94a343baa0f33f1f4", size = 801035 }, + { url = "https://files.pythonhosted.org/packages/bf/60/40da6b0fe6a4d5fd88f608389eb1df06492ba2edca93fca0b3bebff9b948/pynacl-1.6.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5789f016e08e5606803161ba24de01b5a345d24590a80323379fc4408832d290", size = 1371854 }, + { url = "https://files.pythonhosted.org/packages/44/b2/37ac1d65008f824cba6b5bf68d18b76d97d0f62d7a032367ea69d4a187c8/pynacl-1.6.0-cp314-cp314t-win32.whl", hash = "sha256:4853c154dc16ea12f8f3ee4b7e763331876316cc3a9f06aeedf39bcdca8f9995", size = 230345 }, + { url = "https://files.pythonhosted.org/packages/f4/5a/9234b7b45af890d02ebee9aae41859b9b5f15fb4a5a56d88e3b4d1659834/pynacl-1.6.0-cp314-cp314t-win_amd64.whl", hash = "sha256:347dcddce0b4d83ed3f32fd00379c83c425abee5a9d2cd0a2c84871334eaff64", size = 243103 }, + { url = "https://files.pythonhosted.org/packages/c9/2c/c1a0f19d720ab0af3bc4241af2bdf4d813c3ecdcb96392b5e1ddf2d8f24f/pynacl-1.6.0-cp314-cp314t-win_arm64.whl", hash = "sha256:2d6cd56ce4998cb66a6c112fda7b1fdce5266c9f05044fa72972613bef376d15", size = 187778 }, + { url = "https://files.pythonhosted.org/packages/63/37/87c72df19857c5b3b47ace6f211a26eb862ada495cc96daa372d96048fca/pynacl-1.6.0-cp38-abi3-macosx_10_10_universal2.whl", hash = "sha256:f4b3824920e206b4f52abd7de621ea7a44fd3cb5c8daceb7c3612345dfc54f2e", size = 382610 }, + { url = "https://files.pythonhosted.org/packages/0c/64/3ce958a5817fd3cc6df4ec14441c43fd9854405668d73babccf77f9597a3/pynacl-1.6.0-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:16dd347cdc8ae0b0f6187a2608c0af1c8b7ecbbe6b4a06bff8253c192f696990", size = 798744 }, + { url = "https://files.pythonhosted.org/packages/e4/8a/3f0dd297a0a33fa3739c255feebd0206bb1df0b44c52fbe2caf8e8bc4425/pynacl-1.6.0-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:16c60daceee88d04f8d41d0a4004a7ed8d9a5126b997efd2933e08e93a3bd850", size = 1397879 }, + { url = "https://files.pythonhosted.org/packages/41/94/028ff0434a69448f61348d50d2c147dda51aabdd4fbc93ec61343332174d/pynacl-1.6.0-cp38-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:25720bad35dfac34a2bcdd61d9e08d6bfc6041bebc7751d9c9f2446cf1e77d64", size = 833907 }, + { url = "https://files.pythonhosted.org/packages/52/bc/a5cff7f8c30d5f4c26a07dfb0bcda1176ab8b2de86dda3106c00a02ad787/pynacl-1.6.0-cp38-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8bfaa0a28a1ab718bad6239979a5a57a8d1506d0caf2fba17e524dbb409441cf", size = 1436649 }, + { url = "https://files.pythonhosted.org/packages/7a/20/c397be374fd5d84295046e398de4ba5f0722dc14450f65db76a43c121471/pynacl-1.6.0-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:ef214b90556bb46a485b7da8258e59204c244b1b5b576fb71848819b468c44a7", size = 817142 }, + { url = "https://files.pythonhosted.org/packages/12/30/5efcef3406940cda75296c6d884090b8a9aad2dcc0c304daebb5ae99fb4a/pynacl-1.6.0-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:49c336dd80ea54780bcff6a03ee1a476be1612423010472e60af83452aa0f442", size = 1401794 }, + { url = "https://files.pythonhosted.org/packages/be/e1/a8fe1248cc17ccb03b676d80fa90763760a6d1247da434844ea388d0816c/pynacl-1.6.0-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:f3482abf0f9815e7246d461fab597aa179b7524628a4bc36f86a7dc418d2608d", size = 772161 }, + { url = "https://files.pythonhosted.org/packages/a3/76/8a62702fb657d6d9104ce13449db221a345665d05e6a3fdefb5a7cafd2ad/pynacl-1.6.0-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:140373378e34a1f6977e573033d1dd1de88d2a5d90ec6958c9485b2fd9f3eb90", size = 1370720 }, + { url = "https://files.pythonhosted.org/packages/6d/38/9e9e9b777a1c4c8204053733e1a0269672c0bd40852908c9ad6b6eaba82c/pynacl-1.6.0-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:6b393bc5e5a0eb86bb85b533deb2d2c815666665f840a09e0aa3362bb6088736", size = 791252 }, + { url = "https://files.pythonhosted.org/packages/63/ef/d972ce3d92ae05c9091363cf185e8646933f91c376e97b8be79ea6e96c22/pynacl-1.6.0-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:4a25cfede801f01e54179b8ff9514bd7b5944da560b7040939732d1804d25419", size = 1362910 }, + { url = "https://files.pythonhosted.org/packages/35/2c/ee0b373a1861f66a7ca8bdb999331525615061320dd628527a50ba8e8a60/pynacl-1.6.0-cp38-abi3-win32.whl", hash = "sha256:dcdeb41c22ff3c66eef5e63049abf7639e0db4edee57ba70531fc1b6b133185d", size = 226461 }, + { url = "https://files.pythonhosted.org/packages/75/f7/41b6c0b9dd9970173b6acc026bab7b4c187e4e5beef2756d419ad65482da/pynacl-1.6.0-cp38-abi3-win_amd64.whl", hash = "sha256:cf831615cc16ba324240de79d925eacae8265b7691412ac6b24221db157f6bd1", size = 238802 }, + { url = "https://files.pythonhosted.org/packages/8e/0f/462326910c6172fa2c6ed07922b22ffc8e77432b3affffd9e18f444dbfbb/pynacl-1.6.0-cp38-abi3-win_arm64.whl", hash = "sha256:84709cea8f888e618c21ed9a0efdb1a59cc63141c403db8bf56c469b71ad56f2", size = 183846 }, ] [[package]] @@ -2127,17 +2257,17 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "ply" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/91/d4/bbb4ab79bb3015e3bdd488435ef71f7806144cc6ae4146ee6c5f64ac53f2/pyomo-6.9.4.tar.gz", hash = "sha256:34ad22cd6bf9956de9c0d3842d01c1f92dee0515b25aa3e8f113b326549b1231", size = 3033231, upload_time = "2025-08-28T02:11:24.976Z" } +sdist = { url = "https://files.pythonhosted.org/packages/91/d4/bbb4ab79bb3015e3bdd488435ef71f7806144cc6ae4146ee6c5f64ac53f2/pyomo-6.9.4.tar.gz", hash = "sha256:34ad22cd6bf9956de9c0d3842d01c1f92dee0515b25aa3e8f113b326549b1231", size = 3033231 } wheels = [ - { url = "https://files.pythonhosted.org/packages/18/6b/80f40b4b72a3c6a207130ce431765f897c76133a15e7e38e66f9f40d36f3/pyomo-6.9.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cc3cd52c143991071821bbb9943d2a59512481b5d15adb7add32f92def4172ce", size = 4266926, upload_time = "2025-08-28T02:09:44.833Z" }, - { url = "https://files.pythonhosted.org/packages/48/30/f7ef1be3deb445694b63800de6a36dff31670014d5aa67d42e1716c04970/pyomo-6.9.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3a5e1dc79e1a2ec1f6247f0df59ac3572781e40218093a624f9213dd3ae6913f", size = 4255513, upload_time = "2025-08-28T02:09:49.197Z" }, - { url = "https://files.pythonhosted.org/packages/76/f4/9493daae82595d7d776ba6cd0d5d167951700670e363dec443415e753808/pyomo-6.9.4-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:abea6ca55295b179c1c91184db4eece7589cfd6099869eff8e3e6aa8a06463d1", size = 4311852, upload_time = "2025-08-28T02:09:53.415Z" }, - { url = "https://files.pythonhosted.org/packages/83/d7/e39e605ab33c2729afb043bed94ce7ee382bd5b4bc708f6c90a1d2600456/pyomo-6.9.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ddd48dec34b270ca2621863a216c4f3a6fcc409db86a7dc34c31eb788a44b8c6", size = 4343130, upload_time = "2025-08-28T02:09:57.397Z" }, - { url = "https://files.pythonhosted.org/packages/65/04/dc4d3d9369c4cb1b6e68ce18bbba066ea83284942322836e791dbf693bb2/pyomo-6.9.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1a768a178ae3f0391c66e2334da3d1618c9c85c9d879bc86de441efd143f491", size = 4267029, upload_time = "2025-08-28T02:10:02.066Z" }, - { url = "https://files.pythonhosted.org/packages/6b/52/824e9cea51ed0a25636b66e8c122dce5fcd22a197bf4646dd6c5f138fe36/pyomo-6.9.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:09cde10e5fe8414f453d1ed3bccef1b42fc048fc2da0a9c936e40b2f877201bf", size = 4255606, upload_time = "2025-08-28T02:10:06.383Z" }, - { url = "https://files.pythonhosted.org/packages/a2/dc/97005d683ca57e231a8f613921adaf480d3a82f40d280c6d0185855a92c6/pyomo-6.9.4-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:df3e173d330666f881258deefa79f37373b941d4a5b00edc6aa5b10680720dc1", size = 4312670, upload_time = "2025-08-28T02:10:11.563Z" }, - { url = "https://files.pythonhosted.org/packages/64/73/47525078660eced084abb9a79e1e4c74098c992316c93ab6ead2dc7f8bda/pyomo-6.9.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8a13baebcdb05deadeb0ec4b04ecedffa65f1e86179418fa67e603a4f8f1bf17", size = 4344540, upload_time = "2025-08-28T02:10:15.731Z" }, - { url = "https://files.pythonhosted.org/packages/d8/e3/56c20c3358e58206e7270a42ff666a267a6c01492213c8c47aad8676b487/pyomo-6.9.4-py3-none-any.whl", hash = "sha256:a274d74616c0b793279931f3b2175a31f9c63213f2d7b86c14d168c6c264f782", size = 3892640, upload_time = "2025-08-28T02:11:13.845Z" }, + { url = "https://files.pythonhosted.org/packages/18/6b/80f40b4b72a3c6a207130ce431765f897c76133a15e7e38e66f9f40d36f3/pyomo-6.9.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cc3cd52c143991071821bbb9943d2a59512481b5d15adb7add32f92def4172ce", size = 4266926 }, + { url = "https://files.pythonhosted.org/packages/48/30/f7ef1be3deb445694b63800de6a36dff31670014d5aa67d42e1716c04970/pyomo-6.9.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3a5e1dc79e1a2ec1f6247f0df59ac3572781e40218093a624f9213dd3ae6913f", size = 4255513 }, + { url = "https://files.pythonhosted.org/packages/76/f4/9493daae82595d7d776ba6cd0d5d167951700670e363dec443415e753808/pyomo-6.9.4-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:abea6ca55295b179c1c91184db4eece7589cfd6099869eff8e3e6aa8a06463d1", size = 4311852 }, + { url = "https://files.pythonhosted.org/packages/83/d7/e39e605ab33c2729afb043bed94ce7ee382bd5b4bc708f6c90a1d2600456/pyomo-6.9.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ddd48dec34b270ca2621863a216c4f3a6fcc409db86a7dc34c31eb788a44b8c6", size = 4343130 }, + { url = "https://files.pythonhosted.org/packages/65/04/dc4d3d9369c4cb1b6e68ce18bbba066ea83284942322836e791dbf693bb2/pyomo-6.9.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1a768a178ae3f0391c66e2334da3d1618c9c85c9d879bc86de441efd143f491", size = 4267029 }, + { url = "https://files.pythonhosted.org/packages/6b/52/824e9cea51ed0a25636b66e8c122dce5fcd22a197bf4646dd6c5f138fe36/pyomo-6.9.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:09cde10e5fe8414f453d1ed3bccef1b42fc048fc2da0a9c936e40b2f877201bf", size = 4255606 }, + { url = "https://files.pythonhosted.org/packages/a2/dc/97005d683ca57e231a8f613921adaf480d3a82f40d280c6d0185855a92c6/pyomo-6.9.4-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:df3e173d330666f881258deefa79f37373b941d4a5b00edc6aa5b10680720dc1", size = 4312670 }, + { url = "https://files.pythonhosted.org/packages/64/73/47525078660eced084abb9a79e1e4c74098c992316c93ab6ead2dc7f8bda/pyomo-6.9.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8a13baebcdb05deadeb0ec4b04ecedffa65f1e86179418fa67e603a4f8f1bf17", size = 4344540 }, + { url = "https://files.pythonhosted.org/packages/d8/e3/56c20c3358e58206e7270a42ff666a267a6c01492213c8c47aad8676b487/pyomo-6.9.4-py3-none-any.whl", hash = "sha256:a274d74616c0b793279931f3b2175a31f9c63213f2d7b86c14d168c6c264f782", size = 3892640 }, ] [[package]] @@ -2147,14 +2277,14 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "unidecode" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d6/7c/7c45a9e9bf6ddb57b67e66cf4e8076a7baf3a790a3411daac1a7a2df0c5b/pyphonetics-0.5.3.tar.gz", hash = "sha256:2d3c2e359fde91a3c57914f0b5468bba7a5daf38e7927fd999992ea68990fbe4", size = 10314, upload_time = "2020-02-25T12:08:31.049Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d6/7c/7c45a9e9bf6ddb57b67e66cf4e8076a7baf3a790a3411daac1a7a2df0c5b/pyphonetics-0.5.3.tar.gz", hash = "sha256:2d3c2e359fde91a3c57914f0b5468bba7a5daf38e7927fd999992ea68990fbe4", size = 10314 } wheels = [ - { url = "https://files.pythonhosted.org/packages/bd/dd/a7d0a860efd3d4335d538b4361b8e9af8311f2aba2e8c7e4c7a47d623b6e/pyphonetics-0.5.3-py2.py3-none-any.whl", hash = "sha256:e6b29671d0d624dda1cac59c0c5a8a7216d8db504bae4941bfc482e04a0621d1", size = 10729, upload_time = "2020-02-25T12:08:25.368Z" }, + { url = "https://files.pythonhosted.org/packages/bd/dd/a7d0a860efd3d4335d538b4361b8e9af8311f2aba2e8c7e4c7a47d623b6e/pyphonetics-0.5.3-py2.py3-none-any.whl", hash = "sha256:e6b29671d0d624dda1cac59c0c5a8a7216d8db504bae4941bfc482e04a0621d1", size = 10729 }, ] [[package]] name = "pytest" -version = "8.4.1" +version = "8.4.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, @@ -2163,23 +2293,23 @@ dependencies = [ { name = "pluggy" }, { name = "pygments" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/08/ba/45911d754e8eba3d5a841a5ce61a65a685ff1798421ac054f85aa8747dfb/pytest-8.4.1.tar.gz", hash = "sha256:7c67fd69174877359ed9371ec3af8a3d2b04741818c51e5e99cc1742251fa93c", size = 1517714, upload_time = "2025-06-18T05:48:06.109Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a3/5c/00a0e072241553e1a7496d638deababa67c5058571567b92a7eaa258397c/pytest-8.4.2.tar.gz", hash = "sha256:86c0d0b93306b961d58d62a4db4879f27fe25513d4b969df351abdddb3c30e01", size = 1519618 } wheels = [ - { url = "https://files.pythonhosted.org/packages/29/16/c8a903f4c4dffe7a12843191437d7cd8e32751d5de349d45d3fe69544e87/pytest-8.4.1-py3-none-any.whl", hash = "sha256:539c70ba6fcead8e78eebbf1115e8b589e7565830d7d006a8723f19ac8a0afb7", size = 365474, upload_time = "2025-06-18T05:48:03.955Z" }, + { url = "https://files.pythonhosted.org/packages/a8/a4/20da314d277121d6534b3a980b29035dcd51e6744bd79075a6ce8fa4eb8d/pytest-8.4.2-py3-none-any.whl", hash = "sha256:872f880de3fc3a5bdc88a11b39c9710c3497a547cfa9320bc3c5e62fbf272e79", size = 365750 }, ] [[package]] name = "pytest-cov" -version = "6.2.1" +version = "7.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "coverage" }, { name = "pluggy" }, { name = "pytest" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/18/99/668cade231f434aaa59bbfbf49469068d2ddd945000621d3d165d2e7dd7b/pytest_cov-6.2.1.tar.gz", hash = "sha256:25cc6cc0a5358204b8108ecedc51a9b57b34cc6b8c967cc2c01a4e00d8a67da2", size = 69432, upload_time = "2025-06-12T10:47:47.684Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5e/f7/c933acc76f5208b3b00089573cf6a2bc26dc80a8aece8f52bb7d6b1855ca/pytest_cov-7.0.0.tar.gz", hash = "sha256:33c97eda2e049a0c5298e91f519302a1334c26ac65c1a483d6206fd458361af1", size = 54328 } wheels = [ - { url = "https://files.pythonhosted.org/packages/bc/16/4ea354101abb1287856baa4af2732be351c7bee728065aed451b678153fd/pytest_cov-6.2.1-py3-none-any.whl", hash = "sha256:f5bc4c23f42f1cdd23c70b1dab1bbaef4fc505ba950d53e0081d0730dd7e86d5", size = 24644, upload_time = "2025-06-12T10:47:45.932Z" }, + { url = "https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.whl", hash = "sha256:3b8e9558b16cc1479da72058bdecf8073661c7f57f7d3c5f22a1c23507f2d861", size = 22424 }, ] [[package]] @@ -2190,46 +2320,76 @@ dependencies = [ { name = "execnet" }, { name = "pytest" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/78/b4/439b179d1ff526791eb921115fca8e44e596a13efeda518b9d845a619450/pytest_xdist-3.8.0.tar.gz", hash = "sha256:7e578125ec9bc6050861aa93f2d59f1d8d085595d6551c2c90b6f4fad8d3a9f1", size = 88069, upload_time = "2025-07-01T13:30:59.346Z" } +sdist = { url = "https://files.pythonhosted.org/packages/78/b4/439b179d1ff526791eb921115fca8e44e596a13efeda518b9d845a619450/pytest_xdist-3.8.0.tar.gz", hash = "sha256:7e578125ec9bc6050861aa93f2d59f1d8d085595d6551c2c90b6f4fad8d3a9f1", size = 88069 } wheels = [ - { url = "https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl", hash = "sha256:202ca578cfeb7370784a8c33d6d05bc6e13b4f25b5053c30a152269fd10f0b88", size = 46396, upload_time = "2025-07-01T13:30:56.632Z" }, + { url = "https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl", hash = "sha256:202ca578cfeb7370784a8c33d6d05bc6e13b4f25b5053c30a152269fd10f0b88", size = 46396 }, ] [[package]] name = "python-calamine" -version = "0.4.0" +version = "0.5.3" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "packaging" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/cc/03/269f96535705b2f18c8977fa58e76763b4e4727a9b3ae277a9468c8ffe05/python_calamine-0.4.0.tar.gz", hash = "sha256:94afcbae3fec36d2d7475095a59d4dc6fae45829968c743cb799ebae269d7bbf", size = 127737, upload_time = "2025-07-04T06:05:28.626Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/63/60/f951513aaaa470b3a38a87d65eca45e0a02bc329b47864f5a17db563f746/python_calamine-0.4.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:74bca5d44a73acf3dcfa5370820797fcfd225c8c71abcddea987c5b4f5077e98", size = 826603, upload_time = "2025-07-04T06:03:51.245Z" }, - { url = "https://files.pythonhosted.org/packages/76/3f/789955bbc77831c639890758f945eb2b25d6358065edf00da6751226cf31/python_calamine-0.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cf80178f5d1b0ee2ccfffb8549c50855f6249e930664adc5807f4d0d6c2b269c", size = 805826, upload_time = "2025-07-04T06:03:52.482Z" }, - { url = "https://files.pythonhosted.org/packages/00/4c/f87d17d996f647030a40bfd124fe45fe893c002bee35ae6aca9910a923ae/python_calamine-0.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65cfef345386ae86f7720f1be93495a40fd7e7feabb8caa1df5025d7fbc58a1f", size = 874989, upload_time = "2025-07-04T06:03:53.794Z" }, - { url = "https://files.pythonhosted.org/packages/47/d2/3269367303f6c0488cf1bfebded3f9fe968d118a988222e04c9b2636bf2e/python_calamine-0.4.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f23e6214dbf9b29065a5dcfd6a6c674dd0e251407298c9138611c907d53423ff", size = 877504, upload_time = "2025-07-04T06:03:55.095Z" }, - { url = "https://files.pythonhosted.org/packages/f9/6d/c7ac35f5c7125e8bd07eb36773f300fda20dd2da635eae78a8cebb0b6ab7/python_calamine-0.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d792d304ee232ab01598e1d3ab22e074a32c2511476b5fb4f16f4222d9c2a265", size = 1014171, upload_time = "2025-07-04T06:03:56.777Z" }, - { url = "https://files.pythonhosted.org/packages/f0/81/5ea8792a2e9ab5e2a05872db3a4d3ed3538ad5af1861282c789e2f13a8cf/python_calamine-0.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bf813425918fd68f3e991ef7c4b5015be0a1a95fc4a8ab7e73c016ef1b881bb4", size = 926737, upload_time = "2025-07-04T06:03:58.024Z" }, - { url = "https://files.pythonhosted.org/packages/cc/6e/989e56e6f073fc0981a74ba7a393881eb351bb143e5486aa629b5e5d6a8b/python_calamine-0.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbe2a0ccb4d003635888eea83a995ff56b0748c8c76fc71923544f5a4a7d4cd7", size = 887032, upload_time = "2025-07-04T06:03:59.298Z" }, - { url = "https://files.pythonhosted.org/packages/5d/92/2c9bd64277c6fe4be695d7d5a803b38d953ec8565037486be7506642c27c/python_calamine-0.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a7b3bb5f0d910b9b03c240987560f843256626fd443279759df4e91b717826d2", size = 929700, upload_time = "2025-07-04T06:04:01.388Z" }, - { url = "https://files.pythonhosted.org/packages/64/fa/fc758ca37701d354a6bc7d63118699f1c73788a1f2e1b44d720824992764/python_calamine-0.4.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:bd2c0fc2b5eabd08ceac8a2935bffa88dbc6116db971aa8c3f244bad3fd0f644", size = 1053971, upload_time = "2025-07-04T06:04:02.704Z" }, - { url = "https://files.pythonhosted.org/packages/65/52/40d7e08ae0ddba331cdc9f7fb3e92972f8f38d7afbd00228158ff6d1fceb/python_calamine-0.4.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:85b547cb1c5b692a0c2406678d666dbc1cec65a714046104683fe4f504a1721d", size = 1057057, upload_time = "2025-07-04T06:04:04.014Z" }, - { url = "https://files.pythonhosted.org/packages/16/de/e8a071c0adfda73285d891898a24f6e99338328c404f497ff5b0e6bc3d45/python_calamine-0.4.0-cp312-cp312-win32.whl", hash = "sha256:4c2a1e3a0db4d6de4587999a21cc35845648c84fba81c03dd6f3072c690888e4", size = 665540, upload_time = "2025-07-04T06:04:05.679Z" }, - { url = "https://files.pythonhosted.org/packages/5e/f2/7fdfada13f80db12356853cf08697ff4e38800a1809c2bdd26ee60962e7a/python_calamine-0.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:b193c89ffcc146019475cd121c552b23348411e19c04dedf5c766a20db64399a", size = 695366, upload_time = "2025-07-04T06:04:06.977Z" }, - { url = "https://files.pythonhosted.org/packages/20/66/d37412ad854480ce32f50d9f74f2a2f88b1b8a6fbc32f70aabf3211ae89e/python_calamine-0.4.0-cp312-cp312-win_arm64.whl", hash = "sha256:43a0f15e0b60c75a71b21a012b911d5d6f5fa052afad2a8edbc728af43af0fcf", size = 670740, upload_time = "2025-07-04T06:04:08.656Z" }, - { url = "https://files.pythonhosted.org/packages/5a/10/f78218ccdc5bb5591a37d582c7e8723121d0fbe8196c5a4089110ec02f22/python_calamine-0.4.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:f8d6b2d2ae73acf91343f02756bdcb2fa6117db4eaf5cfab75ce50dfb54525ee", size = 826339, upload_time = "2025-07-04T06:04:10.254Z" }, - { url = "https://files.pythonhosted.org/packages/15/b1/d7d0dbbd0469db0fc628b1b9ee3a8f3b698391279f0d7aea96e2018a3863/python_calamine-0.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:aca7e019f42ca16806fef53e3028fa158005c0e68eabda577c3f3c2bea9735fd", size = 805473, upload_time = "2025-07-04T06:04:11.557Z" }, - { url = "https://files.pythonhosted.org/packages/46/52/033b902fb11f9b4bb59fa18621acbf5eaf4ecb0bce878d34fcb0020229df/python_calamine-0.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aca67cb447ba8dcefa4d5a1131d1cfdd1e0d0a0f0c6470655ce9ad37b7cfa228", size = 874275, upload_time = "2025-07-04T06:04:13.318Z" }, - { url = "https://files.pythonhosted.org/packages/56/12/e6b589293314a5d10b2c309411542424ebefb77430cc715d7601d80349ae/python_calamine-0.4.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e127d3b78d511d4f6fbdfed02fe666d83a722d73e27dd64d1718be9efafbabfe", size = 877061, upload_time = "2025-07-04T06:04:15.013Z" }, - { url = "https://files.pythonhosted.org/packages/64/24/0eeb583eb5d44f674ca9f7a846c665e33190431386d7c9f6d08ec9f09d3c/python_calamine-0.4.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e47891d9d62e3015448749ddb2ba60ab583a651d0fca9a3a1794936942ad7d5d", size = 1013946, upload_time = "2025-07-04T06:04:16.647Z" }, - { url = "https://files.pythonhosted.org/packages/c4/93/360cf58b8e24f760a3d4643423389dbc37bdca8b6fdda75ffc664ce622b5/python_calamine-0.4.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d4072bf9dcb8ec49f5b92688bd960b5d0e03e4826d227bbd66478a6f6b0aea06", size = 926462, upload_time = "2025-07-04T06:04:17.936Z" }, - { url = "https://files.pythonhosted.org/packages/5a/5d/3b8c46ccc62d020858bc52f2d792208910eb68682c6ebf8d6706593d7a88/python_calamine-0.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eabc9dc770f753c4227aacedd8390056937e67af0bf65d6696c584d3054f1287", size = 886319, upload_time = "2025-07-04T06:04:19.33Z" }, - { url = "https://files.pythonhosted.org/packages/66/cf/73241714800bddb277f827c4683f579b81915406bf7dc643dc185cef7eb2/python_calamine-0.4.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6a4bcf36dc77674892616b66cffba432f5fd62df3e0adb0487ec245036b50041", size = 929044, upload_time = "2025-07-04T06:04:20.689Z" }, - { url = "https://files.pythonhosted.org/packages/7c/6b/71e30ee568ce1ea6676be66f1a42c6397946859effc471cc102922fb4792/python_calamine-0.4.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:f81518d4b49c47054cb1861badf5bcef44b0a49959968fb2e9c9cb89645c76af", size = 1053084, upload_time = "2025-07-04T06:04:22.414Z" }, - { url = "https://files.pythonhosted.org/packages/75/19/87b42fe975f8952754562785a545f6d2eec17c353befdf33a8e16c046ce0/python_calamine-0.4.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:18375eb3ac1362fcbf3a9fcad0672d8dc054001247bc52f063e0054a3e01a8d1", size = 1056735, upload_time = "2025-07-04T06:04:23.903Z" }, - { url = "https://files.pythonhosted.org/packages/04/db/ecee6e5d6ed4f3725312580a83c4cb1758c9060aa08bf2d8512d3396cea1/python_calamine-0.4.0-cp313-cp313-win32.whl", hash = "sha256:c7e98c7e531bafdf719414d0c428f25f933a82640fb92e6e84864a85e758aecc", size = 665282, upload_time = "2025-07-04T06:04:25.274Z" }, - { url = "https://files.pythonhosted.org/packages/cb/0b/26337e0a0e2b335c1d6225bda8de259a21fea129a06009c1471deda28e1f/python_calamine-0.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:6ec081b874e78f4dbcbe70804644281366814289956755575a5871f725592d4e", size = 694982, upload_time = "2025-07-04T06:04:26.573Z" }, - { url = "https://files.pythonhosted.org/packages/90/26/f72c2b2fe70f2901abb41fcdf8249181133ddd72b9392cfb63d030393b3e/python_calamine-0.4.0-cp313-cp313-win_arm64.whl", hash = "sha256:3f9bdf570023138ee4090a51b1e34786978d6e649852ccc3b83ac9729f125ca2", size = 670283, upload_time = "2025-07-04T06:04:28.434Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/f3/ca/295b37a97275d53f072c7307c9d0c4bfec565d3d74157e7fe336ea18de0a/python_calamine-0.5.3.tar.gz", hash = "sha256:b4529c955fa64444184630d5bc8c82c472d1cf6bfe631f0a7bfc5e4802d4e996", size = 130874 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/05/24/f6e3369be221baa6a50476b8a02f5100980ae487a630d80d4983b4c73879/python_calamine-0.5.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:b9a78e471bc02d3f76c294bf996562a9d0fbf2ad0a49d628330ba247865190f1", size = 844280 }, + { url = "https://files.pythonhosted.org/packages/e7/32/f9b689fe40616376457d1a6fd5ab84834066db31fa5ffd10a5b02f996a44/python_calamine-0.5.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bcbd277a4d0a0108aa2f5126a89ca3f2bb18d0bec7ba7d614da02a4556d18ef2", size = 814054 }, + { url = "https://files.pythonhosted.org/packages/f7/26/a07bb6993ae0a524251060397edc710af413dbb175d56f1e1bbc7a2c39c9/python_calamine-0.5.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:04e6b68b26346f559a086bb84c960d4e9ddc79be8c3499752c1ba96051fea98f", size = 889447 }, + { url = "https://files.pythonhosted.org/packages/d8/79/5902d00658e2dd4efe3a4062b710a7eaa6082001c199717468fbcd8cef69/python_calamine-0.5.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e60ebeafebf66889753bfad0055edaa38068663961bb9a18e9f89aef2c9cec50", size = 883540 }, + { url = "https://files.pythonhosted.org/packages/d0/85/6299c909fcbba0663b527b82c87d204372e6f469b4ed5602f7bc1f7f1103/python_calamine-0.5.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2d9da11edb40e9d2fb214fcf575be8004b44b1b407930eceb2458f1a84be634f", size = 1034891 }, + { url = "https://files.pythonhosted.org/packages/65/2c/d0cfd9161b3404528bfba9fe000093be19f2c83ede42c255da4ebfd4da17/python_calamine-0.5.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:44d22bc52fe26b72a6dc07ab8a167d5d97aeb28282957f52b930e92106a35e3c", size = 935055 }, + { url = "https://files.pythonhosted.org/packages/b8/69/420c382535d1aca9af6bc929c78ad6b9f8416312aa4955b7977f5f864082/python_calamine-0.5.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b9ace667e04ea6631a0ada0e43dbc796c56e0d021f04bd64cdacb44de4504da", size = 904143 }, + { url = "https://files.pythonhosted.org/packages/d8/2b/19cc87654f9c85fbb6265a7ebe92cf0f649c308f0cf8f262b5c3de754d19/python_calamine-0.5.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7ec0da29de7366258de2eb765a90b9e9fbe9f9865772f3609dacff302b894393", size = 948890 }, + { url = "https://files.pythonhosted.org/packages/18/e8/3547cb72d3a0f67c173ca07d9137046f2a6c87fdc31316b10e2d7d851f2a/python_calamine-0.5.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4bba5adf123200503e6c07c667a8ce82c3b62ba02f9b3e99205be24fc73abc49", size = 1067802 }, + { url = "https://files.pythonhosted.org/packages/cb/69/31ab3e8010cbed814b5fcdb2ace43e5b76d6464f8abb1dfab9191416ca3d/python_calamine-0.5.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f4c49bc58f3cfd1e9595a05cab7e71aa94f6cff5bf3916de2b87cdaa9b4ce9a3", size = 1074607 }, + { url = "https://files.pythonhosted.org/packages/c4/40/112d113d974bee5fff564e355b01df5bd524dbd5820c913c9dae574fe80a/python_calamine-0.5.3-cp312-cp312-win32.whl", hash = "sha256:42315463e139f5e44f4dedb9444fa0971c51e82573e872428050914f0dec4194", size = 669578 }, + { url = "https://files.pythonhosted.org/packages/3e/87/0af1cf4ad01a2df273cfd3abb7efaba4fba50395b98f5e871cee016d4f09/python_calamine-0.5.3-cp312-cp312-win_amd64.whl", hash = "sha256:8a24bd4c72bd984311f5ebf2e17a8aa3ce4e5ae87eda517c61c3507db8c045de", size = 713021 }, + { url = "https://files.pythonhosted.org/packages/5d/4e/6ed2ed3bb4c4c479e85d3444742f101f7b3099db1819e422bf861cf9923b/python_calamine-0.5.3-cp312-cp312-win_arm64.whl", hash = "sha256:e4a713e56d3cca752d1a7d6a00dca81b224e2e1a0567d370bc0db537e042d6b0", size = 679615 }, + { url = "https://files.pythonhosted.org/packages/33/e7/14f2bec7b4bead0e71e78fa2549e22192c498a3204d931bd0e6522ec955d/python_calamine-0.5.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:90389cc459500644bbc1a1170b5e50a95160f34cedc8de7fe9a4bd1c08764039", size = 843906 }, + { url = "https://files.pythonhosted.org/packages/c2/6c/8c6e7a8c9b421e99ad1a637c3b96d94fef25abad6bf790a7ce35bfc5a48d/python_calamine-0.5.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:221b64c0e126a1263a14d575c61a60177cad852829dca61dfb4f5a8fb9603251", size = 813859 }, + { url = "https://files.pythonhosted.org/packages/c4/ee/f6745016a431f10620b4e803f306d95c57e828dea064e32fb944c0260559/python_calamine-0.5.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:49f3aa50d532c6639be851a644875d5c9cd63892cf545ee614a5c0593dc50c3b", size = 889212 }, + { url = "https://files.pythonhosted.org/packages/b9/72/8de0af1823d587b2683eb25c6feef14c7ea917cfb975d094ad09f46245d0/python_calamine-0.5.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7d8bf3b3542c771795cfcfa8a77d1373273311735517cca599aa7f89c34f38ae", size = 883584 }, + { url = "https://files.pythonhosted.org/packages/5a/90/47b91cf573b6bd4e6dbaeef4f993caf26dc0d2b8117261bc965bd70b38ce/python_calamine-0.5.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d8e452fc1335ab1f7738c3d4d5144f11719b9c5585f3cb5102d47293355067a", size = 1034378 }, + { url = "https://files.pythonhosted.org/packages/48/f7/c75e5f0b0918f0f60b45fad4c313d159633615aa1c96a5170e3fe940862d/python_calamine-0.5.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4fc75ac97be47539465191a00de305c0e150465da8632c14fc1107a0b304f97", size = 934310 }, + { url = "https://files.pythonhosted.org/packages/cd/04/8b5806bdbfabdb51fd2816deac6870d031560f0bbd90d9729ac86b903579/python_calamine-0.5.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1258368551e0b235d5b46c105137294cbb5ca683b2c13f5851f3ebec7f2d42b", size = 903602 }, + { url = "https://files.pythonhosted.org/packages/75/4e/ec27837d5023b8db775db7798b3340eeb6bcb7f61ad64e892d4e1b14853e/python_calamine-0.5.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3a7c51270e5ea518cb02cb531d84a2eb2de68da3cf48b26adae622f031dc5284", size = 948410 }, + { url = "https://files.pythonhosted.org/packages/3d/ba/8b5193637bfa0f363284974ae998f96fa1c8561a0a4d90378b0f202ac317/python_calamine-0.5.3-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:e1d0df3d69b32da05e3e7648bb5802559d44979be721983f0d669b4128f920fa", size = 1067274 }, + { url = "https://files.pythonhosted.org/packages/da/1c/506791e4c7078f2fed1ee2d69703d62c0acfd5b671db157bb755f47cff42/python_calamine-0.5.3-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:6d674ae194744b6080f20a0b5a253a9976d632ee91dc00e13e539e968167cd35", size = 1073351 }, + { url = "https://files.pythonhosted.org/packages/dc/83/e30e21484b1ed55668f67a63578d8a6ba70597a4d7ee8da23d759d3e1b3f/python_calamine-0.5.3-cp313-cp313-win32.whl", hash = "sha256:7a42ff0dae44457a4a3e65ea49357ffdf92e44f8b022ef1fb32c6498097d6d57", size = 669416 }, + { url = "https://files.pythonhosted.org/packages/1d/8f/29c617e9548ed2704657ebaa7d79067cad06cbbf7dd432a6cacd4cc19d16/python_calamine-0.5.3-cp313-cp313-win_amd64.whl", hash = "sha256:054aee805c2cd5ab9848c2b8459822f2581cf22af45ff60251c9f45585cc06e0", size = 712760 }, + { url = "https://files.pythonhosted.org/packages/f8/35/d8117f99037100a28d17d9fbde121511c19d54ff4e5968d6aed693caeb87/python_calamine-0.5.3-cp313-cp313-win_arm64.whl", hash = "sha256:0e870f57651e2f76e7c1f009492aa342a7b1819f8b1131bf501240872777f944", size = 679372 }, + { url = "https://files.pythonhosted.org/packages/d9/0a/61949009a354af9ff5dc19e6816ae68a56281c0765520c9db4ff0ed20054/python_calamine-0.5.3-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:e98c819cd43a7f0048f6d97c9d4ec23d72889cd722de1d6b68e0de24b1f8f037", size = 843418 }, + { url = "https://files.pythonhosted.org/packages/52/7b/4cb7fa988d17c98a0be6e9f74561d8a2381f28a2b88adb89f16abe345d2f/python_calamine-0.5.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:cf90ce46420545f922cde95004ea8d5efaf3864b5a380a5d1defc7abd219421a", size = 813611 }, + { url = "https://files.pythonhosted.org/packages/01/34/4c2a6827da90f366be3fb9c7788f672f5e7d60808f9dbd01da5acc6f11ca/python_calamine-0.5.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e89caa6a1a55215be742cd44f6d94611fb6ab222a30325e772abc40566693e5", size = 888097 }, + { url = "https://files.pythonhosted.org/packages/17/bc/ecf5f6ac95195dfd3e9d63ab8c60b78d6466009751dfb1cdacf71d5f5e19/python_calamine-0.5.3-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b13177e42dac8de57870995699b237ce5a7886d9bd7fb745a36f867e5d3d3e62", size = 880861 }, + { url = "https://files.pythonhosted.org/packages/6e/55/8b60f99221a408f08db280b553aa4321c4cd9365e5c3101638249002d5a4/python_calamine-0.5.3-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:948e28b5f3246177440c70550661e0a27b414cb15535111fca7dbac2a63721b1", size = 1033023 }, + { url = "https://files.pythonhosted.org/packages/05/c5/8c378d3c2c56d12606e20b59eee3538d3b1177fe00b103bb98ef15176610/python_calamine-0.5.3-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e37fef2b67bcd66b5dfc65b0779da9522c82f1ef9f97fc6034848072ff60b3f7", size = 933097 }, + { url = "https://files.pythonhosted.org/packages/26/04/cf14e91ac5c2d6d9795e1c39f3f53e0f173fcbaed4b00198e22a58265fdd/python_calamine-0.5.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ddcef4e0e9d0479e027c90d9e1537bcf05de9bdd137cd7dfdbfc0034b1850973", size = 901917 }, + { url = "https://files.pythonhosted.org/packages/6e/2f/5b2065b9360bda792504fe3ac1cef6d9da51ceba6230ee7634886b44cce9/python_calamine-0.5.3-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6732b47f923102357bde348021a2892a41c2fb173958268c0a1ff8d5abb6b7e8", size = 943328 }, + { url = "https://files.pythonhosted.org/packages/ce/5a/45e4bd8473264b918d83297d15f160471029390cd06ed0056fc57e8f29eb/python_calamine-0.5.3-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:543db1b886cf994aaf7da0752022b37c42c05acb7605b56d09047023c8387610", size = 1065993 }, + { url = "https://files.pythonhosted.org/packages/35/6b/2afd47608495f23408bdf2f1ff57a144700aed8b5bbe50285ac4864edf53/python_calamine-0.5.3-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:b79135dd96129253dc0e547778c700e1e3782e7671e7047c8b106b5501e33706", size = 1071801 }, + { url = "https://files.pythonhosted.org/packages/f7/db/b06a15f25e63290c2efc5433fa8b395bfe870aacbf4ea6c930764d53eca6/python_calamine-0.5.3-cp313-cp313t-win32.whl", hash = "sha256:d84dc3b78adf038a2b452fc784523dcc90477f1631d33aabc0872812db5beb26", size = 669485 }, + { url = "https://files.pythonhosted.org/packages/2d/40/e51adf1dae2002f189c83ae527aad017372d1a1b97a22172dc2e51ce502d/python_calamine-0.5.3-cp313-cp313t-win_amd64.whl", hash = "sha256:8a3fd541576fdf2708e40064ebaaf561a0a2afcab01de91c83ec212193bede34", size = 712636 }, + { url = "https://files.pythonhosted.org/packages/56/fa/db4dc8d27a5daa14a153aebc0cb98bad6fd700befd9e67440a8017f0e108/python_calamine-0.5.3-cp313-cp313t-win_arm64.whl", hash = "sha256:b28a9c9318a5e7dabcead1803bfd48be5bf7c9f339d6e505a5989650a6102487", size = 678307 }, + { url = "https://files.pythonhosted.org/packages/ee/7f/a098680c9d6ad36fe850f2c2c28627ee3bc95aaa052f375806f69c075475/python_calamine-0.5.3-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:b5cdcd85cc08a1805d267fc66aa100940712de6b4524951ab91ba47fa60d481f", size = 843921 }, + { url = "https://files.pythonhosted.org/packages/09/ce/3de5d714779fac6e3333e7ea98ce4eae3b2479eb8a3d2f7d9e4487e16681/python_calamine-0.5.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:828cd5d49fe9eb9c1fc9219fe484b07f2ba9a1e5e3b8475d7f1415e0fa316df8", size = 814173 }, + { url = "https://files.pythonhosted.org/packages/cb/14/ef98575838091b6b24274160d53607e78df94f0176af360bcb063512e643/python_calamine-0.5.3-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d3f4d0532ab4de422fc4b707cdbb93d57ca7ccf9be8bc4742fb9376dc68f861", size = 888958 }, + { url = "https://files.pythonhosted.org/packages/c0/b1/c999dd1f89f415ff06f88f37bce643ece3c4d51ae051e0a143ff16f44c1c/python_calamine-0.5.3-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:89a9ba0a16e4335b676232ddbbea0fd09bfb94757ca6e4cf90ce1348aa843f3f", size = 880988 }, + { url = "https://files.pythonhosted.org/packages/74/16/4984532280e4b2c81aa26ae57b37fc3eaeda414e46e2d9c6a9cfdb27cd56/python_calamine-0.5.3-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0928d0eb1cdea229464de280d0f7cd99314ba28cffd2c4d6c9ce6902f9d6d448", size = 1035685 }, + { url = "https://files.pythonhosted.org/packages/cd/dc/91776b34ab09f36ea41449951148bef731f9b355a2d2b25d398eec774926/python_calamine-0.5.3-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c7f9519dd3b8814ef6e801b9797f918fe7a59937fac4784cb280c8350fb1a2cf", size = 933865 }, + { url = "https://files.pythonhosted.org/packages/01/97/12deaff5e608207398a9f0eaa06447ed69e8c4873ee953be553f9440881a/python_calamine-0.5.3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:954cd764c6b24735c749a447523b4ccf4b9d2b7c231ddd304ed42c15afca9516", size = 902310 }, + { url = "https://files.pythonhosted.org/packages/45/da/45063eee203f6c9d9436d29dfc0f01db85c9264c86d1e438c3b452d7e97f/python_calamine-0.5.3-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b3f0e9c59fece6bbf1a916947fba33e9b635327eb165784d05efed40027164d1", size = 948143 }, + { url = "https://files.pythonhosted.org/packages/33/07/0b661166dd58367bd5d6cc2bf8441f61004dd5ef2555ab224da97b1ac5d3/python_calamine-0.5.3-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:63bb47cc080d8eb9bc654f0961ada385b58a57d4628b0a33d1003c8f62e6ae3d", size = 1067181 }, + { url = "https://files.pythonhosted.org/packages/5d/80/58b107dc2c2e6bad581f58f54b3ccb07705094ff23734c8dd30bd8aef4e8/python_calamine-0.5.3-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:adb62aab9b9298b2fc378b2aec6dd5802f7ee199c3431abae29368ef046f8005", size = 1072683 }, + { url = "https://files.pythonhosted.org/packages/4c/b4/667e40dbe7d4f19a2e69f9cd186e069cd3af0411a177aa2a90231e3e0b06/python_calamine-0.5.3-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:1de68d2586df7a7a05a7779031dabd4c3d95d4738314ba82e943c8d3f36b5a67", size = 843526 }, + { url = "https://files.pythonhosted.org/packages/3e/f7/fb86da5920198a616583f07d1a395cb1241eafb930d5c33f597ae6664711/python_calamine-0.5.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2c70033bbd59f05491743befec5e2a90784f4c8220e7379ce03e956bd1f475be", size = 811074 }, + { url = "https://files.pythonhosted.org/packages/76/2e/5a5a618b351b75155fbb40ad88e166f17ccf202401dd4b830db05b2565a6/python_calamine-0.5.3-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f396a0e57b1a5462668fc247377714b5b4c061718c1863c00ddc64e770b0f1e", size = 887735 }, + { url = "https://files.pythonhosted.org/packages/97/cf/3cfaa550eb1c9c5501728886c5e787c3ddeb34d8bf3e7e9fcaf9fc6fbd86/python_calamine-0.5.3-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ce737cb19d3077cabe0acaecd6b55d5df75021a520c20b47e0c75b65b4bfa919", size = 882356 }, + { url = "https://files.pythonhosted.org/packages/88/b8/97f56e337149d0ce53399be9bd583f735dc1ea9abb2745ac902a09e8c401/python_calamine-0.5.3-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e54b30802fe089cc0c67c67407203412ec7144e84e0960e69c529c7170c37dae", size = 1033195 }, + { url = "https://files.pythonhosted.org/packages/94/45/59a21a18c8e073d2f930a4a9c0c038207b82c5c996b67146fb76f3da2748/python_calamine-0.5.3-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5efc94c2e4119dc0da1e84d036f7e840fb0dd0850f4c10d3d166d725af0751af", size = 931846 }, + { url = "https://files.pythonhosted.org/packages/36/47/715e0c0bc37ccce035ef4be1aa8eafa1e5abb6687af725cb47d81a18def7/python_calamine-0.5.3-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:74e33191a01d52f66dd6b029e99b6eda0245771c4f116c87ff0d5edf922dbbca", size = 902871 }, + { url = "https://files.pythonhosted.org/packages/ca/07/ac0cf8623765106794e297235d6dde3a728f18e61a536792189fca06f2ba/python_calamine-0.5.3-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:85ceec02cb367cf87a72ba559db3279f3b4774edba9330eb77670587d4de95f4", size = 944438 }, + { url = "https://files.pythonhosted.org/packages/88/98/c48c0b8be7fbae5f68b7c55a1ed4068d2c3dab64093e39733d43c23a7459/python_calamine-0.5.3-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:882400368f976ea489e47af04fde936b603c3efcf9ade1cd73e623c88fc4aa5c", size = 1066276 }, + { url = "https://files.pythonhosted.org/packages/73/3a/bbf99531fec43bca2ab28948ab94d851db96c0364c76139dd746cab2f4f9/python_calamine-0.5.3-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:ce2fe421d5564e5341f7a06b9c52b84603b48aa670426d44fffce705609a859b", size = 1073059 }, ] [[package]] @@ -2239,9 +2399,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "six" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload_time = "2024-03-01T18:36:20.211Z" } +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432 } 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" }, + { 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 }, ] [[package]] @@ -2251,16 +2411,16 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "charset-normalizer" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/bf/4b/3c4cf635311b6203f17c2d693dc15e898969983dd3f729bee3c428aa60d4/python-debian-1.0.1.tar.gz", hash = "sha256:3ada9b83a3d671b58081782c0969cffa0102f6ce433fbbc7cf21275b8b5cc771", size = 127249, upload_time = "2025-03-11T12:27:27.245Z" } +sdist = { url = "https://files.pythonhosted.org/packages/bf/4b/3c4cf635311b6203f17c2d693dc15e898969983dd3f729bee3c428aa60d4/python-debian-1.0.1.tar.gz", hash = "sha256:3ada9b83a3d671b58081782c0969cffa0102f6ce433fbbc7cf21275b8b5cc771", size = 127249 } wheels = [ - { url = "https://files.pythonhosted.org/packages/ba/15/e8096189b18dda72e4923622abc10b021ecff723b397e22eff29fb86637b/python_debian-1.0.1-py3-none-any.whl", hash = "sha256:8f137c230c1d9279c2ac892b35915068b2aca090c9fd3da5671ff87af32af12c", size = 137453, upload_time = "2025-03-11T12:27:25.014Z" }, + { url = "https://files.pythonhosted.org/packages/ba/15/e8096189b18dda72e4923622abc10b021ecff723b397e22eff29fb86637b/python_debian-1.0.1-py3-none-any.whl", hash = "sha256:8f137c230c1d9279c2ac892b35915068b2aca090c9fd3da5671ff87af32af12c", size = 137453 }, ] [[package]] name = "python-io-wrapper" version = "0.3.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d7/74/8dc5f7d0b7cc1a0ca9e5c320abf11adee2094998c93ae8c9c80d9a8323ff/python-io-wrapper-0.3.1.tar.gz", hash = "sha256:e3391787ff0d9870e739294c6392437915502153e695a017450aa46b6d091762", size = 3271, upload_time = "2022-11-14T15:00:10.932Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/74/8dc5f7d0b7cc1a0ca9e5c320abf11adee2094998c93ae8c9c80d9a8323ff/python-io-wrapper-0.3.1.tar.gz", hash = "sha256:e3391787ff0d9870e739294c6392437915502153e695a017450aa46b6d091762", size = 3271 } [[package]] name = "python-slugify" @@ -2269,57 +2429,60 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "text-unidecode" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/87/c7/5e1547c44e31da50a460df93af11a535ace568ef89d7a811069ead340c4a/python-slugify-8.0.4.tar.gz", hash = "sha256:59202371d1d05b54a9e7720c5e038f928f45daaffe41dd10822f3907b937c856", size = 10921, upload_time = "2024-02-08T18:32:45.488Z" } +sdist = { url = "https://files.pythonhosted.org/packages/87/c7/5e1547c44e31da50a460df93af11a535ace568ef89d7a811069ead340c4a/python-slugify-8.0.4.tar.gz", hash = "sha256:59202371d1d05b54a9e7720c5e038f928f45daaffe41dd10822f3907b937c856", size = 10921 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a4/62/02da182e544a51a5c3ccf4b03ab79df279f9c60c5e82d5e8bec7ca26ac11/python_slugify-8.0.4-py2.py3-none-any.whl", hash = "sha256:276540b79961052b66b7d116620b36518847f52d5fd9e3a70164fc8c50faa6b8", size = 10051, upload_time = "2024-02-08T18:32:43.911Z" }, + { url = "https://files.pythonhosted.org/packages/a4/62/02da182e544a51a5c3ccf4b03ab79df279f9c60c5e82d5e8bec7ca26ac11/python_slugify-8.0.4-py2.py3-none-any.whl", hash = "sha256:276540b79961052b66b7d116620b36518847f52d5fd9e3a70164fc8c50faa6b8", size = 10051 }, ] [[package]] name = "pytz" version = "2025.2" 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/f8/bf/abbd3cdfb8fbc7fb3d4d38d320f2441b1e7cbe29be4f23797b4a2b5d8aac/pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3", size = 320884 } 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/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00", size = 509225 }, ] [[package]] name = "pywin32" -version = "310" +version = "311" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6b/ec/4fdbe47932f671d6e348474ea35ed94227fb5df56a7c30cbbb42cd396ed0/pywin32-310-cp312-cp312-win32.whl", hash = "sha256:8a75a5cc3893e83a108c05d82198880704c44bbaee4d06e442e471d3c9ea4f3d", size = 8796239, upload_time = "2025-03-17T00:55:58.807Z" }, - { url = "https://files.pythonhosted.org/packages/e3/e5/b0627f8bb84e06991bea89ad8153a9e50ace40b2e1195d68e9dff6b03d0f/pywin32-310-cp312-cp312-win_amd64.whl", hash = "sha256:bf5c397c9a9a19a6f62f3fb821fbf36cac08f03770056711f765ec1503972060", size = 9503839, upload_time = "2025-03-17T00:56:00.8Z" }, - { url = "https://files.pythonhosted.org/packages/1f/32/9ccf53748df72301a89713936645a664ec001abd35ecc8578beda593d37d/pywin32-310-cp312-cp312-win_arm64.whl", hash = "sha256:2349cc906eae872d0663d4d6290d13b90621eaf78964bb1578632ff20e152966", size = 8459470, upload_time = "2025-03-17T00:56:02.601Z" }, - { url = "https://files.pythonhosted.org/packages/1c/09/9c1b978ffc4ae53999e89c19c77ba882d9fce476729f23ef55211ea1c034/pywin32-310-cp313-cp313-win32.whl", hash = "sha256:5d241a659c496ada3253cd01cfaa779b048e90ce4b2b38cd44168ad555ce74ab", size = 8794384, upload_time = "2025-03-17T00:56:04.383Z" }, - { url = "https://files.pythonhosted.org/packages/45/3c/b4640f740ffebadd5d34df35fecba0e1cfef8fde9f3e594df91c28ad9b50/pywin32-310-cp313-cp313-win_amd64.whl", hash = "sha256:667827eb3a90208ddbdcc9e860c81bde63a135710e21e4cb3348968e4bd5249e", size = 9503039, upload_time = "2025-03-17T00:56:06.207Z" }, - { url = "https://files.pythonhosted.org/packages/b4/f4/f785020090fb050e7fb6d34b780f2231f302609dc964672f72bfaeb59a28/pywin32-310-cp313-cp313-win_arm64.whl", hash = "sha256:e308f831de771482b7cf692a1f308f8fca701b2d8f9dde6cc440c7da17e47b33", size = 8458152, upload_time = "2025-03-17T00:56:07.819Z" }, + { url = "https://files.pythonhosted.org/packages/e7/ab/01ea1943d4eba0f850c3c61e78e8dd59757ff815ff3ccd0a84de5f541f42/pywin32-311-cp312-cp312-win32.whl", hash = "sha256:750ec6e621af2b948540032557b10a2d43b0cee2ae9758c54154d711cc852d31", size = 8706543 }, + { url = "https://files.pythonhosted.org/packages/d1/a8/a0e8d07d4d051ec7502cd58b291ec98dcc0c3fff027caad0470b72cfcc2f/pywin32-311-cp312-cp312-win_amd64.whl", hash = "sha256:b8c095edad5c211ff31c05223658e71bf7116daa0ecf3ad85f3201ea3190d067", size = 9495040 }, + { url = "https://files.pythonhosted.org/packages/ba/3a/2ae996277b4b50f17d61f0603efd8253cb2d79cc7ae159468007b586396d/pywin32-311-cp312-cp312-win_arm64.whl", hash = "sha256:e286f46a9a39c4a18b319c28f59b61de793654af2f395c102b4f819e584b5852", size = 8710102 }, + { url = "https://files.pythonhosted.org/packages/a5/be/3fd5de0979fcb3994bfee0d65ed8ca9506a8a1260651b86174f6a86f52b3/pywin32-311-cp313-cp313-win32.whl", hash = "sha256:f95ba5a847cba10dd8c4d8fefa9f2a6cf283b8b88ed6178fa8a6c1ab16054d0d", size = 8705700 }, + { url = "https://files.pythonhosted.org/packages/e3/28/e0a1909523c6890208295a29e05c2adb2126364e289826c0a8bc7297bd5c/pywin32-311-cp313-cp313-win_amd64.whl", hash = "sha256:718a38f7e5b058e76aee1c56ddd06908116d35147e133427e59a3983f703a20d", size = 9494700 }, + { url = "https://files.pythonhosted.org/packages/04/bf/90339ac0f55726dce7d794e6d79a18a91265bdf3aa70b6b9ca52f35e022a/pywin32-311-cp313-cp313-win_arm64.whl", hash = "sha256:7b4075d959648406202d92a2310cb990fea19b535c7f4a78d3f5e10b926eeb8a", size = 8709318 }, + { url = "https://files.pythonhosted.org/packages/c9/31/097f2e132c4f16d99a22bfb777e0fd88bd8e1c634304e102f313af69ace5/pywin32-311-cp314-cp314-win32.whl", hash = "sha256:b7a2c10b93f8986666d0c803ee19b5990885872a7de910fc460f9b0c2fbf92ee", size = 8840714 }, + { url = "https://files.pythonhosted.org/packages/90/4b/07c77d8ba0e01349358082713400435347df8426208171ce297da32c313d/pywin32-311-cp314-cp314-win_amd64.whl", hash = "sha256:3aca44c046bd2ed8c90de9cb8427f581c479e594e99b5c0bb19b29c10fd6cb87", size = 9656800 }, + { url = "https://files.pythonhosted.org/packages/c0/d2/21af5c535501a7233e734b8af901574572da66fcc254cb35d0609c9080dd/pywin32-311-cp314-cp314-win_arm64.whl", hash = "sha256:a508e2d9025764a8270f93111a970e1d0fbfc33f4153b388bb649b7eec4f9b42", size = 8932540 }, ] [[package]] name = "pyyaml" version = "6.0.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631, upload_time = "2024-08-06T20:33:50.674Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/86/0c/c581167fc46d6d6d7ddcfb8c843a4de25bdd27e4466938109ca68492292c/PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", size = 183873, upload_time = "2024-08-06T20:32:25.131Z" }, - { url = "https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", size = 173302, upload_time = "2024-08-06T20:32:26.511Z" }, - { url = "https://files.pythonhosted.org/packages/c3/93/9916574aa8c00aa06bbac729972eb1071d002b8e158bd0e83a3b9a20a1f7/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", size = 739154, upload_time = "2024-08-06T20:32:28.363Z" }, - { url = "https://files.pythonhosted.org/packages/95/0f/b8938f1cbd09739c6da569d172531567dbcc9789e0029aa070856f123984/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", size = 766223, upload_time = "2024-08-06T20:32:30.058Z" }, - { url = "https://files.pythonhosted.org/packages/b9/2b/614b4752f2e127db5cc206abc23a8c19678e92b23c3db30fc86ab731d3bd/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", size = 767542, upload_time = "2024-08-06T20:32:31.881Z" }, - { url = "https://files.pythonhosted.org/packages/d4/00/dd137d5bcc7efea1836d6264f049359861cf548469d18da90cd8216cf05f/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", size = 731164, upload_time = "2024-08-06T20:32:37.083Z" }, - { url = "https://files.pythonhosted.org/packages/c9/1f/4f998c900485e5c0ef43838363ba4a9723ac0ad73a9dc42068b12aaba4e4/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", size = 756611, upload_time = "2024-08-06T20:32:38.898Z" }, - { url = "https://files.pythonhosted.org/packages/df/d1/f5a275fdb252768b7a11ec63585bc38d0e87c9e05668a139fea92b80634c/PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", size = 140591, upload_time = "2024-08-06T20:32:40.241Z" }, - { url = "https://files.pythonhosted.org/packages/0c/e8/4f648c598b17c3d06e8753d7d13d57542b30d56e6c2dedf9c331ae56312e/PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", size = 156338, upload_time = "2024-08-06T20:32:41.93Z" }, - { url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309, upload_time = "2024-08-06T20:32:43.4Z" }, - { url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679, upload_time = "2024-08-06T20:32:44.801Z" }, - { url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428, upload_time = "2024-08-06T20:32:46.432Z" }, - { url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361, upload_time = "2024-08-06T20:32:51.188Z" }, - { url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523, upload_time = "2024-08-06T20:32:53.019Z" }, - { url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660, upload_time = "2024-08-06T20:32:54.708Z" }, - { url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597, upload_time = "2024-08-06T20:32:56.985Z" }, - { url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527, upload_time = "2024-08-06T20:33:03.001Z" }, - { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446, upload_time = "2024-08-06T20:33:04.33Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/86/0c/c581167fc46d6d6d7ddcfb8c843a4de25bdd27e4466938109ca68492292c/PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", size = 183873 }, + { url = "https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", size = 173302 }, + { url = "https://files.pythonhosted.org/packages/c3/93/9916574aa8c00aa06bbac729972eb1071d002b8e158bd0e83a3b9a20a1f7/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", size = 739154 }, + { url = "https://files.pythonhosted.org/packages/95/0f/b8938f1cbd09739c6da569d172531567dbcc9789e0029aa070856f123984/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", size = 766223 }, + { url = "https://files.pythonhosted.org/packages/b9/2b/614b4752f2e127db5cc206abc23a8c19678e92b23c3db30fc86ab731d3bd/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", size = 767542 }, + { url = "https://files.pythonhosted.org/packages/d4/00/dd137d5bcc7efea1836d6264f049359861cf548469d18da90cd8216cf05f/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", size = 731164 }, + { url = "https://files.pythonhosted.org/packages/c9/1f/4f998c900485e5c0ef43838363ba4a9723ac0ad73a9dc42068b12aaba4e4/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", size = 756611 }, + { url = "https://files.pythonhosted.org/packages/df/d1/f5a275fdb252768b7a11ec63585bc38d0e87c9e05668a139fea92b80634c/PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", size = 140591 }, + { url = "https://files.pythonhosted.org/packages/0c/e8/4f648c598b17c3d06e8753d7d13d57542b30d56e6c2dedf9c331ae56312e/PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", size = 156338 }, + { url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309 }, + { url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679 }, + { url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428 }, + { url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361 }, + { url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523 }, + { url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660 }, + { url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597 }, + { url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527 }, + { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446 }, ] [[package]] @@ -2329,46 +2492,59 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pyyaml" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/eb/2e/79c822141bfd05a853236b504869ebc6b70159afc570e1d5a20641782eaa/pyyaml_env_tag-1.1.tar.gz", hash = "sha256:2eb38b75a2d21ee0475d6d97ec19c63287a7e140231e4214969d0eac923cd7ff", size = 5737, upload_time = "2025-05-13T15:24:01.64Z" } +sdist = { url = "https://files.pythonhosted.org/packages/eb/2e/79c822141bfd05a853236b504869ebc6b70159afc570e1d5a20641782eaa/pyyaml_env_tag-1.1.tar.gz", hash = "sha256:2eb38b75a2d21ee0475d6d97ec19c63287a7e140231e4214969d0eac923cd7ff", size = 5737 } wheels = [ - { url = "https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl", hash = "sha256:17109e1a528561e32f026364712fee1264bc2ea6715120891174ed1b980d2e04", size = 4722, upload_time = "2025-05-13T15:23:59.629Z" }, + { url = "https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl", hash = "sha256:17109e1a528561e32f026364712fee1264bc2ea6715120891174ed1b980d2e04", size = 4722 }, ] [[package]] name = "pyzmq" -version = "27.0.0" +version = "27.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cffi", marker = "implementation_name == 'pypy'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f1/06/50a4e9648b3e8b992bef8eb632e457307553a89d294103213cfd47b3da69/pyzmq-27.0.0.tar.gz", hash = "sha256:b1f08eeb9ce1510e6939b6e5dcd46a17765e2333daae78ecf4606808442e52cf", size = 280478, upload_time = "2025-06-13T14:09:07.087Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/93/a7/9ad68f55b8834ede477842214feba6a4c786d936c022a67625497aacf61d/pyzmq-27.0.0-cp312-abi3-macosx_10_15_universal2.whl", hash = "sha256:cbabc59dcfaac66655c040dfcb8118f133fb5dde185e5fc152628354c1598e52", size = 1305438, upload_time = "2025-06-13T14:07:31.676Z" }, - { url = "https://files.pythonhosted.org/packages/ba/ee/26aa0f98665a22bc90ebe12dced1de5f3eaca05363b717f6fb229b3421b3/pyzmq-27.0.0-cp312-abi3-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:cb0ac5179cba4b2f94f1aa208fbb77b62c4c9bf24dd446278b8b602cf85fcda3", size = 895095, upload_time = "2025-06-13T14:07:33.104Z" }, - { url = "https://files.pythonhosted.org/packages/cf/85/c57e7ab216ecd8aa4cc7e3b83b06cc4e9cf45c87b0afc095f10cd5ce87c1/pyzmq-27.0.0-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:53a48f0228eab6cbf69fde3aa3c03cbe04e50e623ef92ae395fce47ef8a76152", size = 651826, upload_time = "2025-06-13T14:07:34.831Z" }, - { url = "https://files.pythonhosted.org/packages/69/9a/9ea7e230feda9400fb0ae0d61d7d6ddda635e718d941c44eeab22a179d34/pyzmq-27.0.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:111db5f395e09f7e775f759d598f43cb815fc58e0147623c4816486e1a39dc22", size = 839750, upload_time = "2025-06-13T14:07:36.553Z" }, - { url = "https://files.pythonhosted.org/packages/08/66/4cebfbe71f3dfbd417011daca267539f62ed0fbc68105357b68bbb1a25b7/pyzmq-27.0.0-cp312-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:c8878011653dcdc27cc2c57e04ff96f0471e797f5c19ac3d7813a245bcb24371", size = 1641357, upload_time = "2025-06-13T14:07:38.21Z" }, - { url = "https://files.pythonhosted.org/packages/ac/f6/b0f62578c08d2471c791287149cb8c2aaea414ae98c6e995c7dbe008adfb/pyzmq-27.0.0-cp312-abi3-musllinux_1_2_i686.whl", hash = "sha256:c0ed2c1f335ba55b5fdc964622254917d6b782311c50e138863eda409fbb3b6d", size = 2020281, upload_time = "2025-06-13T14:07:39.599Z" }, - { url = "https://files.pythonhosted.org/packages/37/b9/4f670b15c7498495da9159edc374ec09c88a86d9cd5a47d892f69df23450/pyzmq-27.0.0-cp312-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:e918d70862d4cfd4b1c187310015646a14e1f5917922ab45b29f28f345eeb6be", size = 1877110, upload_time = "2025-06-13T14:07:41.027Z" }, - { url = "https://files.pythonhosted.org/packages/66/31/9dee25c226295b740609f0d46db2fe972b23b6f5cf786360980524a3ba92/pyzmq-27.0.0-cp312-abi3-win32.whl", hash = "sha256:88b4e43cab04c3c0f0d55df3b1eef62df2b629a1a369b5289a58f6fa8b07c4f4", size = 559297, upload_time = "2025-06-13T14:07:42.533Z" }, - { url = "https://files.pythonhosted.org/packages/9b/12/52da5509800f7ff2d287b2f2b4e636e7ea0f001181cba6964ff6c1537778/pyzmq-27.0.0-cp312-abi3-win_amd64.whl", hash = "sha256:dce4199bf5f648a902ce37e7b3afa286f305cd2ef7a8b6ec907470ccb6c8b371", size = 619203, upload_time = "2025-06-13T14:07:43.843Z" }, - { url = "https://files.pythonhosted.org/packages/93/6d/7f2e53b19d1edb1eb4f09ec7c3a1f945ca0aac272099eab757d15699202b/pyzmq-27.0.0-cp312-abi3-win_arm64.whl", hash = "sha256:56e46bbb85d52c1072b3f809cc1ce77251d560bc036d3a312b96db1afe76db2e", size = 551927, upload_time = "2025-06-13T14:07:45.51Z" }, - { url = "https://files.pythonhosted.org/packages/19/62/876b27c4ff777db4ceba1c69ea90d3c825bb4f8d5e7cd987ce5802e33c55/pyzmq-27.0.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:c36ad534c0c29b4afa088dc53543c525b23c0797e01b69fef59b1a9c0e38b688", size = 1340826, upload_time = "2025-06-13T14:07:46.881Z" }, - { url = "https://files.pythonhosted.org/packages/43/69/58ef8f4f59d3bcd505260c73bee87b008850f45edca40ddaba54273c35f4/pyzmq-27.0.0-cp313-cp313t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:67855c14173aec36395d7777aaba3cc527b393821f30143fd20b98e1ff31fd38", size = 897283, upload_time = "2025-06-13T14:07:49.562Z" }, - { url = "https://files.pythonhosted.org/packages/43/15/93a0d0396700a60475ad3c5d42c5f1c308d3570bc94626b86c71ef9953e0/pyzmq-27.0.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8617c7d43cd8ccdb62aebe984bfed77ca8f036e6c3e46dd3dddda64b10f0ab7a", size = 660567, upload_time = "2025-06-13T14:07:51.364Z" }, - { url = "https://files.pythonhosted.org/packages/0e/b3/fe055513e498ca32f64509abae19b9c9eb4d7c829e02bd8997dd51b029eb/pyzmq-27.0.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:67bfbcbd0a04c575e8103a6061d03e393d9f80ffdb9beb3189261e9e9bc5d5e9", size = 847681, upload_time = "2025-06-13T14:07:52.77Z" }, - { url = "https://files.pythonhosted.org/packages/b6/4f/ff15300b00b5b602191f3df06bbc8dd4164e805fdd65bb77ffbb9c5facdc/pyzmq-27.0.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:5cd11d46d7b7e5958121b3eaf4cd8638eff3a720ec527692132f05a57f14341d", size = 1650148, upload_time = "2025-06-13T14:07:54.178Z" }, - { url = "https://files.pythonhosted.org/packages/c4/6f/84bdfff2a224a6f26a24249a342e5906993c50b0761e311e81b39aef52a7/pyzmq-27.0.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:b801c2e40c5aa6072c2f4876de8dccd100af6d9918d4d0d7aa54a1d982fd4f44", size = 2023768, upload_time = "2025-06-13T14:07:55.714Z" }, - { url = "https://files.pythonhosted.org/packages/64/39/dc2db178c26a42228c5ac94a9cc595030458aa64c8d796a7727947afbf55/pyzmq-27.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:20d5cb29e8c5f76a127c75b6e7a77e846bc4b655c373baa098c26a61b7ecd0ef", size = 1885199, upload_time = "2025-06-13T14:07:57.166Z" }, - { url = "https://files.pythonhosted.org/packages/c7/21/dae7b06a1f8cdee5d8e7a63d99c5d129c401acc40410bef2cbf42025e26f/pyzmq-27.0.0-cp313-cp313t-win32.whl", hash = "sha256:a20528da85c7ac7a19b7384e8c3f8fa707841fd85afc4ed56eda59d93e3d98ad", size = 575439, upload_time = "2025-06-13T14:07:58.959Z" }, - { url = "https://files.pythonhosted.org/packages/eb/bc/1709dc55f0970cf4cb8259e435e6773f9946f41a045c2cb90e870b7072da/pyzmq-27.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:d8229f2efece6a660ee211d74d91dbc2a76b95544d46c74c615e491900dc107f", size = 639933, upload_time = "2025-06-13T14:08:00.777Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/04/0b/3c9baedbdf613ecaa7aa07027780b8867f57b6293b6ee50de316c9f3222b/pyzmq-27.1.0.tar.gz", hash = "sha256:ac0765e3d44455adb6ddbf4417dcce460fc40a05978c08efdf2948072f6db540", size = 281750 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/92/e7/038aab64a946d535901103da16b953c8c9cc9c961dadcbf3609ed6428d23/pyzmq-27.1.0-cp312-abi3-macosx_10_15_universal2.whl", hash = "sha256:452631b640340c928fa343801b0d07eb0c3789a5ffa843f6e1a9cee0ba4eb4fc", size = 1306279 }, + { url = "https://files.pythonhosted.org/packages/e8/5e/c3c49fdd0f535ef45eefcc16934648e9e59dace4a37ee88fc53f6cd8e641/pyzmq-27.1.0-cp312-abi3-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1c179799b118e554b66da67d88ed66cd37a169f1f23b5d9f0a231b4e8d44a113", size = 895645 }, + { url = "https://files.pythonhosted.org/packages/f8/e5/b0b2504cb4e903a74dcf1ebae157f9e20ebb6ea76095f6cfffea28c42ecd/pyzmq-27.1.0-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3837439b7f99e60312f0c926a6ad437b067356dc2bc2ec96eb395fd0fe804233", size = 652574 }, + { url = "https://files.pythonhosted.org/packages/f8/9b/c108cdb55560eaf253f0cbdb61b29971e9fb34d9c3499b0e96e4e60ed8a5/pyzmq-27.1.0-cp312-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:43ad9a73e3da1fab5b0e7e13402f0b2fb934ae1c876c51d0afff0e7c052eca31", size = 840995 }, + { url = "https://files.pythonhosted.org/packages/c2/bb/b79798ca177b9eb0825b4c9998c6af8cd2a7f15a6a1a4272c1d1a21d382f/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:0de3028d69d4cdc475bfe47a6128eb38d8bc0e8f4d69646adfbcd840facbac28", size = 1642070 }, + { url = "https://files.pythonhosted.org/packages/9c/80/2df2e7977c4ede24c79ae39dcef3899bfc5f34d1ca7a5b24f182c9b7a9ca/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_i686.whl", hash = "sha256:cf44a7763aea9298c0aa7dbf859f87ed7012de8bda0f3977b6fb1d96745df856", size = 2021121 }, + { url = "https://files.pythonhosted.org/packages/46/bd/2d45ad24f5f5ae7e8d01525eb76786fa7557136555cac7d929880519e33a/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:f30f395a9e6fbca195400ce833c731e7b64c3919aa481af4d88c3759e0cb7496", size = 1878550 }, + { url = "https://files.pythonhosted.org/packages/e6/2f/104c0a3c778d7c2ab8190e9db4f62f0b6957b53c9d87db77c284b69f33ea/pyzmq-27.1.0-cp312-abi3-win32.whl", hash = "sha256:250e5436a4ba13885494412b3da5d518cd0d3a278a1ae640e113c073a5f88edd", size = 559184 }, + { url = "https://files.pythonhosted.org/packages/fc/7f/a21b20d577e4100c6a41795842028235998a643b1ad406a6d4163ea8f53e/pyzmq-27.1.0-cp312-abi3-win_amd64.whl", hash = "sha256:9ce490cf1d2ca2ad84733aa1d69ce6855372cb5ce9223802450c9b2a7cba0ccf", size = 619480 }, + { url = "https://files.pythonhosted.org/packages/78/c2/c012beae5f76b72f007a9e91ee9401cb88c51d0f83c6257a03e785c81cc2/pyzmq-27.1.0-cp312-abi3-win_arm64.whl", hash = "sha256:75a2f36223f0d535a0c919e23615fc85a1e23b71f40c7eb43d7b1dedb4d8f15f", size = 552993 }, + { url = "https://files.pythonhosted.org/packages/60/cb/84a13459c51da6cec1b7b1dc1a47e6db6da50b77ad7fd9c145842750a011/pyzmq-27.1.0-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:93ad4b0855a664229559e45c8d23797ceac03183c7b6f5b4428152a6b06684a5", size = 1122436 }, + { url = "https://files.pythonhosted.org/packages/dc/b6/94414759a69a26c3dd674570a81813c46a078767d931a6c70ad29fc585cb/pyzmq-27.1.0-cp313-cp313-android_24_x86_64.whl", hash = "sha256:fbb4f2400bfda24f12f009cba62ad5734148569ff4949b1b6ec3b519444342e6", size = 1156301 }, + { url = "https://files.pythonhosted.org/packages/a5/ad/15906493fd40c316377fd8a8f6b1f93104f97a752667763c9b9c1b71d42d/pyzmq-27.1.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:e343d067f7b151cfe4eb3bb796a7752c9d369eed007b91231e817071d2c2fec7", size = 1341197 }, + { url = "https://files.pythonhosted.org/packages/14/1d/d343f3ce13db53a54cb8946594e567410b2125394dafcc0268d8dda027e0/pyzmq-27.1.0-cp313-cp313t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:08363b2011dec81c354d694bdecaef4770e0ae96b9afea70b3f47b973655cc05", size = 897275 }, + { url = "https://files.pythonhosted.org/packages/69/2d/d83dd6d7ca929a2fc67d2c3005415cdf322af7751d773524809f9e585129/pyzmq-27.1.0-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d54530c8c8b5b8ddb3318f481297441af102517602b569146185fa10b63f4fa9", size = 660469 }, + { url = "https://files.pythonhosted.org/packages/3e/cd/9822a7af117f4bc0f1952dbe9ef8358eb50a24928efd5edf54210b850259/pyzmq-27.1.0-cp313-cp313t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6f3afa12c392f0a44a2414056d730eebc33ec0926aae92b5ad5cf26ebb6cc128", size = 847961 }, + { url = "https://files.pythonhosted.org/packages/9a/12/f003e824a19ed73be15542f172fd0ec4ad0b60cf37436652c93b9df7c585/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c65047adafe573ff023b3187bb93faa583151627bc9c51fc4fb2c561ed689d39", size = 1650282 }, + { url = "https://files.pythonhosted.org/packages/d5/4a/e82d788ed58e9a23995cee70dbc20c9aded3d13a92d30d57ec2291f1e8a3/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:90e6e9441c946a8b0a667356f7078d96411391a3b8f80980315455574177ec97", size = 2024468 }, + { url = "https://files.pythonhosted.org/packages/d9/94/2da0a60841f757481e402b34bf4c8bf57fa54a5466b965de791b1e6f747d/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:add071b2d25f84e8189aaf0882d39a285b42fa3853016ebab234a5e78c7a43db", size = 1885394 }, + { url = "https://files.pythonhosted.org/packages/4f/6f/55c10e2e49ad52d080dc24e37adb215e5b0d64990b57598abc2e3f01725b/pyzmq-27.1.0-cp313-cp313t-win32.whl", hash = "sha256:7ccc0700cfdf7bd487bea8d850ec38f204478681ea02a582a8da8171b7f90a1c", size = 574964 }, + { url = "https://files.pythonhosted.org/packages/87/4d/2534970ba63dd7c522d8ca80fb92777f362c0f321900667c615e2067cb29/pyzmq-27.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:8085a9fba668216b9b4323be338ee5437a235fe275b9d1610e422ccc279733e2", size = 641029 }, + { url = "https://files.pythonhosted.org/packages/f6/fa/f8aea7a28b0641f31d40dea42d7ef003fded31e184ef47db696bc74cd610/pyzmq-27.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:6bb54ca21bcfe361e445256c15eedf083f153811c37be87e0514934d6913061e", size = 561541 }, + { url = "https://files.pythonhosted.org/packages/87/45/19efbb3000956e82d0331bafca5d9ac19ea2857722fa2caacefb6042f39d/pyzmq-27.1.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:ce980af330231615756acd5154f29813d553ea555485ae712c491cd483df6b7a", size = 1341197 }, + { url = "https://files.pythonhosted.org/packages/48/43/d72ccdbf0d73d1343936296665826350cb1e825f92f2db9db3e61c2162a2/pyzmq-27.1.0-cp314-cp314t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1779be8c549e54a1c38f805e56d2a2e5c009d26de10921d7d51cfd1c8d4632ea", size = 897175 }, + { url = "https://files.pythonhosted.org/packages/2f/2e/a483f73a10b65a9ef0161e817321d39a770b2acf8bcf3004a28d90d14a94/pyzmq-27.1.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7200bb0f03345515df50d99d3db206a0a6bee1955fbb8c453c76f5bf0e08fb96", size = 660427 }, + { url = "https://files.pythonhosted.org/packages/f5/d2/5f36552c2d3e5685abe60dfa56f91169f7a2d99bbaf67c5271022ab40863/pyzmq-27.1.0-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01c0e07d558b06a60773744ea6251f769cd79a41a97d11b8bf4ab8f034b0424d", size = 847929 }, + { url = "https://files.pythonhosted.org/packages/c4/2a/404b331f2b7bf3198e9945f75c4c521f0c6a3a23b51f7a4a401b94a13833/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:80d834abee71f65253c91540445d37c4c561e293ba6e741b992f20a105d69146", size = 1650193 }, + { url = "https://files.pythonhosted.org/packages/1c/0b/f4107e33f62a5acf60e3ded67ed33d79b4ce18de432625ce2fc5093d6388/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:544b4e3b7198dde4a62b8ff6685e9802a9a1ebf47e77478a5eb88eca2a82f2fd", size = 2024388 }, + { url = "https://files.pythonhosted.org/packages/0d/01/add31fe76512642fd6e40e3a3bd21f4b47e242c8ba33efb6809e37076d9b/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cedc4c68178e59a4046f97eca31b148ddcf51e88677de1ef4e78cf06c5376c9a", size = 1885316 }, + { url = "https://files.pythonhosted.org/packages/c4/59/a5f38970f9bf07cee96128de79590bb354917914a9be11272cfc7ff26af0/pyzmq-27.1.0-cp314-cp314t-win32.whl", hash = "sha256:1f0b2a577fd770aa6f053211a55d1c47901f4d537389a034c690291485e5fe92", size = 587472 }, + { url = "https://files.pythonhosted.org/packages/70/d8/78b1bad170f93fcf5e3536e70e8fadac55030002275c9a29e8f5719185de/pyzmq-27.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:19c9468ae0437f8074af379e986c5d3d7d7bfe033506af442e8c879732bedbe0", size = 661401 }, + { url = "https://files.pythonhosted.org/packages/81/d6/4bfbb40c9a0b42fc53c7cf442f6385db70b40f74a783130c5d0a5aa62228/pyzmq-27.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:dc5dbf68a7857b59473f7df42650c621d7e8923fb03fa74a526890f4d33cc4d7", size = 575170 }, ] [[package]] name = "ratelimit" version = "2.2.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ab/38/ff60c8fc9e002d50d48822cc5095deb8ebbc5f91a6b8fdd9731c87a147c9/ratelimit-2.2.1.tar.gz", hash = "sha256:af8a9b64b821529aca09ebaf6d8d279100d766f19e90b5059ac6a718ca6dee42", size = 5251, upload_time = "2018-12-17T18:55:49.675Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ab/38/ff60c8fc9e002d50d48822cc5095deb8ebbc5f91a6b8fdd9731c87a147c9/ratelimit-2.2.1.tar.gz", hash = "sha256:af8a9b64b821529aca09ebaf6d8d279100d766f19e90b5059ac6a718ca6dee42", size = 5251 } [[package]] name = "referencing" @@ -2379,14 +2555,14 @@ dependencies = [ { name = "rpds-py" }, { name = "typing-extensions", marker = "python_full_version < '3.13'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/2f/db/98b5c277be99dd18bfd91dd04e1b759cad18d1a338188c936e92f921c7e2/referencing-0.36.2.tar.gz", hash = "sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa", size = 74744, upload_time = "2025-01-25T08:48:16.138Z" } +sdist = { url = "https://files.pythonhosted.org/packages/2f/db/98b5c277be99dd18bfd91dd04e1b759cad18d1a338188c936e92f921c7e2/referencing-0.36.2.tar.gz", hash = "sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa", size = 74744 } wheels = [ - { url = "https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0", size = 26775, upload_time = "2025-01-25T08:48:14.241Z" }, + { url = "https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0", size = 26775 }, ] [[package]] name = "requests" -version = "2.32.4" +version = "2.32.5" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "certifi" }, @@ -2394,9 +2570,9 @@ dependencies = [ { name = "idna" }, { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/e1/0a/929373653770d8a0d7ea76c37de6e41f11eb07559b103b1c02cafb3f7cf8/requests-2.32.4.tar.gz", hash = "sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422", size = 135258, upload_time = "2025-06-09T16:43:07.34Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c9/74/b3ff8e6c8446842c3f5c837e9c3dfcfe2018ea6ecef224c710c85ef728f4/requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf", size = 134517 } wheels = [ - { url = "https://files.pythonhosted.org/packages/7c/e4/56027c4a6b4ae70ca9de302488c5ca95ad4a39e190093d6c1a8ace08341b/requests-2.32.4-py3-none-any.whl", hash = "sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c", size = 64847, upload_time = "2025-06-09T16:43:05.728Z" }, + { url = "https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6", size = 64738 }, ] [[package]] @@ -2406,14 +2582,14 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "requests" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/72/97/bf44e6c6bd8ddbb99943baf7ba8b1a8485bcd2fe0e55e5708d7fee4ff1ae/requests_file-2.1.0.tar.gz", hash = "sha256:0f549a3f3b0699415ac04d167e9cb39bccfb730cb832b4d20be3d9867356e658", size = 6891, upload_time = "2024-05-21T16:28:00.24Z" } +sdist = { url = "https://files.pythonhosted.org/packages/72/97/bf44e6c6bd8ddbb99943baf7ba8b1a8485bcd2fe0e55e5708d7fee4ff1ae/requests_file-2.1.0.tar.gz", hash = "sha256:0f549a3f3b0699415ac04d167e9cb39bccfb730cb832b4d20be3d9867356e658", size = 6891 } wheels = [ - { url = "https://files.pythonhosted.org/packages/d7/25/dd878a121fcfdf38f52850f11c512e13ec87c2ea72385933818e5b6c15ce/requests_file-2.1.0-py2.py3-none-any.whl", hash = "sha256:cf270de5a4c5874e84599fc5778303d496c10ae5e870bfa378818f35d21bda5c", size = 4244, upload_time = "2024-05-21T16:27:57.733Z" }, + { url = "https://files.pythonhosted.org/packages/d7/25/dd878a121fcfdf38f52850f11c512e13ec87c2ea72385933818e5b6c15ce/requests_file-2.1.0-py2.py3-none-any.whl", hash = "sha256:cf270de5a4c5874e84599fc5778303d496c10ae5e870bfa378818f35d21bda5c", size = 4244 }, ] [[package]] name = "reuse" -version = "5.0.2" +version = "5.1.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "attrs" }, @@ -2425,145 +2601,150 @@ dependencies = [ { name = "python-debian" }, { name = "tomlkit" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/08/43/35421efe0e69823787b331362e11cc16bb697cd6f19cbed284d421615f14/reuse-5.0.2.tar.gz", hash = "sha256:878016ae5dd29c10bad4606d6676c12a268c12aa9fcfea66403598e16eed085c", size = 358798, upload_time = "2024-11-14T09:33:17.512Z" } +sdist = { url = "https://files.pythonhosted.org/packages/4b/f7/b59fe851b856d0932aedbf311a3d719f30783e27af6d05bb76d77072ab8f/reuse-5.1.1.tar.gz", hash = "sha256:a13914ed8b66b8e5956e96c63203c63d72b55280d348849ccc0eb314c73248cb", size = 419022 } wheels = [ - { url = "https://files.pythonhosted.org/packages/0a/2f/73de654df9e7e5f67d742c1d949b5c0c7c1203e84b2272d9e34a91faaf5c/reuse-5.0.2-cp313-cp313-manylinux_2_40_x86_64.whl", hash = "sha256:7a680f00324e87a72061677a892d8cbabfddf7adcf7a5376aeeed2d78995bbbb", size = 184309, upload_time = "2024-11-14T09:33:15.047Z" }, + { url = "https://files.pythonhosted.org/packages/c9/95/12451ff8bc2c3e8a5755bc810a538de85444015d44353fc6f7ee8800c0bb/reuse-5.1.1-cp313-cp313-manylinux_2_41_x86_64.whl", hash = "sha256:15a68341949b7ddb3630d8d3a49d9537bbc143ee235dca77cc3f4047237c8299", size = 255386 }, ] [[package]] name = "rfc3986" version = "2.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/85/40/1520d68bfa07ab5a6f065a186815fb6610c86fe957bc065754e47f7b0840/rfc3986-2.0.0.tar.gz", hash = "sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c", size = 49026, upload_time = "2022-01-10T00:52:30.832Z" } +sdist = { url = "https://files.pythonhosted.org/packages/85/40/1520d68bfa07ab5a6f065a186815fb6610c86fe957bc065754e47f7b0840/rfc3986-2.0.0.tar.gz", hash = "sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c", size = 49026 } wheels = [ - { url = "https://files.pythonhosted.org/packages/ff/9a/9afaade874b2fa6c752c36f1548f718b5b83af81ed9b76628329dab81c1b/rfc3986-2.0.0-py2.py3-none-any.whl", hash = "sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd", size = 31326, upload_time = "2022-01-10T00:52:29.594Z" }, + { url = "https://files.pythonhosted.org/packages/ff/9a/9afaade874b2fa6c752c36f1548f718b5b83af81ed9b76628329dab81c1b/rfc3986-2.0.0-py2.py3-none-any.whl", hash = "sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd", size = 31326 }, ] [[package]] name = "rich" -version = "13.9.4" +version = "14.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "markdown-it-py" }, { name = "pygments" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ab/3a/0316b28d0761c6734d6bc14e770d85506c986c85ffb239e688eeaab2c2bc/rich-13.9.4.tar.gz", hash = "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098", size = 223149, upload_time = "2024-11-01T16:43:57.873Z" } +sdist = { url = "https://files.pythonhosted.org/packages/fe/75/af448d8e52bf1d8fa6a9d089ca6c07ff4453d86c65c145d0a300bb073b9b/rich-14.1.0.tar.gz", hash = "sha256:e497a48b844b0320d45007cdebfeaeed8db2a4f4bcf49f15e455cfc4af11eaa8", size = 224441 } wheels = [ - { url = "https://files.pythonhosted.org/packages/19/71/39c7c0d87f8d4e6c020a393182060eaefeeae6c01dab6a84ec346f2567df/rich-13.9.4-py3-none-any.whl", hash = "sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90", size = 242424, upload_time = "2024-11-01T16:43:55.817Z" }, + { url = "https://files.pythonhosted.org/packages/e3/30/3c4d035596d3cf444529e0b2953ad0466f6049528a879d27534700580395/rich-14.1.0-py3-none-any.whl", hash = "sha256:536f5f1785986d6dbdea3c75205c473f970777b4a0d6c6dd1b696aa05a3fa04f", size = 243368 }, ] [[package]] name = "rpds-py" -version = "0.26.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a5/aa/4456d84bbb54adc6a916fb10c9b374f78ac840337644e4a5eda229c81275/rpds_py-0.26.0.tar.gz", hash = "sha256:20dae58a859b0906f0685642e591056f1e787f3a8b39c8e8749a45dc7d26bdb0", size = 27385, upload_time = "2025-07-01T15:57:13.958Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ea/86/90eb87c6f87085868bd077c7a9938006eb1ce19ed4d06944a90d3560fce2/rpds_py-0.26.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:894514d47e012e794f1350f076c427d2347ebf82f9b958d554d12819849a369d", size = 363933, upload_time = "2025-07-01T15:54:15.734Z" }, - { url = "https://files.pythonhosted.org/packages/63/78/4469f24d34636242c924626082b9586f064ada0b5dbb1e9d096ee7a8e0c6/rpds_py-0.26.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc921b96fa95a097add244da36a1d9e4f3039160d1d30f1b35837bf108c21136", size = 350447, upload_time = "2025-07-01T15:54:16.922Z" }, - { url = "https://files.pythonhosted.org/packages/ad/91/c448ed45efdfdade82348d5e7995e15612754826ea640afc20915119734f/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e1157659470aa42a75448b6e943c895be8c70531c43cb78b9ba990778955582", size = 384711, upload_time = "2025-07-01T15:54:18.101Z" }, - { url = "https://files.pythonhosted.org/packages/ec/43/e5c86fef4be7f49828bdd4ecc8931f0287b1152c0bb0163049b3218740e7/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:521ccf56f45bb3a791182dc6b88ae5f8fa079dd705ee42138c76deb1238e554e", size = 400865, upload_time = "2025-07-01T15:54:19.295Z" }, - { url = "https://files.pythonhosted.org/packages/55/34/e00f726a4d44f22d5c5fe2e5ddd3ac3d7fd3f74a175607781fbdd06fe375/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9def736773fd56b305c0eef698be5192c77bfa30d55a0e5885f80126c4831a15", size = 517763, upload_time = "2025-07-01T15:54:20.858Z" }, - { url = "https://files.pythonhosted.org/packages/52/1c/52dc20c31b147af724b16104500fba13e60123ea0334beba7b40e33354b4/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cdad4ea3b4513b475e027be79e5a0ceac8ee1c113a1a11e5edc3c30c29f964d8", size = 406651, upload_time = "2025-07-01T15:54:22.508Z" }, - { url = "https://files.pythonhosted.org/packages/2e/77/87d7bfabfc4e821caa35481a2ff6ae0b73e6a391bb6b343db2c91c2b9844/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82b165b07f416bdccf5c84546a484cc8f15137ca38325403864bfdf2b5b72f6a", size = 386079, upload_time = "2025-07-01T15:54:23.987Z" }, - { url = "https://files.pythonhosted.org/packages/e3/d4/7f2200c2d3ee145b65b3cddc4310d51f7da6a26634f3ac87125fd789152a/rpds_py-0.26.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d04cab0a54b9dba4d278fe955a1390da3cf71f57feb78ddc7cb67cbe0bd30323", size = 421379, upload_time = "2025-07-01T15:54:25.073Z" }, - { url = "https://files.pythonhosted.org/packages/ae/13/9fdd428b9c820869924ab62236b8688b122baa22d23efdd1c566938a39ba/rpds_py-0.26.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:79061ba1a11b6a12743a2b0f72a46aa2758613d454aa6ba4f5a265cc48850158", size = 562033, upload_time = "2025-07-01T15:54:26.225Z" }, - { url = "https://files.pythonhosted.org/packages/f3/e1/b69686c3bcbe775abac3a4c1c30a164a2076d28df7926041f6c0eb5e8d28/rpds_py-0.26.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:f405c93675d8d4c5ac87364bb38d06c988e11028a64b52a47158a355079661f3", size = 591639, upload_time = "2025-07-01T15:54:27.424Z" }, - { url = "https://files.pythonhosted.org/packages/5c/c9/1e3d8c8863c84a90197ac577bbc3d796a92502124c27092413426f670990/rpds_py-0.26.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dafd4c44b74aa4bed4b250f1aed165b8ef5de743bcca3b88fc9619b6087093d2", size = 557105, upload_time = "2025-07-01T15:54:29.93Z" }, - { url = "https://files.pythonhosted.org/packages/9f/c5/90c569649057622959f6dcc40f7b516539608a414dfd54b8d77e3b201ac0/rpds_py-0.26.0-cp312-cp312-win32.whl", hash = "sha256:3da5852aad63fa0c6f836f3359647870e21ea96cf433eb393ffa45263a170d44", size = 223272, upload_time = "2025-07-01T15:54:31.128Z" }, - { url = "https://files.pythonhosted.org/packages/7d/16/19f5d9f2a556cfed454eebe4d354c38d51c20f3db69e7b4ce6cff904905d/rpds_py-0.26.0-cp312-cp312-win_amd64.whl", hash = "sha256:cf47cfdabc2194a669dcf7a8dbba62e37a04c5041d2125fae0233b720da6f05c", size = 234995, upload_time = "2025-07-01T15:54:32.195Z" }, - { url = "https://files.pythonhosted.org/packages/83/f0/7935e40b529c0e752dfaa7880224771b51175fce08b41ab4a92eb2fbdc7f/rpds_py-0.26.0-cp312-cp312-win_arm64.whl", hash = "sha256:20ab1ae4fa534f73647aad289003f1104092890849e0266271351922ed5574f8", size = 223198, upload_time = "2025-07-01T15:54:33.271Z" }, - { url = "https://files.pythonhosted.org/packages/6a/67/bb62d0109493b12b1c6ab00de7a5566aa84c0e44217c2d94bee1bd370da9/rpds_py-0.26.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:696764a5be111b036256c0b18cd29783fab22154690fc698062fc1b0084b511d", size = 363917, upload_time = "2025-07-01T15:54:34.755Z" }, - { url = "https://files.pythonhosted.org/packages/4b/f3/34e6ae1925a5706c0f002a8d2d7f172373b855768149796af87bd65dcdb9/rpds_py-0.26.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1e6c15d2080a63aaed876e228efe4f814bc7889c63b1e112ad46fdc8b368b9e1", size = 350073, upload_time = "2025-07-01T15:54:36.292Z" }, - { url = "https://files.pythonhosted.org/packages/75/83/1953a9d4f4e4de7fd0533733e041c28135f3c21485faaef56a8aadbd96b5/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:390e3170babf42462739a93321e657444f0862c6d722a291accc46f9d21ed04e", size = 384214, upload_time = "2025-07-01T15:54:37.469Z" }, - { url = "https://files.pythonhosted.org/packages/48/0e/983ed1b792b3322ea1d065e67f4b230f3b96025f5ce3878cc40af09b7533/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7da84c2c74c0f5bc97d853d9e17bb83e2dcafcff0dc48286916001cc114379a1", size = 400113, upload_time = "2025-07-01T15:54:38.954Z" }, - { url = "https://files.pythonhosted.org/packages/69/7f/36c0925fff6f660a80be259c5b4f5e53a16851f946eb080351d057698528/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4c5fe114a6dd480a510b6d3661d09d67d1622c4bf20660a474507aaee7eeeee9", size = 515189, upload_time = "2025-07-01T15:54:40.57Z" }, - { url = "https://files.pythonhosted.org/packages/13/45/cbf07fc03ba7a9b54662c9badb58294ecfb24f828b9732970bd1a431ed5c/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3100b3090269f3a7ea727b06a6080d4eb7439dca4c0e91a07c5d133bb1727ea7", size = 406998, upload_time = "2025-07-01T15:54:43.025Z" }, - { url = "https://files.pythonhosted.org/packages/6c/b0/8fa5e36e58657997873fd6a1cf621285ca822ca75b4b3434ead047daa307/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c03c9b0c64afd0320ae57de4c982801271c0c211aa2d37f3003ff5feb75bb04", size = 385903, upload_time = "2025-07-01T15:54:44.752Z" }, - { url = "https://files.pythonhosted.org/packages/4b/f7/b25437772f9f57d7a9fbd73ed86d0dcd76b4c7c6998348c070d90f23e315/rpds_py-0.26.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5963b72ccd199ade6ee493723d18a3f21ba7d5b957017607f815788cef50eaf1", size = 419785, upload_time = "2025-07-01T15:54:46.043Z" }, - { url = "https://files.pythonhosted.org/packages/a7/6b/63ffa55743dfcb4baf2e9e77a0b11f7f97ed96a54558fcb5717a4b2cd732/rpds_py-0.26.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9da4e873860ad5bab3291438525cae80169daecbfafe5657f7f5fb4d6b3f96b9", size = 561329, upload_time = "2025-07-01T15:54:47.64Z" }, - { url = "https://files.pythonhosted.org/packages/2f/07/1f4f5e2886c480a2346b1e6759c00278b8a69e697ae952d82ae2e6ee5db0/rpds_py-0.26.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5afaddaa8e8c7f1f7b4c5c725c0070b6eed0228f705b90a1732a48e84350f4e9", size = 590875, upload_time = "2025-07-01T15:54:48.9Z" }, - { url = "https://files.pythonhosted.org/packages/cc/bc/e6639f1b91c3a55f8c41b47d73e6307051b6e246254a827ede730624c0f8/rpds_py-0.26.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4916dc96489616a6f9667e7526af8fa693c0fdb4f3acb0e5d9f4400eb06a47ba", size = 556636, upload_time = "2025-07-01T15:54:50.619Z" }, - { url = "https://files.pythonhosted.org/packages/05/4c/b3917c45566f9f9a209d38d9b54a1833f2bb1032a3e04c66f75726f28876/rpds_py-0.26.0-cp313-cp313-win32.whl", hash = "sha256:2a343f91b17097c546b93f7999976fd6c9d5900617aa848c81d794e062ab302b", size = 222663, upload_time = "2025-07-01T15:54:52.023Z" }, - { url = "https://files.pythonhosted.org/packages/e0/0b/0851bdd6025775aaa2365bb8de0697ee2558184c800bfef8d7aef5ccde58/rpds_py-0.26.0-cp313-cp313-win_amd64.whl", hash = "sha256:0a0b60701f2300c81b2ac88a5fb893ccfa408e1c4a555a77f908a2596eb875a5", size = 234428, upload_time = "2025-07-01T15:54:53.692Z" }, - { url = "https://files.pythonhosted.org/packages/ed/e8/a47c64ed53149c75fb581e14a237b7b7cd18217e969c30d474d335105622/rpds_py-0.26.0-cp313-cp313-win_arm64.whl", hash = "sha256:257d011919f133a4746958257f2c75238e3ff54255acd5e3e11f3ff41fd14256", size = 222571, upload_time = "2025-07-01T15:54:54.822Z" }, - { url = "https://files.pythonhosted.org/packages/89/bf/3d970ba2e2bcd17d2912cb42874107390f72873e38e79267224110de5e61/rpds_py-0.26.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:529c8156d7506fba5740e05da8795688f87119cce330c244519cf706a4a3d618", size = 360475, upload_time = "2025-07-01T15:54:56.228Z" }, - { url = "https://files.pythonhosted.org/packages/82/9f/283e7e2979fc4ec2d8ecee506d5a3675fce5ed9b4b7cb387ea5d37c2f18d/rpds_py-0.26.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f53ec51f9d24e9638a40cabb95078ade8c99251945dad8d57bf4aabe86ecee35", size = 346692, upload_time = "2025-07-01T15:54:58.561Z" }, - { url = "https://files.pythonhosted.org/packages/e3/03/7e50423c04d78daf391da3cc4330bdb97042fc192a58b186f2d5deb7befd/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab504c4d654e4a29558eaa5bb8cea5fdc1703ea60a8099ffd9c758472cf913f", size = 379415, upload_time = "2025-07-01T15:54:59.751Z" }, - { url = "https://files.pythonhosted.org/packages/57/00/d11ee60d4d3b16808432417951c63df803afb0e0fc672b5e8d07e9edaaae/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fd0641abca296bc1a00183fe44f7fced8807ed49d501f188faa642d0e4975b83", size = 391783, upload_time = "2025-07-01T15:55:00.898Z" }, - { url = "https://files.pythonhosted.org/packages/08/b3/1069c394d9c0d6d23c5b522e1f6546b65793a22950f6e0210adcc6f97c3e/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:69b312fecc1d017b5327afa81d4da1480f51c68810963a7336d92203dbb3d4f1", size = 512844, upload_time = "2025-07-01T15:55:02.201Z" }, - { url = "https://files.pythonhosted.org/packages/08/3b/c4fbf0926800ed70b2c245ceca99c49f066456755f5d6eb8863c2c51e6d0/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c741107203954f6fc34d3066d213d0a0c40f7bb5aafd698fb39888af277c70d8", size = 402105, upload_time = "2025-07-01T15:55:03.698Z" }, - { url = "https://files.pythonhosted.org/packages/1c/b0/db69b52ca07413e568dae9dc674627a22297abb144c4d6022c6d78f1e5cc/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc3e55a7db08dc9a6ed5fb7103019d2c1a38a349ac41901f9f66d7f95750942f", size = 383440, upload_time = "2025-07-01T15:55:05.398Z" }, - { url = "https://files.pythonhosted.org/packages/4c/e1/c65255ad5b63903e56b3bb3ff9dcc3f4f5c3badde5d08c741ee03903e951/rpds_py-0.26.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9e851920caab2dbcae311fd28f4313c6953993893eb5c1bb367ec69d9a39e7ed", size = 412759, upload_time = "2025-07-01T15:55:08.316Z" }, - { url = "https://files.pythonhosted.org/packages/e4/22/bb731077872377a93c6e93b8a9487d0406c70208985831034ccdeed39c8e/rpds_py-0.26.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:dfbf280da5f876d0b00c81f26bedce274e72a678c28845453885a9b3c22ae632", size = 556032, upload_time = "2025-07-01T15:55:09.52Z" }, - { url = "https://files.pythonhosted.org/packages/e0/8b/393322ce7bac5c4530fb96fc79cc9ea2f83e968ff5f6e873f905c493e1c4/rpds_py-0.26.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:1cc81d14ddfa53d7f3906694d35d54d9d3f850ef8e4e99ee68bc0d1e5fed9a9c", size = 585416, upload_time = "2025-07-01T15:55:11.216Z" }, - { url = "https://files.pythonhosted.org/packages/49/ae/769dc372211835bf759319a7aae70525c6eb523e3371842c65b7ef41c9c6/rpds_py-0.26.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dca83c498b4650a91efcf7b88d669b170256bf8017a5db6f3e06c2bf031f57e0", size = 554049, upload_time = "2025-07-01T15:55:13.004Z" }, - { url = "https://files.pythonhosted.org/packages/6b/f9/4c43f9cc203d6ba44ce3146246cdc38619d92c7bd7bad4946a3491bd5b70/rpds_py-0.26.0-cp313-cp313t-win32.whl", hash = "sha256:4d11382bcaf12f80b51d790dee295c56a159633a8e81e6323b16e55d81ae37e9", size = 218428, upload_time = "2025-07-01T15:55:14.486Z" }, - { url = "https://files.pythonhosted.org/packages/7e/8b/9286b7e822036a4a977f2f1e851c7345c20528dbd56b687bb67ed68a8ede/rpds_py-0.26.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ff110acded3c22c033e637dd8896e411c7d3a11289b2edf041f86663dbc791e9", size = 231524, upload_time = "2025-07-01T15:55:15.745Z" }, - { url = "https://files.pythonhosted.org/packages/55/07/029b7c45db910c74e182de626dfdae0ad489a949d84a468465cd0ca36355/rpds_py-0.26.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:da619979df60a940cd434084355c514c25cf8eb4cf9a508510682f6c851a4f7a", size = 364292, upload_time = "2025-07-01T15:55:17.001Z" }, - { url = "https://files.pythonhosted.org/packages/13/d1/9b3d3f986216b4d1f584878dca15ce4797aaf5d372d738974ba737bf68d6/rpds_py-0.26.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ea89a2458a1a75f87caabefe789c87539ea4e43b40f18cff526052e35bbb4fdf", size = 350334, upload_time = "2025-07-01T15:55:18.922Z" }, - { url = "https://files.pythonhosted.org/packages/18/98/16d5e7bc9ec715fa9668731d0cf97f6b032724e61696e2db3d47aeb89214/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:feac1045b3327a45944e7dcbeb57530339f6b17baff154df51ef8b0da34c8c12", size = 384875, upload_time = "2025-07-01T15:55:20.399Z" }, - { url = "https://files.pythonhosted.org/packages/f9/13/aa5e2b1ec5ab0e86a5c464d53514c0467bec6ba2507027d35fc81818358e/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b818a592bd69bfe437ee8368603d4a2d928c34cffcdf77c2e761a759ffd17d20", size = 399993, upload_time = "2025-07-01T15:55:21.729Z" }, - { url = "https://files.pythonhosted.org/packages/17/03/8021810b0e97923abdbab6474c8b77c69bcb4b2c58330777df9ff69dc559/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a8b0dd8648709b62d9372fc00a57466f5fdeefed666afe3fea5a6c9539a0331", size = 516683, upload_time = "2025-07-01T15:55:22.918Z" }, - { url = "https://files.pythonhosted.org/packages/dc/b1/da8e61c87c2f3d836954239fdbbfb477bb7b54d74974d8f6fcb34342d166/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6d3498ad0df07d81112aa6ec6c95a7e7b1ae00929fb73e7ebee0f3faaeabad2f", size = 408825, upload_time = "2025-07-01T15:55:24.207Z" }, - { url = "https://files.pythonhosted.org/packages/38/bc/1fc173edaaa0e52c94b02a655db20697cb5fa954ad5a8e15a2c784c5cbdd/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24a4146ccb15be237fdef10f331c568e1b0e505f8c8c9ed5d67759dac58ac246", size = 387292, upload_time = "2025-07-01T15:55:25.554Z" }, - { url = "https://files.pythonhosted.org/packages/7c/eb/3a9bb4bd90867d21916f253caf4f0d0be7098671b6715ad1cead9fe7bab9/rpds_py-0.26.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a9a63785467b2d73635957d32a4f6e73d5e4df497a16a6392fa066b753e87387", size = 420435, upload_time = "2025-07-01T15:55:27.798Z" }, - { url = "https://files.pythonhosted.org/packages/cd/16/e066dcdb56f5632713445271a3f8d3d0b426d51ae9c0cca387799df58b02/rpds_py-0.26.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:de4ed93a8c91debfd5a047be327b7cc8b0cc6afe32a716bbbc4aedca9e2a83af", size = 562410, upload_time = "2025-07-01T15:55:29.057Z" }, - { url = "https://files.pythonhosted.org/packages/60/22/ddbdec7eb82a0dc2e455be44c97c71c232983e21349836ce9f272e8a3c29/rpds_py-0.26.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:caf51943715b12af827696ec395bfa68f090a4c1a1d2509eb4e2cb69abbbdb33", size = 590724, upload_time = "2025-07-01T15:55:30.719Z" }, - { url = "https://files.pythonhosted.org/packages/2c/b4/95744085e65b7187d83f2fcb0bef70716a1ea0a9e5d8f7f39a86e5d83424/rpds_py-0.26.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:4a59e5bc386de021f56337f757301b337d7ab58baa40174fb150accd480bc953", size = 558285, upload_time = "2025-07-01T15:55:31.981Z" }, - { url = "https://files.pythonhosted.org/packages/37/37/6309a75e464d1da2559446f9c811aa4d16343cebe3dbb73701e63f760caa/rpds_py-0.26.0-cp314-cp314-win32.whl", hash = "sha256:92c8db839367ef16a662478f0a2fe13e15f2227da3c1430a782ad0f6ee009ec9", size = 223459, upload_time = "2025-07-01T15:55:33.312Z" }, - { url = "https://files.pythonhosted.org/packages/d9/6f/8e9c11214c46098b1d1391b7e02b70bb689ab963db3b19540cba17315291/rpds_py-0.26.0-cp314-cp314-win_amd64.whl", hash = "sha256:b0afb8cdd034150d4d9f53926226ed27ad15b7f465e93d7468caaf5eafae0d37", size = 236083, upload_time = "2025-07-01T15:55:34.933Z" }, - { url = "https://files.pythonhosted.org/packages/47/af/9c4638994dd623d51c39892edd9d08e8be8220a4b7e874fa02c2d6e91955/rpds_py-0.26.0-cp314-cp314-win_arm64.whl", hash = "sha256:ca3f059f4ba485d90c8dc75cb5ca897e15325e4e609812ce57f896607c1c0867", size = 223291, upload_time = "2025-07-01T15:55:36.202Z" }, - { url = "https://files.pythonhosted.org/packages/4d/db/669a241144460474aab03e254326b32c42def83eb23458a10d163cb9b5ce/rpds_py-0.26.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:5afea17ab3a126006dc2f293b14ffc7ef3c85336cf451564a0515ed7648033da", size = 361445, upload_time = "2025-07-01T15:55:37.483Z" }, - { url = "https://files.pythonhosted.org/packages/3b/2d/133f61cc5807c6c2fd086a46df0eb8f63a23f5df8306ff9f6d0fd168fecc/rpds_py-0.26.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:69f0c0a3df7fd3a7eec50a00396104bb9a843ea6d45fcc31c2d5243446ffd7a7", size = 347206, upload_time = "2025-07-01T15:55:38.828Z" }, - { url = "https://files.pythonhosted.org/packages/05/bf/0e8fb4c05f70273469eecf82f6ccf37248558526a45321644826555db31b/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:801a71f70f9813e82d2513c9a96532551fce1e278ec0c64610992c49c04c2dad", size = 380330, upload_time = "2025-07-01T15:55:40.175Z" }, - { url = "https://files.pythonhosted.org/packages/d4/a8/060d24185d8b24d3923322f8d0ede16df4ade226a74e747b8c7c978e3dd3/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:df52098cde6d5e02fa75c1f6244f07971773adb4a26625edd5c18fee906fa84d", size = 392254, upload_time = "2025-07-01T15:55:42.015Z" }, - { url = "https://files.pythonhosted.org/packages/b9/7b/7c2e8a9ee3e6bc0bae26bf29f5219955ca2fbb761dca996a83f5d2f773fe/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9bc596b30f86dc6f0929499c9e574601679d0341a0108c25b9b358a042f51bca", size = 516094, upload_time = "2025-07-01T15:55:43.603Z" }, - { url = "https://files.pythonhosted.org/packages/75/d6/f61cafbed8ba1499b9af9f1777a2a199cd888f74a96133d8833ce5eaa9c5/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9dfbe56b299cf5875b68eb6f0ebaadc9cac520a1989cac0db0765abfb3709c19", size = 402889, upload_time = "2025-07-01T15:55:45.275Z" }, - { url = "https://files.pythonhosted.org/packages/92/19/c8ac0a8a8df2dd30cdec27f69298a5c13e9029500d6d76718130f5e5be10/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac64f4b2bdb4ea622175c9ab7cf09444e412e22c0e02e906978b3b488af5fde8", size = 384301, upload_time = "2025-07-01T15:55:47.098Z" }, - { url = "https://files.pythonhosted.org/packages/41/e1/6b1859898bc292a9ce5776016c7312b672da00e25cec74d7beced1027286/rpds_py-0.26.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:181ef9b6bbf9845a264f9aa45c31836e9f3c1f13be565d0d010e964c661d1e2b", size = 412891, upload_time = "2025-07-01T15:55:48.412Z" }, - { url = "https://files.pythonhosted.org/packages/ef/b9/ceb39af29913c07966a61367b3c08b4f71fad841e32c6b59a129d5974698/rpds_py-0.26.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:49028aa684c144ea502a8e847d23aed5e4c2ef7cadfa7d5eaafcb40864844b7a", size = 557044, upload_time = "2025-07-01T15:55:49.816Z" }, - { url = "https://files.pythonhosted.org/packages/2f/27/35637b98380731a521f8ec4f3fd94e477964f04f6b2f8f7af8a2d889a4af/rpds_py-0.26.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:e5d524d68a474a9688336045bbf76cb0def88549c1b2ad9dbfec1fb7cfbe9170", size = 585774, upload_time = "2025-07-01T15:55:51.192Z" }, - { url = "https://files.pythonhosted.org/packages/52/d9/3f0f105420fecd18551b678c9a6ce60bd23986098b252a56d35781b3e7e9/rpds_py-0.26.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:c1851f429b822831bd2edcbe0cfd12ee9ea77868f8d3daf267b189371671c80e", size = 554886, upload_time = "2025-07-01T15:55:52.541Z" }, - { url = "https://files.pythonhosted.org/packages/6b/c5/347c056a90dc8dd9bc240a08c527315008e1b5042e7a4cf4ac027be9d38a/rpds_py-0.26.0-cp314-cp314t-win32.whl", hash = "sha256:7bdb17009696214c3b66bb3590c6d62e14ac5935e53e929bcdbc5a495987a84f", size = 219027, upload_time = "2025-07-01T15:55:53.874Z" }, - { url = "https://files.pythonhosted.org/packages/75/04/5302cea1aa26d886d34cadbf2dc77d90d7737e576c0065f357b96dc7a1a6/rpds_py-0.26.0-cp314-cp314t-win_amd64.whl", hash = "sha256:f14440b9573a6f76b4ee4770c13f0b5921f71dde3b6fcb8dabbefd13b7fe05d7", size = 232821, upload_time = "2025-07-01T15:55:55.167Z" }, +version = "0.27.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e9/dd/2c0cbe774744272b0ae725f44032c77bdcab6e8bcf544bffa3b6e70c8dba/rpds_py-0.27.1.tar.gz", hash = "sha256:26a1c73171d10b7acccbded82bf6a586ab8203601e565badc74bbbf8bc5a10f8", size = 27479 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bd/fe/38de28dee5df58b8198c743fe2bea0c785c6d40941b9950bac4cdb71a014/rpds_py-0.27.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:ae2775c1973e3c30316892737b91f9283f9908e3cc7625b9331271eaaed7dc90", size = 361887 }, + { url = "https://files.pythonhosted.org/packages/7c/9a/4b6c7eedc7dd90986bf0fab6ea2a091ec11c01b15f8ba0a14d3f80450468/rpds_py-0.27.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2643400120f55c8a96f7c9d858f7be0c88d383cd4653ae2cf0d0c88f668073e5", size = 345795 }, + { url = "https://files.pythonhosted.org/packages/6f/0e/e650e1b81922847a09cca820237b0edee69416a01268b7754d506ade11ad/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:16323f674c089b0360674a4abd28d5042947d54ba620f72514d69be4ff64845e", size = 385121 }, + { url = "https://files.pythonhosted.org/packages/1b/ea/b306067a712988e2bff00dcc7c8f31d26c29b6d5931b461aa4b60a013e33/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9a1f4814b65eacac94a00fc9a526e3fdafd78e439469644032032d0d63de4881", size = 398976 }, + { url = "https://files.pythonhosted.org/packages/2c/0a/26dc43c8840cb8fe239fe12dbc8d8de40f2365e838f3d395835dde72f0e5/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ba32c16b064267b22f1850a34051121d423b6f7338a12b9459550eb2096e7ec", size = 525953 }, + { url = "https://files.pythonhosted.org/packages/22/14/c85e8127b573aaf3a0cbd7fbb8c9c99e735a4a02180c84da2a463b766e9e/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5c20f33fd10485b80f65e800bbe5f6785af510b9f4056c5a3c612ebc83ba6cb", size = 407915 }, + { url = "https://files.pythonhosted.org/packages/ed/7b/8f4fee9ba1fb5ec856eb22d725a4efa3deb47f769597c809e03578b0f9d9/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:466bfe65bd932da36ff279ddd92de56b042f2266d752719beb97b08526268ec5", size = 386883 }, + { url = "https://files.pythonhosted.org/packages/86/47/28fa6d60f8b74fcdceba81b272f8d9836ac0340570f68f5df6b41838547b/rpds_py-0.27.1-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:41e532bbdcb57c92ba3be62c42e9f096431b4cf478da9bc3bc6ce5c38ab7ba7a", size = 405699 }, + { url = "https://files.pythonhosted.org/packages/d0/fd/c5987b5e054548df56953a21fe2ebed51fc1ec7c8f24fd41c067b68c4a0a/rpds_py-0.27.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f149826d742b406579466283769a8ea448eed82a789af0ed17b0cd5770433444", size = 423713 }, + { url = "https://files.pythonhosted.org/packages/ac/ba/3c4978b54a73ed19a7d74531be37a8bcc542d917c770e14d372b8daea186/rpds_py-0.27.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:80c60cfb5310677bd67cb1e85a1e8eb52e12529545441b43e6f14d90b878775a", size = 562324 }, + { url = "https://files.pythonhosted.org/packages/b5/6c/6943a91768fec16db09a42b08644b960cff540c66aab89b74be6d4a144ba/rpds_py-0.27.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:7ee6521b9baf06085f62ba9c7a3e5becffbc32480d2f1b351559c001c38ce4c1", size = 593646 }, + { url = "https://files.pythonhosted.org/packages/11/73/9d7a8f4be5f4396f011a6bb7a19fe26303a0dac9064462f5651ced2f572f/rpds_py-0.27.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a512c8263249a9d68cac08b05dd59d2b3f2061d99b322813cbcc14c3c7421998", size = 558137 }, + { url = "https://files.pythonhosted.org/packages/6e/96/6772cbfa0e2485bcceef8071de7821f81aeac8bb45fbfd5542a3e8108165/rpds_py-0.27.1-cp312-cp312-win32.whl", hash = "sha256:819064fa048ba01b6dadc5116f3ac48610435ac9a0058bbde98e569f9e785c39", size = 221343 }, + { url = "https://files.pythonhosted.org/packages/67/b6/c82f0faa9af1c6a64669f73a17ee0eeef25aff30bb9a1c318509efe45d84/rpds_py-0.27.1-cp312-cp312-win_amd64.whl", hash = "sha256:d9199717881f13c32c4046a15f024971a3b78ad4ea029e8da6b86e5aa9cf4594", size = 232497 }, + { url = "https://files.pythonhosted.org/packages/e1/96/2817b44bd2ed11aebacc9251da03689d56109b9aba5e311297b6902136e2/rpds_py-0.27.1-cp312-cp312-win_arm64.whl", hash = "sha256:33aa65b97826a0e885ef6e278fbd934e98cdcfed80b63946025f01e2f5b29502", size = 222790 }, + { url = "https://files.pythonhosted.org/packages/cc/77/610aeee8d41e39080c7e14afa5387138e3c9fa9756ab893d09d99e7d8e98/rpds_py-0.27.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:e4b9fcfbc021633863a37e92571d6f91851fa656f0180246e84cbd8b3f6b329b", size = 361741 }, + { url = "https://files.pythonhosted.org/packages/3a/fc/c43765f201c6a1c60be2043cbdb664013def52460a4c7adace89d6682bf4/rpds_py-0.27.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1441811a96eadca93c517d08df75de45e5ffe68aa3089924f963c782c4b898cf", size = 345574 }, + { url = "https://files.pythonhosted.org/packages/20/42/ee2b2ca114294cd9847d0ef9c26d2b0851b2e7e00bf14cc4c0b581df0fc3/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55266dafa22e672f5a4f65019015f90336ed31c6383bd53f5e7826d21a0e0b83", size = 385051 }, + { url = "https://files.pythonhosted.org/packages/fd/e8/1e430fe311e4799e02e2d1af7c765f024e95e17d651612425b226705f910/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d78827d7ac08627ea2c8e02c9e5b41180ea5ea1f747e9db0915e3adf36b62dcf", size = 398395 }, + { url = "https://files.pythonhosted.org/packages/82/95/9dc227d441ff2670651c27a739acb2535ccaf8b351a88d78c088965e5996/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae92443798a40a92dc5f0b01d8a7c93adde0c4dc965310a29ae7c64d72b9fad2", size = 524334 }, + { url = "https://files.pythonhosted.org/packages/87/01/a670c232f401d9ad461d9a332aa4080cd3cb1d1df18213dbd0d2a6a7ab51/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c46c9dd2403b66a2a3b9720ec4b74d4ab49d4fabf9f03dfdce2d42af913fe8d0", size = 407691 }, + { url = "https://files.pythonhosted.org/packages/03/36/0a14aebbaa26fe7fab4780c76f2239e76cc95a0090bdb25e31d95c492fcd/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2efe4eb1d01b7f5f1939f4ef30ecea6c6b3521eec451fb93191bf84b2a522418", size = 386868 }, + { url = "https://files.pythonhosted.org/packages/3b/03/8c897fb8b5347ff6c1cc31239b9611c5bf79d78c984430887a353e1409a1/rpds_py-0.27.1-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:15d3b4d83582d10c601f481eca29c3f138d44c92187d197aff663a269197c02d", size = 405469 }, + { url = "https://files.pythonhosted.org/packages/da/07/88c60edc2df74850d496d78a1fdcdc7b54360a7f610a4d50008309d41b94/rpds_py-0.27.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4ed2e16abbc982a169d30d1a420274a709949e2cbdef119fe2ec9d870b42f274", size = 422125 }, + { url = "https://files.pythonhosted.org/packages/6b/86/5f4c707603e41b05f191a749984f390dabcbc467cf833769b47bf14ba04f/rpds_py-0.27.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a75f305c9b013289121ec0f1181931975df78738cdf650093e6b86d74aa7d8dd", size = 562341 }, + { url = "https://files.pythonhosted.org/packages/b2/92/3c0cb2492094e3cd9baf9e49bbb7befeceb584ea0c1a8b5939dca4da12e5/rpds_py-0.27.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:67ce7620704745881a3d4b0ada80ab4d99df390838839921f99e63c474f82cf2", size = 592511 }, + { url = "https://files.pythonhosted.org/packages/10/bb/82e64fbb0047c46a168faa28d0d45a7851cd0582f850b966811d30f67ad8/rpds_py-0.27.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9d992ac10eb86d9b6f369647b6a3f412fc0075cfd5d799530e84d335e440a002", size = 557736 }, + { url = "https://files.pythonhosted.org/packages/00/95/3c863973d409210da7fb41958172c6b7dbe7fc34e04d3cc1f10bb85e979f/rpds_py-0.27.1-cp313-cp313-win32.whl", hash = "sha256:4f75e4bd8ab8db624e02c8e2fc4063021b58becdbe6df793a8111d9343aec1e3", size = 221462 }, + { url = "https://files.pythonhosted.org/packages/ce/2c/5867b14a81dc217b56d95a9f2a40fdbc56a1ab0181b80132beeecbd4b2d6/rpds_py-0.27.1-cp313-cp313-win_amd64.whl", hash = "sha256:f9025faafc62ed0b75a53e541895ca272815bec18abe2249ff6501c8f2e12b83", size = 232034 }, + { url = "https://files.pythonhosted.org/packages/c7/78/3958f3f018c01923823f1e47f1cc338e398814b92d83cd278364446fac66/rpds_py-0.27.1-cp313-cp313-win_arm64.whl", hash = "sha256:ed10dc32829e7d222b7d3b93136d25a406ba9788f6a7ebf6809092da1f4d279d", size = 222392 }, + { url = "https://files.pythonhosted.org/packages/01/76/1cdf1f91aed5c3a7bf2eba1f1c4e4d6f57832d73003919a20118870ea659/rpds_py-0.27.1-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:92022bbbad0d4426e616815b16bc4127f83c9a74940e1ccf3cfe0b387aba0228", size = 358355 }, + { url = "https://files.pythonhosted.org/packages/c3/6f/bf142541229374287604caf3bb2a4ae17f0a580798fd72d3b009b532db4e/rpds_py-0.27.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:47162fdab9407ec3f160805ac3e154df042e577dd53341745fc7fb3f625e6d92", size = 342138 }, + { url = "https://files.pythonhosted.org/packages/1a/77/355b1c041d6be40886c44ff5e798b4e2769e497b790f0f7fd1e78d17e9a8/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb89bec23fddc489e5d78b550a7b773557c9ab58b7946154a10a6f7a214a48b2", size = 380247 }, + { url = "https://files.pythonhosted.org/packages/d6/a4/d9cef5c3946ea271ce2243c51481971cd6e34f21925af2783dd17b26e815/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e48af21883ded2b3e9eb48cb7880ad8598b31ab752ff3be6457001d78f416723", size = 390699 }, + { url = "https://files.pythonhosted.org/packages/3a/06/005106a7b8c6c1a7e91b73169e49870f4af5256119d34a361ae5240a0c1d/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6f5b7bd8e219ed50299e58551a410b64daafb5017d54bbe822e003856f06a802", size = 521852 }, + { url = "https://files.pythonhosted.org/packages/e5/3e/50fb1dac0948e17a02eb05c24510a8fe12d5ce8561c6b7b7d1339ab7ab9c/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08f1e20bccf73b08d12d804d6e1c22ca5530e71659e6673bce31a6bb71c1e73f", size = 402582 }, + { url = "https://files.pythonhosted.org/packages/cb/b0/f4e224090dc5b0ec15f31a02d746ab24101dd430847c4d99123798661bfc/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0dc5dceeaefcc96dc192e3a80bbe1d6c410c469e97bdd47494a7d930987f18b2", size = 384126 }, + { url = "https://files.pythonhosted.org/packages/54/77/ac339d5f82b6afff1df8f0fe0d2145cc827992cb5f8eeb90fc9f31ef7a63/rpds_py-0.27.1-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:d76f9cc8665acdc0c9177043746775aa7babbf479b5520b78ae4002d889f5c21", size = 399486 }, + { url = "https://files.pythonhosted.org/packages/d6/29/3e1c255eee6ac358c056a57d6d6869baa00a62fa32eea5ee0632039c50a3/rpds_py-0.27.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:134fae0e36022edad8290a6661edf40c023562964efea0cc0ec7f5d392d2aaef", size = 414832 }, + { url = "https://files.pythonhosted.org/packages/3f/db/6d498b844342deb3fa1d030598db93937a9964fcf5cb4da4feb5f17be34b/rpds_py-0.27.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:eb11a4f1b2b63337cfd3b4d110af778a59aae51c81d195768e353d8b52f88081", size = 557249 }, + { url = "https://files.pythonhosted.org/packages/60/f3/690dd38e2310b6f68858a331399b4d6dbb9132c3e8ef8b4333b96caf403d/rpds_py-0.27.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:13e608ac9f50a0ed4faec0e90ece76ae33b34c0e8656e3dceb9a7db994c692cd", size = 587356 }, + { url = "https://files.pythonhosted.org/packages/86/e3/84507781cccd0145f35b1dc32c72675200c5ce8d5b30f813e49424ef68fc/rpds_py-0.27.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dd2135527aa40f061350c3f8f89da2644de26cd73e4de458e79606384f4f68e7", size = 555300 }, + { url = "https://files.pythonhosted.org/packages/e5/ee/375469849e6b429b3516206b4580a79e9ef3eb12920ddbd4492b56eaacbe/rpds_py-0.27.1-cp313-cp313t-win32.whl", hash = "sha256:3020724ade63fe320a972e2ffd93b5623227e684315adce194941167fee02688", size = 216714 }, + { url = "https://files.pythonhosted.org/packages/21/87/3fc94e47c9bd0742660e84706c311a860dcae4374cf4a03c477e23ce605a/rpds_py-0.27.1-cp313-cp313t-win_amd64.whl", hash = "sha256:8ee50c3e41739886606388ba3ab3ee2aae9f35fb23f833091833255a31740797", size = 228943 }, + { url = "https://files.pythonhosted.org/packages/70/36/b6e6066520a07cf029d385de869729a895917b411e777ab1cde878100a1d/rpds_py-0.27.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:acb9aafccaae278f449d9c713b64a9e68662e7799dbd5859e2c6b3c67b56d334", size = 362472 }, + { url = "https://files.pythonhosted.org/packages/af/07/b4646032e0dcec0df9c73a3bd52f63bc6c5f9cda992f06bd0e73fe3fbebd/rpds_py-0.27.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:b7fb801aa7f845ddf601c49630deeeccde7ce10065561d92729bfe81bd21fb33", size = 345676 }, + { url = "https://files.pythonhosted.org/packages/b0/16/2f1003ee5d0af4bcb13c0cf894957984c32a6751ed7206db2aee7379a55e/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe0dd05afb46597b9a2e11c351e5e4283c741237e7f617ffb3252780cca9336a", size = 385313 }, + { url = "https://files.pythonhosted.org/packages/05/cd/7eb6dd7b232e7f2654d03fa07f1414d7dfc980e82ba71e40a7c46fd95484/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b6dfb0e058adb12d8b1d1b25f686e94ffa65d9995a5157afe99743bf7369d62b", size = 399080 }, + { url = "https://files.pythonhosted.org/packages/20/51/5829afd5000ec1cb60f304711f02572d619040aa3ec033d8226817d1e571/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ed090ccd235f6fa8bb5861684567f0a83e04f52dfc2e5c05f2e4b1309fcf85e7", size = 523868 }, + { url = "https://files.pythonhosted.org/packages/05/2c/30eebca20d5db95720ab4d2faec1b5e4c1025c473f703738c371241476a2/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bf876e79763eecf3e7356f157540d6a093cef395b65514f17a356f62af6cc136", size = 408750 }, + { url = "https://files.pythonhosted.org/packages/90/1a/cdb5083f043597c4d4276eae4e4c70c55ab5accec078da8611f24575a367/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:12ed005216a51b1d6e2b02a7bd31885fe317e45897de81d86dcce7d74618ffff", size = 387688 }, + { url = "https://files.pythonhosted.org/packages/7c/92/cf786a15320e173f945d205ab31585cc43969743bb1a48b6888f7a2b0a2d/rpds_py-0.27.1-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:ee4308f409a40e50593c7e3bb8cbe0b4d4c66d1674a316324f0c2f5383b486f9", size = 407225 }, + { url = "https://files.pythonhosted.org/packages/33/5c/85ee16df5b65063ef26017bef33096557a4c83fbe56218ac7cd8c235f16d/rpds_py-0.27.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0b08d152555acf1f455154d498ca855618c1378ec810646fcd7c76416ac6dc60", size = 423361 }, + { url = "https://files.pythonhosted.org/packages/4b/8e/1c2741307fcabd1a334ecf008e92c4f47bb6f848712cf15c923becfe82bb/rpds_py-0.27.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:dce51c828941973a5684d458214d3a36fcd28da3e1875d659388f4f9f12cc33e", size = 562493 }, + { url = "https://files.pythonhosted.org/packages/04/03/5159321baae9b2222442a70c1f988cbbd66b9be0675dd3936461269be360/rpds_py-0.27.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:c1476d6f29eb81aa4151c9a31219b03f1f798dc43d8af1250a870735516a1212", size = 592623 }, + { url = "https://files.pythonhosted.org/packages/ff/39/c09fd1ad28b85bc1d4554a8710233c9f4cefd03d7717a1b8fbfd171d1167/rpds_py-0.27.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:3ce0cac322b0d69b63c9cdb895ee1b65805ec9ffad37639f291dd79467bee675", size = 558800 }, + { url = "https://files.pythonhosted.org/packages/c5/d6/99228e6bbcf4baa764b18258f519a9035131d91b538d4e0e294313462a98/rpds_py-0.27.1-cp314-cp314-win32.whl", hash = "sha256:dfbfac137d2a3d0725758cd141f878bf4329ba25e34979797c89474a89a8a3a3", size = 221943 }, + { url = "https://files.pythonhosted.org/packages/be/07/c802bc6b8e95be83b79bdf23d1aa61d68324cb1006e245d6c58e959e314d/rpds_py-0.27.1-cp314-cp314-win_amd64.whl", hash = "sha256:a6e57b0abfe7cc513450fcf529eb486b6e4d3f8aee83e92eb5f1ef848218d456", size = 233739 }, + { url = "https://files.pythonhosted.org/packages/c8/89/3e1b1c16d4c2d547c5717377a8df99aee8099ff050f87c45cb4d5fa70891/rpds_py-0.27.1-cp314-cp314-win_arm64.whl", hash = "sha256:faf8d146f3d476abfee026c4ae3bdd9ca14236ae4e4c310cbd1cf75ba33d24a3", size = 223120 }, + { url = "https://files.pythonhosted.org/packages/62/7e/dc7931dc2fa4a6e46b2a4fa744a9fe5c548efd70e0ba74f40b39fa4a8c10/rpds_py-0.27.1-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:ba81d2b56b6d4911ce735aad0a1d4495e808b8ee4dc58715998741a26874e7c2", size = 358944 }, + { url = "https://files.pythonhosted.org/packages/e6/22/4af76ac4e9f336bfb1a5f240d18a33c6b2fcaadb7472ac7680576512b49a/rpds_py-0.27.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:84f7d509870098de0e864cad0102711c1e24e9b1a50ee713b65928adb22269e4", size = 342283 }, + { url = "https://files.pythonhosted.org/packages/1c/15/2a7c619b3c2272ea9feb9ade67a45c40b3eeb500d503ad4c28c395dc51b4/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9e960fc78fecd1100539f14132425e1d5fe44ecb9239f8f27f079962021523e", size = 380320 }, + { url = "https://files.pythonhosted.org/packages/a2/7d/4c6d243ba4a3057e994bb5bedd01b5c963c12fe38dde707a52acdb3849e7/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:62f85b665cedab1a503747617393573995dac4600ff51869d69ad2f39eb5e817", size = 391760 }, + { url = "https://files.pythonhosted.org/packages/b4/71/b19401a909b83bcd67f90221330bc1ef11bc486fe4e04c24388d28a618ae/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fed467af29776f6556250c9ed85ea5a4dd121ab56a5f8b206e3e7a4c551e48ec", size = 522476 }, + { url = "https://files.pythonhosted.org/packages/e4/44/1a3b9715c0455d2e2f0f6df5ee6d6f5afdc423d0773a8a682ed2b43c566c/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2729615f9d430af0ae6b36cf042cb55c0936408d543fb691e1a9e36648fd35a", size = 403418 }, + { url = "https://files.pythonhosted.org/packages/1c/4b/fb6c4f14984eb56673bc868a66536f53417ddb13ed44b391998100a06a96/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b207d881a9aef7ba753d69c123a35d96ca7cb808056998f6b9e8747321f03b8", size = 384771 }, + { url = "https://files.pythonhosted.org/packages/c0/56/d5265d2d28b7420d7b4d4d85cad8ef891760f5135102e60d5c970b976e41/rpds_py-0.27.1-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:639fd5efec029f99b79ae47e5d7e00ad8a773da899b6309f6786ecaf22948c48", size = 400022 }, + { url = "https://files.pythonhosted.org/packages/8f/e9/9f5fc70164a569bdd6ed9046486c3568d6926e3a49bdefeeccfb18655875/rpds_py-0.27.1-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fecc80cb2a90e28af8a9b366edacf33d7a91cbfe4c2c4544ea1246e949cfebeb", size = 416787 }, + { url = "https://files.pythonhosted.org/packages/d4/64/56dd03430ba491db943a81dcdef115a985aac5f44f565cd39a00c766d45c/rpds_py-0.27.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:42a89282d711711d0a62d6f57d81aa43a1368686c45bc1c46b7f079d55692734", size = 557538 }, + { url = "https://files.pythonhosted.org/packages/3f/36/92cc885a3129993b1d963a2a42ecf64e6a8e129d2c7cc980dbeba84e55fb/rpds_py-0.27.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:cf9931f14223de59551ab9d38ed18d92f14f055a5f78c1d8ad6493f735021bbb", size = 588512 }, + { url = "https://files.pythonhosted.org/packages/dd/10/6b283707780a81919f71625351182b4f98932ac89a09023cb61865136244/rpds_py-0.27.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f39f58a27cc6e59f432b568ed8429c7e1641324fbe38131de852cd77b2d534b0", size = 555813 }, + { url = "https://files.pythonhosted.org/packages/04/2e/30b5ea18c01379da6272a92825dd7e53dc9d15c88a19e97932d35d430ef7/rpds_py-0.27.1-cp314-cp314t-win32.whl", hash = "sha256:d5fa0ee122dc09e23607a28e6d7b150da16c662e66409bbe85230e4c85bb528a", size = 217385 }, + { url = "https://files.pythonhosted.org/packages/32/7d/97119da51cb1dd3f2f3c0805f155a3aa4a95fa44fe7d78ae15e69edf4f34/rpds_py-0.27.1-cp314-cp314t-win_amd64.whl", hash = "sha256:6567d2bb951e21232c2f660c24cf3470bb96de56cdcb3f071a83feeaff8a2772", size = 230097 }, ] [[package]] name = "ruamel-yaml" -version = "0.18.14" +version = "0.18.15" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "ruamel-yaml-clib", marker = "python_full_version < '3.14' and platform_python_implementation == 'CPython'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/39/87/6da0df742a4684263261c253f00edd5829e6aca970fff69e75028cccc547/ruamel.yaml-0.18.14.tar.gz", hash = "sha256:7227b76aaec364df15936730efbf7d72b30c0b79b1d578bbb8e3dcb2d81f52b7", size = 145511, upload_time = "2025-06-09T08:51:09.828Z" } +sdist = { url = "https://files.pythonhosted.org/packages/3e/db/f3950f5e5031b618aae9f423a39bf81a55c148aecd15a34527898e752cf4/ruamel.yaml-0.18.15.tar.gz", hash = "sha256:dbfca74b018c4c3fba0b9cc9ee33e53c371194a9000e694995e620490fd40700", size = 146865 } wheels = [ - { url = "https://files.pythonhosted.org/packages/af/6d/6fe4805235e193aad4aaf979160dd1f3c487c57d48b810c816e6e842171b/ruamel.yaml-0.18.14-py3-none-any.whl", hash = "sha256:710ff198bb53da66718c7db27eec4fbcc9aa6ca7204e4c1df2f282b6fe5eb6b2", size = 118570, upload_time = "2025-06-09T08:51:06.348Z" }, + { url = "https://files.pythonhosted.org/packages/d1/e5/f2a0621f1781b76a38194acae72f01e37b1941470407345b6e8653ad7640/ruamel.yaml-0.18.15-py3-none-any.whl", hash = "sha256:148f6488d698b7a5eded5ea793a025308b25eca97208181b6a026037f391f701", size = 119702 }, ] [[package]] name = "ruamel-yaml-clib" version = "0.2.12" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/20/84/80203abff8ea4993a87d823a5f632e4d92831ef75d404c9fc78d0176d2b5/ruamel.yaml.clib-0.2.12.tar.gz", hash = "sha256:6c8fbb13ec503f99a91901ab46e0b07ae7941cd527393187039aec586fdfd36f", size = 225315, upload_time = "2024-10-20T10:10:56.22Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/48/41/e7a405afbdc26af961678474a55373e1b323605a4f5e2ddd4a80ea80f628/ruamel.yaml.clib-0.2.12-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:20b0f8dc160ba83b6dcc0e256846e1a02d044e13f7ea74a3d1d56ede4e48c632", size = 133433, upload_time = "2024-10-20T10:12:55.657Z" }, - { url = "https://files.pythonhosted.org/packages/ec/b0/b850385604334c2ce90e3ee1013bd911aedf058a934905863a6ea95e9eb4/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:943f32bc9dedb3abff9879edc134901df92cfce2c3d5c9348f172f62eb2d771d", size = 647362, upload_time = "2024-10-20T10:12:57.155Z" }, - { url = "https://files.pythonhosted.org/packages/44/d0/3f68a86e006448fb6c005aee66565b9eb89014a70c491d70c08de597f8e4/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95c3829bb364fdb8e0332c9931ecf57d9be3519241323c5274bd82f709cebc0c", size = 754118, upload_time = "2024-10-20T10:12:58.501Z" }, - { url = "https://files.pythonhosted.org/packages/52/a9/d39f3c5ada0a3bb2870d7db41901125dbe2434fa4f12ca8c5b83a42d7c53/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:749c16fcc4a2b09f28843cda5a193e0283e47454b63ec4b81eaa2242f50e4ccd", size = 706497, upload_time = "2024-10-20T10:13:00.211Z" }, - { url = "https://files.pythonhosted.org/packages/b0/fa/097e38135dadd9ac25aecf2a54be17ddf6e4c23e43d538492a90ab3d71c6/ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bf165fef1f223beae7333275156ab2022cffe255dcc51c27f066b4370da81e31", size = 698042, upload_time = "2024-10-21T11:26:46.038Z" }, - { url = "https://files.pythonhosted.org/packages/ec/d5/a659ca6f503b9379b930f13bc6b130c9f176469b73b9834296822a83a132/ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:32621c177bbf782ca5a18ba4d7af0f1082a3f6e517ac2a18b3974d4edf349680", size = 745831, upload_time = "2024-10-21T11:26:47.487Z" }, - { url = "https://files.pythonhosted.org/packages/db/5d/36619b61ffa2429eeaefaab4f3374666adf36ad8ac6330d855848d7d36fd/ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b82a7c94a498853aa0b272fd5bc67f29008da798d4f93a2f9f289feb8426a58d", size = 715692, upload_time = "2024-12-11T19:58:17.252Z" }, - { url = "https://files.pythonhosted.org/packages/b1/82/85cb92f15a4231c89b95dfe08b09eb6adca929ef7df7e17ab59902b6f589/ruamel.yaml.clib-0.2.12-cp312-cp312-win32.whl", hash = "sha256:e8c4ebfcfd57177b572e2040777b8abc537cdef58a2120e830124946aa9b42c5", size = 98777, upload_time = "2024-10-20T10:13:01.395Z" }, - { url = "https://files.pythonhosted.org/packages/d7/8f/c3654f6f1ddb75daf3922c3d8fc6005b1ab56671ad56ffb874d908bfa668/ruamel.yaml.clib-0.2.12-cp312-cp312-win_amd64.whl", hash = "sha256:0467c5965282c62203273b838ae77c0d29d7638c8a4e3a1c8bdd3602c10904e4", size = 115523, upload_time = "2024-10-20T10:13:02.768Z" }, - { url = "https://files.pythonhosted.org/packages/29/00/4864119668d71a5fa45678f380b5923ff410701565821925c69780356ffa/ruamel.yaml.clib-0.2.12-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:4c8c5d82f50bb53986a5e02d1b3092b03622c02c2eb78e29bec33fd9593bae1a", size = 132011, upload_time = "2024-10-20T10:13:04.377Z" }, - { url = "https://files.pythonhosted.org/packages/7f/5e/212f473a93ae78c669ffa0cb051e3fee1139cb2d385d2ae1653d64281507/ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux2014_aarch64.whl", hash = "sha256:e7e3736715fbf53e9be2a79eb4db68e4ed857017344d697e8b9749444ae57475", size = 642488, upload_time = "2024-10-20T10:13:05.906Z" }, - { url = "https://files.pythonhosted.org/packages/1f/8f/ecfbe2123ade605c49ef769788f79c38ddb1c8fa81e01f4dbf5cf1a44b16/ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b7e75b4965e1d4690e93021adfcecccbca7d61c7bddd8e22406ef2ff20d74ef", size = 745066, upload_time = "2024-10-20T10:13:07.26Z" }, - { url = "https://files.pythonhosted.org/packages/e2/a9/28f60726d29dfc01b8decdb385de4ced2ced9faeb37a847bd5cf26836815/ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96777d473c05ee3e5e3c3e999f5d23c6f4ec5b0c38c098b3a5229085f74236c6", size = 701785, upload_time = "2024-10-20T10:13:08.504Z" }, - { url = "https://files.pythonhosted.org/packages/84/7e/8e7ec45920daa7f76046578e4f677a3215fe8f18ee30a9cb7627a19d9b4c/ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:3bc2a80e6420ca8b7d3590791e2dfc709c88ab9152c00eeb511c9875ce5778bf", size = 693017, upload_time = "2024-10-21T11:26:48.866Z" }, - { url = "https://files.pythonhosted.org/packages/c5/b3/d650eaade4ca225f02a648321e1ab835b9d361c60d51150bac49063b83fa/ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:e188d2699864c11c36cdfdada94d781fd5d6b0071cd9c427bceb08ad3d7c70e1", size = 741270, upload_time = "2024-10-21T11:26:50.213Z" }, - { url = "https://files.pythonhosted.org/packages/87/b8/01c29b924dcbbed75cc45b30c30d565d763b9c4d540545a0eeecffb8f09c/ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4f6f3eac23941b32afccc23081e1f50612bdbe4e982012ef4f5797986828cd01", size = 709059, upload_time = "2024-12-11T19:58:18.846Z" }, - { url = "https://files.pythonhosted.org/packages/30/8c/ed73f047a73638257aa9377ad356bea4d96125b305c34a28766f4445cc0f/ruamel.yaml.clib-0.2.12-cp313-cp313-win32.whl", hash = "sha256:6442cb36270b3afb1b4951f060eccca1ce49f3d087ca1ca4563a6eb479cb3de6", size = 98583, upload_time = "2024-10-20T10:13:09.658Z" }, - { url = "https://files.pythonhosted.org/packages/b0/85/e8e751d8791564dd333d5d9a4eab0a7a115f7e349595417fd50ecae3395c/ruamel.yaml.clib-0.2.12-cp313-cp313-win_amd64.whl", hash = "sha256:e5b8daf27af0b90da7bb903a876477a9e6d7270be6146906b276605997c7e9a3", size = 115190, upload_time = "2024-10-20T10:13:10.66Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/20/84/80203abff8ea4993a87d823a5f632e4d92831ef75d404c9fc78d0176d2b5/ruamel.yaml.clib-0.2.12.tar.gz", hash = "sha256:6c8fbb13ec503f99a91901ab46e0b07ae7941cd527393187039aec586fdfd36f", size = 225315 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/48/41/e7a405afbdc26af961678474a55373e1b323605a4f5e2ddd4a80ea80f628/ruamel.yaml.clib-0.2.12-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:20b0f8dc160ba83b6dcc0e256846e1a02d044e13f7ea74a3d1d56ede4e48c632", size = 133433 }, + { url = "https://files.pythonhosted.org/packages/ec/b0/b850385604334c2ce90e3ee1013bd911aedf058a934905863a6ea95e9eb4/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:943f32bc9dedb3abff9879edc134901df92cfce2c3d5c9348f172f62eb2d771d", size = 647362 }, + { url = "https://files.pythonhosted.org/packages/44/d0/3f68a86e006448fb6c005aee66565b9eb89014a70c491d70c08de597f8e4/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95c3829bb364fdb8e0332c9931ecf57d9be3519241323c5274bd82f709cebc0c", size = 754118 }, + { url = "https://files.pythonhosted.org/packages/52/a9/d39f3c5ada0a3bb2870d7db41901125dbe2434fa4f12ca8c5b83a42d7c53/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:749c16fcc4a2b09f28843cda5a193e0283e47454b63ec4b81eaa2242f50e4ccd", size = 706497 }, + { url = "https://files.pythonhosted.org/packages/b0/fa/097e38135dadd9ac25aecf2a54be17ddf6e4c23e43d538492a90ab3d71c6/ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bf165fef1f223beae7333275156ab2022cffe255dcc51c27f066b4370da81e31", size = 698042 }, + { url = "https://files.pythonhosted.org/packages/ec/d5/a659ca6f503b9379b930f13bc6b130c9f176469b73b9834296822a83a132/ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:32621c177bbf782ca5a18ba4d7af0f1082a3f6e517ac2a18b3974d4edf349680", size = 745831 }, + { url = "https://files.pythonhosted.org/packages/db/5d/36619b61ffa2429eeaefaab4f3374666adf36ad8ac6330d855848d7d36fd/ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b82a7c94a498853aa0b272fd5bc67f29008da798d4f93a2f9f289feb8426a58d", size = 715692 }, + { url = "https://files.pythonhosted.org/packages/b1/82/85cb92f15a4231c89b95dfe08b09eb6adca929ef7df7e17ab59902b6f589/ruamel.yaml.clib-0.2.12-cp312-cp312-win32.whl", hash = "sha256:e8c4ebfcfd57177b572e2040777b8abc537cdef58a2120e830124946aa9b42c5", size = 98777 }, + { url = "https://files.pythonhosted.org/packages/d7/8f/c3654f6f1ddb75daf3922c3d8fc6005b1ab56671ad56ffb874d908bfa668/ruamel.yaml.clib-0.2.12-cp312-cp312-win_amd64.whl", hash = "sha256:0467c5965282c62203273b838ae77c0d29d7638c8a4e3a1c8bdd3602c10904e4", size = 115523 }, + { url = "https://files.pythonhosted.org/packages/29/00/4864119668d71a5fa45678f380b5923ff410701565821925c69780356ffa/ruamel.yaml.clib-0.2.12-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:4c8c5d82f50bb53986a5e02d1b3092b03622c02c2eb78e29bec33fd9593bae1a", size = 132011 }, + { url = "https://files.pythonhosted.org/packages/7f/5e/212f473a93ae78c669ffa0cb051e3fee1139cb2d385d2ae1653d64281507/ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux2014_aarch64.whl", hash = "sha256:e7e3736715fbf53e9be2a79eb4db68e4ed857017344d697e8b9749444ae57475", size = 642488 }, + { url = "https://files.pythonhosted.org/packages/1f/8f/ecfbe2123ade605c49ef769788f79c38ddb1c8fa81e01f4dbf5cf1a44b16/ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b7e75b4965e1d4690e93021adfcecccbca7d61c7bddd8e22406ef2ff20d74ef", size = 745066 }, + { url = "https://files.pythonhosted.org/packages/e2/a9/28f60726d29dfc01b8decdb385de4ced2ced9faeb37a847bd5cf26836815/ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96777d473c05ee3e5e3c3e999f5d23c6f4ec5b0c38c098b3a5229085f74236c6", size = 701785 }, + { url = "https://files.pythonhosted.org/packages/84/7e/8e7ec45920daa7f76046578e4f677a3215fe8f18ee30a9cb7627a19d9b4c/ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:3bc2a80e6420ca8b7d3590791e2dfc709c88ab9152c00eeb511c9875ce5778bf", size = 693017 }, + { url = "https://files.pythonhosted.org/packages/c5/b3/d650eaade4ca225f02a648321e1ab835b9d361c60d51150bac49063b83fa/ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:e188d2699864c11c36cdfdada94d781fd5d6b0071cd9c427bceb08ad3d7c70e1", size = 741270 }, + { url = "https://files.pythonhosted.org/packages/87/b8/01c29b924dcbbed75cc45b30c30d565d763b9c4d540545a0eeecffb8f09c/ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4f6f3eac23941b32afccc23081e1f50612bdbe4e982012ef4f5797986828cd01", size = 709059 }, + { url = "https://files.pythonhosted.org/packages/30/8c/ed73f047a73638257aa9377ad356bea4d96125b305c34a28766f4445cc0f/ruamel.yaml.clib-0.2.12-cp313-cp313-win32.whl", hash = "sha256:6442cb36270b3afb1b4951f060eccca1ce49f3d087ca1ca4563a6eb479cb3de6", size = 98583 }, + { url = "https://files.pythonhosted.org/packages/b0/85/e8e751d8791564dd333d5d9a4eab0a7a115f7e349595417fd50ecae3395c/ruamel.yaml.clib-0.2.12-cp313-cp313-win_amd64.whl", hash = "sha256:e5b8daf27af0b90da7bb903a876477a9e6d7270be6146906b276605997c7e9a3", size = 115190 }, ] [[package]] @@ -2574,14 +2755,14 @@ dependencies = [ { name = "click" }, { name = "requests" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/84/a4/b61c6e7a13b848fd985c9ed9acd525ccb1c2675e6cfa0d62292ae8015792/savepagenow-1.3.0.tar.gz", hash = "sha256:d0bc6bbe4606c700315015c3defcfab3c329208002b2b8cdc59f9b52996c6d3f", size = 42927, upload_time = "2023-07-01T13:31:49.607Z" } +sdist = { url = "https://files.pythonhosted.org/packages/84/a4/b61c6e7a13b848fd985c9ed9acd525ccb1c2675e6cfa0d62292ae8015792/savepagenow-1.3.0.tar.gz", hash = "sha256:d0bc6bbe4606c700315015c3defcfab3c329208002b2b8cdc59f9b52996c6d3f", size = 42927 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a6/8f/aea39979f8a7091ad2242a038a0e4c2b463593923ce598a914255dfba9ef/savepagenow-1.3.0-py2.py3-none-any.whl", hash = "sha256:4b0a4fff47254c160a37a20868ab53bb90da3d3f9f96086a9255b2375e39fcbf", size = 5649, upload_time = "2023-07-01T13:31:48.005Z" }, + { url = "https://files.pythonhosted.org/packages/a6/8f/aea39979f8a7091ad2242a038a0e4c2b463593923ce598a914255dfba9ef/savepagenow-1.3.0-py2.py3-none-any.whl", hash = "sha256:4b0a4fff47254c160a37a20868ab53bb90da3d3f9f96086a9255b2375e39fcbf", size = 5649 }, ] [[package]] name = "scikit-learn" -version = "1.7.1" +version = "1.7.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "joblib" }, @@ -2589,124 +2770,134 @@ dependencies = [ { name = "scipy" }, { name = "threadpoolctl" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/41/84/5f4af978fff619706b8961accac84780a6d298d82a8873446f72edb4ead0/scikit_learn-1.7.1.tar.gz", hash = "sha256:24b3f1e976a4665aa74ee0fcaac2b8fccc6ae77c8e07ab25da3ba6d3292b9802", size = 7190445, upload_time = "2025-07-18T08:01:54.5Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/cb/16/57f176585b35ed865f51b04117947fe20f130f78940c6477b6d66279c9c2/scikit_learn-1.7.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3cee419b49b5bbae8796ecd690f97aa412ef1674410c23fc3257c6b8b85b8087", size = 9260431, upload_time = "2025-07-18T08:01:22.77Z" }, - { url = "https://files.pythonhosted.org/packages/67/4e/899317092f5efcab0e9bc929e3391341cec8fb0e816c4789686770024580/scikit_learn-1.7.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:2fd8b8d35817b0d9ebf0b576f7d5ffbbabdb55536b0655a8aaae629d7ffd2e1f", size = 8637191, upload_time = "2025-07-18T08:01:24.731Z" }, - { url = "https://files.pythonhosted.org/packages/f3/1b/998312db6d361ded1dd56b457ada371a8d8d77ca2195a7d18fd8a1736f21/scikit_learn-1.7.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:588410fa19a96a69763202f1d6b7b91d5d7a5d73be36e189bc6396bfb355bd87", size = 9486346, upload_time = "2025-07-18T08:01:26.713Z" }, - { url = "https://files.pythonhosted.org/packages/ad/09/a2aa0b4e644e5c4ede7006748f24e72863ba2ae71897fecfd832afea01b4/scikit_learn-1.7.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e3142f0abe1ad1d1c31a2ae987621e41f6b578144a911ff4ac94781a583adad7", size = 9290988, upload_time = "2025-07-18T08:01:28.938Z" }, - { url = "https://files.pythonhosted.org/packages/15/fa/c61a787e35f05f17fc10523f567677ec4eeee5f95aa4798dbbbcd9625617/scikit_learn-1.7.1-cp312-cp312-win_amd64.whl", hash = "sha256:3ddd9092c1bd469acab337d87930067c87eac6bd544f8d5027430983f1e1ae88", size = 8735568, upload_time = "2025-07-18T08:01:30.936Z" }, - { url = "https://files.pythonhosted.org/packages/52/f8/e0533303f318a0f37b88300d21f79b6ac067188d4824f1047a37214ab718/scikit_learn-1.7.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b7839687fa46d02e01035ad775982f2470be2668e13ddd151f0f55a5bf123bae", size = 9213143, upload_time = "2025-07-18T08:01:32.942Z" }, - { url = "https://files.pythonhosted.org/packages/71/f3/f1df377d1bdfc3e3e2adc9c119c238b182293e6740df4cbeac6de2cc3e23/scikit_learn-1.7.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:a10f276639195a96c86aa572ee0698ad64ee939a7b042060b98bd1930c261d10", size = 8591977, upload_time = "2025-07-18T08:01:34.967Z" }, - { url = "https://files.pythonhosted.org/packages/99/72/c86a4cd867816350fe8dee13f30222340b9cd6b96173955819a5561810c5/scikit_learn-1.7.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:13679981fdaebc10cc4c13c43344416a86fcbc61449cb3e6517e1df9d12c8309", size = 9436142, upload_time = "2025-07-18T08:01:37.397Z" }, - { url = "https://files.pythonhosted.org/packages/e8/66/277967b29bd297538dc7a6ecfb1a7dce751beabd0d7f7a2233be7a4f7832/scikit_learn-1.7.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4f1262883c6a63f067a980a8cdd2d2e7f2513dddcef6a9eaada6416a7a7cbe43", size = 9282996, upload_time = "2025-07-18T08:01:39.721Z" }, - { url = "https://files.pythonhosted.org/packages/e2/47/9291cfa1db1dae9880420d1e07dbc7e8dd4a7cdbc42eaba22512e6bde958/scikit_learn-1.7.1-cp313-cp313-win_amd64.whl", hash = "sha256:ca6d31fb10e04d50bfd2b50d66744729dbb512d4efd0223b864e2fdbfc4cee11", size = 8707418, upload_time = "2025-07-18T08:01:42.124Z" }, - { url = "https://files.pythonhosted.org/packages/61/95/45726819beccdaa34d3362ea9b2ff9f2b5d3b8bf721bd632675870308ceb/scikit_learn-1.7.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:781674d096303cfe3d351ae6963ff7c958db61cde3421cd490e3a5a58f2a94ae", size = 9561466, upload_time = "2025-07-18T08:01:44.195Z" }, - { url = "https://files.pythonhosted.org/packages/ee/1c/6f4b3344805de783d20a51eb24d4c9ad4b11a7f75c1801e6ec6d777361fd/scikit_learn-1.7.1-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:10679f7f125fe7ecd5fad37dd1aa2daae7e3ad8df7f3eefa08901b8254b3e12c", size = 9040467, upload_time = "2025-07-18T08:01:46.671Z" }, - { url = "https://files.pythonhosted.org/packages/6f/80/abe18fe471af9f1d181904203d62697998b27d9b62124cd281d740ded2f9/scikit_learn-1.7.1-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1f812729e38c8cb37f760dce71a9b83ccfb04f59b3dca7c6079dcdc60544fa9e", size = 9532052, upload_time = "2025-07-18T08:01:48.676Z" }, - { url = "https://files.pythonhosted.org/packages/14/82/b21aa1e0c4cee7e74864d3a5a721ab8fcae5ca55033cb6263dca297ed35b/scikit_learn-1.7.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:88e1a20131cf741b84b89567e1717f27a2ced228e0f29103426102bc2e3b8ef7", size = 9361575, upload_time = "2025-07-18T08:01:50.639Z" }, - { url = "https://files.pythonhosted.org/packages/f2/20/f4777fcd5627dc6695fa6b92179d0edb7a3ac1b91bcd9a1c7f64fa7ade23/scikit_learn-1.7.1-cp313-cp313t-win_amd64.whl", hash = "sha256:b1bd1d919210b6a10b7554b717c9000b5485aa95a1d0f177ae0d7ee8ec750da5", size = 9277310, upload_time = "2025-07-18T08:01:52.547Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/98/c2/a7855e41c9d285dfe86dc50b250978105dce513d6e459ea66a6aeb0e1e0c/scikit_learn-1.7.2.tar.gz", hash = "sha256:20e9e49ecd130598f1ca38a1d85090e1a600147b9c02fa6f15d69cb53d968fda", size = 7193136 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a7/aa/3996e2196075689afb9fce0410ebdb4a09099d7964d061d7213700204409/scikit_learn-1.7.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:8d91a97fa2b706943822398ab943cde71858a50245e31bc71dba62aab1d60a96", size = 9259818 }, + { url = "https://files.pythonhosted.org/packages/43/5d/779320063e88af9c4a7c2cf463ff11c21ac9c8bd730c4a294b0000b666c9/scikit_learn-1.7.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:acbc0f5fd2edd3432a22c69bed78e837c70cf896cd7993d71d51ba6708507476", size = 8636997 }, + { url = "https://files.pythonhosted.org/packages/5c/d0/0c577d9325b05594fdd33aa970bf53fb673f051a45496842caee13cfd7fe/scikit_learn-1.7.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e5bf3d930aee75a65478df91ac1225ff89cd28e9ac7bd1196853a9229b6adb0b", size = 9478381 }, + { url = "https://files.pythonhosted.org/packages/82/70/8bf44b933837ba8494ca0fc9a9ab60f1c13b062ad0197f60a56e2fc4c43e/scikit_learn-1.7.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b4d6e9deed1a47aca9fe2f267ab8e8fe82ee20b4526b2c0cd9e135cea10feb44", size = 9300296 }, + { url = "https://files.pythonhosted.org/packages/c6/99/ed35197a158f1fdc2fe7c3680e9c70d0128f662e1fee4ed495f4b5e13db0/scikit_learn-1.7.2-cp312-cp312-win_amd64.whl", hash = "sha256:6088aa475f0785e01bcf8529f55280a3d7d298679f50c0bb70a2364a82d0b290", size = 8731256 }, + { url = "https://files.pythonhosted.org/packages/ae/93/a3038cb0293037fd335f77f31fe053b89c72f17b1c8908c576c29d953e84/scikit_learn-1.7.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0b7dacaa05e5d76759fb071558a8b5130f4845166d88654a0f9bdf3eb57851b7", size = 9212382 }, + { url = "https://files.pythonhosted.org/packages/40/dd/9a88879b0c1104259136146e4742026b52df8540c39fec21a6383f8292c7/scikit_learn-1.7.2-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:abebbd61ad9e1deed54cca45caea8ad5f79e1b93173dece40bb8e0c658dbe6fe", size = 8592042 }, + { url = "https://files.pythonhosted.org/packages/46/af/c5e286471b7d10871b811b72ae794ac5fe2989c0a2df07f0ec723030f5f5/scikit_learn-1.7.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:502c18e39849c0ea1a5d681af1dbcf15f6cce601aebb657aabbfe84133c1907f", size = 9434180 }, + { url = "https://files.pythonhosted.org/packages/f1/fd/df59faa53312d585023b2da27e866524ffb8faf87a68516c23896c718320/scikit_learn-1.7.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7a4c328a71785382fe3fe676a9ecf2c86189249beff90bf85e22bdb7efaf9ae0", size = 9283660 }, + { url = "https://files.pythonhosted.org/packages/a7/c7/03000262759d7b6f38c836ff9d512f438a70d8a8ddae68ee80de72dcfb63/scikit_learn-1.7.2-cp313-cp313-win_amd64.whl", hash = "sha256:63a9afd6f7b229aad94618c01c252ce9e6fa97918c5ca19c9a17a087d819440c", size = 8702057 }, + { url = "https://files.pythonhosted.org/packages/55/87/ef5eb1f267084532c8e4aef98a28b6ffe7425acbfd64b5e2f2e066bc29b3/scikit_learn-1.7.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:9acb6c5e867447b4e1390930e3944a005e2cb115922e693c08a323421a6966e8", size = 9558731 }, + { url = "https://files.pythonhosted.org/packages/93/f8/6c1e3fc14b10118068d7938878a9f3f4e6d7b74a8ddb1e5bed65159ccda8/scikit_learn-1.7.2-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:2a41e2a0ef45063e654152ec9d8bcfc39f7afce35b08902bfe290c2498a67a6a", size = 9038852 }, + { url = "https://files.pythonhosted.org/packages/83/87/066cafc896ee540c34becf95d30375fe5cbe93c3b75a0ee9aa852cd60021/scikit_learn-1.7.2-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:98335fb98509b73385b3ab2bd0639b1f610541d3988ee675c670371d6a87aa7c", size = 9527094 }, + { url = "https://files.pythonhosted.org/packages/9c/2b/4903e1ccafa1f6453b1ab78413938c8800633988c838aa0be386cbb33072/scikit_learn-1.7.2-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:191e5550980d45449126e23ed1d5e9e24b2c68329ee1f691a3987476e115e09c", size = 9367436 }, + { url = "https://files.pythonhosted.org/packages/b5/aa/8444be3cfb10451617ff9d177b3c190288f4563e6c50ff02728be67ad094/scikit_learn-1.7.2-cp313-cp313t-win_amd64.whl", hash = "sha256:57dc4deb1d3762c75d685507fbd0bc17160144b2f2ba4ccea5dc285ab0d0e973", size = 9275749 }, + { url = "https://files.pythonhosted.org/packages/d9/82/dee5acf66837852e8e68df6d8d3a6cb22d3df997b733b032f513d95205b7/scikit_learn-1.7.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fa8f63940e29c82d1e67a45d5297bdebbcb585f5a5a50c4914cc2e852ab77f33", size = 9208906 }, + { url = "https://files.pythonhosted.org/packages/3c/30/9029e54e17b87cb7d50d51a5926429c683d5b4c1732f0507a6c3bed9bf65/scikit_learn-1.7.2-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:f95dc55b7902b91331fa4e5845dd5bde0580c9cd9612b1b2791b7e80c3d32615", size = 8627836 }, + { url = "https://files.pythonhosted.org/packages/60/18/4a52c635c71b536879f4b971c2cedf32c35ee78f48367885ed8025d1f7ee/scikit_learn-1.7.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9656e4a53e54578ad10a434dc1f993330568cfee176dff07112b8785fb413106", size = 9426236 }, + { url = "https://files.pythonhosted.org/packages/99/7e/290362f6ab582128c53445458a5befd471ed1ea37953d5bcf80604619250/scikit_learn-1.7.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96dc05a854add0e50d3f47a1ef21a10a595016da5b007c7d9cd9d0bffd1fcc61", size = 9312593 }, + { url = "https://files.pythonhosted.org/packages/8e/87/24f541b6d62b1794939ae6422f8023703bbf6900378b2b34e0b4384dfefd/scikit_learn-1.7.2-cp314-cp314-win_amd64.whl", hash = "sha256:bb24510ed3f9f61476181e4db51ce801e2ba37541def12dc9333b946fc7a9cf8", size = 8820007 }, ] [[package]] name = "scipy" -version = "1.16.1" +version = "1.16.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f5/4a/b927028464795439faec8eaf0b03b011005c487bb2d07409f28bf30879c4/scipy-1.16.1.tar.gz", hash = "sha256:44c76f9e8b6e8e488a586190ab38016e4ed2f8a038af7cd3defa903c0a2238b3", size = 30580861, upload_time = "2025-07-27T16:33:30.834Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f8/d9/ec4864f5896232133f51382b54a08de91a9d1af7a76dfa372894026dfee2/scipy-1.16.1-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:81b433bbeaf35728dad619afc002db9b189e45eebe2cd676effe1fb93fef2b9c", size = 36575194, upload_time = "2025-07-27T16:27:41.321Z" }, - { url = "https://files.pythonhosted.org/packages/5c/6d/40e81ecfb688e9d25d34a847dca361982a6addf8e31f0957b1a54fbfa994/scipy-1.16.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:886cc81fdb4c6903a3bb0464047c25a6d1016fef77bb97949817d0c0d79f9e04", size = 28594590, upload_time = "2025-07-27T16:27:49.204Z" }, - { url = "https://files.pythonhosted.org/packages/0e/37/9f65178edfcc629377ce9a64fc09baebea18c80a9e57ae09a52edf84880b/scipy-1.16.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:15240c3aac087a522b4eaedb09f0ad061753c5eebf1ea430859e5bf8640d5919", size = 20866458, upload_time = "2025-07-27T16:27:54.98Z" }, - { url = "https://files.pythonhosted.org/packages/2c/7b/749a66766871ea4cb1d1ea10f27004db63023074c22abed51f22f09770e0/scipy-1.16.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:65f81a25805f3659b48126b5053d9e823d3215e4a63730b5e1671852a1705921", size = 23539318, upload_time = "2025-07-27T16:28:01.604Z" }, - { url = "https://files.pythonhosted.org/packages/c4/db/8d4afec60eb833a666434d4541a3151eedbf2494ea6d4d468cbe877f00cd/scipy-1.16.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:6c62eea7f607f122069b9bad3f99489ddca1a5173bef8a0c75555d7488b6f725", size = 33292899, upload_time = "2025-07-27T16:28:09.147Z" }, - { url = "https://files.pythonhosted.org/packages/51/1e/79023ca3bbb13a015d7d2757ecca3b81293c663694c35d6541b4dca53e98/scipy-1.16.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f965bbf3235b01c776115ab18f092a95aa74c271a52577bcb0563e85738fd618", size = 35162637, upload_time = "2025-07-27T16:28:17.535Z" }, - { url = "https://files.pythonhosted.org/packages/b6/49/0648665f9c29fdaca4c679182eb972935b3b4f5ace41d323c32352f29816/scipy-1.16.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f006e323874ffd0b0b816d8c6a8e7f9a73d55ab3b8c3f72b752b226d0e3ac83d", size = 35490507, upload_time = "2025-07-27T16:28:25.705Z" }, - { url = "https://files.pythonhosted.org/packages/62/8f/66cbb9d6bbb18d8c658f774904f42a92078707a7c71e5347e8bf2f52bb89/scipy-1.16.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e8fd15fc5085ab4cca74cb91fe0a4263b1f32e4420761ddae531ad60934c2119", size = 37923998, upload_time = "2025-07-27T16:28:34.339Z" }, - { url = "https://files.pythonhosted.org/packages/14/c3/61f273ae550fbf1667675701112e380881905e28448c080b23b5a181df7c/scipy-1.16.1-cp312-cp312-win_amd64.whl", hash = "sha256:f7b8013c6c066609577d910d1a2a077021727af07b6fab0ee22c2f901f22352a", size = 38508060, upload_time = "2025-07-27T16:28:43.242Z" }, - { url = "https://files.pythonhosted.org/packages/93/0b/b5c99382b839854a71ca9482c684e3472badc62620287cbbdab499b75ce6/scipy-1.16.1-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:5451606823a5e73dfa621a89948096c6528e2896e40b39248295d3a0138d594f", size = 36533717, upload_time = "2025-07-27T16:28:51.706Z" }, - { url = "https://files.pythonhosted.org/packages/eb/e5/69ab2771062c91e23e07c12e7d5033a6b9b80b0903ee709c3c36b3eb520c/scipy-1.16.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:89728678c5ca5abd610aee148c199ac1afb16e19844401ca97d43dc548a354eb", size = 28570009, upload_time = "2025-07-27T16:28:57.017Z" }, - { url = "https://files.pythonhosted.org/packages/f4/69/bd75dbfdd3cf524f4d753484d723594aed62cfaac510123e91a6686d520b/scipy-1.16.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:e756d688cb03fd07de0fffad475649b03cb89bee696c98ce508b17c11a03f95c", size = 20841942, upload_time = "2025-07-27T16:29:01.152Z" }, - { url = "https://files.pythonhosted.org/packages/ea/74/add181c87663f178ba7d6144b370243a87af8476664d5435e57d599e6874/scipy-1.16.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:5aa2687b9935da3ed89c5dbed5234576589dd28d0bf7cd237501ccfbdf1ad608", size = 23498507, upload_time = "2025-07-27T16:29:05.202Z" }, - { url = "https://files.pythonhosted.org/packages/1d/74/ece2e582a0d9550cee33e2e416cc96737dce423a994d12bbe59716f47ff1/scipy-1.16.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0851f6a1e537fe9399f35986897e395a1aa61c574b178c0d456be5b1a0f5ca1f", size = 33286040, upload_time = "2025-07-27T16:29:10.201Z" }, - { url = "https://files.pythonhosted.org/packages/e4/82/08e4076df538fb56caa1d489588d880ec7c52d8273a606bb54d660528f7c/scipy-1.16.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fedc2cbd1baed37474b1924c331b97bdff611d762c196fac1a9b71e67b813b1b", size = 35176096, upload_time = "2025-07-27T16:29:17.091Z" }, - { url = "https://files.pythonhosted.org/packages/fa/79/cd710aab8c921375711a8321c6be696e705a120e3011a643efbbcdeeabcc/scipy-1.16.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:2ef500e72f9623a6735769e4b93e9dcb158d40752cdbb077f305487e3e2d1f45", size = 35490328, upload_time = "2025-07-27T16:29:22.928Z" }, - { url = "https://files.pythonhosted.org/packages/71/73/e9cc3d35ee4526d784520d4494a3e1ca969b071fb5ae5910c036a375ceec/scipy-1.16.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:978d8311674b05a8f7ff2ea6c6bce5d8b45a0cb09d4c5793e0318f448613ea65", size = 37939921, upload_time = "2025-07-27T16:29:29.108Z" }, - { url = "https://files.pythonhosted.org/packages/21/12/c0efd2941f01940119b5305c375ae5c0fcb7ec193f806bd8f158b73a1782/scipy-1.16.1-cp313-cp313-win_amd64.whl", hash = "sha256:81929ed0fa7a5713fcdd8b2e6f73697d3b4c4816d090dd34ff937c20fa90e8ab", size = 38479462, upload_time = "2025-07-27T16:30:24.078Z" }, - { url = "https://files.pythonhosted.org/packages/7a/19/c3d08b675260046a991040e1ea5d65f91f40c7df1045fffff412dcfc6765/scipy-1.16.1-cp313-cp313t-macosx_10_14_x86_64.whl", hash = "sha256:bcc12db731858abda693cecdb3bdc9e6d4bd200213f49d224fe22df82687bdd6", size = 36938832, upload_time = "2025-07-27T16:29:35.057Z" }, - { url = "https://files.pythonhosted.org/packages/81/f2/ce53db652c033a414a5b34598dba6b95f3d38153a2417c5a3883da429029/scipy-1.16.1-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:744d977daa4becb9fc59135e75c069f8d301a87d64f88f1e602a9ecf51e77b27", size = 29093084, upload_time = "2025-07-27T16:29:40.201Z" }, - { url = "https://files.pythonhosted.org/packages/a9/ae/7a10ff04a7dc15f9057d05b33737ade244e4bd195caa3f7cc04d77b9e214/scipy-1.16.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:dc54f76ac18073bcecffb98d93f03ed6b81a92ef91b5d3b135dcc81d55a724c7", size = 21365098, upload_time = "2025-07-27T16:29:44.295Z" }, - { url = "https://files.pythonhosted.org/packages/36/ac/029ff710959932ad3c2a98721b20b405f05f752f07344622fd61a47c5197/scipy-1.16.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:367d567ee9fc1e9e2047d31f39d9d6a7a04e0710c86e701e053f237d14a9b4f6", size = 23896858, upload_time = "2025-07-27T16:29:48.784Z" }, - { url = "https://files.pythonhosted.org/packages/71/13/d1ef77b6bd7898720e1f0b6b3743cb945f6c3cafa7718eaac8841035ab60/scipy-1.16.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:4cf5785e44e19dcd32a0e4807555e1e9a9b8d475c6afff3d21c3c543a6aa84f4", size = 33438311, upload_time = "2025-07-27T16:29:54.164Z" }, - { url = "https://files.pythonhosted.org/packages/2d/e0/e64a6821ffbb00b4c5b05169f1c1fddb4800e9307efe3db3788995a82a2c/scipy-1.16.1-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3d0b80fb26d3e13a794c71d4b837e2a589d839fd574a6bbb4ee1288c213ad4a3", size = 35279542, upload_time = "2025-07-27T16:30:00.249Z" }, - { url = "https://files.pythonhosted.org/packages/57/59/0dc3c8b43e118f1e4ee2b798dcc96ac21bb20014e5f1f7a8e85cc0653bdb/scipy-1.16.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:8503517c44c18d1030d666cb70aaac1cc8913608816e06742498833b128488b7", size = 35667665, upload_time = "2025-07-27T16:30:05.916Z" }, - { url = "https://files.pythonhosted.org/packages/45/5f/844ee26e34e2f3f9f8febb9343748e72daeaec64fe0c70e9bf1ff84ec955/scipy-1.16.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:30cc4bb81c41831ecfd6dc450baf48ffd80ef5aed0f5cf3ea775740e80f16ecc", size = 38045210, upload_time = "2025-07-27T16:30:11.655Z" }, - { url = "https://files.pythonhosted.org/packages/8d/d7/210f2b45290f444f1de64bc7353aa598ece9f0e90c384b4a156f9b1a5063/scipy-1.16.1-cp313-cp313t-win_amd64.whl", hash = "sha256:c24fa02f7ed23ae514460a22c57eca8f530dbfa50b1cfdbf4f37c05b5309cc39", size = 38593661, upload_time = "2025-07-27T16:30:17.825Z" }, - { url = "https://files.pythonhosted.org/packages/81/ea/84d481a5237ed223bd3d32d6e82d7a6a96e34756492666c260cef16011d1/scipy-1.16.1-cp314-cp314-macosx_10_14_x86_64.whl", hash = "sha256:796a5a9ad36fa3a782375db8f4241ab02a091308eb079746bc0f874c9b998318", size = 36525921, upload_time = "2025-07-27T16:30:30.081Z" }, - { url = "https://files.pythonhosted.org/packages/4e/9f/d9edbdeff9f3a664807ae3aea383e10afaa247e8e6255e6d2aa4515e8863/scipy-1.16.1-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:3ea0733a2ff73fd6fdc5fecca54ee9b459f4d74f00b99aced7d9a3adb43fb1cc", size = 28564152, upload_time = "2025-07-27T16:30:35.336Z" }, - { url = "https://files.pythonhosted.org/packages/3b/95/8125bcb1fe04bc267d103e76516243e8d5e11229e6b306bda1024a5423d1/scipy-1.16.1-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:85764fb15a2ad994e708258bb4ed8290d1305c62a4e1ef07c414356a24fcfbf8", size = 20836028, upload_time = "2025-07-27T16:30:39.421Z" }, - { url = "https://files.pythonhosted.org/packages/77/9c/bf92e215701fc70bbcd3d14d86337cf56a9b912a804b9c776a269524a9e9/scipy-1.16.1-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:ca66d980469cb623b1759bdd6e9fd97d4e33a9fad5b33771ced24d0cb24df67e", size = 23489666, upload_time = "2025-07-27T16:30:43.663Z" }, - { url = "https://files.pythonhosted.org/packages/5e/00/5e941d397d9adac41b02839011594620d54d99488d1be5be755c00cde9ee/scipy-1.16.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e7cc1ffcc230f568549fc56670bcf3df1884c30bd652c5da8138199c8c76dae0", size = 33358318, upload_time = "2025-07-27T16:30:48.982Z" }, - { url = "https://files.pythonhosted.org/packages/0e/87/8db3aa10dde6e3e8e7eb0133f24baa011377d543f5b19c71469cf2648026/scipy-1.16.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3ddfb1e8d0b540cb4ee9c53fc3dea3186f97711248fb94b4142a1b27178d8b4b", size = 35185724, upload_time = "2025-07-27T16:30:54.26Z" }, - { url = "https://files.pythonhosted.org/packages/89/b4/6ab9ae443216807622bcff02690262d8184078ea467efee2f8c93288a3b1/scipy-1.16.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4dc0e7be79e95d8ba3435d193e0d8ce372f47f774cffd882f88ea4e1e1ddc731", size = 35554335, upload_time = "2025-07-27T16:30:59.765Z" }, - { url = "https://files.pythonhosted.org/packages/9c/9a/d0e9dc03c5269a1afb60661118296a32ed5d2c24298af61b676c11e05e56/scipy-1.16.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:f23634f9e5adb51b2a77766dac217063e764337fbc816aa8ad9aaebcd4397fd3", size = 37960310, upload_time = "2025-07-27T16:31:06.151Z" }, - { url = "https://files.pythonhosted.org/packages/5e/00/c8f3130a50521a7977874817ca89e0599b1b4ee8e938bad8ae798a0e1f0d/scipy-1.16.1-cp314-cp314-win_amd64.whl", hash = "sha256:57d75524cb1c5a374958a2eae3d84e1929bb971204cc9d52213fb8589183fc19", size = 39319239, upload_time = "2025-07-27T16:31:59.942Z" }, - { url = "https://files.pythonhosted.org/packages/f2/f2/1ca3eda54c3a7e4c92f6acef7db7b3a057deb135540d23aa6343ef8ad333/scipy-1.16.1-cp314-cp314t-macosx_10_14_x86_64.whl", hash = "sha256:d8da7c3dd67bcd93f15618938f43ed0995982eb38973023d46d4646c4283ad65", size = 36939460, upload_time = "2025-07-27T16:31:11.865Z" }, - { url = "https://files.pythonhosted.org/packages/80/30/98c2840b293a132400c0940bb9e140171dcb8189588619048f42b2ce7b4f/scipy-1.16.1-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:cc1d2f2fd48ba1e0620554fe5bc44d3e8f5d4185c8c109c7fbdf5af2792cfad2", size = 29093322, upload_time = "2025-07-27T16:31:17.045Z" }, - { url = "https://files.pythonhosted.org/packages/c1/e6/1e6e006e850622cf2a039b62d1a6ddc4497d4851e58b68008526f04a9a00/scipy-1.16.1-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:21a611ced9275cb861bacadbada0b8c0623bc00b05b09eb97f23b370fc2ae56d", size = 21365329, upload_time = "2025-07-27T16:31:21.188Z" }, - { url = "https://files.pythonhosted.org/packages/8e/02/72a5aa5b820589dda9a25e329ca752842bfbbaf635e36bc7065a9b42216e/scipy-1.16.1-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:8dfbb25dffc4c3dd9371d8ab456ca81beeaf6f9e1c2119f179392f0dc1ab7695", size = 23897544, upload_time = "2025-07-27T16:31:25.408Z" }, - { url = "https://files.pythonhosted.org/packages/2b/dc/7122d806a6f9eb8a33532982234bed91f90272e990f414f2830cfe656e0b/scipy-1.16.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f0ebb7204f063fad87fc0a0e4ff4a2ff40b2a226e4ba1b7e34bf4b79bf97cd86", size = 33442112, upload_time = "2025-07-27T16:31:30.62Z" }, - { url = "https://files.pythonhosted.org/packages/24/39/e383af23564daa1021a5b3afbe0d8d6a68ec639b943661841f44ac92de85/scipy-1.16.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f1b9e5962656f2734c2b285a8745358ecb4e4efbadd00208c80a389227ec61ff", size = 35286594, upload_time = "2025-07-27T16:31:36.112Z" }, - { url = "https://files.pythonhosted.org/packages/95/47/1a0b0aff40c3056d955f38b0df5d178350c3d74734ec54f9c68d23910be5/scipy-1.16.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5e1a106f8c023d57a2a903e771228bf5c5b27b5d692088f457acacd3b54511e4", size = 35665080, upload_time = "2025-07-27T16:31:42.025Z" }, - { url = "https://files.pythonhosted.org/packages/64/df/ce88803e9ed6e27fe9b9abefa157cf2c80e4fa527cf17ee14be41f790ad4/scipy-1.16.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:709559a1db68a9abc3b2c8672c4badf1614f3b440b3ab326d86a5c0491eafae3", size = 38050306, upload_time = "2025-07-27T16:31:48.109Z" }, - { url = "https://files.pythonhosted.org/packages/6e/6c/a76329897a7cae4937d403e623aa6aaea616a0bb5b36588f0b9d1c9a3739/scipy-1.16.1-cp314-cp314t-win_amd64.whl", hash = "sha256:c0c804d60492a0aad7f5b2bb1862f4548b990049e27e828391ff2bf6f7199998", size = 39427705, upload_time = "2025-07-27T16:31:53.96Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/4c/3b/546a6f0bfe791bbb7f8d591613454d15097e53f906308ec6f7c1ce588e8e/scipy-1.16.2.tar.gz", hash = "sha256:af029b153d243a80afb6eabe40b0a07f8e35c9adc269c019f364ad747f826a6b", size = 30580599 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/8d/6396e00db1282279a4ddd507c5f5e11f606812b608ee58517ce8abbf883f/scipy-1.16.2-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:89d6c100fa5c48472047632e06f0876b3c4931aac1f4291afc81a3644316bb0d", size = 36646259 }, + { url = "https://files.pythonhosted.org/packages/3b/93/ea9edd7e193fceb8eef149804491890bde73fb169c896b61aa3e2d1e4e77/scipy-1.16.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:ca748936cd579d3f01928b30a17dc474550b01272d8046e3e1ee593f23620371", size = 28888976 }, + { url = "https://files.pythonhosted.org/packages/91/4d/281fddc3d80fd738ba86fd3aed9202331180b01e2c78eaae0642f22f7e83/scipy-1.16.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:fac4f8ce2ddb40e2e3d0f7ec36d2a1e7f92559a2471e59aec37bd8d9de01fec0", size = 20879905 }, + { url = "https://files.pythonhosted.org/packages/69/40/b33b74c84606fd301b2915f0062e45733c6ff5708d121dd0deaa8871e2d0/scipy-1.16.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:033570f1dcefd79547a88e18bccacff025c8c647a330381064f561d43b821232", size = 23553066 }, + { url = "https://files.pythonhosted.org/packages/55/a7/22c739e2f21a42cc8f16bc76b47cff4ed54fbe0962832c589591c2abec34/scipy-1.16.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ea3421209bf00c8a5ef2227de496601087d8f638a2363ee09af059bd70976dc1", size = 33336407 }, + { url = "https://files.pythonhosted.org/packages/53/11/a0160990b82999b45874dc60c0c183d3a3a969a563fffc476d5a9995c407/scipy-1.16.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f66bd07ba6f84cd4a380b41d1bf3c59ea488b590a2ff96744845163309ee8e2f", size = 35673281 }, + { url = "https://files.pythonhosted.org/packages/96/53/7ef48a4cfcf243c3d0f1643f5887c81f29fdf76911c4e49331828e19fc0a/scipy-1.16.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5e9feab931bd2aea4a23388c962df6468af3d808ddf2d40f94a81c5dc38f32ef", size = 36004222 }, + { url = "https://files.pythonhosted.org/packages/49/7f/71a69e0afd460049d41c65c630c919c537815277dfea214031005f474d78/scipy-1.16.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:03dfc75e52f72cf23ec2ced468645321407faad8f0fe7b1f5b49264adbc29cb1", size = 38664586 }, + { url = "https://files.pythonhosted.org/packages/34/95/20e02ca66fb495a95fba0642fd48e0c390d0ece9b9b14c6e931a60a12dea/scipy-1.16.2-cp312-cp312-win_amd64.whl", hash = "sha256:0ce54e07bbb394b417457409a64fd015be623f36e330ac49306433ffe04bc97e", size = 38550641 }, + { url = "https://files.pythonhosted.org/packages/92/ad/13646b9beb0a95528ca46d52b7babafbe115017814a611f2065ee4e61d20/scipy-1.16.2-cp312-cp312-win_arm64.whl", hash = "sha256:2a8ffaa4ac0df81a0b94577b18ee079f13fecdb924df3328fc44a7dc5ac46851", size = 25456070 }, + { url = "https://files.pythonhosted.org/packages/c1/27/c5b52f1ee81727a9fc457f5ac1e9bf3d6eab311805ea615c83c27ba06400/scipy-1.16.2-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:84f7bf944b43e20b8a894f5fe593976926744f6c185bacfcbdfbb62736b5cc70", size = 36604856 }, + { url = "https://files.pythonhosted.org/packages/32/a9/15c20d08e950b540184caa8ced675ba1128accb0e09c653780ba023a4110/scipy-1.16.2-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:5c39026d12edc826a1ef2ad35ad1e6d7f087f934bb868fc43fa3049c8b8508f9", size = 28864626 }, + { url = "https://files.pythonhosted.org/packages/4c/fc/ea36098df653cca26062a627c1a94b0de659e97127c8491e18713ca0e3b9/scipy-1.16.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:e52729ffd45b68777c5319560014d6fd251294200625d9d70fd8626516fc49f5", size = 20855689 }, + { url = "https://files.pythonhosted.org/packages/dc/6f/d0b53be55727f3e6d7c72687ec18ea6d0047cf95f1f77488b99a2bafaee1/scipy-1.16.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:024dd4a118cccec09ca3209b7e8e614931a6ffb804b2a601839499cb88bdf925", size = 23512151 }, + { url = "https://files.pythonhosted.org/packages/11/85/bf7dab56e5c4b1d3d8eef92ca8ede788418ad38a7dc3ff50262f00808760/scipy-1.16.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7a5dc7ee9c33019973a470556081b0fd3c9f4c44019191039f9769183141a4d9", size = 33329824 }, + { url = "https://files.pythonhosted.org/packages/da/6a/1a927b14ddc7714111ea51f4e568203b2bb6ed59bdd036d62127c1a360c8/scipy-1.16.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c2275ff105e508942f99d4e3bc56b6ef5e4b3c0af970386ca56b777608ce95b7", size = 35681881 }, + { url = "https://files.pythonhosted.org/packages/c1/5f/331148ea5780b4fcc7007a4a6a6ee0a0c1507a796365cc642d4d226e1c3a/scipy-1.16.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:af80196eaa84f033e48444d2e0786ec47d328ba00c71e4299b602235ffef9acb", size = 36006219 }, + { url = "https://files.pythonhosted.org/packages/46/3a/e991aa9d2aec723b4a8dcfbfc8365edec5d5e5f9f133888067f1cbb7dfc1/scipy-1.16.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9fb1eb735fe3d6ed1f89918224e3385fbf6f9e23757cacc35f9c78d3b712dd6e", size = 38682147 }, + { url = "https://files.pythonhosted.org/packages/a1/57/0f38e396ad19e41b4c5db66130167eef8ee620a49bc7d0512e3bb67e0cab/scipy-1.16.2-cp313-cp313-win_amd64.whl", hash = "sha256:fda714cf45ba43c9d3bae8f2585c777f64e3f89a2e073b668b32ede412d8f52c", size = 38520766 }, + { url = "https://files.pythonhosted.org/packages/1b/a5/85d3e867b6822d331e26c862a91375bb7746a0b458db5effa093d34cdb89/scipy-1.16.2-cp313-cp313-win_arm64.whl", hash = "sha256:2f5350da923ccfd0b00e07c3e5cfb316c1c0d6c1d864c07a72d092e9f20db104", size = 25451169 }, + { url = "https://files.pythonhosted.org/packages/09/d9/60679189bcebda55992d1a45498de6d080dcaf21ce0c8f24f888117e0c2d/scipy-1.16.2-cp313-cp313t-macosx_10_14_x86_64.whl", hash = "sha256:53d8d2ee29b925344c13bda64ab51785f016b1b9617849dac10897f0701b20c1", size = 37012682 }, + { url = "https://files.pythonhosted.org/packages/83/be/a99d13ee4d3b7887a96f8c71361b9659ba4ef34da0338f14891e102a127f/scipy-1.16.2-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:9e05e33657efb4c6a9d23bd8300101536abd99c85cca82da0bffff8d8764d08a", size = 29389926 }, + { url = "https://files.pythonhosted.org/packages/bf/0a/130164a4881cec6ca8c00faf3b57926f28ed429cd6001a673f83c7c2a579/scipy-1.16.2-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:7fe65b36036357003b3ef9d37547abeefaa353b237e989c21027b8ed62b12d4f", size = 21381152 }, + { url = "https://files.pythonhosted.org/packages/47/a6/503ffb0310ae77fba874e10cddfc4a1280bdcca1d13c3751b8c3c2996cf8/scipy-1.16.2-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:6406d2ac6d40b861cccf57f49592f9779071655e9f75cd4f977fa0bdd09cb2e4", size = 23914410 }, + { url = "https://files.pythonhosted.org/packages/fa/c7/1147774bcea50d00c02600aadaa919facbd8537997a62496270133536ed6/scipy-1.16.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ff4dc42bd321991fbf611c23fc35912d690f731c9914bf3af8f417e64aca0f21", size = 33481880 }, + { url = "https://files.pythonhosted.org/packages/6a/74/99d5415e4c3e46b2586f30cdbecb95e101c7192628a484a40dd0d163811a/scipy-1.16.2-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:654324826654d4d9133e10675325708fb954bc84dae6e9ad0a52e75c6b1a01d7", size = 35791425 }, + { url = "https://files.pythonhosted.org/packages/1b/ee/a6559de7c1cc710e938c0355d9d4fbcd732dac4d0d131959d1f3b63eb29c/scipy-1.16.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:63870a84cd15c44e65220eaed2dac0e8f8b26bbb991456a033c1d9abfe8a94f8", size = 36178622 }, + { url = "https://files.pythonhosted.org/packages/4e/7b/f127a5795d5ba8ece4e0dce7d4a9fb7cb9e4f4757137757d7a69ab7d4f1a/scipy-1.16.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:fa01f0f6a3050fa6a9771a95d5faccc8e2f5a92b4a2e5440a0fa7264a2398472", size = 38783985 }, + { url = "https://files.pythonhosted.org/packages/3e/9f/bc81c1d1e033951eb5912cd3750cc005943afa3e65a725d2443a3b3c4347/scipy-1.16.2-cp313-cp313t-win_amd64.whl", hash = "sha256:116296e89fba96f76353a8579820c2512f6e55835d3fad7780fece04367de351", size = 38631367 }, + { url = "https://files.pythonhosted.org/packages/d6/5e/2cc7555fd81d01814271412a1d59a289d25f8b63208a0a16c21069d55d3e/scipy-1.16.2-cp313-cp313t-win_arm64.whl", hash = "sha256:98e22834650be81d42982360382b43b17f7ba95e0e6993e2a4f5b9ad9283a94d", size = 25787992 }, + { url = "https://files.pythonhosted.org/packages/8b/ac/ad8951250516db71619f0bd3b2eb2448db04b720a003dd98619b78b692c0/scipy-1.16.2-cp314-cp314-macosx_10_14_x86_64.whl", hash = "sha256:567e77755019bb7461513c87f02bb73fb65b11f049aaaa8ca17cfaa5a5c45d77", size = 36595109 }, + { url = "https://files.pythonhosted.org/packages/ff/f6/5779049ed119c5b503b0f3dc6d6f3f68eefc3a9190d4ad4c276f854f051b/scipy-1.16.2-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:17d9bb346194e8967296621208fcdfd39b55498ef7d2f376884d5ac47cec1a70", size = 28859110 }, + { url = "https://files.pythonhosted.org/packages/82/09/9986e410ae38bf0a0c737ff8189ac81a93b8e42349aac009891c054403d7/scipy-1.16.2-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:0a17541827a9b78b777d33b623a6dcfe2ef4a25806204d08ead0768f4e529a88", size = 20850110 }, + { url = "https://files.pythonhosted.org/packages/0d/ad/485cdef2d9215e2a7df6d61b81d2ac073dfacf6ae24b9ae87274c4e936ae/scipy-1.16.2-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:d7d4c6ba016ffc0f9568d012f5f1eb77ddd99412aea121e6fa8b4c3b7cbad91f", size = 23497014 }, + { url = "https://files.pythonhosted.org/packages/a7/74/f6a852e5d581122b8f0f831f1d1e32fb8987776ed3658e95c377d308ed86/scipy-1.16.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:9702c4c023227785c779cba2e1d6f7635dbb5b2e0936cdd3a4ecb98d78fd41eb", size = 33401155 }, + { url = "https://files.pythonhosted.org/packages/d9/f5/61d243bbc7c6e5e4e13dde9887e84a5cbe9e0f75fd09843044af1590844e/scipy-1.16.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d1cdf0ac28948d225decdefcc45ad7dd91716c29ab56ef32f8e0d50657dffcc7", size = 35691174 }, + { url = "https://files.pythonhosted.org/packages/03/99/59933956331f8cc57e406cdb7a483906c74706b156998f322913e789c7e1/scipy-1.16.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:70327d6aa572a17c2941cdfb20673f82e536e91850a2e4cb0c5b858b690e1548", size = 36070752 }, + { url = "https://files.pythonhosted.org/packages/c6/7d/00f825cfb47ee19ef74ecf01244b43e95eae74e7e0ff796026ea7cd98456/scipy-1.16.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5221c0b2a4b58aa7c4ed0387d360fd90ee9086d383bb34d9f2789fafddc8a936", size = 38701010 }, + { url = "https://files.pythonhosted.org/packages/e4/9f/b62587029980378304ba5a8563d376c96f40b1e133daacee76efdcae32de/scipy-1.16.2-cp314-cp314-win_amd64.whl", hash = "sha256:f5a85d7b2b708025af08f060a496dd261055b617d776fc05a1a1cc69e09fe9ff", size = 39360061 }, + { url = "https://files.pythonhosted.org/packages/82/04/7a2f1609921352c7fbee0815811b5050582f67f19983096c4769867ca45f/scipy-1.16.2-cp314-cp314-win_arm64.whl", hash = "sha256:2cc73a33305b4b24556957d5857d6253ce1e2dcd67fa0ff46d87d1670b3e1e1d", size = 26126914 }, + { url = "https://files.pythonhosted.org/packages/51/b9/60929ce350c16b221928725d2d1d7f86cf96b8bc07415547057d1196dc92/scipy-1.16.2-cp314-cp314t-macosx_10_14_x86_64.whl", hash = "sha256:9ea2a3fed83065d77367775d689401a703d0f697420719ee10c0780bcab594d8", size = 37013193 }, + { url = "https://files.pythonhosted.org/packages/2a/41/ed80e67782d4bc5fc85a966bc356c601afddd175856ba7c7bb6d9490607e/scipy-1.16.2-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:7280d926f11ca945c3ef92ba960fa924e1465f8d07ce3a9923080363390624c4", size = 29390172 }, + { url = "https://files.pythonhosted.org/packages/c4/a3/2f673ace4090452696ccded5f5f8efffb353b8f3628f823a110e0170b605/scipy-1.16.2-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:8afae1756f6a1fe04636407ef7dbece33d826a5d462b74f3d0eb82deabefd831", size = 21381326 }, + { url = "https://files.pythonhosted.org/packages/42/bf/59df61c5d51395066c35836b78136accf506197617c8662e60ea209881e1/scipy-1.16.2-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:5c66511f29aa8d233388e7416a3f20d5cae7a2744d5cee2ecd38c081f4e861b3", size = 23915036 }, + { url = "https://files.pythonhosted.org/packages/91/c3/edc7b300dc16847ad3672f1a6f3f7c5d13522b21b84b81c265f4f2760d4a/scipy-1.16.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:efe6305aeaa0e96b0ccca5ff647a43737d9a092064a3894e46c414db84bc54ac", size = 33484341 }, + { url = "https://files.pythonhosted.org/packages/26/c7/24d1524e72f06ff141e8d04b833c20db3021020563272ccb1b83860082a9/scipy-1.16.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7f3a337d9ae06a1e8d655ee9d8ecb835ea5ddcdcbd8d23012afa055ab014f374", size = 35790840 }, + { url = "https://files.pythonhosted.org/packages/aa/b7/5aaad984eeedd56858dc33d75efa59e8ce798d918e1033ef62d2708f2c3d/scipy-1.16.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:bab3605795d269067d8ce78a910220262711b753de8913d3deeaedb5dded3bb6", size = 36174716 }, + { url = "https://files.pythonhosted.org/packages/fd/c2/e276a237acb09824822b0ada11b028ed4067fdc367a946730979feacb870/scipy-1.16.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:b0348d8ddb55be2a844c518cd8cc8deeeb8aeba707cf834db5758fc89b476a2c", size = 38790088 }, + { url = "https://files.pythonhosted.org/packages/c6/b4/5c18a766e8353015439f3780f5fc473f36f9762edc1a2e45da3ff5a31b21/scipy-1.16.2-cp314-cp314t-win_amd64.whl", hash = "sha256:26284797e38b8a75e14ea6631d29bda11e76ceaa6ddb6fdebbfe4c4d90faf2f9", size = 39457455 }, + { url = "https://files.pythonhosted.org/packages/97/30/2f9a5243008f76dfc5dee9a53dfb939d9b31e16ce4bd4f2e628bfc5d89d2/scipy-1.16.2-cp314-cp314t-win_arm64.whl", hash = "sha256:d2a4472c231328d4de38d5f1f68fdd6d28a615138f842580a8a321b5845cf779", size = 26448374 }, ] [[package]] name = "shellingham" version = "1.5.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310, upload_time = "2023-10-24T04:13:40.426Z" } +sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310 } wheels = [ - { url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755, upload_time = "2023-10-24T04:13:38.866Z" }, + { url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755 }, ] [[package]] name = "simpleeval" version = "1.0.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ff/6f/15be211749430f52f2c8f0c69158a6fc961c03aac93fa28d44d1a6f5ebc7/simpleeval-1.0.3.tar.gz", hash = "sha256:67bbf246040ac3b57c29cf048657b9cf31d4e7b9d6659684daa08ca8f1e45829", size = 24358, upload_time = "2024-11-02T10:29:46.912Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ff/6f/15be211749430f52f2c8f0c69158a6fc961c03aac93fa28d44d1a6f5ebc7/simpleeval-1.0.3.tar.gz", hash = "sha256:67bbf246040ac3b57c29cf048657b9cf31d4e7b9d6659684daa08ca8f1e45829", size = 24358 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/e9/e58082fbb8cecbb6fb4133033c40cc50c248b1a331582be3a0f39138d65b/simpleeval-1.0.3-py3-none-any.whl", hash = "sha256:e3bdbb8c82c26297c9a153902d0fd1858a6c3774bf53ff4f134788c3f2035c38", size = 15762, upload_time = "2024-11-02T10:29:45.706Z" }, + { url = "https://files.pythonhosted.org/packages/a0/e9/e58082fbb8cecbb6fb4133033c40cc50c248b1a331582be3a0f39138d65b/simpleeval-1.0.3-py3-none-any.whl", hash = "sha256:e3bdbb8c82c26297c9a153902d0fd1858a6c3774bf53ff4f134788c3f2035c38", size = 15762 }, ] [[package]] name = "six" version = "1.17.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload_time = "2024-12-04T17:35:28.174Z" } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031 } wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload_time = "2024-12-04T17:35:26.475Z" }, + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050 }, ] [[package]] name = "smmap" version = "5.0.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/44/cd/a040c4b3119bbe532e5b0732286f805445375489fceaec1f48306068ee3b/smmap-5.0.2.tar.gz", hash = "sha256:26ea65a03958fa0c8a1c7e8c7a58fdc77221b8910f6be2131affade476898ad5", size = 22329, upload_time = "2025-01-02T07:14:40.909Z" } +sdist = { url = "https://files.pythonhosted.org/packages/44/cd/a040c4b3119bbe532e5b0732286f805445375489fceaec1f48306068ee3b/smmap-5.0.2.tar.gz", hash = "sha256:26ea65a03958fa0c8a1c7e8c7a58fdc77221b8910f6be2131affade476898ad5", size = 22329 } wheels = [ - { url = "https://files.pythonhosted.org/packages/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-py3-none-any.whl", hash = "sha256:b30115f0def7d7531d22a0fb6502488d879e75b260a9db4d0819cfb25403af5e", size = 24303, upload_time = "2025-01-02T07:14:38.724Z" }, + { url = "https://files.pythonhosted.org/packages/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-py3-none-any.whl", hash = "sha256:b30115f0def7d7531d22a0fb6502488d879e75b260a9db4d0819cfb25403af5e", size = 24303 }, ] [[package]] name = "soupsieve" -version = "2.7" +version = "2.8" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/3f/f4/4a80cd6ef364b2e8b65b15816a843c0980f7a5a2b4dc701fc574952aa19f/soupsieve-2.7.tar.gz", hash = "sha256:ad282f9b6926286d2ead4750552c8a6142bc4c783fd66b0293547c8fe6ae126a", size = 103418, upload_time = "2025-04-20T18:50:08.518Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6d/e6/21ccce3262dd4889aa3332e5a119a3491a95e8f60939870a3a035aabac0d/soupsieve-2.8.tar.gz", hash = "sha256:e2dd4a40a628cb5f28f6d4b0db8800b8f581b65bb380b97de22ba5ca8d72572f", size = 103472 } wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/9c/0e6afc12c269578be5c0c1c9f4b49a8d32770a080260c333ac04cc1c832d/soupsieve-2.7-py3-none-any.whl", hash = "sha256:6e60cc5c1ffaf1cebcc12e8188320b72071e922c2e897f737cadce79ad5d30c4", size = 36677, upload_time = "2025-04-20T18:50:07.196Z" }, + { url = "https://files.pythonhosted.org/packages/14/a0/bb38d3b76b8cae341dad93a2dd83ab7462e6dbcdd84d43f54ee60a8dc167/soupsieve-2.8-py3-none-any.whl", hash = "sha256:0cc76456a30e20f5d7f2e14a98a4ae2ee4e5abdc7c5ea0aafe795f344bc7984c", size = 36679 }, ] [[package]] @@ -2718,18 +2909,18 @@ dependencies = [ { name = "executing" }, { name = "pure-eval" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/28/e3/55dcc2cfbc3ca9c29519eb6884dd1415ecb53b0e934862d3559ddcb7e20b/stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9", size = 44707, upload_time = "2023-09-30T13:58:05.479Z" } +sdist = { url = "https://files.pythonhosted.org/packages/28/e3/55dcc2cfbc3ca9c29519eb6884dd1415ecb53b0e934862d3559ddcb7e20b/stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9", size = 44707 } wheels = [ - { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521, upload_time = "2023-09-30T13:58:03.53Z" }, + { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521 }, ] [[package]] name = "structlog" version = "25.4.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/79/b9/6e672db4fec07349e7a8a8172c1a6ae235c58679ca29c3f86a61b5e59ff3/structlog-25.4.0.tar.gz", hash = "sha256:186cd1b0a8ae762e29417095664adf1d6a31702160a46dacb7796ea82f7409e4", size = 1369138, upload_time = "2025-06-02T08:21:12.971Z" } +sdist = { url = "https://files.pythonhosted.org/packages/79/b9/6e672db4fec07349e7a8a8172c1a6ae235c58679ca29c3f86a61b5e59ff3/structlog-25.4.0.tar.gz", hash = "sha256:186cd1b0a8ae762e29417095664adf1d6a31702160a46dacb7796ea82f7409e4", size = 1369138 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/4a/97ee6973e3a73c74c8120d59829c3861ea52210667ec3e7a16045c62b64d/structlog-25.4.0-py3-none-any.whl", hash = "sha256:fe809ff5c27e557d14e613f45ca441aabda051d119ee5a0102aaba6ce40eed2c", size = 68720, upload_time = "2025-06-02T08:21:11.43Z" }, + { url = "https://files.pythonhosted.org/packages/a0/4a/97ee6973e3a73c74c8120d59829c3861ea52210667ec3e7a16045c62b64d/structlog-25.4.0-py3-none-any.whl", hash = "sha256:fe809ff5c27e557d14e613f45ca441aabda051d119ee5a0102aaba6ce40eed2c", size = 68720 }, ] [[package]] @@ -2741,18 +2932,18 @@ dependencies = [ { name = "pyyaml" }, { name = "xlsxwriter" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/23/2d/5b5c0127e959a715c5365b3b491846fba5bc1fb7f94370cc3a4fb3f51f68/tableschema-to-template-0.0.13.tar.gz", hash = "sha256:2d8d2250efb840e0ecb9012c5e879a82ef68f65dd86bdff574200fdfc978ff1c", size = 13564, upload_time = "2023-02-01T21:53:17.238Z" } +sdist = { url = "https://files.pythonhosted.org/packages/23/2d/5b5c0127e959a715c5365b3b491846fba5bc1fb7f94370cc3a4fb3f51f68/tableschema-to-template-0.0.13.tar.gz", hash = "sha256:2d8d2250efb840e0ecb9012c5e879a82ef68f65dd86bdff574200fdfc978ff1c", size = 13564 } wheels = [ - { url = "https://files.pythonhosted.org/packages/9f/7f/3c129377d9b815c0bb92b8c24bbecabe5e6b13b831f38924f80d2e5b40b2/tableschema_to_template-0.0.13-py3-none-any.whl", hash = "sha256:4905500a4235740654230c3223629d26fdccb7a0457ec1d0110ea102c4f1146c", size = 14860, upload_time = "2023-02-01T21:53:16.02Z" }, + { url = "https://files.pythonhosted.org/packages/9f/7f/3c129377d9b815c0bb92b8c24bbecabe5e6b13b831f38924f80d2e5b40b2/tableschema_to_template-0.0.13-py3-none-any.whl", hash = "sha256:4905500a4235740654230c3223629d26fdccb7a0457ec1d0110ea102c4f1146c", size = 14860 }, ] [[package]] name = "tabulate" version = "0.9.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ec/fe/802052aecb21e3797b8f7902564ab6ea0d60ff8ca23952079064155d1ae1/tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c", size = 81090, upload_time = "2022-10-06T17:21:48.54Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ec/fe/802052aecb21e3797b8f7902564ab6ea0d60ff8ca23952079064155d1ae1/tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c", size = 81090 } wheels = [ - { url = "https://files.pythonhosted.org/packages/40/44/4a5f08c96eb108af5cb50b41f76142f0afa346dfa99d5296fe7202a11854/tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f", size = 35252, upload_time = "2022-10-06T17:21:44.262Z" }, + { url = "https://files.pythonhosted.org/packages/40/44/4a5f08c96eb108af5cb50b41f76142f0afa346dfa99d5296fe7202a11854/tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f", size = 35252 }, ] [[package]] @@ -2768,6 +2959,7 @@ dependencies = [ { name = "pydeflate" }, { name = "requests" }, { name = "savepagenow" }, + { name = "scipy" }, ] [package.dev-dependencies] @@ -2814,6 +3006,7 @@ requires-dist = [ { name = "pydeflate", specifier = ">=2.1.3" }, { name = "requests", specifier = ">=2.32.3" }, { name = "savepagenow", specifier = ">=1.3.0" }, + { name = "scipy", specifier = ">=1.16.1" }, ] [package.metadata.requires-dev] @@ -2853,27 +3046,27 @@ docs = [ name = "tenacity" version = "9.1.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0a/d4/2b0cd0fe285e14b36db076e78c93766ff1d529d70408bd1d2a5a84f1d929/tenacity-9.1.2.tar.gz", hash = "sha256:1169d376c297e7de388d18b4481760d478b0e99a777cad3a9c86e556f4b697cb", size = 48036, upload_time = "2025-04-02T08:25:09.966Z" } +sdist = { url = "https://files.pythonhosted.org/packages/0a/d4/2b0cd0fe285e14b36db076e78c93766ff1d529d70408bd1d2a5a84f1d929/tenacity-9.1.2.tar.gz", hash = "sha256:1169d376c297e7de388d18b4481760d478b0e99a777cad3a9c86e556f4b697cb", size = 48036 } wheels = [ - { url = "https://files.pythonhosted.org/packages/e5/30/643397144bfbfec6f6ef821f36f33e57d35946c44a2352d3c9f0ae847619/tenacity-9.1.2-py3-none-any.whl", hash = "sha256:f77bf36710d8b73a50b2dd155c97b870017ad21afe6ab300326b0371b3b05138", size = 28248, upload_time = "2025-04-02T08:25:07.678Z" }, + { url = "https://files.pythonhosted.org/packages/e5/30/643397144bfbfec6f6ef821f36f33e57d35946c44a2352d3c9f0ae847619/tenacity-9.1.2-py3-none-any.whl", hash = "sha256:f77bf36710d8b73a50b2dd155c97b870017ad21afe6ab300326b0371b3b05138", size = 28248 }, ] [[package]] name = "text-unidecode" version = "1.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ab/e2/e9a00f0ccb71718418230718b3d900e71a5d16e701a3dae079a21e9cd8f8/text-unidecode-1.3.tar.gz", hash = "sha256:bad6603bb14d279193107714b288be206cac565dfa49aa5b105294dd5c4aab93", size = 76885, upload_time = "2019-08-30T21:36:45.405Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ab/e2/e9a00f0ccb71718418230718b3d900e71a5d16e701a3dae079a21e9cd8f8/text-unidecode-1.3.tar.gz", hash = "sha256:bad6603bb14d279193107714b288be206cac565dfa49aa5b105294dd5c4aab93", size = 76885 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a6/a5/c0b6468d3824fe3fde30dbb5e1f687b291608f9473681bbf7dabbf5a87d7/text_unidecode-1.3-py2.py3-none-any.whl", hash = "sha256:1311f10e8b895935241623731c2ba64f4c455287888b18189350b67134a822e8", size = 78154, upload_time = "2019-08-30T21:37:03.543Z" }, + { url = "https://files.pythonhosted.org/packages/a6/a5/c0b6468d3824fe3fde30dbb5e1f687b291608f9473681bbf7dabbf5a87d7/text_unidecode-1.3-py2.py3-none-any.whl", hash = "sha256:1311f10e8b895935241623731c2ba64f4c455287888b18189350b67134a822e8", size = 78154 }, ] [[package]] name = "threadpoolctl" version = "3.6.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b7/4d/08c89e34946fce2aec4fbb45c9016efd5f4d7f24af8e5d93296e935631d8/threadpoolctl-3.6.0.tar.gz", hash = "sha256:8ab8b4aa3491d812b623328249fab5302a68d2d71745c8a4c719a2fcaba9f44e", size = 21274, upload_time = "2025-03-13T13:49:23.031Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b7/4d/08c89e34946fce2aec4fbb45c9016efd5f4d7f24af8e5d93296e935631d8/threadpoolctl-3.6.0.tar.gz", hash = "sha256:8ab8b4aa3491d812b623328249fab5302a68d2d71745c8a4c719a2fcaba9f44e", size = 21274 } wheels = [ - { url = "https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl", hash = "sha256:43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb", size = 18638, upload_time = "2025-03-13T13:49:21.846Z" }, + { url = "https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl", hash = "sha256:43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb", size = 18638 }, ] [[package]] @@ -2883,37 +3076,37 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "webencodings" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/7a/fd/7a5ee21fd08ff70d3d33a5781c255cbe779659bd03278feb98b19ee550f4/tinycss2-1.4.0.tar.gz", hash = "sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7", size = 87085, upload_time = "2024-10-24T14:58:29.895Z" } +sdist = { url = "https://files.pythonhosted.org/packages/7a/fd/7a5ee21fd08ff70d3d33a5781c255cbe779659bd03278feb98b19ee550f4/tinycss2-1.4.0.tar.gz", hash = "sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7", size = 87085 } wheels = [ - { url = "https://files.pythonhosted.org/packages/e6/34/ebdc18bae6aa14fbee1a08b63c015c72b64868ff7dae68808ab500c492e2/tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289", size = 26610, upload_time = "2024-10-24T14:58:28.029Z" }, + { url = "https://files.pythonhosted.org/packages/e6/34/ebdc18bae6aa14fbee1a08b63c015c72b64868ff7dae68808ab500c492e2/tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289", size = 26610 }, ] [[package]] name = "tomlkit" version = "0.13.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/cc/18/0bbf3884e9eaa38819ebe46a7bd25dcd56b67434402b66a58c4b8e552575/tomlkit-0.13.3.tar.gz", hash = "sha256:430cf247ee57df2b94ee3fbe588e71d362a941ebb545dec29b53961d61add2a1", size = 185207, upload_time = "2025-06-05T07:13:44.947Z" } +sdist = { url = "https://files.pythonhosted.org/packages/cc/18/0bbf3884e9eaa38819ebe46a7bd25dcd56b67434402b66a58c4b8e552575/tomlkit-0.13.3.tar.gz", hash = "sha256:430cf247ee57df2b94ee3fbe588e71d362a941ebb545dec29b53961d61add2a1", size = 185207 } wheels = [ - { url = "https://files.pythonhosted.org/packages/bd/75/8539d011f6be8e29f339c42e633aae3cb73bffa95dd0f9adec09b9c58e85/tomlkit-0.13.3-py3-none-any.whl", hash = "sha256:c89c649d79ee40629a9fda55f8ace8c6a1b42deb912b2a8fd8d942ddadb606b0", size = 38901, upload_time = "2025-06-05T07:13:43.546Z" }, + { url = "https://files.pythonhosted.org/packages/bd/75/8539d011f6be8e29f339c42e633aae3cb73bffa95dd0f9adec09b9c58e85/tomlkit-0.13.3-py3-none-any.whl", hash = "sha256:c89c649d79ee40629a9fda55f8ace8c6a1b42deb912b2a8fd8d942ddadb606b0", size = 38901 }, ] [[package]] name = "tornado" -version = "6.5.1" +version = "6.5.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/51/89/c72771c81d25d53fe33e3dca61c233b665b2780f21820ba6fd2c6793c12b/tornado-6.5.1.tar.gz", hash = "sha256:84ceece391e8eb9b2b95578db65e920d2a61070260594819589609ba9bc6308c", size = 509934, upload_time = "2025-05-22T18:15:38.788Z" } +sdist = { url = "https://files.pythonhosted.org/packages/09/ce/1eb500eae19f4648281bb2186927bb062d2438c2e5093d1360391afd2f90/tornado-6.5.2.tar.gz", hash = "sha256:ab53c8f9a0fa351e2c0741284e06c7a45da86afb544133201c5cc8578eb076a0", size = 510821 } wheels = [ - { url = "https://files.pythonhosted.org/packages/77/89/f4532dee6843c9e0ebc4e28d4be04c67f54f60813e4bf73d595fe7567452/tornado-6.5.1-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:d50065ba7fd11d3bd41bcad0825227cc9a95154bad83239357094c36708001f7", size = 441948, upload_time = "2025-05-22T18:15:20.862Z" }, - { url = "https://files.pythonhosted.org/packages/15/9a/557406b62cffa395d18772e0cdcf03bed2fff03b374677348eef9f6a3792/tornado-6.5.1-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:9e9ca370f717997cb85606d074b0e5b247282cf5e2e1611568b8821afe0342d6", size = 440112, upload_time = "2025-05-22T18:15:22.591Z" }, - { url = "https://files.pythonhosted.org/packages/55/82/7721b7319013a3cf881f4dffa4f60ceff07b31b394e459984e7a36dc99ec/tornado-6.5.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b77e9dfa7ed69754a54c89d82ef746398be82f749df69c4d3abe75c4d1ff4888", size = 443672, upload_time = "2025-05-22T18:15:24.027Z" }, - { url = "https://files.pythonhosted.org/packages/7d/42/d11c4376e7d101171b94e03cef0cbce43e823ed6567ceda571f54cf6e3ce/tornado-6.5.1-cp39-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:253b76040ee3bab8bcf7ba9feb136436a3787208717a1fb9f2c16b744fba7331", size = 443019, upload_time = "2025-05-22T18:15:25.735Z" }, - { url = "https://files.pythonhosted.org/packages/7d/f7/0c48ba992d875521ac761e6e04b0a1750f8150ae42ea26df1852d6a98942/tornado-6.5.1-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:308473f4cc5a76227157cdf904de33ac268af770b2c5f05ca6c1161d82fdd95e", size = 443252, upload_time = "2025-05-22T18:15:27.499Z" }, - { url = "https://files.pythonhosted.org/packages/89/46/d8d7413d11987e316df4ad42e16023cd62666a3c0dfa1518ffa30b8df06c/tornado-6.5.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:caec6314ce8a81cf69bd89909f4b633b9f523834dc1a352021775d45e51d9401", size = 443930, upload_time = "2025-05-22T18:15:29.299Z" }, - { url = "https://files.pythonhosted.org/packages/78/b2/f8049221c96a06df89bed68260e8ca94beca5ea532ffc63b1175ad31f9cc/tornado-6.5.1-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:13ce6e3396c24e2808774741331638ee6c2f50b114b97a55c5b442df65fd9692", size = 443351, upload_time = "2025-05-22T18:15:31.038Z" }, - { url = "https://files.pythonhosted.org/packages/76/ff/6a0079e65b326cc222a54720a748e04a4db246870c4da54ece4577bfa702/tornado-6.5.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:5cae6145f4cdf5ab24744526cc0f55a17d76f02c98f4cff9daa08ae9a217448a", size = 443328, upload_time = "2025-05-22T18:15:32.426Z" }, - { url = "https://files.pythonhosted.org/packages/49/18/e3f902a1d21f14035b5bc6246a8c0f51e0eef562ace3a2cea403c1fb7021/tornado-6.5.1-cp39-abi3-win32.whl", hash = "sha256:e0a36e1bc684dca10b1aa75a31df8bdfed656831489bc1e6a6ebed05dc1ec365", size = 444396, upload_time = "2025-05-22T18:15:34.205Z" }, - { url = "https://files.pythonhosted.org/packages/7b/09/6526e32bf1049ee7de3bebba81572673b19a2a8541f795d887e92af1a8bc/tornado-6.5.1-cp39-abi3-win_amd64.whl", hash = "sha256:908e7d64567cecd4c2b458075589a775063453aeb1d2a1853eedb806922f568b", size = 444840, upload_time = "2025-05-22T18:15:36.1Z" }, - { url = "https://files.pythonhosted.org/packages/55/a7/535c44c7bea4578e48281d83c615219f3ab19e6abc67625ef637c73987be/tornado-6.5.1-cp39-abi3-win_arm64.whl", hash = "sha256:02420a0eb7bf617257b9935e2b754d1b63897525d8a289c9d65690d580b4dcf7", size = 443596, upload_time = "2025-05-22T18:15:37.433Z" }, + { url = "https://files.pythonhosted.org/packages/f6/48/6a7529df2c9cc12efd2e8f5dd219516184d703b34c06786809670df5b3bd/tornado-6.5.2-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:2436822940d37cde62771cff8774f4f00b3c8024fe482e16ca8387b8a2724db6", size = 442563 }, + { url = "https://files.pythonhosted.org/packages/f2/b5/9b575a0ed3e50b00c40b08cbce82eb618229091d09f6d14bce80fc01cb0b/tornado-6.5.2-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:583a52c7aa94ee046854ba81d9ebb6c81ec0fd30386d96f7640c96dad45a03ef", size = 440729 }, + { url = "https://files.pythonhosted.org/packages/1b/4e/619174f52b120efcf23633c817fd3fed867c30bff785e2cd5a53a70e483c/tornado-6.5.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b0fe179f28d597deab2842b86ed4060deec7388f1fd9c1b4a41adf8af058907e", size = 444295 }, + { url = "https://files.pythonhosted.org/packages/95/fa/87b41709552bbd393c85dd18e4e3499dcd8983f66e7972926db8d96aa065/tornado-6.5.2-cp39-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b186e85d1e3536d69583d2298423744740986018e393d0321df7340e71898882", size = 443644 }, + { url = "https://files.pythonhosted.org/packages/f9/41/fb15f06e33d7430ca89420283a8762a4e6b8025b800ea51796ab5e6d9559/tornado-6.5.2-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e792706668c87709709c18b353da1f7662317b563ff69f00bab83595940c7108", size = 443878 }, + { url = "https://files.pythonhosted.org/packages/11/92/fe6d57da897776ad2e01e279170ea8ae726755b045fe5ac73b75357a5a3f/tornado-6.5.2-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:06ceb1300fd70cb20e43b1ad8aaee0266e69e7ced38fa910ad2e03285009ce7c", size = 444549 }, + { url = "https://files.pythonhosted.org/packages/9b/02/c8f4f6c9204526daf3d760f4aa555a7a33ad0e60843eac025ccfd6ff4a93/tornado-6.5.2-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:74db443e0f5251be86cbf37929f84d8c20c27a355dd452a5cfa2aada0d001ec4", size = 443973 }, + { url = "https://files.pythonhosted.org/packages/ae/2d/f5f5707b655ce2317190183868cd0f6822a1121b4baeae509ceb9590d0bd/tornado-6.5.2-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b5e735ab2889d7ed33b32a459cac490eda71a1ba6857b0118de476ab6c366c04", size = 443954 }, + { url = "https://files.pythonhosted.org/packages/e8/59/593bd0f40f7355806bf6573b47b8c22f8e1374c9b6fd03114bd6b7a3dcfd/tornado-6.5.2-cp39-abi3-win32.whl", hash = "sha256:c6f29e94d9b37a95013bb669616352ddb82e3bfe8326fccee50583caebc8a5f0", size = 445023 }, + { url = "https://files.pythonhosted.org/packages/c7/2a/f609b420c2f564a748a2d80ebfb2ee02a73ca80223af712fca591386cafb/tornado-6.5.2-cp39-abi3-win_amd64.whl", hash = "sha256:e56a5af51cc30dd2cae649429af65ca2f6571da29504a07995175df14c18f35f", size = 445427 }, + { url = "https://files.pythonhosted.org/packages/5e/4f/e1f65e8f8c76d73658b33d33b81eed4322fb5085350e4328d5c956f0c8f9/tornado-6.5.2-cp39-abi3-win_arm64.whl", hash = "sha256:d6c33dc3672e3a1f3618eb63b7ef4683a7688e7b9e6e8f0d9aa5726360a004af", size = 444456 }, ] [[package]] @@ -2923,18 +3116,18 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a8/4b/29b4ef32e036bb34e4ab51796dd745cdba7ed47ad142a9f4a1eb8e0c744d/tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2", size = 169737, upload_time = "2024-11-24T20:12:22.481Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a8/4b/29b4ef32e036bb34e4ab51796dd745cdba7ed47ad142a9f4a1eb8e0c744d/tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2", size = 169737 } wheels = [ - { url = "https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2", size = 78540, upload_time = "2024-11-24T20:12:19.698Z" }, + { url = "https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2", size = 78540 }, ] [[package]] name = "traitlets" version = "5.14.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/eb/79/72064e6a701c2183016abbbfedaba506d81e30e232a68c9f0d6f6fcd1574/traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7", size = 161621, upload_time = "2024-04-19T11:11:49.746Z" } +sdist = { url = "https://files.pythonhosted.org/packages/eb/79/72064e6a701c2183016abbbfedaba506d81e30e232a68c9f0d6f6fcd1574/traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7", size = 161621 } wheels = [ - { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359, upload_time = "2024-04-19T11:11:46.763Z" }, + { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359 }, ] [[package]] @@ -2950,14 +3143,14 @@ dependencies = [ { name = "scikit-learn" }, { name = "tqdm" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/e7/67/c69f8c46fd46e01480ca10280ab612253255a729a850e2d61fdf0ea08258/tsam-2.3.9.tar.gz", hash = "sha256:1f219eef05788d199af1ff61bd5a3d9217a26f9279988b1ef4b7d5af2757ed15", size = 223755, upload_time = "2025-06-16T07:30:03.015Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e7/67/c69f8c46fd46e01480ca10280ab612253255a729a850e2d61fdf0ea08258/tsam-2.3.9.tar.gz", hash = "sha256:1f219eef05788d199af1ff61bd5a3d9217a26f9279988b1ef4b7d5af2757ed15", size = 223755 } wheels = [ - { url = "https://files.pythonhosted.org/packages/44/e7/5c072b990bddccc4a78a186d641e50257993c50658cddc0d4bf300acd1e1/tsam-2.3.9-py3-none-any.whl", hash = "sha256:edcc4febb9e1dacc028bc819d710974ede8f563467c3d235a250f46416f93a1b", size = 36816, upload_time = "2025-06-16T07:30:01.562Z" }, + { url = "https://files.pythonhosted.org/packages/44/e7/5c072b990bddccc4a78a186d641e50257993c50658cddc0d4bf300acd1e1/tsam-2.3.9-py3-none-any.whl", hash = "sha256:edcc4febb9e1dacc028bc819d710974ede8f563467c3d235a250f46416f93a1b", size = 36816 }, ] [[package]] name = "typer" -version = "0.16.0" +version = "0.19.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click" }, @@ -2965,18 +3158,18 @@ dependencies = [ { name = "shellingham" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c5/8c/7d682431efca5fd290017663ea4588bf6f2c6aad085c7f108c5dbc316e70/typer-0.16.0.tar.gz", hash = "sha256:af377ffaee1dbe37ae9440cb4e8f11686ea5ce4e9bae01b84ae7c63b87f1dd3b", size = 102625, upload_time = "2025-05-26T14:30:31.824Z" } +sdist = { url = "https://files.pythonhosted.org/packages/03/ea/9cc57c3c627fd7a6a0907ea371019fe74c3ec00e3cf209a6864140a602ad/typer-0.19.1.tar.gz", hash = "sha256:cb881433a4b15dacc875bb0583d1a61e78497806741f9aba792abcab390c03e6", size = 104802 } wheels = [ - { url = "https://files.pythonhosted.org/packages/76/42/3efaf858001d2c2913de7f354563e3a3a2f0decae3efe98427125a8f441e/typer-0.16.0-py3-none-any.whl", hash = "sha256:1f79bed11d4d02d4310e3c1b7ba594183bcedb0ac73b27a9e5f28f6fb5b98855", size = 46317, upload_time = "2025-05-26T14:30:30.523Z" }, + { url = "https://files.pythonhosted.org/packages/1e/fa/6473c00b5eb26a2ba427813107699d3e6f4e1a4afad3f7494b17bdef3422/typer-0.19.1-py3-none-any.whl", hash = "sha256:914b2b39a1da4bafca5f30637ca26fa622a5bf9f515e5fdc772439f306d5682a", size = 46876 }, ] [[package]] name = "typing-extensions" -version = "4.14.1" +version = "4.15.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/98/5a/da40306b885cc8c09109dc2e1abd358d5684b1425678151cdaed4731c822/typing_extensions-4.14.1.tar.gz", hash = "sha256:38b39f4aeeab64884ce9f74c94263ef78f3c22467c8724005483154c26648d36", size = 107673, upload_time = "2025-07-04T13:28:34.16Z" } +sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391 } wheels = [ - { url = "https://files.pythonhosted.org/packages/b5/00/d631e67a838026495268c2f6884f3711a15a9a2a96cd244fdaea53b823fb/typing_extensions-4.14.1-py3-none-any.whl", hash = "sha256:d1e1e3b58374dc93031d6eda2420a48ea44a36c2b4766a4fdeb3710755731d76", size = 43906, upload_time = "2025-07-04T13:28:32.743Z" }, + { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614 }, ] [[package]] @@ -2986,83 +3179,83 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f8/b1/0c11f5058406b3af7609f121aaa6b609744687f1d158b3c3a5bf4cc94238/typing_inspection-0.4.1.tar.gz", hash = "sha256:6ae134cc0203c33377d43188d4064e9b357dba58cff3185f22924610e70a9d28", size = 75726, upload_time = "2025-05-21T18:55:23.885Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f8/b1/0c11f5058406b3af7609f121aaa6b609744687f1d158b3c3a5bf4cc94238/typing_inspection-0.4.1.tar.gz", hash = "sha256:6ae134cc0203c33377d43188d4064e9b357dba58cff3185f22924610e70a9d28", size = 75726 } wheels = [ - { url = "https://files.pythonhosted.org/packages/17/69/cd203477f944c353c31bade965f880aa1061fd6bf05ded0726ca845b6ff7/typing_inspection-0.4.1-py3-none-any.whl", hash = "sha256:389055682238f53b04f7badcb49b989835495a96700ced5dab2d8feae4b26f51", size = 14552, upload_time = "2025-05-21T18:55:22.152Z" }, + { url = "https://files.pythonhosted.org/packages/17/69/cd203477f944c353c31bade965f880aa1061fd6bf05ded0726ca845b6ff7/typing_inspection-0.4.1-py3-none-any.whl", hash = "sha256:389055682238f53b04f7badcb49b989835495a96700ced5dab2d8feae4b26f51", size = 14552 }, ] [[package]] name = "tzdata" version = "2025.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/95/32/1a225d6164441be760d75c2c42e2780dc0873fe382da3e98a2e1e48361e5/tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9", size = 196380, upload_time = "2025-03-23T13:54:43.652Z" } +sdist = { url = "https://files.pythonhosted.org/packages/95/32/1a225d6164441be760d75c2c42e2780dc0873fe382da3e98a2e1e48361e5/tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9", size = 196380 } wheels = [ - { url = "https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8", size = 347839, upload_time = "2025-03-23T13:54:41.845Z" }, + { url = "https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8", size = 347839 }, ] [[package]] name = "unidecode" version = "1.4.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/94/7d/a8a765761bbc0c836e397a2e48d498305a865b70a8600fd7a942e85dcf63/Unidecode-1.4.0.tar.gz", hash = "sha256:ce35985008338b676573023acc382d62c264f307c8f7963733405add37ea2b23", size = 200149, upload_time = "2025-04-24T08:45:03.798Z" } +sdist = { url = "https://files.pythonhosted.org/packages/94/7d/a8a765761bbc0c836e397a2e48d498305a865b70a8600fd7a942e85dcf63/Unidecode-1.4.0.tar.gz", hash = "sha256:ce35985008338b676573023acc382d62c264f307c8f7963733405add37ea2b23", size = 200149 } wheels = [ - { url = "https://files.pythonhosted.org/packages/8f/b7/559f59d57d18b44c6d1250d2eeaa676e028b9c527431f5d0736478a73ba1/Unidecode-1.4.0-py3-none-any.whl", hash = "sha256:c3c7606c27503ad8d501270406e345ddb480a7b5f38827eafe4fa82a137f0021", size = 235837, upload_time = "2025-04-24T08:45:01.609Z" }, + { url = "https://files.pythonhosted.org/packages/8f/b7/559f59d57d18b44c6d1250d2eeaa676e028b9c527431f5d0736478a73ba1/Unidecode-1.4.0-py3-none-any.whl", hash = "sha256:c3c7606c27503ad8d501270406e345ddb480a7b5f38827eafe4fa82a137f0021", size = 235837 }, ] [[package]] name = "urllib3" version = "2.5.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/15/22/9ee70a2574a4f4599c47dd506532914ce044817c7752a79b6a51286319bc/urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760", size = 393185, upload_time = "2025-06-18T14:07:41.644Z" } +sdist = { url = "https://files.pythonhosted.org/packages/15/22/9ee70a2574a4f4599c47dd506532914ce044817c7752a79b6a51286319bc/urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760", size = 393185 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795, upload_time = "2025-06-18T14:07:40.39Z" }, + { url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795 }, ] [[package]] name = "validators" version = "0.35.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/53/66/a435d9ae49850b2f071f7ebd8119dd4e84872b01630d6736761e6e7fd847/validators-0.35.0.tar.gz", hash = "sha256:992d6c48a4e77c81f1b4daba10d16c3a9bb0dbb79b3a19ea847ff0928e70497a", size = 73399, upload_time = "2025-05-01T05:42:06.7Z" } +sdist = { url = "https://files.pythonhosted.org/packages/53/66/a435d9ae49850b2f071f7ebd8119dd4e84872b01630d6736761e6e7fd847/validators-0.35.0.tar.gz", hash = "sha256:992d6c48a4e77c81f1b4daba10d16c3a9bb0dbb79b3a19ea847ff0928e70497a", size = 73399 } wheels = [ - { url = "https://files.pythonhosted.org/packages/fa/6e/3e955517e22cbdd565f2f8b2e73d52528b14b8bcfdb04f62466b071de847/validators-0.35.0-py3-none-any.whl", hash = "sha256:e8c947097eae7892cb3d26868d637f79f47b4a0554bc6b80065dfe5aac3705dd", size = 44712, upload_time = "2025-05-01T05:42:04.203Z" }, + { url = "https://files.pythonhosted.org/packages/fa/6e/3e955517e22cbdd565f2f8b2e73d52528b14b8bcfdb04f62466b071de847/validators-0.35.0-py3-none-any.whl", hash = "sha256:e8c947097eae7892cb3d26868d637f79f47b4a0554bc6b80065dfe5aac3705dd", size = 44712 }, ] [[package]] name = "virtualenv" -version = "20.31.2" +version = "20.34.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "distlib" }, { name = "filelock" }, { name = "platformdirs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/56/2c/444f465fb2c65f40c3a104fd0c495184c4f2336d65baf398e3c75d72ea94/virtualenv-20.31.2.tar.gz", hash = "sha256:e10c0a9d02835e592521be48b332b6caee6887f332c111aa79a09b9e79efc2af", size = 6076316, upload_time = "2025-05-08T17:58:23.811Z" } +sdist = { url = "https://files.pythonhosted.org/packages/1c/14/37fcdba2808a6c615681cd216fecae00413c9dab44fb2e57805ecf3eaee3/virtualenv-20.34.0.tar.gz", hash = "sha256:44815b2c9dee7ed86e387b842a84f20b93f7f417f95886ca1996a72a4138eb1a", size = 6003808 } wheels = [ - { url = "https://files.pythonhosted.org/packages/f3/40/b1c265d4b2b62b58576588510fc4d1fe60a86319c8de99fd8e9fec617d2c/virtualenv-20.31.2-py3-none-any.whl", hash = "sha256:36efd0d9650ee985f0cad72065001e66d49a6f24eb44d98980f630686243cf11", size = 6057982, upload_time = "2025-05-08T17:58:21.15Z" }, + { url = "https://files.pythonhosted.org/packages/76/06/04c8e804f813cf972e3262f3f8584c232de64f0cde9f703b46cf53a45090/virtualenv-20.34.0-py3-none-any.whl", hash = "sha256:341f5afa7eee943e4984a9207c025feedd768baff6753cd660c857ceb3e36026", size = 5983279 }, ] [[package]] name = "watchdog" version = "6.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/db/7d/7f3d619e951c88ed75c6037b246ddcf2d322812ee8ea189be89511721d54/watchdog-6.0.0.tar.gz", hash = "sha256:9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282", size = 131220, upload_time = "2024-11-01T14:07:13.037Z" } +sdist = { url = "https://files.pythonhosted.org/packages/db/7d/7f3d619e951c88ed75c6037b246ddcf2d322812ee8ea189be89511721d54/watchdog-6.0.0.tar.gz", hash = "sha256:9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282", size = 131220 } wheels = [ - { url = "https://files.pythonhosted.org/packages/39/ea/3930d07dafc9e286ed356a679aa02d777c06e9bfd1164fa7c19c288a5483/watchdog-6.0.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:bdd4e6f14b8b18c334febb9c4425a878a2ac20efd1e0b231978e7b150f92a948", size = 96471, upload_time = "2024-11-01T14:06:37.745Z" }, - { url = "https://files.pythonhosted.org/packages/12/87/48361531f70b1f87928b045df868a9fd4e253d9ae087fa4cf3f7113be363/watchdog-6.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c7c15dda13c4eb00d6fb6fc508b3c0ed88b9d5d374056b239c4ad1611125c860", size = 88449, upload_time = "2024-11-01T14:06:39.748Z" }, - { url = "https://files.pythonhosted.org/packages/5b/7e/8f322f5e600812e6f9a31b75d242631068ca8f4ef0582dd3ae6e72daecc8/watchdog-6.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6f10cb2d5902447c7d0da897e2c6768bca89174d0c6e1e30abec5421af97a5b0", size = 89054, upload_time = "2024-11-01T14:06:41.009Z" }, - { url = "https://files.pythonhosted.org/packages/68/98/b0345cabdce2041a01293ba483333582891a3bd5769b08eceb0d406056ef/watchdog-6.0.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:490ab2ef84f11129844c23fb14ecf30ef3d8a6abafd3754a6f75ca1e6654136c", size = 96480, upload_time = "2024-11-01T14:06:42.952Z" }, - { url = "https://files.pythonhosted.org/packages/85/83/cdf13902c626b28eedef7ec4f10745c52aad8a8fe7eb04ed7b1f111ca20e/watchdog-6.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:76aae96b00ae814b181bb25b1b98076d5fc84e8a53cd8885a318b42b6d3a5134", size = 88451, upload_time = "2024-11-01T14:06:45.084Z" }, - { url = "https://files.pythonhosted.org/packages/fe/c4/225c87bae08c8b9ec99030cd48ae9c4eca050a59bf5c2255853e18c87b50/watchdog-6.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a175f755fc2279e0b7312c0035d52e27211a5bc39719dd529625b1930917345b", size = 89057, upload_time = "2024-11-01T14:06:47.324Z" }, - { url = "https://files.pythonhosted.org/packages/a9/c7/ca4bf3e518cb57a686b2feb4f55a1892fd9a3dd13f470fca14e00f80ea36/watchdog-6.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7607498efa04a3542ae3e05e64da8202e58159aa1fa4acddf7678d34a35d4f13", size = 79079, upload_time = "2024-11-01T14:06:59.472Z" }, - { url = "https://files.pythonhosted.org/packages/5c/51/d46dc9332f9a647593c947b4b88e2381c8dfc0942d15b8edc0310fa4abb1/watchdog-6.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:9041567ee8953024c83343288ccc458fd0a2d811d6a0fd68c4c22609e3490379", size = 79078, upload_time = "2024-11-01T14:07:01.431Z" }, - { url = "https://files.pythonhosted.org/packages/d4/57/04edbf5e169cd318d5f07b4766fee38e825d64b6913ca157ca32d1a42267/watchdog-6.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:82dc3e3143c7e38ec49d61af98d6558288c415eac98486a5c581726e0737c00e", size = 79076, upload_time = "2024-11-01T14:07:02.568Z" }, - { url = "https://files.pythonhosted.org/packages/ab/cc/da8422b300e13cb187d2203f20b9253e91058aaf7db65b74142013478e66/watchdog-6.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:212ac9b8bf1161dc91bd09c048048a95ca3a4c4f5e5d4a7d1b1a7d5752a7f96f", size = 79077, upload_time = "2024-11-01T14:07:03.893Z" }, - { url = "https://files.pythonhosted.org/packages/2c/3b/b8964e04ae1a025c44ba8e4291f86e97fac443bca31de8bd98d3263d2fcf/watchdog-6.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:e3df4cbb9a450c6d49318f6d14f4bbc80d763fa587ba46ec86f99f9e6876bb26", size = 79078, upload_time = "2024-11-01T14:07:05.189Z" }, - { url = "https://files.pythonhosted.org/packages/62/ae/a696eb424bedff7407801c257d4b1afda455fe40821a2be430e173660e81/watchdog-6.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:2cce7cfc2008eb51feb6aab51251fd79b85d9894e98ba847408f662b3395ca3c", size = 79077, upload_time = "2024-11-01T14:07:06.376Z" }, - { url = "https://files.pythonhosted.org/packages/b5/e8/dbf020b4d98251a9860752a094d09a65e1b436ad181faf929983f697048f/watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:20ffe5b202af80ab4266dcd3e91aae72bf2da48c0d33bdb15c66658e685e94e2", size = 79078, upload_time = "2024-11-01T14:07:07.547Z" }, - { url = "https://files.pythonhosted.org/packages/07/f6/d0e5b343768e8bcb4cda79f0f2f55051bf26177ecd5651f84c07567461cf/watchdog-6.0.0-py3-none-win32.whl", hash = "sha256:07df1fdd701c5d4c8e55ef6cf55b8f0120fe1aef7ef39a1c6fc6bc2e606d517a", size = 79065, upload_time = "2024-11-01T14:07:09.525Z" }, - { url = "https://files.pythonhosted.org/packages/db/d9/c495884c6e548fce18a8f40568ff120bc3a4b7b99813081c8ac0c936fa64/watchdog-6.0.0-py3-none-win_amd64.whl", hash = "sha256:cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680", size = 79070, upload_time = "2024-11-01T14:07:10.686Z" }, - { url = "https://files.pythonhosted.org/packages/33/e8/e40370e6d74ddba47f002a32919d91310d6074130fe4e17dabcafc15cbf1/watchdog-6.0.0-py3-none-win_ia64.whl", hash = "sha256:a1914259fa9e1454315171103c6a30961236f508b9b623eae470268bbcc6a22f", size = 79067, upload_time = "2024-11-01T14:07:11.845Z" }, + { url = "https://files.pythonhosted.org/packages/39/ea/3930d07dafc9e286ed356a679aa02d777c06e9bfd1164fa7c19c288a5483/watchdog-6.0.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:bdd4e6f14b8b18c334febb9c4425a878a2ac20efd1e0b231978e7b150f92a948", size = 96471 }, + { url = "https://files.pythonhosted.org/packages/12/87/48361531f70b1f87928b045df868a9fd4e253d9ae087fa4cf3f7113be363/watchdog-6.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c7c15dda13c4eb00d6fb6fc508b3c0ed88b9d5d374056b239c4ad1611125c860", size = 88449 }, + { url = "https://files.pythonhosted.org/packages/5b/7e/8f322f5e600812e6f9a31b75d242631068ca8f4ef0582dd3ae6e72daecc8/watchdog-6.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6f10cb2d5902447c7d0da897e2c6768bca89174d0c6e1e30abec5421af97a5b0", size = 89054 }, + { url = "https://files.pythonhosted.org/packages/68/98/b0345cabdce2041a01293ba483333582891a3bd5769b08eceb0d406056ef/watchdog-6.0.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:490ab2ef84f11129844c23fb14ecf30ef3d8a6abafd3754a6f75ca1e6654136c", size = 96480 }, + { url = "https://files.pythonhosted.org/packages/85/83/cdf13902c626b28eedef7ec4f10745c52aad8a8fe7eb04ed7b1f111ca20e/watchdog-6.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:76aae96b00ae814b181bb25b1b98076d5fc84e8a53cd8885a318b42b6d3a5134", size = 88451 }, + { url = "https://files.pythonhosted.org/packages/fe/c4/225c87bae08c8b9ec99030cd48ae9c4eca050a59bf5c2255853e18c87b50/watchdog-6.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a175f755fc2279e0b7312c0035d52e27211a5bc39719dd529625b1930917345b", size = 89057 }, + { url = "https://files.pythonhosted.org/packages/a9/c7/ca4bf3e518cb57a686b2feb4f55a1892fd9a3dd13f470fca14e00f80ea36/watchdog-6.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7607498efa04a3542ae3e05e64da8202e58159aa1fa4acddf7678d34a35d4f13", size = 79079 }, + { url = "https://files.pythonhosted.org/packages/5c/51/d46dc9332f9a647593c947b4b88e2381c8dfc0942d15b8edc0310fa4abb1/watchdog-6.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:9041567ee8953024c83343288ccc458fd0a2d811d6a0fd68c4c22609e3490379", size = 79078 }, + { url = "https://files.pythonhosted.org/packages/d4/57/04edbf5e169cd318d5f07b4766fee38e825d64b6913ca157ca32d1a42267/watchdog-6.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:82dc3e3143c7e38ec49d61af98d6558288c415eac98486a5c581726e0737c00e", size = 79076 }, + { url = "https://files.pythonhosted.org/packages/ab/cc/da8422b300e13cb187d2203f20b9253e91058aaf7db65b74142013478e66/watchdog-6.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:212ac9b8bf1161dc91bd09c048048a95ca3a4c4f5e5d4a7d1b1a7d5752a7f96f", size = 79077 }, + { url = "https://files.pythonhosted.org/packages/2c/3b/b8964e04ae1a025c44ba8e4291f86e97fac443bca31de8bd98d3263d2fcf/watchdog-6.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:e3df4cbb9a450c6d49318f6d14f4bbc80d763fa587ba46ec86f99f9e6876bb26", size = 79078 }, + { url = "https://files.pythonhosted.org/packages/62/ae/a696eb424bedff7407801c257d4b1afda455fe40821a2be430e173660e81/watchdog-6.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:2cce7cfc2008eb51feb6aab51251fd79b85d9894e98ba847408f662b3395ca3c", size = 79077 }, + { url = "https://files.pythonhosted.org/packages/b5/e8/dbf020b4d98251a9860752a094d09a65e1b436ad181faf929983f697048f/watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:20ffe5b202af80ab4266dcd3e91aae72bf2da48c0d33bdb15c66658e685e94e2", size = 79078 }, + { url = "https://files.pythonhosted.org/packages/07/f6/d0e5b343768e8bcb4cda79f0f2f55051bf26177ecd5651f84c07567461cf/watchdog-6.0.0-py3-none-win32.whl", hash = "sha256:07df1fdd701c5d4c8e55ef6cf55b8f0120fe1aef7ef39a1c6fc6bc2e606d517a", size = 79065 }, + { url = "https://files.pythonhosted.org/packages/db/d9/c495884c6e548fce18a8f40568ff120bc3a4b7b99813081c8ac0c936fa64/watchdog-6.0.0-py3-none-win_amd64.whl", hash = "sha256:cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680", size = 79070 }, + { url = "https://files.pythonhosted.org/packages/33/e8/e40370e6d74ddba47f002a32919d91310d6074130fe4e17dabcafc15cbf1/watchdog-6.0.0-py3-none-win_ia64.whl", hash = "sha256:a1914259fa9e1454315171103c6a30961236f508b9b623eae470268bbcc6a22f", size = 79067 }, ] [[package]] @@ -3074,88 +3267,88 @@ dependencies = [ { name = "requests" }, { name = "tabulate" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d7/4a/f55695bd1c9f1996b675b6e9e980eef40ebdb5e4bf8774c059c31af6ade1/wbgapi-1.0.12.tar.gz", hash = "sha256:338c3c768bd120b80596b48fa0449ecabc93513ac989c55671dce579dbb3a5be", size = 33590, upload_time = "2022-07-05T15:07:22.772Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/4a/f55695bd1c9f1996b675b6e9e980eef40ebdb5e4bf8774c059c31af6ade1/wbgapi-1.0.12.tar.gz", hash = "sha256:338c3c768bd120b80596b48fa0449ecabc93513ac989c55671dce579dbb3a5be", size = 33590 } wheels = [ - { url = "https://files.pythonhosted.org/packages/00/12/224030af4886e119a3d03b709f7130e9601a4d15332e1d6a35671b25a4de/wbgapi-1.0.12-py3-none-any.whl", hash = "sha256:c5a1e1683b03d4264d287627c2562932f30e7f5c65509b812cb2e3de7d32633f", size = 36385, upload_time = "2022-07-05T15:07:20.606Z" }, + { url = "https://files.pythonhosted.org/packages/00/12/224030af4886e119a3d03b709f7130e9601a4d15332e1d6a35671b25a4de/wbgapi-1.0.12-py3-none-any.whl", hash = "sha256:c5a1e1683b03d4264d287627c2562932f30e7f5c65509b812cb2e3de7d32633f", size = 36385 }, ] [[package]] name = "wcwidth" version = "0.2.13" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6c/63/53559446a878410fc5a5974feb13d31d78d752eb18aeba59c7fef1af7598/wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5", size = 101301, upload_time = "2024-01-06T02:10:57.829Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6c/63/53559446a878410fc5a5974feb13d31d78d752eb18aeba59c7fef1af7598/wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5", size = 101301 } wheels = [ - { url = "https://files.pythonhosted.org/packages/fd/84/fd2ba7aafacbad3c4201d395674fc6348826569da3c0937e75505ead3528/wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859", size = 34166, upload_time = "2024-01-06T02:10:55.763Z" }, + { url = "https://files.pythonhosted.org/packages/fd/84/fd2ba7aafacbad3c4201d395674fc6348826569da3c0937e75505ead3528/wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859", size = 34166 }, ] [[package]] name = "webencodings" version = "0.5.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0b/02/ae6ceac1baeda530866a85075641cec12989bd8d31af6d5ab4a3e8c92f47/webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923", size = 9721, upload_time = "2017-04-05T20:21:34.189Z" } +sdist = { url = "https://files.pythonhosted.org/packages/0b/02/ae6ceac1baeda530866a85075641cec12989bd8d31af6d5ab4a3e8c92f47/webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923", size = 9721 } wheels = [ - { url = "https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", size = 11774, upload_time = "2017-04-05T20:21:32.581Z" }, + { url = "https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", size = 11774 }, ] [[package]] name = "wheel" version = "0.45.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8a/98/2d9906746cdc6a6ef809ae6338005b3f21bb568bea3165cfc6a243fdc25c/wheel-0.45.1.tar.gz", hash = "sha256:661e1abd9198507b1409a20c02106d9670b2576e916d58f520316666abca6729", size = 107545, upload_time = "2024-11-23T00:18:23.513Z" } +sdist = { url = "https://files.pythonhosted.org/packages/8a/98/2d9906746cdc6a6ef809ae6338005b3f21bb568bea3165cfc6a243fdc25c/wheel-0.45.1.tar.gz", hash = "sha256:661e1abd9198507b1409a20c02106d9670b2576e916d58f520316666abca6729", size = 107545 } wheels = [ - { url = "https://files.pythonhosted.org/packages/0b/2c/87f3254fd8ffd29e4c02732eee68a83a1d3c346ae39bc6822dcbcb697f2b/wheel-0.45.1-py3-none-any.whl", hash = "sha256:708e7481cc80179af0e556bbf0cc00b8444c7321e2700b8d8580231d13017248", size = 72494, upload_time = "2024-11-23T00:18:21.207Z" }, + { url = "https://files.pythonhosted.org/packages/0b/2c/87f3254fd8ffd29e4c02732eee68a83a1d3c346ae39bc6822dcbcb697f2b/wheel-0.45.1-py3-none-any.whl", hash = "sha256:708e7481cc80179af0e556bbf0cc00b8444c7321e2700b8d8580231d13017248", size = 72494 }, ] [[package]] name = "win32-setctime" version = "1.2.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b3/8f/705086c9d734d3b663af0e9bb3d4de6578d08f46b1b101c2442fd9aecaa2/win32_setctime-1.2.0.tar.gz", hash = "sha256:ae1fdf948f5640aae05c511ade119313fb6a30d7eabe25fef9764dca5873c4c0", size = 4867, upload_time = "2024-12-07T15:28:28.314Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b3/8f/705086c9d734d3b663af0e9bb3d4de6578d08f46b1b101c2442fd9aecaa2/win32_setctime-1.2.0.tar.gz", hash = "sha256:ae1fdf948f5640aae05c511ade119313fb6a30d7eabe25fef9764dca5873c4c0", size = 4867 } wheels = [ - { url = "https://files.pythonhosted.org/packages/e1/07/c6fe3ad3e685340704d314d765b7912993bcb8dc198f0e7a89382d37974b/win32_setctime-1.2.0-py3-none-any.whl", hash = "sha256:95d644c4e708aba81dc3704a116d8cbc974d70b3bdb8be1d150e36be6e9d1390", size = 4083, upload_time = "2024-12-07T15:28:26.465Z" }, + { url = "https://files.pythonhosted.org/packages/e1/07/c6fe3ad3e685340704d314d765b7912993bcb8dc198f0e7a89382d37974b/win32_setctime-1.2.0-py3-none-any.whl", hash = "sha256:95d644c4e708aba81dc3704a116d8cbc974d70b3bdb8be1d150e36be6e9d1390", size = 4083 }, ] [[package]] name = "xlrd" version = "2.0.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/07/5a/377161c2d3538d1990d7af382c79f3b2372e880b65de21b01b1a2b78691e/xlrd-2.0.2.tar.gz", hash = "sha256:08b5e25de58f21ce71dc7db3b3b8106c1fa776f3024c54e45b45b374e89234c9", size = 100167, upload_time = "2025-06-14T08:46:39.039Z" } +sdist = { url = "https://files.pythonhosted.org/packages/07/5a/377161c2d3538d1990d7af382c79f3b2372e880b65de21b01b1a2b78691e/xlrd-2.0.2.tar.gz", hash = "sha256:08b5e25de58f21ce71dc7db3b3b8106c1fa776f3024c54e45b45b374e89234c9", size = 100167 } wheels = [ - { url = "https://files.pythonhosted.org/packages/1a/62/c8d562e7766786ba6587d09c5a8ba9f718ed3fa8af7f4553e8f91c36f302/xlrd-2.0.2-py2.py3-none-any.whl", hash = "sha256:ea762c3d29f4cca48d82df517b6d89fbce4db3107f9d78713e48cd321d5c9aa9", size = 96555, upload_time = "2025-06-14T08:46:37.766Z" }, + { url = "https://files.pythonhosted.org/packages/1a/62/c8d562e7766786ba6587d09c5a8ba9f718ed3fa8af7f4553e8f91c36f302/xlrd-2.0.2-py2.py3-none-any.whl", hash = "sha256:ea762c3d29f4cca48d82df517b6d89fbce4db3107f9d78713e48cd321d5c9aa9", size = 96555 }, ] [[package]] name = "xlrd3" version = "1.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/79/db/88d8d49ddacc203956ecb98dc86c6ffeee6e933ef1f50da9b369de518f7f/xlrd3-1.1.0.tar.gz", hash = "sha256:20e6ed2e5f7f8b4ab61e30faffebceff6fab348332b4c915373f0a72742dc177", size = 58919847, upload_time = "2021-04-25T12:27:10.03Z" } +sdist = { url = "https://files.pythonhosted.org/packages/79/db/88d8d49ddacc203956ecb98dc86c6ffeee6e933ef1f50da9b369de518f7f/xlrd3-1.1.0.tar.gz", hash = "sha256:20e6ed2e5f7f8b4ab61e30faffebceff6fab348332b4c915373f0a72742dc177", size = 58919847 } wheels = [ - { url = "https://files.pythonhosted.org/packages/5d/08/fce745025e58f160e7dcb5a45d4d43eb0bd44c0d8851425be87ef90271fa/xlrd3-1.1.0-py2.py3-none-any.whl", hash = "sha256:8e8e808f938144e7936a6e07c1d57be7a0f6c6f5b37c9c67974b43246d8aacb6", size = 105268, upload_time = "2021-04-25T12:26:55.264Z" }, + { url = "https://files.pythonhosted.org/packages/5d/08/fce745025e58f160e7dcb5a45d4d43eb0bd44c0d8851425be87ef90271fa/xlrd3-1.1.0-py2.py3-none-any.whl", hash = "sha256:8e8e808f938144e7936a6e07c1d57be7a0f6c6f5b37c9c67974b43246d8aacb6", size = 105268 }, ] [[package]] name = "xlsx2csv" version = "0.8.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/36/20/94860286a308a4213581c1beacd4fc7be724250c03583fcff23aaa6107bb/xlsx2csv-0.8.4.tar.gz", hash = "sha256:2aa809888826f6af5b26c77fc7f613f2bbeada0d8cc09e5a58e0f59684bb6911", size = 221390, upload_time = "2024-11-19T17:06:07.818Z" } +sdist = { url = "https://files.pythonhosted.org/packages/36/20/94860286a308a4213581c1beacd4fc7be724250c03583fcff23aaa6107bb/xlsx2csv-0.8.4.tar.gz", hash = "sha256:2aa809888826f6af5b26c77fc7f613f2bbeada0d8cc09e5a58e0f59684bb6911", size = 221390 } wheels = [ - { url = "https://files.pythonhosted.org/packages/c4/c0/15c21556362c67f1155f3643a375d50ac67559b82c768e64e800a42a2577/xlsx2csv-0.8.4-py3-none-any.whl", hash = "sha256:52ab873fc7b2f2ca75d14aee8bd1985a9f5c1bcb3cc7b80df7a5d57a40a67473", size = 15904, upload_time = "2024-11-19T17:06:05.362Z" }, + { url = "https://files.pythonhosted.org/packages/c4/c0/15c21556362c67f1155f3643a375d50ac67559b82c768e64e800a42a2577/xlsx2csv-0.8.4-py3-none-any.whl", hash = "sha256:52ab873fc7b2f2ca75d14aee8bd1985a9f5c1bcb3cc7b80df7a5d57a40a67473", size = 15904 }, ] [[package]] name = "xlsxwriter" -version = "3.2.5" +version = "3.2.9" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a7/47/7704bac42ac6fe1710ae099b70e6a1e68ed173ef14792b647808c357da43/xlsxwriter-3.2.5.tar.gz", hash = "sha256:7e88469d607cdc920151c0ab3ce9cf1a83992d4b7bc730c5ffdd1a12115a7dbe", size = 213306, upload_time = "2025-06-17T08:59:14.619Z" } +sdist = { url = "https://files.pythonhosted.org/packages/46/2c/c06ef49dc36e7954e55b802a8b231770d286a9758b3d936bd1e04ce5ba88/xlsxwriter-3.2.9.tar.gz", hash = "sha256:254b1c37a368c444eac6e2f867405cc9e461b0ed97a3233b2ac1e574efb4140c", size = 215940 } wheels = [ - { url = "https://files.pythonhosted.org/packages/fa/34/a22e6664211f0c8879521328000bdcae9bf6dbafa94a923e531f6d5b3f73/xlsxwriter-3.2.5-py3-none-any.whl", hash = "sha256:4f4824234e1eaf9d95df9a8fe974585ff91d0f5e3d3f12ace5b71e443c1c6abd", size = 172347, upload_time = "2025-06-17T08:59:13.453Z" }, + { url = "https://files.pythonhosted.org/packages/3a/0c/3662f4a66880196a590b202f0db82d919dd2f89e99a27fadef91c4a33d41/xlsxwriter-3.2.9-py3-none-any.whl", hash = "sha256:9a5db42bc5dff014806c58a20b9eae7322a134abb6fce3c92c181bfb275ec5b3", size = 175315 }, ] [[package]] name = "xlwt" version = "1.3.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/06/97/56a6f56ce44578a69343449aa5a0d98eefe04085d69da539f3034e2cd5c1/xlwt-1.3.0.tar.gz", hash = "sha256:c59912717a9b28f1a3c2a98fd60741014b06b043936dcecbc113eaaada156c88", size = 153929, upload_time = "2017-08-22T06:47:16.498Z" } +sdist = { url = "https://files.pythonhosted.org/packages/06/97/56a6f56ce44578a69343449aa5a0d98eefe04085d69da539f3034e2cd5c1/xlwt-1.3.0.tar.gz", hash = "sha256:c59912717a9b28f1a3c2a98fd60741014b06b043936dcecbc113eaaada156c88", size = 153929 } wheels = [ - { url = "https://files.pythonhosted.org/packages/44/48/def306413b25c3d01753603b1a222a011b8621aed27cd7f89cbc27e6b0f4/xlwt-1.3.0-py2.py3-none-any.whl", hash = "sha256:a082260524678ba48a297d922cc385f58278b8aa68741596a87de01a9c628b2e", size = 99981, upload_time = "2017-08-22T06:47:15.281Z" }, + { url = "https://files.pythonhosted.org/packages/44/48/def306413b25c3d01753603b1a222a011b8621aed27cd7f89cbc27e6b0f4/xlwt-1.3.0-py2.py3-none-any.whl", hash = "sha256:a082260524678ba48a297d922cc385f58278b8aa68741596a87de01a9c628b2e", size = 99981 }, ] From 7f9bdea809396df317df863278629245c18071f9 Mon Sep 17 00:00:00 2001 From: Johannes HAMPP <42553970+euronion@users.noreply.github.com> Date: Thu, 6 Nov 2025 13:07:39 +0100 Subject: [PATCH 26/43] Docs readme (#75) * Add simple README * Add LICENSE for GitHub * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * doc: changes to README.md --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Fabrizio Finozzi --- LICENSE | 18 ++++++++ README.md | 124 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 142 insertions(+) create mode 100644 LICENSE create mode 100644 README.md diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..d817195d --- /dev/null +++ b/LICENSE @@ -0,0 +1,18 @@ +MIT License + +Copyright (c) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and +associated documentation files (the "Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial +portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT +LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO +EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 00000000..8e306d96 --- /dev/null +++ b/README.md @@ -0,0 +1,124 @@ +# technologydata + + + + + +A Python package to manage techno-economic assumptions for energy system models. + +## Overview + +`technologydata` is a Python package that supports the management of techno-economic assumptions for energy system models. +It provides a structured way to store, retrieve, and manipulate data related to various technologies used in energy systems, +including unit-ful parameters, currency conversions, inflation adjustment, and temporal modelling. + +In the future it will include pre-parsed data from common public data sources such NREL's ATB or DEA's Technology Catalogue. +For these datasources it will also include parsers that can be modified to extract data in a custom way. + +The goal of this package is to make energy system modelling easier and more efficient, +automating common tasks and transformations to reduce errors and allowing for easier data exchange between models. + +## Table of Contents + +1. [Background](#background) +2. [Install](#install) +3. [Usage](#usage) +4. [Maintainers](#maintainers) +5. [Thanks](#thanks) +6. [Contributing](#contributing) +7. [License](#license) + +## Background + +> Modelling is 10% science, 10% art, and 80% finding the right data and getting it into the right format. +> β€” Every energy modeller ever + +Modelling energy systems requires a lot of data. +Techno-economic data, i.e. data about the costs for building operating technologies and their technical +characteristics, is a key input to many energy system models today. + +Techno-economic data is usually collected from a variety of scattered sources and then manually processed +into the format required by a specific model. +This is repeated for every new modelling project, leading to a lot of duplicated effort. +The manual processing also carries a high risk of errors, which can lead to misleading results. + +When projects are finished, the processed data is often discarded, leading to a loss of valuable information. +In better cases, the processed data is also published along with the model results, but usually in a +non-standardised and non-machine-readable format and without information about the data provenance and processing steps. + +It sounds abstract, but if someone used cost assumptions for the US in 2015 USD, then there are many wrong ways +and a few right ways to convert these to e.g. EUR and adjust it for inflation to 2023. + +## Install + +The package is currently under development and not yet published to `PyPI` or `conda-forge`. + +To install the package locally from GitHub, first clone the package and then use `uv` to install it in editable mode: + +```bash +git clone https://github.com/open-energy-transition/technology-data/tree/prototype-2 +cd technology-data +git checkout prototype-2 +uv sync --group dev --group docs +``` + +## Usage + +Detailed usage instructions and examples can be found in the [documentation](https://technology-data--240.org.readthedocs.build/en/240/). + +To create a `Technology` object with some parameters and then adjust for inflation and convert to a different currency, you can use the following code: + +```python +from technologydata import Technology, Parameter + +tech = Technology( + name="Solar PV", + detailed_technology="Utility-scale PV", + region="USA", + year=2020, + parameters={ + "capital_cost": Parameter(value=600, unit="USD_2020/kW"), + "efficiency": Parameter(value=15, unit="percent"), + } +) + +tech = tech.to_currency("EUR_2023") +``` + +## Maintainers + +This repository is currently maintained by [Open Energy Transition](https://openenergytransition.org/) with the maintainers and developers being: + +- [euronion](https://github.com/euronion) +- [finozzifa](https://github.com/finozzifa) + +## Thanks + +Development of this prototype package would not have been possible without the funding from [Breakthrough Energy](https://www.breakthroughenergy.org/). + +## Contributing + +For contributing instructions, guidelines and our code of conduct, please refer to the [contributing section](https://technology-data--240.org.readthedocs.build/en/240/contributing/instructions/) in the documentation. + +## License + +This project is licensed under the [MIT License](LICENSES/MIT.txt). + +Primary data included in the repository may be licensed under specific terms. +Processed data included in the project is licensed under [Creative Commons Attribution 4.0 International (CC BY 4.0)](LICENSES/CC-BY-4.0.txt). + +To make it easier to identify which data is licensed under which terms, this repository follows the [REUSE](https://reuse.software/) specification. +This means you can find the license information for each file either located in its header or in [REUSE.toml](REUSE.toml). From 06d3f5f2105b5178954f4e23a62e71f46525e64e Mon Sep 17 00:00:00 2001 From: Fabrizio Finozzi <167071962+finozzifa@users.noreply.github.com> Date: Thu, 6 Nov 2025 14:51:16 +0100 Subject: [PATCH 27/43] code: skip three more unit tests (#76) --- test/test_source.py | 1 + test/test_source_collection.py | 1 + 2 files changed, 2 insertions(+) diff --git a/test/test_source.py b/test/test_source.py index 05985510..92fa313b 100644 --- a/test/test_source.py +++ b/test/test_source.py @@ -196,6 +196,7 @@ def test_ensure_in_wayback(self, example_source: technologydata.Source) -> None: assert example_source.url_date_archive is not None assert example_source.url_archive is not None + @pytest.mark.webarchive # type: ignore @pytest.mark.parametrize( "url_archived, source_path, source_title, expected_path", [ diff --git a/test/test_source_collection.py b/test/test_source_collection.py index f8503959..75c77cfb 100644 --- a/test/test_source_collection.py +++ b/test/test_source_collection.py @@ -81,6 +81,7 @@ def test_example_source_collection( assert example_source_collection.sources[0].authors == "Author 1" assert example_source_collection.sources[1].authors == "Author 2" + @pytest.mark.webarchive # type: ignore @pytest.mark.parametrize( "example_source_collection", [ From 6234d83bda54220507aa1a2f7e81e7b4e3ddd3e9 Mon Sep 17 00:00:00 2001 From: Fabrizio Finozzi <167071962+finozzifa@users.noreply.github.com> Date: Tue, 18 Nov 2025 15:08:35 +0100 Subject: [PATCH 28/43] Make output schema of `SourceCollection` and `TechnologyCollection` optional (#77) * code: make output schema optional * test new pydeflate version * code: re-vert back to older version of pydeflate * re-vert uvlock --- src/technologydata/source_collection.py | 23 ++++-- src/technologydata/technology_collection.py | 23 ++++-- test/test_source_collection.py | 81 +++++++++++++++------ test/test_technology_collection.py | 17 ++++- 4 files changed, 101 insertions(+), 43 deletions(-) diff --git a/src/technologydata/source_collection.py b/src/technologydata/source_collection.py index f4beb955..4e14d4f2 100644 --- a/src/technologydata/source_collection.py +++ b/src/technologydata/source_collection.py @@ -177,7 +177,10 @@ def to_csv(self, **kwargs: pathlib.Path | str | bool) -> None: output_dataframe.to_csv(**merged_kwargs) def to_json( - self, file_path: pathlib.Path, schema_path: pathlib.Path | None = None + self, + file_path: pathlib.Path, + schema_path: pathlib.Path | None = None, + output_schema: bool = False, ) -> None: """ Export the SourceCollection to a JSON file, together with a data schema. @@ -188,17 +191,21 @@ def to_json( The path to the JSON file to be created. schema_path : pathlib.Path The path to the JSON schema file to be created. By default, created with a `schema` suffix next to `file_path`. + output_schema : bool, default False + If True, generates a JSON schema file describing the data structure. + The schema will include field descriptions and type information. """ - if schema_path is None: - schema_path = file_path.with_suffix(".schema.json") + if output_schema: + if schema_path is None: + schema_path = file_path.with_suffix(".schema.json") - # Export the model's schema with descriptions to a dict - schema = self.model_json_schema() + # Export the model's schema with descriptions to a dict + schema = self.model_json_schema() - # Save the schema (which includes descriptions) to a JSON file - with open(schema_path, "w") as f: - json.dump(schema, f, indent=4) + # Save the schema (which includes descriptions) to a JSON file + with open(schema_path, "w") as f: + json.dump(schema, f, indent=4) with open(file_path, mode="w", encoding="utf-8") as jsonfile: json_data = self.model_dump_json(indent=4) # Convert to JSON string diff --git a/src/technologydata/technology_collection.py b/src/technologydata/technology_collection.py index 00b88005..5e7a56ab 100644 --- a/src/technologydata/technology_collection.py +++ b/src/technologydata/technology_collection.py @@ -178,7 +178,10 @@ def to_csv(self, **kwargs: pathlib.Path | str | bool) -> None: output_dataframe.to_csv(**merged_kwargs) def to_json( - self, file_path: pathlib.Path, schema_path: pathlib.Path | None = None + self, + file_path: pathlib.Path, + schema_path: pathlib.Path | None = None, + output_schema: bool = False, ) -> None: """ Export the TechnologyCollection to a JSON file, together with a data schema. @@ -189,17 +192,21 @@ def to_json( The path to the JSON file to be created. schema_path : pathlib.Path The path to the JSON schema file to be created. By default, created with a `schema` suffix next to `file_path`. + output_schema : bool, default False + If True, generates a JSON schema file describing the data structure. + The schema will include field descriptions and type information. """ - if schema_path is None: - schema_path = file_path.with_suffix(".schema.json") + if output_schema: + if schema_path is None: + schema_path = file_path.with_suffix(".schema.json") - # Export the model's schema with descriptions to a dict - schema = self.model_json_schema() + # Export the model's schema with descriptions to a dict + schema = self.model_json_schema() - # Save the schema (which includes descriptions) to a JSON file - with open(schema_path, "w") as f: - json.dump(schema, f, indent=4) + # Save the schema (which includes descriptions) to a JSON file + with open(schema_path, "w") as f: + json.dump(schema, f, indent=4) with open(file_path, mode="w", encoding="utf-8") as jsonfile: json_data = self.model_dump_json(indent=4) # Convert to JSON string diff --git a/test/test_source_collection.py b/test/test_source_collection.py index 75c77cfb..7ec6e7f9 100644 --- a/test/test_source_collection.py +++ b/test/test_source_collection.py @@ -164,39 +164,74 @@ def test_to_csv( assert output_file.is_file() output_file.unlink(missing_ok=True) + # python @pytest.mark.parametrize( - "example_source_collection", + "example_source_collection, output_schema", [ - [ - { - "source_title": "atb_nrel", - "source_authors": "NREL/ATB", - "source_url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", - "source_url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", - "source_url_date": "2025-05-22 15:08:02", - "source_url_date_archive": "2025-05-22 15:08:02", - }, - { - "source_title": "tech_data_generation", - "source_authors": "Danish Energy Agency", - "source_url": "https://ens.dk/media/3273/download", - "source_url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", - "source_url_date": "2025-05-06 16:02:04", - "source_url_date_archive": "2025-05-06 16:02:04", - }, - ], + ( + [ + { + "source_title": "atb_nrel", + "source_authors": "NREL/ATB", + "source_url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "source_url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "source_url_date": "2025-05-22 15:08:02", + "source_url_date_archive": "2025-05-22 15:08:02", + }, + { + "source_title": "tech_data_generation", + "source_authors": "Danish Energy Agency", + "source_url": "https://ens.dk/media/3273/download", + "source_url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", + "source_url_date": "2025-05-06 16:02:04", + "source_url_date_archive": "2025-05-06 16:02:04", + }, + ], + True, + ), + ( + [ + { + "source_title": "atb_nrel", + "source_authors": "NREL/ATB", + "source_url": "https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "source_url_archive": "https://web.archive.org/web/20250522150802/https://oedi-data-lake.s3.amazonaws.com/ATB/electricity/parquet/2024/v3.0.0/ATBe.parquet", + "source_url_date": "2025-05-22 15:08:02", + "source_url_date_archive": "2025-05-22 15:08:02", + }, + { + "source_title": "tech_data_generation", + "source_authors": "Danish Energy Agency", + "source_url": "https://ens.dk/media/3273/download", + "source_url_archive": "http://web.archive.org/web/20250506160204/https://ens.dk/media/3273/download", + "source_url_date": "2025-05-06 16:02:04", + "source_url_date_archive": "2025-05-06 16:02:04", + }, + ], + False, + ), ], indirect=["example_source_collection"], ) # type: ignore def test_to_json( - self, example_source_collection: technologydata.SourceCollection + self, + example_source_collection: technologydata.SourceCollection, + output_schema: bool, ) -> None: """Check if the example source collection is exported to JSON.""" output_file = pathlib.Path(path_cwd, "sources.json") schema_file = pathlib.Path(path_cwd, "sources.schema.json") - example_source_collection.to_json(pathlib.Path(output_file)) + + example_source_collection.to_json( + pathlib.Path(output_file), output_schema=output_schema + ) + assert output_file.is_file() - assert schema_file.is_file() + if output_schema: + assert schema_file.is_file() + else: + assert not schema_file.is_file() + output_file.unlink(missing_ok=True) schema_file.unlink(missing_ok=True) @@ -258,7 +293,7 @@ def test_from_json_to_json(self) -> None: source_collection = technologydata.SourceCollection.from_json(input_file) output_file = pathlib.Path("to_json_test.json") schema_file = pathlib.Path(path_cwd, "to_json_test.schema.json") - source_collection.to_json(output_file) + source_collection.to_json(output_file, output_schema=True) # Read files and strip trailing whitespace/newlines before comparing with open(input_file) as f1, open(output_file) as f2: assert f1.read().rstrip() == f2.read().rstrip(), "Files are not identical" diff --git a/test/test_technology_collection.py b/test/test_technology_collection.py index 57b0f609..84560d50 100644 --- a/test/test_technology_collection.py +++ b/test/test_technology_collection.py @@ -48,7 +48,11 @@ def test_to_dataframe(self) -> None: ) assert isinstance(technology_collection.to_dataframe(), pandas.DataFrame) - def test_to_json(self) -> None: + @pytest.mark.parametrize( + "output_schema", + [True, False], + ) # type: ignore + def test_to_json(self, output_schema: bool) -> None: """Check if to_json works as expected.""" input_file = pathlib.Path( path_cwd, @@ -62,9 +66,14 @@ def test_to_json(self) -> None: ) output_file = pathlib.Path(path_cwd, "technologies.json") schema_file = pathlib.Path(path_cwd, "technologies.schema.json") - technology_collection.to_json(pathlib.Path(output_file)) + technology_collection.to_json( + pathlib.Path(output_file), output_schema=output_schema + ) assert output_file.is_file() - assert schema_file.is_file() + if output_schema: + assert schema_file.is_file() + else: + assert not schema_file.is_file() output_file.unlink(missing_ok=True) schema_file.unlink(missing_ok=True) @@ -97,7 +106,7 @@ def test_from_json_to_json(self) -> None: ) output_file = pathlib.Path("to_json_test.json") schema_file = pathlib.Path(path_cwd, "to_json_test.schema.json") - technology_collection.to_json(output_file) + technology_collection.to_json(output_file, output_schema=True) # Read files and strip trailing whitespace/newlines before comparing with open(input_file) as f1, open(output_file) as f2: From 471b617c87aa2c53b72b19333d929f8ed4f7cd20 Mon Sep 17 00:00:00 2001 From: Fabrizio Finozzi <167071962+finozzifa@users.noreply.github.com> Date: Wed, 19 Nov 2025 13:25:36 +0100 Subject: [PATCH 29/43] Prototest DEA (#57) * code: add dea energy storage parser * code: add clean_parameter_string * add pre-commit checks * code: proceeding with the code * code: new stage of parser * add format_val_number * pre-commit update * code: update unit tests * code: correct small typo * code: update filtering * code: remove unnecessary print statements * code: add calamine * code: remove inplace * code: add explaination on column name - attributes * code: update ws column * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * code: update unit-par * code: update dea_energy_storage * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * pre-commit * code: correct units * code: re-order code * code: update parser * code: update the storage * code: update notes and code * code: express output_path * code: add argparse to dea_energy_storage.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * pre-commit check * code: added logger.info * code: update pct unit * code: add pydantic validator and filter on parameters * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * code: update code * code: ruff changes * code: update code with parameters re-set * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * json file: pre-commit * Update REUSE.toml Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * Update src/technologydata/package_data/dea_energy_storage/sources.json Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * Update src/technologydata/package_data/dea_energy_storage/sources.json Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * Update src/technologydata/package_data/dea_energy_storage/dea_energy_storage.py Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * code: update tests * code: update * doc: modify license owner for raw data * code: move method to commons * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * code: updates * code: entered capacity parameter * code: update unit test * code: remove unit test * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * code: re-add unit test and re-flag it as webarchive * remove unnecesary files * code: update test_dea_energy_storage --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> --- REUSE.toml | 14 + .../dea_energy_storage/dea_energy_storage.py | 691 + .../dea_energy_storage/sources.json | 12 + .../dea_energy_storage/technologies.json | 17508 ++++++++++++++++ ...chnology_datasheet_for_energy_storage.xlsx | Bin 0 -> 329612 bytes src/technologydata/technology.py | 3 - src/technologydata/utils/commons.py | 41 + test/test_commons.py | 17 + test/test_dea_energy_storage.py | 230 + 9 files changed, 18513 insertions(+), 3 deletions(-) create mode 100644 src/technologydata/package_data/dea_energy_storage/dea_energy_storage.py create mode 100644 src/technologydata/package_data/dea_energy_storage/sources.json create mode 100644 src/technologydata/package_data/dea_energy_storage/technologies.json create mode 100644 src/technologydata/package_data/raw/Technology_datasheet_for_energy_storage.xlsx create mode 100644 test/test_dea_energy_storage.py diff --git a/REUSE.toml b/REUSE.toml index 4633211e..7fb6048e 100644 --- a/REUSE.toml +++ b/REUSE.toml @@ -13,3 +13,17 @@ SPDX-License-Identifier = "MIT" path = ["test/test_data/**",] SPDX-FileCopyrightText = "The technology-data authors" SPDX-License-Identifier = "CC-BY-4.0" + +[[annotations]] +path = [ + "src/technologydata/package_data/dea_energy_storage/*.json", "src/technologydata/package_data/schemas/*.json" +] +SPDX-FileCopyrightText = "The technology-data authors" +SPDX-License-Identifier = "CC-BY-4.0" + +[[annotations]] +path = [ + "src/technologydata/package_data/raw/Technology_datasheet_for_energy_storage.xlsx" +] +SPDX-FileCopyrightText = "The Danish Energy Agency" +SPDX-License-Identifier = "CC-BY-4.0" diff --git a/src/technologydata/package_data/dea_energy_storage/dea_energy_storage.py b/src/technologydata/package_data/dea_energy_storage/dea_energy_storage.py new file mode 100644 index 00000000..da178dc8 --- /dev/null +++ b/src/technologydata/package_data/dea_energy_storage/dea_energy_storage.py @@ -0,0 +1,691 @@ +# SPDX-FileCopyrightText: The technology-data authors +# +# SPDX-License-Identifier: MIT + +""" +Data parser for the DEA energy storage data set. + +How to run: + From the repository root, execute: + python src/technologydata/package_data/dea_energy_storage/dea_energy_storage.py + +Configuration options (command-line arguments): + --num_digits Number of significant digits to round the values. Default: 4 + --store_source Store the source object on the Wayback Machine. Default: False + --filter_params Filter the parameters stored to technologies.json. Default: False + +Example: + python src/technologydata/package_data/dea_energy_storage/dea_energy_storage.py --num_digits 3 --store_source --filter_params + +""" + +import argparse +import logging +import pathlib +import re +import typing + +import pandas as pd +import pydantic + +from technologydata import ( + Commons, + Parameter, + Source, + SourceCollection, + Technology, + TechnologyCollection, +) + +path_cwd = pathlib.Path.cwd() + +logger = logging.getLogger(__name__) + + +def drop_invalid_rows(dataframe: pd.DataFrame) -> pd.DataFrame: + """ + Clean and filter a DataFrame by removing rows with invalid or incomplete data. + + This function performs multiple validation checks to ensure data quality: + - Removes rows with None or NaN values in critical columns + - Removes rows with empty or whitespace-only strings + - Filters rows based on specific data integrity criteria + - Discards rows where 'val' column contains comparator symbols or non-numeric values + + Parameters + ---------- + dataframe : pd.DataFrame + The input DataFrame to be cleaned and validated. + + Returns + ------- + pd.DataFrame + A new DataFrame with invalid rows removed, maintaining data integrity. + + Notes + ----- + Validation criteria include: + - Non-empty 'Technology', 'par', and 'val' columns + - 'year' column containing a valid 4-digit year + - 'val' column containing only numeric values (no comparator symbols) + + """ + # Create a copy to avoid modifying the original DataFrame + df_cleaned = dataframe.copy() + + # Validate column existence + required_columns = ["Technology", "par", "val", "year"] + missing_columns = [col for col in required_columns if col not in df_cleaned.columns] + if missing_columns: + raise ValueError(f"Missing required columns: {missing_columns}") + + # Remove rows with None or NaN values in critical columns + df_cleaned = df_cleaned.dropna(subset=required_columns) + + # Remove rows with empty or whitespace-only strings + for column in required_columns: + df_cleaned = df_cleaned[df_cleaned[column].astype(str).str.strip() != ""] + + # Filter rows with valid year (4 consecutive digits) + df_cleaned = df_cleaned[ + df_cleaned["year"].astype(str).str.contains(r"\d{4}", regex=True) + ] + + # Remove rows with comparator symbols or without digits in 'val' column + df_cleaned = df_cleaned[ + (~df_cleaned["val"].astype(str).str.contains(r"[<>≀β‰₯]", regex=True)) + & (df_cleaned["val"].astype(str).str.contains(r"\d", regex=True)) + ] + + return df_cleaned + + +@pydantic.validate_call +def clean_parameter_string(text_string: str) -> str: + """ + Remove any string between [] or [), any leading hyphen or double quotes from the input string. Lower-case all. + + Parameters + ---------- + text_string : str + input string to be cleaned. + + Returns + ------- + str + cleaned string with [] and [) and leading hyphen or double quotes removed. + + Examples + -------- + >>> clean_parameter_string("- Charge efficiency [%]") + charge efficiency + >>> clean_parameter_string("Energy storage capacity for one unit [MWh)") + energy storage capacity for one unit + + """ + # Remove leading hyphen + text_string = text_string.lstrip("-") + + # Remove content inside square brackets including the brackets themselves + result = re.sub(r"\[.*?\]", "", text_string) + + # Remove content inside square bracket and parenthesis including the brackets/parenthesis themselves + result = re.sub(r"\[.*?\)", "", result) + + # Remove extra spaces resulting from the removal and set all to lower case + result = re.sub(r"\s+", " ", result).strip().casefold() + + return result + + +@pydantic.validate_call +def clean_technology_string(tech_str: str) -> str: + """ + Clean a technology string by removing numeric patterns and standardizing case. + + This function pre-processes technology-related strings by: + - Removing three-digit numeric patterns (with optional letter) + - Stripping leading and trailing whitespace + - Converting to lowercase for case-insensitive comparison + + Parameters + ---------- + tech_str : str + Input technology string to be cleaned. + + Returns + ------- + str + Cleaned technology string with: + - Numeric patterns (like '123' or '456a') removed + - Whitespace stripped + - Converted to lowercase + + Raises + ------ + Exception + If string conversion or processing fails, logs the error and returns the original input. + + Examples + -------- + >>> clean_technology_string("143a Rock-based Carnot battery") + rock-based carnot battery + >>> clean_technology_string("Pit Thermal Energy Storage [PTES]") + pit thermal energy storage [ptes] + + """ + try: + # Remove three-digit patterns or three digits followed by a letter + return re.sub(r"^(\d{3}[a-zA-Z]?)", "", tech_str.strip()).strip().casefold() + except Exception as e: + logger.error(f"Error cleaning technology '{tech_str}': {e}") + return tech_str + + +@pydantic.validate_call +def format_val_number(input_value: str, num_decimals: int) -> float | None | typing.Any: + """ + Parse various number formats into a float value. + + Parameters + ---------- + input_value : str + The input number in different formats, such as: + - Scientific notation with "x10^": e.g., "2.84x10^23" + - Numbers with commas as decimal separators: e.g., "1,1" + num_decimals : int + Number of decimals + + Returns + ------- + float + The parsed numerical value as a float. + + Raises + ------ + ValueError + If the input cannot be parsed into a float. + + Examples + -------- + >>> format_val_number("1,1") + 1.1 + >>> format_val_numer("2.84Γ—10-27") + 2.84e-27 + + """ + s = str(input_value).strip() + + # Handle scientific notation like "2.84x10^23" + match = re.match(r"([+-]?\d*\.?\d+)Γ—10([+-]?\d+)", s) + if match: + base, exponent = match.groups() + return round(float(base), num_decimals) * (10 ** int(exponent)) + + # Replace comma with dot for decimal numbers + s = s.replace(",", ".") + try: + return round(float(s), num_decimals) + except ValueError: + raise ValueError(f"Cannot parse number from input: {input_value}") + + +@pydantic.validate_call +def extract_year(year_str: str) -> int | None: + """ + Extract the first year (integer) from a given input. + + Parameters + ---------- + year_str : str + Input value containing a potential year. + + Returns + ------- + int, None + Extracted first year. + + Examples + -------- + >>> extract_year('uncertainty (2050)') + 2050 + + """ + # Extract digits + digits = re.findall(r"\d+", year_str) + + # Convert to integer + return int(digits[0]) if digits else None + + +@pydantic.validate_call +def clean_est_string(est_str: str) -> str: + """ + Casefold the 'est' string, trim whitespace and replace `ctrl` with `control`. + + Parameters + ---------- + est_str : str + The input 'est' string to be cleaned. + + Returns + ------- + str + The cleaned 'est' string. + + Examples + -------- + >>> clean_est_string("Lower") + lower + >>> clean_est_string("ctrl") + control + + """ + if est_str == "ctrl": + cleaned_str = "control" + else: + cleaned_str = est_str.casefold().strip() + return cleaned_str + + +def standardize_units(series: pd.Series) -> pd.Series: + """ + Complete missing units based on parameter names and replace incorrect units. + + Parameters + ---------- + series : pandas.Series + A series containing two elements: [par, unit] + + Returns + ------- + pandas.Series + Updated series with completed and corrected unit. + + Notes + ----- + The following substitutions are driven by the `pint` documentation available + at https://github.com/hgrecco/pint/blob/master/pint/default_en.txt: + - "pct.": "percent", + - "m2": "meter**2", + - "m3": "meter**3", + + """ + par, unit = series + + # Mapping of parameters to their default units + param_unit_map = { + "energy storage capacity for one unit": "MWh", + "typical temperature difference in storage": "K", + "fixed o&m": "pct./year", + "lifetime in total number of cycles": "cycles", + "cycle life": "cycles", + } + + # Mapping of incorrect units to correct units + unit_corrections = { + "pct./period": "percent", + "⁰C": "C", + "Β°C": "C", + "pct./30sec": "pct.", + "m2": "meter**2", + "m3": "meter**3", + "MWhoutput": "MWh", + "hot/cold,K": "K", + "pct.investement": "percent", + "pct.investment": "percent", + "tank/": "", + "pct.": "percent", + } + + # Complete missing or empty units + if (not isinstance(unit, str)) or (unit.strip() == ""): + unit = param_unit_map.get(par, unit) + + # Replace wrong units + for incorrect, correct in unit_corrections.items(): + if incorrect == unit or incorrect in unit: + unit = unit.replace(incorrect, correct) + + return pd.Series([par, unit]) + + +def filter_parameters(dataframe: pd.DataFrame, filter_flag: bool) -> pd.DataFrame: + """ + Filter rows of a DataFrame by allowed technology parameters. + + Parameters + ---------- + dataframe : pandas.DataFrame + Input DataFrame containing at least a "Technology" column. + filter_flag : Boolean + If true, filter parameter `par` column + + Returns + ------- + pandas.DataFrame + The filtered DataFrame. The returned + DataFrame contains only rows where the `par` column is one of: + "technical lifetime", "fixed o&m", "specific investment", or + "variable o&m". + + """ + allowed_set = { + "technical lifetime", + "fixed o&m", + "specific investment", + "variable o&m", + "charge efficiency", + "discharge efficiency", + "capacity", + } + print("filter_flag", filter_flag) + if filter_flag: + # Filter the DataFrame based on the allowed set + df_filtered = dataframe[dataframe["par"].isin(allowed_set)].reset_index( + drop=True + ) + logger.info( + f"technologies.json contains a subset of the allowed parameters: {allowed_set}." + ) + else: + # Return the original DataFrame if filter_flag is False + df_filtered = dataframe + logger.info("All parameters are outputted to technologies.json") + return df_filtered + + +def build_technology_collection( + dataframe: pd.DataFrame, + sources_path: pathlib.Path, + store_source: bool = False, + output_schema: bool = False, +) -> TechnologyCollection: + """ + Compute a collection of technologies from a grouped DataFrame. + + Processes input DataFrame by grouping technologies and extracting their parameters, + creating Technology instances for each unique group. + + Parameters + ---------- + dataframe : pandas.DataFrame + Input DataFrame containing technology parameters. + Expected columns include: + - 'est': Estimation or case identifier + - 'year': Year of the technology + - 'ws': Workspace or technology identifier + - 'Technology': Detailed technology name + - 'par': Parameter name + - 'val': Parameter value + - 'unit': Parameter units + sources_path: pathlib.Path + Output path for storing the SourceCollection object + store_source: Optional[bool] + Flag to decide whether to store the source object on the Wayback Machine. Default False. + output_schema : Optional[bool] + Flag to decide whether to export the source collection schema. Default False. + + Returns + ------- + TechnologyCollection + A collection of Technology instances, each representing a unique + technology group with its associated parameters. + + Notes + ----- + - The function groups the DataFrame by 'est', 'year', 'ws', and 'Technology' + - For each group, it creates a dictionary of Parameters + - Each Technology is instantiated with group-specific attributes + + """ + list_techs = [] + + if store_source: + source = Source( + title="Technology Data for Energy storage (May 2025)", + authors="Danish Energy Agency", + url="https://ens.dk/media/6589/download", + url_date="2025-10-08 09:24:00", + ) + source.ensure_in_wayback() + sources = SourceCollection(sources=[source]) + sources.to_json(sources_path, output_schema=output_schema) + else: + sources = SourceCollection.from_json(sources_path) + + for (est, year, ws, technology_name), group in dataframe.groupby( + ["est", "year", "ws", "Technology"] + ): + parameters = {} + for _, row in group.iterrows(): + parameters[row["par"]] = Parameter( + magnitude=row["val"], + units=row["unit"], + sources=sources, + provenance="Parsed from Excel file", + ) + list_techs.append( + Technology( + name=ws, + region="EU", + year=year, + parameters=parameters, + case=est, + detailed_technology=technology_name, + ) + ) + return TechnologyCollection(technologies=list_techs) + + +@pydantic.validate_call +def parse_input_arguments() -> argparse.Namespace: + """ + Parse command line arguments. + + Returns + ------- + argparse.Namespace + Parsed command line arguments containing: + - Number of significant digits + - Store source flag + + """ + # Create the parser + parser = argparse.ArgumentParser( + description="Parse the DEA technology storage dataset", + formatter_class=argparse.RawTextHelpFormatter, + ) + + # Define arguments + parser.add_argument( + "--num_digits", + type=int, + default=4, + help="Name of significant digits to round the values. ", + ) + + parser.add_argument( + "--store_source", + action="store_true", + help="store_source, store the source object on the wayback machine. Default: false", + ) + + parser.add_argument( + "--filter_params", + action="store_true", + help="filter_params. Filter the parameters stored to technologies.json. Default: false", + ) + + parser.add_argument( + "--export_schema", + action="store_true", + help="export_schema. Export the Source/TechnologyCollection schemas. Default: false", + ) + + # Parse arguments + args = parser.parse_args() + + return args + + +if __name__ == "__main__": + # Parse input arguments + input_args = parse_input_arguments() + logger.info("Command line arguments parsed.") + + # Read the raw data + dea_energy_storage_file_path = pathlib.Path( + path_cwd, + "src", + "technologydata", + "package_data", + "raw", + "Technology_datasheet_for_energy_storage.xlsx", + ) + + dea_energy_storage_df = pd.read_excel( + dea_energy_storage_file_path, + sheet_name="alldata_flat", + engine="calamine", + dtype=str, + ) + logger.info("Input file read-in.") + + # Drop unnecessary rows + cleaned_df = drop_invalid_rows(dea_energy_storage_df) + logger.info("Unnecessary rows dropped.") + + # Clean technology (Technology) column + cleaned_df["Technology"] = cleaned_df["Technology"].apply(clean_technology_string) + + # Clean ws column + cleaned_df["ws"] = cleaned_df["ws"].apply(clean_technology_string) + logger.info("`Technology` and `ws` cleaned.") + + # Clean year column + cleaned_df["year"] = cleaned_df["year"].apply(extract_year) + logger.info("`year` column cleaned.") + + # Clean parameter (par) column + cleaned_df["par"] = cleaned_df["par"].apply(clean_parameter_string) + logger.info("`par` column cleaned.") + + # Complete missing units based on parameter names and replace incorrect units. + cleaned_df[["par", "unit"]] = cleaned_df[["par", "unit"]].apply( + standardize_units, axis=1 + ) + logger.info("Missing units added and wrong units replaced.") + + # Include priceyear in unit if applicable + cleaned_df["unit"] = cleaned_df.apply( + lambda row: Commons.update_unit_with_currency_year( + row["unit"], row["priceyear"] + ), + axis=1, + ) + logger.info("`priceyear` included in `unit` column.") + + # Format value (val) column + cleaned_df["val"] = cleaned_df["val"].apply( + lambda x: format_val_number(x, input_args.num_digits) + ) + logger.info("`val` column formatted.") + + # Replace "MEUR_2020" with "EUR_2020" and multiply val by 1_000_000 + mask_meur = cleaned_df["unit"].str.contains("MEUR_2020") + cleaned_df.loc[mask_meur, "unit"] = cleaned_df.loc[mask_meur, "unit"].str.replace( + "MEUR_2020", "EUR_2020" + ) + cleaned_df.loc[mask_meur, "val"] = ( + cleaned_df.loc[mask_meur, "val"] * 1_000_000.0 + ).round(input_args.num_digits) + + # Replace "kEUR_2020" with "EUR_2020" and multiply val by 1_000 + mask_lower_keur = cleaned_df["unit"].str.contains("kEUR_2020") + cleaned_df.loc[mask_lower_keur, "unit"] = cleaned_df.loc[ + mask_lower_keur, "unit" + ].str.replace("kEUR_2020", "EUR_2020") + cleaned_df.loc[mask_lower_keur, "val"] = ( + cleaned_df.loc[mask_lower_keur, "val"] * 1_000.0 + ).round(input_args.num_digits) + + # Replace "KEUR_2020" with "EUR_2020" and multiply val by 1_000 + mask_upper_keur = cleaned_df["unit"].str.contains("KEUR_2020") + cleaned_df.loc[mask_upper_keur, "unit"] = cleaned_df.loc[ + mask_upper_keur, "unit" + ].str.replace("KEUR_2020", "EUR_2020") + cleaned_df.loc[mask_upper_keur, "val"] = ( + cleaned_df.loc[mask_upper_keur, "val"] * 1_000.0 + ).round(input_args.num_digits) + + # Replace "mol/s/m/MPa1/2" with "mol/s/m/Pa" and multiply val by 1_000_000 + mask_mols = cleaned_df["unit"].str.contains("mol/s/m/MPa1/2") + cleaned_df.loc[mask_mols, "unit"] = cleaned_df.loc[mask_mols, "unit"].str.replace( + "mol/s/m/MPa1/2", "mol/s/m/Pa" + ) + cleaned_df.loc[mask_mols, "val"] = cleaned_df.loc[mask_mols, "val"] * 1_000_000.0 + + # Replace, in column `par`, `energy storage capacity for one unit` and `tank volume of example` with `capacity` + mask_capacity = cleaned_df["par"].isin( + [ + "energy storage capacity for one unit", + "tank volume of example", + ] + ) + cleaned_df.loc[mask_capacity, "par"] = "capacity" + + # Clean est column + cleaned_df["est"] = cleaned_df["est"].apply(clean_est_string) + logger.info("`est` column cleaned.") + + # Drop unnecessary columns + columns_to_drop = ["cat", "priceyear", "ref", "note"] + cleaned_df = cleaned_df.drop(columns=columns_to_drop, errors="ignore") + logger.info("Unnecessary columns dropped.") + + filtered_df = filter_parameters(cleaned_df, input_args.filter_params) + + # Build TechnologyCollection + dea_storage_path = pathlib.Path( + path_cwd, + "src", + "technologydata", + "package_data", + "dea_energy_storage", + ) + output_technologies_path = pathlib.Path( + dea_storage_path, + "technologies.json", + ) + output_sources_path = pathlib.Path( + dea_storage_path, + "sources.json", + ) + + tech_col = build_technology_collection( + filtered_df, + output_sources_path, + store_source=input_args.store_source, + output_schema=input_args.export_schema, + ) + logger.info("TechnologyCollection object instantiated.") + tech_col.to_json(output_technologies_path, output_schema=input_args.export_schema) + logger.info("TechnologyCollection object exported to json.") + + if input_args.export_schema: + # Move schema files if they exist + schema_folder = pathlib.Path( + path_cwd, "src", "technologydata", "package_data", "schemas" + ) + sources_schema = pathlib.Path(dea_storage_path, "sources.schema.json") + technologies_schema = pathlib.Path(dea_storage_path, "technologies.schema.json") + + schema_folder.mkdir(parents=True, exist_ok=True) + + if sources_schema.exists(): + sources_schema.rename(schema_folder / "sources.schema.json") + logger.info(f"Moved {sources_schema} to {schema_folder}") + if technologies_schema.exists(): + technologies_schema.rename(schema_folder / "technologies.schema.json") + logger.info(f"Moved {technologies_schema} to {schema_folder}") diff --git a/src/technologydata/package_data/dea_energy_storage/sources.json b/src/technologydata/package_data/dea_energy_storage/sources.json new file mode 100644 index 00000000..7b84d367 --- /dev/null +++ b/src/technologydata/package_data/dea_energy_storage/sources.json @@ -0,0 +1,12 @@ +{ + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] +} diff --git a/src/technologydata/package_data/dea_energy_storage/technologies.json b/src/technologydata/package_data/dea_energy_storage/technologies.json new file mode 100644 index 00000000..7d197591 --- /dev/null +++ b/src/technologydata/package_data/dea_energy_storage/technologies.json @@ -0,0 +1,17508 @@ +{ + "technologies": [ + { + "name": "caes", + "detailed_technology": "compressed air energy storage", + "case": "control", + "region": "EU", + "year": 2015, + "parameters": { + "charge efficiency": { + "magnitude": 80.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 69.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 3000.0, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 40.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 2615.964, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 680.576, + "units": "EUR_2020 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 2.616, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "hydrogen storage - caverns", + "detailed_technology": "hydrogen storage - caverns", + "case": "control", + "region": "EU", + "year": 2015, + "parameters": { + "charge efficiency": { + "magnitude": 0.99, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 1.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 150000.0, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 100.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 3000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "hydrogen storage - lohc", + "detailed_technology": "hydrogen storage - lohc", + "case": "control", + "region": "EU", + "year": 2015, + "parameters": { + "charge efficiency": { + "magnitude": 0.72, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 1.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 7.0, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 20.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 1000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "large hot water tank", + "detailed_technology": "large-scale hot water tanks (steel)", + "case": "control", + "region": "EU", + "year": 2015, + "parameters": { + "charge efficiency": { + "magnitude": 100.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 100.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 3000.0, + "units": "meter ** 3", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 40.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 8.807, + "units": "EUR_2020 / megawatt_hour / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 3036000.0, + "units": "EUR_2020 / gigawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "na-nicl2 battery", + "detailed_technology": "na-nicl2 battery", + "case": "control", + "region": "EU", + "year": 2015, + "parameters": { + "capacity": { + "magnitude": 4.43, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 15.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 1.5, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 1063000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.638, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "na-s battery", + "detailed_technology": "nas battery", + "case": "control", + "region": "EU", + "year": 2015, + "parameters": { + "capacity": { + "magnitude": 250.0, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 15.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 1.5, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 489000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 1.914, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "pumped hydro storage", + "detailed_technology": "pumped hydro storage", + "case": "control", + "region": "EU", + "year": 2015, + "parameters": { + "technical lifetime": { + "magnitude": 50.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 8507.2, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "small scale hot water tank", + "detailed_technology": "small-scale hot water tanks (steel)", + "case": "control", + "region": "EU", + "year": 2015, + "parameters": { + "charge efficiency": { + "magnitude": 100.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 100.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 90.0, + "units": "liter", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 30.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 51.203, + "units": "EUR_2020 / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 419.862, + "units": "EUR_2020 / kilowatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.614, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "flywheels", + "detailed_technology": "flywheels", + "case": "control", + "region": "EU", + "year": 2018, + "parameters": { + "charge efficiency": { + "magnitude": 99.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 99.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 0.1, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 20.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 797.55, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 174000.0, + "units": "EUR_2020 / megawatt", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "hydrogen storage - tanks", + "detailed_technology": "pressurized hydrogen gas storage system (compressor & type i tanks @ 200bar)", + "case": "control", + "region": "EU", + "year": 2019, + "parameters": { + "charge efficiency": { + "magnitude": 0.883, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 1.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 16.7, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 25.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 638.04, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 61000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "caes", + "detailed_technology": "compressed air energy storage", + "case": "control", + "region": "EU", + "year": 2020, + "parameters": { + "charge efficiency": { + "magnitude": 80.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 80.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 3000.0, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 40.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 2615.964, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 680.576, + "units": "EUR_2020 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 2.616, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "flywheels", + "detailed_technology": "flywheels", + "case": "control", + "region": "EU", + "year": 2020, + "parameters": { + "charge efficiency": { + "magnitude": 99.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 99.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 0.1, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 20.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 797.55, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 154000.0, + "units": "EUR_2020 / megawatt", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "hydrogen storage - caverns", + "detailed_technology": "hydrogen storage - caverns", + "case": "control", + "region": "EU", + "year": 2020, + "parameters": { + "charge efficiency": { + "magnitude": 0.99, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 1.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 150000.0, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 100.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 3000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "hydrogen storage - lohc", + "detailed_technology": "hydrogen storage - lohc", + "case": "control", + "region": "EU", + "year": 2020, + "parameters": { + "charge efficiency": { + "magnitude": 0.72, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 1.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 7.0, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 20.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 1000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "hydrogen storage - tanks", + "detailed_technology": "pressurized hydrogen gas storage system (compressor & type i tanks @ 200bar)", + "case": "control", + "region": "EU", + "year": 2020, + "parameters": { + "charge efficiency": { + "magnitude": 0.883, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 1.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 16.7, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 25.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 638.04, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 61000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "large hot water tank", + "detailed_technology": "large-scale hot water tanks (steel)", + "case": "control", + "region": "EU", + "year": 2020, + "parameters": { + "charge efficiency": { + "magnitude": 100.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 100.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 3000.0, + "units": "meter ** 3", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 40.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 8.807, + "units": "EUR_2020 / megawatt_hour / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 3036000.0, + "units": "EUR_2020 / gigawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "na-nicl2 battery", + "detailed_technology": "na-nicl2 battery", + "case": "control", + "region": "EU", + "year": 2020, + "parameters": { + "capacity": { + "magnitude": 4.15, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 17.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 1.5, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 447000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.638, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "na-s battery", + "detailed_technology": "nas battery", + "case": "control", + "region": "EU", + "year": 2020, + "parameters": { + "capacity": { + "magnitude": 300.0, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 19.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 1.5, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 393000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 1.914, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "ptes seasonal", + "detailed_technology": "pit thermal energy storage [ptes]", + "case": "control", + "region": "EU", + "year": 2020, + "parameters": { + "charge efficiency": { + "magnitude": 1.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 1.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 4500.0, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 20.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 2500000.0, + "units": "EUR_2020 / gigawatt_hour / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 1062000.0, + "units": "EUR_2020 / gigawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "pumped hydro storage", + "detailed_technology": "pumped hydro storage", + "case": "control", + "region": "EU", + "year": 2020, + "parameters": { + "technical lifetime": { + "magnitude": 50.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 8507.2, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "small scale hot water tank", + "detailed_technology": "small-scale hot water tanks (steel)", + "case": "control", + "region": "EU", + "year": 2020, + "parameters": { + "charge efficiency": { + "magnitude": 100.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 100.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 90.0, + "units": "liter", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 30.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 51.203, + "units": "EUR_2020 / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 419.862, + "units": "EUR_2020 / kilowatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.717, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "underground storage of gas", + "detailed_technology": "natural gas storage underground", + "case": "control", + "region": "EU", + "year": 2020, + "parameters": { + "capacity": { + "magnitude": 1100.0, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 1.27, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "vanadium redox flow battery", + "detailed_technology": "vanadium redox battery (vrb)", + "case": "control", + "region": "EU", + "year": 2020, + "parameters": { + "capacity": { + "magnitude": 0.5, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 20.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 6300.0, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 630000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "lithium ion battery", + "detailed_technology": "lithium-ion battery (utility-scale)", + "case": "control", + "region": "EU", + "year": 2025, + "parameters": { + "charge efficiency": { + "magnitude": 98.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 97.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 3.0, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 15.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 8352.0, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 288000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "molten salt carnot battery", + "detailed_technology": "carnot battery", + "case": "control", + "region": "EU", + "year": 2025, + "parameters": { + "charge efficiency": { + "magnitude": 98.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 95.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 500.0, + "units": "meter ** 3", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 25.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 2.0, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 92220.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 2.0, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "ptes seasonal", + "detailed_technology": "pit thermal energy storage [ptes]", + "case": "control", + "region": "EU", + "year": 2025, + "parameters": { + "charge efficiency": { + "magnitude": 1.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 1.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 4500.0, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 30.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 2500000.0, + "units": "EUR_2020 / gigawatt_hour / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 1062000.0, + "units": "EUR_2020 / gigawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "rock-based carnot battery", + "detailed_technology": "carnot battery", + "case": "control", + "region": "EU", + "year": 2025, + "parameters": { + "charge efficiency": { + "magnitude": 99.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 96.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 3000.0, + "units": "meter ** 3", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 25.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 13048.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "vanadium redox flow battery", + "detailed_technology": "vanadium redox battery (vrb)", + "case": "control", + "region": "EU", + "year": 2025, + "parameters": { + "capacity": { + "magnitude": 0.5, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 25.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 3975.0, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 530000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "caes", + "detailed_technology": "compressed air energy storage", + "case": "control", + "region": "EU", + "year": 2030, + "parameters": { + "charge efficiency": { + "magnitude": 84.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 84.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 3000.0, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 40.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 2615.964, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 680.576, + "units": "EUR_2020 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 2.616, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "flywheels", + "detailed_technology": "flywheels", + "case": "control", + "region": "EU", + "year": 2030, + "parameters": { + "charge efficiency": { + "magnitude": 99.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 99.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 0.1, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 25.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 797.55, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 145000.0, + "units": "EUR_2020 / megawatt", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "hydrogen storage - caverns", + "detailed_technology": "hydrogen storage - caverns", + "case": "control", + "region": "EU", + "year": 2030, + "parameters": { + "charge efficiency": { + "magnitude": 0.99, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 1.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 150000.0, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 100.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 2000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "hydrogen storage - lohc", + "detailed_technology": "hydrogen storage - lohc", + "case": "control", + "region": "EU", + "year": 2030, + "parameters": { + "charge efficiency": { + "magnitude": 0.74, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 1.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 7.0, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 20.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 1000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "hydrogen storage - tanks", + "detailed_technology": "pressurized hydrogen gas storage system (compressor & type i tanks @ 200bar)", + "case": "control", + "region": "EU", + "year": 2030, + "parameters": { + "charge efficiency": { + "magnitude": 0.89, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 1.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 16.7, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 30.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 531.7, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 48000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "large hot water tank", + "detailed_technology": "large-scale hot water tanks (steel)", + "case": "control", + "region": "EU", + "year": 2030, + "parameters": { + "charge efficiency": { + "magnitude": 100.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 100.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 3000.0, + "units": "meter ** 3", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 40.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 8.807, + "units": "EUR_2020 / megawatt_hour / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 3036000.0, + "units": "EUR_2020 / gigawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "lithium ion battery", + "detailed_technology": "lithium-ion battery (utility-scale)", + "case": "control", + "region": "EU", + "year": 2030, + "parameters": { + "charge efficiency": { + "magnitude": 98.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 97.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 3.6, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 20.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 8091.0, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 279000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "molten salt carnot battery", + "detailed_technology": "carnot battery", + "case": "control", + "region": "EU", + "year": 2030, + "parameters": { + "charge efficiency": { + "magnitude": 98.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 95.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 3000.0, + "units": "meter ** 3", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 25.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 1.5, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 62710.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 1.5, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "na-nicl2 battery", + "detailed_technology": "na-nicl2 battery", + "case": "control", + "region": "EU", + "year": 2030, + "parameters": { + "capacity": { + "magnitude": 4.15, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 23.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 1.5, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 276000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.638, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "na-s battery", + "detailed_technology": "nas battery", + "case": "control", + "region": "EU", + "year": 2030, + "parameters": { + "capacity": { + "magnitude": 300.0, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 24.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 1.5, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 245000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 1.914, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "ptes seasonal", + "detailed_technology": "pit thermal energy storage [ptes]", + "case": "control", + "region": "EU", + "year": 2030, + "parameters": { + "charge efficiency": { + "magnitude": 1.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 1.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 4500.0, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 30.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 2500000.0, + "units": "EUR_2020 / gigawatt_hour / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 1062000.0, + "units": "EUR_2020 / gigawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "pumped hydro storage", + "detailed_technology": "pumped hydro storage", + "case": "control", + "region": "EU", + "year": 2030, + "parameters": { + "technical lifetime": { + "magnitude": 50.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 8507.2, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "rock-based carnot battery", + "detailed_technology": "carnot battery", + "case": "control", + "region": "EU", + "year": 2030, + "parameters": { + "charge efficiency": { + "magnitude": 99.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 96.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 3000.0, + "units": "meter ** 3", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 25.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 12396.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "small scale hot water tank", + "detailed_technology": "small-scale hot water tanks (steel)", + "case": "control", + "region": "EU", + "year": 2030, + "parameters": { + "charge efficiency": { + "magnitude": 100.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 100.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 90.0, + "units": "liter", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 30.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 51.203, + "units": "EUR_2020 / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 419.862, + "units": "EUR_2020 / kilowatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 1.024, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "underground storage of gas", + "detailed_technology": "natural gas storage underground", + "case": "control", + "region": "EU", + "year": 2030, + "parameters": { + "capacity": { + "magnitude": 1100.0, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 1.27, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "vanadium redox flow battery", + "detailed_technology": "vanadium redox battery (vrb)", + "case": "control", + "region": "EU", + "year": 2030, + "parameters": { + "capacity": { + "magnitude": 0.6, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 30.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 4088.0, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 545000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "lithium ion battery", + "detailed_technology": "lithium-ion battery (utility-scale)", + "case": "control", + "region": "EU", + "year": 2035, + "parameters": { + "charge efficiency": { + "magnitude": 98.5, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 97.5, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 4.1, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 25.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 8139.0, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 281000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "molten salt carnot battery", + "detailed_technology": "carnot battery", + "case": "control", + "region": "EU", + "year": 2035, + "parameters": { + "charge efficiency": { + "magnitude": 98.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 95.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 3000.0, + "units": "meter ** 3", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 25.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 1.5, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 55332.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 1.5, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "ptes seasonal", + "detailed_technology": "pit thermal energy storage [ptes]", + "case": "control", + "region": "EU", + "year": 2035, + "parameters": { + "charge efficiency": { + "magnitude": 1.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 1.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 4500.0, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 30.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 2500000.0, + "units": "EUR_2020 / gigawatt_hour / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 1062000.0, + "units": "EUR_2020 / gigawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "rock-based carnot battery", + "detailed_technology": "carnot battery", + "case": "control", + "region": "EU", + "year": 2035, + "parameters": { + "charge efficiency": { + "magnitude": 99.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 96.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 3000.0, + "units": "meter ** 3", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 25.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 11776.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "vanadium redox flow battery", + "detailed_technology": "vanadium redox battery (vrb)", + "case": "control", + "region": "EU", + "year": 2035, + "parameters": { + "capacity": { + "magnitude": 0.63, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 30.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 3467.0, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 462000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "hydrogen storage - caverns", + "detailed_technology": "hydrogen storage - caverns", + "case": "control", + "region": "EU", + "year": 2040, + "parameters": { + "charge efficiency": { + "magnitude": 0.99, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 1.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 150000.0, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 100.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 2000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "hydrogen storage - lohc", + "detailed_technology": "hydrogen storage - lohc", + "case": "control", + "region": "EU", + "year": 2040, + "parameters": { + "charge efficiency": { + "magnitude": 0.75, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 1.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 7.0, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 20.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "hydrogen storage - tanks", + "detailed_technology": "pressurized hydrogen gas storage system (compressor & type i tanks @ 200bar)", + "case": "control", + "region": "EU", + "year": 2040, + "parameters": { + "charge efficiency": { + "magnitude": 0.896, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 1.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 16.7, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 30.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 531.7, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 29000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "large hot water tank", + "detailed_technology": "large-scale hot water tanks (steel)", + "case": "control", + "region": "EU", + "year": 2040, + "parameters": { + "charge efficiency": { + "magnitude": 100.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 100.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 3000.0, + "units": "meter ** 3", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 40.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 8.807, + "units": "EUR_2020 / megawatt_hour / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 3036000.0, + "units": "EUR_2020 / gigawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "lithium ion battery", + "detailed_technology": "lithium-ion battery (utility-scale)", + "case": "control", + "region": "EU", + "year": 2040, + "parameters": { + "charge efficiency": { + "magnitude": 98.5, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 97.5, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 4.5, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 30.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 8676.0, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 299000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "molten salt carnot battery", + "detailed_technology": "carnot battery", + "case": "control", + "region": "EU", + "year": 2040, + "parameters": { + "charge efficiency": { + "magnitude": 98.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 95.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 3000.0, + "units": "meter ** 3", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 25.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 1.0, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 48822.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 1.5, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "ptes seasonal", + "detailed_technology": "pit thermal energy storage [ptes]", + "case": "control", + "region": "EU", + "year": 2040, + "parameters": { + "charge efficiency": { + "magnitude": 1.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 1.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 4500.0, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 30.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 2500000.0, + "units": "EUR_2020 / gigawatt_hour / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 983000.0, + "units": "EUR_2020 / gigawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "rock-based carnot battery", + "detailed_technology": "carnot battery", + "case": "control", + "region": "EU", + "year": 2040, + "parameters": { + "charge efficiency": { + "magnitude": 99.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 96.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 3000.0, + "units": "meter ** 3", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 25.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 11187.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "small scale hot water tank", + "detailed_technology": "small-scale hot water tanks (steel)", + "case": "control", + "region": "EU", + "year": 2040, + "parameters": { + "charge efficiency": { + "magnitude": 100.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 100.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 90.0, + "units": "liter", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 30.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 51.203, + "units": "EUR_2020 / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 419.862, + "units": "EUR_2020 / kilowatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 1.229, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "underground storage of gas", + "detailed_technology": "natural gas storage underground", + "case": "control", + "region": "EU", + "year": 2040, + "parameters": { + "capacity": { + "magnitude": 1100.0, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 1.27, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "vanadium redox flow battery", + "detailed_technology": "vanadium redox battery (vrb)", + "case": "control", + "region": "EU", + "year": 2040, + "parameters": { + "capacity": { + "magnitude": 0.65, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 35.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 2927.0, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 390000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "caes", + "detailed_technology": "compressed air energy storage", + "case": "control", + "region": "EU", + "year": 2050, + "parameters": { + "charge efficiency": { + "magnitude": 85.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 85.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 3000.0, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 40.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 2615.964, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 680.576, + "units": "EUR_2020 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 2.616, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "flywheels", + "detailed_technology": "flywheels", + "case": "control", + "region": "EU", + "year": 2050, + "parameters": { + "charge efficiency": { + "magnitude": 99.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 99.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 0.1, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 25.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 797.55, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 139000.0, + "units": "EUR_2020 / megawatt", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "hydrogen storage - caverns", + "detailed_technology": "hydrogen storage - caverns", + "case": "control", + "region": "EU", + "year": 2050, + "parameters": { + "charge efficiency": { + "magnitude": 0.99, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 1.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 150000.0, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 100.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 1000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "hydrogen storage - lohc", + "detailed_technology": "hydrogen storage - lohc", + "case": "control", + "region": "EU", + "year": 2050, + "parameters": { + "charge efficiency": { + "magnitude": 0.75, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 1.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 7.0, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 20.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "hydrogen storage - tanks", + "detailed_technology": "pressurized hydrogen gas storage system (compressor & type i tanks @ 200bar)", + "case": "control", + "region": "EU", + "year": 2050, + "parameters": { + "charge efficiency": { + "magnitude": 0.902, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 1.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 16.7, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 30.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 425.36, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 22000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "large hot water tank", + "detailed_technology": "large-scale hot water tanks (steel)", + "case": "control", + "region": "EU", + "year": 2050, + "parameters": { + "charge efficiency": { + "magnitude": 100.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 100.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 3000.0, + "units": "meter ** 3", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 40.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 8.807, + "units": "EUR_2020 / megawatt_hour / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 3036000.0, + "units": "EUR_2020 / gigawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "lithium ion battery", + "detailed_technology": "lithium-ion battery (utility-scale)", + "case": "control", + "region": "EU", + "year": 2050, + "parameters": { + "charge efficiency": { + "magnitude": 98.5, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 97.5, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 4.8, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 30.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 9222.0, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 318000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "molten salt carnot battery", + "detailed_technology": "carnot battery", + "case": "control", + "region": "EU", + "year": 2050, + "parameters": { + "charge efficiency": { + "magnitude": 98.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 95.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 3000.0, + "units": "meter ** 3", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 25.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 1.0, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 38010.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 1.5, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "na-nicl2 battery", + "detailed_technology": "na-nicl2 battery", + "case": "control", + "region": "EU", + "year": 2050, + "parameters": { + "capacity": { + "magnitude": 4.15, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 23.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 1.5, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 245000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.638, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "na-s battery", + "detailed_technology": "nas battery", + "case": "control", + "region": "EU", + "year": 2050, + "parameters": { + "capacity": { + "magnitude": 300.0, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 24.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 1.5, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 213000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 1.914, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "ptes seasonal", + "detailed_technology": "pit thermal energy storage [ptes]", + "case": "control", + "region": "EU", + "year": 2050, + "parameters": { + "charge efficiency": { + "magnitude": 1.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 1.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 4500.0, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 30.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 2500000.0, + "units": "EUR_2020 / gigawatt_hour / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 903000.0, + "units": "EUR_2020 / gigawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "pumped hydro storage", + "detailed_technology": "pumped hydro storage", + "case": "control", + "region": "EU", + "year": 2050, + "parameters": { + "technical lifetime": { + "magnitude": 50.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 8507.2, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "rock-based carnot battery", + "detailed_technology": "carnot battery", + "case": "control", + "region": "EU", + "year": 2050, + "parameters": { + "charge efficiency": { + "magnitude": 99.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 96.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 3000.0, + "units": "meter ** 3", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 25.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 10068.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "small scale hot water tank", + "detailed_technology": "small-scale hot water tanks (steel)", + "case": "control", + "region": "EU", + "year": 2050, + "parameters": { + "charge efficiency": { + "magnitude": 100.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 100.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 90.0, + "units": "liter", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 30.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 51.203, + "units": "EUR_2020 / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 419.862, + "units": "EUR_2020 / kilowatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 1.229, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "underground storage of gas", + "detailed_technology": "natural gas storage underground", + "case": "control", + "region": "EU", + "year": 2050, + "parameters": { + "capacity": { + "magnitude": 1100.0, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 1.27, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "vanadium redox flow battery", + "detailed_technology": "vanadium redox battery (vrb)", + "case": "control", + "region": "EU", + "year": 2050, + "parameters": { + "capacity": { + "magnitude": 0.75, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 40.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 2388.0, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 318000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "caes", + "detailed_technology": "compressed air energy storage", + "case": "lower", + "region": "EU", + "year": 2020, + "parameters": { + "charge efficiency": { + "magnitude": 80.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 69.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 35.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 2126.8, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 319000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 2.127, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "flywheels", + "detailed_technology": "flywheels", + "case": "lower", + "region": "EU", + "year": 2020, + "parameters": { + "charge efficiency": { + "magnitude": 99.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 99.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 0.1, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 20.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 797.55, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 149000.0, + "units": "EUR_2020 / megawatt", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "hydrogen storage - caverns", + "detailed_technology": "hydrogen storage - caverns", + "case": "lower", + "region": "EU", + "year": 2020, + "parameters": { + "charge efficiency": { + "magnitude": 0.98, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 1.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 150000.0, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 100.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 3000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "hydrogen storage - lohc", + "detailed_technology": "hydrogen storage - lohc", + "case": "lower", + "region": "EU", + "year": 2020, + "parameters": { + "discharge efficiency": { + "magnitude": 1.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 7.0, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 20.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 1000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "hydrogen storage - tanks", + "detailed_technology": "pressurized hydrogen gas storage system (compressor & type i tanks @ 200bar)", + "case": "lower", + "region": "EU", + "year": 2020, + "parameters": { + "charge efficiency": { + "magnitude": 0.883, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 1.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 16.7, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 25.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 638.04, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 61000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "large hot water tank", + "detailed_technology": "large-scale hot water tanks (steel)", + "case": "lower", + "region": "EU", + "year": 2020, + "parameters": { + "charge efficiency": { + "magnitude": 100.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 100.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 1500.0, + "units": "meter ** 3", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 30.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 4.876, + "units": "EUR_2020 / megawatt_hour / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 2211000.0, + "units": "EUR_2020 / gigawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "na-nicl2 battery", + "detailed_technology": "na-nicl2 battery", + "case": "lower", + "region": "EU", + "year": 2020, + "parameters": { + "capacity": { + "magnitude": 3.11, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 9.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 0.9, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 340000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.425, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "na-s battery", + "detailed_technology": "nas battery", + "case": "lower", + "region": "EU", + "year": 2020, + "parameters": { + "capacity": { + "magnitude": 30.0, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 10.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 0.8, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 266000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.319, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "ptes seasonal", + "detailed_technology": "pit thermal energy storage [ptes]", + "case": "lower", + "region": "EU", + "year": 2020, + "parameters": { + "charge efficiency": { + "magnitude": 1.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 1.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 4500.0, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 20.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 2500000.0, + "units": "EUR_2020 / gigawatt_hour / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 903000.0, + "units": "EUR_2020 / gigawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "pumped hydro storage", + "detailed_technology": "pumped hydro storage", + "case": "lower", + "region": "EU", + "year": 2020, + "parameters": { + "fixed o&m": { + "magnitude": 6380.4, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "small scale hot water tank", + "detailed_technology": "small-scale hot water tanks (steel)", + "case": "lower", + "region": "EU", + "year": 2020, + "parameters": { + "charge efficiency": { + "magnitude": 100.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 100.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 50.0, + "units": "liter", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 15.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 25.601, + "units": "EUR_2020 / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 522.268, + "units": "EUR_2020 / kilowatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "molten salt carnot battery", + "detailed_technology": "carnot battery", + "case": "lower", + "region": "EU", + "year": 2025, + "parameters": { + "charge efficiency": { + "magnitude": 98.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 95.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 400.0, + "units": "meter ** 3", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 25.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 1.0, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 76125.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 1.0, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "rock-based carnot battery", + "detailed_technology": "carnot battery", + "case": "lower", + "region": "EU", + "year": 2025, + "parameters": { + "charge efficiency": { + "magnitude": 98.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 93.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 1000.0, + "units": "meter ** 3", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 25.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 5655.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "lithium ion battery", + "detailed_technology": "lithium-ion battery (utility-scale)", + "case": "lower", + "region": "EU", + "year": 2030, + "parameters": { + "charge efficiency": { + "magnitude": 98.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 97.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 3.0, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 8.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 5365.0, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 185000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "vanadium redox flow battery", + "detailed_technology": "vanadium redox battery (vrb)", + "case": "lower", + "region": "EU", + "year": 2030, + "parameters": { + "capacity": { + "magnitude": 0.5, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 25.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 2320.0, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 464000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "caes", + "detailed_technology": "compressed air energy storage", + "case": "lower", + "region": "EU", + "year": 2050, + "parameters": { + "charge efficiency": { + "magnitude": 80.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 80.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 3000.0, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 35.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 2126.8, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 584.87, + "units": "EUR_2020 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 2.127, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "flywheels", + "detailed_technology": "flywheels", + "case": "lower", + "region": "EU", + "year": 2050, + "parameters": { + "charge efficiency": { + "magnitude": 99.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 99.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 0.1, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 20.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 797.55, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 138000.0, + "units": "EUR_2020 / megawatt", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "hydrogen storage - caverns", + "detailed_technology": "hydrogen storage - caverns", + "case": "lower", + "region": "EU", + "year": 2050, + "parameters": { + "charge efficiency": { + "magnitude": 0.99, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 1.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 150000.0, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 100.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 2000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "hydrogen storage - lohc", + "detailed_technology": "hydrogen storage - lohc", + "case": "lower", + "region": "EU", + "year": 2050, + "parameters": { + "discharge efficiency": { + "magnitude": 1.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 7.0, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 20.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "hydrogen storage - tanks", + "detailed_technology": "pressurized hydrogen gas storage system (compressor & type i tanks @ 200bar)", + "case": "lower", + "region": "EU", + "year": 2050, + "parameters": { + "charge efficiency": { + "magnitude": 0.897, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 1.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 16.7, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 30.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 478.53, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 37000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "large hot water tank", + "detailed_technology": "large-scale hot water tanks (steel)", + "case": "lower", + "region": "EU", + "year": 2050, + "parameters": { + "charge efficiency": { + "magnitude": 100.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 100.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 1500.0, + "units": "meter ** 3", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 30.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 4.876, + "units": "EUR_2020 / megawatt_hour / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 2211000.0, + "units": "EUR_2020 / gigawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "lithium ion battery", + "detailed_technology": "lithium-ion battery (utility-scale)", + "case": "lower", + "region": "EU", + "year": 2050, + "parameters": { + "charge efficiency": { + "magnitude": 98.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 97.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 4.5, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 20.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 5755.0, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 198000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "molten salt carnot battery", + "detailed_technology": "carnot battery", + "case": "lower", + "region": "EU", + "year": 2050, + "parameters": { + "charge efficiency": { + "magnitude": 98.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 95.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 400.0, + "units": "meter ** 3", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 25.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 0.5, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 31377.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.05, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "na-nicl2 battery", + "detailed_technology": "na-nicl2 battery", + "case": "lower", + "region": "EU", + "year": 2050, + "parameters": { + "capacity": { + "magnitude": 3.11, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 12.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 0.9, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 191000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.425, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "na-s battery", + "detailed_technology": "nas battery", + "case": "lower", + "region": "EU", + "year": 2050, + "parameters": { + "capacity": { + "magnitude": 30.0, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 14.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 0.8, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 138000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.319, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "ptes seasonal", + "detailed_technology": "pit thermal energy storage [ptes]", + "case": "lower", + "region": "EU", + "year": 2050, + "parameters": { + "charge efficiency": { + "magnitude": 1.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 1.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 4500.0, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 30.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 2500000.0, + "units": "EUR_2020 / gigawatt_hour / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 744000.0, + "units": "EUR_2020 / gigawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "pumped hydro storage", + "detailed_technology": "pumped hydro storage", + "case": "lower", + "region": "EU", + "year": 2050, + "parameters": { + "fixed o&m": { + "magnitude": 6380.4, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "rock-based carnot battery", + "detailed_technology": "carnot battery", + "case": "lower", + "region": "EU", + "year": 2050, + "parameters": { + "charge efficiency": { + "magnitude": 98.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 93.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 1000.0, + "units": "meter ** 3", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 25.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 4364.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "small scale hot water tank", + "detailed_technology": "small-scale hot water tanks (steel)", + "case": "lower", + "region": "EU", + "year": 2050, + "parameters": { + "charge efficiency": { + "magnitude": 100.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 100.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 50.0, + "units": "liter", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 15.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 25.601, + "units": "EUR_2020 / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 522.268, + "units": "EUR_2020 / kilowatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "vanadium redox flow battery", + "detailed_technology": "vanadium redox battery (vrb)", + "case": "lower", + "region": "EU", + "year": 2050, + "parameters": { + "capacity": { + "magnitude": 0.7, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 30.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 743.0, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 186000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "caes", + "detailed_technology": "compressed air energy storage", + "case": "upper", + "region": "EU", + "year": 2020, + "parameters": { + "charge efficiency": { + "magnitude": 80.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 69.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 45.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 4253.6, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 1276000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 3.19, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "flywheels", + "detailed_technology": "flywheels", + "case": "upper", + "region": "EU", + "year": 2020, + "parameters": { + "charge efficiency": { + "magnitude": 99.5, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 99.5, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 0.1, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 25.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 797.55, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 160000.0, + "units": "EUR_2020 / megawatt", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "hydrogen storage - caverns", + "detailed_technology": "hydrogen storage - caverns", + "case": "upper", + "region": "EU", + "year": 2020, + "parameters": { + "charge efficiency": { + "magnitude": 0.99, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 1.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 150000.0, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 100.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 3000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "hydrogen storage - lohc", + "detailed_technology": "hydrogen storage - lohc", + "case": "upper", + "region": "EU", + "year": 2020, + "parameters": { + "discharge efficiency": { + "magnitude": 1.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 7.0, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 20.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 1000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "hydrogen storage - tanks", + "detailed_technology": "pressurized hydrogen gas storage system (compressor & type i tanks @ 200bar)", + "case": "upper", + "region": "EU", + "year": 2020, + "parameters": { + "charge efficiency": { + "magnitude": 0.883, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 1.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 16.7, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 25.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 638.04, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 61000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "large hot water tank", + "detailed_technology": "large-scale hot water tanks (steel)", + "case": "upper", + "region": "EU", + "year": 2020, + "parameters": { + "charge efficiency": { + "magnitude": 100.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 100.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 5000.0, + "units": "meter ** 3", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 50.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 34.135, + "units": "EUR_2020 / megawatt_hour / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 8177000.0, + "units": "EUR_2020 / gigawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "na-nicl2 battery", + "detailed_technology": "na-nicl2 battery", + "case": "upper", + "region": "EU", + "year": 2020, + "parameters": { + "capacity": { + "magnitude": 5.19, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 25.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 2.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 564000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 2.233, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "na-s battery", + "detailed_technology": "nas battery", + "case": "upper", + "region": "EU", + "year": 2020, + "parameters": { + "capacity": { + "magnitude": 3000.0, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 28.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 7.2, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 776000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 5.955, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "ptes seasonal", + "detailed_technology": "pit thermal energy storage [ptes]", + "case": "upper", + "region": "EU", + "year": 2020, + "parameters": { + "charge efficiency": { + "magnitude": 1.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 1.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 4500.0, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 40.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 2500000.0, + "units": "EUR_2020 / gigawatt_hour / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 1222000.0, + "units": "EUR_2020 / gigawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "pumped hydro storage", + "detailed_technology": "pumped hydro storage", + "case": "upper", + "region": "EU", + "year": 2020, + "parameters": { + "fixed o&m": { + "magnitude": 12760.8, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "small scale hot water tank", + "detailed_technology": "small-scale hot water tanks (steel)", + "case": "upper", + "region": "EU", + "year": 2020, + "parameters": { + "charge efficiency": { + "magnitude": 100.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 100.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 300.0, + "units": "liter", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 50.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 81.924, + "units": "EUR_2020 / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 133.127, + "units": "EUR_2020 / kilowatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.717, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "molten salt carnot battery", + "detailed_technology": "carnot battery", + "case": "upper", + "region": "EU", + "year": 2025, + "parameters": { + "charge efficiency": { + "magnitude": 98.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 95.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 500.0, + "units": "meter ** 3", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 25.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 3.0, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 108750.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 3.0, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "rock-based carnot battery", + "detailed_technology": "carnot battery", + "case": "upper", + "region": "EU", + "year": 2025, + "parameters": { + "charge efficiency": { + "magnitude": 99.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 97.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 5000.0, + "units": "meter ** 3", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 25.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 18096.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "lithium ion battery", + "detailed_technology": "lithium-ion battery (utility-scale)", + "case": "upper", + "region": "EU", + "year": 2030, + "parameters": { + "charge efficiency": { + "magnitude": 98.5, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 98.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 4.1, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 30.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 10254.0, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 354000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "vanadium redox flow battery", + "detailed_technology": "vanadium redox battery (vrb)", + "case": "upper", + "region": "EU", + "year": 2030, + "parameters": { + "capacity": { + "magnitude": 0.7, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 35.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 6557.0, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 656000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "caes", + "detailed_technology": "compressed air energy storage", + "case": "upper", + "region": "EU", + "year": 2050, + "parameters": { + "charge efficiency": { + "magnitude": 85.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 85.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 10000.0, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 45.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 4253.6, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 680.576, + "units": "EUR_2020 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 3.19, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "flywheels", + "detailed_technology": "flywheels", + "case": "upper", + "region": "EU", + "year": 2050, + "parameters": { + "charge efficiency": { + "magnitude": 99.5, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 99.5, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 0.15, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 25.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 797.55, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 149000.0, + "units": "EUR_2020 / megawatt", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "hydrogen storage - caverns", + "detailed_technology": "hydrogen storage - caverns", + "case": "upper", + "region": "EU", + "year": 2050, + "parameters": { + "charge efficiency": { + "magnitude": 0.99, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 1.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 150000.0, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 100.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 1000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "hydrogen storage - lohc", + "detailed_technology": "hydrogen storage - lohc", + "case": "upper", + "region": "EU", + "year": 2050, + "parameters": { + "discharge efficiency": { + "magnitude": 1.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 7.0, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 20.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "hydrogen storage - tanks", + "detailed_technology": "pressurized hydrogen gas storage system (compressor & type i tanks @ 200bar)", + "case": "upper", + "region": "EU", + "year": 2050, + "parameters": { + "charge efficiency": { + "magnitude": 0.902, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 1.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 16.7, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 30.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 319.02, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 22000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "large hot water tank", + "detailed_technology": "large-scale hot water tanks (steel)", + "case": "upper", + "region": "EU", + "year": 2050, + "parameters": { + "charge efficiency": { + "magnitude": 100.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 100.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 5000.0, + "units": "meter ** 3", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 50.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 34.135, + "units": "EUR_2020 / megawatt_hour / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 8177000.0, + "units": "EUR_2020 / gigawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "lithium ion battery", + "detailed_technology": "lithium-ion battery (utility-scale)", + "case": "upper", + "region": "EU", + "year": 2050, + "parameters": { + "charge efficiency": { + "magnitude": 99.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 98.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 5.0, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 30.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 11258.0, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 388000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "molten salt carnot battery", + "detailed_technology": "carnot battery", + "case": "upper", + "region": "EU", + "year": 2050, + "parameters": { + "charge efficiency": { + "magnitude": 98.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 95.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 4000.0, + "units": "meter ** 3", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 25.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 2.0, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 51521.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 2.5, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "na-nicl2 battery", + "detailed_technology": "na-nicl2 battery", + "case": "upper", + "region": "EU", + "year": 2050, + "parameters": { + "capacity": { + "magnitude": 5.19, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 33.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 2.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 319000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 2.233, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "na-s battery", + "detailed_technology": "nas battery", + "case": "upper", + "region": "EU", + "year": 2050, + "parameters": { + "capacity": { + "magnitude": 3000.0, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 36.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 7.2, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 415000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 5.955, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "ptes seasonal", + "detailed_technology": "pit thermal energy storage [ptes]", + "case": "upper", + "region": "EU", + "year": 2050, + "parameters": { + "charge efficiency": { + "magnitude": 1.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 1.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 4500.0, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 50.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 2500000.0, + "units": "EUR_2020 / gigawatt_hour / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 1062000.0, + "units": "EUR_2020 / gigawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "pumped hydro storage", + "detailed_technology": "pumped hydro storage", + "case": "upper", + "region": "EU", + "year": 2050, + "parameters": { + "fixed o&m": { + "magnitude": 12760.8, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "rock-based carnot battery", + "detailed_technology": "carnot battery", + "case": "upper", + "region": "EU", + "year": 2050, + "parameters": { + "charge efficiency": { + "magnitude": 99.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 97.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 5000.0, + "units": "meter ** 3", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 25.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 13964.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "small scale hot water tank", + "detailed_technology": "small-scale hot water tanks (steel)", + "case": "upper", + "region": "EU", + "year": 2050, + "parameters": { + "charge efficiency": { + "magnitude": 100.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "discharge efficiency": { + "magnitude": 100.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "capacity": { + "magnitude": 300.0, + "units": "liter", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 50.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 81.924, + "units": "EUR_2020 / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 133.127, + "units": "EUR_2020 / kilowatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 1.229, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + }, + { + "name": "vanadium redox flow battery", + "detailed_technology": "vanadium redox battery (vrb)", + "case": "upper", + "region": "EU", + "year": 2050, + "parameters": { + "capacity": { + "magnitude": 0.8, + "units": "megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "technical lifetime": { + "magnitude": 50.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "fixed o&m": { + "magnitude": 3875.0, + "units": "EUR_2020 / megawatt / year", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "specific investment": { + "magnitude": 388000.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + }, + "variable o&m": { + "magnitude": 0.0, + "units": "EUR_2020 / megawatt_hour", + "carrier": null, + "heating_value": null, + "provenance": "Parsed from Excel file", + "note": null, + "sources": { + "sources": [ + { + "title": "Technology Data for Energy storage (May 2025)", + "authors": "Danish Energy Agency", + "url": "https://ens.dk/media/6589/download", + "url_archive": "https://web.archive.org/web/20251008092400/https://ens.dk/media/6589/download", + "url_date": "2025-10-08 09:24:00", + "url_date_archive": "2025-10-08 09:24:00" + } + ] + } + } + } + } + ] +} diff --git a/src/technologydata/package_data/raw/Technology_datasheet_for_energy_storage.xlsx b/src/technologydata/package_data/raw/Technology_datasheet_for_energy_storage.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..dcdcff61d6b887ecad9e17aa530e9fa97c068064 GIT binary patch literal 329612 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%0ASwI4?*uUsAu? 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%0Ar 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 `jJhaap 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%0Dn1zYI>@u4N<-I17D?oj<#j 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 literal 0 HcmV?d00001 diff --git a/src/technologydata/technology.py b/src/technologydata/technology.py index 6f94a5cb..eafb5811 100644 --- a/src/technologydata/technology.py +++ b/src/technologydata/technology.py @@ -2,9 +2,6 @@ # # SPDX-License-Identifier: MIT - -# TODO replaceholder - """Technology class for representing a technology with parameters and transformation methods.""" from typing import Annotated, Any, Self diff --git a/src/technologydata/utils/commons.py b/src/technologydata/utils/commons.py index 9e91398f..64b829f9 100644 --- a/src/technologydata/utils/commons.py +++ b/src/technologydata/utils/commons.py @@ -10,9 +10,14 @@ from typing import Any import dateutil +import pandas as pd + +from technologydata.utils.units import CURRENCY_UNIT_PATTERN, get_iso3_to_currency_codes logger = logging.getLogger(__name__) +all_currency_codes = set(get_iso3_to_currency_codes().values()) + class DateFormatEnum(str, enum.Enum): """ @@ -267,3 +272,39 @@ def replace_special_characters(input_string: str) -> str: # Lower case the string replaced = replaced.casefold() return replaced + + @staticmethod + def update_unit_with_currency_year(unit: str, currency_year: str) -> str: + """ + Update unit string to include currency year for currency-based units. + + Parameters + ---------- + unit : str + A unit string + currency_year: str + A currency year string + + Returns + ------- + str + Updated unit + + """ + # Check if the units contain a currency-like string, defined as "{3-letter currency code}_{year as YYYY}" + matches = CURRENCY_UNIT_PATTERN.findall(unit) + + # Check if unit is a string, contains the currency, and currency_year is not null + if isinstance(unit, str) and pd.notna(currency_year): + for currency_code in all_currency_codes: + if ( + pd.notna(currency_code) + and currency_code in unit + and len(matches) == 0 + ): + # Replace currency with currency_currency_year + unit = unit.replace( + currency_code, f"{currency_code}_{currency_year}" + ) + + return unit diff --git a/test/test_commons.py b/test/test_commons.py index c242f863..1c302f56 100644 --- a/test/test_commons.py +++ b/test/test_commons.py @@ -151,3 +151,20 @@ def test_search_file_extension_in_url( technologydata.FileExtensionEnum.search_file_extension_in_url(input_string) == expected_string ) + + @pytest.mark.parametrize( + "input_unit, input_year, expected_string", + [ + ("EUR/kWh", "2020", "EUR_2020/kWh"), + ("USD/kWh", "2020", "USD_2020/kWh"), + ("USD_2023/kWh", "2020", "USD_2023/kWh"), + ], + ) # type: ignore + def test_update_unit_with_currency_year( + self, input_unit: str, input_year: str, expected_string: str + ) -> None: + """Check if update_unit_with_currency_year works as expected.""" + result = technologydata.Commons.update_unit_with_currency_year( + input_unit, input_year + ) + assert result == expected_string diff --git a/test/test_dea_energy_storage.py b/test/test_dea_energy_storage.py new file mode 100644 index 00000000..7a74e1ad --- /dev/null +++ b/test/test_dea_energy_storage.py @@ -0,0 +1,230 @@ +# SPDX-FileCopyrightText: The technology-data authors +# +# SPDX-License-Identifier: MIT + +"""Test the functions of the DEA energy storage parser.""" + +import pathlib +import typing + +import pandas +import pytest + +from technologydata.package_data.dea_energy_storage.dea_energy_storage import ( + build_technology_collection, + clean_est_string, + clean_parameter_string, + clean_technology_string, + drop_invalid_rows, + extract_year, + filter_parameters, + format_val_number, + standardize_units, +) + + +class TestDEAEnergyStorage: + """Test suite for the functions of the DEA energy storage parser.""" + + @pytest.mark.parametrize( + "input_string, expected_string", + [ + ("- Discharge efficiency [%]", "discharge efficiency"), + ("Construction time [years]", "construction time"), + ("- Another example [with brackets]", "another example"), + ("No brackets or hyphen here", "no brackets or hyphen here"), + ("- Another example [with brackets)", "another example"), + ], + ) # type: ignore + def test_clean_parameter_string( + self, input_string: str, expected_string: str + ) -> None: + """Check if the clean_parameter_string works as expected.""" + assert clean_parameter_string(input_string) == expected_string + + def test_drop_invalid_rows(self) -> None: + """Check if the drop_invalid_rows works as expected.""" + input_dataframe = pandas.DataFrame( + { + "Technology": ["AI", "", "ML", "new_tech", "Tech", "Tech_1", "Tech_2"], + "par": ["p1", "p2", "", "p4", None, "p5", "p6"], + "val": ["<1", " ", None, "abc", "456", "456,1", "1,1x10^3"], + "year": [ + "almost 2020", + "2021", + "2020", + "2022", + "", + "nearly 2020", + "2024", + ], + } + ) + expected_dataframe = pandas.DataFrame( + { + "Technology": ["Tech_1", "Tech_2"], + "par": ["p5", "p6"], + "val": ["456,1", "1,1x10^3"], + "year": ["nearly 2020", "2024"], + } + ) + output_dataframe = drop_invalid_rows(input_dataframe).reset_index(drop=True) + comparison_df = output_dataframe.compare(expected_dataframe) + assert comparison_df.empty + + @pytest.mark.parametrize( + "input_string, expected_string", + [ + ("192 string", "string"), + (" STRING 123 ", "string 123"), + (" string 123a ", "string 123a"), + (" 123b string ", "string"), + (" 123c ", ""), + ], + ) # type: ignore + def test_clean_technology_string( + self, input_string: str, expected_string: str + ) -> None: + """Check if clean_technology_string works as expected.""" + result = clean_technology_string(input_string) + assert result == expected_string + assert isinstance(result, str) + + @pytest.mark.parametrize( + "input_year, expected_year", + [ + ("some 1999", 1999), + ("maybe 1", 1), + ("1", 1), + ], + ) # type: ignore + def test_extract_year(self, input_year: str, expected_year: int) -> None: + """Check if extract_year works as expected.""" + result = extract_year(input_year) + assert result == expected_year + assert isinstance(result, int) + + @pytest.mark.parametrize( + "input_number, expected_number", + [ + ("1,1", 1.1), + ("1", 1.0), + ("1.31Γ—10-23", 1.31e-23), + ], + ) # type: ignore + def test_format_val_number( + self, input_number: str, expected_number: int | None | typing.Any + ) -> None: + """Check if format_val_number works as expected, including exception handling.""" + result = format_val_number(input_number, 2) + assert isinstance(result, float) + assert result == expected_number + + @pytest.mark.parametrize( + "input_string, expected_string", + [ + ("ctrl", "control"), + ("Upper", "upper"), + (" Yeah ", "yeah"), + ], + ) # type: ignore + def test_clean_est_string(self, input_string: str, expected_string: str) -> None: + """Check if clean_est_string works as expected.""" + result = clean_est_string(input_string) + assert isinstance(result, str) + assert result == expected_string + + def test_standardize_units(self) -> None: + """Check if standardize_units works as expected.""" + input_dataframe = pandas.DataFrame( + { + "par": [ + "energy storage capacity for one unit", + "typical temperature difference in storage", + "fixed o&m", + "lifetime in total number of cycles", + "cycle life", + "p1", + "p2", + "p3", + "p4", + "p5", + ], + "unit": [ + "", + "", + "", + None, + None, + "unit*pct./period", + "unit/⁰C", + "pct./30sec", + "m3", + "EUR_2020/tank/year", + ], + } + ) + expected_dataframe = pandas.DataFrame( + { + "par": [ + "energy storage capacity for one unit", + "typical temperature difference in storage", + "fixed o&m", + "lifetime in total number of cycles", + "cycle life", + "p1", + "p2", + "p3", + "p4", + "p5", + ], + "unit": [ + "MWh", + "K", + "percent/year", + "cycles", + "cycles", + "unit*percent", + "unit/C", + "percent", + "meter**3", + "EUR_2020/year", + ], + } + ) + input_dataframe[["par", "unit"]] = ( + input_dataframe[["par", "unit"]] + .apply(standardize_units, axis=1) + .reset_index(drop=True) + ) + comparison_df = input_dataframe.compare(expected_dataframe) + assert comparison_df.empty + + def test_filter_parameters_true_false(self) -> None: + """Check if filter_parameters works as expected.""" + dataframe = pandas.DataFrame( + {"par": ["technical lifetime", "other"], "Technology": ["A", "B"]} + ) + filtered = filter_parameters(dataframe, True) + assert all(filtered["par"] == "technical lifetime") + filtered2 = filter_parameters(dataframe, False) + assert len(filtered2) == 2 + + @pytest.mark.webarchive # type: ignore + def test_build_technology_collection(self, tmp_path: pathlib.Path) -> None: + """Check if build_technology_collection works as expected.""" + dataframe = pandas.DataFrame( + { + "est": ["base"], + "year": [2020], + "ws": ["Tech1"], + "Technology": ["Solar PV"], + "par": ["specific_investment"], + "val": [1000], + "unit": ["EUR_2020/kW"], + } + ) + sources_path = pathlib.Path(tmp_path, "sources.json") + tech_collection = build_technology_collection(dataframe, sources_path) + assert len(tech_collection.technologies) == 1 + assert "specific_investment" in tech_collection.technologies[0].parameters From 5d9c3de39d63c4a3bc3a5b314879a44e1a43f52d Mon Sep 17 00:00:00 2001 From: Fabrizio Finozzi <167071962+finozzifa@users.noreply.github.com> Date: Mon, 8 Dec 2025 16:57:12 +0100 Subject: [PATCH 30/43] Update pydeflate dependency (#79) --- .gitignore | 3 + pyproject.toml | 2 +- src/technologydata/utils/units.py | 2 + uv.lock | 2749 +++++++++++++++-------------- 4 files changed, 1430 insertions(+), 1326 deletions(-) diff --git a/.gitignore b/.gitignore index 63839d78..ff3150b2 100644 --- a/.gitignore +++ b/.gitignore @@ -75,3 +75,6 @@ coverage.xml # folder for misc developments dev/ + +# pydeflate cache +pydeflate_data/ diff --git a/pyproject.toml b/pyproject.toml index 7e168f7d..0303bd82 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -33,7 +33,7 @@ dependencies = [ "pandas>=2.2.3", "pint>=0.24.4", "pydantic>=2.11.7", - "pydeflate>=2.1.3", + "pydeflate>=2.3.3", "requests>=2.32.3", "savepagenow>=1.3.0", "scipy>=1.16.1", diff --git a/src/technologydata/utils/units.py b/src/technologydata/utils/units.py index 548d1ef9..47ce8131 100644 --- a/src/technologydata/utils/units.py +++ b/src/technologydata/utils/units.py @@ -20,6 +20,8 @@ logger = logging.getLogger(__name__) +pydeflate.set_pydeflate_path("./pydeflate_data") + CURRENCY_UNIT_PATTERN = re.compile(r"\b(?P[A-Z]{3})_(?P\d{4})\b") # Set up cache directory and file for currency codes diff --git a/uv.lock b/uv.lock index 6f09e707..2a4a3923 100644 --- a/uv.lock +++ b/uv.lock @@ -1,5 +1,5 @@ version = 1 -revision = 1 +revision = 2 requires-python = ">=3.12" resolution-markers = [ "python_full_version >= '3.14' and platform_python_implementation != 'PyPy'", @@ -11,59 +11,59 @@ resolution-markers = [ name = "annotated-types" version = "0.7.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081 } +sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081, upload_time = "2024-05-20T21:33:25.928Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643 }, + { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload_time = "2024-05-20T21:33:24.1Z" }, ] [[package]] name = "appnope" version = "0.1.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/35/5d/752690df9ef5b76e169e68d6a129fa6d08a7100ca7f754c89495db3c6019/appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee", size = 4170 } +sdist = { url = "https://files.pythonhosted.org/packages/35/5d/752690df9ef5b76e169e68d6a129fa6d08a7100ca7f754c89495db3c6019/appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee", size = 4170, upload_time = "2024-02-06T09:43:11.258Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/81/29/5ecc3a15d5a33e31b26c11426c45c501e439cb865d0bff96315d86443b78/appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c", size = 4321 }, + { url = "https://files.pythonhosted.org/packages/81/29/5ecc3a15d5a33e31b26c11426c45c501e439cb865d0bff96315d86443b78/appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c", size = 4321, upload_time = "2024-02-06T09:43:09.663Z" }, ] [[package]] name = "asttokens" version = "3.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/4a/e7/82da0a03e7ba5141f05cce0d302e6eed121ae055e0456ca228bf693984bc/asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7", size = 61978 } +sdist = { url = "https://files.pythonhosted.org/packages/4a/e7/82da0a03e7ba5141f05cce0d302e6eed121ae055e0456ca228bf693984bc/asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7", size = 61978, upload_time = "2024-11-30T04:30:14.439Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/25/8a/c46dcc25341b5bce5472c718902eb3d38600a903b14fa6aeecef3f21a46f/asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2", size = 26918 }, + { url = "https://files.pythonhosted.org/packages/25/8a/c46dcc25341b5bce5472c718902eb3d38600a903b14fa6aeecef3f21a46f/asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2", size = 26918, upload_time = "2024-11-30T04:30:10.946Z" }, ] [[package]] name = "attrs" version = "25.3.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5a/b0/1367933a8532ee6ff8d63537de4f1177af4bff9f3e829baf7331f595bb24/attrs-25.3.0.tar.gz", hash = "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b", size = 812032 } +sdist = { url = "https://files.pythonhosted.org/packages/5a/b0/1367933a8532ee6ff8d63537de4f1177af4bff9f3e829baf7331f595bb24/attrs-25.3.0.tar.gz", hash = "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b", size = 812032, upload_time = "2025-03-13T11:10:22.779Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/77/06/bb80f5f86020c4551da315d78b3ab75e8228f89f0162f2c3a819e407941a/attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3", size = 63815 }, + { url = "https://files.pythonhosted.org/packages/77/06/bb80f5f86020c4551da315d78b3ab75e8228f89f0162f2c3a819e407941a/attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3", size = 63815, upload_time = "2025-03-13T11:10:21.14Z" }, ] [[package]] name = "babel" version = "2.17.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7d/6b/d52e42361e1aa00709585ecc30b3f9684b3ab62530771402248b1b1d6240/babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d", size = 9951852 } +sdist = { url = "https://files.pythonhosted.org/packages/7d/6b/d52e42361e1aa00709585ecc30b3f9684b3ab62530771402248b1b1d6240/babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d", size = 9951852, upload_time = "2025-02-01T15:17:41.026Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2", size = 10182537 }, + { url = "https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2", size = 10182537, upload_time = "2025-02-01T15:17:37.39Z" }, ] [[package]] name = "backrefs" version = "5.9" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/eb/a7/312f673df6a79003279e1f55619abbe7daebbb87c17c976ddc0345c04c7b/backrefs-5.9.tar.gz", hash = "sha256:808548cb708d66b82ee231f962cb36faaf4f2baab032f2fbb783e9c2fdddaa59", size = 5765857 } +sdist = { url = "https://files.pythonhosted.org/packages/eb/a7/312f673df6a79003279e1f55619abbe7daebbb87c17c976ddc0345c04c7b/backrefs-5.9.tar.gz", hash = "sha256:808548cb708d66b82ee231f962cb36faaf4f2baab032f2fbb783e9c2fdddaa59", size = 5765857, upload_time = "2025-06-22T19:34:13.97Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/19/4d/798dc1f30468134906575156c089c492cf79b5a5fd373f07fe26c4d046bf/backrefs-5.9-py310-none-any.whl", hash = "sha256:db8e8ba0e9de81fcd635f440deab5ae5f2591b54ac1ebe0550a2ca063488cd9f", size = 380267 }, - { url = "https://files.pythonhosted.org/packages/55/07/f0b3375bf0d06014e9787797e6b7cc02b38ac9ff9726ccfe834d94e9991e/backrefs-5.9-py311-none-any.whl", hash = "sha256:6907635edebbe9b2dc3de3a2befff44d74f30a4562adbb8b36f21252ea19c5cf", size = 392072 }, - { url = "https://files.pythonhosted.org/packages/9d/12/4f345407259dd60a0997107758ba3f221cf89a9b5a0f8ed5b961aef97253/backrefs-5.9-py312-none-any.whl", hash = "sha256:7fdf9771f63e6028d7fee7e0c497c81abda597ea45d6b8f89e8ad76994f5befa", size = 397947 }, - { url = "https://files.pythonhosted.org/packages/10/bf/fa31834dc27a7f05e5290eae47c82690edc3a7b37d58f7fb35a1bdbf355b/backrefs-5.9-py313-none-any.whl", hash = "sha256:cc37b19fa219e93ff825ed1fed8879e47b4d89aa7a1884860e2db64ccd7c676b", size = 399843 }, - { url = "https://files.pythonhosted.org/packages/fc/24/b29af34b2c9c41645a9f4ff117bae860291780d73880f449e0b5d948c070/backrefs-5.9-py314-none-any.whl", hash = "sha256:df5e169836cc8acb5e440ebae9aad4bf9d15e226d3bad049cf3f6a5c20cc8dc9", size = 411762 }, - { url = "https://files.pythonhosted.org/packages/41/ff/392bff89415399a979be4a65357a41d92729ae8580a66073d8ec8d810f98/backrefs-5.9-py39-none-any.whl", hash = "sha256:f48ee18f6252b8f5777a22a00a09a85de0ca931658f1dd96d4406a34f3748c60", size = 380265 }, + { url = "https://files.pythonhosted.org/packages/19/4d/798dc1f30468134906575156c089c492cf79b5a5fd373f07fe26c4d046bf/backrefs-5.9-py310-none-any.whl", hash = "sha256:db8e8ba0e9de81fcd635f440deab5ae5f2591b54ac1ebe0550a2ca063488cd9f", size = 380267, upload_time = "2025-06-22T19:34:05.252Z" }, + { url = "https://files.pythonhosted.org/packages/55/07/f0b3375bf0d06014e9787797e6b7cc02b38ac9ff9726ccfe834d94e9991e/backrefs-5.9-py311-none-any.whl", hash = "sha256:6907635edebbe9b2dc3de3a2befff44d74f30a4562adbb8b36f21252ea19c5cf", size = 392072, upload_time = "2025-06-22T19:34:06.743Z" }, + { url = "https://files.pythonhosted.org/packages/9d/12/4f345407259dd60a0997107758ba3f221cf89a9b5a0f8ed5b961aef97253/backrefs-5.9-py312-none-any.whl", hash = "sha256:7fdf9771f63e6028d7fee7e0c497c81abda597ea45d6b8f89e8ad76994f5befa", size = 397947, upload_time = "2025-06-22T19:34:08.172Z" }, + { url = "https://files.pythonhosted.org/packages/10/bf/fa31834dc27a7f05e5290eae47c82690edc3a7b37d58f7fb35a1bdbf355b/backrefs-5.9-py313-none-any.whl", hash = "sha256:cc37b19fa219e93ff825ed1fed8879e47b4d89aa7a1884860e2db64ccd7c676b", size = 399843, upload_time = "2025-06-22T19:34:09.68Z" }, + { url = "https://files.pythonhosted.org/packages/fc/24/b29af34b2c9c41645a9f4ff117bae860291780d73880f449e0b5d948c070/backrefs-5.9-py314-none-any.whl", hash = "sha256:df5e169836cc8acb5e440ebae9aad4bf9d15e226d3bad049cf3f6a5c20cc8dc9", size = 411762, upload_time = "2025-06-22T19:34:11.037Z" }, + { url = "https://files.pythonhosted.org/packages/41/ff/392bff89415399a979be4a65357a41d92729ae8580a66073d8ec8d810f98/backrefs-5.9-py39-none-any.whl", hash = "sha256:f48ee18f6252b8f5777a22a00a09a85de0ca931658f1dd96d4406a34f3748c60", size = 380265, upload_time = "2025-06-22T19:34:12.405Z" }, ] [[package]] @@ -74,9 +74,9 @@ dependencies = [ { name = "soupsieve" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/85/2e/3e5079847e653b1f6dc647aa24549d68c6addb4c595cc0d902d1b19308ad/beautifulsoup4-4.13.5.tar.gz", hash = "sha256:5e70131382930e7c3de33450a2f54a63d5e4b19386eab43a5b34d594268f3695", size = 622954 } +sdist = { url = "https://files.pythonhosted.org/packages/85/2e/3e5079847e653b1f6dc647aa24549d68c6addb4c595cc0d902d1b19308ad/beautifulsoup4-4.13.5.tar.gz", hash = "sha256:5e70131382930e7c3de33450a2f54a63d5e4b19386eab43a5b34d594268f3695", size = 622954, upload_time = "2025-08-24T14:06:13.168Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/04/eb/f4151e0c7377a6e08a38108609ba5cede57986802757848688aeedd1b9e8/beautifulsoup4-4.13.5-py3-none-any.whl", hash = "sha256:642085eaa22233aceadff9c69651bc51e8bf3f874fb6d7104ece2beb24b47c4a", size = 105113 }, + { url = "https://files.pythonhosted.org/packages/04/eb/f4151e0c7377a6e08a38108609ba5cede57986802757848688aeedd1b9e8/beautifulsoup4-4.13.5-py3-none-any.whl", hash = "sha256:642085eaa22233aceadff9c69651bc51e8bf3f874fb6d7104ece2beb24b47c4a", size = 105113, upload_time = "2025-08-24T14:06:14.884Z" }, ] [[package]] @@ -86,9 +86,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "chardet" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a7/fe/7ebfec74d49f97fc55cd38240c7a7d08134002b1e14be8c3897c0dd5e49b/binaryornot-0.4.4.tar.gz", hash = "sha256:359501dfc9d40632edc9fac890e19542db1a287bbcfa58175b66658392018061", size = 371054 } +sdist = { url = "https://files.pythonhosted.org/packages/a7/fe/7ebfec74d49f97fc55cd38240c7a7d08134002b1e14be8c3897c0dd5e49b/binaryornot-0.4.4.tar.gz", hash = "sha256:359501dfc9d40632edc9fac890e19542db1a287bbcfa58175b66658392018061", size = 371054, upload_time = "2017-08-03T15:55:25.08Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/24/7e/f7b6f453e6481d1e233540262ccbfcf89adcd43606f44a028d7f5fae5eb2/binaryornot-0.4.4-py2.py3-none-any.whl", hash = "sha256:b8b71173c917bddcd2c16070412e369c3ed7f0528926f70cac18a6c97fd563e4", size = 9006 }, + { url = "https://files.pythonhosted.org/packages/24/7e/f7b6f453e6481d1e233540262ccbfcf89adcd43606f44a028d7f5fae5eb2/binaryornot-0.4.4-py2.py3-none-any.whl", hash = "sha256:b8b71173c917bddcd2c16070412e369c3ed7f0528926f70cac18a6c97fd563e4", size = 9006, upload_time = "2017-08-03T15:55:31.23Z" }, ] [[package]] @@ -98,9 +98,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "webencodings" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/76/9a/0e33f5054c54d349ea62c277191c020c2d6ef1d65ab2cb1993f91ec846d1/bleach-6.2.0.tar.gz", hash = "sha256:123e894118b8a599fd80d3ec1a6d4cc7ce4e5882b1317a7e1ba69b56e95f991f", size = 203083 } +sdist = { url = "https://files.pythonhosted.org/packages/76/9a/0e33f5054c54d349ea62c277191c020c2d6ef1d65ab2cb1993f91ec846d1/bleach-6.2.0.tar.gz", hash = "sha256:123e894118b8a599fd80d3ec1a6d4cc7ce4e5882b1317a7e1ba69b56e95f991f", size = 203083, upload_time = "2024-10-29T18:30:40.477Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fc/55/96142937f66150805c25c4d0f31ee4132fd33497753400734f9dfdcbdc66/bleach-6.2.0-py3-none-any.whl", hash = "sha256:117d9c6097a7c3d22fd578fcd8d35ff1e125df6736f554da4e432fdd63f31e5e", size = 163406 }, + { url = "https://files.pythonhosted.org/packages/fc/55/96142937f66150805c25c4d0f31ee4132fd33497753400734f9dfdcbdc66/bleach-6.2.0-py3-none-any.whl", hash = "sha256:117d9c6097a7c3d22fd578fcd8d35ff1e125df6736f554da4e432fdd63f31e5e", size = 163406, upload_time = "2024-10-29T18:30:38.186Z" }, ] [package.optional-dependencies] @@ -112,9 +112,9 @@ css = [ name = "boolean-py" version = "5.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c4/cf/85379f13b76f3a69bca86b60237978af17d6aa0bc5998978c3b8cf05abb2/boolean_py-5.0.tar.gz", hash = "sha256:60cbc4bad079753721d32649545505362c754e121570ada4658b852a3a318d95", size = 37047 } +sdist = { url = "https://files.pythonhosted.org/packages/c4/cf/85379f13b76f3a69bca86b60237978af17d6aa0bc5998978c3b8cf05abb2/boolean_py-5.0.tar.gz", hash = "sha256:60cbc4bad079753721d32649545505362c754e121570ada4658b852a3a318d95", size = 37047, upload_time = "2025-04-03T10:39:49.734Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e5/ca/78d423b324b8d77900030fa59c4aa9054261ef0925631cd2501dd015b7b7/boolean_py-5.0-py3-none-any.whl", hash = "sha256:ef28a70bd43115208441b53a045d1549e2f0ec6e3d08a9d142cbc41c1938e8d9", size = 26577 }, + { url = "https://files.pythonhosted.org/packages/e5/ca/78d423b324b8d77900030fa59c4aa9054261ef0925631cd2501dd015b7b7/boolean_py-5.0-py3-none-any.whl", hash = "sha256:ef28a70bd43115208441b53a045d1549e2f0ec6e3d08a9d142cbc41c1938e8d9", size = 26577, upload_time = "2025-04-03T10:39:48.449Z" }, ] [[package]] @@ -124,9 +124,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cffi" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/70/c5/1a4dc131459e68a173cbdab5fad6b524f53f9c1ef7861b7698e998b837cc/cairocffi-1.7.1.tar.gz", hash = "sha256:2e48ee864884ec4a3a34bfa8c9ab9999f688286eb714a15a43ec9d068c36557b", size = 88096 } +sdist = { url = "https://files.pythonhosted.org/packages/70/c5/1a4dc131459e68a173cbdab5fad6b524f53f9c1ef7861b7698e998b837cc/cairocffi-1.7.1.tar.gz", hash = "sha256:2e48ee864884ec4a3a34bfa8c9ab9999f688286eb714a15a43ec9d068c36557b", size = 88096, upload_time = "2024-06-18T10:56:06.741Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/93/d8/ba13451aa6b745c49536e87b6bf8f629b950e84bd0e8308f7dc6883b67e2/cairocffi-1.7.1-py3-none-any.whl", hash = "sha256:9803a0e11f6c962f3b0ae2ec8ba6ae45e957a146a004697a1ac1bbf16b073b3f", size = 75611 }, + { url = "https://files.pythonhosted.org/packages/93/d8/ba13451aa6b745c49536e87b6bf8f629b950e84bd0e8308f7dc6883b67e2/cairocffi-1.7.1-py3-none-any.whl", hash = "sha256:9803a0e11f6c962f3b0ae2ec8ba6ae45e957a146a004697a1ac1bbf16b073b3f", size = 75611, upload_time = "2024-06-18T10:55:59.489Z" }, ] [[package]] @@ -140,18 +140,31 @@ dependencies = [ { name = "pillow" }, { name = "tinycss2" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ab/b9/5106168bd43d7cd8b7cc2a2ee465b385f14b63f4c092bb89eee2d48c8e67/cairosvg-2.8.2.tar.gz", hash = "sha256:07cbf4e86317b27a92318a4cac2a4bb37a5e9c1b8a27355d06874b22f85bef9f", size = 8398590 } +sdist = { url = "https://files.pythonhosted.org/packages/ab/b9/5106168bd43d7cd8b7cc2a2ee465b385f14b63f4c092bb89eee2d48c8e67/cairosvg-2.8.2.tar.gz", hash = "sha256:07cbf4e86317b27a92318a4cac2a4bb37a5e9c1b8a27355d06874b22f85bef9f", size = 8398590, upload_time = "2025-05-15T06:56:32.653Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/67/48/816bd4aaae93dbf9e408c58598bc32f4a8c65f4b86ab560864cb3ee60adb/cairosvg-2.8.2-py3-none-any.whl", hash = "sha256:eab46dad4674f33267a671dce39b64be245911c901c70d65d2b7b0821e852bf5", size = 45773 }, + { url = "https://files.pythonhosted.org/packages/67/48/816bd4aaae93dbf9e408c58598bc32f4a8c65f4b86ab560864cb3ee60adb/cairosvg-2.8.2-py3-none-any.whl", hash = "sha256:eab46dad4674f33267a671dce39b64be245911c901c70d65d2b7b0821e852bf5", size = 45773, upload_time = "2025-05-15T06:56:28.552Z" }, +] + +[[package]] +name = "cattrs" +version = "25.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e3/42/988b3a667967e9d2d32346e7ed7edee540ef1cee829b53ef80aa8d4a0222/cattrs-25.2.0.tar.gz", hash = "sha256:f46c918e955db0177be6aa559068390f71988e877c603ae2e56c71827165cc06", size = 506531, upload_time = "2025-08-31T20:41:59.301Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/20/a5/b3771ac30b590026b9d721187110194ade05bfbea3d98b423a9cafd80959/cattrs-25.2.0-py3-none-any.whl", hash = "sha256:539d7eedee7d2f0706e4e109182ad096d608ba84633c32c75ef3458f1d11e8f1", size = 70040, upload_time = "2025-08-31T20:41:57.543Z" }, ] [[package]] name = "certifi" version = "2025.8.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/dc/67/960ebe6bf230a96cda2e0abcf73af550ec4f090005363542f0765df162e0/certifi-2025.8.3.tar.gz", hash = "sha256:e564105f78ded564e3ae7c923924435e1daa7463faeab5bb932bc53ffae63407", size = 162386 } +sdist = { url = "https://files.pythonhosted.org/packages/dc/67/960ebe6bf230a96cda2e0abcf73af550ec4f090005363542f0765df162e0/certifi-2025.8.3.tar.gz", hash = "sha256:e564105f78ded564e3ae7c923924435e1daa7463faeab5bb932bc53ffae63407", size = 162386, upload_time = "2025-08-03T03:07:47.08Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e5/48/1549795ba7742c948d2ad169c1c8cdbae65bc450d6cd753d124b17c8cd32/certifi-2025.8.3-py3-none-any.whl", hash = "sha256:f6c12493cfb1b06ba2ff328595af9350c65d6644968e5d3a2ffd78699af217a5", size = 161216 }, + { url = "https://files.pythonhosted.org/packages/e5/48/1549795ba7742c948d2ad169c1c8cdbae65bc450d6cd753d124b17c8cd32/certifi-2025.8.3-py3-none-any.whl", hash = "sha256:f6c12493cfb1b06ba2ff328595af9350c65d6644968e5d3a2ffd78699af217a5", size = 161216, upload_time = "2025-08-03T03:07:45.777Z" }, ] [[package]] @@ -161,114 +174,114 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pycparser", marker = "implementation_name != 'PyPy'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", size = 523588 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ea/47/4f61023ea636104d4f16ab488e268b93008c3d0bb76893b1b31db1f96802/cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d", size = 185271 }, - { url = "https://files.pythonhosted.org/packages/df/a2/781b623f57358e360d62cdd7a8c681f074a71d445418a776eef0aadb4ab4/cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c", size = 181048 }, - { url = "https://files.pythonhosted.org/packages/ff/df/a4f0fbd47331ceeba3d37c2e51e9dfc9722498becbeec2bd8bc856c9538a/cffi-2.0.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe", size = 212529 }, - { url = "https://files.pythonhosted.org/packages/d5/72/12b5f8d3865bf0f87cf1404d8c374e7487dcf097a1c91c436e72e6badd83/cffi-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062", size = 220097 }, - { url = "https://files.pythonhosted.org/packages/c2/95/7a135d52a50dfa7c882ab0ac17e8dc11cec9d55d2c18dda414c051c5e69e/cffi-2.0.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e", size = 207983 }, - { url = "https://files.pythonhosted.org/packages/3a/c8/15cb9ada8895957ea171c62dc78ff3e99159ee7adb13c0123c001a2546c1/cffi-2.0.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037", size = 206519 }, - { url = "https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba", size = 219572 }, - { url = "https://files.pythonhosted.org/packages/07/e0/267e57e387b4ca276b90f0434ff88b2c2241ad72b16d31836adddfd6031b/cffi-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94", size = 222963 }, - { url = "https://files.pythonhosted.org/packages/b6/75/1f2747525e06f53efbd878f4d03bac5b859cbc11c633d0fb81432d98a795/cffi-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187", size = 221361 }, - { url = "https://files.pythonhosted.org/packages/7b/2b/2b6435f76bfeb6bbf055596976da087377ede68df465419d192acf00c437/cffi-2.0.0-cp312-cp312-win32.whl", hash = "sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18", size = 172932 }, - { url = "https://files.pythonhosted.org/packages/f8/ed/13bd4418627013bec4ed6e54283b1959cf6db888048c7cf4b4c3b5b36002/cffi-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5", size = 183557 }, - { url = "https://files.pythonhosted.org/packages/95/31/9f7f93ad2f8eff1dbc1c3656d7ca5bfd8fb52c9d786b4dcf19b2d02217fa/cffi-2.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6", size = 177762 }, - { url = "https://files.pythonhosted.org/packages/4b/8d/a0a47a0c9e413a658623d014e91e74a50cdd2c423f7ccfd44086ef767f90/cffi-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb", size = 185230 }, - { url = "https://files.pythonhosted.org/packages/4a/d2/a6c0296814556c68ee32009d9c2ad4f85f2707cdecfd7727951ec228005d/cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca", size = 181043 }, - { url = "https://files.pythonhosted.org/packages/b0/1e/d22cc63332bd59b06481ceaac49d6c507598642e2230f201649058a7e704/cffi-2.0.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b", size = 212446 }, - { url = "https://files.pythonhosted.org/packages/a9/f5/a2c23eb03b61a0b8747f211eb716446c826ad66818ddc7810cc2cc19b3f2/cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b", size = 220101 }, - { url = "https://files.pythonhosted.org/packages/f2/7f/e6647792fc5850d634695bc0e6ab4111ae88e89981d35ac269956605feba/cffi-2.0.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2", size = 207948 }, - { url = "https://files.pythonhosted.org/packages/cb/1e/a5a1bd6f1fb30f22573f76533de12a00bf274abcdc55c8edab639078abb6/cffi-2.0.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3", size = 206422 }, - { url = "https://files.pythonhosted.org/packages/98/df/0a1755e750013a2081e863e7cd37e0cdd02664372c754e5560099eb7aa44/cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26", size = 219499 }, - { url = "https://files.pythonhosted.org/packages/50/e1/a969e687fcf9ea58e6e2a928ad5e2dd88cc12f6f0ab477e9971f2309b57c/cffi-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c", size = 222928 }, - { url = "https://files.pythonhosted.org/packages/36/54/0362578dd2c9e557a28ac77698ed67323ed5b9775ca9d3fe73fe191bb5d8/cffi-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b", size = 221302 }, - { url = "https://files.pythonhosted.org/packages/eb/6d/bf9bda840d5f1dfdbf0feca87fbdb64a918a69bca42cfa0ba7b137c48cb8/cffi-2.0.0-cp313-cp313-win32.whl", hash = "sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27", size = 172909 }, - { url = "https://files.pythonhosted.org/packages/37/18/6519e1ee6f5a1e579e04b9ddb6f1676c17368a7aba48299c3759bbc3c8b3/cffi-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75", size = 183402 }, - { url = "https://files.pythonhosted.org/packages/cb/0e/02ceeec9a7d6ee63bb596121c2c8e9b3a9e150936f4fbef6ca1943e6137c/cffi-2.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91", size = 177780 }, - { url = "https://files.pythonhosted.org/packages/92/c4/3ce07396253a83250ee98564f8d7e9789fab8e58858f35d07a9a2c78de9f/cffi-2.0.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5", size = 185320 }, - { url = "https://files.pythonhosted.org/packages/59/dd/27e9fa567a23931c838c6b02d0764611c62290062a6d4e8ff7863daf9730/cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13", size = 181487 }, - { url = "https://files.pythonhosted.org/packages/d6/43/0e822876f87ea8a4ef95442c3d766a06a51fc5298823f884ef87aaad168c/cffi-2.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b", size = 220049 }, - { url = "https://files.pythonhosted.org/packages/b4/89/76799151d9c2d2d1ead63c2429da9ea9d7aac304603de0c6e8764e6e8e70/cffi-2.0.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c", size = 207793 }, - { url = "https://files.pythonhosted.org/packages/bb/dd/3465b14bb9e24ee24cb88c9e3730f6de63111fffe513492bf8c808a3547e/cffi-2.0.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef", size = 206300 }, - { url = "https://files.pythonhosted.org/packages/47/d9/d83e293854571c877a92da46fdec39158f8d7e68da75bf73581225d28e90/cffi-2.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775", size = 219244 }, - { url = "https://files.pythonhosted.org/packages/2b/0f/1f177e3683aead2bb00f7679a16451d302c436b5cbf2505f0ea8146ef59e/cffi-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205", size = 222828 }, - { url = "https://files.pythonhosted.org/packages/c6/0f/cafacebd4b040e3119dcb32fed8bdef8dfe94da653155f9d0b9dc660166e/cffi-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1", size = 220926 }, - { url = "https://files.pythonhosted.org/packages/3e/aa/df335faa45b395396fcbc03de2dfcab242cd61a9900e914fe682a59170b1/cffi-2.0.0-cp314-cp314-win32.whl", hash = "sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f", size = 175328 }, - { url = "https://files.pythonhosted.org/packages/bb/92/882c2d30831744296ce713f0feb4c1cd30f346ef747b530b5318715cc367/cffi-2.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25", size = 185650 }, - { url = "https://files.pythonhosted.org/packages/9f/2c/98ece204b9d35a7366b5b2c6539c350313ca13932143e79dc133ba757104/cffi-2.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad", size = 180687 }, - { url = "https://files.pythonhosted.org/packages/3e/61/c768e4d548bfa607abcda77423448df8c471f25dbe64fb2ef6d555eae006/cffi-2.0.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9", size = 188773 }, - { url = "https://files.pythonhosted.org/packages/2c/ea/5f76bce7cf6fcd0ab1a1058b5af899bfbef198bea4d5686da88471ea0336/cffi-2.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d", size = 185013 }, - { url = "https://files.pythonhosted.org/packages/be/b4/c56878d0d1755cf9caa54ba71e5d049479c52f9e4afc230f06822162ab2f/cffi-2.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c", size = 221593 }, - { url = "https://files.pythonhosted.org/packages/e0/0d/eb704606dfe8033e7128df5e90fee946bbcb64a04fcdaa97321309004000/cffi-2.0.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8", size = 209354 }, - { url = "https://files.pythonhosted.org/packages/d8/19/3c435d727b368ca475fb8742ab97c9cb13a0de600ce86f62eab7fa3eea60/cffi-2.0.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc", size = 208480 }, - { url = "https://files.pythonhosted.org/packages/d0/44/681604464ed9541673e486521497406fadcc15b5217c3e326b061696899a/cffi-2.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592", size = 221584 }, - { url = "https://files.pythonhosted.org/packages/25/8e/342a504ff018a2825d395d44d63a767dd8ebc927ebda557fecdaca3ac33a/cffi-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512", size = 224443 }, - { url = "https://files.pythonhosted.org/packages/e1/5e/b666bacbbc60fbf415ba9988324a132c9a7a0448a9a8f125074671c0f2c3/cffi-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4", size = 223437 }, - { url = "https://files.pythonhosted.org/packages/a0/1d/ec1a60bd1a10daa292d3cd6bb0b359a81607154fb8165f3ec95fe003b85c/cffi-2.0.0-cp314-cp314t-win32.whl", hash = "sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e", size = 180487 }, - { url = "https://files.pythonhosted.org/packages/bf/41/4c1168c74fac325c0c8156f04b6749c8b6a8f405bbf91413ba088359f60d/cffi-2.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6", size = 191726 }, - { url = "https://files.pythonhosted.org/packages/ae/3a/dbeec9d1ee0844c679f6bb5d6ad4e9f198b1224f4e7a32825f47f6192b0c/cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9", size = 184195 }, +sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", size = 523588, upload_time = "2025-09-08T23:24:04.541Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ea/47/4f61023ea636104d4f16ab488e268b93008c3d0bb76893b1b31db1f96802/cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d", size = 185271, upload_time = "2025-09-08T23:22:44.795Z" }, + { url = "https://files.pythonhosted.org/packages/df/a2/781b623f57358e360d62cdd7a8c681f074a71d445418a776eef0aadb4ab4/cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c", size = 181048, upload_time = "2025-09-08T23:22:45.938Z" }, + { url = "https://files.pythonhosted.org/packages/ff/df/a4f0fbd47331ceeba3d37c2e51e9dfc9722498becbeec2bd8bc856c9538a/cffi-2.0.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe", size = 212529, upload_time = "2025-09-08T23:22:47.349Z" }, + { url = "https://files.pythonhosted.org/packages/d5/72/12b5f8d3865bf0f87cf1404d8c374e7487dcf097a1c91c436e72e6badd83/cffi-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062", size = 220097, upload_time = "2025-09-08T23:22:48.677Z" }, + { url = "https://files.pythonhosted.org/packages/c2/95/7a135d52a50dfa7c882ab0ac17e8dc11cec9d55d2c18dda414c051c5e69e/cffi-2.0.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e", size = 207983, upload_time = "2025-09-08T23:22:50.06Z" }, + { url = "https://files.pythonhosted.org/packages/3a/c8/15cb9ada8895957ea171c62dc78ff3e99159ee7adb13c0123c001a2546c1/cffi-2.0.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037", size = 206519, upload_time = "2025-09-08T23:22:51.364Z" }, + { url = "https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba", size = 219572, upload_time = "2025-09-08T23:22:52.902Z" }, + { url = "https://files.pythonhosted.org/packages/07/e0/267e57e387b4ca276b90f0434ff88b2c2241ad72b16d31836adddfd6031b/cffi-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94", size = 222963, upload_time = "2025-09-08T23:22:54.518Z" }, + { url = "https://files.pythonhosted.org/packages/b6/75/1f2747525e06f53efbd878f4d03bac5b859cbc11c633d0fb81432d98a795/cffi-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187", size = 221361, upload_time = "2025-09-08T23:22:55.867Z" }, + { url = "https://files.pythonhosted.org/packages/7b/2b/2b6435f76bfeb6bbf055596976da087377ede68df465419d192acf00c437/cffi-2.0.0-cp312-cp312-win32.whl", hash = "sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18", size = 172932, upload_time = "2025-09-08T23:22:57.188Z" }, + { url = "https://files.pythonhosted.org/packages/f8/ed/13bd4418627013bec4ed6e54283b1959cf6db888048c7cf4b4c3b5b36002/cffi-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5", size = 183557, upload_time = "2025-09-08T23:22:58.351Z" }, + { url = "https://files.pythonhosted.org/packages/95/31/9f7f93ad2f8eff1dbc1c3656d7ca5bfd8fb52c9d786b4dcf19b2d02217fa/cffi-2.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6", size = 177762, upload_time = "2025-09-08T23:22:59.668Z" }, + { url = "https://files.pythonhosted.org/packages/4b/8d/a0a47a0c9e413a658623d014e91e74a50cdd2c423f7ccfd44086ef767f90/cffi-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb", size = 185230, upload_time = "2025-09-08T23:23:00.879Z" }, + { url = "https://files.pythonhosted.org/packages/4a/d2/a6c0296814556c68ee32009d9c2ad4f85f2707cdecfd7727951ec228005d/cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca", size = 181043, upload_time = "2025-09-08T23:23:02.231Z" }, + { url = "https://files.pythonhosted.org/packages/b0/1e/d22cc63332bd59b06481ceaac49d6c507598642e2230f201649058a7e704/cffi-2.0.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b", size = 212446, upload_time = "2025-09-08T23:23:03.472Z" }, + { url = "https://files.pythonhosted.org/packages/a9/f5/a2c23eb03b61a0b8747f211eb716446c826ad66818ddc7810cc2cc19b3f2/cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b", size = 220101, upload_time = "2025-09-08T23:23:04.792Z" }, + { url = "https://files.pythonhosted.org/packages/f2/7f/e6647792fc5850d634695bc0e6ab4111ae88e89981d35ac269956605feba/cffi-2.0.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2", size = 207948, upload_time = "2025-09-08T23:23:06.127Z" }, + { url = "https://files.pythonhosted.org/packages/cb/1e/a5a1bd6f1fb30f22573f76533de12a00bf274abcdc55c8edab639078abb6/cffi-2.0.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3", size = 206422, upload_time = "2025-09-08T23:23:07.753Z" }, + { url = "https://files.pythonhosted.org/packages/98/df/0a1755e750013a2081e863e7cd37e0cdd02664372c754e5560099eb7aa44/cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26", size = 219499, upload_time = "2025-09-08T23:23:09.648Z" }, + { url = "https://files.pythonhosted.org/packages/50/e1/a969e687fcf9ea58e6e2a928ad5e2dd88cc12f6f0ab477e9971f2309b57c/cffi-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c", size = 222928, upload_time = "2025-09-08T23:23:10.928Z" }, + { url = "https://files.pythonhosted.org/packages/36/54/0362578dd2c9e557a28ac77698ed67323ed5b9775ca9d3fe73fe191bb5d8/cffi-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b", size = 221302, upload_time = "2025-09-08T23:23:12.42Z" }, + { url = "https://files.pythonhosted.org/packages/eb/6d/bf9bda840d5f1dfdbf0feca87fbdb64a918a69bca42cfa0ba7b137c48cb8/cffi-2.0.0-cp313-cp313-win32.whl", hash = "sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27", size = 172909, upload_time = "2025-09-08T23:23:14.32Z" }, + { url = "https://files.pythonhosted.org/packages/37/18/6519e1ee6f5a1e579e04b9ddb6f1676c17368a7aba48299c3759bbc3c8b3/cffi-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75", size = 183402, upload_time = "2025-09-08T23:23:15.535Z" }, + { url = "https://files.pythonhosted.org/packages/cb/0e/02ceeec9a7d6ee63bb596121c2c8e9b3a9e150936f4fbef6ca1943e6137c/cffi-2.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91", size = 177780, upload_time = "2025-09-08T23:23:16.761Z" }, + { url = "https://files.pythonhosted.org/packages/92/c4/3ce07396253a83250ee98564f8d7e9789fab8e58858f35d07a9a2c78de9f/cffi-2.0.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5", size = 185320, upload_time = "2025-09-08T23:23:18.087Z" }, + { url = "https://files.pythonhosted.org/packages/59/dd/27e9fa567a23931c838c6b02d0764611c62290062a6d4e8ff7863daf9730/cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13", size = 181487, upload_time = "2025-09-08T23:23:19.622Z" }, + { url = "https://files.pythonhosted.org/packages/d6/43/0e822876f87ea8a4ef95442c3d766a06a51fc5298823f884ef87aaad168c/cffi-2.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b", size = 220049, upload_time = "2025-09-08T23:23:20.853Z" }, + { url = "https://files.pythonhosted.org/packages/b4/89/76799151d9c2d2d1ead63c2429da9ea9d7aac304603de0c6e8764e6e8e70/cffi-2.0.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c", size = 207793, upload_time = "2025-09-08T23:23:22.08Z" }, + { url = "https://files.pythonhosted.org/packages/bb/dd/3465b14bb9e24ee24cb88c9e3730f6de63111fffe513492bf8c808a3547e/cffi-2.0.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef", size = 206300, upload_time = "2025-09-08T23:23:23.314Z" }, + { url = "https://files.pythonhosted.org/packages/47/d9/d83e293854571c877a92da46fdec39158f8d7e68da75bf73581225d28e90/cffi-2.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775", size = 219244, upload_time = "2025-09-08T23:23:24.541Z" }, + { url = "https://files.pythonhosted.org/packages/2b/0f/1f177e3683aead2bb00f7679a16451d302c436b5cbf2505f0ea8146ef59e/cffi-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205", size = 222828, upload_time = "2025-09-08T23:23:26.143Z" }, + { url = "https://files.pythonhosted.org/packages/c6/0f/cafacebd4b040e3119dcb32fed8bdef8dfe94da653155f9d0b9dc660166e/cffi-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1", size = 220926, upload_time = "2025-09-08T23:23:27.873Z" }, + { url = "https://files.pythonhosted.org/packages/3e/aa/df335faa45b395396fcbc03de2dfcab242cd61a9900e914fe682a59170b1/cffi-2.0.0-cp314-cp314-win32.whl", hash = "sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f", size = 175328, upload_time = "2025-09-08T23:23:44.61Z" }, + { url = "https://files.pythonhosted.org/packages/bb/92/882c2d30831744296ce713f0feb4c1cd30f346ef747b530b5318715cc367/cffi-2.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25", size = 185650, upload_time = "2025-09-08T23:23:45.848Z" }, + { url = "https://files.pythonhosted.org/packages/9f/2c/98ece204b9d35a7366b5b2c6539c350313ca13932143e79dc133ba757104/cffi-2.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad", size = 180687, upload_time = "2025-09-08T23:23:47.105Z" }, + { url = "https://files.pythonhosted.org/packages/3e/61/c768e4d548bfa607abcda77423448df8c471f25dbe64fb2ef6d555eae006/cffi-2.0.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9", size = 188773, upload_time = "2025-09-08T23:23:29.347Z" }, + { url = "https://files.pythonhosted.org/packages/2c/ea/5f76bce7cf6fcd0ab1a1058b5af899bfbef198bea4d5686da88471ea0336/cffi-2.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d", size = 185013, upload_time = "2025-09-08T23:23:30.63Z" }, + { url = "https://files.pythonhosted.org/packages/be/b4/c56878d0d1755cf9caa54ba71e5d049479c52f9e4afc230f06822162ab2f/cffi-2.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c", size = 221593, upload_time = "2025-09-08T23:23:31.91Z" }, + { url = "https://files.pythonhosted.org/packages/e0/0d/eb704606dfe8033e7128df5e90fee946bbcb64a04fcdaa97321309004000/cffi-2.0.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8", size = 209354, upload_time = "2025-09-08T23:23:33.214Z" }, + { url = "https://files.pythonhosted.org/packages/d8/19/3c435d727b368ca475fb8742ab97c9cb13a0de600ce86f62eab7fa3eea60/cffi-2.0.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc", size = 208480, upload_time = "2025-09-08T23:23:34.495Z" }, + { url = "https://files.pythonhosted.org/packages/d0/44/681604464ed9541673e486521497406fadcc15b5217c3e326b061696899a/cffi-2.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592", size = 221584, upload_time = "2025-09-08T23:23:36.096Z" }, + { url = "https://files.pythonhosted.org/packages/25/8e/342a504ff018a2825d395d44d63a767dd8ebc927ebda557fecdaca3ac33a/cffi-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512", size = 224443, upload_time = "2025-09-08T23:23:37.328Z" }, + { url = "https://files.pythonhosted.org/packages/e1/5e/b666bacbbc60fbf415ba9988324a132c9a7a0448a9a8f125074671c0f2c3/cffi-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4", size = 223437, upload_time = "2025-09-08T23:23:38.945Z" }, + { url = "https://files.pythonhosted.org/packages/a0/1d/ec1a60bd1a10daa292d3cd6bb0b359a81607154fb8165f3ec95fe003b85c/cffi-2.0.0-cp314-cp314t-win32.whl", hash = "sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e", size = 180487, upload_time = "2025-09-08T23:23:40.423Z" }, + { url = "https://files.pythonhosted.org/packages/bf/41/4c1168c74fac325c0c8156f04b6749c8b6a8f405bbf91413ba088359f60d/cffi-2.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6", size = 191726, upload_time = "2025-09-08T23:23:41.742Z" }, + { url = "https://files.pythonhosted.org/packages/ae/3a/dbeec9d1ee0844c679f6bb5d6ad4e9f198b1224f4e7a32825f47f6192b0c/cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9", size = 184195, upload_time = "2025-09-08T23:23:43.004Z" }, ] [[package]] name = "cfgv" version = "3.4.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/11/74/539e56497d9bd1d484fd863dd69cbbfa653cd2aa27abfe35653494d85e94/cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560", size = 7114 } +sdist = { url = "https://files.pythonhosted.org/packages/11/74/539e56497d9bd1d484fd863dd69cbbfa653cd2aa27abfe35653494d85e94/cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560", size = 7114, upload_time = "2023-08-12T20:38:17.776Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c5/55/51844dd50c4fc7a33b653bfaba4c2456f06955289ca770a5dbd5fd267374/cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9", size = 7249 }, + { url = "https://files.pythonhosted.org/packages/c5/55/51844dd50c4fc7a33b653bfaba4c2456f06955289ca770a5dbd5fd267374/cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9", size = 7249, upload_time = "2023-08-12T20:38:16.269Z" }, ] [[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 } +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 }, + { 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" }, ] [[package]] name = "charset-normalizer" version = "3.4.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/83/2d/5fd176ceb9b2fc619e63405525573493ca23441330fcdaee6bef9460e924/charset_normalizer-3.4.3.tar.gz", hash = "sha256:6fce4b8500244f6fcb71465d4a4930d132ba9ab8e71a7859e6a5d59851068d14", size = 122371 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e9/5e/14c94999e418d9b87682734589404a25854d5f5d0408df68bc15b6ff54bb/charset_normalizer-3.4.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e28e334d3ff134e88989d90ba04b47d84382a828c061d0d1027b1b12a62b39b1", size = 205655 }, - { url = "https://files.pythonhosted.org/packages/7d/a8/c6ec5d389672521f644505a257f50544c074cf5fc292d5390331cd6fc9c3/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0cacf8f7297b0c4fcb74227692ca46b4a5852f8f4f24b3c766dd94a1075c4884", size = 146223 }, - { url = "https://files.pythonhosted.org/packages/fc/eb/a2ffb08547f4e1e5415fb69eb7db25932c52a52bed371429648db4d84fb1/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c6fd51128a41297f5409deab284fecbe5305ebd7e5a1f959bee1c054622b7018", size = 159366 }, - { url = "https://files.pythonhosted.org/packages/82/10/0fd19f20c624b278dddaf83b8464dcddc2456cb4b02bb902a6da126b87a1/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3cfb2aad70f2c6debfbcb717f23b7eb55febc0bb23dcffc0f076009da10c6392", size = 157104 }, - { url = "https://files.pythonhosted.org/packages/16/ab/0233c3231af734f5dfcf0844aa9582d5a1466c985bbed6cedab85af9bfe3/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1606f4a55c0fd363d754049cdf400175ee96c992b1f8018b993941f221221c5f", size = 151830 }, - { url = "https://files.pythonhosted.org/packages/ae/02/e29e22b4e02839a0e4a06557b1999d0a47db3567e82989b5bb21f3fbbd9f/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:027b776c26d38b7f15b26a5da1044f376455fb3766df8fc38563b4efbc515154", size = 148854 }, - { url = "https://files.pythonhosted.org/packages/05/6b/e2539a0a4be302b481e8cafb5af8792da8093b486885a1ae4d15d452bcec/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:42e5088973e56e31e4fa58eb6bd709e42fc03799c11c42929592889a2e54c491", size = 160670 }, - { url = "https://files.pythonhosted.org/packages/31/e7/883ee5676a2ef217a40ce0bffcc3d0dfbf9e64cbcfbdf822c52981c3304b/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:cc34f233c9e71701040d772aa7490318673aa7164a0efe3172b2981218c26d93", size = 158501 }, - { url = "https://files.pythonhosted.org/packages/c1/35/6525b21aa0db614cf8b5792d232021dca3df7f90a1944db934efa5d20bb1/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:320e8e66157cc4e247d9ddca8e21f427efc7a04bbd0ac8a9faf56583fa543f9f", size = 153173 }, - { url = "https://files.pythonhosted.org/packages/50/ee/f4704bad8201de513fdc8aac1cabc87e38c5818c93857140e06e772b5892/charset_normalizer-3.4.3-cp312-cp312-win32.whl", hash = "sha256:fb6fecfd65564f208cbf0fba07f107fb661bcd1a7c389edbced3f7a493f70e37", size = 99822 }, - { url = "https://files.pythonhosted.org/packages/39/f5/3b3836ca6064d0992c58c7561c6b6eee1b3892e9665d650c803bd5614522/charset_normalizer-3.4.3-cp312-cp312-win_amd64.whl", hash = "sha256:86df271bf921c2ee3818f0522e9a5b8092ca2ad8b065ece5d7d9d0e9f4849bcc", size = 107543 }, - { url = "https://files.pythonhosted.org/packages/65/ca/2135ac97709b400c7654b4b764daf5c5567c2da45a30cdd20f9eefe2d658/charset_normalizer-3.4.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:14c2a87c65b351109f6abfc424cab3927b3bdece6f706e4d12faaf3d52ee5efe", size = 205326 }, - { url = "https://files.pythonhosted.org/packages/71/11/98a04c3c97dd34e49c7d247083af03645ca3730809a5509443f3c37f7c99/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:41d1fc408ff5fdfb910200ec0e74abc40387bccb3252f3f27c0676731df2b2c8", size = 146008 }, - { url = "https://files.pythonhosted.org/packages/60/f5/4659a4cb3c4ec146bec80c32d8bb16033752574c20b1252ee842a95d1a1e/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1bb60174149316da1c35fa5233681f7c0f9f514509b8e399ab70fea5f17e45c9", size = 159196 }, - { url = "https://files.pythonhosted.org/packages/86/9e/f552f7a00611f168b9a5865a1414179b2c6de8235a4fa40189f6f79a1753/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:30d006f98569de3459c2fc1f2acde170b7b2bd265dc1943e87e1a4efe1b67c31", size = 156819 }, - { url = "https://files.pythonhosted.org/packages/7e/95/42aa2156235cbc8fa61208aded06ef46111c4d3f0de233107b3f38631803/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:416175faf02e4b0810f1f38bcb54682878a4af94059a1cd63b8747244420801f", size = 151350 }, - { url = "https://files.pythonhosted.org/packages/c2/a9/3865b02c56f300a6f94fc631ef54f0a8a29da74fb45a773dfd3dcd380af7/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6aab0f181c486f973bc7262a97f5aca3ee7e1437011ef0c2ec04b5a11d16c927", size = 148644 }, - { url = "https://files.pythonhosted.org/packages/77/d9/cbcf1a2a5c7d7856f11e7ac2d782aec12bdfea60d104e60e0aa1c97849dc/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:fdabf8315679312cfa71302f9bd509ded4f2f263fb5b765cf1433b39106c3cc9", size = 160468 }, - { url = "https://files.pythonhosted.org/packages/f6/42/6f45efee8697b89fda4d50580f292b8f7f9306cb2971d4b53f8914e4d890/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:bd28b817ea8c70215401f657edef3a8aa83c29d447fb0b622c35403780ba11d5", size = 158187 }, - { url = "https://files.pythonhosted.org/packages/70/99/f1c3bdcfaa9c45b3ce96f70b14f070411366fa19549c1d4832c935d8e2c3/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:18343b2d246dc6761a249ba1fb13f9ee9a2bcd95decc767319506056ea4ad4dc", size = 152699 }, - { url = "https://files.pythonhosted.org/packages/a3/ad/b0081f2f99a4b194bcbb1934ef3b12aa4d9702ced80a37026b7607c72e58/charset_normalizer-3.4.3-cp313-cp313-win32.whl", hash = "sha256:6fb70de56f1859a3f71261cbe41005f56a7842cc348d3aeb26237560bfa5e0ce", size = 99580 }, - { url = "https://files.pythonhosted.org/packages/9a/8f/ae790790c7b64f925e5c953b924aaa42a243fb778fed9e41f147b2a5715a/charset_normalizer-3.4.3-cp313-cp313-win_amd64.whl", hash = "sha256:cf1ebb7d78e1ad8ec2a8c4732c7be2e736f6e5123a4146c5b89c9d1f585f8cef", size = 107366 }, - { url = "https://files.pythonhosted.org/packages/8e/91/b5a06ad970ddc7a0e513112d40113e834638f4ca1120eb727a249fb2715e/charset_normalizer-3.4.3-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:3cd35b7e8aedeb9e34c41385fda4f73ba609e561faedfae0a9e75e44ac558a15", size = 204342 }, - { url = "https://files.pythonhosted.org/packages/ce/ec/1edc30a377f0a02689342f214455c3f6c2fbedd896a1d2f856c002fc3062/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b89bc04de1d83006373429975f8ef9e7932534b8cc9ca582e4db7d20d91816db", size = 145995 }, - { url = "https://files.pythonhosted.org/packages/17/e5/5e67ab85e6d22b04641acb5399c8684f4d37caf7558a53859f0283a650e9/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2001a39612b241dae17b4687898843f254f8748b796a2e16f1051a17078d991d", size = 158640 }, - { url = "https://files.pythonhosted.org/packages/f1/e5/38421987f6c697ee3722981289d554957c4be652f963d71c5e46a262e135/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8dcfc373f888e4fb39a7bc57e93e3b845e7f462dacc008d9749568b1c4ece096", size = 156636 }, - { url = "https://files.pythonhosted.org/packages/a0/e4/5a075de8daa3ec0745a9a3b54467e0c2967daaaf2cec04c845f73493e9a1/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:18b97b8404387b96cdbd30ad660f6407799126d26a39ca65729162fd810a99aa", size = 150939 }, - { url = "https://files.pythonhosted.org/packages/02/f7/3611b32318b30974131db62b4043f335861d4d9b49adc6d57c1149cc49d4/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ccf600859c183d70eb47e05a44cd80a4ce77394d1ac0f79dbd2dd90a69a3a049", size = 148580 }, - { url = "https://files.pythonhosted.org/packages/7e/61/19b36f4bd67f2793ab6a99b979b4e4f3d8fc754cbdffb805335df4337126/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:53cd68b185d98dde4ad8990e56a58dea83a4162161b1ea9272e5c9182ce415e0", size = 159870 }, - { url = "https://files.pythonhosted.org/packages/06/57/84722eefdd338c04cf3030ada66889298eaedf3e7a30a624201e0cbe424a/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:30a96e1e1f865f78b030d65241c1ee850cdf422d869e9028e2fc1d5e4db73b92", size = 157797 }, - { url = "https://files.pythonhosted.org/packages/72/2a/aff5dd112b2f14bcc3462c312dce5445806bfc8ab3a7328555da95330e4b/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d716a916938e03231e86e43782ca7878fb602a125a91e7acb8b5112e2e96ac16", size = 152224 }, - { url = "https://files.pythonhosted.org/packages/b7/8c/9839225320046ed279c6e839d51f028342eb77c91c89b8ef2549f951f3ec/charset_normalizer-3.4.3-cp314-cp314-win32.whl", hash = "sha256:c6dbd0ccdda3a2ba7c2ecd9d77b37f3b5831687d8dc1b6ca5f56a4880cc7b7ce", size = 100086 }, - { url = "https://files.pythonhosted.org/packages/ee/7a/36fbcf646e41f710ce0a563c1c9a343c6edf9be80786edeb15b6f62e17db/charset_normalizer-3.4.3-cp314-cp314-win_amd64.whl", hash = "sha256:73dc19b562516fc9bcf6e5d6e596df0b4eb98d87e4f79f3ae71840e6ed21361c", size = 107400 }, - { url = "https://files.pythonhosted.org/packages/8a/1f/f041989e93b001bc4e44bb1669ccdcf54d3f00e628229a85b08d330615c5/charset_normalizer-3.4.3-py3-none-any.whl", hash = "sha256:ce571ab16d890d23b5c278547ba694193a45011ff86a9162a71307ed9f86759a", size = 53175 }, +sdist = { url = "https://files.pythonhosted.org/packages/83/2d/5fd176ceb9b2fc619e63405525573493ca23441330fcdaee6bef9460e924/charset_normalizer-3.4.3.tar.gz", hash = "sha256:6fce4b8500244f6fcb71465d4a4930d132ba9ab8e71a7859e6a5d59851068d14", size = 122371, upload_time = "2025-08-09T07:57:28.46Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e9/5e/14c94999e418d9b87682734589404a25854d5f5d0408df68bc15b6ff54bb/charset_normalizer-3.4.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e28e334d3ff134e88989d90ba04b47d84382a828c061d0d1027b1b12a62b39b1", size = 205655, upload_time = "2025-08-09T07:56:08.475Z" }, + { url = "https://files.pythonhosted.org/packages/7d/a8/c6ec5d389672521f644505a257f50544c074cf5fc292d5390331cd6fc9c3/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0cacf8f7297b0c4fcb74227692ca46b4a5852f8f4f24b3c766dd94a1075c4884", size = 146223, upload_time = "2025-08-09T07:56:09.708Z" }, + { url = "https://files.pythonhosted.org/packages/fc/eb/a2ffb08547f4e1e5415fb69eb7db25932c52a52bed371429648db4d84fb1/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c6fd51128a41297f5409deab284fecbe5305ebd7e5a1f959bee1c054622b7018", size = 159366, upload_time = "2025-08-09T07:56:11.326Z" }, + { url = "https://files.pythonhosted.org/packages/82/10/0fd19f20c624b278dddaf83b8464dcddc2456cb4b02bb902a6da126b87a1/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3cfb2aad70f2c6debfbcb717f23b7eb55febc0bb23dcffc0f076009da10c6392", size = 157104, upload_time = "2025-08-09T07:56:13.014Z" }, + { url = "https://files.pythonhosted.org/packages/16/ab/0233c3231af734f5dfcf0844aa9582d5a1466c985bbed6cedab85af9bfe3/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1606f4a55c0fd363d754049cdf400175ee96c992b1f8018b993941f221221c5f", size = 151830, upload_time = "2025-08-09T07:56:14.428Z" }, + { url = "https://files.pythonhosted.org/packages/ae/02/e29e22b4e02839a0e4a06557b1999d0a47db3567e82989b5bb21f3fbbd9f/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:027b776c26d38b7f15b26a5da1044f376455fb3766df8fc38563b4efbc515154", size = 148854, upload_time = "2025-08-09T07:56:16.051Z" }, + { url = "https://files.pythonhosted.org/packages/05/6b/e2539a0a4be302b481e8cafb5af8792da8093b486885a1ae4d15d452bcec/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:42e5088973e56e31e4fa58eb6bd709e42fc03799c11c42929592889a2e54c491", size = 160670, upload_time = "2025-08-09T07:56:17.314Z" }, + { url = "https://files.pythonhosted.org/packages/31/e7/883ee5676a2ef217a40ce0bffcc3d0dfbf9e64cbcfbdf822c52981c3304b/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:cc34f233c9e71701040d772aa7490318673aa7164a0efe3172b2981218c26d93", size = 158501, upload_time = "2025-08-09T07:56:18.641Z" }, + { url = "https://files.pythonhosted.org/packages/c1/35/6525b21aa0db614cf8b5792d232021dca3df7f90a1944db934efa5d20bb1/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:320e8e66157cc4e247d9ddca8e21f427efc7a04bbd0ac8a9faf56583fa543f9f", size = 153173, upload_time = "2025-08-09T07:56:20.289Z" }, + { url = "https://files.pythonhosted.org/packages/50/ee/f4704bad8201de513fdc8aac1cabc87e38c5818c93857140e06e772b5892/charset_normalizer-3.4.3-cp312-cp312-win32.whl", hash = "sha256:fb6fecfd65564f208cbf0fba07f107fb661bcd1a7c389edbced3f7a493f70e37", size = 99822, upload_time = "2025-08-09T07:56:21.551Z" }, + { url = "https://files.pythonhosted.org/packages/39/f5/3b3836ca6064d0992c58c7561c6b6eee1b3892e9665d650c803bd5614522/charset_normalizer-3.4.3-cp312-cp312-win_amd64.whl", hash = "sha256:86df271bf921c2ee3818f0522e9a5b8092ca2ad8b065ece5d7d9d0e9f4849bcc", size = 107543, upload_time = "2025-08-09T07:56:23.115Z" }, + { url = "https://files.pythonhosted.org/packages/65/ca/2135ac97709b400c7654b4b764daf5c5567c2da45a30cdd20f9eefe2d658/charset_normalizer-3.4.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:14c2a87c65b351109f6abfc424cab3927b3bdece6f706e4d12faaf3d52ee5efe", size = 205326, upload_time = "2025-08-09T07:56:24.721Z" }, + { url = "https://files.pythonhosted.org/packages/71/11/98a04c3c97dd34e49c7d247083af03645ca3730809a5509443f3c37f7c99/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:41d1fc408ff5fdfb910200ec0e74abc40387bccb3252f3f27c0676731df2b2c8", size = 146008, upload_time = "2025-08-09T07:56:26.004Z" }, + { url = "https://files.pythonhosted.org/packages/60/f5/4659a4cb3c4ec146bec80c32d8bb16033752574c20b1252ee842a95d1a1e/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1bb60174149316da1c35fa5233681f7c0f9f514509b8e399ab70fea5f17e45c9", size = 159196, upload_time = "2025-08-09T07:56:27.25Z" }, + { url = "https://files.pythonhosted.org/packages/86/9e/f552f7a00611f168b9a5865a1414179b2c6de8235a4fa40189f6f79a1753/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:30d006f98569de3459c2fc1f2acde170b7b2bd265dc1943e87e1a4efe1b67c31", size = 156819, upload_time = "2025-08-09T07:56:28.515Z" }, + { url = "https://files.pythonhosted.org/packages/7e/95/42aa2156235cbc8fa61208aded06ef46111c4d3f0de233107b3f38631803/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:416175faf02e4b0810f1f38bcb54682878a4af94059a1cd63b8747244420801f", size = 151350, upload_time = "2025-08-09T07:56:29.716Z" }, + { url = "https://files.pythonhosted.org/packages/c2/a9/3865b02c56f300a6f94fc631ef54f0a8a29da74fb45a773dfd3dcd380af7/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6aab0f181c486f973bc7262a97f5aca3ee7e1437011ef0c2ec04b5a11d16c927", size = 148644, upload_time = "2025-08-09T07:56:30.984Z" }, + { url = "https://files.pythonhosted.org/packages/77/d9/cbcf1a2a5c7d7856f11e7ac2d782aec12bdfea60d104e60e0aa1c97849dc/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:fdabf8315679312cfa71302f9bd509ded4f2f263fb5b765cf1433b39106c3cc9", size = 160468, upload_time = "2025-08-09T07:56:32.252Z" }, + { url = "https://files.pythonhosted.org/packages/f6/42/6f45efee8697b89fda4d50580f292b8f7f9306cb2971d4b53f8914e4d890/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:bd28b817ea8c70215401f657edef3a8aa83c29d447fb0b622c35403780ba11d5", size = 158187, upload_time = "2025-08-09T07:56:33.481Z" }, + { url = "https://files.pythonhosted.org/packages/70/99/f1c3bdcfaa9c45b3ce96f70b14f070411366fa19549c1d4832c935d8e2c3/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:18343b2d246dc6761a249ba1fb13f9ee9a2bcd95decc767319506056ea4ad4dc", size = 152699, upload_time = "2025-08-09T07:56:34.739Z" }, + { url = "https://files.pythonhosted.org/packages/a3/ad/b0081f2f99a4b194bcbb1934ef3b12aa4d9702ced80a37026b7607c72e58/charset_normalizer-3.4.3-cp313-cp313-win32.whl", hash = "sha256:6fb70de56f1859a3f71261cbe41005f56a7842cc348d3aeb26237560bfa5e0ce", size = 99580, upload_time = "2025-08-09T07:56:35.981Z" }, + { url = "https://files.pythonhosted.org/packages/9a/8f/ae790790c7b64f925e5c953b924aaa42a243fb778fed9e41f147b2a5715a/charset_normalizer-3.4.3-cp313-cp313-win_amd64.whl", hash = "sha256:cf1ebb7d78e1ad8ec2a8c4732c7be2e736f6e5123a4146c5b89c9d1f585f8cef", size = 107366, upload_time = "2025-08-09T07:56:37.339Z" }, + { url = "https://files.pythonhosted.org/packages/8e/91/b5a06ad970ddc7a0e513112d40113e834638f4ca1120eb727a249fb2715e/charset_normalizer-3.4.3-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:3cd35b7e8aedeb9e34c41385fda4f73ba609e561faedfae0a9e75e44ac558a15", size = 204342, upload_time = "2025-08-09T07:56:38.687Z" }, + { url = "https://files.pythonhosted.org/packages/ce/ec/1edc30a377f0a02689342f214455c3f6c2fbedd896a1d2f856c002fc3062/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b89bc04de1d83006373429975f8ef9e7932534b8cc9ca582e4db7d20d91816db", size = 145995, upload_time = "2025-08-09T07:56:40.048Z" }, + { url = "https://files.pythonhosted.org/packages/17/e5/5e67ab85e6d22b04641acb5399c8684f4d37caf7558a53859f0283a650e9/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2001a39612b241dae17b4687898843f254f8748b796a2e16f1051a17078d991d", size = 158640, upload_time = "2025-08-09T07:56:41.311Z" }, + { url = "https://files.pythonhosted.org/packages/f1/e5/38421987f6c697ee3722981289d554957c4be652f963d71c5e46a262e135/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8dcfc373f888e4fb39a7bc57e93e3b845e7f462dacc008d9749568b1c4ece096", size = 156636, upload_time = "2025-08-09T07:56:43.195Z" }, + { url = "https://files.pythonhosted.org/packages/a0/e4/5a075de8daa3ec0745a9a3b54467e0c2967daaaf2cec04c845f73493e9a1/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:18b97b8404387b96cdbd30ad660f6407799126d26a39ca65729162fd810a99aa", size = 150939, upload_time = "2025-08-09T07:56:44.819Z" }, + { url = "https://files.pythonhosted.org/packages/02/f7/3611b32318b30974131db62b4043f335861d4d9b49adc6d57c1149cc49d4/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ccf600859c183d70eb47e05a44cd80a4ce77394d1ac0f79dbd2dd90a69a3a049", size = 148580, upload_time = "2025-08-09T07:56:46.684Z" }, + { url = "https://files.pythonhosted.org/packages/7e/61/19b36f4bd67f2793ab6a99b979b4e4f3d8fc754cbdffb805335df4337126/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:53cd68b185d98dde4ad8990e56a58dea83a4162161b1ea9272e5c9182ce415e0", size = 159870, upload_time = "2025-08-09T07:56:47.941Z" }, + { url = "https://files.pythonhosted.org/packages/06/57/84722eefdd338c04cf3030ada66889298eaedf3e7a30a624201e0cbe424a/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:30a96e1e1f865f78b030d65241c1ee850cdf422d869e9028e2fc1d5e4db73b92", size = 157797, upload_time = "2025-08-09T07:56:49.756Z" }, + { url = "https://files.pythonhosted.org/packages/72/2a/aff5dd112b2f14bcc3462c312dce5445806bfc8ab3a7328555da95330e4b/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d716a916938e03231e86e43782ca7878fb602a125a91e7acb8b5112e2e96ac16", size = 152224, upload_time = "2025-08-09T07:56:51.369Z" }, + { url = "https://files.pythonhosted.org/packages/b7/8c/9839225320046ed279c6e839d51f028342eb77c91c89b8ef2549f951f3ec/charset_normalizer-3.4.3-cp314-cp314-win32.whl", hash = "sha256:c6dbd0ccdda3a2ba7c2ecd9d77b37f3b5831687d8dc1b6ca5f56a4880cc7b7ce", size = 100086, upload_time = "2025-08-09T07:56:52.722Z" }, + { url = "https://files.pythonhosted.org/packages/ee/7a/36fbcf646e41f710ce0a563c1c9a343c6edf9be80786edeb15b6f62e17db/charset_normalizer-3.4.3-cp314-cp314-win_amd64.whl", hash = "sha256:73dc19b562516fc9bcf6e5d6e596df0b4eb98d87e4f79f3ae71840e6ed21361c", size = 107400, upload_time = "2025-08-09T07:56:55.172Z" }, + { url = "https://files.pythonhosted.org/packages/8a/1f/f041989e93b001bc4e44bb1669ccdcf54d3f00e628229a85b08d330615c5/charset_normalizer-3.4.3-py3-none-any.whl", hash = "sha256:ce571ab16d890d23b5c278547ba694193a45011ff86a9162a71307ed9f86759a", size = 53175, upload_time = "2025-08-09T07:57:26.864Z" }, ] [[package]] @@ -278,101 +291,101 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/60/6c/8ca2efa64cf75a977a0d7fac081354553ebe483345c734fb6b6515d96bbc/click-8.2.1.tar.gz", hash = "sha256:27c491cc05d968d271d5a1db13e3b5a184636d9d930f148c50b038f0d0646202", size = 286342 } +sdist = { url = "https://files.pythonhosted.org/packages/60/6c/8ca2efa64cf75a977a0d7fac081354553ebe483345c734fb6b6515d96bbc/click-8.2.1.tar.gz", hash = "sha256:27c491cc05d968d271d5a1db13e3b5a184636d9d930f148c50b038f0d0646202", size = 286342, upload_time = "2025-05-20T23:19:49.832Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/85/32/10bb5764d90a8eee674e9dc6f4db6a0ab47c8c4d0d83c27f7c39ac415a4d/click-8.2.1-py3-none-any.whl", hash = "sha256:61a3265b914e850b85317d0b3109c7f8cd35a670f963866005d6ef1d5175a12b", size = 102215 }, + { url = "https://files.pythonhosted.org/packages/85/32/10bb5764d90a8eee674e9dc6f4db6a0ab47c8c4d0d83c27f7c39ac415a4d/click-8.2.1-py3-none-any.whl", hash = "sha256:61a3265b914e850b85317d0b3109c7f8cd35a670f963866005d6ef1d5175a12b", size = 102215, upload_time = "2025-05-20T23:19:47.796Z" }, ] [[package]] name = "colorama" version = "0.4.6" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload_time = "2022-10-25T02:36:22.414Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 }, + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload_time = "2022-10-25T02:36:20.889Z" }, ] [[package]] name = "comm" version = "0.2.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/4c/13/7d740c5849255756bc17888787313b61fd38a0a8304fc4f073dfc46122aa/comm-0.2.3.tar.gz", hash = "sha256:2dc8048c10962d55d7ad693be1e7045d891b7ce8d999c97963a5e3e99c055971", size = 6319 } +sdist = { url = "https://files.pythonhosted.org/packages/4c/13/7d740c5849255756bc17888787313b61fd38a0a8304fc4f073dfc46122aa/comm-0.2.3.tar.gz", hash = "sha256:2dc8048c10962d55d7ad693be1e7045d891b7ce8d999c97963a5e3e99c055971", size = 6319, upload_time = "2025-07-25T14:02:04.452Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl", hash = "sha256:c615d91d75f7f04f095b30d1c1711babd43bdc6419c1be9886a85f2f4e489417", size = 7294 }, + { url = "https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl", hash = "sha256:c615d91d75f7f04f095b30d1c1711babd43bdc6419c1be9886a85f2f4e489417", size = 7294, upload_time = "2025-07-25T14:02:02.896Z" }, ] [[package]] name = "coverage" version = "7.10.7" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/51/26/d22c300112504f5f9a9fd2297ce33c35f3d353e4aeb987c8419453b2a7c2/coverage-7.10.7.tar.gz", hash = "sha256:f4ab143ab113be368a3e9b795f9cd7906c5ef407d6173fe9675a902e1fffc239", size = 827704 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/13/e4/eb12450f71b542a53972d19117ea5a5cea1cab3ac9e31b0b5d498df1bd5a/coverage-7.10.7-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7bb3b9ddb87ef7725056572368040c32775036472d5a033679d1fa6c8dc08417", size = 218290 }, - { url = "https://files.pythonhosted.org/packages/37/66/593f9be12fc19fb36711f19a5371af79a718537204d16ea1d36f16bd78d2/coverage-7.10.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:18afb24843cbc175687225cab1138c95d262337f5473512010e46831aa0c2973", size = 218515 }, - { url = "https://files.pythonhosted.org/packages/66/80/4c49f7ae09cafdacc73fbc30949ffe77359635c168f4e9ff33c9ebb07838/coverage-7.10.7-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:399a0b6347bcd3822be369392932884b8216d0944049ae22925631a9b3d4ba4c", size = 250020 }, - { url = "https://files.pythonhosted.org/packages/a6/90/a64aaacab3b37a17aaedd83e8000142561a29eb262cede42d94a67f7556b/coverage-7.10.7-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:314f2c326ded3f4b09be11bc282eb2fc861184bc95748ae67b360ac962770be7", size = 252769 }, - { url = "https://files.pythonhosted.org/packages/98/2e/2dda59afd6103b342e096f246ebc5f87a3363b5412609946c120f4e7750d/coverage-7.10.7-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c41e71c9cfb854789dee6fc51e46743a6d138b1803fab6cb860af43265b42ea6", size = 253901 }, - { url = "https://files.pythonhosted.org/packages/53/dc/8d8119c9051d50f3119bb4a75f29f1e4a6ab9415cd1fa8bf22fcc3fb3b5f/coverage-7.10.7-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc01f57ca26269c2c706e838f6422e2a8788e41b3e3c65e2f41148212e57cd59", size = 250413 }, - { url = "https://files.pythonhosted.org/packages/98/b3/edaff9c5d79ee4d4b6d3fe046f2b1d799850425695b789d491a64225d493/coverage-7.10.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a6442c59a8ac8b85812ce33bc4d05bde3fb22321fa8294e2a5b487c3505f611b", size = 251820 }, - { url = "https://files.pythonhosted.org/packages/11/25/9a0728564bb05863f7e513e5a594fe5ffef091b325437f5430e8cfb0d530/coverage-7.10.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:78a384e49f46b80fb4c901d52d92abe098e78768ed829c673fbb53c498bef73a", size = 249941 }, - { url = "https://files.pythonhosted.org/packages/e0/fd/ca2650443bfbef5b0e74373aac4df67b08180d2f184b482c41499668e258/coverage-7.10.7-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:5e1e9802121405ede4b0133aa4340ad8186a1d2526de5b7c3eca519db7bb89fb", size = 249519 }, - { url = "https://files.pythonhosted.org/packages/24/79/f692f125fb4299b6f963b0745124998ebb8e73ecdfce4ceceb06a8c6bec5/coverage-7.10.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d41213ea25a86f69efd1575073d34ea11aabe075604ddf3d148ecfec9e1e96a1", size = 251375 }, - { url = "https://files.pythonhosted.org/packages/5e/75/61b9bbd6c7d24d896bfeec57acba78e0f8deac68e6baf2d4804f7aae1f88/coverage-7.10.7-cp312-cp312-win32.whl", hash = "sha256:77eb4c747061a6af8d0f7bdb31f1e108d172762ef579166ec84542f711d90256", size = 220699 }, - { url = "https://files.pythonhosted.org/packages/ca/f3/3bf7905288b45b075918d372498f1cf845b5b579b723c8fd17168018d5f5/coverage-7.10.7-cp312-cp312-win_amd64.whl", hash = "sha256:f51328ffe987aecf6d09f3cd9d979face89a617eacdaea43e7b3080777f647ba", size = 221512 }, - { url = "https://files.pythonhosted.org/packages/5c/44/3e32dbe933979d05cf2dac5e697c8599cfe038aaf51223ab901e208d5a62/coverage-7.10.7-cp312-cp312-win_arm64.whl", hash = "sha256:bda5e34f8a75721c96085903c6f2197dc398c20ffd98df33f866a9c8fd95f4bf", size = 220147 }, - { url = "https://files.pythonhosted.org/packages/9a/94/b765c1abcb613d103b64fcf10395f54d69b0ef8be6a0dd9c524384892cc7/coverage-7.10.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:981a651f543f2854abd3b5fcb3263aac581b18209be49863ba575de6edf4c14d", size = 218320 }, - { url = "https://files.pythonhosted.org/packages/72/4f/732fff31c119bb73b35236dd333030f32c4bfe909f445b423e6c7594f9a2/coverage-7.10.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:73ab1601f84dc804f7812dc297e93cd99381162da39c47040a827d4e8dafe63b", size = 218575 }, - { url = "https://files.pythonhosted.org/packages/87/02/ae7e0af4b674be47566707777db1aa375474f02a1d64b9323e5813a6cdd5/coverage-7.10.7-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:a8b6f03672aa6734e700bbcd65ff050fd19cddfec4b031cc8cf1c6967de5a68e", size = 249568 }, - { url = "https://files.pythonhosted.org/packages/a2/77/8c6d22bf61921a59bce5471c2f1f7ac30cd4ac50aadde72b8c48d5727902/coverage-7.10.7-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:10b6ba00ab1132a0ce4428ff68cf50a25efd6840a42cdf4239c9b99aad83be8b", size = 252174 }, - { url = "https://files.pythonhosted.org/packages/b1/20/b6ea4f69bbb52dac0aebd62157ba6a9dddbfe664f5af8122dac296c3ee15/coverage-7.10.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c79124f70465a150e89340de5963f936ee97097d2ef76c869708c4248c63ca49", size = 253447 }, - { url = "https://files.pythonhosted.org/packages/f9/28/4831523ba483a7f90f7b259d2018fef02cb4d5b90bc7c1505d6e5a84883c/coverage-7.10.7-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:69212fbccdbd5b0e39eac4067e20a4a5256609e209547d86f740d68ad4f04911", size = 249779 }, - { url = "https://files.pythonhosted.org/packages/a7/9f/4331142bc98c10ca6436d2d620c3e165f31e6c58d43479985afce6f3191c/coverage-7.10.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7ea7c6c9d0d286d04ed3541747e6597cbe4971f22648b68248f7ddcd329207f0", size = 251604 }, - { url = "https://files.pythonhosted.org/packages/ce/60/bda83b96602036b77ecf34e6393a3836365481b69f7ed7079ab85048202b/coverage-7.10.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b9be91986841a75042b3e3243d0b3cb0b2434252b977baaf0cd56e960fe1e46f", size = 249497 }, - { url = "https://files.pythonhosted.org/packages/5f/af/152633ff35b2af63977edd835d8e6430f0caef27d171edf2fc76c270ef31/coverage-7.10.7-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:b281d5eca50189325cfe1f365fafade89b14b4a78d9b40b05ddd1fc7d2a10a9c", size = 249350 }, - { url = "https://files.pythonhosted.org/packages/9d/71/d92105d122bd21cebba877228990e1646d862e34a98bb3374d3fece5a794/coverage-7.10.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:99e4aa63097ab1118e75a848a28e40d68b08a5e19ce587891ab7fd04475e780f", size = 251111 }, - { url = "https://files.pythonhosted.org/packages/a2/9e/9fdb08f4bf476c912f0c3ca292e019aab6712c93c9344a1653986c3fd305/coverage-7.10.7-cp313-cp313-win32.whl", hash = "sha256:dc7c389dce432500273eaf48f410b37886be9208b2dd5710aaf7c57fd442c698", size = 220746 }, - { url = "https://files.pythonhosted.org/packages/b1/b1/a75fd25df44eab52d1931e89980d1ada46824c7a3210be0d3c88a44aaa99/coverage-7.10.7-cp313-cp313-win_amd64.whl", hash = "sha256:cac0fdca17b036af3881a9d2729a850b76553f3f716ccb0360ad4dbc06b3b843", size = 221541 }, - { url = "https://files.pythonhosted.org/packages/14/3a/d720d7c989562a6e9a14b2c9f5f2876bdb38e9367126d118495b89c99c37/coverage-7.10.7-cp313-cp313-win_arm64.whl", hash = "sha256:4b6f236edf6e2f9ae8fcd1332da4e791c1b6ba0dc16a2dc94590ceccb482e546", size = 220170 }, - { url = "https://files.pythonhosted.org/packages/bb/22/e04514bf2a735d8b0add31d2b4ab636fc02370730787c576bb995390d2d5/coverage-7.10.7-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a0ec07fd264d0745ee396b666d47cef20875f4ff2375d7c4f58235886cc1ef0c", size = 219029 }, - { url = "https://files.pythonhosted.org/packages/11/0b/91128e099035ece15da3445d9015e4b4153a6059403452d324cbb0a575fa/coverage-7.10.7-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:dd5e856ebb7bfb7672b0086846db5afb4567a7b9714b8a0ebafd211ec7ce6a15", size = 219259 }, - { url = "https://files.pythonhosted.org/packages/8b/51/66420081e72801536a091a0c8f8c1f88a5c4bf7b9b1bdc6222c7afe6dc9b/coverage-7.10.7-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:f57b2a3c8353d3e04acf75b3fed57ba41f5c0646bbf1d10c7c282291c97936b4", size = 260592 }, - { url = "https://files.pythonhosted.org/packages/5d/22/9b8d458c2881b22df3db5bb3e7369e63d527d986decb6c11a591ba2364f7/coverage-7.10.7-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:1ef2319dd15a0b009667301a3f84452a4dc6fddfd06b0c5c53ea472d3989fbf0", size = 262768 }, - { url = "https://files.pythonhosted.org/packages/f7/08/16bee2c433e60913c610ea200b276e8eeef084b0d200bdcff69920bd5828/coverage-7.10.7-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:83082a57783239717ceb0ad584de3c69cf581b2a95ed6bf81ea66034f00401c0", size = 264995 }, - { url = "https://files.pythonhosted.org/packages/20/9d/e53eb9771d154859b084b90201e5221bca7674ba449a17c101a5031d4054/coverage-7.10.7-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:50aa94fb1fb9a397eaa19c0d5ec15a5edd03a47bf1a3a6111a16b36e190cff65", size = 259546 }, - { url = "https://files.pythonhosted.org/packages/ad/b0/69bc7050f8d4e56a89fb550a1577d5d0d1db2278106f6f626464067b3817/coverage-7.10.7-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2120043f147bebb41c85b97ac45dd173595ff14f2a584f2963891cbcc3091541", size = 262544 }, - { url = "https://files.pythonhosted.org/packages/ef/4b/2514b060dbd1bc0aaf23b852c14bb5818f244c664cb16517feff6bb3a5ab/coverage-7.10.7-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:2fafd773231dd0378fdba66d339f84904a8e57a262f583530f4f156ab83863e6", size = 260308 }, - { url = "https://files.pythonhosted.org/packages/54/78/7ba2175007c246d75e496f64c06e94122bdb914790a1285d627a918bd271/coverage-7.10.7-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:0b944ee8459f515f28b851728ad224fa2d068f1513ef6b7ff1efafeb2185f999", size = 258920 }, - { url = "https://files.pythonhosted.org/packages/c0/b3/fac9f7abbc841409b9a410309d73bfa6cfb2e51c3fada738cb607ce174f8/coverage-7.10.7-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4b583b97ab2e3efe1b3e75248a9b333bd3f8b0b1b8e5b45578e05e5850dfb2c2", size = 261434 }, - { url = "https://files.pythonhosted.org/packages/ee/51/a03bec00d37faaa891b3ff7387192cef20f01604e5283a5fabc95346befa/coverage-7.10.7-cp313-cp313t-win32.whl", hash = "sha256:2a78cd46550081a7909b3329e2266204d584866e8d97b898cd7fb5ac8d888b1a", size = 221403 }, - { url = "https://files.pythonhosted.org/packages/53/22/3cf25d614e64bf6d8e59c7c669b20d6d940bb337bdee5900b9ca41c820bb/coverage-7.10.7-cp313-cp313t-win_amd64.whl", hash = "sha256:33a5e6396ab684cb43dc7befa386258acb2d7fae7f67330ebb85ba4ea27938eb", size = 222469 }, - { url = "https://files.pythonhosted.org/packages/49/a1/00164f6d30d8a01c3c9c48418a7a5be394de5349b421b9ee019f380df2a0/coverage-7.10.7-cp313-cp313t-win_arm64.whl", hash = "sha256:86b0e7308289ddde73d863b7683f596d8d21c7d8664ce1dee061d0bcf3fbb4bb", size = 220731 }, - { url = "https://files.pythonhosted.org/packages/23/9c/5844ab4ca6a4dd97a1850e030a15ec7d292b5c5cb93082979225126e35dd/coverage-7.10.7-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:b06f260b16ead11643a5a9f955bd4b5fd76c1a4c6796aeade8520095b75de520", size = 218302 }, - { url = "https://files.pythonhosted.org/packages/f0/89/673f6514b0961d1f0e20ddc242e9342f6da21eaba3489901b565c0689f34/coverage-7.10.7-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:212f8f2e0612778f09c55dd4872cb1f64a1f2b074393d139278ce902064d5b32", size = 218578 }, - { url = "https://files.pythonhosted.org/packages/05/e8/261cae479e85232828fb17ad536765c88dd818c8470aca690b0ac6feeaa3/coverage-7.10.7-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3445258bcded7d4aa630ab8296dea4d3f15a255588dd535f980c193ab6b95f3f", size = 249629 }, - { url = "https://files.pythonhosted.org/packages/82/62/14ed6546d0207e6eda876434e3e8475a3e9adbe32110ce896c9e0c06bb9a/coverage-7.10.7-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:bb45474711ba385c46a0bfe696c695a929ae69ac636cda8f532be9e8c93d720a", size = 252162 }, - { url = "https://files.pythonhosted.org/packages/ff/49/07f00db9ac6478e4358165a08fb41b469a1b053212e8a00cb02f0d27a05f/coverage-7.10.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:813922f35bd800dca9994c5971883cbc0d291128a5de6b167c7aa697fcf59360", size = 253517 }, - { url = "https://files.pythonhosted.org/packages/a2/59/c5201c62dbf165dfbc91460f6dbbaa85a8b82cfa6131ac45d6c1bfb52deb/coverage-7.10.7-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:93c1b03552081b2a4423091d6fb3787265b8f86af404cff98d1b5342713bdd69", size = 249632 }, - { url = "https://files.pythonhosted.org/packages/07/ae/5920097195291a51fb00b3a70b9bbd2edbfe3c84876a1762bd1ef1565ebc/coverage-7.10.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:cc87dd1b6eaf0b848eebb1c86469b9f72a1891cb42ac7adcfbce75eadb13dd14", size = 251520 }, - { url = "https://files.pythonhosted.org/packages/b9/3c/a815dde77a2981f5743a60b63df31cb322c944843e57dbd579326625a413/coverage-7.10.7-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:39508ffda4f343c35f3236fe8d1a6634a51f4581226a1262769d7f970e73bffe", size = 249455 }, - { url = "https://files.pythonhosted.org/packages/aa/99/f5cdd8421ea656abefb6c0ce92556709db2265c41e8f9fc6c8ae0f7824c9/coverage-7.10.7-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:925a1edf3d810537c5a3abe78ec5530160c5f9a26b1f4270b40e62cc79304a1e", size = 249287 }, - { url = "https://files.pythonhosted.org/packages/c3/7a/e9a2da6a1fc5d007dd51fca083a663ab930a8c4d149c087732a5dbaa0029/coverage-7.10.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2c8b9a0636f94c43cd3576811e05b89aa9bc2d0a85137affc544ae5cb0e4bfbd", size = 250946 }, - { url = "https://files.pythonhosted.org/packages/ef/5b/0b5799aa30380a949005a353715095d6d1da81927d6dbed5def2200a4e25/coverage-7.10.7-cp314-cp314-win32.whl", hash = "sha256:b7b8288eb7cdd268b0304632da8cb0bb93fadcfec2fe5712f7b9cc8f4d487be2", size = 221009 }, - { url = "https://files.pythonhosted.org/packages/da/b0/e802fbb6eb746de006490abc9bb554b708918b6774b722bb3a0e6aa1b7de/coverage-7.10.7-cp314-cp314-win_amd64.whl", hash = "sha256:1ca6db7c8807fb9e755d0379ccc39017ce0a84dcd26d14b5a03b78563776f681", size = 221804 }, - { url = "https://files.pythonhosted.org/packages/9e/e8/71d0c8e374e31f39e3389bb0bd19e527d46f00ea8571ec7ec8fd261d8b44/coverage-7.10.7-cp314-cp314-win_arm64.whl", hash = "sha256:097c1591f5af4496226d5783d036bf6fd6cd0cbc132e071b33861de756efb880", size = 220384 }, - { url = "https://files.pythonhosted.org/packages/62/09/9a5608d319fa3eba7a2019addeacb8c746fb50872b57a724c9f79f146969/coverage-7.10.7-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:a62c6ef0d50e6de320c270ff91d9dd0a05e7250cac2a800b7784bae474506e63", size = 219047 }, - { url = "https://files.pythonhosted.org/packages/f5/6f/f58d46f33db9f2e3647b2d0764704548c184e6f5e014bef528b7f979ef84/coverage-7.10.7-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:9fa6e4dd51fe15d8738708a973470f67a855ca50002294852e9571cdbd9433f2", size = 219266 }, - { url = "https://files.pythonhosted.org/packages/74/5c/183ffc817ba68e0b443b8c934c8795553eb0c14573813415bd59941ee165/coverage-7.10.7-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:8fb190658865565c549b6b4706856d6a7b09302c797eb2cf8e7fe9dabb043f0d", size = 260767 }, - { url = "https://files.pythonhosted.org/packages/0f/48/71a8abe9c1ad7e97548835e3cc1adbf361e743e9d60310c5f75c9e7bf847/coverage-7.10.7-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:affef7c76a9ef259187ef31599a9260330e0335a3011732c4b9effa01e1cd6e0", size = 262931 }, - { url = "https://files.pythonhosted.org/packages/84/fd/193a8fb132acfc0a901f72020e54be5e48021e1575bb327d8ee1097a28fd/coverage-7.10.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6e16e07d85ca0cf8bafe5f5d23a0b850064e8e945d5677492b06bbe6f09cc699", size = 265186 }, - { url = "https://files.pythonhosted.org/packages/b1/8f/74ecc30607dd95ad50e3034221113ccb1c6d4e8085cc761134782995daae/coverage-7.10.7-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:03ffc58aacdf65d2a82bbeb1ffe4d01ead4017a21bfd0454983b88ca73af94b9", size = 259470 }, - { url = "https://files.pythonhosted.org/packages/0f/55/79ff53a769f20d71b07023ea115c9167c0bb56f281320520cf64c5298a96/coverage-7.10.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:1b4fd784344d4e52647fd7857b2af5b3fbe6c239b0b5fa63e94eb67320770e0f", size = 262626 }, - { url = "https://files.pythonhosted.org/packages/88/e2/dac66c140009b61ac3fc13af673a574b00c16efdf04f9b5c740703e953c0/coverage-7.10.7-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:0ebbaddb2c19b71912c6f2518e791aa8b9f054985a0769bdb3a53ebbc765c6a1", size = 260386 }, - { url = "https://files.pythonhosted.org/packages/a2/f1/f48f645e3f33bb9ca8a496bc4a9671b52f2f353146233ebd7c1df6160440/coverage-7.10.7-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:a2d9a3b260cc1d1dbdb1c582e63ddcf5363426a1a68faa0f5da28d8ee3c722a0", size = 258852 }, - { url = "https://files.pythonhosted.org/packages/bb/3b/8442618972c51a7affeead957995cfa8323c0c9bcf8fa5a027421f720ff4/coverage-7.10.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a3cc8638b2480865eaa3926d192e64ce6c51e3d29c849e09d5b4ad95efae5399", size = 261534 }, - { url = "https://files.pythonhosted.org/packages/b2/dc/101f3fa3a45146db0cb03f5b4376e24c0aac818309da23e2de0c75295a91/coverage-7.10.7-cp314-cp314t-win32.whl", hash = "sha256:67f8c5cbcd3deb7a60b3345dffc89a961a484ed0af1f6f73de91705cc6e31235", size = 221784 }, - { url = "https://files.pythonhosted.org/packages/4c/a1/74c51803fc70a8a40d7346660379e144be772bab4ac7bb6e6b905152345c/coverage-7.10.7-cp314-cp314t-win_amd64.whl", hash = "sha256:e1ed71194ef6dea7ed2d5cb5f7243d4bcd334bfb63e59878519be558078f848d", size = 222905 }, - { url = "https://files.pythonhosted.org/packages/12/65/f116a6d2127df30bcafbceef0302d8a64ba87488bf6f73a6d8eebf060873/coverage-7.10.7-cp314-cp314t-win_arm64.whl", hash = "sha256:7fe650342addd8524ca63d77b2362b02345e5f1a093266787d210c70a50b471a", size = 220922 }, - { url = "https://files.pythonhosted.org/packages/ec/16/114df1c291c22cac3b0c127a73e0af5c12ed7bbb6558d310429a0ae24023/coverage-7.10.7-py3-none-any.whl", hash = "sha256:f7941f6f2fe6dd6807a1208737b8a0cbcf1cc6d7b07d24998ad2d63590868260", size = 209952 }, +sdist = { url = "https://files.pythonhosted.org/packages/51/26/d22c300112504f5f9a9fd2297ce33c35f3d353e4aeb987c8419453b2a7c2/coverage-7.10.7.tar.gz", hash = "sha256:f4ab143ab113be368a3e9b795f9cd7906c5ef407d6173fe9675a902e1fffc239", size = 827704, upload_time = "2025-09-21T20:03:56.815Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/13/e4/eb12450f71b542a53972d19117ea5a5cea1cab3ac9e31b0b5d498df1bd5a/coverage-7.10.7-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7bb3b9ddb87ef7725056572368040c32775036472d5a033679d1fa6c8dc08417", size = 218290, upload_time = "2025-09-21T20:01:36.455Z" }, + { url = "https://files.pythonhosted.org/packages/37/66/593f9be12fc19fb36711f19a5371af79a718537204d16ea1d36f16bd78d2/coverage-7.10.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:18afb24843cbc175687225cab1138c95d262337f5473512010e46831aa0c2973", size = 218515, upload_time = "2025-09-21T20:01:37.982Z" }, + { url = "https://files.pythonhosted.org/packages/66/80/4c49f7ae09cafdacc73fbc30949ffe77359635c168f4e9ff33c9ebb07838/coverage-7.10.7-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:399a0b6347bcd3822be369392932884b8216d0944049ae22925631a9b3d4ba4c", size = 250020, upload_time = "2025-09-21T20:01:39.617Z" }, + { url = "https://files.pythonhosted.org/packages/a6/90/a64aaacab3b37a17aaedd83e8000142561a29eb262cede42d94a67f7556b/coverage-7.10.7-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:314f2c326ded3f4b09be11bc282eb2fc861184bc95748ae67b360ac962770be7", size = 252769, upload_time = "2025-09-21T20:01:41.341Z" }, + { url = "https://files.pythonhosted.org/packages/98/2e/2dda59afd6103b342e096f246ebc5f87a3363b5412609946c120f4e7750d/coverage-7.10.7-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c41e71c9cfb854789dee6fc51e46743a6d138b1803fab6cb860af43265b42ea6", size = 253901, upload_time = "2025-09-21T20:01:43.042Z" }, + { url = "https://files.pythonhosted.org/packages/53/dc/8d8119c9051d50f3119bb4a75f29f1e4a6ab9415cd1fa8bf22fcc3fb3b5f/coverage-7.10.7-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc01f57ca26269c2c706e838f6422e2a8788e41b3e3c65e2f41148212e57cd59", size = 250413, upload_time = "2025-09-21T20:01:44.469Z" }, + { url = "https://files.pythonhosted.org/packages/98/b3/edaff9c5d79ee4d4b6d3fe046f2b1d799850425695b789d491a64225d493/coverage-7.10.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a6442c59a8ac8b85812ce33bc4d05bde3fb22321fa8294e2a5b487c3505f611b", size = 251820, upload_time = "2025-09-21T20:01:45.915Z" }, + { url = "https://files.pythonhosted.org/packages/11/25/9a0728564bb05863f7e513e5a594fe5ffef091b325437f5430e8cfb0d530/coverage-7.10.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:78a384e49f46b80fb4c901d52d92abe098e78768ed829c673fbb53c498bef73a", size = 249941, upload_time = "2025-09-21T20:01:47.296Z" }, + { url = "https://files.pythonhosted.org/packages/e0/fd/ca2650443bfbef5b0e74373aac4df67b08180d2f184b482c41499668e258/coverage-7.10.7-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:5e1e9802121405ede4b0133aa4340ad8186a1d2526de5b7c3eca519db7bb89fb", size = 249519, upload_time = "2025-09-21T20:01:48.73Z" }, + { url = "https://files.pythonhosted.org/packages/24/79/f692f125fb4299b6f963b0745124998ebb8e73ecdfce4ceceb06a8c6bec5/coverage-7.10.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d41213ea25a86f69efd1575073d34ea11aabe075604ddf3d148ecfec9e1e96a1", size = 251375, upload_time = "2025-09-21T20:01:50.529Z" }, + { url = "https://files.pythonhosted.org/packages/5e/75/61b9bbd6c7d24d896bfeec57acba78e0f8deac68e6baf2d4804f7aae1f88/coverage-7.10.7-cp312-cp312-win32.whl", hash = "sha256:77eb4c747061a6af8d0f7bdb31f1e108d172762ef579166ec84542f711d90256", size = 220699, upload_time = "2025-09-21T20:01:51.941Z" }, + { url = "https://files.pythonhosted.org/packages/ca/f3/3bf7905288b45b075918d372498f1cf845b5b579b723c8fd17168018d5f5/coverage-7.10.7-cp312-cp312-win_amd64.whl", hash = "sha256:f51328ffe987aecf6d09f3cd9d979face89a617eacdaea43e7b3080777f647ba", size = 221512, upload_time = "2025-09-21T20:01:53.481Z" }, + { url = "https://files.pythonhosted.org/packages/5c/44/3e32dbe933979d05cf2dac5e697c8599cfe038aaf51223ab901e208d5a62/coverage-7.10.7-cp312-cp312-win_arm64.whl", hash = "sha256:bda5e34f8a75721c96085903c6f2197dc398c20ffd98df33f866a9c8fd95f4bf", size = 220147, upload_time = "2025-09-21T20:01:55.2Z" }, + { url = "https://files.pythonhosted.org/packages/9a/94/b765c1abcb613d103b64fcf10395f54d69b0ef8be6a0dd9c524384892cc7/coverage-7.10.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:981a651f543f2854abd3b5fcb3263aac581b18209be49863ba575de6edf4c14d", size = 218320, upload_time = "2025-09-21T20:01:56.629Z" }, + { url = "https://files.pythonhosted.org/packages/72/4f/732fff31c119bb73b35236dd333030f32c4bfe909f445b423e6c7594f9a2/coverage-7.10.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:73ab1601f84dc804f7812dc297e93cd99381162da39c47040a827d4e8dafe63b", size = 218575, upload_time = "2025-09-21T20:01:58.203Z" }, + { url = "https://files.pythonhosted.org/packages/87/02/ae7e0af4b674be47566707777db1aa375474f02a1d64b9323e5813a6cdd5/coverage-7.10.7-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:a8b6f03672aa6734e700bbcd65ff050fd19cddfec4b031cc8cf1c6967de5a68e", size = 249568, upload_time = "2025-09-21T20:01:59.748Z" }, + { url = "https://files.pythonhosted.org/packages/a2/77/8c6d22bf61921a59bce5471c2f1f7ac30cd4ac50aadde72b8c48d5727902/coverage-7.10.7-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:10b6ba00ab1132a0ce4428ff68cf50a25efd6840a42cdf4239c9b99aad83be8b", size = 252174, upload_time = "2025-09-21T20:02:01.192Z" }, + { url = "https://files.pythonhosted.org/packages/b1/20/b6ea4f69bbb52dac0aebd62157ba6a9dddbfe664f5af8122dac296c3ee15/coverage-7.10.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c79124f70465a150e89340de5963f936ee97097d2ef76c869708c4248c63ca49", size = 253447, upload_time = "2025-09-21T20:02:02.701Z" }, + { url = "https://files.pythonhosted.org/packages/f9/28/4831523ba483a7f90f7b259d2018fef02cb4d5b90bc7c1505d6e5a84883c/coverage-7.10.7-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:69212fbccdbd5b0e39eac4067e20a4a5256609e209547d86f740d68ad4f04911", size = 249779, upload_time = "2025-09-21T20:02:04.185Z" }, + { url = "https://files.pythonhosted.org/packages/a7/9f/4331142bc98c10ca6436d2d620c3e165f31e6c58d43479985afce6f3191c/coverage-7.10.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7ea7c6c9d0d286d04ed3541747e6597cbe4971f22648b68248f7ddcd329207f0", size = 251604, upload_time = "2025-09-21T20:02:06.034Z" }, + { url = "https://files.pythonhosted.org/packages/ce/60/bda83b96602036b77ecf34e6393a3836365481b69f7ed7079ab85048202b/coverage-7.10.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b9be91986841a75042b3e3243d0b3cb0b2434252b977baaf0cd56e960fe1e46f", size = 249497, upload_time = "2025-09-21T20:02:07.619Z" }, + { url = "https://files.pythonhosted.org/packages/5f/af/152633ff35b2af63977edd835d8e6430f0caef27d171edf2fc76c270ef31/coverage-7.10.7-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:b281d5eca50189325cfe1f365fafade89b14b4a78d9b40b05ddd1fc7d2a10a9c", size = 249350, upload_time = "2025-09-21T20:02:10.34Z" }, + { url = "https://files.pythonhosted.org/packages/9d/71/d92105d122bd21cebba877228990e1646d862e34a98bb3374d3fece5a794/coverage-7.10.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:99e4aa63097ab1118e75a848a28e40d68b08a5e19ce587891ab7fd04475e780f", size = 251111, upload_time = "2025-09-21T20:02:12.122Z" }, + { url = "https://files.pythonhosted.org/packages/a2/9e/9fdb08f4bf476c912f0c3ca292e019aab6712c93c9344a1653986c3fd305/coverage-7.10.7-cp313-cp313-win32.whl", hash = "sha256:dc7c389dce432500273eaf48f410b37886be9208b2dd5710aaf7c57fd442c698", size = 220746, upload_time = "2025-09-21T20:02:13.919Z" }, + { url = "https://files.pythonhosted.org/packages/b1/b1/a75fd25df44eab52d1931e89980d1ada46824c7a3210be0d3c88a44aaa99/coverage-7.10.7-cp313-cp313-win_amd64.whl", hash = "sha256:cac0fdca17b036af3881a9d2729a850b76553f3f716ccb0360ad4dbc06b3b843", size = 221541, upload_time = "2025-09-21T20:02:15.57Z" }, + { url = "https://files.pythonhosted.org/packages/14/3a/d720d7c989562a6e9a14b2c9f5f2876bdb38e9367126d118495b89c99c37/coverage-7.10.7-cp313-cp313-win_arm64.whl", hash = "sha256:4b6f236edf6e2f9ae8fcd1332da4e791c1b6ba0dc16a2dc94590ceccb482e546", size = 220170, upload_time = "2025-09-21T20:02:17.395Z" }, + { url = "https://files.pythonhosted.org/packages/bb/22/e04514bf2a735d8b0add31d2b4ab636fc02370730787c576bb995390d2d5/coverage-7.10.7-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a0ec07fd264d0745ee396b666d47cef20875f4ff2375d7c4f58235886cc1ef0c", size = 219029, upload_time = "2025-09-21T20:02:18.936Z" }, + { url = "https://files.pythonhosted.org/packages/11/0b/91128e099035ece15da3445d9015e4b4153a6059403452d324cbb0a575fa/coverage-7.10.7-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:dd5e856ebb7bfb7672b0086846db5afb4567a7b9714b8a0ebafd211ec7ce6a15", size = 219259, upload_time = "2025-09-21T20:02:20.44Z" }, + { url = "https://files.pythonhosted.org/packages/8b/51/66420081e72801536a091a0c8f8c1f88a5c4bf7b9b1bdc6222c7afe6dc9b/coverage-7.10.7-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:f57b2a3c8353d3e04acf75b3fed57ba41f5c0646bbf1d10c7c282291c97936b4", size = 260592, upload_time = "2025-09-21T20:02:22.313Z" }, + { url = "https://files.pythonhosted.org/packages/5d/22/9b8d458c2881b22df3db5bb3e7369e63d527d986decb6c11a591ba2364f7/coverage-7.10.7-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:1ef2319dd15a0b009667301a3f84452a4dc6fddfd06b0c5c53ea472d3989fbf0", size = 262768, upload_time = "2025-09-21T20:02:24.287Z" }, + { url = "https://files.pythonhosted.org/packages/f7/08/16bee2c433e60913c610ea200b276e8eeef084b0d200bdcff69920bd5828/coverage-7.10.7-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:83082a57783239717ceb0ad584de3c69cf581b2a95ed6bf81ea66034f00401c0", size = 264995, upload_time = "2025-09-21T20:02:26.133Z" }, + { url = "https://files.pythonhosted.org/packages/20/9d/e53eb9771d154859b084b90201e5221bca7674ba449a17c101a5031d4054/coverage-7.10.7-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:50aa94fb1fb9a397eaa19c0d5ec15a5edd03a47bf1a3a6111a16b36e190cff65", size = 259546, upload_time = "2025-09-21T20:02:27.716Z" }, + { url = "https://files.pythonhosted.org/packages/ad/b0/69bc7050f8d4e56a89fb550a1577d5d0d1db2278106f6f626464067b3817/coverage-7.10.7-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2120043f147bebb41c85b97ac45dd173595ff14f2a584f2963891cbcc3091541", size = 262544, upload_time = "2025-09-21T20:02:29.216Z" }, + { url = "https://files.pythonhosted.org/packages/ef/4b/2514b060dbd1bc0aaf23b852c14bb5818f244c664cb16517feff6bb3a5ab/coverage-7.10.7-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:2fafd773231dd0378fdba66d339f84904a8e57a262f583530f4f156ab83863e6", size = 260308, upload_time = "2025-09-21T20:02:31.226Z" }, + { url = "https://files.pythonhosted.org/packages/54/78/7ba2175007c246d75e496f64c06e94122bdb914790a1285d627a918bd271/coverage-7.10.7-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:0b944ee8459f515f28b851728ad224fa2d068f1513ef6b7ff1efafeb2185f999", size = 258920, upload_time = "2025-09-21T20:02:32.823Z" }, + { url = "https://files.pythonhosted.org/packages/c0/b3/fac9f7abbc841409b9a410309d73bfa6cfb2e51c3fada738cb607ce174f8/coverage-7.10.7-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4b583b97ab2e3efe1b3e75248a9b333bd3f8b0b1b8e5b45578e05e5850dfb2c2", size = 261434, upload_time = "2025-09-21T20:02:34.86Z" }, + { url = "https://files.pythonhosted.org/packages/ee/51/a03bec00d37faaa891b3ff7387192cef20f01604e5283a5fabc95346befa/coverage-7.10.7-cp313-cp313t-win32.whl", hash = "sha256:2a78cd46550081a7909b3329e2266204d584866e8d97b898cd7fb5ac8d888b1a", size = 221403, upload_time = "2025-09-21T20:02:37.034Z" }, + { url = "https://files.pythonhosted.org/packages/53/22/3cf25d614e64bf6d8e59c7c669b20d6d940bb337bdee5900b9ca41c820bb/coverage-7.10.7-cp313-cp313t-win_amd64.whl", hash = "sha256:33a5e6396ab684cb43dc7befa386258acb2d7fae7f67330ebb85ba4ea27938eb", size = 222469, upload_time = "2025-09-21T20:02:39.011Z" }, + { url = "https://files.pythonhosted.org/packages/49/a1/00164f6d30d8a01c3c9c48418a7a5be394de5349b421b9ee019f380df2a0/coverage-7.10.7-cp313-cp313t-win_arm64.whl", hash = "sha256:86b0e7308289ddde73d863b7683f596d8d21c7d8664ce1dee061d0bcf3fbb4bb", size = 220731, upload_time = "2025-09-21T20:02:40.939Z" }, + { url = "https://files.pythonhosted.org/packages/23/9c/5844ab4ca6a4dd97a1850e030a15ec7d292b5c5cb93082979225126e35dd/coverage-7.10.7-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:b06f260b16ead11643a5a9f955bd4b5fd76c1a4c6796aeade8520095b75de520", size = 218302, upload_time = "2025-09-21T20:02:42.527Z" }, + { url = "https://files.pythonhosted.org/packages/f0/89/673f6514b0961d1f0e20ddc242e9342f6da21eaba3489901b565c0689f34/coverage-7.10.7-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:212f8f2e0612778f09c55dd4872cb1f64a1f2b074393d139278ce902064d5b32", size = 218578, upload_time = "2025-09-21T20:02:44.468Z" }, + { url = "https://files.pythonhosted.org/packages/05/e8/261cae479e85232828fb17ad536765c88dd818c8470aca690b0ac6feeaa3/coverage-7.10.7-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3445258bcded7d4aa630ab8296dea4d3f15a255588dd535f980c193ab6b95f3f", size = 249629, upload_time = "2025-09-21T20:02:46.503Z" }, + { url = "https://files.pythonhosted.org/packages/82/62/14ed6546d0207e6eda876434e3e8475a3e9adbe32110ce896c9e0c06bb9a/coverage-7.10.7-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:bb45474711ba385c46a0bfe696c695a929ae69ac636cda8f532be9e8c93d720a", size = 252162, upload_time = "2025-09-21T20:02:48.689Z" }, + { url = "https://files.pythonhosted.org/packages/ff/49/07f00db9ac6478e4358165a08fb41b469a1b053212e8a00cb02f0d27a05f/coverage-7.10.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:813922f35bd800dca9994c5971883cbc0d291128a5de6b167c7aa697fcf59360", size = 253517, upload_time = "2025-09-21T20:02:50.31Z" }, + { url = "https://files.pythonhosted.org/packages/a2/59/c5201c62dbf165dfbc91460f6dbbaa85a8b82cfa6131ac45d6c1bfb52deb/coverage-7.10.7-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:93c1b03552081b2a4423091d6fb3787265b8f86af404cff98d1b5342713bdd69", size = 249632, upload_time = "2025-09-21T20:02:51.971Z" }, + { url = "https://files.pythonhosted.org/packages/07/ae/5920097195291a51fb00b3a70b9bbd2edbfe3c84876a1762bd1ef1565ebc/coverage-7.10.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:cc87dd1b6eaf0b848eebb1c86469b9f72a1891cb42ac7adcfbce75eadb13dd14", size = 251520, upload_time = "2025-09-21T20:02:53.858Z" }, + { url = "https://files.pythonhosted.org/packages/b9/3c/a815dde77a2981f5743a60b63df31cb322c944843e57dbd579326625a413/coverage-7.10.7-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:39508ffda4f343c35f3236fe8d1a6634a51f4581226a1262769d7f970e73bffe", size = 249455, upload_time = "2025-09-21T20:02:55.807Z" }, + { url = "https://files.pythonhosted.org/packages/aa/99/f5cdd8421ea656abefb6c0ce92556709db2265c41e8f9fc6c8ae0f7824c9/coverage-7.10.7-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:925a1edf3d810537c5a3abe78ec5530160c5f9a26b1f4270b40e62cc79304a1e", size = 249287, upload_time = "2025-09-21T20:02:57.784Z" }, + { url = "https://files.pythonhosted.org/packages/c3/7a/e9a2da6a1fc5d007dd51fca083a663ab930a8c4d149c087732a5dbaa0029/coverage-7.10.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2c8b9a0636f94c43cd3576811e05b89aa9bc2d0a85137affc544ae5cb0e4bfbd", size = 250946, upload_time = "2025-09-21T20:02:59.431Z" }, + { url = "https://files.pythonhosted.org/packages/ef/5b/0b5799aa30380a949005a353715095d6d1da81927d6dbed5def2200a4e25/coverage-7.10.7-cp314-cp314-win32.whl", hash = "sha256:b7b8288eb7cdd268b0304632da8cb0bb93fadcfec2fe5712f7b9cc8f4d487be2", size = 221009, upload_time = "2025-09-21T20:03:01.324Z" }, + { url = "https://files.pythonhosted.org/packages/da/b0/e802fbb6eb746de006490abc9bb554b708918b6774b722bb3a0e6aa1b7de/coverage-7.10.7-cp314-cp314-win_amd64.whl", hash = "sha256:1ca6db7c8807fb9e755d0379ccc39017ce0a84dcd26d14b5a03b78563776f681", size = 221804, upload_time = "2025-09-21T20:03:03.4Z" }, + { url = "https://files.pythonhosted.org/packages/9e/e8/71d0c8e374e31f39e3389bb0bd19e527d46f00ea8571ec7ec8fd261d8b44/coverage-7.10.7-cp314-cp314-win_arm64.whl", hash = "sha256:097c1591f5af4496226d5783d036bf6fd6cd0cbc132e071b33861de756efb880", size = 220384, upload_time = "2025-09-21T20:03:05.111Z" }, + { url = "https://files.pythonhosted.org/packages/62/09/9a5608d319fa3eba7a2019addeacb8c746fb50872b57a724c9f79f146969/coverage-7.10.7-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:a62c6ef0d50e6de320c270ff91d9dd0a05e7250cac2a800b7784bae474506e63", size = 219047, upload_time = "2025-09-21T20:03:06.795Z" }, + { url = "https://files.pythonhosted.org/packages/f5/6f/f58d46f33db9f2e3647b2d0764704548c184e6f5e014bef528b7f979ef84/coverage-7.10.7-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:9fa6e4dd51fe15d8738708a973470f67a855ca50002294852e9571cdbd9433f2", size = 219266, upload_time = "2025-09-21T20:03:08.495Z" }, + { url = "https://files.pythonhosted.org/packages/74/5c/183ffc817ba68e0b443b8c934c8795553eb0c14573813415bd59941ee165/coverage-7.10.7-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:8fb190658865565c549b6b4706856d6a7b09302c797eb2cf8e7fe9dabb043f0d", size = 260767, upload_time = "2025-09-21T20:03:10.172Z" }, + { url = "https://files.pythonhosted.org/packages/0f/48/71a8abe9c1ad7e97548835e3cc1adbf361e743e9d60310c5f75c9e7bf847/coverage-7.10.7-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:affef7c76a9ef259187ef31599a9260330e0335a3011732c4b9effa01e1cd6e0", size = 262931, upload_time = "2025-09-21T20:03:11.861Z" }, + { url = "https://files.pythonhosted.org/packages/84/fd/193a8fb132acfc0a901f72020e54be5e48021e1575bb327d8ee1097a28fd/coverage-7.10.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6e16e07d85ca0cf8bafe5f5d23a0b850064e8e945d5677492b06bbe6f09cc699", size = 265186, upload_time = "2025-09-21T20:03:13.539Z" }, + { url = "https://files.pythonhosted.org/packages/b1/8f/74ecc30607dd95ad50e3034221113ccb1c6d4e8085cc761134782995daae/coverage-7.10.7-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:03ffc58aacdf65d2a82bbeb1ffe4d01ead4017a21bfd0454983b88ca73af94b9", size = 259470, upload_time = "2025-09-21T20:03:15.584Z" }, + { url = "https://files.pythonhosted.org/packages/0f/55/79ff53a769f20d71b07023ea115c9167c0bb56f281320520cf64c5298a96/coverage-7.10.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:1b4fd784344d4e52647fd7857b2af5b3fbe6c239b0b5fa63e94eb67320770e0f", size = 262626, upload_time = "2025-09-21T20:03:17.673Z" }, + { url = "https://files.pythonhosted.org/packages/88/e2/dac66c140009b61ac3fc13af673a574b00c16efdf04f9b5c740703e953c0/coverage-7.10.7-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:0ebbaddb2c19b71912c6f2518e791aa8b9f054985a0769bdb3a53ebbc765c6a1", size = 260386, upload_time = "2025-09-21T20:03:19.36Z" }, + { url = "https://files.pythonhosted.org/packages/a2/f1/f48f645e3f33bb9ca8a496bc4a9671b52f2f353146233ebd7c1df6160440/coverage-7.10.7-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:a2d9a3b260cc1d1dbdb1c582e63ddcf5363426a1a68faa0f5da28d8ee3c722a0", size = 258852, upload_time = "2025-09-21T20:03:21.007Z" }, + { url = "https://files.pythonhosted.org/packages/bb/3b/8442618972c51a7affeead957995cfa8323c0c9bcf8fa5a027421f720ff4/coverage-7.10.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a3cc8638b2480865eaa3926d192e64ce6c51e3d29c849e09d5b4ad95efae5399", size = 261534, upload_time = "2025-09-21T20:03:23.12Z" }, + { url = "https://files.pythonhosted.org/packages/b2/dc/101f3fa3a45146db0cb03f5b4376e24c0aac818309da23e2de0c75295a91/coverage-7.10.7-cp314-cp314t-win32.whl", hash = "sha256:67f8c5cbcd3deb7a60b3345dffc89a961a484ed0af1f6f73de91705cc6e31235", size = 221784, upload_time = "2025-09-21T20:03:24.769Z" }, + { url = "https://files.pythonhosted.org/packages/4c/a1/74c51803fc70a8a40d7346660379e144be772bab4ac7bb6e6b905152345c/coverage-7.10.7-cp314-cp314t-win_amd64.whl", hash = "sha256:e1ed71194ef6dea7ed2d5cb5f7243d4bcd334bfb63e59878519be558078f848d", size = 222905, upload_time = "2025-09-21T20:03:26.93Z" }, + { url = "https://files.pythonhosted.org/packages/12/65/f116a6d2127df30bcafbceef0302d8a64ba87488bf6f73a6d8eebf060873/coverage-7.10.7-cp314-cp314t-win_arm64.whl", hash = "sha256:7fe650342addd8524ca63d77b2362b02345e5f1a093266787d210c70a50b471a", size = 220922, upload_time = "2025-09-21T20:03:28.672Z" }, + { url = "https://files.pythonhosted.org/packages/ec/16/114df1c291c22cac3b0c127a73e0af5c12ed7bbb6558d310429a0ae24023/coverage-7.10.7-py3-none-any.whl", hash = "sha256:f7941f6f2fe6dd6807a1208737b8a0cbcf1cc6d7b07d24998ad2d63590868260", size = 209952, upload_time = "2025-09-21T20:03:53.918Z" }, ] [[package]] @@ -382,60 +395,60 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a9/62/e3664e6ffd7743e1694b244dde70b43a394f6f7fbcacf7014a8ff5197c73/cryptography-46.0.1.tar.gz", hash = "sha256:ed570874e88f213437f5cf758f9ef26cbfc3f336d889b1e592ee11283bb8d1c7", size = 749198 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4c/8c/44ee01267ec01e26e43ebfdae3f120ec2312aa72fa4c0507ebe41a26739f/cryptography-46.0.1-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:1cd6d50c1a8b79af1a6f703709d8973845f677c8e97b1268f5ff323d38ce8475", size = 7285044 }, - { url = "https://files.pythonhosted.org/packages/22/59/9ae689a25047e0601adfcb159ec4f83c0b4149fdb5c3030cc94cd218141d/cryptography-46.0.1-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0ff483716be32690c14636e54a1f6e2e1b7bf8e22ca50b989f88fa1b2d287080", size = 4308182 }, - { url = "https://files.pythonhosted.org/packages/c4/ee/ca6cc9df7118f2fcd142c76b1da0f14340d77518c05b1ebfbbabca6b9e7d/cryptography-46.0.1-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9873bf7c1f2a6330bdfe8621e7ce64b725784f9f0c3a6a55c3047af5849f920e", size = 4572393 }, - { url = "https://files.pythonhosted.org/packages/7f/a3/0f5296f63815d8e985922b05c31f77ce44787b3127a67c0b7f70f115c45f/cryptography-46.0.1-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:0dfb7c88d4462a0cfdd0d87a3c245a7bc3feb59de101f6ff88194f740f72eda6", size = 4308400 }, - { url = "https://files.pythonhosted.org/packages/5d/8c/74fcda3e4e01be1d32775d5b4dd841acaac3c1b8fa4d0774c7ac8d52463d/cryptography-46.0.1-cp311-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e22801b61613ebdebf7deb18b507919e107547a1d39a3b57f5f855032dd7cfb8", size = 4015786 }, - { url = "https://files.pythonhosted.org/packages/dc/b8/85d23287baeef273b0834481a3dd55bbed3a53587e3b8d9f0898235b8f91/cryptography-46.0.1-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:757af4f6341ce7a1e47c326ca2a81f41d236070217e5fbbad61bbfe299d55d28", size = 4982606 }, - { url = "https://files.pythonhosted.org/packages/e5/d3/de61ad5b52433b389afca0bc70f02a7a1f074651221f599ce368da0fe437/cryptography-46.0.1-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:f7a24ea78de345cfa7f6a8d3bde8b242c7fac27f2bd78fa23474ca38dfaeeab9", size = 4604234 }, - { url = "https://files.pythonhosted.org/packages/dc/1f/dbd4d6570d84748439237a7478d124ee0134bf166ad129267b7ed8ea6d22/cryptography-46.0.1-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:9e8776dac9e660c22241b6587fae51a67b4b0147daa4d176b172c3ff768ad736", size = 4307669 }, - { url = "https://files.pythonhosted.org/packages/ec/fd/ca0a14ce7f0bfe92fa727aacaf2217eb25eb7e4ed513b14d8e03b26e63ed/cryptography-46.0.1-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:9f40642a140c0c8649987027867242b801486865277cbabc8c6059ddef16dc8b", size = 4947579 }, - { url = "https://files.pythonhosted.org/packages/89/6b/09c30543bb93401f6f88fce556b3bdbb21e55ae14912c04b7bf355f5f96c/cryptography-46.0.1-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:449ef2b321bec7d97ef2c944173275ebdab78f3abdd005400cc409e27cd159ab", size = 4603669 }, - { url = "https://files.pythonhosted.org/packages/23/9a/38cb01cb09ce0adceda9fc627c9cf98eb890fc8d50cacbe79b011df20f8a/cryptography-46.0.1-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:2dd339ba3345b908fa3141ddba4025568fa6fd398eabce3ef72a29ac2d73ad75", size = 4435828 }, - { url = "https://files.pythonhosted.org/packages/0f/53/435b5c36a78d06ae0bef96d666209b0ecd8f8181bfe4dda46536705df59e/cryptography-46.0.1-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:7411c910fb2a412053cf33cfad0153ee20d27e256c6c3f14d7d7d1d9fec59fd5", size = 4709553 }, - { url = "https://files.pythonhosted.org/packages/f5/c4/0da6e55595d9b9cd3b6eb5dc22f3a07ded7f116a3ea72629cab595abb804/cryptography-46.0.1-cp311-abi3-win32.whl", hash = "sha256:cbb8e769d4cac884bb28e3ff620ef1001b75588a5c83c9c9f1fdc9afbe7f29b0", size = 3058327 }, - { url = "https://files.pythonhosted.org/packages/95/0f/cd29a35e0d6e78a0ee61793564c8cff0929c38391cb0de27627bdc7525aa/cryptography-46.0.1-cp311-abi3-win_amd64.whl", hash = "sha256:92e8cfe8bd7dd86eac0a677499894862cd5cc2fd74de917daa881d00871ac8e7", size = 3523893 }, - { url = "https://files.pythonhosted.org/packages/f2/dd/eea390f3e78432bc3d2f53952375f8b37cb4d37783e626faa6a51e751719/cryptography-46.0.1-cp311-abi3-win_arm64.whl", hash = "sha256:db5597a4c7353b2e5fb05a8e6cb74b56a4658a2b7bf3cb6b1821ae7e7fd6eaa0", size = 2932145 }, - { url = "https://files.pythonhosted.org/packages/0a/fb/c73588561afcd5e24b089952bd210b14676c0c5bf1213376350ae111945c/cryptography-46.0.1-cp314-cp314t-macosx_10_9_universal2.whl", hash = "sha256:4c49eda9a23019e11d32a0eb51a27b3e7ddedde91e099c0ac6373e3aacc0d2ee", size = 7193928 }, - { url = "https://files.pythonhosted.org/packages/26/34/0ff0bb2d2c79f25a2a63109f3b76b9108a906dd2a2eb5c1d460b9938adbb/cryptography-46.0.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:9babb7818fdd71394e576cf26c5452df77a355eac1a27ddfa24096665a27f8fd", size = 4293515 }, - { url = "https://files.pythonhosted.org/packages/df/b7/d4f848aee24ecd1be01db6c42c4a270069a4f02a105d9c57e143daf6cf0f/cryptography-46.0.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9f2c4cc63be3ef43c0221861177cee5d14b505cd4d4599a89e2cd273c4d3542a", size = 4545619 }, - { url = "https://files.pythonhosted.org/packages/44/a5/42fedefc754fd1901e2d95a69815ea4ec8a9eed31f4c4361fcab80288661/cryptography-46.0.1-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:41c281a74df173876da1dc9a9b6953d387f06e3d3ed9284e3baae3ab3f40883a", size = 4299160 }, - { url = "https://files.pythonhosted.org/packages/86/a1/cd21174f56e769c831fbbd6399a1b7519b0ff6280acec1b826d7b072640c/cryptography-46.0.1-cp314-cp314t-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0a17377fa52563d730248ba1f68185461fff36e8bc75d8787a7dd2e20a802b7a", size = 3994491 }, - { url = "https://files.pythonhosted.org/packages/8d/2f/a8cbfa1c029987ddc746fd966711d4fa71efc891d37fbe9f030fe5ab4eec/cryptography-46.0.1-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:0d1922d9280e08cde90b518a10cd66831f632960a8d08cb3418922d83fce6f12", size = 4960157 }, - { url = "https://files.pythonhosted.org/packages/67/ae/63a84e6789e0d5a2502edf06b552bcb0fa9ff16147265d5c44a211942abe/cryptography-46.0.1-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:af84e8e99f1a82cea149e253014ea9dc89f75b82c87bb6c7242203186f465129", size = 4577263 }, - { url = "https://files.pythonhosted.org/packages/ef/8f/1b9fa8e92bd9cbcb3b7e1e593a5232f2c1e6f9bd72b919c1a6b37d315f92/cryptography-46.0.1-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:ef648d2c690703501714588b2ba640facd50fd16548133b11b2859e8655a69da", size = 4298703 }, - { url = "https://files.pythonhosted.org/packages/c3/af/bb95db070e73fea3fae31d8a69ac1463d89d1c084220f549b00dd01094a8/cryptography-46.0.1-cp314-cp314t-manylinux_2_34_ppc64le.whl", hash = "sha256:e94eb5fa32a8a9f9bf991f424f002913e3dd7c699ef552db9b14ba6a76a6313b", size = 4926363 }, - { url = "https://files.pythonhosted.org/packages/f5/3b/d8fb17ffeb3a83157a1cc0aa5c60691d062aceecba09c2e5e77ebfc1870c/cryptography-46.0.1-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:534b96c0831855e29fc3b069b085fd185aa5353033631a585d5cd4dd5d40d657", size = 4576958 }, - { url = "https://files.pythonhosted.org/packages/d9/46/86bc3a05c10c8aa88c8ae7e953a8b4e407c57823ed201dbcba55c4d655f4/cryptography-46.0.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:f9b55038b5c6c47559aa33626d8ecd092f354e23de3c6975e4bb205df128a2a0", size = 4422507 }, - { url = "https://files.pythonhosted.org/packages/a8/4e/387e5a21dfd2b4198e74968a541cfd6128f66f8ec94ed971776e15091ac3/cryptography-46.0.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ec13b7105117dbc9afd023300fb9954d72ca855c274fe563e72428ece10191c0", size = 4683964 }, - { url = "https://files.pythonhosted.org/packages/25/a3/f9f5907b166adb8f26762071474b38bbfcf89858a5282f032899075a38a1/cryptography-46.0.1-cp314-cp314t-win32.whl", hash = "sha256:504e464944f2c003a0785b81668fe23c06f3b037e9cb9f68a7c672246319f277", size = 3029705 }, - { url = "https://files.pythonhosted.org/packages/12/66/4d3a4f1850db2e71c2b1628d14b70b5e4c1684a1bd462f7fffb93c041c38/cryptography-46.0.1-cp314-cp314t-win_amd64.whl", hash = "sha256:c52fded6383f7e20eaf70a60aeddd796b3677c3ad2922c801be330db62778e05", size = 3502175 }, - { url = "https://files.pythonhosted.org/packages/52/c7/9f10ad91435ef7d0d99a0b93c4360bea3df18050ff5b9038c489c31ac2f5/cryptography-46.0.1-cp314-cp314t-win_arm64.whl", hash = "sha256:9495d78f52c804b5ec8878b5b8c7873aa8e63db9cd9ee387ff2db3fffe4df784", size = 2912354 }, - { url = "https://files.pythonhosted.org/packages/98/e5/fbd632385542a3311915976f88e0dfcf09e62a3fc0aff86fb6762162a24d/cryptography-46.0.1-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:d84c40bdb8674c29fa192373498b6cb1e84f882889d21a471b45d1f868d8d44b", size = 7255677 }, - { url = "https://files.pythonhosted.org/packages/56/3e/13ce6eab9ad6eba1b15a7bd476f005a4c1b3f299f4c2f32b22408b0edccf/cryptography-46.0.1-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:9ed64e5083fa806709e74fc5ea067dfef9090e5b7a2320a49be3c9df3583a2d8", size = 4301110 }, - { url = "https://files.pythonhosted.org/packages/a2/67/65dc233c1ddd688073cf7b136b06ff4b84bf517ba5529607c9d79720fc67/cryptography-46.0.1-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:341fb7a26bc9d6093c1b124b9f13acc283d2d51da440b98b55ab3f79f2522ead", size = 4562369 }, - { url = "https://files.pythonhosted.org/packages/17/db/d64ae4c6f4e98c3dac5bf35dd4d103f4c7c345703e43560113e5e8e31b2b/cryptography-46.0.1-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:6ef1488967e729948d424d09c94753d0167ce59afba8d0f6c07a22b629c557b2", size = 4302126 }, - { url = "https://files.pythonhosted.org/packages/3d/19/5f1eea17d4805ebdc2e685b7b02800c4f63f3dd46cfa8d4c18373fea46c8/cryptography-46.0.1-cp38-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7823bc7cdf0b747ecfb096d004cc41573c2f5c7e3a29861603a2871b43d3ef32", size = 4009431 }, - { url = "https://files.pythonhosted.org/packages/81/b5/229ba6088fe7abccbfe4c5edb96c7a5ad547fac5fdd0d40aa6ea540b2985/cryptography-46.0.1-cp38-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:f736ab8036796f5a119ff8211deda416f8c15ce03776db704a7a4e17381cb2ef", size = 4980739 }, - { url = "https://files.pythonhosted.org/packages/3a/9c/50aa38907b201e74bc43c572f9603fa82b58e831bd13c245613a23cff736/cryptography-46.0.1-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:e46710a240a41d594953012213ea8ca398cd2448fbc5d0f1be8160b5511104a0", size = 4592289 }, - { url = "https://files.pythonhosted.org/packages/5a/33/229858f8a5bb22f82468bb285e9f4c44a31978d5f5830bb4ea1cf8a4e454/cryptography-46.0.1-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:84ef1f145de5aee82ea2447224dc23f065ff4cc5791bb3b506615957a6ba8128", size = 4301815 }, - { url = "https://files.pythonhosted.org/packages/52/cb/b76b2c87fbd6ed4a231884bea3ce073406ba8e2dae9defad910d33cbf408/cryptography-46.0.1-cp38-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:9394c7d5a7565ac5f7d9ba38b2617448eba384d7b107b262d63890079fad77ca", size = 4943251 }, - { url = "https://files.pythonhosted.org/packages/94/0f/f66125ecf88e4cb5b8017ff43f3a87ede2d064cb54a1c5893f9da9d65093/cryptography-46.0.1-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:ed957044e368ed295257ae3d212b95456bd9756df490e1ac4538857f67531fcc", size = 4591247 }, - { url = "https://files.pythonhosted.org/packages/f6/22/9f3134ae436b63b463cfdf0ff506a0570da6873adb4bf8c19b8a5b4bac64/cryptography-46.0.1-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:f7de12fa0eee6234de9a9ce0ffcfa6ce97361db7a50b09b65c63ac58e5f22fc7", size = 4428534 }, - { url = "https://files.pythonhosted.org/packages/89/39/e6042bcb2638650b0005c752c38ea830cbfbcbb1830e4d64d530000aa8dc/cryptography-46.0.1-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:7fab1187b6c6b2f11a326f33b036f7168f5b996aedd0c059f9738915e4e8f53a", size = 4699541 }, - { url = "https://files.pythonhosted.org/packages/68/46/753d457492d15458c7b5a653fc9a84a1c9c7a83af6ebdc94c3fc373ca6e8/cryptography-46.0.1-cp38-abi3-win32.whl", hash = "sha256:45f790934ac1018adeba46a0f7289b2b8fe76ba774a88c7f1922213a56c98bc1", size = 3043779 }, - { url = "https://files.pythonhosted.org/packages/2f/50/b6f3b540c2f6ee712feeb5fa780bb11fad76634e71334718568e7695cb55/cryptography-46.0.1-cp38-abi3-win_amd64.whl", hash = "sha256:7176a5ab56fac98d706921f6416a05e5aff7df0e4b91516f450f8627cda22af3", size = 3517226 }, - { url = "https://files.pythonhosted.org/packages/ff/e8/77d17d00981cdd27cc493e81e1749a0b8bbfb843780dbd841e30d7f50743/cryptography-46.0.1-cp38-abi3-win_arm64.whl", hash = "sha256:efc9e51c3e595267ff84adf56e9b357db89ab2279d7e375ffcaf8f678606f3d9", size = 2923149 }, +sdist = { url = "https://files.pythonhosted.org/packages/a9/62/e3664e6ffd7743e1694b244dde70b43a394f6f7fbcacf7014a8ff5197c73/cryptography-46.0.1.tar.gz", hash = "sha256:ed570874e88f213437f5cf758f9ef26cbfc3f336d889b1e592ee11283bb8d1c7", size = 749198, upload_time = "2025-09-17T00:10:35.797Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4c/8c/44ee01267ec01e26e43ebfdae3f120ec2312aa72fa4c0507ebe41a26739f/cryptography-46.0.1-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:1cd6d50c1a8b79af1a6f703709d8973845f677c8e97b1268f5ff323d38ce8475", size = 7285044, upload_time = "2025-09-17T00:08:36.807Z" }, + { url = "https://files.pythonhosted.org/packages/22/59/9ae689a25047e0601adfcb159ec4f83c0b4149fdb5c3030cc94cd218141d/cryptography-46.0.1-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0ff483716be32690c14636e54a1f6e2e1b7bf8e22ca50b989f88fa1b2d287080", size = 4308182, upload_time = "2025-09-17T00:08:39.388Z" }, + { url = "https://files.pythonhosted.org/packages/c4/ee/ca6cc9df7118f2fcd142c76b1da0f14340d77518c05b1ebfbbabca6b9e7d/cryptography-46.0.1-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9873bf7c1f2a6330bdfe8621e7ce64b725784f9f0c3a6a55c3047af5849f920e", size = 4572393, upload_time = "2025-09-17T00:08:41.663Z" }, + { url = "https://files.pythonhosted.org/packages/7f/a3/0f5296f63815d8e985922b05c31f77ce44787b3127a67c0b7f70f115c45f/cryptography-46.0.1-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:0dfb7c88d4462a0cfdd0d87a3c245a7bc3feb59de101f6ff88194f740f72eda6", size = 4308400, upload_time = "2025-09-17T00:08:43.559Z" }, + { url = "https://files.pythonhosted.org/packages/5d/8c/74fcda3e4e01be1d32775d5b4dd841acaac3c1b8fa4d0774c7ac8d52463d/cryptography-46.0.1-cp311-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e22801b61613ebdebf7deb18b507919e107547a1d39a3b57f5f855032dd7cfb8", size = 4015786, upload_time = "2025-09-17T00:08:45.758Z" }, + { url = "https://files.pythonhosted.org/packages/dc/b8/85d23287baeef273b0834481a3dd55bbed3a53587e3b8d9f0898235b8f91/cryptography-46.0.1-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:757af4f6341ce7a1e47c326ca2a81f41d236070217e5fbbad61bbfe299d55d28", size = 4982606, upload_time = "2025-09-17T00:08:47.602Z" }, + { url = "https://files.pythonhosted.org/packages/e5/d3/de61ad5b52433b389afca0bc70f02a7a1f074651221f599ce368da0fe437/cryptography-46.0.1-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:f7a24ea78de345cfa7f6a8d3bde8b242c7fac27f2bd78fa23474ca38dfaeeab9", size = 4604234, upload_time = "2025-09-17T00:08:49.879Z" }, + { url = "https://files.pythonhosted.org/packages/dc/1f/dbd4d6570d84748439237a7478d124ee0134bf166ad129267b7ed8ea6d22/cryptography-46.0.1-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:9e8776dac9e660c22241b6587fae51a67b4b0147daa4d176b172c3ff768ad736", size = 4307669, upload_time = "2025-09-17T00:08:52.321Z" }, + { url = "https://files.pythonhosted.org/packages/ec/fd/ca0a14ce7f0bfe92fa727aacaf2217eb25eb7e4ed513b14d8e03b26e63ed/cryptography-46.0.1-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:9f40642a140c0c8649987027867242b801486865277cbabc8c6059ddef16dc8b", size = 4947579, upload_time = "2025-09-17T00:08:54.697Z" }, + { url = "https://files.pythonhosted.org/packages/89/6b/09c30543bb93401f6f88fce556b3bdbb21e55ae14912c04b7bf355f5f96c/cryptography-46.0.1-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:449ef2b321bec7d97ef2c944173275ebdab78f3abdd005400cc409e27cd159ab", size = 4603669, upload_time = "2025-09-17T00:08:57.16Z" }, + { url = "https://files.pythonhosted.org/packages/23/9a/38cb01cb09ce0adceda9fc627c9cf98eb890fc8d50cacbe79b011df20f8a/cryptography-46.0.1-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:2dd339ba3345b908fa3141ddba4025568fa6fd398eabce3ef72a29ac2d73ad75", size = 4435828, upload_time = "2025-09-17T00:08:59.606Z" }, + { url = "https://files.pythonhosted.org/packages/0f/53/435b5c36a78d06ae0bef96d666209b0ecd8f8181bfe4dda46536705df59e/cryptography-46.0.1-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:7411c910fb2a412053cf33cfad0153ee20d27e256c6c3f14d7d7d1d9fec59fd5", size = 4709553, upload_time = "2025-09-17T00:09:01.832Z" }, + { url = "https://files.pythonhosted.org/packages/f5/c4/0da6e55595d9b9cd3b6eb5dc22f3a07ded7f116a3ea72629cab595abb804/cryptography-46.0.1-cp311-abi3-win32.whl", hash = "sha256:cbb8e769d4cac884bb28e3ff620ef1001b75588a5c83c9c9f1fdc9afbe7f29b0", size = 3058327, upload_time = "2025-09-17T00:09:03.726Z" }, + { url = "https://files.pythonhosted.org/packages/95/0f/cd29a35e0d6e78a0ee61793564c8cff0929c38391cb0de27627bdc7525aa/cryptography-46.0.1-cp311-abi3-win_amd64.whl", hash = "sha256:92e8cfe8bd7dd86eac0a677499894862cd5cc2fd74de917daa881d00871ac8e7", size = 3523893, upload_time = "2025-09-17T00:09:06.272Z" }, + { url = "https://files.pythonhosted.org/packages/f2/dd/eea390f3e78432bc3d2f53952375f8b37cb4d37783e626faa6a51e751719/cryptography-46.0.1-cp311-abi3-win_arm64.whl", hash = "sha256:db5597a4c7353b2e5fb05a8e6cb74b56a4658a2b7bf3cb6b1821ae7e7fd6eaa0", size = 2932145, upload_time = "2025-09-17T00:09:08.568Z" }, + { url = "https://files.pythonhosted.org/packages/0a/fb/c73588561afcd5e24b089952bd210b14676c0c5bf1213376350ae111945c/cryptography-46.0.1-cp314-cp314t-macosx_10_9_universal2.whl", hash = "sha256:4c49eda9a23019e11d32a0eb51a27b3e7ddedde91e099c0ac6373e3aacc0d2ee", size = 7193928, upload_time = "2025-09-17T00:09:10.595Z" }, + { url = "https://files.pythonhosted.org/packages/26/34/0ff0bb2d2c79f25a2a63109f3b76b9108a906dd2a2eb5c1d460b9938adbb/cryptography-46.0.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:9babb7818fdd71394e576cf26c5452df77a355eac1a27ddfa24096665a27f8fd", size = 4293515, upload_time = "2025-09-17T00:09:12.861Z" }, + { url = "https://files.pythonhosted.org/packages/df/b7/d4f848aee24ecd1be01db6c42c4a270069a4f02a105d9c57e143daf6cf0f/cryptography-46.0.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9f2c4cc63be3ef43c0221861177cee5d14b505cd4d4599a89e2cd273c4d3542a", size = 4545619, upload_time = "2025-09-17T00:09:15.397Z" }, + { url = "https://files.pythonhosted.org/packages/44/a5/42fedefc754fd1901e2d95a69815ea4ec8a9eed31f4c4361fcab80288661/cryptography-46.0.1-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:41c281a74df173876da1dc9a9b6953d387f06e3d3ed9284e3baae3ab3f40883a", size = 4299160, upload_time = "2025-09-17T00:09:17.155Z" }, + { url = "https://files.pythonhosted.org/packages/86/a1/cd21174f56e769c831fbbd6399a1b7519b0ff6280acec1b826d7b072640c/cryptography-46.0.1-cp314-cp314t-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0a17377fa52563d730248ba1f68185461fff36e8bc75d8787a7dd2e20a802b7a", size = 3994491, upload_time = "2025-09-17T00:09:18.971Z" }, + { url = "https://files.pythonhosted.org/packages/8d/2f/a8cbfa1c029987ddc746fd966711d4fa71efc891d37fbe9f030fe5ab4eec/cryptography-46.0.1-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:0d1922d9280e08cde90b518a10cd66831f632960a8d08cb3418922d83fce6f12", size = 4960157, upload_time = "2025-09-17T00:09:20.923Z" }, + { url = "https://files.pythonhosted.org/packages/67/ae/63a84e6789e0d5a2502edf06b552bcb0fa9ff16147265d5c44a211942abe/cryptography-46.0.1-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:af84e8e99f1a82cea149e253014ea9dc89f75b82c87bb6c7242203186f465129", size = 4577263, upload_time = "2025-09-17T00:09:23.356Z" }, + { url = "https://files.pythonhosted.org/packages/ef/8f/1b9fa8e92bd9cbcb3b7e1e593a5232f2c1e6f9bd72b919c1a6b37d315f92/cryptography-46.0.1-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:ef648d2c690703501714588b2ba640facd50fd16548133b11b2859e8655a69da", size = 4298703, upload_time = "2025-09-17T00:09:25.566Z" }, + { url = "https://files.pythonhosted.org/packages/c3/af/bb95db070e73fea3fae31d8a69ac1463d89d1c084220f549b00dd01094a8/cryptography-46.0.1-cp314-cp314t-manylinux_2_34_ppc64le.whl", hash = "sha256:e94eb5fa32a8a9f9bf991f424f002913e3dd7c699ef552db9b14ba6a76a6313b", size = 4926363, upload_time = "2025-09-17T00:09:27.451Z" }, + { url = "https://files.pythonhosted.org/packages/f5/3b/d8fb17ffeb3a83157a1cc0aa5c60691d062aceecba09c2e5e77ebfc1870c/cryptography-46.0.1-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:534b96c0831855e29fc3b069b085fd185aa5353033631a585d5cd4dd5d40d657", size = 4576958, upload_time = "2025-09-17T00:09:29.924Z" }, + { url = "https://files.pythonhosted.org/packages/d9/46/86bc3a05c10c8aa88c8ae7e953a8b4e407c57823ed201dbcba55c4d655f4/cryptography-46.0.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:f9b55038b5c6c47559aa33626d8ecd092f354e23de3c6975e4bb205df128a2a0", size = 4422507, upload_time = "2025-09-17T00:09:32.222Z" }, + { url = "https://files.pythonhosted.org/packages/a8/4e/387e5a21dfd2b4198e74968a541cfd6128f66f8ec94ed971776e15091ac3/cryptography-46.0.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ec13b7105117dbc9afd023300fb9954d72ca855c274fe563e72428ece10191c0", size = 4683964, upload_time = "2025-09-17T00:09:34.118Z" }, + { url = "https://files.pythonhosted.org/packages/25/a3/f9f5907b166adb8f26762071474b38bbfcf89858a5282f032899075a38a1/cryptography-46.0.1-cp314-cp314t-win32.whl", hash = "sha256:504e464944f2c003a0785b81668fe23c06f3b037e9cb9f68a7c672246319f277", size = 3029705, upload_time = "2025-09-17T00:09:36.381Z" }, + { url = "https://files.pythonhosted.org/packages/12/66/4d3a4f1850db2e71c2b1628d14b70b5e4c1684a1bd462f7fffb93c041c38/cryptography-46.0.1-cp314-cp314t-win_amd64.whl", hash = "sha256:c52fded6383f7e20eaf70a60aeddd796b3677c3ad2922c801be330db62778e05", size = 3502175, upload_time = "2025-09-17T00:09:38.261Z" }, + { url = "https://files.pythonhosted.org/packages/52/c7/9f10ad91435ef7d0d99a0b93c4360bea3df18050ff5b9038c489c31ac2f5/cryptography-46.0.1-cp314-cp314t-win_arm64.whl", hash = "sha256:9495d78f52c804b5ec8878b5b8c7873aa8e63db9cd9ee387ff2db3fffe4df784", size = 2912354, upload_time = "2025-09-17T00:09:40.078Z" }, + { url = "https://files.pythonhosted.org/packages/98/e5/fbd632385542a3311915976f88e0dfcf09e62a3fc0aff86fb6762162a24d/cryptography-46.0.1-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:d84c40bdb8674c29fa192373498b6cb1e84f882889d21a471b45d1f868d8d44b", size = 7255677, upload_time = "2025-09-17T00:09:42.407Z" }, + { url = "https://files.pythonhosted.org/packages/56/3e/13ce6eab9ad6eba1b15a7bd476f005a4c1b3f299f4c2f32b22408b0edccf/cryptography-46.0.1-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:9ed64e5083fa806709e74fc5ea067dfef9090e5b7a2320a49be3c9df3583a2d8", size = 4301110, upload_time = "2025-09-17T00:09:45.614Z" }, + { url = "https://files.pythonhosted.org/packages/a2/67/65dc233c1ddd688073cf7b136b06ff4b84bf517ba5529607c9d79720fc67/cryptography-46.0.1-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:341fb7a26bc9d6093c1b124b9f13acc283d2d51da440b98b55ab3f79f2522ead", size = 4562369, upload_time = "2025-09-17T00:09:47.601Z" }, + { url = "https://files.pythonhosted.org/packages/17/db/d64ae4c6f4e98c3dac5bf35dd4d103f4c7c345703e43560113e5e8e31b2b/cryptography-46.0.1-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:6ef1488967e729948d424d09c94753d0167ce59afba8d0f6c07a22b629c557b2", size = 4302126, upload_time = "2025-09-17T00:09:49.335Z" }, + { url = "https://files.pythonhosted.org/packages/3d/19/5f1eea17d4805ebdc2e685b7b02800c4f63f3dd46cfa8d4c18373fea46c8/cryptography-46.0.1-cp38-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7823bc7cdf0b747ecfb096d004cc41573c2f5c7e3a29861603a2871b43d3ef32", size = 4009431, upload_time = "2025-09-17T00:09:51.239Z" }, + { url = "https://files.pythonhosted.org/packages/81/b5/229ba6088fe7abccbfe4c5edb96c7a5ad547fac5fdd0d40aa6ea540b2985/cryptography-46.0.1-cp38-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:f736ab8036796f5a119ff8211deda416f8c15ce03776db704a7a4e17381cb2ef", size = 4980739, upload_time = "2025-09-17T00:09:54.181Z" }, + { url = "https://files.pythonhosted.org/packages/3a/9c/50aa38907b201e74bc43c572f9603fa82b58e831bd13c245613a23cff736/cryptography-46.0.1-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:e46710a240a41d594953012213ea8ca398cd2448fbc5d0f1be8160b5511104a0", size = 4592289, upload_time = "2025-09-17T00:09:56.731Z" }, + { url = "https://files.pythonhosted.org/packages/5a/33/229858f8a5bb22f82468bb285e9f4c44a31978d5f5830bb4ea1cf8a4e454/cryptography-46.0.1-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:84ef1f145de5aee82ea2447224dc23f065ff4cc5791bb3b506615957a6ba8128", size = 4301815, upload_time = "2025-09-17T00:09:58.548Z" }, + { url = "https://files.pythonhosted.org/packages/52/cb/b76b2c87fbd6ed4a231884bea3ce073406ba8e2dae9defad910d33cbf408/cryptography-46.0.1-cp38-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:9394c7d5a7565ac5f7d9ba38b2617448eba384d7b107b262d63890079fad77ca", size = 4943251, upload_time = "2025-09-17T00:10:00.475Z" }, + { url = "https://files.pythonhosted.org/packages/94/0f/f66125ecf88e4cb5b8017ff43f3a87ede2d064cb54a1c5893f9da9d65093/cryptography-46.0.1-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:ed957044e368ed295257ae3d212b95456bd9756df490e1ac4538857f67531fcc", size = 4591247, upload_time = "2025-09-17T00:10:02.874Z" }, + { url = "https://files.pythonhosted.org/packages/f6/22/9f3134ae436b63b463cfdf0ff506a0570da6873adb4bf8c19b8a5b4bac64/cryptography-46.0.1-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:f7de12fa0eee6234de9a9ce0ffcfa6ce97361db7a50b09b65c63ac58e5f22fc7", size = 4428534, upload_time = "2025-09-17T00:10:04.994Z" }, + { url = "https://files.pythonhosted.org/packages/89/39/e6042bcb2638650b0005c752c38ea830cbfbcbb1830e4d64d530000aa8dc/cryptography-46.0.1-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:7fab1187b6c6b2f11a326f33b036f7168f5b996aedd0c059f9738915e4e8f53a", size = 4699541, upload_time = "2025-09-17T00:10:06.925Z" }, + { url = "https://files.pythonhosted.org/packages/68/46/753d457492d15458c7b5a653fc9a84a1c9c7a83af6ebdc94c3fc373ca6e8/cryptography-46.0.1-cp38-abi3-win32.whl", hash = "sha256:45f790934ac1018adeba46a0f7289b2b8fe76ba774a88c7f1922213a56c98bc1", size = 3043779, upload_time = "2025-09-17T00:10:08.951Z" }, + { url = "https://files.pythonhosted.org/packages/2f/50/b6f3b540c2f6ee712feeb5fa780bb11fad76634e71334718568e7695cb55/cryptography-46.0.1-cp38-abi3-win_amd64.whl", hash = "sha256:7176a5ab56fac98d706921f6416a05e5aff7df0e4b91516f450f8627cda22af3", size = 3517226, upload_time = "2025-09-17T00:10:10.769Z" }, + { url = "https://files.pythonhosted.org/packages/ff/e8/77d17d00981cdd27cc493e81e1749a0b8bbfb843780dbd841e30d7f50743/cryptography-46.0.1-cp38-abi3-win_arm64.whl", hash = "sha256:efc9e51c3e595267ff84adf56e9b357db89ab2279d7e375ffcaf8f678606f3d9", size = 2923149, upload_time = "2025-09-17T00:10:13.236Z" }, ] [[package]] name = "csscompressor" version = "0.9.5" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f1/2a/8c3ac3d8bc94e6de8d7ae270bb5bc437b210bb9d6d9e46630c98f4abd20c/csscompressor-0.9.5.tar.gz", hash = "sha256:afa22badbcf3120a4f392e4d22f9fff485c044a1feda4a950ecc5eba9dd31a05", size = 237808 } +sdist = { url = "https://files.pythonhosted.org/packages/f1/2a/8c3ac3d8bc94e6de8d7ae270bb5bc437b210bb9d6d9e46630c98f4abd20c/csscompressor-0.9.5.tar.gz", hash = "sha256:afa22badbcf3120a4f392e4d22f9fff485c044a1feda4a950ecc5eba9dd31a05", size = 237808, upload_time = "2017-11-26T21:13:08.238Z" } [[package]] name = "cssselect2" @@ -445,102 +458,111 @@ dependencies = [ { name = "tinycss2" }, { name = "webencodings" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/9f/86/fd7f58fc498b3166f3a7e8e0cddb6e620fe1da35b02248b1bd59e95dbaaa/cssselect2-0.8.0.tar.gz", hash = "sha256:7674ffb954a3b46162392aee2a3a0aedb2e14ecf99fcc28644900f4e6e3e9d3a", size = 35716 } +sdist = { url = "https://files.pythonhosted.org/packages/9f/86/fd7f58fc498b3166f3a7e8e0cddb6e620fe1da35b02248b1bd59e95dbaaa/cssselect2-0.8.0.tar.gz", hash = "sha256:7674ffb954a3b46162392aee2a3a0aedb2e14ecf99fcc28644900f4e6e3e9d3a", size = 35716, upload_time = "2025-03-05T14:46:07.988Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0f/e7/aa315e6a749d9b96c2504a1ba0ba031ba2d0517e972ce22682e3fccecb09/cssselect2-0.8.0-py3-none-any.whl", hash = "sha256:46fc70ebc41ced7a32cd42d58b1884d72ade23d21e5a4eaaf022401c13f0e76e", size = 15454 }, + { url = "https://files.pythonhosted.org/packages/0f/e7/aa315e6a749d9b96c2504a1ba0ba031ba2d0517e972ce22682e3fccecb09/cssselect2-0.8.0-py3-none-any.whl", hash = "sha256:46fc70ebc41ced7a32cd42d58b1884d72ade23d21e5a4eaaf022401c13f0e76e", size = 15454, upload_time = "2025-03-05T14:46:06.463Z" }, ] [[package]] name = "debugpy" version = "1.8.17" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/15/ad/71e708ff4ca377c4230530d6a7aa7992592648c122a2cd2b321cf8b35a76/debugpy-1.8.17.tar.gz", hash = "sha256:fd723b47a8c08892b1a16b2c6239a8b96637c62a59b94bb5dab4bac592a58a8e", size = 1644129 } +sdist = { url = "https://files.pythonhosted.org/packages/15/ad/71e708ff4ca377c4230530d6a7aa7992592648c122a2cd2b321cf8b35a76/debugpy-1.8.17.tar.gz", hash = "sha256:fd723b47a8c08892b1a16b2c6239a8b96637c62a59b94bb5dab4bac592a58a8e", size = 1644129, upload_time = "2025-09-17T16:33:20.633Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/08/2b/9d8e65beb2751876c82e1aceb32f328c43ec872711fa80257c7674f45650/debugpy-1.8.17-cp312-cp312-macosx_15_0_universal2.whl", hash = "sha256:f14467edef672195c6f6b8e27ce5005313cb5d03c9239059bc7182b60c176e2d", size = 2549522 }, - { url = "https://files.pythonhosted.org/packages/b4/78/eb0d77f02971c05fca0eb7465b18058ba84bd957062f5eec82f941ac792a/debugpy-1.8.17-cp312-cp312-manylinux_2_34_x86_64.whl", hash = "sha256:24693179ef9dfa20dca8605905a42b392be56d410c333af82f1c5dff807a64cc", size = 4309417 }, - { url = "https://files.pythonhosted.org/packages/37/42/c40f1d8cc1fed1e75ea54298a382395b8b937d923fcf41ab0797a554f555/debugpy-1.8.17-cp312-cp312-win32.whl", hash = "sha256:6a4e9dacf2cbb60d2514ff7b04b4534b0139facbf2abdffe0639ddb6088e59cf", size = 5277130 }, - { url = "https://files.pythonhosted.org/packages/72/22/84263b205baad32b81b36eac076de0cdbe09fe2d0637f5b32243dc7c925b/debugpy-1.8.17-cp312-cp312-win_amd64.whl", hash = "sha256:e8f8f61c518952fb15f74a302e068b48d9c4691768ade433e4adeea961993464", size = 5319053 }, - { url = "https://files.pythonhosted.org/packages/50/76/597e5cb97d026274ba297af8d89138dfd9e695767ba0e0895edb20963f40/debugpy-1.8.17-cp313-cp313-macosx_15_0_universal2.whl", hash = "sha256:857c1dd5d70042502aef1c6d1c2801211f3ea7e56f75e9c335f434afb403e464", size = 2538386 }, - { url = "https://files.pythonhosted.org/packages/5f/60/ce5c34fcdfec493701f9d1532dba95b21b2f6394147234dce21160bd923f/debugpy-1.8.17-cp313-cp313-manylinux_2_34_x86_64.whl", hash = "sha256:3bea3b0b12f3946e098cce9b43c3c46e317b567f79570c3f43f0b96d00788088", size = 4292100 }, - { url = "https://files.pythonhosted.org/packages/e8/95/7873cf2146577ef71d2a20bf553f12df865922a6f87b9e8ee1df04f01785/debugpy-1.8.17-cp313-cp313-win32.whl", hash = "sha256:e34ee844c2f17b18556b5bbe59e1e2ff4e86a00282d2a46edab73fd7f18f4a83", size = 5277002 }, - { url = "https://files.pythonhosted.org/packages/46/11/18c79a1cee5ff539a94ec4aa290c1c069a5580fd5cfd2fb2e282f8e905da/debugpy-1.8.17-cp313-cp313-win_amd64.whl", hash = "sha256:6c5cd6f009ad4fca8e33e5238210dc1e5f42db07d4b6ab21ac7ffa904a196420", size = 5319047 }, - { url = "https://files.pythonhosted.org/packages/de/45/115d55b2a9da6de812696064ceb505c31e952c5d89c4ed1d9bb983deec34/debugpy-1.8.17-cp314-cp314-macosx_15_0_universal2.whl", hash = "sha256:045290c010bcd2d82bc97aa2daf6837443cd52f6328592698809b4549babcee1", size = 2536899 }, - { url = "https://files.pythonhosted.org/packages/5a/73/2aa00c7f1f06e997ef57dc9b23d61a92120bec1437a012afb6d176585197/debugpy-1.8.17-cp314-cp314-manylinux_2_34_x86_64.whl", hash = "sha256:b69b6bd9dba6a03632534cdf67c760625760a215ae289f7489a452af1031fe1f", size = 4268254 }, - { url = "https://files.pythonhosted.org/packages/86/b5/ed3e65c63c68a6634e3ba04bd10255c8e46ec16ebed7d1c79e4816d8a760/debugpy-1.8.17-cp314-cp314-win32.whl", hash = "sha256:5c59b74aa5630f3a5194467100c3b3d1c77898f9ab27e3f7dc5d40fc2f122670", size = 5277203 }, - { url = "https://files.pythonhosted.org/packages/b0/26/394276b71c7538445f29e792f589ab7379ae70fd26ff5577dfde71158e96/debugpy-1.8.17-cp314-cp314-win_amd64.whl", hash = "sha256:893cba7bb0f55161de4365584b025f7064e1f88913551bcd23be3260b231429c", size = 5318493 }, - { url = "https://files.pythonhosted.org/packages/b0/d0/89247ec250369fc76db477720a26b2fce7ba079ff1380e4ab4529d2fe233/debugpy-1.8.17-py2.py3-none-any.whl", hash = "sha256:60c7dca6571efe660ccb7a9508d73ca14b8796c4ed484c2002abba714226cfef", size = 5283210 }, + { url = "https://files.pythonhosted.org/packages/08/2b/9d8e65beb2751876c82e1aceb32f328c43ec872711fa80257c7674f45650/debugpy-1.8.17-cp312-cp312-macosx_15_0_universal2.whl", hash = "sha256:f14467edef672195c6f6b8e27ce5005313cb5d03c9239059bc7182b60c176e2d", size = 2549522, upload_time = "2025-09-17T16:33:38.466Z" }, + { url = "https://files.pythonhosted.org/packages/b4/78/eb0d77f02971c05fca0eb7465b18058ba84bd957062f5eec82f941ac792a/debugpy-1.8.17-cp312-cp312-manylinux_2_34_x86_64.whl", hash = "sha256:24693179ef9dfa20dca8605905a42b392be56d410c333af82f1c5dff807a64cc", size = 4309417, upload_time = "2025-09-17T16:33:41.299Z" }, + { url = "https://files.pythonhosted.org/packages/37/42/c40f1d8cc1fed1e75ea54298a382395b8b937d923fcf41ab0797a554f555/debugpy-1.8.17-cp312-cp312-win32.whl", hash = "sha256:6a4e9dacf2cbb60d2514ff7b04b4534b0139facbf2abdffe0639ddb6088e59cf", size = 5277130, upload_time = "2025-09-17T16:33:43.554Z" }, + { url = "https://files.pythonhosted.org/packages/72/22/84263b205baad32b81b36eac076de0cdbe09fe2d0637f5b32243dc7c925b/debugpy-1.8.17-cp312-cp312-win_amd64.whl", hash = "sha256:e8f8f61c518952fb15f74a302e068b48d9c4691768ade433e4adeea961993464", size = 5319053, upload_time = "2025-09-17T16:33:53.033Z" }, + { url = "https://files.pythonhosted.org/packages/50/76/597e5cb97d026274ba297af8d89138dfd9e695767ba0e0895edb20963f40/debugpy-1.8.17-cp313-cp313-macosx_15_0_universal2.whl", hash = "sha256:857c1dd5d70042502aef1c6d1c2801211f3ea7e56f75e9c335f434afb403e464", size = 2538386, upload_time = "2025-09-17T16:33:54.594Z" }, + { url = "https://files.pythonhosted.org/packages/5f/60/ce5c34fcdfec493701f9d1532dba95b21b2f6394147234dce21160bd923f/debugpy-1.8.17-cp313-cp313-manylinux_2_34_x86_64.whl", hash = "sha256:3bea3b0b12f3946e098cce9b43c3c46e317b567f79570c3f43f0b96d00788088", size = 4292100, upload_time = "2025-09-17T16:33:56.353Z" }, + { url = "https://files.pythonhosted.org/packages/e8/95/7873cf2146577ef71d2a20bf553f12df865922a6f87b9e8ee1df04f01785/debugpy-1.8.17-cp313-cp313-win32.whl", hash = "sha256:e34ee844c2f17b18556b5bbe59e1e2ff4e86a00282d2a46edab73fd7f18f4a83", size = 5277002, upload_time = "2025-09-17T16:33:58.231Z" }, + { url = "https://files.pythonhosted.org/packages/46/11/18c79a1cee5ff539a94ec4aa290c1c069a5580fd5cfd2fb2e282f8e905da/debugpy-1.8.17-cp313-cp313-win_amd64.whl", hash = "sha256:6c5cd6f009ad4fca8e33e5238210dc1e5f42db07d4b6ab21ac7ffa904a196420", size = 5319047, upload_time = "2025-09-17T16:34:00.586Z" }, + { url = "https://files.pythonhosted.org/packages/de/45/115d55b2a9da6de812696064ceb505c31e952c5d89c4ed1d9bb983deec34/debugpy-1.8.17-cp314-cp314-macosx_15_0_universal2.whl", hash = "sha256:045290c010bcd2d82bc97aa2daf6837443cd52f6328592698809b4549babcee1", size = 2536899, upload_time = "2025-09-17T16:34:02.657Z" }, + { url = "https://files.pythonhosted.org/packages/5a/73/2aa00c7f1f06e997ef57dc9b23d61a92120bec1437a012afb6d176585197/debugpy-1.8.17-cp314-cp314-manylinux_2_34_x86_64.whl", hash = "sha256:b69b6bd9dba6a03632534cdf67c760625760a215ae289f7489a452af1031fe1f", size = 4268254, upload_time = "2025-09-17T16:34:04.486Z" }, + { url = "https://files.pythonhosted.org/packages/86/b5/ed3e65c63c68a6634e3ba04bd10255c8e46ec16ebed7d1c79e4816d8a760/debugpy-1.8.17-cp314-cp314-win32.whl", hash = "sha256:5c59b74aa5630f3a5194467100c3b3d1c77898f9ab27e3f7dc5d40fc2f122670", size = 5277203, upload_time = "2025-09-17T16:34:06.65Z" }, + { url = "https://files.pythonhosted.org/packages/b0/26/394276b71c7538445f29e792f589ab7379ae70fd26ff5577dfde71158e96/debugpy-1.8.17-cp314-cp314-win_amd64.whl", hash = "sha256:893cba7bb0f55161de4365584b025f7064e1f88913551bcd23be3260b231429c", size = 5318493, upload_time = "2025-09-17T16:34:08.483Z" }, + { url = "https://files.pythonhosted.org/packages/b0/d0/89247ec250369fc76db477720a26b2fce7ba079ff1380e4ab4529d2fe233/debugpy-1.8.17-py2.py3-none-any.whl", hash = "sha256:60c7dca6571efe660ccb7a9508d73ca14b8796c4ed484c2002abba714226cfef", size = 5283210, upload_time = "2025-09-17T16:34:25.835Z" }, ] [[package]] name = "decorator" version = "5.2.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/43/fa/6d96a0978d19e17b68d634497769987b16c8f4cd0a7a05048bec693caa6b/decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360", size = 56711 } +sdist = { url = "https://files.pythonhosted.org/packages/43/fa/6d96a0978d19e17b68d634497769987b16c8f4cd0a7a05048bec693caa6b/decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360", size = 56711, upload_time = "2025-02-24T04:41:34.073Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a", size = 9190 }, + { url = "https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a", size = 9190, upload_time = "2025-02-24T04:41:32.565Z" }, ] [[package]] name = "defusedxml" version = "0.7.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0f/d5/c66da9b79e5bdb124974bfe172b4daf3c984ebd9c2a06e2b8a4dc7331c72/defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69", size = 75520 } +sdist = { url = "https://files.pythonhosted.org/packages/0f/d5/c66da9b79e5bdb124974bfe172b4daf3c984ebd9c2a06e2b8a4dc7331c72/defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69", size = 75520, upload_time = "2021-03-08T10:59:26.269Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61", size = 25604 }, + { url = "https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61", size = 25604, upload_time = "2021-03-08T10:59:24.45Z" }, +] + +[[package]] +name = "diskcache" +version = "5.6.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3f/21/1c1ffc1a039ddcc459db43cc108658f32c57d271d7289a2794e401d0fdb6/diskcache-5.6.3.tar.gz", hash = "sha256:2c3a3fa2743d8535d832ec61c2054a1641f41775aa7c556758a109941e33e4fc", size = 67916, upload_time = "2023-08-31T06:12:00.316Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3f/27/4570e78fc0bf5ea0ca45eb1de3818a23787af9b390c0b0a0033a1b8236f9/diskcache-5.6.3-py3-none-any.whl", hash = "sha256:5e31b2d5fbad117cc363ebaf6b689474db18a1f6438bc82358b024abd4c2ca19", size = 45550, upload_time = "2023-08-31T06:11:58.822Z" }, ] [[package]] name = "distlib" version = "0.4.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/96/8e/709914eb2b5749865801041647dc7f4e6d00b549cfe88b65ca192995f07c/distlib-0.4.0.tar.gz", hash = "sha256:feec40075be03a04501a973d81f633735b4b69f98b05450592310c0f401a4e0d", size = 614605 } +sdist = { url = "https://files.pythonhosted.org/packages/96/8e/709914eb2b5749865801041647dc7f4e6d00b549cfe88b65ca192995f07c/distlib-0.4.0.tar.gz", hash = "sha256:feec40075be03a04501a973d81f633735b4b69f98b05450592310c0f401a4e0d", size = 614605, upload_time = "2025-07-17T16:52:00.465Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl", hash = "sha256:9659f7d87e46584a30b5780e43ac7a2143098441670ff0a49d5f9034c54a6c16", size = 469047 }, + { url = "https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl", hash = "sha256:9659f7d87e46584a30b5780e43ac7a2143098441670ff0a49d5f9034c54a6c16", size = 469047, upload_time = "2025-07-17T16:51:58.613Z" }, ] [[package]] name = "et-xmlfile" version = "2.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d3/38/af70d7ab1ae9d4da450eeec1fa3918940a5fafb9055e934af8d6eb0c2313/et_xmlfile-2.0.0.tar.gz", hash = "sha256:dab3f4764309081ce75662649be815c4c9081e88f0837825f90fd28317d4da54", size = 17234 } +sdist = { url = "https://files.pythonhosted.org/packages/d3/38/af70d7ab1ae9d4da450eeec1fa3918940a5fafb9055e934af8d6eb0c2313/et_xmlfile-2.0.0.tar.gz", hash = "sha256:dab3f4764309081ce75662649be815c4c9081e88f0837825f90fd28317d4da54", size = 17234, upload_time = "2024-10-25T17:25:40.039Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl", hash = "sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa", size = 18059 }, + { url = "https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl", hash = "sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa", size = 18059, upload_time = "2024-10-25T17:25:39.051Z" }, ] [[package]] name = "execnet" version = "2.1.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/bb/ff/b4c0dc78fbe20c3e59c0c7334de0c27eb4001a2b2017999af398bf730817/execnet-2.1.1.tar.gz", hash = "sha256:5189b52c6121c24feae288166ab41b32549c7e2348652736540b9e6e7d4e72e3", size = 166524 } +sdist = { url = "https://files.pythonhosted.org/packages/bb/ff/b4c0dc78fbe20c3e59c0c7334de0c27eb4001a2b2017999af398bf730817/execnet-2.1.1.tar.gz", hash = "sha256:5189b52c6121c24feae288166ab41b32549c7e2348652736540b9e6e7d4e72e3", size = 166524, upload_time = "2024-04-08T09:04:19.245Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/43/09/2aea36ff60d16dd8879bdb2f5b3ee0ba8d08cbbdcdfe870e695ce3784385/execnet-2.1.1-py3-none-any.whl", hash = "sha256:26dee51f1b80cebd6d0ca8e74dd8745419761d3bef34163928cbebbdc4749fdc", size = 40612 }, + { url = "https://files.pythonhosted.org/packages/43/09/2aea36ff60d16dd8879bdb2f5b3ee0ba8d08cbbdcdfe870e695ce3784385/execnet-2.1.1-py3-none-any.whl", hash = "sha256:26dee51f1b80cebd6d0ca8e74dd8745419761d3bef34163928cbebbdc4749fdc", size = 40612, upload_time = "2024-04-08T09:04:17.414Z" }, ] [[package]] name = "executing" version = "2.2.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/cc/28/c14e053b6762b1044f34a13aab6859bbf40456d37d23aa286ac24cfd9a5d/executing-2.2.1.tar.gz", hash = "sha256:3632cc370565f6648cc328b32435bd120a1e4ebb20c77e3fdde9a13cd1e533c4", size = 1129488 } +sdist = { url = "https://files.pythonhosted.org/packages/cc/28/c14e053b6762b1044f34a13aab6859bbf40456d37d23aa286ac24cfd9a5d/executing-2.2.1.tar.gz", hash = "sha256:3632cc370565f6648cc328b32435bd120a1e4ebb20c77e3fdde9a13cd1e533c4", size = 1129488, upload_time = "2025-09-01T09:48:10.866Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl", hash = "sha256:760643d3452b4d777d295bb167ccc74c64a81df23fb5e08eff250c425a4b2017", size = 28317 }, + { url = "https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl", hash = "sha256:760643d3452b4d777d295bb167ccc74c64a81df23fb5e08eff250c425a4b2017", size = 28317, upload_time = "2025-09-01T09:48:08.5Z" }, ] [[package]] name = "fastjsonschema" version = "2.21.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/20/b5/23b216d9d985a956623b6bd12d4086b60f0059b27799f23016af04a74ea1/fastjsonschema-2.21.2.tar.gz", hash = "sha256:b1eb43748041c880796cd077f1a07c3d94e93ae84bba5ed36800a33554ae05de", size = 374130 } +sdist = { url = "https://files.pythonhosted.org/packages/20/b5/23b216d9d985a956623b6bd12d4086b60f0059b27799f23016af04a74ea1/fastjsonschema-2.21.2.tar.gz", hash = "sha256:b1eb43748041c880796cd077f1a07c3d94e93ae84bba5ed36800a33554ae05de", size = 374130, upload_time = "2025-08-14T18:49:36.666Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/cb/a8/20d0723294217e47de6d9e2e40fd4a9d2f7c4b6ef974babd482a59743694/fastjsonschema-2.21.2-py3-none-any.whl", hash = "sha256:1c797122d0a86c5cace2e54bf4e819c36223b552017172f32c5c024a6b77e463", size = 24024 }, + { url = "https://files.pythonhosted.org/packages/cb/a8/20d0723294217e47de6d9e2e40fd4a9d2f7c4b6ef974babd482a59743694/fastjsonschema-2.21.2-py3-none-any.whl", hash = "sha256:1c797122d0a86c5cace2e54bf4e819c36223b552017172f32c5c024a6b77e463", size = 24024, upload_time = "2025-08-14T18:49:34.776Z" }, ] [[package]] name = "filelock" version = "3.19.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/40/bb/0ab3e58d22305b6f5440629d20683af28959bf793d98d11950e305c1c326/filelock-3.19.1.tar.gz", hash = "sha256:66eda1888b0171c998b35be2bcc0f6d75c388a7ce20c3f3f37aa8e96c2dddf58", size = 17687 } +sdist = { url = "https://files.pythonhosted.org/packages/40/bb/0ab3e58d22305b6f5440629d20683af28959bf793d98d11950e305c1c326/filelock-3.19.1.tar.gz", hash = "sha256:66eda1888b0171c998b35be2bcc0f6d75c388a7ce20c3f3f37aa8e96c2dddf58", size = 17687, upload_time = "2025-08-14T16:56:03.016Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/42/14/42b2651a2f46b022ccd948bca9f2d5af0fd8929c4eec235b8d6d844fbe67/filelock-3.19.1-py3-none-any.whl", hash = "sha256:d38e30481def20772f5baf097c122c3babc4fcdb7e14e57049eb9d88c6dc017d", size = 15988 }, + { url = "https://files.pythonhosted.org/packages/42/14/42b2651a2f46b022ccd948bca9f2d5af0fd8929c4eec235b8d6d844fbe67/filelock-3.19.1-py3-none-any.whl", hash = "sha256:d38e30481def20772f5baf097c122c3babc4fcdb7e14e57049eb9d88c6dc017d", size = 15988, upload_time = "2025-08-14T16:56:01.633Z" }, ] [[package]] @@ -550,9 +572,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/55/b0/8a21e330561c65653d010ef112bf38f60890051d244ede197ddaa08e50c1/flexcache-0.3.tar.gz", hash = "sha256:18743bd5a0621bfe2cf8d519e4c3bfdf57a269c15d1ced3fb4b64e0ff4600656", size = 15816 } +sdist = { url = "https://files.pythonhosted.org/packages/55/b0/8a21e330561c65653d010ef112bf38f60890051d244ede197ddaa08e50c1/flexcache-0.3.tar.gz", hash = "sha256:18743bd5a0621bfe2cf8d519e4c3bfdf57a269c15d1ced3fb4b64e0ff4600656", size = 15816, upload_time = "2024-03-09T03:21:07.555Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/27/cd/c883e1a7c447479d6e13985565080e3fea88ab5a107c21684c813dba1875/flexcache-0.3-py3-none-any.whl", hash = "sha256:d43c9fea82336af6e0115e308d9d33a185390b8346a017564611f1466dcd2e32", size = 13263 }, + { url = "https://files.pythonhosted.org/packages/27/cd/c883e1a7c447479d6e13985565080e3fea88ab5a107c21684c813dba1875/flexcache-0.3-py3-none-any.whl", hash = "sha256:d43c9fea82336af6e0115e308d9d33a185390b8346a017564611f1466dcd2e32", size = 13263, upload_time = "2024-03-09T03:21:05.635Z" }, ] [[package]] @@ -562,9 +584,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/82/99/b4de7e39e8eaf8207ba1a8fa2241dd98b2ba72ae6e16960d8351736d8702/flexparser-0.4.tar.gz", hash = "sha256:266d98905595be2ccc5da964fe0a2c3526fbbffdc45b65b3146d75db992ef6b2", size = 31799 } +sdist = { url = "https://files.pythonhosted.org/packages/82/99/b4de7e39e8eaf8207ba1a8fa2241dd98b2ba72ae6e16960d8351736d8702/flexparser-0.4.tar.gz", hash = "sha256:266d98905595be2ccc5da964fe0a2c3526fbbffdc45b65b3146d75db992ef6b2", size = 31799, upload_time = "2024-11-07T02:00:56.249Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fe/5e/3be305568fe5f34448807976dc82fc151d76c3e0e03958f34770286278c1/flexparser-0.4-py3-none-any.whl", hash = "sha256:3738b456192dcb3e15620f324c447721023c0293f6af9955b481e91d00179846", size = 27625 }, + { url = "https://files.pythonhosted.org/packages/fe/5e/3be305568fe5f34448807976dc82fc151d76c3e0e03958f34770286278c1/flexparser-0.4-py3-none-any.whl", hash = "sha256:3738b456192dcb3e15620f324c447721023c0293f6af9955b481e91d00179846", size = 27625, upload_time = "2024-11-07T02:00:54.523Z" }, ] [[package]] @@ -592,20 +614,20 @@ dependencies = [ { name = "typing-extensions" }, { name = "validators" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/11/d0/c94675a1c1b8c12fd68489e2b4a924f80a2b122199cd986c58a5136197d2/frictionless-5.18.1.tar.gz", hash = "sha256:daeaf55f896eeb52b43e62600466af9528fe0aeeebd28b1b917e13322f370a8b", size = 74372478 } +sdist = { url = "https://files.pythonhosted.org/packages/11/d0/c94675a1c1b8c12fd68489e2b4a924f80a2b122199cd986c58a5136197d2/frictionless-5.18.1.tar.gz", hash = "sha256:daeaf55f896eeb52b43e62600466af9528fe0aeeebd28b1b917e13322f370a8b", size = 74372478, upload_time = "2025-03-25T21:32:50.081Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a9/7a/dac76d31584bb4f874ae860490c9465f5b59bd8c110f68fbbb07aba48845/frictionless-5.18.1-py3-none-any.whl", hash = "sha256:3f4c87469a89bdb88e9cc318088553a26f3d14839098f95c183ea01fc89628dd", size = 531615 }, + { url = "https://files.pythonhosted.org/packages/a9/7a/dac76d31584bb4f874ae860490c9465f5b59bd8c110f68fbbb07aba48845/frictionless-5.18.1-py3-none-any.whl", hash = "sha256:3f4c87469a89bdb88e9cc318088553a26f3d14839098f95c183ea01fc89628dd", size = 531615, upload_time = "2025-03-25T21:32:45.534Z" }, ] [[package]] name = "frozendict" version = "2.4.6" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/bb/59/19eb300ba28e7547538bdf603f1c6c34793240a90e1a7b61b65d8517e35e/frozendict-2.4.6.tar.gz", hash = "sha256:df7cd16470fbd26fc4969a208efadc46319334eb97def1ddf48919b351192b8e", size = 316416 } +sdist = { url = "https://files.pythonhosted.org/packages/bb/59/19eb300ba28e7547538bdf603f1c6c34793240a90e1a7b61b65d8517e35e/frozendict-2.4.6.tar.gz", hash = "sha256:df7cd16470fbd26fc4969a208efadc46319334eb97def1ddf48919b351192b8e", size = 316416, upload_time = "2024-10-13T12:15:32.449Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/04/13/d9839089b900fa7b479cce495d62110cddc4bd5630a04d8469916c0e79c5/frozendict-2.4.6-py311-none-any.whl", hash = "sha256:d065db6a44db2e2375c23eac816f1a022feb2fa98cbb50df44a9e83700accbea", size = 16148 }, - { url = "https://files.pythonhosted.org/packages/ba/d0/d482c39cee2ab2978a892558cf130681d4574ea208e162da8958b31e9250/frozendict-2.4.6-py312-none-any.whl", hash = "sha256:49344abe90fb75f0f9fdefe6d4ef6d4894e640fadab71f11009d52ad97f370b9", size = 16146 }, - { url = "https://files.pythonhosted.org/packages/a5/8e/b6bf6a0de482d7d7d7a2aaac8fdc4a4d0bb24a809f5ddd422aa7060eb3d2/frozendict-2.4.6-py313-none-any.whl", hash = "sha256:7134a2bb95d4a16556bb5f2b9736dceb6ea848fa5b6f3f6c2d6dba93b44b4757", size = 16146 }, + { url = "https://files.pythonhosted.org/packages/04/13/d9839089b900fa7b479cce495d62110cddc4bd5630a04d8469916c0e79c5/frozendict-2.4.6-py311-none-any.whl", hash = "sha256:d065db6a44db2e2375c23eac816f1a022feb2fa98cbb50df44a9e83700accbea", size = 16148, upload_time = "2024-10-13T12:15:26.839Z" }, + { url = "https://files.pythonhosted.org/packages/ba/d0/d482c39cee2ab2978a892558cf130681d4574ea208e162da8958b31e9250/frozendict-2.4.6-py312-none-any.whl", hash = "sha256:49344abe90fb75f0f9fdefe6d4ef6d4894e640fadab71f11009d52ad97f370b9", size = 16146, upload_time = "2024-10-13T12:15:28.16Z" }, + { url = "https://files.pythonhosted.org/packages/a5/8e/b6bf6a0de482d7d7d7a2aaac8fdc4a4d0bb24a809f5ddd422aa7060eb3d2/frozendict-2.4.6-py313-none-any.whl", hash = "sha256:7134a2bb95d4a16556bb5f2b9736dceb6ea848fa5b6f3f6c2d6dba93b44b4757", size = 16146, upload_time = "2024-10-13T12:15:29.495Z" }, ] [[package]] @@ -615,9 +637,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "python-dateutil" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d9/29/d40217cbe2f6b1359e00c6c307bb3fc876ba74068cbab3dde77f03ca0dc4/ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343", size = 10943 } +sdist = { url = "https://files.pythonhosted.org/packages/d9/29/d40217cbe2f6b1359e00c6c307bb3fc876ba74068cbab3dde77f03ca0dc4/ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343", size = 10943, upload_time = "2022-05-02T15:47:16.11Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619", size = 11034 }, + { url = "https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619", size = 11034, upload_time = "2022-05-02T15:47:14.552Z" }, ] [[package]] @@ -627,9 +649,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "smmap" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/72/94/63b0fc47eb32792c7ba1fe1b694daec9a63620db1e313033d18140c2320a/gitdb-4.0.12.tar.gz", hash = "sha256:5ef71f855d191a3326fcfbc0d5da835f26b13fbcba60c32c21091c349ffdb571", size = 394684 } +sdist = { url = "https://files.pythonhosted.org/packages/72/94/63b0fc47eb32792c7ba1fe1b694daec9a63620db1e313033d18140c2320a/gitdb-4.0.12.tar.gz", hash = "sha256:5ef71f855d191a3326fcfbc0d5da835f26b13fbcba60c32c21091c349ffdb571", size = 394684, upload_time = "2025-01-02T07:20:46.413Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl", hash = "sha256:67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf", size = 62794 }, + { url = "https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl", hash = "sha256:67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf", size = 62794, upload_time = "2025-01-02T07:20:43.624Z" }, ] [[package]] @@ -639,9 +661,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "gitdb" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/9a/c8/dd58967d119baab745caec2f9d853297cec1989ec1d63f677d3880632b88/gitpython-3.1.45.tar.gz", hash = "sha256:85b0ee964ceddf211c41b9f27a49086010a190fd8132a24e21f362a4b36a791c", size = 215076 } +sdist = { url = "https://files.pythonhosted.org/packages/9a/c8/dd58967d119baab745caec2f9d853297cec1989ec1d63f677d3880632b88/gitpython-3.1.45.tar.gz", hash = "sha256:85b0ee964ceddf211c41b9f27a49086010a190fd8132a24e21f362a4b36a791c", size = 215076, upload_time = "2025-07-24T03:45:54.871Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/01/61/d4b89fec821f72385526e1b9d9a3a0385dda4a72b206d28049e2c7cd39b8/gitpython-3.1.45-py3-none-any.whl", hash = "sha256:8908cb2e02fb3b93b7eb0f2827125cb699869470432cc885f019b8fd0fccff77", size = 208168 }, + { url = "https://files.pythonhosted.org/packages/01/61/d4b89fec821f72385526e1b9d9a3a0385dda4a72b206d28049e2c7cd39b8/gitpython-3.1.45-py3-none-any.whl", hash = "sha256:8908cb2e02fb3b93b7eb0f2827125cb699869470432cc885f019b8fd0fccff77", size = 208168, upload_time = "2025-07-24T03:45:52.517Z" }, ] [[package]] @@ -651,9 +673,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ec/d7/6c09dd7ce4c7837e4cdb11dce980cb45ae3cd87677298dc3b781b6bce7d3/griffe-1.14.0.tar.gz", hash = "sha256:9d2a15c1eca966d68e00517de5d69dd1bc5c9f2335ef6c1775362ba5b8651a13", size = 424684 } +sdist = { url = "https://files.pythonhosted.org/packages/ec/d7/6c09dd7ce4c7837e4cdb11dce980cb45ae3cd87677298dc3b781b6bce7d3/griffe-1.14.0.tar.gz", hash = "sha256:9d2a15c1eca966d68e00517de5d69dd1bc5c9f2335ef6c1775362ba5b8651a13", size = 424684, upload_time = "2025-09-05T15:02:29.167Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2a/b1/9ff6578d789a89812ff21e4e0f80ffae20a65d5dd84e7a17873fe3b365be/griffe-1.14.0-py3-none-any.whl", hash = "sha256:0e9d52832cccf0f7188cfe585ba962d2674b241c01916d780925df34873bceb0", size = 144439 }, + { url = "https://files.pythonhosted.org/packages/2a/b1/9ff6578d789a89812ff21e4e0f80ffae20a65d5dd84e7a17873fe3b365be/griffe-1.14.0-py3-none-any.whl", hash = "sha256:0e9d52832cccf0f7188cfe585ba962d2674b241c01916d780925df34873bceb0", size = 144439, upload_time = "2025-09-05T15:02:27.511Z" }, ] [[package]] @@ -661,14 +683,14 @@ name = "gurobipy" version = "12.0.3" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6f/bb/b3784497115c64c2bd122cc9d411f167026d4ec42a26b1ff3c43a779275d/gurobipy-12.0.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:020f23277f630e079eac114385eabd1bd9fb4ac22f8796ed5ba6d915ce4f141b", size = 12222234 }, - { url = "https://files.pythonhosted.org/packages/18/ea/c065984de5287c99fd30ee8d700fd78f83692e992471f9667ab5d36612b9/gurobipy-12.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:72bbf544bc05060bb93909b79715ace4c0f416198f7622a985cabb9e8e99aa1c", size = 62583866 }, - { url = "https://files.pythonhosted.org/packages/9b/8b/2b9f26e4e19a258229b8a8ffc377ca372cc2059a22a0a7c67572efe308d8/gurobipy-12.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b3f971caf270f671b6ffcf5b937b3c0430a5264b0f01529dc8681d61c221f215", size = 14268480 }, - { url = "https://files.pythonhosted.org/packages/26/0f/3544a323635f37cdfe1e011d2903b7ef94ba18e10224fa1419f64d0c1968/gurobipy-12.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:af18fd03d5dc3f6e5f590c372ad288b8430a6d88a5b5e66cfcd8432f86ee8650", size = 11121565 }, - { url = "https://files.pythonhosted.org/packages/5e/95/f0e5b5cf85298f42482cf4e53d8114c45bb962f55195d531fe4e62b5afa1/gurobipy-12.0.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a8552e47673cb6f1fd351edf8fcad86b02f832cbfb57d90ef21e0397e96d138e", size = 12183439 }, - { url = "https://files.pythonhosted.org/packages/61/6e/aea725b4143faa4eb6878414a91fa74e7871aba0ab9453803a9eeef781c2/gurobipy-12.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:be05c074141c8a126c8aaeccc41795ab091a666eabb39ca1ff98a74bde81e663", size = 62583451 }, - { url = "https://files.pythonhosted.org/packages/75/47/7b9c63ce2cd85d796403b91a6d211d5c8baac7b694edd94e2151f365d6a9/gurobipy-12.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:79a333766e27fef7902ceeefbcf0279a1ca393a27a72ea62f8e301b21aa17d59", size = 14271076 }, - { url = "https://files.pythonhosted.org/packages/2a/93/b10cd6112c05675fed5c817fd7933c9d4ba3a7039e42cba844a9ac09242a/gurobipy-12.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:e0f9ed55077e622021369bb9df2ca3b00c86b678792a3b1556cc59f67348fab0", size = 11111414 }, + { url = "https://files.pythonhosted.org/packages/6f/bb/b3784497115c64c2bd122cc9d411f167026d4ec42a26b1ff3c43a779275d/gurobipy-12.0.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:020f23277f630e079eac114385eabd1bd9fb4ac22f8796ed5ba6d915ce4f141b", size = 12222234, upload_time = "2025-07-15T07:19:24.64Z" }, + { url = "https://files.pythonhosted.org/packages/18/ea/c065984de5287c99fd30ee8d700fd78f83692e992471f9667ab5d36612b9/gurobipy-12.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:72bbf544bc05060bb93909b79715ace4c0f416198f7622a985cabb9e8e99aa1c", size = 62583866, upload_time = "2025-07-15T07:20:17.576Z" }, + { url = "https://files.pythonhosted.org/packages/9b/8b/2b9f26e4e19a258229b8a8ffc377ca372cc2059a22a0a7c67572efe308d8/gurobipy-12.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b3f971caf270f671b6ffcf5b937b3c0430a5264b0f01529dc8681d61c221f215", size = 14268480, upload_time = "2025-07-15T07:20:26.898Z" }, + { url = "https://files.pythonhosted.org/packages/26/0f/3544a323635f37cdfe1e011d2903b7ef94ba18e10224fa1419f64d0c1968/gurobipy-12.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:af18fd03d5dc3f6e5f590c372ad288b8430a6d88a5b5e66cfcd8432f86ee8650", size = 11121565, upload_time = "2025-07-15T07:20:34.576Z" }, + { url = "https://files.pythonhosted.org/packages/5e/95/f0e5b5cf85298f42482cf4e53d8114c45bb962f55195d531fe4e62b5afa1/gurobipy-12.0.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a8552e47673cb6f1fd351edf8fcad86b02f832cbfb57d90ef21e0397e96d138e", size = 12183439, upload_time = "2025-07-15T07:20:44.224Z" }, + { url = "https://files.pythonhosted.org/packages/61/6e/aea725b4143faa4eb6878414a91fa74e7871aba0ab9453803a9eeef781c2/gurobipy-12.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:be05c074141c8a126c8aaeccc41795ab091a666eabb39ca1ff98a74bde81e663", size = 62583451, upload_time = "2025-07-15T07:21:38.825Z" }, + { url = "https://files.pythonhosted.org/packages/75/47/7b9c63ce2cd85d796403b91a6d211d5c8baac7b694edd94e2151f365d6a9/gurobipy-12.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:79a333766e27fef7902ceeefbcf0279a1ca393a27a72ea62f8e301b21aa17d59", size = 14271076, upload_time = "2025-07-15T07:21:55.102Z" }, + { url = "https://files.pythonhosted.org/packages/2a/93/b10cd6112c05675fed5c817fd7933c9d4ba3a7039e42cba844a9ac09242a/gurobipy-12.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:e0f9ed55077e622021369bb9df2ca3b00c86b678792a3b1556cc59f67348fab0", size = 11111414, upload_time = "2025-07-15T07:22:05.079Z" }, ] [[package]] @@ -680,9 +702,9 @@ dependencies = [ { name = "libhxl" }, { name = "tenacity" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ce/cc/5621c48b79a510a87288495f4bdde38a292f0f97dd14177e2cc77c8a79bb/hdx_python_country-3.9.8.tar.gz", hash = "sha256:de9d928e490490fe6fa2d743597464fa8bae317f808667a947e734c1ea26e4d9", size = 531031 } +sdist = { url = "https://files.pythonhosted.org/packages/ce/cc/5621c48b79a510a87288495f4bdde38a292f0f97dd14177e2cc77c8a79bb/hdx_python_country-3.9.8.tar.gz", hash = "sha256:de9d928e490490fe6fa2d743597464fa8bae317f808667a947e734c1ea26e4d9", size = 531031, upload_time = "2025-09-21T23:42:45.054Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ce/8f/7d961e17372bb9df875e988432a2abb9ca4883b4a0592dfccefa50cb697f/hdx_python_country-3.9.8-py3-none-any.whl", hash = "sha256:602e495028e474e2f93094136007b2c0e765d88af55b2cae7e0ba778e178bcaf", size = 56383 }, + { url = "https://files.pythonhosted.org/packages/ce/8f/7d961e17372bb9df875e988432a2abb9ca4883b4a0592dfccefa50cb697f/hdx_python_country-3.9.8-py3-none-any.whl", hash = "sha256:602e495028e474e2f93094136007b2c0e765d88af55b2cae7e0ba778e178bcaf", size = 56383, upload_time = "2025-09-21T23:42:43.267Z" }, ] [[package]] @@ -705,9 +727,9 @@ dependencies = [ { name = "xlsx2csv" }, { name = "xlwt" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/7e/13/f22d36f9146beaefe27b1a888acd31ddd09c1a9730ed1d42df9af33f99e2/hdx_python_utilities-3.9.2.tar.gz", hash = "sha256:de39248afdca00ab636fdfa0c3259fa80e4b95dba026170a4efc5bee14eda3f3", size = 656826 } +sdist = { url = "https://files.pythonhosted.org/packages/7e/13/f22d36f9146beaefe27b1a888acd31ddd09c1a9730ed1d42df9af33f99e2/hdx_python_utilities-3.9.2.tar.gz", hash = "sha256:de39248afdca00ab636fdfa0c3259fa80e4b95dba026170a4efc5bee14eda3f3", size = 656826, upload_time = "2025-09-21T23:14:17.457Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/95/6d/06994f86c2cc172b5ea127dedbb19e809205e06b1ba7532e2f0aea5631cd/hdx_python_utilities-3.9.2-py3-none-any.whl", hash = "sha256:fae3cc241420ae7ebb0a7a53cc8034c6851886396b2f0880685aba9045973111", size = 61187 }, + { url = "https://files.pythonhosted.org/packages/95/6d/06994f86c2cc172b5ea127dedbb19e809205e06b1ba7532e2f0aea5631cd/hdx_python_utilities-3.9.2-py3-none-any.whl", hash = "sha256:fae3cc241420ae7ebb0a7a53cc8034c6851886396b2f0880685aba9045973111", size = 61187, upload_time = "2025-09-21T23:14:15.588Z" }, ] [[package]] @@ -717,28 +739,28 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b4/fc/aa1325331c320598ce60cc31060087681cd05123b6fb2a8a571e882b7f05/highspy-1.11.0.tar.gz", hash = "sha256:771e58c076122d207ff1b19759c21d3227f0da5b80dfd89a4145681524969cef", size = 1285415 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/bb/ad/b54ad6740b950faab3b7f1465fbb5c740fc522928a8d9f01cac181f8f9a6/highspy-1.11.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:28fffd3e733833a7b2569df6761088046e8aca868ab328828711dbe15b102ad4", size = 2232856 }, - { url = "https://files.pythonhosted.org/packages/a3/0c/3921a207f47d52abc81a9d00d8f4d579b05b85670e23bc7140e39268490d/highspy-1.11.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:20a3adf8820a5f7a9cee6fc76df625e651ecfd8b5898af2a77042e79269ce0bc", size = 1908641 }, - { url = "https://files.pythonhosted.org/packages/0a/b6/ea7ea6c4c3f781b007fe928b2aefa40c49287b4689985d04c3b20d383475/highspy-1.11.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d4bc0a84cf613bb8565f9b5f610eb0655384162f509b5d86f9c888570275fdc", size = 2119574 }, - { url = "https://files.pythonhosted.org/packages/ff/0c/94f1ccb6606e8445a7a0c68d983e47f64899582c64fcea651f488eaaaea0/highspy-1.11.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:543789b75c396a904cb550de34eb333f1a184e123dadc9903b5e6dbca18a007b", size = 2441487 }, - { url = "https://files.pythonhosted.org/packages/ad/aa/e7c4ac05162187c484bb121f50d8e037c13bf894ed5cf4e781e1cff68762/highspy-1.11.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a23949e4f44b6df0ed8c387a7c733d683a0fa66e3ff15d65719979ce2099ee99", size = 2302302 }, - { url = "https://files.pythonhosted.org/packages/04/ce/fd2473bed635eb06d116f987767d5c5fe3c62b317fb1a788c31966d7fa0a/highspy-1.11.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:50dacf300ebe7c4dca92891c0bf61b694f2ca744207cf7d0d24f2a30ffb5608c", size = 3101885 }, - { url = "https://files.pythonhosted.org/packages/6e/e1/bf174389656de5d302ed53dd5cdeb5f7e9ad84156ad2fc95d5a63ba023f2/highspy-1.11.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a782c242b4b047f86110787b0dafce9d77cc10f079adab1fd51c5331e5760127", size = 3647952 }, - { url = "https://files.pythonhosted.org/packages/f3/f5/42f6f2ce99c5b9d7aa864ac3abeaf8a2b66da707821ab42b0a31ec2a0dc1/highspy-1.11.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:15b804387089a389e5f01b056a4b3ad74c7d1cf00ab00a0faaf3b4a582bb664c", size = 3309616 }, - { url = "https://files.pythonhosted.org/packages/47/f5/cf13640ed65ea934b45e0c3e786497f4696f286faf45e8e62579a0f15462/highspy-1.11.0-cp312-cp312-win32.whl", hash = "sha256:8c33f68df8ab9666d379b0d64d04775c0a9db31882d4f87b3ec8cece0003b47d", size = 1710641 }, - { url = "https://files.pythonhosted.org/packages/b7/2f/7acfea5b8d32b86bdec018f858bc195236b804a22a7cd3349da711498692/highspy-1.11.0-cp312-cp312-win_amd64.whl", hash = "sha256:a0aed8c80d33e2fc2eb1def75dbd34c9fa463acb589d19a5ed5dcc0178ae7062", size = 1985767 }, - { url = "https://files.pythonhosted.org/packages/96/84/3e899c5d95dc9d5400a308e0aaf4a5143f69016a4f46dd528ff7cd65d341/highspy-1.11.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f675cda73860c7c8a22546db3c80db985720baea84866b08a971cfa03cc7a156", size = 2232867 }, - { url = "https://files.pythonhosted.org/packages/74/e2/2853095a74e9fc2c2081340647be8edba7122696534ebbaf159ceb53f9b4/highspy-1.11.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7babebfc01b7682c69c95e0520614ec9400e10cec1b84d3fb7cd48535c606244", size = 1908601 }, - { url = "https://files.pythonhosted.org/packages/e6/36/3cabdd3ae8610912962bad96f4d4d6702255d6c01d050754e4050a9eaa4a/highspy-1.11.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39fb60d84d7a58e58f923ea6f0641e6978eb9049033b84de1a2add723e01cd3f", size = 2119726 }, - { url = "https://files.pythonhosted.org/packages/a9/da/200d3f13ca9ad3f9fc11a1f3f76cc2734de42dae064510365d42caeb5ed4/highspy-1.11.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6c2e7cf4d504287cd8910de322a726d58428af43bb985d6bae602bf84a7454b9", size = 2441449 }, - { url = "https://files.pythonhosted.org/packages/6c/58/fc3775850dc668006039637a4f23f03a9c0eb533643c9d3a7370f9d63de2/highspy-1.11.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79682aa7855d94106ccbbb750082d156dcbb57dff9d489f167320ae0ce768867", size = 2302685 }, - { url = "https://files.pythonhosted.org/packages/b5/16/e13326a9706c407d32e39ad14aa79a696c1eb49bb13d50fde5d96afb02b5/highspy-1.11.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:65232aa496fb27be56cc85b2c7c785fac866107c32ea00cc38ec474d6a9f6494", size = 3102306 }, - { url = "https://files.pythonhosted.org/packages/0e/93/468e63b16d9bf123174e7f8f7b8bd5a2f96b18d7370a2cc35e6485871749/highspy-1.11.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:f78f27e18275d3c7868dcd0314ea535ed361322e7f0817363872d75a4cc15abc", size = 3648234 }, - { url = "https://files.pythonhosted.org/packages/dc/c5/37b849a69c9cbccf533a9a51e309a49e83d704f06bf45370c2e78ceb15d4/highspy-1.11.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6156a7d643268456427b6fe310626ad9ee9d908ff812cc64ee8bad7b9872ea98", size = 3309724 }, - { url = "https://files.pythonhosted.org/packages/90/0f/89c579b2f718dc419fd76067a03ecb3c96e6919b7cffee1b9f5a2dfe4f56/highspy-1.11.0-cp313-cp313-win32.whl", hash = "sha256:e61facebb0127eb3661db79a11c7665e47229ec63d2b425996d04aeede26d46b", size = 1710676 }, - { url = "https://files.pythonhosted.org/packages/20/ca/ba2af91f2418bee0d0e99df71dcd171ca863675de6a5260bbf06c120f084/highspy-1.11.0-cp313-cp313-win_amd64.whl", hash = "sha256:ceac08be37f75dc0af95669a0cfb073e5db5f07ead05cdcc81fd4b4394708d53", size = 1985967 }, +sdist = { url = "https://files.pythonhosted.org/packages/b4/fc/aa1325331c320598ce60cc31060087681cd05123b6fb2a8a571e882b7f05/highspy-1.11.0.tar.gz", hash = "sha256:771e58c076122d207ff1b19759c21d3227f0da5b80dfd89a4145681524969cef", size = 1285415, upload_time = "2025-06-06T00:47:22.562Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bb/ad/b54ad6740b950faab3b7f1465fbb5c740fc522928a8d9f01cac181f8f9a6/highspy-1.11.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:28fffd3e733833a7b2569df6761088046e8aca868ab328828711dbe15b102ad4", size = 2232856, upload_time = "2025-06-06T00:46:11.161Z" }, + { url = "https://files.pythonhosted.org/packages/a3/0c/3921a207f47d52abc81a9d00d8f4d579b05b85670e23bc7140e39268490d/highspy-1.11.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:20a3adf8820a5f7a9cee6fc76df625e651ecfd8b5898af2a77042e79269ce0bc", size = 1908641, upload_time = "2025-06-06T00:46:12.706Z" }, + { url = "https://files.pythonhosted.org/packages/0a/b6/ea7ea6c4c3f781b007fe928b2aefa40c49287b4689985d04c3b20d383475/highspy-1.11.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d4bc0a84cf613bb8565f9b5f610eb0655384162f509b5d86f9c888570275fdc", size = 2119574, upload_time = "2025-06-06T00:46:14.261Z" }, + { url = "https://files.pythonhosted.org/packages/ff/0c/94f1ccb6606e8445a7a0c68d983e47f64899582c64fcea651f488eaaaea0/highspy-1.11.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:543789b75c396a904cb550de34eb333f1a184e123dadc9903b5e6dbca18a007b", size = 2441487, upload_time = "2025-06-06T00:46:16.286Z" }, + { url = "https://files.pythonhosted.org/packages/ad/aa/e7c4ac05162187c484bb121f50d8e037c13bf894ed5cf4e781e1cff68762/highspy-1.11.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a23949e4f44b6df0ed8c387a7c733d683a0fa66e3ff15d65719979ce2099ee99", size = 2302302, upload_time = "2025-06-06T00:46:18.819Z" }, + { url = "https://files.pythonhosted.org/packages/04/ce/fd2473bed635eb06d116f987767d5c5fe3c62b317fb1a788c31966d7fa0a/highspy-1.11.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:50dacf300ebe7c4dca92891c0bf61b694f2ca744207cf7d0d24f2a30ffb5608c", size = 3101885, upload_time = "2025-06-06T00:46:20.774Z" }, + { url = "https://files.pythonhosted.org/packages/6e/e1/bf174389656de5d302ed53dd5cdeb5f7e9ad84156ad2fc95d5a63ba023f2/highspy-1.11.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a782c242b4b047f86110787b0dafce9d77cc10f079adab1fd51c5331e5760127", size = 3647952, upload_time = "2025-06-06T00:46:22.847Z" }, + { url = "https://files.pythonhosted.org/packages/f3/f5/42f6f2ce99c5b9d7aa864ac3abeaf8a2b66da707821ab42b0a31ec2a0dc1/highspy-1.11.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:15b804387089a389e5f01b056a4b3ad74c7d1cf00ab00a0faaf3b4a582bb664c", size = 3309616, upload_time = "2025-06-06T00:46:24.888Z" }, + { url = "https://files.pythonhosted.org/packages/47/f5/cf13640ed65ea934b45e0c3e786497f4696f286faf45e8e62579a0f15462/highspy-1.11.0-cp312-cp312-win32.whl", hash = "sha256:8c33f68df8ab9666d379b0d64d04775c0a9db31882d4f87b3ec8cece0003b47d", size = 1710641, upload_time = "2025-06-06T00:46:26.462Z" }, + { url = "https://files.pythonhosted.org/packages/b7/2f/7acfea5b8d32b86bdec018f858bc195236b804a22a7cd3349da711498692/highspy-1.11.0-cp312-cp312-win_amd64.whl", hash = "sha256:a0aed8c80d33e2fc2eb1def75dbd34c9fa463acb589d19a5ed5dcc0178ae7062", size = 1985767, upload_time = "2025-06-06T00:46:28.144Z" }, + { url = "https://files.pythonhosted.org/packages/96/84/3e899c5d95dc9d5400a308e0aaf4a5143f69016a4f46dd528ff7cd65d341/highspy-1.11.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f675cda73860c7c8a22546db3c80db985720baea84866b08a971cfa03cc7a156", size = 2232867, upload_time = "2025-06-06T00:46:29.651Z" }, + { url = "https://files.pythonhosted.org/packages/74/e2/2853095a74e9fc2c2081340647be8edba7122696534ebbaf159ceb53f9b4/highspy-1.11.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7babebfc01b7682c69c95e0520614ec9400e10cec1b84d3fb7cd48535c606244", size = 1908601, upload_time = "2025-06-06T00:46:31.232Z" }, + { url = "https://files.pythonhosted.org/packages/e6/36/3cabdd3ae8610912962bad96f4d4d6702255d6c01d050754e4050a9eaa4a/highspy-1.11.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39fb60d84d7a58e58f923ea6f0641e6978eb9049033b84de1a2add723e01cd3f", size = 2119726, upload_time = "2025-06-06T00:46:32.796Z" }, + { url = "https://files.pythonhosted.org/packages/a9/da/200d3f13ca9ad3f9fc11a1f3f76cc2734de42dae064510365d42caeb5ed4/highspy-1.11.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6c2e7cf4d504287cd8910de322a726d58428af43bb985d6bae602bf84a7454b9", size = 2441449, upload_time = "2025-06-06T00:46:35.147Z" }, + { url = "https://files.pythonhosted.org/packages/6c/58/fc3775850dc668006039637a4f23f03a9c0eb533643c9d3a7370f9d63de2/highspy-1.11.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79682aa7855d94106ccbbb750082d156dcbb57dff9d489f167320ae0ce768867", size = 2302685, upload_time = "2025-06-06T00:46:36.791Z" }, + { url = "https://files.pythonhosted.org/packages/b5/16/e13326a9706c407d32e39ad14aa79a696c1eb49bb13d50fde5d96afb02b5/highspy-1.11.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:65232aa496fb27be56cc85b2c7c785fac866107c32ea00cc38ec474d6a9f6494", size = 3102306, upload_time = "2025-06-06T00:46:38.341Z" }, + { url = "https://files.pythonhosted.org/packages/0e/93/468e63b16d9bf123174e7f8f7b8bd5a2f96b18d7370a2cc35e6485871749/highspy-1.11.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:f78f27e18275d3c7868dcd0314ea535ed361322e7f0817363872d75a4cc15abc", size = 3648234, upload_time = "2025-06-06T00:46:40.895Z" }, + { url = "https://files.pythonhosted.org/packages/dc/c5/37b849a69c9cbccf533a9a51e309a49e83d704f06bf45370c2e78ceb15d4/highspy-1.11.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6156a7d643268456427b6fe310626ad9ee9d908ff812cc64ee8bad7b9872ea98", size = 3309724, upload_time = "2025-06-06T00:46:43.083Z" }, + { url = "https://files.pythonhosted.org/packages/90/0f/89c579b2f718dc419fd76067a03ecb3c96e6919b7cffee1b9f5a2dfe4f56/highspy-1.11.0-cp313-cp313-win32.whl", hash = "sha256:e61facebb0127eb3661db79a11c7665e47229ec63d2b425996d04aeede26d46b", size = 1710676, upload_time = "2025-06-06T00:46:45.132Z" }, + { url = "https://files.pythonhosted.org/packages/20/ca/ba2af91f2418bee0d0e99df71dcd171ca863675de6a5260bbf06c120f084/highspy-1.11.0-cp313-cp313-win_amd64.whl", hash = "sha256:ceac08be37f75dc0af95669a0cfb073e5db5f07ead05cdcc81fd4b4394708d53", size = 1985967, upload_time = "2025-06-06T00:46:46.767Z" }, ] [[package]] @@ -746,99 +768,100 @@ name = "htmlmin2" version = "0.1.13" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/be/31/a76f4bfa885f93b8167cb4c85cf32b54d1f64384d0b897d45bc6d19b7b45/htmlmin2-0.1.13-py3-none-any.whl", hash = "sha256:75609f2a42e64f7ce57dbff28a39890363bde9e7e5885db633317efbdf8c79a2", size = 34486 }, + { url = "https://files.pythonhosted.org/packages/be/31/a76f4bfa885f93b8167cb4c85cf32b54d1f64384d0b897d45bc6d19b7b45/htmlmin2-0.1.13-py3-none-any.whl", hash = "sha256:75609f2a42e64f7ce57dbff28a39890363bde9e7e5885db633317efbdf8c79a2", size = 34486, upload_time = "2023-03-14T21:28:30.388Z" }, ] [[package]] name = "humanize" version = "4.13.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/98/1d/3062fcc89ee05a715c0b9bfe6490c00c576314f27ffee3a704122c6fd259/humanize-4.13.0.tar.gz", hash = "sha256:78f79e68f76f0b04d711c4e55d32bebef5be387148862cb1ef83d2b58e7935a0", size = 81884 } +sdist = { url = "https://files.pythonhosted.org/packages/98/1d/3062fcc89ee05a715c0b9bfe6490c00c576314f27ffee3a704122c6fd259/humanize-4.13.0.tar.gz", hash = "sha256:78f79e68f76f0b04d711c4e55d32bebef5be387148862cb1ef83d2b58e7935a0", size = 81884, upload_time = "2025-08-25T09:39:20.04Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1e/c7/316e7ca04d26695ef0635dc81683d628350810eb8e9b2299fc08ba49f366/humanize-4.13.0-py3-none-any.whl", hash = "sha256:b810820b31891813b1673e8fec7f1ed3312061eab2f26e3fa192c393d11ed25f", size = 128869 }, + { url = "https://files.pythonhosted.org/packages/1e/c7/316e7ca04d26695ef0635dc81683d628350810eb8e9b2299fc08ba49f366/humanize-4.13.0-py3-none-any.whl", hash = "sha256:b810820b31891813b1673e8fec7f1ed3312061eab2f26e3fa192c393d11ed25f", size = 128869, upload_time = "2025-08-25T09:39:18.54Z" }, ] [[package]] name = "identify" version = "2.6.14" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/52/c4/62963f25a678f6a050fb0505a65e9e726996171e6dbe1547f79619eefb15/identify-2.6.14.tar.gz", hash = "sha256:663494103b4f717cb26921c52f8751363dc89db64364cd836a9bf1535f53cd6a", size = 99283 } +sdist = { url = "https://files.pythonhosted.org/packages/52/c4/62963f25a678f6a050fb0505a65e9e726996171e6dbe1547f79619eefb15/identify-2.6.14.tar.gz", hash = "sha256:663494103b4f717cb26921c52f8751363dc89db64364cd836a9bf1535f53cd6a", size = 99283, upload_time = "2025-09-06T19:30:52.938Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e5/ae/2ad30f4652712c82f1c23423d79136fbce338932ad166d70c1efb86a5998/identify-2.6.14-py2.py3-none-any.whl", hash = "sha256:11a073da82212c6646b1f39bb20d4483bfb9543bd5566fec60053c4bb309bf2e", size = 99172 }, + { url = "https://files.pythonhosted.org/packages/e5/ae/2ad30f4652712c82f1c23423d79136fbce338932ad166d70c1efb86a5998/identify-2.6.14-py2.py3-none-any.whl", hash = "sha256:11a073da82212c6646b1f39bb20d4483bfb9543bd5566fec60053c4bb309bf2e", size = 99172, upload_time = "2025-09-06T19:30:51.759Z" }, ] [[package]] name = "idna" version = "3.10" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490 } +sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490, upload_time = "2024-09-15T18:07:39.745Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 }, + { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442, upload_time = "2024-09-15T18:07:37.964Z" }, ] [[package]] name = "ijson" version = "3.4.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a3/4f/1cfeada63f5fce87536651268ddf5cca79b8b4bbb457aee4e45777964a0a/ijson-3.4.0.tar.gz", hash = "sha256:5f74dcbad9d592c428d3ca3957f7115a42689ee7ee941458860900236ae9bb13", size = 65782 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f8/ec/317ee5b2d13e50448833ead3aa906659a32b376191f6abc2a7c6112d2b27/ijson-3.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:956b148f88259a80a9027ffbe2d91705fae0c004fbfba3e5a24028fbe72311a9", size = 87212 }, - { url = "https://files.pythonhosted.org/packages/f8/43/b06c96ced30cacecc5d518f89b0fd1c98c294a30ff88848b70ed7b7f72a1/ijson-3.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:06b89960f5c721106394c7fba5760b3f67c515b8eb7d80f612388f5eca2f4621", size = 59175 }, - { url = "https://files.pythonhosted.org/packages/e9/df/b4aeafb7ecde463130840ee9be36130823ec94a00525049bf700883378b8/ijson-3.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9a0bb591cf250dd7e9dfab69d634745a7f3272d31cfe879f9156e0a081fd97ee", size = 59011 }, - { url = "https://files.pythonhosted.org/packages/e3/7c/a80b8e361641609507f62022089626d4b8067f0826f51e1c09e4ba86eba8/ijson-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:72e92de999977f4c6b660ffcf2b8d59604ccd531edcbfde05b642baf283e0de8", size = 146094 }, - { url = "https://files.pythonhosted.org/packages/01/44/fa416347b9a802e3646c6ff377fc3278bd7d6106e17beb339514b6a3184e/ijson-3.4.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e9602157a5b869d44b6896e64f502c712a312fcde044c2e586fccb85d3e316e", size = 137903 }, - { url = "https://files.pythonhosted.org/packages/24/c6/41a9ad4d42df50ff6e70fdce79b034f09b914802737ebbdc141153d8d791/ijson-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e83660edb931a425b7ff662eb49db1f10d30ca6d4d350e5630edbed098bc01", size = 148339 }, - { url = "https://files.pythonhosted.org/packages/5f/6f/7d01efda415b8502dce67e067ed9e8a124f53e763002c02207e542e1a2f1/ijson-3.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:49bf8eac1c7b7913073865a859c215488461f7591b4fa6a33c14b51cb73659d0", size = 149383 }, - { url = "https://files.pythonhosted.org/packages/95/6c/0d67024b9ecb57916c5e5ab0350251c9fe2f86dc9c8ca2b605c194bdad6a/ijson-3.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:160b09273cb42019f1811469508b0a057d19f26434d44752bde6f281da6d3f32", size = 141580 }, - { url = "https://files.pythonhosted.org/packages/06/43/e10edcc1c6a3b619294de835e7678bfb3a1b8a75955f3689fd66a1e9e7b4/ijson-3.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2019ff4e6f354aa00c76c8591bd450899111c61f2354ad55cc127e2ce2492c44", size = 150280 }, - { url = "https://files.pythonhosted.org/packages/07/84/1cbeee8e8190a1ebe6926569a92cf1fa80ddb380c129beb6f86559e1bb24/ijson-3.4.0-cp312-cp312-win32.whl", hash = "sha256:931c007bf6bb8330705429989b2deed6838c22b63358a330bf362b6e458ba0bf", size = 51512 }, - { url = "https://files.pythonhosted.org/packages/66/13/530802bc391c95be6fe9f96e9aa427d94067e7c0b7da7a9092344dc44c4b/ijson-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:71523f2b64cb856a820223e94d23e88369f193017ecc789bb4de198cc9d349eb", size = 54081 }, - { url = "https://files.pythonhosted.org/packages/77/b3/b1d2eb2745e5204ec7a25365a6deb7868576214feb5e109bce368fb692c9/ijson-3.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e8d96f88d75196a61c9d9443de2b72c2d4a7ba9456ff117b57ae3bba23a54256", size = 87216 }, - { url = "https://files.pythonhosted.org/packages/b1/cd/cd6d340087617f8cc9bedbb21d974542fe2f160ed0126b8288d3499a469b/ijson-3.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c45906ce2c1d3b62f15645476fc3a6ca279549127f01662a39ca5ed334a00cf9", size = 59170 }, - { url = "https://files.pythonhosted.org/packages/3e/4d/32d3a9903b488d3306e3c8288f6ee4217d2eea82728261db03a1045eb5d1/ijson-3.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4ab4bc2119b35c4363ea49f29563612237cae9413d2fbe54b223be098b97bc9e", size = 59013 }, - { url = "https://files.pythonhosted.org/packages/d5/c8/db15465ab4b0b477cee5964c8bfc94bf8c45af8e27a23e1ad78d1926e587/ijson-3.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97b0a9b5a15e61dfb1f14921ea4e0dba39f3a650df6d8f444ddbc2b19b479ff1", size = 146564 }, - { url = "https://files.pythonhosted.org/packages/c4/d8/0755545bc122473a9a434ab90e0f378780e603d75495b1ca3872de757873/ijson-3.4.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e3047bb994dabedf11de11076ed1147a307924b6e5e2df6784fb2599c4ad8c60", size = 137917 }, - { url = "https://files.pythonhosted.org/packages/d0/c6/aeb89c8939ebe3f534af26c8c88000c5e870dbb6ae33644c21a4531f87d2/ijson-3.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68c83161b052e9f5dc8191acbc862bb1e63f8a35344cb5cd0db1afd3afd487a6", size = 148897 }, - { url = "https://files.pythonhosted.org/packages/be/0e/7ef6e9b372106f2682a4a32b3c65bf86bb471a1670e4dac242faee4a7d3f/ijson-3.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1eebd9b6c20eb1dffde0ae1f0fbb4aeacec2eb7b89adb5c7c0449fc9fd742760", size = 149711 }, - { url = "https://files.pythonhosted.org/packages/d1/5d/9841c3ed75bcdabf19b3202de5f862a9c9c86ce5c7c9d95fa32347fdbf5f/ijson-3.4.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:13fb6d5c35192c541421f3ee81239d91fc15a8d8f26c869250f941f4b346a86c", size = 141691 }, - { url = "https://files.pythonhosted.org/packages/d5/d2/ce74e17218dba292e9be10a44ed0c75439f7958cdd263adb0b5b92d012d5/ijson-3.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:28b7196ff7b37c4897c547a28fa4876919696739fc91c1f347651c9736877c69", size = 150738 }, - { url = "https://files.pythonhosted.org/packages/4e/43/dcc480f94453b1075c9911d4755b823f3ace275761bb37b40139f22109ca/ijson-3.4.0-cp313-cp313-win32.whl", hash = "sha256:3c2691d2da42629522140f77b99587d6f5010440d58d36616f33bc7bdc830cc3", size = 51512 }, - { url = "https://files.pythonhosted.org/packages/35/dd/d8c5f15efd85ba51e6e11451ebe23d779361a9ec0d192064c2a8c3cdfcb8/ijson-3.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:c4554718c275a044c47eb3874f78f2c939f300215d9031e785a6711cc51b83fc", size = 54074 }, - { url = "https://files.pythonhosted.org/packages/79/73/24ad8cd106203419c4d22bed627e02e281d66b83e91bc206a371893d0486/ijson-3.4.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:915a65e3f3c0eee2ea937bc62aaedb6c14cc1e8f0bb9f3f4fb5a9e2bbfa4b480", size = 91694 }, - { url = "https://files.pythonhosted.org/packages/17/2d/f7f680984bcb7324a46a4c2df3bd73cf70faef0acfeb85a3f811abdfd590/ijson-3.4.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:afbe9748707684b6c5adc295c4fdcf27765b300aec4d484e14a13dca4e5c0afa", size = 61390 }, - { url = "https://files.pythonhosted.org/packages/09/a1/f3ca7bab86f95bdb82494739e71d271410dfefce4590785d511669127145/ijson-3.4.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:d823f8f321b4d8d5fa020d0a84f089fec5d52b7c0762430476d9f8bf95bbc1a9", size = 61140 }, - { url = "https://files.pythonhosted.org/packages/51/79/dd340df3d4fc7771c95df29997956b92ed0570fe7b616d1792fea9ad93f2/ijson-3.4.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8a0a2c54f3becf76881188beefd98b484b1d3bd005769a740d5b433b089fa23", size = 214739 }, - { url = "https://files.pythonhosted.org/packages/59/f0/85380b7f51d1f5fb7065d76a7b623e02feca920cc678d329b2eccc0011e0/ijson-3.4.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ced19a83ab09afa16257a0b15bc1aa888dbc555cb754be09d375c7f8d41051f2", size = 198338 }, - { url = "https://files.pythonhosted.org/packages/a5/cd/313264cf2ec42e0f01d198c49deb7b6fadeb793b3685e20e738eb6b3fa13/ijson-3.4.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8100f9885eff1f38d35cef80ef759a1bbf5fc946349afa681bd7d0e681b7f1a0", size = 207515 }, - { url = "https://files.pythonhosted.org/packages/12/94/bf14457aa87ea32641f2db577c9188ef4e4ae373478afef422b31fc7f309/ijson-3.4.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d7bcc3f7f21b0f703031ecd15209b1284ea51b2a329d66074b5261de3916c1eb", size = 210081 }, - { url = "https://files.pythonhosted.org/packages/7d/b4/eaee39e290e40e52d665db9bd1492cfdce86bd1e47948e0440db209c6023/ijson-3.4.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:2dcb190227b09dd171bdcbfe4720fddd574933c66314818dfb3960c8a6246a77", size = 199253 }, - { url = "https://files.pythonhosted.org/packages/c5/9c/e09c7b9ac720a703ab115b221b819f149ed54c974edfff623c1e925e57da/ijson-3.4.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:eda4cfb1d49c6073a901735aaa62e39cb7ab47f3ad7bb184862562f776f1fa8a", size = 203816 }, - { url = "https://files.pythonhosted.org/packages/7c/14/acd304f412e32d16a2c12182b9d78206bb0ae35354d35664f45db05c1b3b/ijson-3.4.0-cp313-cp313t-win32.whl", hash = "sha256:0772638efa1f3b72b51736833404f1cbd2f5beeb9c1a3d392e7d385b9160cba7", size = 53760 }, - { url = "https://files.pythonhosted.org/packages/2f/24/93dd0a467191590a5ed1fc2b35842bca9d09900d001e00b0b497c0208ef6/ijson-3.4.0-cp313-cp313t-win_amd64.whl", hash = "sha256:3d8a0d67f36e4fb97c61a724456ef0791504b16ce6f74917a31c2e92309bbeb9", size = 56948 }, +sdist = { url = "https://files.pythonhosted.org/packages/a3/4f/1cfeada63f5fce87536651268ddf5cca79b8b4bbb457aee4e45777964a0a/ijson-3.4.0.tar.gz", hash = "sha256:5f74dcbad9d592c428d3ca3957f7115a42689ee7ee941458860900236ae9bb13", size = 65782, upload_time = "2025-05-08T02:37:20.135Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f8/ec/317ee5b2d13e50448833ead3aa906659a32b376191f6abc2a7c6112d2b27/ijson-3.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:956b148f88259a80a9027ffbe2d91705fae0c004fbfba3e5a24028fbe72311a9", size = 87212, upload_time = "2025-05-08T02:35:51.835Z" }, + { url = "https://files.pythonhosted.org/packages/f8/43/b06c96ced30cacecc5d518f89b0fd1c98c294a30ff88848b70ed7b7f72a1/ijson-3.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:06b89960f5c721106394c7fba5760b3f67c515b8eb7d80f612388f5eca2f4621", size = 59175, upload_time = "2025-05-08T02:35:52.988Z" }, + { url = "https://files.pythonhosted.org/packages/e9/df/b4aeafb7ecde463130840ee9be36130823ec94a00525049bf700883378b8/ijson-3.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9a0bb591cf250dd7e9dfab69d634745a7f3272d31cfe879f9156e0a081fd97ee", size = 59011, upload_time = "2025-05-08T02:35:54.394Z" }, + { url = "https://files.pythonhosted.org/packages/e3/7c/a80b8e361641609507f62022089626d4b8067f0826f51e1c09e4ba86eba8/ijson-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:72e92de999977f4c6b660ffcf2b8d59604ccd531edcbfde05b642baf283e0de8", size = 146094, upload_time = "2025-05-08T02:35:55.601Z" }, + { url = "https://files.pythonhosted.org/packages/01/44/fa416347b9a802e3646c6ff377fc3278bd7d6106e17beb339514b6a3184e/ijson-3.4.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e9602157a5b869d44b6896e64f502c712a312fcde044c2e586fccb85d3e316e", size = 137903, upload_time = "2025-05-08T02:35:56.814Z" }, + { url = "https://files.pythonhosted.org/packages/24/c6/41a9ad4d42df50ff6e70fdce79b034f09b914802737ebbdc141153d8d791/ijson-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e83660edb931a425b7ff662eb49db1f10d30ca6d4d350e5630edbed098bc01", size = 148339, upload_time = "2025-05-08T02:35:58.595Z" }, + { url = "https://files.pythonhosted.org/packages/5f/6f/7d01efda415b8502dce67e067ed9e8a124f53e763002c02207e542e1a2f1/ijson-3.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:49bf8eac1c7b7913073865a859c215488461f7591b4fa6a33c14b51cb73659d0", size = 149383, upload_time = "2025-05-08T02:36:00.197Z" }, + { url = "https://files.pythonhosted.org/packages/95/6c/0d67024b9ecb57916c5e5ab0350251c9fe2f86dc9c8ca2b605c194bdad6a/ijson-3.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:160b09273cb42019f1811469508b0a057d19f26434d44752bde6f281da6d3f32", size = 141580, upload_time = "2025-05-08T02:36:01.998Z" }, + { url = "https://files.pythonhosted.org/packages/06/43/e10edcc1c6a3b619294de835e7678bfb3a1b8a75955f3689fd66a1e9e7b4/ijson-3.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2019ff4e6f354aa00c76c8591bd450899111c61f2354ad55cc127e2ce2492c44", size = 150280, upload_time = "2025-05-08T02:36:03.926Z" }, + { url = "https://files.pythonhosted.org/packages/07/84/1cbeee8e8190a1ebe6926569a92cf1fa80ddb380c129beb6f86559e1bb24/ijson-3.4.0-cp312-cp312-win32.whl", hash = "sha256:931c007bf6bb8330705429989b2deed6838c22b63358a330bf362b6e458ba0bf", size = 51512, upload_time = "2025-05-08T02:36:05.595Z" }, + { url = "https://files.pythonhosted.org/packages/66/13/530802bc391c95be6fe9f96e9aa427d94067e7c0b7da7a9092344dc44c4b/ijson-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:71523f2b64cb856a820223e94d23e88369f193017ecc789bb4de198cc9d349eb", size = 54081, upload_time = "2025-05-08T02:36:07.099Z" }, + { url = "https://files.pythonhosted.org/packages/77/b3/b1d2eb2745e5204ec7a25365a6deb7868576214feb5e109bce368fb692c9/ijson-3.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e8d96f88d75196a61c9d9443de2b72c2d4a7ba9456ff117b57ae3bba23a54256", size = 87216, upload_time = "2025-05-08T02:36:08.414Z" }, + { url = "https://files.pythonhosted.org/packages/b1/cd/cd6d340087617f8cc9bedbb21d974542fe2f160ed0126b8288d3499a469b/ijson-3.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c45906ce2c1d3b62f15645476fc3a6ca279549127f01662a39ca5ed334a00cf9", size = 59170, upload_time = "2025-05-08T02:36:09.604Z" }, + { url = "https://files.pythonhosted.org/packages/3e/4d/32d3a9903b488d3306e3c8288f6ee4217d2eea82728261db03a1045eb5d1/ijson-3.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4ab4bc2119b35c4363ea49f29563612237cae9413d2fbe54b223be098b97bc9e", size = 59013, upload_time = "2025-05-08T02:36:10.696Z" }, + { url = "https://files.pythonhosted.org/packages/d5/c8/db15465ab4b0b477cee5964c8bfc94bf8c45af8e27a23e1ad78d1926e587/ijson-3.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97b0a9b5a15e61dfb1f14921ea4e0dba39f3a650df6d8f444ddbc2b19b479ff1", size = 146564, upload_time = "2025-05-08T02:36:11.916Z" }, + { url = "https://files.pythonhosted.org/packages/c4/d8/0755545bc122473a9a434ab90e0f378780e603d75495b1ca3872de757873/ijson-3.4.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e3047bb994dabedf11de11076ed1147a307924b6e5e2df6784fb2599c4ad8c60", size = 137917, upload_time = "2025-05-08T02:36:13.532Z" }, + { url = "https://files.pythonhosted.org/packages/d0/c6/aeb89c8939ebe3f534af26c8c88000c5e870dbb6ae33644c21a4531f87d2/ijson-3.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68c83161b052e9f5dc8191acbc862bb1e63f8a35344cb5cd0db1afd3afd487a6", size = 148897, upload_time = "2025-05-08T02:36:14.813Z" }, + { url = "https://files.pythonhosted.org/packages/be/0e/7ef6e9b372106f2682a4a32b3c65bf86bb471a1670e4dac242faee4a7d3f/ijson-3.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1eebd9b6c20eb1dffde0ae1f0fbb4aeacec2eb7b89adb5c7c0449fc9fd742760", size = 149711, upload_time = "2025-05-08T02:36:16.476Z" }, + { url = "https://files.pythonhosted.org/packages/d1/5d/9841c3ed75bcdabf19b3202de5f862a9c9c86ce5c7c9d95fa32347fdbf5f/ijson-3.4.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:13fb6d5c35192c541421f3ee81239d91fc15a8d8f26c869250f941f4b346a86c", size = 141691, upload_time = "2025-05-08T02:36:18.044Z" }, + { url = "https://files.pythonhosted.org/packages/d5/d2/ce74e17218dba292e9be10a44ed0c75439f7958cdd263adb0b5b92d012d5/ijson-3.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:28b7196ff7b37c4897c547a28fa4876919696739fc91c1f347651c9736877c69", size = 150738, upload_time = "2025-05-08T02:36:19.483Z" }, + { url = "https://files.pythonhosted.org/packages/4e/43/dcc480f94453b1075c9911d4755b823f3ace275761bb37b40139f22109ca/ijson-3.4.0-cp313-cp313-win32.whl", hash = "sha256:3c2691d2da42629522140f77b99587d6f5010440d58d36616f33bc7bdc830cc3", size = 51512, upload_time = "2025-05-08T02:36:20.99Z" }, + { url = "https://files.pythonhosted.org/packages/35/dd/d8c5f15efd85ba51e6e11451ebe23d779361a9ec0d192064c2a8c3cdfcb8/ijson-3.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:c4554718c275a044c47eb3874f78f2c939f300215d9031e785a6711cc51b83fc", size = 54074, upload_time = "2025-05-08T02:36:22.075Z" }, + { url = "https://files.pythonhosted.org/packages/79/73/24ad8cd106203419c4d22bed627e02e281d66b83e91bc206a371893d0486/ijson-3.4.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:915a65e3f3c0eee2ea937bc62aaedb6c14cc1e8f0bb9f3f4fb5a9e2bbfa4b480", size = 91694, upload_time = "2025-05-08T02:36:23.289Z" }, + { url = "https://files.pythonhosted.org/packages/17/2d/f7f680984bcb7324a46a4c2df3bd73cf70faef0acfeb85a3f811abdfd590/ijson-3.4.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:afbe9748707684b6c5adc295c4fdcf27765b300aec4d484e14a13dca4e5c0afa", size = 61390, upload_time = "2025-05-08T02:36:24.42Z" }, + { url = "https://files.pythonhosted.org/packages/09/a1/f3ca7bab86f95bdb82494739e71d271410dfefce4590785d511669127145/ijson-3.4.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:d823f8f321b4d8d5fa020d0a84f089fec5d52b7c0762430476d9f8bf95bbc1a9", size = 61140, upload_time = "2025-05-08T02:36:26.708Z" }, + { url = "https://files.pythonhosted.org/packages/51/79/dd340df3d4fc7771c95df29997956b92ed0570fe7b616d1792fea9ad93f2/ijson-3.4.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8a0a2c54f3becf76881188beefd98b484b1d3bd005769a740d5b433b089fa23", size = 214739, upload_time = "2025-05-08T02:36:27.973Z" }, + { url = "https://files.pythonhosted.org/packages/59/f0/85380b7f51d1f5fb7065d76a7b623e02feca920cc678d329b2eccc0011e0/ijson-3.4.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ced19a83ab09afa16257a0b15bc1aa888dbc555cb754be09d375c7f8d41051f2", size = 198338, upload_time = "2025-05-08T02:36:29.496Z" }, + { url = "https://files.pythonhosted.org/packages/a5/cd/313264cf2ec42e0f01d198c49deb7b6fadeb793b3685e20e738eb6b3fa13/ijson-3.4.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8100f9885eff1f38d35cef80ef759a1bbf5fc946349afa681bd7d0e681b7f1a0", size = 207515, upload_time = "2025-05-08T02:36:30.981Z" }, + { url = "https://files.pythonhosted.org/packages/12/94/bf14457aa87ea32641f2db577c9188ef4e4ae373478afef422b31fc7f309/ijson-3.4.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d7bcc3f7f21b0f703031ecd15209b1284ea51b2a329d66074b5261de3916c1eb", size = 210081, upload_time = "2025-05-08T02:36:32.403Z" }, + { url = "https://files.pythonhosted.org/packages/7d/b4/eaee39e290e40e52d665db9bd1492cfdce86bd1e47948e0440db209c6023/ijson-3.4.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:2dcb190227b09dd171bdcbfe4720fddd574933c66314818dfb3960c8a6246a77", size = 199253, upload_time = "2025-05-08T02:36:33.861Z" }, + { url = "https://files.pythonhosted.org/packages/c5/9c/e09c7b9ac720a703ab115b221b819f149ed54c974edfff623c1e925e57da/ijson-3.4.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:eda4cfb1d49c6073a901735aaa62e39cb7ab47f3ad7bb184862562f776f1fa8a", size = 203816, upload_time = "2025-05-08T02:36:35.348Z" }, + { url = "https://files.pythonhosted.org/packages/7c/14/acd304f412e32d16a2c12182b9d78206bb0ae35354d35664f45db05c1b3b/ijson-3.4.0-cp313-cp313t-win32.whl", hash = "sha256:0772638efa1f3b72b51736833404f1cbd2f5beeb9c1a3d392e7d385b9160cba7", size = 53760, upload_time = "2025-05-08T02:36:36.608Z" }, + { url = "https://files.pythonhosted.org/packages/2f/24/93dd0a467191590a5ed1fc2b35842bca9d09900d001e00b0b497c0208ef6/ijson-3.4.0-cp313-cp313t-win_amd64.whl", hash = "sha256:3d8a0d67f36e4fb97c61a724456ef0791504b16ce6f74917a31c2e92309bbeb9", size = 56948, upload_time = "2025-05-08T02:36:37.849Z" }, ] [[package]] name = "imf-reader" -version = "1.3.0" +version = "1.4.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "beautifulsoup4" }, { name = "chardet" }, + { name = "diskcache" }, { name = "pandas" }, { name = "requests" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/af/45/24521d229aec5c058d998510794567788bc7b1b764dfaa02fb8e0aeda4b7/imf_reader-1.3.0.tar.gz", hash = "sha256:3f3130dd793a112fdd5913a7c7b733847a5a07fd70dee14d57624ae4e021a141", size = 12990 } +sdist = { url = "https://files.pythonhosted.org/packages/16/5a/c8bc268ae5b6dbab4db01d92f9d34713a7c487bc85f2522173cf24bc5c74/imf_reader-1.4.1.tar.gz", hash = "sha256:2584e45485b539cd2d15bf0a785e6ac5f29775c042d9d5f83c7af5d5f0947c0b", size = 13271, upload_time = "2025-12-05T11:41:01.049Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fd/5b/3a063116950f2aa2b450120e78162bb5b87098dde3b75ae90210c6f2c099/imf_reader-1.3.0-py3-none-any.whl", hash = "sha256:3515c6644dfef44d5fda89f5bb3786b4f83da20f49184911f0df2386782106f1", size = 16520 }, + { url = "https://files.pythonhosted.org/packages/c1/79/97bd7b6c3af609b33ba2d787ea9e06ad93b1deca38388a345b6c913825ea/imf_reader-1.4.1-py3-none-any.whl", hash = "sha256:16c0dafcbe0e6630e7d3adbccb81e828b3e971b79e3969b79fbd6772151165c5", size = 19285, upload_time = "2025-12-05T11:41:00.218Z" }, ] [[package]] name = "iniconfig" version = "2.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f2/97/ebf4da567aa6827c909642694d71c9fcf53e5b504f2d96afea02718862f3/iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", size = 4793 } +sdist = { url = "https://files.pythonhosted.org/packages/f2/97/ebf4da567aa6827c909642694d71c9fcf53e5b504f2d96afea02718862f3/iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", size = 4793, upload_time = "2025-03-19T20:09:59.721Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050 }, + { url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050, upload_time = "2025-03-19T20:10:01.071Z" }, ] [[package]] @@ -860,9 +883,9 @@ dependencies = [ { name = "tornado" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/bb/76/11082e338e0daadc89c8ff866185de11daf67d181901038f9e139d109761/ipykernel-6.30.1.tar.gz", hash = "sha256:6abb270161896402e76b91394fcdce5d1be5d45f456671e5080572f8505be39b", size = 166260 } +sdist = { url = "https://files.pythonhosted.org/packages/bb/76/11082e338e0daadc89c8ff866185de11daf67d181901038f9e139d109761/ipykernel-6.30.1.tar.gz", hash = "sha256:6abb270161896402e76b91394fcdce5d1be5d45f456671e5080572f8505be39b", size = 166260, upload_time = "2025-08-04T15:47:35.018Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fc/c7/b445faca8deb954fe536abebff4ece5b097b923de482b26e78448c89d1dd/ipykernel-6.30.1-py3-none-any.whl", hash = "sha256:aa6b9fb93dca949069d8b85b6c79b2518e32ac583ae9c7d37c51d119e18b3fb4", size = 117484 }, + { url = "https://files.pythonhosted.org/packages/fc/c7/b445faca8deb954fe536abebff4ece5b097b923de482b26e78448c89d1dd/ipykernel-6.30.1-py3-none-any.whl", hash = "sha256:aa6b9fb93dca949069d8b85b6c79b2518e32ac583ae9c7d37c51d119e18b3fb4", size = 117484, upload_time = "2025-08-04T15:47:32.622Z" }, ] [[package]] @@ -881,9 +904,9 @@ dependencies = [ { name = "stack-data" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/6e/71/a86262bf5a68bf211bcc71fe302af7e05f18a2852fdc610a854d20d085e6/ipython-9.5.0.tar.gz", hash = "sha256:129c44b941fe6d9b82d36fc7a7c18127ddb1d6f02f78f867f402e2e3adde3113", size = 4389137 } +sdist = { url = "https://files.pythonhosted.org/packages/6e/71/a86262bf5a68bf211bcc71fe302af7e05f18a2852fdc610a854d20d085e6/ipython-9.5.0.tar.gz", hash = "sha256:129c44b941fe6d9b82d36fc7a7c18127ddb1d6f02f78f867f402e2e3adde3113", size = 4389137, upload_time = "2025-08-29T12:15:21.519Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/08/2a/5628a99d04acb2d2f2e749cdf4ea571d2575e898df0528a090948018b726/ipython-9.5.0-py3-none-any.whl", hash = "sha256:88369ffa1d5817d609120daa523a6da06d02518e582347c29f8451732a9c5e72", size = 612426 }, + { url = "https://files.pythonhosted.org/packages/08/2a/5628a99d04acb2d2f2e749cdf4ea571d2575e898df0528a090948018b726/ipython-9.5.0-py3-none-any.whl", hash = "sha256:88369ffa1d5817d609120daa523a6da06d02518e582347c29f8451732a9c5e72", size = 612426, upload_time = "2025-08-29T12:15:18.866Z" }, ] [[package]] @@ -893,18 +916,18 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pygments" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ef/4c/5dd1d8af08107f88c7f741ead7a40854b8ac24ddf9ae850afbcf698aa552/ipython_pygments_lexers-1.1.1.tar.gz", hash = "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81", size = 8393 } +sdist = { url = "https://files.pythonhosted.org/packages/ef/4c/5dd1d8af08107f88c7f741ead7a40854b8ac24ddf9ae850afbcf698aa552/ipython_pygments_lexers-1.1.1.tar.gz", hash = "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81", size = 8393, upload_time = "2025-01-17T11:24:34.505Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl", hash = "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c", size = 8074 }, + { url = "https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl", hash = "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c", size = 8074, upload_time = "2025-01-17T11:24:33.271Z" }, ] [[package]] name = "isodate" version = "0.7.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/54/4d/e940025e2ce31a8ce1202635910747e5a87cc3a6a6bb2d00973375014749/isodate-0.7.2.tar.gz", hash = "sha256:4cd1aa0f43ca76f4a6c6c0292a85f40b35ec2e43e315b59f06e6d32171a953e6", size = 29705 } +sdist = { url = "https://files.pythonhosted.org/packages/54/4d/e940025e2ce31a8ce1202635910747e5a87cc3a6a6bb2d00973375014749/isodate-0.7.2.tar.gz", hash = "sha256:4cd1aa0f43ca76f4a6c6c0292a85f40b35ec2e43e315b59f06e6d32171a953e6", size = 29705, upload_time = "2024-10-08T23:04:11.5Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl", hash = "sha256:28009937d8031054830160fce6d409ed342816b543597cece116d966c6d99e15", size = 22320 }, + { url = "https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl", hash = "sha256:28009937d8031054830160fce6d409ed342816b543597cece116d966c6d99e15", size = 22320, upload_time = "2024-10-08T23:04:09.501Z" }, ] [[package]] @@ -914,9 +937,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "parso" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/72/3a/79a912fbd4d8dd6fbb02bf69afd3bb72cf0c729bb3063c6f4498603db17a/jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0", size = 1231287 } +sdist = { url = "https://files.pythonhosted.org/packages/72/3a/79a912fbd4d8dd6fbb02bf69afd3bb72cf0c729bb3063c6f4498603db17a/jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0", size = 1231287, upload_time = "2024-11-11T01:41:42.873Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9", size = 1572278 }, + { url = "https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9", size = 1572278, upload_time = "2024-11-11T01:41:40.175Z" }, ] [[package]] @@ -926,25 +949,25 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "markupsafe" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115 } +sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload_time = "2025-03-05T20:05:02.478Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899 }, + { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload_time = "2025-03-05T20:05:00.369Z" }, ] [[package]] name = "joblib" version = "1.5.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e8/5d/447af5ea094b9e4c4054f82e223ada074c552335b9b4b2d14bd9b35a67c4/joblib-1.5.2.tar.gz", hash = "sha256:3faa5c39054b2f03ca547da9b2f52fde67c06240c31853f306aea97f13647b55", size = 331077 } +sdist = { url = "https://files.pythonhosted.org/packages/e8/5d/447af5ea094b9e4c4054f82e223ada074c552335b9b4b2d14bd9b35a67c4/joblib-1.5.2.tar.gz", hash = "sha256:3faa5c39054b2f03ca547da9b2f52fde67c06240c31853f306aea97f13647b55", size = 331077, upload_time = "2025-08-27T12:15:46.575Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1e/e8/685f47e0d754320684db4425a0967f7d3fa70126bffd76110b7009a0090f/joblib-1.5.2-py3-none-any.whl", hash = "sha256:4e1f0bdbb987e6d843c70cf43714cb276623def372df3c22fe5266b2670bc241", size = 308396 }, + { url = "https://files.pythonhosted.org/packages/1e/e8/685f47e0d754320684db4425a0967f7d3fa70126bffd76110b7009a0090f/joblib-1.5.2-py3-none-any.whl", hash = "sha256:4e1f0bdbb987e6d843c70cf43714cb276623def372df3c22fe5266b2670bc241", size = 308396, upload_time = "2025-08-27T12:15:45.188Z" }, ] [[package]] name = "jsmin" version = "3.0.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5e/73/e01e4c5e11ad0494f4407a3f623ad4d87714909f50b17a06ed121034ff6e/jsmin-3.0.1.tar.gz", hash = "sha256:c0959a121ef94542e807a674142606f7e90214a2b3d1eb17300244bbb5cc2bfc", size = 13925 } +sdist = { url = "https://files.pythonhosted.org/packages/5e/73/e01e4c5e11ad0494f4407a3f623ad4d87714909f50b17a06ed121034ff6e/jsmin-3.0.1.tar.gz", hash = "sha256:c0959a121ef94542e807a674142606f7e90214a2b3d1eb17300244bbb5cc2bfc", size = 13925, upload_time = "2022-01-16T20:35:59.13Z" } [[package]] name = "jsonlines" @@ -953,9 +976,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "attrs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/35/87/bcda8e46c88d0e34cad2f09ee2d0c7f5957bccdb9791b0b934ec84d84be4/jsonlines-4.0.0.tar.gz", hash = "sha256:0c6d2c09117550c089995247f605ae4cf77dd1533041d366351f6f298822ea74", size = 11359 } +sdist = { url = "https://files.pythonhosted.org/packages/35/87/bcda8e46c88d0e34cad2f09ee2d0c7f5957bccdb9791b0b934ec84d84be4/jsonlines-4.0.0.tar.gz", hash = "sha256:0c6d2c09117550c089995247f605ae4cf77dd1533041d366351f6f298822ea74", size = 11359, upload_time = "2023-09-01T12:34:44.187Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f8/62/d9ba6323b9202dd2fe166beab8a86d29465c41a0288cbe229fac60c1ab8d/jsonlines-4.0.0-py3-none-any.whl", hash = "sha256:185b334ff2ca5a91362993f42e83588a360cf95ce4b71a73548502bda52a7c55", size = 8701 }, + { url = "https://files.pythonhosted.org/packages/f8/62/d9ba6323b9202dd2fe166beab8a86d29465c41a0288cbe229fac60c1ab8d/jsonlines-4.0.0-py3-none-any.whl", hash = "sha256:185b334ff2ca5a91362993f42e83588a360cf95ce4b71a73548502bda52a7c55", size = 8701, upload_time = "2023-09-01T12:34:42.563Z" }, ] [[package]] @@ -965,9 +988,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "ply" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/6d/86/08646239a313f895186ff0a4573452038eed8c86f54380b3ebac34d32fb2/jsonpath-ng-1.7.0.tar.gz", hash = "sha256:f6f5f7fd4e5ff79c785f1573b394043b39849fb2bb47bcead935d12b00beab3c", size = 37838 } +sdist = { url = "https://files.pythonhosted.org/packages/6d/86/08646239a313f895186ff0a4573452038eed8c86f54380b3ebac34d32fb2/jsonpath-ng-1.7.0.tar.gz", hash = "sha256:f6f5f7fd4e5ff79c785f1573b394043b39849fb2bb47bcead935d12b00beab3c", size = 37838, upload_time = "2024-10-11T15:41:42.404Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/35/5a/73ecb3d82f8615f32ccdadeb9356726d6cae3a4bbc840b437ceb95708063/jsonpath_ng-1.7.0-py3-none-any.whl", hash = "sha256:f3d7f9e848cba1b6da28c55b1c26ff915dc9e0b1ba7e752a53d6da8d5cbd00b6", size = 30105 }, + { url = "https://files.pythonhosted.org/packages/35/5a/73ecb3d82f8615f32ccdadeb9356726d6cae3a4bbc840b437ceb95708063/jsonpath_ng-1.7.0-py3-none-any.whl", hash = "sha256:f3d7f9e848cba1b6da28c55b1c26ff915dc9e0b1ba7e752a53d6da8d5cbd00b6", size = 30105, upload_time = "2024-11-20T17:58:30.418Z" }, ] [[package]] @@ -980,9 +1003,9 @@ dependencies = [ { name = "referencing" }, { name = "rpds-py" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/74/69/f7185de793a29082a9f3c7728268ffb31cb5095131a9c139a74078e27336/jsonschema-4.25.1.tar.gz", hash = "sha256:e4a9655ce0da0c0b67a085847e00a3a51449e1157f4f75e9fb5aa545e122eb85", size = 357342 } +sdist = { url = "https://files.pythonhosted.org/packages/74/69/f7185de793a29082a9f3c7728268ffb31cb5095131a9c139a74078e27336/jsonschema-4.25.1.tar.gz", hash = "sha256:e4a9655ce0da0c0b67a085847e00a3a51449e1157f4f75e9fb5aa545e122eb85", size = 357342, upload_time = "2025-08-18T17:03:50.038Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl", hash = "sha256:3fba0169e345c7175110351d456342c364814cfcf3b964ba4587f22915230a63", size = 90040 }, + { url = "https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl", hash = "sha256:3fba0169e345c7175110351d456342c364814cfcf3b964ba4587f22915230a63", size = 90040, upload_time = "2025-08-18T17:03:48.373Z" }, ] [[package]] @@ -992,9 +1015,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "referencing" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/19/74/a633ee74eb36c44aa6d1095e7cc5569bebf04342ee146178e2d36600708b/jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d", size = 32855 } +sdist = { url = "https://files.pythonhosted.org/packages/19/74/a633ee74eb36c44aa6d1095e7cc5569bebf04342ee146178e2d36600708b/jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d", size = 32855, upload_time = "2025-09-08T01:34:59.186Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe", size = 18437 }, + { url = "https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe", size = 18437, upload_time = "2025-09-08T01:34:57.871Z" }, ] [[package]] @@ -1008,9 +1031,9 @@ dependencies = [ { name = "tornado" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/71/22/bf9f12fdaeae18019a468b68952a60fe6dbab5d67cd2a103cac7659b41ca/jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419", size = 342019 } +sdist = { url = "https://files.pythonhosted.org/packages/71/22/bf9f12fdaeae18019a468b68952a60fe6dbab5d67cd2a103cac7659b41ca/jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419", size = 342019, upload_time = "2024-09-17T10:44:17.613Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/11/85/b0394e0b6fcccd2c1eeefc230978a6f8cb0c5df1e4cd3e7625735a0d7d1e/jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f", size = 106105 }, + { url = "https://files.pythonhosted.org/packages/11/85/b0394e0b6fcccd2c1eeefc230978a6f8cb0c5df1e4cd3e7625735a0d7d1e/jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f", size = 106105, upload_time = "2024-09-17T10:44:15.218Z" }, ] [[package]] @@ -1022,18 +1045,18 @@ dependencies = [ { name = "pywin32", marker = "platform_python_implementation != 'PyPy' and sys_platform == 'win32'" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/99/1b/72906d554acfeb588332eaaa6f61577705e9ec752ddb486f302dafa292d9/jupyter_core-5.8.1.tar.gz", hash = "sha256:0a5f9706f70e64786b75acba995988915ebd4601c8a52e534a40b51c95f59941", size = 88923 } +sdist = { url = "https://files.pythonhosted.org/packages/99/1b/72906d554acfeb588332eaaa6f61577705e9ec752ddb486f302dafa292d9/jupyter_core-5.8.1.tar.gz", hash = "sha256:0a5f9706f70e64786b75acba995988915ebd4601c8a52e534a40b51c95f59941", size = 88923, upload_time = "2025-05-27T07:38:16.655Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2f/57/6bffd4b20b88da3800c5d691e0337761576ee688eb01299eae865689d2df/jupyter_core-5.8.1-py3-none-any.whl", hash = "sha256:c28d268fc90fb53f1338ded2eb410704c5449a358406e8a948b75706e24863d0", size = 28880 }, + { url = "https://files.pythonhosted.org/packages/2f/57/6bffd4b20b88da3800c5d691e0337761576ee688eb01299eae865689d2df/jupyter_core-5.8.1-py3-none-any.whl", hash = "sha256:c28d268fc90fb53f1338ded2eb410704c5449a358406e8a948b75706e24863d0", size = 28880, upload_time = "2025-05-27T07:38:15.137Z" }, ] [[package]] name = "jupyterlab-pygments" version = "0.3.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/90/51/9187be60d989df97f5f0aba133fa54e7300f17616e065d1ada7d7646b6d6/jupyterlab_pygments-0.3.0.tar.gz", hash = "sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d", size = 512900 } +sdist = { url = "https://files.pythonhosted.org/packages/90/51/9187be60d989df97f5f0aba133fa54e7300f17616e065d1ada7d7646b6d6/jupyterlab_pygments-0.3.0.tar.gz", hash = "sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d", size = 512900, upload_time = "2023-11-23T09:26:37.44Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b1/dd/ead9d8ea85bf202d90cc513b533f9c363121c7792674f78e0d8a854b63b4/jupyterlab_pygments-0.3.0-py3-none-any.whl", hash = "sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780", size = 15884 }, + { url = "https://files.pythonhosted.org/packages/b1/dd/ead9d8ea85bf202d90cc513b533f9c363121c7792674f78e0d8a854b63b4/jupyterlab_pygments-0.3.0-py3-none-any.whl", hash = "sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780", size = 15884, upload_time = "2023-11-23T09:26:34.325Z" }, ] [[package]] @@ -1047,9 +1070,9 @@ dependencies = [ { name = "packaging" }, { name = "pyyaml" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/15/14/41faf71e168fcc6c48268f0fc67ba0d6acf6ee4e2c5c785c2bccb967c29d/jupytext-1.17.3.tar.gz", hash = "sha256:8b6dae76d63c95cad47b493c38f0d9c74491fb621dcd0980abfcac4c8f168679", size = 3753151 } +sdist = { url = "https://files.pythonhosted.org/packages/15/14/41faf71e168fcc6c48268f0fc67ba0d6acf6ee4e2c5c785c2bccb967c29d/jupytext-1.17.3.tar.gz", hash = "sha256:8b6dae76d63c95cad47b493c38f0d9c74491fb621dcd0980abfcac4c8f168679", size = 3753151, upload_time = "2025-08-28T18:30:51.117Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/36/86/751ec86adb66104d15e650b704f89dddd64ba29283178b9651b9bc84b624/jupytext-1.17.3-py3-none-any.whl", hash = "sha256:09b0a94cd904416e823a5ba9f41bd181031215b6fc682d2b5c18e68354feb17c", size = 166548 }, + { url = "https://files.pythonhosted.org/packages/36/86/751ec86adb66104d15e650b704f89dddd64ba29283178b9651b9bc84b624/jupytext-1.17.3-py3-none-any.whl", hash = "sha256:09b0a94cd904416e823a5ba9f41bd181031215b6fc682d2b5c18e68354feb17c", size = 166548, upload_time = "2025-08-28T18:30:47.733Z" }, ] [[package]] @@ -1068,7 +1091,7 @@ dependencies = [ { name = "wheel" }, { name = "xlrd3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/63/ad/c1dafb7c59e685692a2eeafce83245b7c5f46e05881fdb77a0cbb7c19c74/libhxl-5.2.2.tar.gz", hash = "sha256:3a74d9f23561bfcefd20e5229c574bc68dfc114fdb6ba1ba684d9e9d7ea52483", size = 127736 } +sdist = { url = "https://files.pythonhosted.org/packages/63/ad/c1dafb7c59e685692a2eeafce83245b7c5f46e05881fdb77a0cbb7c19c74/libhxl-5.2.2.tar.gz", hash = "sha256:3a74d9f23561bfcefd20e5229c574bc68dfc114fdb6ba1ba684d9e9d7ea52483", size = 127736, upload_time = "2024-10-25T09:19:11.202Z" } [[package]] name = "license-expression" @@ -1077,9 +1100,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "boolean-py" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/40/71/d89bb0e71b1415453980fd32315f2a037aad9f7f70f695c7cec7035feb13/license_expression-30.4.4.tar.gz", hash = "sha256:73448f0aacd8d0808895bdc4b2c8e01a8d67646e4188f887375398c761f340fd", size = 186402 } +sdist = { url = "https://files.pythonhosted.org/packages/40/71/d89bb0e71b1415453980fd32315f2a037aad9f7f70f695c7cec7035feb13/license_expression-30.4.4.tar.gz", hash = "sha256:73448f0aacd8d0808895bdc4b2c8e01a8d67646e4188f887375398c761f340fd", size = 186402, upload_time = "2025-07-22T11:13:32.17Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/af/40/791891d4c0c4dab4c5e187c17261cedc26285fd41541577f900470a45a4d/license_expression-30.4.4-py3-none-any.whl", hash = "sha256:421788fdcadb41f049d2dc934ce666626265aeccefddd25e162a26f23bcbf8a4", size = 120615 }, + { url = "https://files.pythonhosted.org/packages/af/40/791891d4c0c4dab4c5e187c17261cedc26285fd41541577f900470a45a4d/license_expression-30.4.4-py3-none-any.whl", hash = "sha256:421788fdcadb41f049d2dc934ce666626265aeccefddd25e162a26f23bcbf8a4", size = 120615, upload_time = "2025-07-22T11:13:31.217Z" }, ] [[package]] @@ -1090,98 +1113,98 @@ dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, { name = "win32-setctime", marker = "sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/3a/05/a1dae3dffd1116099471c643b8924f5aa6524411dc6c63fdae648c4f1aca/loguru-0.7.3.tar.gz", hash = "sha256:19480589e77d47b8d85b2c827ad95d49bf31b0dcde16593892eb51dd18706eb6", size = 63559 } +sdist = { url = "https://files.pythonhosted.org/packages/3a/05/a1dae3dffd1116099471c643b8924f5aa6524411dc6c63fdae648c4f1aca/loguru-0.7.3.tar.gz", hash = "sha256:19480589e77d47b8d85b2c827ad95d49bf31b0dcde16593892eb51dd18706eb6", size = 63559, upload_time = "2024-12-06T11:20:56.608Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl", hash = "sha256:31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c", size = 61595 }, + { url = "https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl", hash = "sha256:31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c", size = 61595, upload_time = "2024-12-06T11:20:54.538Z" }, ] [[package]] name = "lxml" version = "6.0.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/aa/88/262177de60548e5a2bfc46ad28232c9e9cbde697bd94132aeb80364675cb/lxml-6.0.2.tar.gz", hash = "sha256:cd79f3367bd74b317dda655dc8fcfa304d9eb6e4fb06b7168c5cf27f96e0cd62", size = 4073426 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f3/c8/8ff2bc6b920c84355146cd1ab7d181bc543b89241cfb1ebee824a7c81457/lxml-6.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:a59f5448ba2ceccd06995c95ea59a7674a10de0810f2ce90c9006f3cbc044456", size = 8661887 }, - { url = "https://files.pythonhosted.org/packages/37/6f/9aae1008083bb501ef63284220ce81638332f9ccbfa53765b2b7502203cf/lxml-6.0.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e8113639f3296706fbac34a30813929e29247718e88173ad849f57ca59754924", size = 4667818 }, - { url = "https://files.pythonhosted.org/packages/f1/ca/31fb37f99f37f1536c133476674c10b577e409c0a624384147653e38baf2/lxml-6.0.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:a8bef9b9825fa8bc816a6e641bb67219489229ebc648be422af695f6e7a4fa7f", size = 4950807 }, - { url = "https://files.pythonhosted.org/packages/da/87/f6cb9442e4bada8aab5ae7e1046264f62fdbeaa6e3f6211b93f4c0dd97f1/lxml-6.0.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:65ea18d710fd14e0186c2f973dc60bb52039a275f82d3c44a0e42b43440ea534", size = 5109179 }, - { url = "https://files.pythonhosted.org/packages/c8/20/a7760713e65888db79bbae4f6146a6ae5c04e4a204a3c48896c408cd6ed2/lxml-6.0.2-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c371aa98126a0d4c739ca93ceffa0fd7a5d732e3ac66a46e74339acd4d334564", size = 5023044 }, - { url = "https://files.pythonhosted.org/packages/a2/b0/7e64e0460fcb36471899f75831509098f3fd7cd02a3833ac517433cb4f8f/lxml-6.0.2-cp312-cp312-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:700efd30c0fa1a3581d80a748157397559396090a51d306ea59a70020223d16f", size = 5359685 }, - { url = "https://files.pythonhosted.org/packages/b9/e1/e5df362e9ca4e2f48ed6411bd4b3a0ae737cc842e96877f5bf9428055ab4/lxml-6.0.2-cp312-cp312-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c33e66d44fe60e72397b487ee92e01da0d09ba2d66df8eae42d77b6d06e5eba0", size = 5654127 }, - { url = "https://files.pythonhosted.org/packages/c6/d1/232b3309a02d60f11e71857778bfcd4acbdb86c07db8260caf7d008b08f8/lxml-6.0.2-cp312-cp312-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:90a345bbeaf9d0587a3aaffb7006aa39ccb6ff0e96a57286c0cb2fd1520ea192", size = 5253958 }, - { url = "https://files.pythonhosted.org/packages/35/35/d955a070994725c4f7d80583a96cab9c107c57a125b20bb5f708fe941011/lxml-6.0.2-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:064fdadaf7a21af3ed1dcaa106b854077fbeada827c18f72aec9346847cd65d0", size = 4711541 }, - { url = "https://files.pythonhosted.org/packages/1e/be/667d17363b38a78c4bd63cfd4b4632029fd68d2c2dc81f25ce9eb5224dd5/lxml-6.0.2-cp312-cp312-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fbc74f42c3525ac4ffa4b89cbdd00057b6196bcefe8bce794abd42d33a018092", size = 5267426 }, - { url = "https://files.pythonhosted.org/packages/ea/47/62c70aa4a1c26569bc958c9ca86af2bb4e1f614e8c04fb2989833874f7ae/lxml-6.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6ddff43f702905a4e32bc24f3f2e2edfe0f8fde3277d481bffb709a4cced7a1f", size = 5064917 }, - { url = "https://files.pythonhosted.org/packages/bd/55/6ceddaca353ebd0f1908ef712c597f8570cc9c58130dbb89903198e441fd/lxml-6.0.2-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:6da5185951d72e6f5352166e3da7b0dc27aa70bd1090b0eb3f7f7212b53f1bb8", size = 4788795 }, - { url = "https://files.pythonhosted.org/packages/cf/e8/fd63e15da5e3fd4c2146f8bbb3c14e94ab850589beab88e547b2dbce22e1/lxml-6.0.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:57a86e1ebb4020a38d295c04fc79603c7899e0df71588043eb218722dabc087f", size = 5676759 }, - { url = "https://files.pythonhosted.org/packages/76/47/b3ec58dc5c374697f5ba37412cd2728f427d056315d124dd4b61da381877/lxml-6.0.2-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:2047d8234fe735ab77802ce5f2297e410ff40f5238aec569ad7c8e163d7b19a6", size = 5255666 }, - { url = "https://files.pythonhosted.org/packages/19/93/03ba725df4c3d72afd9596eef4a37a837ce8e4806010569bedfcd2cb68fd/lxml-6.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6f91fd2b2ea15a6800c8e24418c0775a1694eefc011392da73bc6cef2623b322", size = 5277989 }, - { url = "https://files.pythonhosted.org/packages/c6/80/c06de80bfce881d0ad738576f243911fccf992687ae09fd80b734712b39c/lxml-6.0.2-cp312-cp312-win32.whl", hash = "sha256:3ae2ce7d6fedfb3414a2b6c5e20b249c4c607f72cb8d2bb7cc9c6ec7c6f4e849", size = 3611456 }, - { url = "https://files.pythonhosted.org/packages/f7/d7/0cdfb6c3e30893463fb3d1e52bc5f5f99684a03c29a0b6b605cfae879cd5/lxml-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:72c87e5ee4e58a8354fb9c7c84cbf95a1c8236c127a5d1b7683f04bed8361e1f", size = 4011793 }, - { url = "https://files.pythonhosted.org/packages/ea/7b/93c73c67db235931527301ed3785f849c78991e2e34f3fd9a6663ffda4c5/lxml-6.0.2-cp312-cp312-win_arm64.whl", hash = "sha256:61cb10eeb95570153e0c0e554f58df92ecf5109f75eacad4a95baa709e26c3d6", size = 3672836 }, - { url = "https://files.pythonhosted.org/packages/53/fd/4e8f0540608977aea078bf6d79f128e0e2c2bba8af1acf775c30baa70460/lxml-6.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:9b33d21594afab46f37ae58dfadd06636f154923c4e8a4d754b0127554eb2e77", size = 8648494 }, - { url = "https://files.pythonhosted.org/packages/5d/f4/2a94a3d3dfd6c6b433501b8d470a1960a20ecce93245cf2db1706adf6c19/lxml-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:6c8963287d7a4c5c9a432ff487c52e9c5618667179c18a204bdedb27310f022f", size = 4661146 }, - { url = "https://files.pythonhosted.org/packages/25/2e/4efa677fa6b322013035d38016f6ae859d06cac67437ca7dc708a6af7028/lxml-6.0.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1941354d92699fb5ffe6ed7b32f9649e43c2feb4b97205f75866f7d21aa91452", size = 4946932 }, - { url = "https://files.pythonhosted.org/packages/ce/0f/526e78a6d38d109fdbaa5049c62e1d32fdd70c75fb61c4eadf3045d3d124/lxml-6.0.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bb2f6ca0ae2d983ded09357b84af659c954722bbf04dea98030064996d156048", size = 5100060 }, - { url = "https://files.pythonhosted.org/packages/81/76/99de58d81fa702cc0ea7edae4f4640416c2062813a00ff24bd70ac1d9c9b/lxml-6.0.2-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eb2a12d704f180a902d7fa778c6d71f36ceb7b0d317f34cdc76a5d05aa1dd1df", size = 5019000 }, - { url = "https://files.pythonhosted.org/packages/b5/35/9e57d25482bc9a9882cb0037fdb9cc18f4b79d85df94fa9d2a89562f1d25/lxml-6.0.2-cp313-cp313-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:6ec0e3f745021bfed19c456647f0298d60a24c9ff86d9d051f52b509663feeb1", size = 5348496 }, - { url = "https://files.pythonhosted.org/packages/a6/8e/cb99bd0b83ccc3e8f0f528e9aa1f7a9965dfec08c617070c5db8d63a87ce/lxml-6.0.2-cp313-cp313-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:846ae9a12d54e368933b9759052d6206a9e8b250291109c48e350c1f1f49d916", size = 5643779 }, - { url = "https://files.pythonhosted.org/packages/d0/34/9e591954939276bb679b73773836c6684c22e56d05980e31d52a9a8deb18/lxml-6.0.2-cp313-cp313-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ef9266d2aa545d7374938fb5c484531ef5a2ec7f2d573e62f8ce722c735685fd", size = 5244072 }, - { url = "https://files.pythonhosted.org/packages/8d/27/b29ff065f9aaca443ee377aff699714fcbffb371b4fce5ac4ca759e436d5/lxml-6.0.2-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:4077b7c79f31755df33b795dc12119cb557a0106bfdab0d2c2d97bd3cf3dffa6", size = 4718675 }, - { url = "https://files.pythonhosted.org/packages/2b/9f/f756f9c2cd27caa1a6ef8c32ae47aadea697f5c2c6d07b0dae133c244fbe/lxml-6.0.2-cp313-cp313-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a7c5d5e5f1081955358533be077166ee97ed2571d6a66bdba6ec2f609a715d1a", size = 5255171 }, - { url = "https://files.pythonhosted.org/packages/61/46/bb85ea42d2cb1bd8395484fd72f38e3389611aa496ac7772da9205bbda0e/lxml-6.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:8f8d0cbd0674ee89863a523e6994ac25fd5be9c8486acfc3e5ccea679bad2679", size = 5057175 }, - { url = "https://files.pythonhosted.org/packages/95/0c/443fc476dcc8e41577f0af70458c50fe299a97bb6b7505bb1ae09aa7f9ac/lxml-6.0.2-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:2cbcbf6d6e924c28f04a43f3b6f6e272312a090f269eff68a2982e13e5d57659", size = 4785688 }, - { url = "https://files.pythonhosted.org/packages/48/78/6ef0b359d45bb9697bc5a626e1992fa5d27aa3f8004b137b2314793b50a0/lxml-6.0.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:dfb874cfa53340009af6bdd7e54ebc0d21012a60a4e65d927c2e477112e63484", size = 5660655 }, - { url = "https://files.pythonhosted.org/packages/ff/ea/e1d33808f386bc1339d08c0dcada6e4712d4ed8e93fcad5f057070b7988a/lxml-6.0.2-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:fb8dae0b6b8b7f9e96c26fdd8121522ce5de9bb5538010870bd538683d30e9a2", size = 5247695 }, - { url = "https://files.pythonhosted.org/packages/4f/47/eba75dfd8183673725255247a603b4ad606f4ae657b60c6c145b381697da/lxml-6.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:358d9adae670b63e95bc59747c72f4dc97c9ec58881d4627fe0120da0f90d314", size = 5269841 }, - { url = "https://files.pythonhosted.org/packages/76/04/5c5e2b8577bc936e219becb2e98cdb1aca14a4921a12995b9d0c523502ae/lxml-6.0.2-cp313-cp313-win32.whl", hash = "sha256:e8cd2415f372e7e5a789d743d133ae474290a90b9023197fd78f32e2dc6873e2", size = 3610700 }, - { url = "https://files.pythonhosted.org/packages/fe/0a/4643ccc6bb8b143e9f9640aa54e38255f9d3b45feb2cbe7ae2ca47e8782e/lxml-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:b30d46379644fbfc3ab81f8f82ae4de55179414651f110a1514f0b1f8f6cb2d7", size = 4010347 }, - { url = "https://files.pythonhosted.org/packages/31/ef/dcf1d29c3f530577f61e5fe2f1bd72929acf779953668a8a47a479ae6f26/lxml-6.0.2-cp313-cp313-win_arm64.whl", hash = "sha256:13dcecc9946dca97b11b7c40d29fba63b55ab4170d3c0cf8c0c164343b9bfdcf", size = 3671248 }, - { url = "https://files.pythonhosted.org/packages/03/15/d4a377b385ab693ce97b472fe0c77c2b16ec79590e688b3ccc71fba19884/lxml-6.0.2-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:b0c732aa23de8f8aec23f4b580d1e52905ef468afb4abeafd3fec77042abb6fe", size = 8659801 }, - { url = "https://files.pythonhosted.org/packages/c8/e8/c128e37589463668794d503afaeb003987373c5f94d667124ffd8078bbd9/lxml-6.0.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:4468e3b83e10e0317a89a33d28f7aeba1caa4d1a6fd457d115dd4ffe90c5931d", size = 4659403 }, - { url = "https://files.pythonhosted.org/packages/00/ce/74903904339decdf7da7847bb5741fc98a5451b42fc419a86c0c13d26fe2/lxml-6.0.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:abd44571493973bad4598a3be7e1d807ed45aa2adaf7ab92ab7c62609569b17d", size = 4966974 }, - { url = "https://files.pythonhosted.org/packages/1f/d3/131dec79ce61c5567fecf82515bd9bc36395df42501b50f7f7f3bd065df0/lxml-6.0.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:370cd78d5855cfbffd57c422851f7d3864e6ae72d0da615fca4dad8c45d375a5", size = 5102953 }, - { url = "https://files.pythonhosted.org/packages/3a/ea/a43ba9bb750d4ffdd885f2cd333572f5bb900cd2408b67fdda07e85978a0/lxml-6.0.2-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:901e3b4219fa04ef766885fb40fa516a71662a4c61b80c94d25336b4934b71c0", size = 5055054 }, - { url = "https://files.pythonhosted.org/packages/60/23/6885b451636ae286c34628f70a7ed1fcc759f8d9ad382d132e1c8d3d9bfd/lxml-6.0.2-cp314-cp314-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:a4bf42d2e4cf52c28cc1812d62426b9503cdb0c87a6de81442626aa7d69707ba", size = 5352421 }, - { url = "https://files.pythonhosted.org/packages/48/5b/fc2ddfc94ddbe3eebb8e9af6e3fd65e2feba4967f6a4e9683875c394c2d8/lxml-6.0.2-cp314-cp314-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b2c7fdaa4d7c3d886a42534adec7cfac73860b89b4e5298752f60aa5984641a0", size = 5673684 }, - { url = "https://files.pythonhosted.org/packages/29/9c/47293c58cc91769130fbf85531280e8cc7868f7fbb6d92f4670071b9cb3e/lxml-6.0.2-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:98a5e1660dc7de2200b00d53fa00bcd3c35a3608c305d45a7bbcaf29fa16e83d", size = 5252463 }, - { url = "https://files.pythonhosted.org/packages/9b/da/ba6eceb830c762b48e711ded880d7e3e89fc6c7323e587c36540b6b23c6b/lxml-6.0.2-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:dc051506c30b609238d79eda75ee9cab3e520570ec8219844a72a46020901e37", size = 4698437 }, - { url = "https://files.pythonhosted.org/packages/a5/24/7be3f82cb7990b89118d944b619e53c656c97dc89c28cfb143fdb7cd6f4d/lxml-6.0.2-cp314-cp314-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:8799481bbdd212470d17513a54d568f44416db01250f49449647b5ab5b5dccb9", size = 5269890 }, - { url = "https://files.pythonhosted.org/packages/1b/bd/dcfb9ea1e16c665efd7538fc5d5c34071276ce9220e234217682e7d2c4a5/lxml-6.0.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:9261bb77c2dab42f3ecd9103951aeca2c40277701eb7e912c545c1b16e0e4917", size = 5097185 }, - { url = "https://files.pythonhosted.org/packages/21/04/a60b0ff9314736316f28316b694bccbbabe100f8483ad83852d77fc7468e/lxml-6.0.2-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:65ac4a01aba353cfa6d5725b95d7aed6356ddc0a3cd734de00124d285b04b64f", size = 4745895 }, - { url = "https://files.pythonhosted.org/packages/d6/bd/7d54bd1846e5a310d9c715921c5faa71cf5c0853372adf78aee70c8d7aa2/lxml-6.0.2-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:b22a07cbb82fea98f8a2fd814f3d1811ff9ed76d0fc6abc84eb21527596e7cc8", size = 5695246 }, - { url = "https://files.pythonhosted.org/packages/fd/32/5643d6ab947bc371da21323acb2a6e603cedbe71cb4c99c8254289ab6f4e/lxml-6.0.2-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:d759cdd7f3e055d6bc8d9bec3ad905227b2e4c785dc16c372eb5b5e83123f48a", size = 5260797 }, - { url = "https://files.pythonhosted.org/packages/33/da/34c1ec4cff1eea7d0b4cd44af8411806ed943141804ac9c5d565302afb78/lxml-6.0.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:945da35a48d193d27c188037a05fec5492937f66fb1958c24fc761fb9d40d43c", size = 5277404 }, - { url = "https://files.pythonhosted.org/packages/82/57/4eca3e31e54dc89e2c3507e1cd411074a17565fa5ffc437c4ae0a00d439e/lxml-6.0.2-cp314-cp314-win32.whl", hash = "sha256:be3aaa60da67e6153eb15715cc2e19091af5dc75faef8b8a585aea372507384b", size = 3670072 }, - { url = "https://files.pythonhosted.org/packages/e3/e0/c96cf13eccd20c9421ba910304dae0f619724dcf1702864fd59dd386404d/lxml-6.0.2-cp314-cp314-win_amd64.whl", hash = "sha256:fa25afbadead523f7001caf0c2382afd272c315a033a7b06336da2637d92d6ed", size = 4080617 }, - { url = "https://files.pythonhosted.org/packages/d5/5d/b3f03e22b3d38d6f188ef044900a9b29b2fe0aebb94625ce9fe244011d34/lxml-6.0.2-cp314-cp314-win_arm64.whl", hash = "sha256:063eccf89df5b24e361b123e257e437f9e9878f425ee9aae3144c77faf6da6d8", size = 3754930 }, - { url = "https://files.pythonhosted.org/packages/5e/5c/42c2c4c03554580708fc738d13414801f340c04c3eff90d8d2d227145275/lxml-6.0.2-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:6162a86d86893d63084faaf4ff937b3daea233e3682fb4474db07395794fa80d", size = 8910380 }, - { url = "https://files.pythonhosted.org/packages/bf/4f/12df843e3e10d18d468a7557058f8d3733e8b6e12401f30b1ef29360740f/lxml-6.0.2-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:414aaa94e974e23a3e92e7ca5b97d10c0cf37b6481f50911032c69eeb3991bba", size = 4775632 }, - { url = "https://files.pythonhosted.org/packages/e4/0c/9dc31e6c2d0d418483cbcb469d1f5a582a1cd00a1f4081953d44051f3c50/lxml-6.0.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:48461bd21625458dd01e14e2c38dd0aea69addc3c4f960c30d9f59d7f93be601", size = 4975171 }, - { url = "https://files.pythonhosted.org/packages/e7/2b/9b870c6ca24c841bdd887504808f0417aa9d8d564114689266f19ddf29c8/lxml-6.0.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:25fcc59afc57d527cfc78a58f40ab4c9b8fd096a9a3f964d2781ffb6eb33f4ed", size = 5110109 }, - { url = "https://files.pythonhosted.org/packages/bf/0c/4f5f2a4dd319a178912751564471355d9019e220c20d7db3fb8307ed8582/lxml-6.0.2-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5179c60288204e6ddde3f774a93350177e08876eaf3ab78aa3a3649d43eb7d37", size = 5041061 }, - { url = "https://files.pythonhosted.org/packages/12/64/554eed290365267671fe001a20d72d14f468ae4e6acef1e179b039436967/lxml-6.0.2-cp314-cp314t-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:967aab75434de148ec80597b75062d8123cadf2943fb4281f385141e18b21338", size = 5306233 }, - { url = "https://files.pythonhosted.org/packages/7a/31/1d748aa275e71802ad9722df32a7a35034246b42c0ecdd8235412c3396ef/lxml-6.0.2-cp314-cp314t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d100fcc8930d697c6561156c6810ab4a508fb264c8b6779e6e61e2ed5e7558f9", size = 5604739 }, - { url = "https://files.pythonhosted.org/packages/8f/41/2c11916bcac09ed561adccacceaedd2bf0e0b25b297ea92aab99fd03d0fa/lxml-6.0.2-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ca59e7e13e5981175b8b3e4ab84d7da57993eeff53c07764dcebda0d0e64ecd", size = 5225119 }, - { url = "https://files.pythonhosted.org/packages/99/05/4e5c2873d8f17aa018e6afde417c80cc5d0c33be4854cce3ef5670c49367/lxml-6.0.2-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:957448ac63a42e2e49531b9d6c0fa449a1970dbc32467aaad46f11545be9af1d", size = 4633665 }, - { url = "https://files.pythonhosted.org/packages/0f/c9/dcc2da1bebd6275cdc723b515f93edf548b82f36a5458cca3578bc899332/lxml-6.0.2-cp314-cp314t-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b7fc49c37f1786284b12af63152fe1d0990722497e2d5817acfe7a877522f9a9", size = 5234997 }, - { url = "https://files.pythonhosted.org/packages/9c/e2/5172e4e7468afca64a37b81dba152fc5d90e30f9c83c7c3213d6a02a5ce4/lxml-6.0.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e19e0643cc936a22e837f79d01a550678da8377d7d801a14487c10c34ee49c7e", size = 5090957 }, - { url = "https://files.pythonhosted.org/packages/a5/b3/15461fd3e5cd4ddcb7938b87fc20b14ab113b92312fc97afe65cd7c85de1/lxml-6.0.2-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:1db01e5cf14345628e0cbe71067204db658e2fb8e51e7f33631f5f4735fefd8d", size = 4764372 }, - { url = "https://files.pythonhosted.org/packages/05/33/f310b987c8bf9e61c4dd8e8035c416bd3230098f5e3cfa69fc4232de7059/lxml-6.0.2-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:875c6b5ab39ad5291588aed6925fac99d0097af0dd62f33c7b43736043d4a2ec", size = 5634653 }, - { url = "https://files.pythonhosted.org/packages/70/ff/51c80e75e0bc9382158133bdcf4e339b5886c6ee2418b5199b3f1a61ed6d/lxml-6.0.2-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:cdcbed9ad19da81c480dfd6dd161886db6096083c9938ead313d94b30aadf272", size = 5233795 }, - { url = "https://files.pythonhosted.org/packages/56/4d/4856e897df0d588789dd844dbed9d91782c4ef0b327f96ce53c807e13128/lxml-6.0.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:80dadc234ebc532e09be1975ff538d154a7fa61ea5031c03d25178855544728f", size = 5257023 }, - { url = "https://files.pythonhosted.org/packages/0f/85/86766dfebfa87bea0ab78e9ff7a4b4b45225df4b4d3b8cc3c03c5cd68464/lxml-6.0.2-cp314-cp314t-win32.whl", hash = "sha256:da08e7bb297b04e893d91087df19638dc7a6bb858a954b0cc2b9f5053c922312", size = 3911420 }, - { url = "https://files.pythonhosted.org/packages/fe/1a/b248b355834c8e32614650b8008c69ffeb0ceb149c793961dd8c0b991bb3/lxml-6.0.2-cp314-cp314t-win_amd64.whl", hash = "sha256:252a22982dca42f6155125ac76d3432e548a7625d56f5a273ee78a5057216eca", size = 4406837 }, - { url = "https://files.pythonhosted.org/packages/92/aa/df863bcc39c5e0946263454aba394de8a9084dbaff8ad143846b0d844739/lxml-6.0.2-cp314-cp314t-win_arm64.whl", hash = "sha256:bb4c1847b303835d89d785a18801a883436cdfd5dc3d62947f9c49e24f0f5a2c", size = 3822205 }, +sdist = { url = "https://files.pythonhosted.org/packages/aa/88/262177de60548e5a2bfc46ad28232c9e9cbde697bd94132aeb80364675cb/lxml-6.0.2.tar.gz", hash = "sha256:cd79f3367bd74b317dda655dc8fcfa304d9eb6e4fb06b7168c5cf27f96e0cd62", size = 4073426, upload_time = "2025-09-22T04:04:59.287Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f3/c8/8ff2bc6b920c84355146cd1ab7d181bc543b89241cfb1ebee824a7c81457/lxml-6.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:a59f5448ba2ceccd06995c95ea59a7674a10de0810f2ce90c9006f3cbc044456", size = 8661887, upload_time = "2025-09-22T04:01:17.265Z" }, + { url = "https://files.pythonhosted.org/packages/37/6f/9aae1008083bb501ef63284220ce81638332f9ccbfa53765b2b7502203cf/lxml-6.0.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e8113639f3296706fbac34a30813929e29247718e88173ad849f57ca59754924", size = 4667818, upload_time = "2025-09-22T04:01:19.688Z" }, + { url = "https://files.pythonhosted.org/packages/f1/ca/31fb37f99f37f1536c133476674c10b577e409c0a624384147653e38baf2/lxml-6.0.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:a8bef9b9825fa8bc816a6e641bb67219489229ebc648be422af695f6e7a4fa7f", size = 4950807, upload_time = "2025-09-22T04:01:21.487Z" }, + { url = "https://files.pythonhosted.org/packages/da/87/f6cb9442e4bada8aab5ae7e1046264f62fdbeaa6e3f6211b93f4c0dd97f1/lxml-6.0.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:65ea18d710fd14e0186c2f973dc60bb52039a275f82d3c44a0e42b43440ea534", size = 5109179, upload_time = "2025-09-22T04:01:23.32Z" }, + { url = "https://files.pythonhosted.org/packages/c8/20/a7760713e65888db79bbae4f6146a6ae5c04e4a204a3c48896c408cd6ed2/lxml-6.0.2-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c371aa98126a0d4c739ca93ceffa0fd7a5d732e3ac66a46e74339acd4d334564", size = 5023044, upload_time = "2025-09-22T04:01:25.118Z" }, + { url = "https://files.pythonhosted.org/packages/a2/b0/7e64e0460fcb36471899f75831509098f3fd7cd02a3833ac517433cb4f8f/lxml-6.0.2-cp312-cp312-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:700efd30c0fa1a3581d80a748157397559396090a51d306ea59a70020223d16f", size = 5359685, upload_time = "2025-09-22T04:01:27.398Z" }, + { url = "https://files.pythonhosted.org/packages/b9/e1/e5df362e9ca4e2f48ed6411bd4b3a0ae737cc842e96877f5bf9428055ab4/lxml-6.0.2-cp312-cp312-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c33e66d44fe60e72397b487ee92e01da0d09ba2d66df8eae42d77b6d06e5eba0", size = 5654127, upload_time = "2025-09-22T04:01:29.629Z" }, + { url = "https://files.pythonhosted.org/packages/c6/d1/232b3309a02d60f11e71857778bfcd4acbdb86c07db8260caf7d008b08f8/lxml-6.0.2-cp312-cp312-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:90a345bbeaf9d0587a3aaffb7006aa39ccb6ff0e96a57286c0cb2fd1520ea192", size = 5253958, upload_time = "2025-09-22T04:01:31.535Z" }, + { url = "https://files.pythonhosted.org/packages/35/35/d955a070994725c4f7d80583a96cab9c107c57a125b20bb5f708fe941011/lxml-6.0.2-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:064fdadaf7a21af3ed1dcaa106b854077fbeada827c18f72aec9346847cd65d0", size = 4711541, upload_time = "2025-09-22T04:01:33.801Z" }, + { url = "https://files.pythonhosted.org/packages/1e/be/667d17363b38a78c4bd63cfd4b4632029fd68d2c2dc81f25ce9eb5224dd5/lxml-6.0.2-cp312-cp312-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fbc74f42c3525ac4ffa4b89cbdd00057b6196bcefe8bce794abd42d33a018092", size = 5267426, upload_time = "2025-09-22T04:01:35.639Z" }, + { url = "https://files.pythonhosted.org/packages/ea/47/62c70aa4a1c26569bc958c9ca86af2bb4e1f614e8c04fb2989833874f7ae/lxml-6.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6ddff43f702905a4e32bc24f3f2e2edfe0f8fde3277d481bffb709a4cced7a1f", size = 5064917, upload_time = "2025-09-22T04:01:37.448Z" }, + { url = "https://files.pythonhosted.org/packages/bd/55/6ceddaca353ebd0f1908ef712c597f8570cc9c58130dbb89903198e441fd/lxml-6.0.2-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:6da5185951d72e6f5352166e3da7b0dc27aa70bd1090b0eb3f7f7212b53f1bb8", size = 4788795, upload_time = "2025-09-22T04:01:39.165Z" }, + { url = "https://files.pythonhosted.org/packages/cf/e8/fd63e15da5e3fd4c2146f8bbb3c14e94ab850589beab88e547b2dbce22e1/lxml-6.0.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:57a86e1ebb4020a38d295c04fc79603c7899e0df71588043eb218722dabc087f", size = 5676759, upload_time = "2025-09-22T04:01:41.506Z" }, + { url = "https://files.pythonhosted.org/packages/76/47/b3ec58dc5c374697f5ba37412cd2728f427d056315d124dd4b61da381877/lxml-6.0.2-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:2047d8234fe735ab77802ce5f2297e410ff40f5238aec569ad7c8e163d7b19a6", size = 5255666, upload_time = "2025-09-22T04:01:43.363Z" }, + { url = "https://files.pythonhosted.org/packages/19/93/03ba725df4c3d72afd9596eef4a37a837ce8e4806010569bedfcd2cb68fd/lxml-6.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6f91fd2b2ea15a6800c8e24418c0775a1694eefc011392da73bc6cef2623b322", size = 5277989, upload_time = "2025-09-22T04:01:45.215Z" }, + { url = "https://files.pythonhosted.org/packages/c6/80/c06de80bfce881d0ad738576f243911fccf992687ae09fd80b734712b39c/lxml-6.0.2-cp312-cp312-win32.whl", hash = "sha256:3ae2ce7d6fedfb3414a2b6c5e20b249c4c607f72cb8d2bb7cc9c6ec7c6f4e849", size = 3611456, upload_time = "2025-09-22T04:01:48.243Z" }, + { url = "https://files.pythonhosted.org/packages/f7/d7/0cdfb6c3e30893463fb3d1e52bc5f5f99684a03c29a0b6b605cfae879cd5/lxml-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:72c87e5ee4e58a8354fb9c7c84cbf95a1c8236c127a5d1b7683f04bed8361e1f", size = 4011793, upload_time = "2025-09-22T04:01:50.042Z" }, + { url = "https://files.pythonhosted.org/packages/ea/7b/93c73c67db235931527301ed3785f849c78991e2e34f3fd9a6663ffda4c5/lxml-6.0.2-cp312-cp312-win_arm64.whl", hash = "sha256:61cb10eeb95570153e0c0e554f58df92ecf5109f75eacad4a95baa709e26c3d6", size = 3672836, upload_time = "2025-09-22T04:01:52.145Z" }, + { url = "https://files.pythonhosted.org/packages/53/fd/4e8f0540608977aea078bf6d79f128e0e2c2bba8af1acf775c30baa70460/lxml-6.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:9b33d21594afab46f37ae58dfadd06636f154923c4e8a4d754b0127554eb2e77", size = 8648494, upload_time = "2025-09-22T04:01:54.242Z" }, + { url = "https://files.pythonhosted.org/packages/5d/f4/2a94a3d3dfd6c6b433501b8d470a1960a20ecce93245cf2db1706adf6c19/lxml-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:6c8963287d7a4c5c9a432ff487c52e9c5618667179c18a204bdedb27310f022f", size = 4661146, upload_time = "2025-09-22T04:01:56.282Z" }, + { url = "https://files.pythonhosted.org/packages/25/2e/4efa677fa6b322013035d38016f6ae859d06cac67437ca7dc708a6af7028/lxml-6.0.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1941354d92699fb5ffe6ed7b32f9649e43c2feb4b97205f75866f7d21aa91452", size = 4946932, upload_time = "2025-09-22T04:01:58.989Z" }, + { url = "https://files.pythonhosted.org/packages/ce/0f/526e78a6d38d109fdbaa5049c62e1d32fdd70c75fb61c4eadf3045d3d124/lxml-6.0.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bb2f6ca0ae2d983ded09357b84af659c954722bbf04dea98030064996d156048", size = 5100060, upload_time = "2025-09-22T04:02:00.812Z" }, + { url = "https://files.pythonhosted.org/packages/81/76/99de58d81fa702cc0ea7edae4f4640416c2062813a00ff24bd70ac1d9c9b/lxml-6.0.2-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eb2a12d704f180a902d7fa778c6d71f36ceb7b0d317f34cdc76a5d05aa1dd1df", size = 5019000, upload_time = "2025-09-22T04:02:02.671Z" }, + { url = "https://files.pythonhosted.org/packages/b5/35/9e57d25482bc9a9882cb0037fdb9cc18f4b79d85df94fa9d2a89562f1d25/lxml-6.0.2-cp313-cp313-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:6ec0e3f745021bfed19c456647f0298d60a24c9ff86d9d051f52b509663feeb1", size = 5348496, upload_time = "2025-09-22T04:02:04.904Z" }, + { url = "https://files.pythonhosted.org/packages/a6/8e/cb99bd0b83ccc3e8f0f528e9aa1f7a9965dfec08c617070c5db8d63a87ce/lxml-6.0.2-cp313-cp313-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:846ae9a12d54e368933b9759052d6206a9e8b250291109c48e350c1f1f49d916", size = 5643779, upload_time = "2025-09-22T04:02:06.689Z" }, + { url = "https://files.pythonhosted.org/packages/d0/34/9e591954939276bb679b73773836c6684c22e56d05980e31d52a9a8deb18/lxml-6.0.2-cp313-cp313-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ef9266d2aa545d7374938fb5c484531ef5a2ec7f2d573e62f8ce722c735685fd", size = 5244072, upload_time = "2025-09-22T04:02:08.587Z" }, + { url = "https://files.pythonhosted.org/packages/8d/27/b29ff065f9aaca443ee377aff699714fcbffb371b4fce5ac4ca759e436d5/lxml-6.0.2-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:4077b7c79f31755df33b795dc12119cb557a0106bfdab0d2c2d97bd3cf3dffa6", size = 4718675, upload_time = "2025-09-22T04:02:10.783Z" }, + { url = "https://files.pythonhosted.org/packages/2b/9f/f756f9c2cd27caa1a6ef8c32ae47aadea697f5c2c6d07b0dae133c244fbe/lxml-6.0.2-cp313-cp313-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a7c5d5e5f1081955358533be077166ee97ed2571d6a66bdba6ec2f609a715d1a", size = 5255171, upload_time = "2025-09-22T04:02:12.631Z" }, + { url = "https://files.pythonhosted.org/packages/61/46/bb85ea42d2cb1bd8395484fd72f38e3389611aa496ac7772da9205bbda0e/lxml-6.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:8f8d0cbd0674ee89863a523e6994ac25fd5be9c8486acfc3e5ccea679bad2679", size = 5057175, upload_time = "2025-09-22T04:02:14.718Z" }, + { url = "https://files.pythonhosted.org/packages/95/0c/443fc476dcc8e41577f0af70458c50fe299a97bb6b7505bb1ae09aa7f9ac/lxml-6.0.2-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:2cbcbf6d6e924c28f04a43f3b6f6e272312a090f269eff68a2982e13e5d57659", size = 4785688, upload_time = "2025-09-22T04:02:16.957Z" }, + { url = "https://files.pythonhosted.org/packages/48/78/6ef0b359d45bb9697bc5a626e1992fa5d27aa3f8004b137b2314793b50a0/lxml-6.0.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:dfb874cfa53340009af6bdd7e54ebc0d21012a60a4e65d927c2e477112e63484", size = 5660655, upload_time = "2025-09-22T04:02:18.815Z" }, + { url = "https://files.pythonhosted.org/packages/ff/ea/e1d33808f386bc1339d08c0dcada6e4712d4ed8e93fcad5f057070b7988a/lxml-6.0.2-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:fb8dae0b6b8b7f9e96c26fdd8121522ce5de9bb5538010870bd538683d30e9a2", size = 5247695, upload_time = "2025-09-22T04:02:20.593Z" }, + { url = "https://files.pythonhosted.org/packages/4f/47/eba75dfd8183673725255247a603b4ad606f4ae657b60c6c145b381697da/lxml-6.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:358d9adae670b63e95bc59747c72f4dc97c9ec58881d4627fe0120da0f90d314", size = 5269841, upload_time = "2025-09-22T04:02:22.489Z" }, + { url = "https://files.pythonhosted.org/packages/76/04/5c5e2b8577bc936e219becb2e98cdb1aca14a4921a12995b9d0c523502ae/lxml-6.0.2-cp313-cp313-win32.whl", hash = "sha256:e8cd2415f372e7e5a789d743d133ae474290a90b9023197fd78f32e2dc6873e2", size = 3610700, upload_time = "2025-09-22T04:02:24.465Z" }, + { url = "https://files.pythonhosted.org/packages/fe/0a/4643ccc6bb8b143e9f9640aa54e38255f9d3b45feb2cbe7ae2ca47e8782e/lxml-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:b30d46379644fbfc3ab81f8f82ae4de55179414651f110a1514f0b1f8f6cb2d7", size = 4010347, upload_time = "2025-09-22T04:02:26.286Z" }, + { url = "https://files.pythonhosted.org/packages/31/ef/dcf1d29c3f530577f61e5fe2f1bd72929acf779953668a8a47a479ae6f26/lxml-6.0.2-cp313-cp313-win_arm64.whl", hash = "sha256:13dcecc9946dca97b11b7c40d29fba63b55ab4170d3c0cf8c0c164343b9bfdcf", size = 3671248, upload_time = "2025-09-22T04:02:27.918Z" }, + { url = "https://files.pythonhosted.org/packages/03/15/d4a377b385ab693ce97b472fe0c77c2b16ec79590e688b3ccc71fba19884/lxml-6.0.2-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:b0c732aa23de8f8aec23f4b580d1e52905ef468afb4abeafd3fec77042abb6fe", size = 8659801, upload_time = "2025-09-22T04:02:30.113Z" }, + { url = "https://files.pythonhosted.org/packages/c8/e8/c128e37589463668794d503afaeb003987373c5f94d667124ffd8078bbd9/lxml-6.0.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:4468e3b83e10e0317a89a33d28f7aeba1caa4d1a6fd457d115dd4ffe90c5931d", size = 4659403, upload_time = "2025-09-22T04:02:32.119Z" }, + { url = "https://files.pythonhosted.org/packages/00/ce/74903904339decdf7da7847bb5741fc98a5451b42fc419a86c0c13d26fe2/lxml-6.0.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:abd44571493973bad4598a3be7e1d807ed45aa2adaf7ab92ab7c62609569b17d", size = 4966974, upload_time = "2025-09-22T04:02:34.155Z" }, + { url = "https://files.pythonhosted.org/packages/1f/d3/131dec79ce61c5567fecf82515bd9bc36395df42501b50f7f7f3bd065df0/lxml-6.0.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:370cd78d5855cfbffd57c422851f7d3864e6ae72d0da615fca4dad8c45d375a5", size = 5102953, upload_time = "2025-09-22T04:02:36.054Z" }, + { url = "https://files.pythonhosted.org/packages/3a/ea/a43ba9bb750d4ffdd885f2cd333572f5bb900cd2408b67fdda07e85978a0/lxml-6.0.2-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:901e3b4219fa04ef766885fb40fa516a71662a4c61b80c94d25336b4934b71c0", size = 5055054, upload_time = "2025-09-22T04:02:38.154Z" }, + { url = "https://files.pythonhosted.org/packages/60/23/6885b451636ae286c34628f70a7ed1fcc759f8d9ad382d132e1c8d3d9bfd/lxml-6.0.2-cp314-cp314-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:a4bf42d2e4cf52c28cc1812d62426b9503cdb0c87a6de81442626aa7d69707ba", size = 5352421, upload_time = "2025-09-22T04:02:40.413Z" }, + { url = "https://files.pythonhosted.org/packages/48/5b/fc2ddfc94ddbe3eebb8e9af6e3fd65e2feba4967f6a4e9683875c394c2d8/lxml-6.0.2-cp314-cp314-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b2c7fdaa4d7c3d886a42534adec7cfac73860b89b4e5298752f60aa5984641a0", size = 5673684, upload_time = "2025-09-22T04:02:42.288Z" }, + { url = "https://files.pythonhosted.org/packages/29/9c/47293c58cc91769130fbf85531280e8cc7868f7fbb6d92f4670071b9cb3e/lxml-6.0.2-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:98a5e1660dc7de2200b00d53fa00bcd3c35a3608c305d45a7bbcaf29fa16e83d", size = 5252463, upload_time = "2025-09-22T04:02:44.165Z" }, + { url = "https://files.pythonhosted.org/packages/9b/da/ba6eceb830c762b48e711ded880d7e3e89fc6c7323e587c36540b6b23c6b/lxml-6.0.2-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:dc051506c30b609238d79eda75ee9cab3e520570ec8219844a72a46020901e37", size = 4698437, upload_time = "2025-09-22T04:02:46.524Z" }, + { url = "https://files.pythonhosted.org/packages/a5/24/7be3f82cb7990b89118d944b619e53c656c97dc89c28cfb143fdb7cd6f4d/lxml-6.0.2-cp314-cp314-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:8799481bbdd212470d17513a54d568f44416db01250f49449647b5ab5b5dccb9", size = 5269890, upload_time = "2025-09-22T04:02:48.812Z" }, + { url = "https://files.pythonhosted.org/packages/1b/bd/dcfb9ea1e16c665efd7538fc5d5c34071276ce9220e234217682e7d2c4a5/lxml-6.0.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:9261bb77c2dab42f3ecd9103951aeca2c40277701eb7e912c545c1b16e0e4917", size = 5097185, upload_time = "2025-09-22T04:02:50.746Z" }, + { url = "https://files.pythonhosted.org/packages/21/04/a60b0ff9314736316f28316b694bccbbabe100f8483ad83852d77fc7468e/lxml-6.0.2-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:65ac4a01aba353cfa6d5725b95d7aed6356ddc0a3cd734de00124d285b04b64f", size = 4745895, upload_time = "2025-09-22T04:02:52.968Z" }, + { url = "https://files.pythonhosted.org/packages/d6/bd/7d54bd1846e5a310d9c715921c5faa71cf5c0853372adf78aee70c8d7aa2/lxml-6.0.2-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:b22a07cbb82fea98f8a2fd814f3d1811ff9ed76d0fc6abc84eb21527596e7cc8", size = 5695246, upload_time = "2025-09-22T04:02:54.798Z" }, + { url = "https://files.pythonhosted.org/packages/fd/32/5643d6ab947bc371da21323acb2a6e603cedbe71cb4c99c8254289ab6f4e/lxml-6.0.2-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:d759cdd7f3e055d6bc8d9bec3ad905227b2e4c785dc16c372eb5b5e83123f48a", size = 5260797, upload_time = "2025-09-22T04:02:57.058Z" }, + { url = "https://files.pythonhosted.org/packages/33/da/34c1ec4cff1eea7d0b4cd44af8411806ed943141804ac9c5d565302afb78/lxml-6.0.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:945da35a48d193d27c188037a05fec5492937f66fb1958c24fc761fb9d40d43c", size = 5277404, upload_time = "2025-09-22T04:02:58.966Z" }, + { url = "https://files.pythonhosted.org/packages/82/57/4eca3e31e54dc89e2c3507e1cd411074a17565fa5ffc437c4ae0a00d439e/lxml-6.0.2-cp314-cp314-win32.whl", hash = "sha256:be3aaa60da67e6153eb15715cc2e19091af5dc75faef8b8a585aea372507384b", size = 3670072, upload_time = "2025-09-22T04:03:38.05Z" }, + { url = "https://files.pythonhosted.org/packages/e3/e0/c96cf13eccd20c9421ba910304dae0f619724dcf1702864fd59dd386404d/lxml-6.0.2-cp314-cp314-win_amd64.whl", hash = "sha256:fa25afbadead523f7001caf0c2382afd272c315a033a7b06336da2637d92d6ed", size = 4080617, upload_time = "2025-09-22T04:03:39.835Z" }, + { url = "https://files.pythonhosted.org/packages/d5/5d/b3f03e22b3d38d6f188ef044900a9b29b2fe0aebb94625ce9fe244011d34/lxml-6.0.2-cp314-cp314-win_arm64.whl", hash = "sha256:063eccf89df5b24e361b123e257e437f9e9878f425ee9aae3144c77faf6da6d8", size = 3754930, upload_time = "2025-09-22T04:03:41.565Z" }, + { url = "https://files.pythonhosted.org/packages/5e/5c/42c2c4c03554580708fc738d13414801f340c04c3eff90d8d2d227145275/lxml-6.0.2-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:6162a86d86893d63084faaf4ff937b3daea233e3682fb4474db07395794fa80d", size = 8910380, upload_time = "2025-09-22T04:03:01.645Z" }, + { url = "https://files.pythonhosted.org/packages/bf/4f/12df843e3e10d18d468a7557058f8d3733e8b6e12401f30b1ef29360740f/lxml-6.0.2-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:414aaa94e974e23a3e92e7ca5b97d10c0cf37b6481f50911032c69eeb3991bba", size = 4775632, upload_time = "2025-09-22T04:03:03.814Z" }, + { url = "https://files.pythonhosted.org/packages/e4/0c/9dc31e6c2d0d418483cbcb469d1f5a582a1cd00a1f4081953d44051f3c50/lxml-6.0.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:48461bd21625458dd01e14e2c38dd0aea69addc3c4f960c30d9f59d7f93be601", size = 4975171, upload_time = "2025-09-22T04:03:05.651Z" }, + { url = "https://files.pythonhosted.org/packages/e7/2b/9b870c6ca24c841bdd887504808f0417aa9d8d564114689266f19ddf29c8/lxml-6.0.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:25fcc59afc57d527cfc78a58f40ab4c9b8fd096a9a3f964d2781ffb6eb33f4ed", size = 5110109, upload_time = "2025-09-22T04:03:07.452Z" }, + { url = "https://files.pythonhosted.org/packages/bf/0c/4f5f2a4dd319a178912751564471355d9019e220c20d7db3fb8307ed8582/lxml-6.0.2-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5179c60288204e6ddde3f774a93350177e08876eaf3ab78aa3a3649d43eb7d37", size = 5041061, upload_time = "2025-09-22T04:03:09.297Z" }, + { url = "https://files.pythonhosted.org/packages/12/64/554eed290365267671fe001a20d72d14f468ae4e6acef1e179b039436967/lxml-6.0.2-cp314-cp314t-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:967aab75434de148ec80597b75062d8123cadf2943fb4281f385141e18b21338", size = 5306233, upload_time = "2025-09-22T04:03:11.651Z" }, + { url = "https://files.pythonhosted.org/packages/7a/31/1d748aa275e71802ad9722df32a7a35034246b42c0ecdd8235412c3396ef/lxml-6.0.2-cp314-cp314t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d100fcc8930d697c6561156c6810ab4a508fb264c8b6779e6e61e2ed5e7558f9", size = 5604739, upload_time = "2025-09-22T04:03:13.592Z" }, + { url = "https://files.pythonhosted.org/packages/8f/41/2c11916bcac09ed561adccacceaedd2bf0e0b25b297ea92aab99fd03d0fa/lxml-6.0.2-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ca59e7e13e5981175b8b3e4ab84d7da57993eeff53c07764dcebda0d0e64ecd", size = 5225119, upload_time = "2025-09-22T04:03:15.408Z" }, + { url = "https://files.pythonhosted.org/packages/99/05/4e5c2873d8f17aa018e6afde417c80cc5d0c33be4854cce3ef5670c49367/lxml-6.0.2-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:957448ac63a42e2e49531b9d6c0fa449a1970dbc32467aaad46f11545be9af1d", size = 4633665, upload_time = "2025-09-22T04:03:17.262Z" }, + { url = "https://files.pythonhosted.org/packages/0f/c9/dcc2da1bebd6275cdc723b515f93edf548b82f36a5458cca3578bc899332/lxml-6.0.2-cp314-cp314t-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b7fc49c37f1786284b12af63152fe1d0990722497e2d5817acfe7a877522f9a9", size = 5234997, upload_time = "2025-09-22T04:03:19.14Z" }, + { url = "https://files.pythonhosted.org/packages/9c/e2/5172e4e7468afca64a37b81dba152fc5d90e30f9c83c7c3213d6a02a5ce4/lxml-6.0.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e19e0643cc936a22e837f79d01a550678da8377d7d801a14487c10c34ee49c7e", size = 5090957, upload_time = "2025-09-22T04:03:21.436Z" }, + { url = "https://files.pythonhosted.org/packages/a5/b3/15461fd3e5cd4ddcb7938b87fc20b14ab113b92312fc97afe65cd7c85de1/lxml-6.0.2-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:1db01e5cf14345628e0cbe71067204db658e2fb8e51e7f33631f5f4735fefd8d", size = 4764372, upload_time = "2025-09-22T04:03:23.27Z" }, + { url = "https://files.pythonhosted.org/packages/05/33/f310b987c8bf9e61c4dd8e8035c416bd3230098f5e3cfa69fc4232de7059/lxml-6.0.2-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:875c6b5ab39ad5291588aed6925fac99d0097af0dd62f33c7b43736043d4a2ec", size = 5634653, upload_time = "2025-09-22T04:03:25.767Z" }, + { url = "https://files.pythonhosted.org/packages/70/ff/51c80e75e0bc9382158133bdcf4e339b5886c6ee2418b5199b3f1a61ed6d/lxml-6.0.2-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:cdcbed9ad19da81c480dfd6dd161886db6096083c9938ead313d94b30aadf272", size = 5233795, upload_time = "2025-09-22T04:03:27.62Z" }, + { url = "https://files.pythonhosted.org/packages/56/4d/4856e897df0d588789dd844dbed9d91782c4ef0b327f96ce53c807e13128/lxml-6.0.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:80dadc234ebc532e09be1975ff538d154a7fa61ea5031c03d25178855544728f", size = 5257023, upload_time = "2025-09-22T04:03:30.056Z" }, + { url = "https://files.pythonhosted.org/packages/0f/85/86766dfebfa87bea0ab78e9ff7a4b4b45225df4b4d3b8cc3c03c5cd68464/lxml-6.0.2-cp314-cp314t-win32.whl", hash = "sha256:da08e7bb297b04e893d91087df19638dc7a6bb858a954b0cc2b9f5053c922312", size = 3911420, upload_time = "2025-09-22T04:03:32.198Z" }, + { url = "https://files.pythonhosted.org/packages/fe/1a/b248b355834c8e32614650b8008c69ffeb0ceb149c793961dd8c0b991bb3/lxml-6.0.2-cp314-cp314t-win_amd64.whl", hash = "sha256:252a22982dca42f6155125ac76d3432e548a7625d56f5a273ee78a5057216eca", size = 4406837, upload_time = "2025-09-22T04:03:34.027Z" }, + { url = "https://files.pythonhosted.org/packages/92/aa/df863bcc39c5e0946263454aba394de8a9084dbaff8ad143846b0d844739/lxml-6.0.2-cp314-cp314t-win_arm64.whl", hash = "sha256:bb4c1847b303835d89d785a18801a883436cdfd5dc3d62947f9c49e24f0f5a2c", size = 3822205, upload_time = "2025-09-22T04:03:36.249Z" }, ] [[package]] name = "markdown" version = "3.9" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8d/37/02347f6d6d8279247a5837082ebc26fc0d5aaeaf75aa013fcbb433c777ab/markdown-3.9.tar.gz", hash = "sha256:d2900fe1782bd33bdbbd56859defef70c2e78fc46668f8eb9df3128138f2cb6a", size = 364585 } +sdist = { url = "https://files.pythonhosted.org/packages/8d/37/02347f6d6d8279247a5837082ebc26fc0d5aaeaf75aa013fcbb433c777ab/markdown-3.9.tar.gz", hash = "sha256:d2900fe1782bd33bdbbd56859defef70c2e78fc46668f8eb9df3128138f2cb6a", size = 364585, upload_time = "2025-09-04T20:25:22.885Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/70/ae/44c4a6a4cbb496d93c6257954260fe3a6e91b7bed2240e5dad2a717f5111/markdown-3.9-py3-none-any.whl", hash = "sha256:9f4d91ed810864ea88a6f32c07ba8bee1346c0cc1f6b1f9f6c822f2a9667d280", size = 107441 }, + { url = "https://files.pythonhosted.org/packages/70/ae/44c4a6a4cbb496d93c6257954260fe3a6e91b7bed2240e5dad2a717f5111/markdown-3.9-py3-none-any.whl", hash = "sha256:9f4d91ed810864ea88a6f32c07ba8bee1346c0cc1f6b1f9f6c822f2a9667d280", size = 107441, upload_time = "2025-09-04T20:25:21.784Z" }, ] [[package]] @@ -1191,56 +1214,56 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "mdurl" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/5b/f5/4ec618ed16cc4f8fb3b701563655a69816155e79e24a17b651541804721d/markdown_it_py-4.0.0.tar.gz", hash = "sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3", size = 73070 } +sdist = { url = "https://files.pythonhosted.org/packages/5b/f5/4ec618ed16cc4f8fb3b701563655a69816155e79e24a17b651541804721d/markdown_it_py-4.0.0.tar.gz", hash = "sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3", size = 73070, upload_time = "2025-08-11T12:57:52.854Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl", hash = "sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147", size = 87321 }, + { url = "https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl", hash = "sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147", size = 87321, upload_time = "2025-08-11T12:57:51.923Z" }, ] [[package]] name = "marko" version = "2.2.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/9c/6a/32545d2379822fb9a8843f01150011402888492541977a1193fe8d695df0/marko-2.2.0.tar.gz", hash = "sha256:213c146ba197c1d6bcb06ae3658b7d87e45f6def35c09905b86aa6bb1984eba6", size = 143406 } +sdist = { url = "https://files.pythonhosted.org/packages/9c/6a/32545d2379822fb9a8843f01150011402888492541977a1193fe8d695df0/marko-2.2.0.tar.gz", hash = "sha256:213c146ba197c1d6bcb06ae3658b7d87e45f6def35c09905b86aa6bb1984eba6", size = 143406, upload_time = "2025-08-08T09:47:05.396Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/94/b1/87f54d8842b2aafdbb162301ac730587e04f30ad0fe9aabb12fa29f7a6f7/marko-2.2.0-py3-none-any.whl", hash = "sha256:d84f867429142627e896322c8ef167664f3a6cd6ea5a2b70c6af055998041bb7", size = 42683 }, + { url = "https://files.pythonhosted.org/packages/94/b1/87f54d8842b2aafdbb162301ac730587e04f30ad0fe9aabb12fa29f7a6f7/marko-2.2.0-py3-none-any.whl", hash = "sha256:d84f867429142627e896322c8ef167664f3a6cd6ea5a2b70c6af055998041bb7", size = 42683, upload_time = "2025-08-08T09:47:04.175Z" }, ] [[package]] name = "markupsafe" version = "3.0.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/22/09/d1f21434c97fc42f09d290cbb6350d44eb12f09cc62c9476effdb33a18aa/MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", size = 14274 }, - { url = "https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", size = 12348 }, - { url = "https://files.pythonhosted.org/packages/e0/25/dd5c0f6ac1311e9b40f4af06c78efde0f3b5cbf02502f8ef9501294c425b/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", size = 24149 }, - { url = "https://files.pythonhosted.org/packages/f3/f0/89e7aadfb3749d0f52234a0c8c7867877876e0a20b60e2188e9850794c17/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", size = 23118 }, - { url = "https://files.pythonhosted.org/packages/d5/da/f2eeb64c723f5e3777bc081da884b414671982008c47dcc1873d81f625b6/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", size = 22993 }, - { url = "https://files.pythonhosted.org/packages/da/0e/1f32af846df486dce7c227fe0f2398dc7e2e51d4a370508281f3c1c5cddc/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", size = 24178 }, - { url = "https://files.pythonhosted.org/packages/c4/f6/bb3ca0532de8086cbff5f06d137064c8410d10779c4c127e0e47d17c0b71/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", size = 23319 }, - { url = "https://files.pythonhosted.org/packages/a2/82/8be4c96ffee03c5b4a034e60a31294daf481e12c7c43ab8e34a1453ee48b/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", size = 23352 }, - { url = "https://files.pythonhosted.org/packages/51/ae/97827349d3fcffee7e184bdf7f41cd6b88d9919c80f0263ba7acd1bbcb18/MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", size = 15097 }, - { url = "https://files.pythonhosted.org/packages/c1/80/a61f99dc3a936413c3ee4e1eecac96c0da5ed07ad56fd975f1a9da5bc630/MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", size = 15601 }, - { url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274 }, - { url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352 }, - { url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122 }, - { url = "https://files.pythonhosted.org/packages/0c/91/96cf928db8236f1bfab6ce15ad070dfdd02ed88261c2afafd4b43575e9e9/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", size = 23085 }, - { url = "https://files.pythonhosted.org/packages/c2/cf/c9d56af24d56ea04daae7ac0940232d31d5a8354f2b457c6d856b2057d69/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", size = 22978 }, - { url = "https://files.pythonhosted.org/packages/2a/9f/8619835cd6a711d6272d62abb78c033bda638fdc54c4e7f4272cf1c0962b/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", size = 24208 }, - { url = "https://files.pythonhosted.org/packages/f9/bf/176950a1792b2cd2102b8ffeb5133e1ed984547b75db47c25a67d3359f77/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", size = 23357 }, - { url = "https://files.pythonhosted.org/packages/ce/4f/9a02c1d335caabe5c4efb90e1b6e8ee944aa245c1aaaab8e8a618987d816/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", size = 23344 }, - { url = "https://files.pythonhosted.org/packages/ee/55/c271b57db36f748f0e04a759ace9f8f759ccf22b4960c270c78a394f58be/MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", size = 15101 }, - { url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", size = 15603 }, - { url = "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", size = 14510 }, - { url = "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", size = 12486 }, - { url = "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", size = 25480 }, - { url = "https://files.pythonhosted.org/packages/0c/e3/90e9651924c430b885468b56b3d597cabf6d72be4b24a0acd1fa0e12af67/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", size = 23914 }, - { url = "https://files.pythonhosted.org/packages/66/8c/6c7cf61f95d63bb866db39085150df1f2a5bd3335298f14a66b48e92659c/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", size = 23796 }, - { url = "https://files.pythonhosted.org/packages/bb/35/cbe9238ec3f47ac9a7c8b3df7a808e7cb50fe149dc7039f5f454b3fba218/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", size = 25473 }, - { url = "https://files.pythonhosted.org/packages/e6/32/7621a4382488aa283cc05e8984a9c219abad3bca087be9ec77e89939ded9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", size = 24114 }, - { url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098 }, - { url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208 }, - { url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739 }, +sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537, upload_time = "2024-10-18T15:21:54.129Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/09/d1f21434c97fc42f09d290cbb6350d44eb12f09cc62c9476effdb33a18aa/MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", size = 14274, upload_time = "2024-10-18T15:21:13.777Z" }, + { url = "https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", size = 12348, upload_time = "2024-10-18T15:21:14.822Z" }, + { url = "https://files.pythonhosted.org/packages/e0/25/dd5c0f6ac1311e9b40f4af06c78efde0f3b5cbf02502f8ef9501294c425b/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", size = 24149, upload_time = "2024-10-18T15:21:15.642Z" }, + { url = "https://files.pythonhosted.org/packages/f3/f0/89e7aadfb3749d0f52234a0c8c7867877876e0a20b60e2188e9850794c17/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", size = 23118, upload_time = "2024-10-18T15:21:17.133Z" }, + { url = "https://files.pythonhosted.org/packages/d5/da/f2eeb64c723f5e3777bc081da884b414671982008c47dcc1873d81f625b6/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", size = 22993, upload_time = "2024-10-18T15:21:18.064Z" }, + { url = "https://files.pythonhosted.org/packages/da/0e/1f32af846df486dce7c227fe0f2398dc7e2e51d4a370508281f3c1c5cddc/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", size = 24178, upload_time = "2024-10-18T15:21:18.859Z" }, + { url = "https://files.pythonhosted.org/packages/c4/f6/bb3ca0532de8086cbff5f06d137064c8410d10779c4c127e0e47d17c0b71/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", size = 23319, upload_time = "2024-10-18T15:21:19.671Z" }, + { url = "https://files.pythonhosted.org/packages/a2/82/8be4c96ffee03c5b4a034e60a31294daf481e12c7c43ab8e34a1453ee48b/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", size = 23352, upload_time = "2024-10-18T15:21:20.971Z" }, + { url = "https://files.pythonhosted.org/packages/51/ae/97827349d3fcffee7e184bdf7f41cd6b88d9919c80f0263ba7acd1bbcb18/MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", size = 15097, upload_time = "2024-10-18T15:21:22.646Z" }, + { url = "https://files.pythonhosted.org/packages/c1/80/a61f99dc3a936413c3ee4e1eecac96c0da5ed07ad56fd975f1a9da5bc630/MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", size = 15601, upload_time = "2024-10-18T15:21:23.499Z" }, + { url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274, upload_time = "2024-10-18T15:21:24.577Z" }, + { url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352, upload_time = "2024-10-18T15:21:25.382Z" }, + { url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122, upload_time = "2024-10-18T15:21:26.199Z" }, + { url = "https://files.pythonhosted.org/packages/0c/91/96cf928db8236f1bfab6ce15ad070dfdd02ed88261c2afafd4b43575e9e9/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", size = 23085, upload_time = "2024-10-18T15:21:27.029Z" }, + { url = "https://files.pythonhosted.org/packages/c2/cf/c9d56af24d56ea04daae7ac0940232d31d5a8354f2b457c6d856b2057d69/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", size = 22978, upload_time = "2024-10-18T15:21:27.846Z" }, + { url = "https://files.pythonhosted.org/packages/2a/9f/8619835cd6a711d6272d62abb78c033bda638fdc54c4e7f4272cf1c0962b/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", size = 24208, upload_time = "2024-10-18T15:21:28.744Z" }, + { url = "https://files.pythonhosted.org/packages/f9/bf/176950a1792b2cd2102b8ffeb5133e1ed984547b75db47c25a67d3359f77/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", size = 23357, upload_time = "2024-10-18T15:21:29.545Z" }, + { url = "https://files.pythonhosted.org/packages/ce/4f/9a02c1d335caabe5c4efb90e1b6e8ee944aa245c1aaaab8e8a618987d816/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", size = 23344, upload_time = "2024-10-18T15:21:30.366Z" }, + { url = "https://files.pythonhosted.org/packages/ee/55/c271b57db36f748f0e04a759ace9f8f759ccf22b4960c270c78a394f58be/MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", size = 15101, upload_time = "2024-10-18T15:21:31.207Z" }, + { url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", size = 15603, upload_time = "2024-10-18T15:21:32.032Z" }, + { url = "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", size = 14510, upload_time = "2024-10-18T15:21:33.625Z" }, + { url = "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", size = 12486, upload_time = "2024-10-18T15:21:34.611Z" }, + { url = "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", size = 25480, upload_time = "2024-10-18T15:21:35.398Z" }, + { url = "https://files.pythonhosted.org/packages/0c/e3/90e9651924c430b885468b56b3d597cabf6d72be4b24a0acd1fa0e12af67/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", size = 23914, upload_time = "2024-10-18T15:21:36.231Z" }, + { url = "https://files.pythonhosted.org/packages/66/8c/6c7cf61f95d63bb866db39085150df1f2a5bd3335298f14a66b48e92659c/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", size = 23796, upload_time = "2024-10-18T15:21:37.073Z" }, + { url = "https://files.pythonhosted.org/packages/bb/35/cbe9238ec3f47ac9a7c8b3df7a808e7cb50fe149dc7039f5f454b3fba218/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", size = 25473, upload_time = "2024-10-18T15:21:37.932Z" }, + { url = "https://files.pythonhosted.org/packages/e6/32/7621a4382488aa283cc05e8984a9c219abad3bca087be9ec77e89939ded9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", size = 24114, upload_time = "2024-10-18T15:21:39.799Z" }, + { url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098, upload_time = "2024-10-18T15:21:40.813Z" }, + { url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208, upload_time = "2024-10-18T15:21:41.814Z" }, + { url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739, upload_time = "2024-10-18T15:21:42.784Z" }, ] [[package]] @@ -1250,9 +1273,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/99/5b/a36a337438a14116b16480db471ad061c36c3694df7c2084a0da7ba538b7/matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90", size = 8159 } +sdist = { url = "https://files.pythonhosted.org/packages/99/5b/a36a337438a14116b16480db471ad061c36c3694df7c2084a0da7ba538b7/matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90", size = 8159, upload_time = "2024-04-15T13:44:44.803Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/8f/8e/9ad090d3553c280a8060fbf6e24dc1c0c29704ee7d1c372f0c174aa59285/matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca", size = 9899 }, + { url = "https://files.pythonhosted.org/packages/8f/8e/9ad090d3553c280a8060fbf6e24dc1c0c29704ee7d1c372f0c174aa59285/matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca", size = 9899, upload_time = "2024-04-15T13:44:43.265Z" }, ] [[package]] @@ -1262,36 +1285,36 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "markdown-it-py" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b2/fd/a756d36c0bfba5f6e39a1cdbdbfdd448dc02692467d83816dff4592a1ebc/mdit_py_plugins-0.5.0.tar.gz", hash = "sha256:f4918cb50119f50446560513a8e311d574ff6aaed72606ddae6d35716fe809c6", size = 44655 } +sdist = { url = "https://files.pythonhosted.org/packages/b2/fd/a756d36c0bfba5f6e39a1cdbdbfdd448dc02692467d83816dff4592a1ebc/mdit_py_plugins-0.5.0.tar.gz", hash = "sha256:f4918cb50119f50446560513a8e311d574ff6aaed72606ddae6d35716fe809c6", size = 44655, upload_time = "2025-08-11T07:25:49.083Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fb/86/dd6e5db36df29e76c7a7699123569a4a18c1623ce68d826ed96c62643cae/mdit_py_plugins-0.5.0-py3-none-any.whl", hash = "sha256:07a08422fc1936a5d26d146759e9155ea466e842f5ab2f7d2266dd084c8dab1f", size = 57205 }, + { url = "https://files.pythonhosted.org/packages/fb/86/dd6e5db36df29e76c7a7699123569a4a18c1623ce68d826ed96c62643cae/mdit_py_plugins-0.5.0-py3-none-any.whl", hash = "sha256:07a08422fc1936a5d26d146759e9155ea466e842f5ab2f7d2266dd084c8dab1f", size = 57205, upload_time = "2025-08-11T07:25:47.597Z" }, ] [[package]] name = "mdurl" version = "0.1.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729 } +sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload_time = "2022-08-14T12:40:10.846Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979 }, + { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload_time = "2022-08-14T12:40:09.779Z" }, ] [[package]] name = "mergedeep" version = "1.3.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/3a/41/580bb4006e3ed0361b8151a01d324fb03f420815446c7def45d02f74c270/mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8", size = 4661 } +sdist = { url = "https://files.pythonhosted.org/packages/3a/41/580bb4006e3ed0361b8151a01d324fb03f420815446c7def45d02f74c270/mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8", size = 4661, upload_time = "2021-02-05T18:55:30.623Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307", size = 6354 }, + { url = "https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307", size = 6354, upload_time = "2021-02-05T18:55:29.583Z" }, ] [[package]] name = "mistune" version = "3.1.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d7/02/a7fb8b21d4d55ac93cdcde9d3638da5dd0ebdd3a4fed76c7725e10b81cbe/mistune-3.1.4.tar.gz", hash = "sha256:b5a7f801d389f724ec702840c11d8fc48f2b33519102fc7ee739e8177b672164", size = 94588 } +sdist = { url = "https://files.pythonhosted.org/packages/d7/02/a7fb8b21d4d55ac93cdcde9d3638da5dd0ebdd3a4fed76c7725e10b81cbe/mistune-3.1.4.tar.gz", hash = "sha256:b5a7f801d389f724ec702840c11d8fc48f2b33519102fc7ee739e8177b672164", size = 94588, upload_time = "2025-08-29T07:20:43.594Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7a/f0/8282d9641415e9e33df173516226b404d367a0fc55e1a60424a152913abc/mistune-3.1.4-py3-none-any.whl", hash = "sha256:93691da911e5d9d2e23bc54472892aff676df27a75274962ff9edc210364266d", size = 53481 }, + { url = "https://files.pythonhosted.org/packages/7a/f0/8282d9641415e9e33df173516226b404d367a0fc55e1a60424a152913abc/mistune-3.1.4-py3-none-any.whl", hash = "sha256:93691da911e5d9d2e23bc54472892aff676df27a75274962ff9edc210364266d", size = 53481, upload_time = "2025-08-29T07:20:42.218Z" }, ] [[package]] @@ -1313,9 +1336,9 @@ dependencies = [ { name = "pyyaml-env-tag" }, { name = "watchdog" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/bc/c6/bbd4f061bd16b378247f12953ffcb04786a618ce5e904b8c5a01a0309061/mkdocs-1.6.1.tar.gz", hash = "sha256:7b432f01d928c084353ab39c57282f29f92136665bdd6abf7c1ec8d822ef86f2", size = 3889159 } +sdist = { url = "https://files.pythonhosted.org/packages/bc/c6/bbd4f061bd16b378247f12953ffcb04786a618ce5e904b8c5a01a0309061/mkdocs-1.6.1.tar.gz", hash = "sha256:7b432f01d928c084353ab39c57282f29f92136665bdd6abf7c1ec8d822ef86f2", size = 3889159, upload_time = "2024-08-30T12:24:06.899Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl", hash = "sha256:db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e", size = 3864451 }, + { url = "https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl", hash = "sha256:db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e", size = 3864451, upload_time = "2024-08-30T12:24:05.054Z" }, ] [[package]] @@ -1325,9 +1348,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "mkdocs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/26/7c/fea9d842705ca8c9e7dd21da2d0b7b61dbdd8b6e58ca3c7c85b5604914e9/mkdocs_argref_plugin-0.5.0.tar.gz", hash = "sha256:b2982f9670419911f671ddff3f773b27fdc9184762ecd1e00c42aaab3e905e70", size = 7012 } +sdist = { url = "https://files.pythonhosted.org/packages/26/7c/fea9d842705ca8c9e7dd21da2d0b7b61dbdd8b6e58ca3c7c85b5604914e9/mkdocs_argref_plugin-0.5.0.tar.gz", hash = "sha256:b2982f9670419911f671ddff3f773b27fdc9184762ecd1e00c42aaab3e905e70", size = 7012, upload_time = "2024-08-25T12:50:09.138Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1e/eb/e7e7ea2f7e374e52fc8425d5cf67890be8278a6e620aa74775da2f1039f7/mkdocs_argref_plugin-0.5.0-py3-none-any.whl", hash = "sha256:6ec4be422bfb5654c38f96785b0093078c3ca3e16774162be607d6f8d483ceb9", size = 6790 }, + { url = "https://files.pythonhosted.org/packages/1e/eb/e7e7ea2f7e374e52fc8425d5cf67890be8278a6e620aa74775da2f1039f7/mkdocs_argref_plugin-0.5.0-py3-none-any.whl", hash = "sha256:6ec4be422bfb5654c38f96785b0093078c3ca3e16774162be607d6f8d483ceb9", size = 6790, upload_time = "2024-08-25T12:50:08.151Z" }, ] [[package]] @@ -1337,9 +1360,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "mkdocs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/63/b7/efc75b7870a4fecbc9a05ba94ce622462a40b5a13670d00036c5b47bf82f/mkdocs-autolinks-plugin-0.7.1.tar.gz", hash = "sha256:445ddb9b417b7795856c30801bb430773186c1daf210bdeecf8305f55a47d151", size = 4375 } +sdist = { url = "https://files.pythonhosted.org/packages/63/b7/efc75b7870a4fecbc9a05ba94ce622462a40b5a13670d00036c5b47bf82f/mkdocs-autolinks-plugin-0.7.1.tar.gz", hash = "sha256:445ddb9b417b7795856c30801bb430773186c1daf210bdeecf8305f55a47d151", size = 4375, upload_time = "2023-08-04T14:42:25.67Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d4/9c/ee3d81a799b8b0b73a89625bcbf3c58cd369c8a26a1b415413edea9bf259/mkdocs_autolinks_plugin-0.7.1-py3-none-any.whl", hash = "sha256:5c6c17f6649b68e79a9ef0b2648d59f3072e18002b90ee1586a64c505f11ab12", size = 4235 }, + { url = "https://files.pythonhosted.org/packages/d4/9c/ee3d81a799b8b0b73a89625bcbf3c58cd369c8a26a1b415413edea9bf259/mkdocs_autolinks_plugin-0.7.1-py3-none-any.whl", hash = "sha256:5c6c17f6649b68e79a9ef0b2648d59f3072e18002b90ee1586a64c505f11ab12", size = 4235, upload_time = "2023-08-04T14:42:23.955Z" }, ] [[package]] @@ -1351,9 +1374,9 @@ dependencies = [ { name = "markupsafe" }, { name = "mkdocs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/51/fa/9124cd63d822e2bcbea1450ae68cdc3faf3655c69b455f3a7ed36ce6c628/mkdocs_autorefs-1.4.3.tar.gz", hash = "sha256:beee715b254455c4aa93b6ef3c67579c399ca092259cc41b7d9342573ff1fc75", size = 55425 } +sdist = { url = "https://files.pythonhosted.org/packages/51/fa/9124cd63d822e2bcbea1450ae68cdc3faf3655c69b455f3a7ed36ce6c628/mkdocs_autorefs-1.4.3.tar.gz", hash = "sha256:beee715b254455c4aa93b6ef3c67579c399ca092259cc41b7d9342573ff1fc75", size = 55425, upload_time = "2025-08-26T14:23:17.223Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9f/4d/7123b6fa2278000688ebd338e2a06d16870aaf9eceae6ba047ea05f92df1/mkdocs_autorefs-1.4.3-py3-none-any.whl", hash = "sha256:469d85eb3114801d08e9cc55d102b3ba65917a869b893403b8987b601cf55dc9", size = 25034 }, + { url = "https://files.pythonhosted.org/packages/9f/4d/7123b6fa2278000688ebd338e2a06d16870aaf9eceae6ba047ea05f92df1/mkdocs_autorefs-1.4.3-py3-none-any.whl", hash = "sha256:469d85eb3114801d08e9cc55d102b3ba65917a869b893403b8987b601cf55dc9", size = 25034, upload_time = "2025-08-26T14:23:15.906Z" }, ] [[package]] @@ -1364,7 +1387,7 @@ dependencies = [ { name = "mkdocs" }, { name = "pygtrie" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/9a/3b/490d1b51fba7da69394e5a17f2c081eb65a10fb73565dc6793d53e4e4206/mkdocs-ezlinks-plugin-0.1.14.tar.gz", hash = "sha256:3e2085c16a850e022393e80194c17612e7b55de87fb45b3ffb618b5dfdb10811", size = 13366 } +sdist = { url = "https://files.pythonhosted.org/packages/9a/3b/490d1b51fba7da69394e5a17f2c081eb65a10fb73565dc6793d53e4e4206/mkdocs-ezlinks-plugin-0.1.14.tar.gz", hash = "sha256:3e2085c16a850e022393e80194c17612e7b55de87fb45b3ffb618b5dfdb10811", size = 13366, upload_time = "2022-01-24T20:10:30.91Z" } [[package]] name = "mkdocs-get-deps" @@ -1375,9 +1398,9 @@ dependencies = [ { name = "platformdirs" }, { name = "pyyaml" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/98/f5/ed29cd50067784976f25ed0ed6fcd3c2ce9eb90650aa3b2796ddf7b6870b/mkdocs_get_deps-0.2.0.tar.gz", hash = "sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c", size = 10239 } +sdist = { url = "https://files.pythonhosted.org/packages/98/f5/ed29cd50067784976f25ed0ed6fcd3c2ce9eb90650aa3b2796ddf7b6870b/mkdocs_get_deps-0.2.0.tar.gz", hash = "sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c", size = 10239, upload_time = "2023-11-20T17:51:09.981Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9f/d4/029f984e8d3f3b6b726bd33cafc473b75e9e44c0f7e80a5b29abc466bdea/mkdocs_get_deps-0.2.0-py3-none-any.whl", hash = "sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134", size = 9521 }, + { url = "https://files.pythonhosted.org/packages/9f/d4/029f984e8d3f3b6b726bd33cafc473b75e9e44c0f7e80a5b29abc466bdea/mkdocs_get_deps-0.2.0-py3-none-any.whl", hash = "sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134", size = 9521, upload_time = "2023-11-20T17:51:08.587Z" }, ] [[package]] @@ -1388,9 +1411,9 @@ dependencies = [ { name = "mkdocs" }, { name = "pygithub" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c6/88/e724563e9ff1b119869ef0704157caa8d7b9b9b4a8a8faf8120aa01620e2/mkdocs-git-committers-plugin-0.2.3.tar.gz", hash = "sha256:77188d8aacc11d5233d6949435670e3d6545ffb7a0e274d56f32ed3984353c61", size = 5379 } +sdist = { url = "https://files.pythonhosted.org/packages/c6/88/e724563e9ff1b119869ef0704157caa8d7b9b9b4a8a8faf8120aa01620e2/mkdocs-git-committers-plugin-0.2.3.tar.gz", hash = "sha256:77188d8aacc11d5233d6949435670e3d6545ffb7a0e274d56f32ed3984353c61", size = 5379, upload_time = "2023-11-06T17:13:30.207Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/81/56/15fdbb6afa718a6c9de626bd11672040832ba547c03daf205e295be4e0d4/mkdocs_git_committers_plugin-0.2.3-py3-none-any.whl", hash = "sha256:4ca79efb7e61a72652d3512d61af5c40a4572e36667e1a00032aad524250780d", size = 4340 }, + { url = "https://files.pythonhosted.org/packages/81/56/15fdbb6afa718a6c9de626bd11672040832ba547c03daf205e295be4e0d4/mkdocs_git_committers_plugin-0.2.3-py3-none-any.whl", hash = "sha256:4ca79efb7e61a72652d3512d61af5c40a4572e36667e1a00032aad524250780d", size = 4340, upload_time = "2023-11-06T17:13:28.979Z" }, ] [[package]] @@ -1403,9 +1426,9 @@ dependencies = [ { name = "mkdocs" }, { name = "pytz" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/5e/f8/a17ec39a4fc314d40cc96afdc1d401e393ebd4f42309d454cc940a2cf38a/mkdocs_git_revision_date_localized_plugin-1.4.7.tar.gz", hash = "sha256:10a49eff1e1c3cb766e054b9d8360c904ce4fe8c33ac3f6cc083ac6459c91953", size = 450473 } +sdist = { url = "https://files.pythonhosted.org/packages/5e/f8/a17ec39a4fc314d40cc96afdc1d401e393ebd4f42309d454cc940a2cf38a/mkdocs_git_revision_date_localized_plugin-1.4.7.tar.gz", hash = "sha256:10a49eff1e1c3cb766e054b9d8360c904ce4fe8c33ac3f6cc083ac6459c91953", size = 450473, upload_time = "2025-05-28T18:26:20.697Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/53/b6/106fcc15287e7228658fbd0ad9e8b0d775becced0a089cc39984641f4a0f/mkdocs_git_revision_date_localized_plugin-1.4.7-py3-none-any.whl", hash = "sha256:056c0a90242409148f1dc94d5c9d2c25b5b8ddd8de45489fa38f7fa7ccad2bc4", size = 25382 }, + { url = "https://files.pythonhosted.org/packages/53/b6/106fcc15287e7228658fbd0ad9e8b0d775becced0a089cc39984641f4a0f/mkdocs_git_revision_date_localized_plugin-1.4.7-py3-none-any.whl", hash = "sha256:056c0a90242409148f1dc94d5c9d2c25b5b8ddd8de45489fa38f7fa7ccad2bc4", size = 25382, upload_time = "2025-05-28T18:26:18.907Z" }, ] [[package]] @@ -1420,9 +1443,9 @@ dependencies = [ { name = "nbconvert" }, { name = "pygments" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/6c/23/6ffb8d2fd2117aa860a04c6fe2510b21bc3c3c085907ffdd851caba53152/mkdocs_jupyter-0.25.1.tar.gz", hash = "sha256:0e9272ff4947e0ec683c92423a4bfb42a26477c103ab1a6ab8277e2dcc8f7afe", size = 1626747 } +sdist = { url = "https://files.pythonhosted.org/packages/6c/23/6ffb8d2fd2117aa860a04c6fe2510b21bc3c3c085907ffdd851caba53152/mkdocs_jupyter-0.25.1.tar.gz", hash = "sha256:0e9272ff4947e0ec683c92423a4bfb42a26477c103ab1a6ab8277e2dcc8f7afe", size = 1626747, upload_time = "2024-10-15T14:56:32.373Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/08/37/5f1fd5c3f6954b3256f8126275e62af493b96fb6aef6c0dbc4ee326032ad/mkdocs_jupyter-0.25.1-py3-none-any.whl", hash = "sha256:3f679a857609885d322880e72533ef5255561bbfdb13cfee2a1e92ef4d4ad8d8", size = 1456197 }, + { url = "https://files.pythonhosted.org/packages/08/37/5f1fd5c3f6954b3256f8126275e62af493b96fb6aef6c0dbc4ee326032ad/mkdocs_jupyter-0.25.1-py3-none-any.whl", hash = "sha256:3f679a857609885d322880e72533ef5255561bbfdb13cfee2a1e92ef4d4ad8d8", size = 1456197, upload_time = "2024-10-15T14:56:29.854Z" }, ] [[package]] @@ -1443,18 +1466,18 @@ dependencies = [ { name = "pymdown-extensions" }, { name = "requests" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ba/ee/6ed7fc739bd7591485c8bec67d5984508d3f2733e708f32714c21593341a/mkdocs_material-9.6.20.tar.gz", hash = "sha256:e1f84d21ec5fb730673c4259b2e0d39f8d32a3fef613e3a8e7094b012d43e790", size = 4037822 } +sdist = { url = "https://files.pythonhosted.org/packages/ba/ee/6ed7fc739bd7591485c8bec67d5984508d3f2733e708f32714c21593341a/mkdocs_material-9.6.20.tar.gz", hash = "sha256:e1f84d21ec5fb730673c4259b2e0d39f8d32a3fef613e3a8e7094b012d43e790", size = 4037822, upload_time = "2025-09-15T08:48:01.816Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/67/d8/a31dd52e657bf12b20574706d07df8d767e1ab4340f9bfb9ce73950e5e59/mkdocs_material-9.6.20-py3-none-any.whl", hash = "sha256:b8d8c8b0444c7c06dd984b55ba456ce731f0035c5a1533cc86793618eb1e6c82", size = 9193367 }, + { url = "https://files.pythonhosted.org/packages/67/d8/a31dd52e657bf12b20574706d07df8d767e1ab4340f9bfb9ce73950e5e59/mkdocs_material-9.6.20-py3-none-any.whl", hash = "sha256:b8d8c8b0444c7c06dd984b55ba456ce731f0035c5a1533cc86793618eb1e6c82", size = 9193367, upload_time = "2025-09-15T08:47:58.722Z" }, ] [[package]] name = "mkdocs-material-extensions" version = "1.3.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/79/9b/9b4c96d6593b2a541e1cb8b34899a6d021d208bb357042823d4d2cabdbe7/mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443", size = 11847 } +sdist = { url = "https://files.pythonhosted.org/packages/79/9b/9b4c96d6593b2a541e1cb8b34899a6d021d208bb357042823d4d2cabdbe7/mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443", size = 11847, upload_time = "2023-11-22T19:09:45.208Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31", size = 8728 }, + { url = "https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31", size = 8728, upload_time = "2023-11-22T19:09:43.465Z" }, ] [[package]] @@ -1467,9 +1490,9 @@ dependencies = [ { name = "jsmin" }, { name = "mkdocs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/52/67/fe4b77e7a8ae7628392e28b14122588beaf6078b53eb91c7ed000fd158ac/mkdocs-minify-plugin-0.8.0.tar.gz", hash = "sha256:bc11b78b8120d79e817308e2b11539d790d21445eb63df831e393f76e52e753d", size = 8366 } +sdist = { url = "https://files.pythonhosted.org/packages/52/67/fe4b77e7a8ae7628392e28b14122588beaf6078b53eb91c7ed000fd158ac/mkdocs-minify-plugin-0.8.0.tar.gz", hash = "sha256:bc11b78b8120d79e817308e2b11539d790d21445eb63df831e393f76e52e753d", size = 8366, upload_time = "2024-01-29T16:11:32.982Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1b/cd/2e8d0d92421916e2ea4ff97f10a544a9bd5588eb747556701c983581df13/mkdocs_minify_plugin-0.8.0-py3-none-any.whl", hash = "sha256:5fba1a3f7bd9a2142c9954a6559a57e946587b21f133165ece30ea145c66aee6", size = 6723 }, + { url = "https://files.pythonhosted.org/packages/1b/cd/2e8d0d92421916e2ea4ff97f10a544a9bd5588eb747556701c983581df13/mkdocs_minify_plugin-0.8.0-py3-none-any.whl", hash = "sha256:5fba1a3f7bd9a2142c9954a6559a57e946587b21f133165ece30ea145c66aee6", size = 6723, upload_time = "2024-01-29T16:11:31.851Z" }, ] [[package]] @@ -1479,9 +1502,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "mkdocs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/0a/0e/f72a506a21bdb27b807124e00c688226848a388d1fd3980b80ae3cc27203/mkdocs_open_in_new_tab-1.0.8.tar.gz", hash = "sha256:3e0dad08cc9938b0b13097be8e0aa435919de1eeb2d1a648e66b5dee8d57e048", size = 5791 } +sdist = { url = "https://files.pythonhosted.org/packages/0a/0e/f72a506a21bdb27b807124e00c688226848a388d1fd3980b80ae3cc27203/mkdocs_open_in_new_tab-1.0.8.tar.gz", hash = "sha256:3e0dad08cc9938b0b13097be8e0aa435919de1eeb2d1a648e66b5dee8d57e048", size = 5791, upload_time = "2024-11-18T13:15:13.977Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/21/94/44f3c868495481c868d08eea065c82803f1affd8553d3383b782f497613c/mkdocs_open_in_new_tab-1.0.8-py3-none-any.whl", hash = "sha256:051d767a4467b12d89827e1fea0ec660b05b027c726317fe4fceee5456e36ad2", size = 7717 }, + { url = "https://files.pythonhosted.org/packages/21/94/44f3c868495481c868d08eea065c82803f1affd8553d3383b782f497613c/mkdocs_open_in_new_tab-1.0.8-py3-none-any.whl", hash = "sha256:051d767a4467b12d89827e1fea0ec660b05b027c726317fe4fceee5456e36ad2", size = 7717, upload_time = "2024-11-18T13:15:12.286Z" }, ] [[package]] @@ -1491,9 +1514,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "mkdocs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f1/a8/6d44a6cf07e969c7420cb36ab287b0669da636a2044de38a7d2208d5a758/mkdocs_redirects-1.2.2.tar.gz", hash = "sha256:3094981b42ffab29313c2c1b8ac3969861109f58b2dd58c45fc81cd44bfa0095", size = 7162 } +sdist = { url = "https://files.pythonhosted.org/packages/f1/a8/6d44a6cf07e969c7420cb36ab287b0669da636a2044de38a7d2208d5a758/mkdocs_redirects-1.2.2.tar.gz", hash = "sha256:3094981b42ffab29313c2c1b8ac3969861109f58b2dd58c45fc81cd44bfa0095", size = 7162, upload_time = "2024-11-07T14:57:21.109Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c4/ec/38443b1f2a3821bbcb24e46cd8ba979154417794d54baf949fefde1c2146/mkdocs_redirects-1.2.2-py3-none-any.whl", hash = "sha256:7dbfa5647b79a3589da4401403d69494bd1f4ad03b9c15136720367e1f340ed5", size = 6142 }, + { url = "https://files.pythonhosted.org/packages/c4/ec/38443b1f2a3821bbcb24e46cd8ba979154417794d54baf949fefde1c2146/mkdocs_redirects-1.2.2-py3-none-any.whl", hash = "sha256:7dbfa5647b79a3589da4401403d69494bd1f4ad03b9c15136720367e1f340ed5", size = 6142, upload_time = "2024-11-07T14:57:19.143Z" }, ] [[package]] @@ -1506,9 +1529,9 @@ dependencies = [ { name = "pyyaml" }, { name = "tabulate" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a1/1b/ca35e4b51a1814924153f7c8afa5a9c2f961688a9c275fa9f4afe7f5083a/mkdocs_table_reader_plugin-3.1.0.tar.gz", hash = "sha256:eb15688ee8c0cd1a842f506f18973b87be22bd7baa5e2e551089de6b7f9ec25b", size = 12510 } +sdist = { url = "https://files.pythonhosted.org/packages/a1/1b/ca35e4b51a1814924153f7c8afa5a9c2f961688a9c275fa9f4afe7f5083a/mkdocs_table_reader_plugin-3.1.0.tar.gz", hash = "sha256:eb15688ee8c0cd1a842f506f18973b87be22bd7baa5e2e551089de6b7f9ec25b", size = 12510, upload_time = "2024-08-29T14:08:09.54Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b3/6f/dcc966874f74f8580b99d2ffecbdc85dfd00c4a5039fedbee4ddd7fc8c7f/mkdocs_table_reader_plugin-3.1.0-py3-none-any.whl", hash = "sha256:50a1302661c14d96b90ba0434ae96110441e0c653ce23559e3c6911fe79e7bd2", size = 10564 }, + { url = "https://files.pythonhosted.org/packages/b3/6f/dcc966874f74f8580b99d2ffecbdc85dfd00c4a5039fedbee4ddd7fc8c7f/mkdocs_table_reader_plugin-3.1.0-py3-none-any.whl", hash = "sha256:50a1302661c14d96b90ba0434ae96110441e0c653ce23559e3c6911fe79e7bd2", size = 10564, upload_time = "2024-08-29T14:08:07.367Z" }, ] [[package]] @@ -1519,9 +1542,9 @@ dependencies = [ { name = "lxml" }, { name = "mkdocs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/cf/16/45213649b6756744f36f31014fc8673df1d7c998bb9a801c2d769fff4114/mkdocs-video-1.5.0.tar.gz", hash = "sha256:0defc018f4b7927f8afffc4d8e039c84dfba636dffc5e25e2bfa8d6350bc8eca", size = 5633 } +sdist = { url = "https://files.pythonhosted.org/packages/cf/16/45213649b6756744f36f31014fc8673df1d7c998bb9a801c2d769fff4114/mkdocs-video-1.5.0.tar.gz", hash = "sha256:0defc018f4b7927f8afffc4d8e039c84dfba636dffc5e25e2bfa8d6350bc8eca", size = 5633, upload_time = "2023-03-17T17:36:43.343Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/cc/3a/b51e305eca21cdd58f4eb06973099ba0ea679b1f437a92a49f8fc576310e/mkdocs_video-1.5.0-py3-none-any.whl", hash = "sha256:b35613d4dacbac2dfa94d8c2600383cda14ad99a1fa1542b5fc4e9c6d19e9fe1", size = 6570 }, + { url = "https://files.pythonhosted.org/packages/cc/3a/b51e305eca21cdd58f4eb06973099ba0ea679b1f437a92a49f8fc576310e/mkdocs_video-1.5.0-py3-none-any.whl", hash = "sha256:b35613d4dacbac2dfa94d8c2600383cda14ad99a1fa1542b5fc4e9c6d19e9fe1", size = 6570, upload_time = "2023-03-17T17:36:40.776Z" }, ] [[package]] @@ -1536,9 +1559,9 @@ dependencies = [ { name = "mkdocs-autorefs" }, { name = "pymdown-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c5/33/2fa3243439f794e685d3e694590d28469a9b8ea733af4b48c250a3ffc9a0/mkdocstrings-0.30.1.tar.gz", hash = "sha256:84a007aae9b707fb0aebfc9da23db4b26fc9ab562eb56e335e9ec480cb19744f", size = 106350 } +sdist = { url = "https://files.pythonhosted.org/packages/c5/33/2fa3243439f794e685d3e694590d28469a9b8ea733af4b48c250a3ffc9a0/mkdocstrings-0.30.1.tar.gz", hash = "sha256:84a007aae9b707fb0aebfc9da23db4b26fc9ab562eb56e335e9ec480cb19744f", size = 106350, upload_time = "2025-09-19T10:49:26.446Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7b/2c/f0dc4e1ee7f618f5bff7e05898d20bf8b6e7fa612038f768bfa295f136a4/mkdocstrings-0.30.1-py3-none-any.whl", hash = "sha256:41bd71f284ca4d44a668816193e4025c950b002252081e387433656ae9a70a82", size = 36704 }, + { url = "https://files.pythonhosted.org/packages/7b/2c/f0dc4e1ee7f618f5bff7e05898d20bf8b6e7fa612038f768bfa295f136a4/mkdocstrings-0.30.1-py3-none-any.whl", hash = "sha256:41bd71f284ca4d44a668816193e4025c950b002252081e387433656ae9a70a82", size = 36704, upload_time = "2025-09-19T10:49:24.805Z" }, ] [[package]] @@ -1550,9 +1573,9 @@ dependencies = [ { name = "mkdocs-autorefs" }, { name = "mkdocstrings" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/95/ae/58ab2bfbee2792e92a98b97e872f7c003deb903071f75d8d83aa55db28fa/mkdocstrings_python-1.18.2.tar.gz", hash = "sha256:4ad536920a07b6336f50d4c6d5603316fafb1172c5c882370cbbc954770ad323", size = 207972 } +sdist = { url = "https://files.pythonhosted.org/packages/95/ae/58ab2bfbee2792e92a98b97e872f7c003deb903071f75d8d83aa55db28fa/mkdocstrings_python-1.18.2.tar.gz", hash = "sha256:4ad536920a07b6336f50d4c6d5603316fafb1172c5c882370cbbc954770ad323", size = 207972, upload_time = "2025-08-28T16:11:19.847Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d5/8f/ce008599d9adebf33ed144e7736914385e8537f5fc686fdb7cceb8c22431/mkdocstrings_python-1.18.2-py3-none-any.whl", hash = "sha256:944fe6deb8f08f33fa936d538233c4036e9f53e840994f6146e8e94eb71b600d", size = 138215 }, + { url = "https://files.pythonhosted.org/packages/d5/8f/ce008599d9adebf33ed144e7736914385e8537f5fc686fdb7cceb8c22431/mkdocstrings_python-1.18.2-py3-none-any.whl", hash = "sha256:944fe6deb8f08f33fa936d538233c4036e9f53e840994f6146e8e94eb71b600d", size = 138215, upload_time = "2025-08-28T16:11:18.176Z" }, ] [[package]] @@ -1564,36 +1587,36 @@ dependencies = [ { name = "pathspec" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c0/77/8f0d0001ffad290cef2f7f216f96c814866248a0b92a722365ed54648e7e/mypy-1.18.2.tar.gz", hash = "sha256:06a398102a5f203d7477b2923dda3634c36727fa5c237d8f859ef90c42a9924b", size = 3448846 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/07/06/dfdd2bc60c66611dd8335f463818514733bc763e4760dee289dcc33df709/mypy-1.18.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:33eca32dd124b29400c31d7cf784e795b050ace0e1f91b8dc035672725617e34", size = 12908273 }, - { url = "https://files.pythonhosted.org/packages/81/14/6a9de6d13a122d5608e1a04130724caf9170333ac5a924e10f670687d3eb/mypy-1.18.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a3c47adf30d65e89b2dcd2fa32f3aeb5e94ca970d2c15fcb25e297871c8e4764", size = 11920910 }, - { url = "https://files.pythonhosted.org/packages/5f/a9/b29de53e42f18e8cc547e38daa9dfa132ffdc64f7250e353f5c8cdd44bee/mypy-1.18.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5d6c838e831a062f5f29d11c9057c6009f60cb294fea33a98422688181fe2893", size = 12465585 }, - { url = "https://files.pythonhosted.org/packages/77/ae/6c3d2c7c61ff21f2bee938c917616c92ebf852f015fb55917fd6e2811db2/mypy-1.18.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01199871b6110a2ce984bde85acd481232d17413868c9807e95c1b0739a58914", size = 13348562 }, - { url = "https://files.pythonhosted.org/packages/4d/31/aec68ab3b4aebdf8f36d191b0685d99faa899ab990753ca0fee60fb99511/mypy-1.18.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a2afc0fa0b0e91b4599ddfe0f91e2c26c2b5a5ab263737e998d6817874c5f7c8", size = 13533296 }, - { url = "https://files.pythonhosted.org/packages/9f/83/abcb3ad9478fca3ebeb6a5358bb0b22c95ea42b43b7789c7fb1297ca44f4/mypy-1.18.2-cp312-cp312-win_amd64.whl", hash = "sha256:d8068d0afe682c7c4897c0f7ce84ea77f6de953262b12d07038f4d296d547074", size = 9828828 }, - { url = "https://files.pythonhosted.org/packages/5f/04/7f462e6fbba87a72bc8097b93f6842499c428a6ff0c81dd46948d175afe8/mypy-1.18.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:07b8b0f580ca6d289e69209ec9d3911b4a26e5abfde32228a288eb79df129fcc", size = 12898728 }, - { url = "https://files.pythonhosted.org/packages/99/5b/61ed4efb64f1871b41fd0b82d29a64640f3516078f6c7905b68ab1ad8b13/mypy-1.18.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ed4482847168439651d3feee5833ccedbf6657e964572706a2adb1f7fa4dfe2e", size = 11910758 }, - { url = "https://files.pythonhosted.org/packages/3c/46/d297d4b683cc89a6e4108c4250a6a6b717f5fa96e1a30a7944a6da44da35/mypy-1.18.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c3ad2afadd1e9fea5cf99a45a822346971ede8685cc581ed9cd4d42eaf940986", size = 12475342 }, - { url = "https://files.pythonhosted.org/packages/83/45/4798f4d00df13eae3bfdf726c9244bcb495ab5bd588c0eed93a2f2dd67f3/mypy-1.18.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a431a6f1ef14cf8c144c6b14793a23ec4eae3db28277c358136e79d7d062f62d", size = 13338709 }, - { url = "https://files.pythonhosted.org/packages/d7/09/479f7358d9625172521a87a9271ddd2441e1dab16a09708f056e97007207/mypy-1.18.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7ab28cc197f1dd77a67e1c6f35cd1f8e8b73ed2217e4fc005f9e6a504e46e7ba", size = 13529806 }, - { url = "https://files.pythonhosted.org/packages/71/cf/ac0f2c7e9d0ea3c75cd99dff7aec1c9df4a1376537cb90e4c882267ee7e9/mypy-1.18.2-cp313-cp313-win_amd64.whl", hash = "sha256:0e2785a84b34a72ba55fb5daf079a1003a34c05b22238da94fcae2bbe46f3544", size = 9833262 }, - { url = "https://files.pythonhosted.org/packages/5a/0c/7d5300883da16f0063ae53996358758b2a2df2a09c72a5061fa79a1f5006/mypy-1.18.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:62f0e1e988ad41c2a110edde6c398383a889d95b36b3e60bcf155f5164c4fdce", size = 12893775 }, - { url = "https://files.pythonhosted.org/packages/50/df/2cffbf25737bdb236f60c973edf62e3e7b4ee1c25b6878629e88e2cde967/mypy-1.18.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:8795a039bab805ff0c1dfdb8cd3344642c2b99b8e439d057aba30850b8d3423d", size = 11936852 }, - { url = "https://files.pythonhosted.org/packages/be/50/34059de13dd269227fb4a03be1faee6e2a4b04a2051c82ac0a0b5a773c9a/mypy-1.18.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6ca1e64b24a700ab5ce10133f7ccd956a04715463d30498e64ea8715236f9c9c", size = 12480242 }, - { url = "https://files.pythonhosted.org/packages/5b/11/040983fad5132d85914c874a2836252bbc57832065548885b5bb5b0d4359/mypy-1.18.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d924eef3795cc89fecf6bedc6ed32b33ac13e8321344f6ddbf8ee89f706c05cb", size = 13326683 }, - { url = "https://files.pythonhosted.org/packages/e9/ba/89b2901dd77414dd7a8c8729985832a5735053be15b744c18e4586e506ef/mypy-1.18.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:20c02215a080e3a2be3aa50506c67242df1c151eaba0dcbc1e4e557922a26075", size = 13514749 }, - { url = "https://files.pythonhosted.org/packages/25/bc/cc98767cffd6b2928ba680f3e5bc969c4152bf7c2d83f92f5a504b92b0eb/mypy-1.18.2-cp314-cp314-win_amd64.whl", hash = "sha256:749b5f83198f1ca64345603118a6f01a4e99ad4bf9d103ddc5a3200cc4614adf", size = 9982959 }, - { url = "https://files.pythonhosted.org/packages/87/e3/be76d87158ebafa0309946c4a73831974d4d6ab4f4ef40c3b53a385a66fd/mypy-1.18.2-py3-none-any.whl", hash = "sha256:22a1748707dd62b58d2ae53562ffc4d7f8bcc727e8ac7cbc69c053ddc874d47e", size = 2352367 }, +sdist = { url = "https://files.pythonhosted.org/packages/c0/77/8f0d0001ffad290cef2f7f216f96c814866248a0b92a722365ed54648e7e/mypy-1.18.2.tar.gz", hash = "sha256:06a398102a5f203d7477b2923dda3634c36727fa5c237d8f859ef90c42a9924b", size = 3448846, upload_time = "2025-09-19T00:11:10.519Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/06/dfdd2bc60c66611dd8335f463818514733bc763e4760dee289dcc33df709/mypy-1.18.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:33eca32dd124b29400c31d7cf784e795b050ace0e1f91b8dc035672725617e34", size = 12908273, upload_time = "2025-09-19T00:10:58.321Z" }, + { url = "https://files.pythonhosted.org/packages/81/14/6a9de6d13a122d5608e1a04130724caf9170333ac5a924e10f670687d3eb/mypy-1.18.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a3c47adf30d65e89b2dcd2fa32f3aeb5e94ca970d2c15fcb25e297871c8e4764", size = 11920910, upload_time = "2025-09-19T00:10:20.043Z" }, + { url = "https://files.pythonhosted.org/packages/5f/a9/b29de53e42f18e8cc547e38daa9dfa132ffdc64f7250e353f5c8cdd44bee/mypy-1.18.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5d6c838e831a062f5f29d11c9057c6009f60cb294fea33a98422688181fe2893", size = 12465585, upload_time = "2025-09-19T00:10:33.005Z" }, + { url = "https://files.pythonhosted.org/packages/77/ae/6c3d2c7c61ff21f2bee938c917616c92ebf852f015fb55917fd6e2811db2/mypy-1.18.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01199871b6110a2ce984bde85acd481232d17413868c9807e95c1b0739a58914", size = 13348562, upload_time = "2025-09-19T00:10:11.51Z" }, + { url = "https://files.pythonhosted.org/packages/4d/31/aec68ab3b4aebdf8f36d191b0685d99faa899ab990753ca0fee60fb99511/mypy-1.18.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a2afc0fa0b0e91b4599ddfe0f91e2c26c2b5a5ab263737e998d6817874c5f7c8", size = 13533296, upload_time = "2025-09-19T00:10:06.568Z" }, + { url = "https://files.pythonhosted.org/packages/9f/83/abcb3ad9478fca3ebeb6a5358bb0b22c95ea42b43b7789c7fb1297ca44f4/mypy-1.18.2-cp312-cp312-win_amd64.whl", hash = "sha256:d8068d0afe682c7c4897c0f7ce84ea77f6de953262b12d07038f4d296d547074", size = 9828828, upload_time = "2025-09-19T00:10:28.203Z" }, + { url = "https://files.pythonhosted.org/packages/5f/04/7f462e6fbba87a72bc8097b93f6842499c428a6ff0c81dd46948d175afe8/mypy-1.18.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:07b8b0f580ca6d289e69209ec9d3911b4a26e5abfde32228a288eb79df129fcc", size = 12898728, upload_time = "2025-09-19T00:10:01.33Z" }, + { url = "https://files.pythonhosted.org/packages/99/5b/61ed4efb64f1871b41fd0b82d29a64640f3516078f6c7905b68ab1ad8b13/mypy-1.18.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ed4482847168439651d3feee5833ccedbf6657e964572706a2adb1f7fa4dfe2e", size = 11910758, upload_time = "2025-09-19T00:10:42.607Z" }, + { url = "https://files.pythonhosted.org/packages/3c/46/d297d4b683cc89a6e4108c4250a6a6b717f5fa96e1a30a7944a6da44da35/mypy-1.18.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c3ad2afadd1e9fea5cf99a45a822346971ede8685cc581ed9cd4d42eaf940986", size = 12475342, upload_time = "2025-09-19T00:11:00.371Z" }, + { url = "https://files.pythonhosted.org/packages/83/45/4798f4d00df13eae3bfdf726c9244bcb495ab5bd588c0eed93a2f2dd67f3/mypy-1.18.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a431a6f1ef14cf8c144c6b14793a23ec4eae3db28277c358136e79d7d062f62d", size = 13338709, upload_time = "2025-09-19T00:11:03.358Z" }, + { url = "https://files.pythonhosted.org/packages/d7/09/479f7358d9625172521a87a9271ddd2441e1dab16a09708f056e97007207/mypy-1.18.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7ab28cc197f1dd77a67e1c6f35cd1f8e8b73ed2217e4fc005f9e6a504e46e7ba", size = 13529806, upload_time = "2025-09-19T00:10:26.073Z" }, + { url = "https://files.pythonhosted.org/packages/71/cf/ac0f2c7e9d0ea3c75cd99dff7aec1c9df4a1376537cb90e4c882267ee7e9/mypy-1.18.2-cp313-cp313-win_amd64.whl", hash = "sha256:0e2785a84b34a72ba55fb5daf079a1003a34c05b22238da94fcae2bbe46f3544", size = 9833262, upload_time = "2025-09-19T00:10:40.035Z" }, + { url = "https://files.pythonhosted.org/packages/5a/0c/7d5300883da16f0063ae53996358758b2a2df2a09c72a5061fa79a1f5006/mypy-1.18.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:62f0e1e988ad41c2a110edde6c398383a889d95b36b3e60bcf155f5164c4fdce", size = 12893775, upload_time = "2025-09-19T00:10:03.814Z" }, + { url = "https://files.pythonhosted.org/packages/50/df/2cffbf25737bdb236f60c973edf62e3e7b4ee1c25b6878629e88e2cde967/mypy-1.18.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:8795a039bab805ff0c1dfdb8cd3344642c2b99b8e439d057aba30850b8d3423d", size = 11936852, upload_time = "2025-09-19T00:10:51.631Z" }, + { url = "https://files.pythonhosted.org/packages/be/50/34059de13dd269227fb4a03be1faee6e2a4b04a2051c82ac0a0b5a773c9a/mypy-1.18.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6ca1e64b24a700ab5ce10133f7ccd956a04715463d30498e64ea8715236f9c9c", size = 12480242, upload_time = "2025-09-19T00:11:07.955Z" }, + { url = "https://files.pythonhosted.org/packages/5b/11/040983fad5132d85914c874a2836252bbc57832065548885b5bb5b0d4359/mypy-1.18.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d924eef3795cc89fecf6bedc6ed32b33ac13e8321344f6ddbf8ee89f706c05cb", size = 13326683, upload_time = "2025-09-19T00:09:55.572Z" }, + { url = "https://files.pythonhosted.org/packages/e9/ba/89b2901dd77414dd7a8c8729985832a5735053be15b744c18e4586e506ef/mypy-1.18.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:20c02215a080e3a2be3aa50506c67242df1c151eaba0dcbc1e4e557922a26075", size = 13514749, upload_time = "2025-09-19T00:10:44.827Z" }, + { url = "https://files.pythonhosted.org/packages/25/bc/cc98767cffd6b2928ba680f3e5bc969c4152bf7c2d83f92f5a504b92b0eb/mypy-1.18.2-cp314-cp314-win_amd64.whl", hash = "sha256:749b5f83198f1ca64345603118a6f01a4e99ad4bf9d103ddc5a3200cc4614adf", size = 9982959, upload_time = "2025-09-19T00:10:37.344Z" }, + { url = "https://files.pythonhosted.org/packages/87/e3/be76d87158ebafa0309946c4a73831974d4d6ab4f4ef40c3b53a385a66fd/mypy-1.18.2-py3-none-any.whl", hash = "sha256:22a1748707dd62b58d2ae53562ffc4d7f8bcc727e8ac7cbc69c053ddc874d47e", size = 2352367, upload_time = "2025-09-19T00:10:15.489Z" }, ] [[package]] name = "mypy-extensions" version = "1.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a2/6e/371856a3fb9d31ca8dac321cda606860fa4548858c0cc45d9d1d4ca2628b/mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558", size = 6343 } +sdist = { url = "https://files.pythonhosted.org/packages/a2/6e/371856a3fb9d31ca8dac321cda606860fa4548858c0cc45d9d1d4ca2628b/mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558", size = 6343, upload_time = "2025-04-22T14:54:24.164Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505", size = 4963 }, + { url = "https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505", size = 4963, upload_time = "2025-04-22T14:54:22.983Z" }, ] [[package]] @@ -1606,9 +1629,9 @@ dependencies = [ { name = "nbformat" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/87/66/7ffd18d58eae90d5721f9f39212327695b749e23ad44b3881744eaf4d9e8/nbclient-0.10.2.tar.gz", hash = "sha256:90b7fc6b810630db87a6d0c2250b1f0ab4cf4d3c27a299b0cde78a4ed3fd9193", size = 62424 } +sdist = { url = "https://files.pythonhosted.org/packages/87/66/7ffd18d58eae90d5721f9f39212327695b749e23ad44b3881744eaf4d9e8/nbclient-0.10.2.tar.gz", hash = "sha256:90b7fc6b810630db87a6d0c2250b1f0ab4cf4d3c27a299b0cde78a4ed3fd9193", size = 62424, upload_time = "2024-12-19T10:32:27.164Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/34/6d/e7fa07f03a4a7b221d94b4d586edb754a9b0dc3c9e2c93353e9fa4e0d117/nbclient-0.10.2-py3-none-any.whl", hash = "sha256:4ffee11e788b4a27fabeb7955547e4318a5298f34342a4bfd01f2e1faaeadc3d", size = 25434 }, + { url = "https://files.pythonhosted.org/packages/34/6d/e7fa07f03a4a7b221d94b4d586edb754a9b0dc3c9e2c93353e9fa4e0d117/nbclient-0.10.2-py3-none-any.whl", hash = "sha256:4ffee11e788b4a27fabeb7955547e4318a5298f34342a4bfd01f2e1faaeadc3d", size = 25434, upload_time = "2024-12-19T10:32:24.139Z" }, ] [[package]] @@ -1631,9 +1654,9 @@ dependencies = [ { name = "pygments" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a3/59/f28e15fc47ffb73af68a8d9b47367a8630d76e97ae85ad18271b9db96fdf/nbconvert-7.16.6.tar.gz", hash = "sha256:576a7e37c6480da7b8465eefa66c17844243816ce1ccc372633c6b71c3c0f582", size = 857715 } +sdist = { url = "https://files.pythonhosted.org/packages/a3/59/f28e15fc47ffb73af68a8d9b47367a8630d76e97ae85ad18271b9db96fdf/nbconvert-7.16.6.tar.gz", hash = "sha256:576a7e37c6480da7b8465eefa66c17844243816ce1ccc372633c6b71c3c0f582", size = 857715, upload_time = "2025-01-28T09:29:14.724Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/cc/9a/cd673b2f773a12c992f41309ef81b99da1690426bd2f96957a7ade0d3ed7/nbconvert-7.16.6-py3-none-any.whl", hash = "sha256:1375a7b67e0c2883678c48e506dc320febb57685e5ee67faa51b18a90f3a712b", size = 258525 }, + { url = "https://files.pythonhosted.org/packages/cc/9a/cd673b2f773a12c992f41309ef81b99da1690426bd2f96957a7ade0d3ed7/nbconvert-7.16.6-py3-none-any.whl", hash = "sha256:1375a7b67e0c2883678c48e506dc320febb57685e5ee67faa51b18a90f3a712b", size = 258525, upload_time = "2025-01-28T09:29:12.551Z" }, ] [[package]] @@ -1646,115 +1669,118 @@ dependencies = [ { name = "jupyter-core" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/6d/fd/91545e604bc3dad7dca9ed03284086039b294c6b3d75c0d2fa45f9e9caf3/nbformat-5.10.4.tar.gz", hash = "sha256:322168b14f937a5d11362988ecac2a4952d3d8e3a2cbeb2319584631226d5b3a", size = 142749 } +sdist = { url = "https://files.pythonhosted.org/packages/6d/fd/91545e604bc3dad7dca9ed03284086039b294c6b3d75c0d2fa45f9e9caf3/nbformat-5.10.4.tar.gz", hash = "sha256:322168b14f937a5d11362988ecac2a4952d3d8e3a2cbeb2319584631226d5b3a", size = 142749, upload_time = "2024-04-04T11:20:37.371Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl", hash = "sha256:3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b", size = 78454 }, + { url = "https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl", hash = "sha256:3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b", size = 78454, upload_time = "2024-04-04T11:20:34.895Z" }, ] [[package]] name = "nest-asyncio" version = "1.6.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/83/f8/51569ac65d696c8ecbee95938f89d4abf00f47d58d48f6fbabfe8f0baefe/nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe", size = 7418 } +sdist = { url = "https://files.pythonhosted.org/packages/83/f8/51569ac65d696c8ecbee95938f89d4abf00f47d58d48f6fbabfe8f0baefe/nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe", size = 7418, upload_time = "2024-01-21T14:25:19.227Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c", size = 5195 }, + { url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c", size = 5195, upload_time = "2024-01-21T14:25:17.223Z" }, ] [[package]] name = "networkx" version = "3.5" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6c/4f/ccdb8ad3a38e583f214547fd2f7ff1fc160c43a75af88e6aec213404b96a/networkx-3.5.tar.gz", hash = "sha256:d4c6f9cf81f52d69230866796b82afbccdec3db7ae4fbd1b65ea750feed50037", size = 2471065 } +sdist = { url = "https://files.pythonhosted.org/packages/6c/4f/ccdb8ad3a38e583f214547fd2f7ff1fc160c43a75af88e6aec213404b96a/networkx-3.5.tar.gz", hash = "sha256:d4c6f9cf81f52d69230866796b82afbccdec3db7ae4fbd1b65ea750feed50037", size = 2471065, upload_time = "2025-05-29T11:35:07.804Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/eb/8d/776adee7bbf76365fdd7f2552710282c79a4ead5d2a46408c9043a2b70ba/networkx-3.5-py3-none-any.whl", hash = "sha256:0030d386a9a06dee3565298b4a734b68589749a544acbb6c412dc9e2489ec6ec", size = 2034406 }, + { url = "https://files.pythonhosted.org/packages/eb/8d/776adee7bbf76365fdd7f2552710282c79a4ead5d2a46408c9043a2b70ba/networkx-3.5-py3-none-any.whl", hash = "sha256:0030d386a9a06dee3565298b4a734b68589749a544acbb6c412dc9e2489ec6ec", size = 2034406, upload_time = "2025-05-29T11:35:04.961Z" }, ] [[package]] name = "nodeenv" version = "1.9.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/43/16/fc88b08840de0e0a72a2f9d8c6bae36be573e475a6326ae854bcc549fc45/nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f", size = 47437 } +sdist = { url = "https://files.pythonhosted.org/packages/43/16/fc88b08840de0e0a72a2f9d8c6bae36be573e475a6326ae854bcc549fc45/nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f", size = 47437, upload_time = "2024-06-04T18:44:11.171Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d2/1d/1b658dbd2b9fa9c4c9f32accbfc0205d532c8c6194dc0f2a4c0428e7128a/nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9", size = 22314 }, + { url = "https://files.pythonhosted.org/packages/d2/1d/1b658dbd2b9fa9c4c9f32accbfc0205d532c8c6194dc0f2a4c0428e7128a/nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9", size = 22314, upload_time = "2024-06-04T18:44:08.352Z" }, ] [[package]] name = "numpy" version = "2.3.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d0/19/95b3d357407220ed24c139018d2518fab0a61a948e68286a25f1a4d049ff/numpy-2.3.3.tar.gz", hash = "sha256:ddc7c39727ba62b80dfdbedf400d1c10ddfa8eefbd7ec8dcb118be8b56d31029", size = 20576648 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/51/5d/bb7fc075b762c96329147799e1bcc9176ab07ca6375ea976c475482ad5b3/numpy-2.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cfdd09f9c84a1a934cde1eec2267f0a43a7cd44b2cca4ff95b7c0d14d144b0bf", size = 20957014 }, - { url = "https://files.pythonhosted.org/packages/6b/0e/c6211bb92af26517acd52125a237a92afe9c3124c6a68d3b9f81b62a0568/numpy-2.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cb32e3cf0f762aee47ad1ddc6672988f7f27045b0783c887190545baba73aa25", size = 14185220 }, - { url = "https://files.pythonhosted.org/packages/22/f2/07bb754eb2ede9073f4054f7c0286b0d9d2e23982e090a80d478b26d35ca/numpy-2.3.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:396b254daeb0a57b1fe0ecb5e3cff6fa79a380fa97c8f7781a6d08cd429418fe", size = 5113918 }, - { url = "https://files.pythonhosted.org/packages/81/0a/afa51697e9fb74642f231ea36aca80fa17c8fb89f7a82abd5174023c3960/numpy-2.3.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:067e3d7159a5d8f8a0b46ee11148fc35ca9b21f61e3c49fbd0a027450e65a33b", size = 6647922 }, - { url = "https://files.pythonhosted.org/packages/5d/f5/122d9cdb3f51c520d150fef6e87df9279e33d19a9611a87c0d2cf78a89f4/numpy-2.3.3-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c02d0629d25d426585fb2e45a66154081b9fa677bc92a881ff1d216bc9919a8", size = 14281991 }, - { url = "https://files.pythonhosted.org/packages/51/64/7de3c91e821a2debf77c92962ea3fe6ac2bc45d0778c1cbe15d4fce2fd94/numpy-2.3.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d9192da52b9745f7f0766531dcfa978b7763916f158bb63bdb8a1eca0068ab20", size = 16641643 }, - { url = "https://files.pythonhosted.org/packages/30/e4/961a5fa681502cd0d68907818b69f67542695b74e3ceaa513918103b7e80/numpy-2.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:cd7de500a5b66319db419dc3c345244404a164beae0d0937283b907d8152e6ea", size = 16056787 }, - { url = "https://files.pythonhosted.org/packages/99/26/92c912b966e47fbbdf2ad556cb17e3a3088e2e1292b9833be1dfa5361a1a/numpy-2.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:93d4962d8f82af58f0b2eb85daaf1b3ca23fe0a85d0be8f1f2b7bb46034e56d7", size = 18579598 }, - { url = "https://files.pythonhosted.org/packages/17/b6/fc8f82cb3520768718834f310c37d96380d9dc61bfdaf05fe5c0b7653e01/numpy-2.3.3-cp312-cp312-win32.whl", hash = "sha256:5534ed6b92f9b7dca6c0a19d6df12d41c68b991cef051d108f6dbff3babc4ebf", size = 6320800 }, - { url = "https://files.pythonhosted.org/packages/32/ee/de999f2625b80d043d6d2d628c07d0d5555a677a3cf78fdf868d409b8766/numpy-2.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:497d7cad08e7092dba36e3d296fe4c97708c93daf26643a1ae4b03f6294d30eb", size = 12786615 }, - { url = "https://files.pythonhosted.org/packages/49/6e/b479032f8a43559c383acb20816644f5f91c88f633d9271ee84f3b3a996c/numpy-2.3.3-cp312-cp312-win_arm64.whl", hash = "sha256:ca0309a18d4dfea6fc6262a66d06c26cfe4640c3926ceec90e57791a82b6eee5", size = 10195936 }, - { url = "https://files.pythonhosted.org/packages/7d/b9/984c2b1ee61a8b803bf63582b4ac4242cf76e2dbd663efeafcb620cc0ccb/numpy-2.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f5415fb78995644253370985342cd03572ef8620b934da27d77377a2285955bf", size = 20949588 }, - { url = "https://files.pythonhosted.org/packages/a6/e4/07970e3bed0b1384d22af1e9912527ecbeb47d3b26e9b6a3bced068b3bea/numpy-2.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d00de139a3324e26ed5b95870ce63be7ec7352171bc69a4cf1f157a48e3eb6b7", size = 14177802 }, - { url = "https://files.pythonhosted.org/packages/35/c7/477a83887f9de61f1203bad89cf208b7c19cc9fef0cebef65d5a1a0619f2/numpy-2.3.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:9dc13c6a5829610cc07422bc74d3ac083bd8323f14e2827d992f9e52e22cd6a6", size = 5106537 }, - { url = "https://files.pythonhosted.org/packages/52/47/93b953bd5866a6f6986344d045a207d3f1cfbad99db29f534ea9cee5108c/numpy-2.3.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:d79715d95f1894771eb4e60fb23f065663b2298f7d22945d66877aadf33d00c7", size = 6640743 }, - { url = "https://files.pythonhosted.org/packages/23/83/377f84aaeb800b64c0ef4de58b08769e782edcefa4fea712910b6f0afd3c/numpy-2.3.3-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:952cfd0748514ea7c3afc729a0fc639e61655ce4c55ab9acfab14bda4f402b4c", size = 14278881 }, - { url = "https://files.pythonhosted.org/packages/9a/a5/bf3db6e66c4b160d6ea10b534c381a1955dfab34cb1017ea93aa33c70ed3/numpy-2.3.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5b83648633d46f77039c29078751f80da65aa64d5622a3cd62aaef9d835b6c93", size = 16636301 }, - { url = "https://files.pythonhosted.org/packages/a2/59/1287924242eb4fa3f9b3a2c30400f2e17eb2707020d1c5e3086fe7330717/numpy-2.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b001bae8cea1c7dfdb2ae2b017ed0a6f2102d7a70059df1e338e307a4c78a8ae", size = 16053645 }, - { url = "https://files.pythonhosted.org/packages/e6/93/b3d47ed882027c35e94ac2320c37e452a549f582a5e801f2d34b56973c97/numpy-2.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8e9aced64054739037d42fb84c54dd38b81ee238816c948c8f3ed134665dcd86", size = 18578179 }, - { url = "https://files.pythonhosted.org/packages/20/d9/487a2bccbf7cc9d4bfc5f0f197761a5ef27ba870f1e3bbb9afc4bbe3fcc2/numpy-2.3.3-cp313-cp313-win32.whl", hash = "sha256:9591e1221db3f37751e6442850429b3aabf7026d3b05542d102944ca7f00c8a8", size = 6312250 }, - { url = "https://files.pythonhosted.org/packages/1b/b5/263ebbbbcede85028f30047eab3d58028d7ebe389d6493fc95ae66c636ab/numpy-2.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:f0dadeb302887f07431910f67a14d57209ed91130be0adea2f9793f1a4f817cf", size = 12783269 }, - { url = "https://files.pythonhosted.org/packages/fa/75/67b8ca554bbeaaeb3fac2e8bce46967a5a06544c9108ec0cf5cece559b6c/numpy-2.3.3-cp313-cp313-win_arm64.whl", hash = "sha256:3c7cf302ac6e0b76a64c4aecf1a09e51abd9b01fc7feee80f6c43e3ab1b1dbc5", size = 10195314 }, - { url = "https://files.pythonhosted.org/packages/11/d0/0d1ddec56b162042ddfafeeb293bac672de9b0cfd688383590090963720a/numpy-2.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:eda59e44957d272846bb407aad19f89dc6f58fecf3504bd144f4c5cf81a7eacc", size = 21048025 }, - { url = "https://files.pythonhosted.org/packages/36/9e/1996ca6b6d00415b6acbdd3c42f7f03ea256e2c3f158f80bd7436a8a19f3/numpy-2.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:823d04112bc85ef5c4fda73ba24e6096c8f869931405a80aa8b0e604510a26bc", size = 14301053 }, - { url = "https://files.pythonhosted.org/packages/05/24/43da09aa764c68694b76e84b3d3f0c44cb7c18cdc1ba80e48b0ac1d2cd39/numpy-2.3.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:40051003e03db4041aa325da2a0971ba41cf65714e65d296397cc0e32de6018b", size = 5229444 }, - { url = "https://files.pythonhosted.org/packages/bc/14/50ffb0f22f7218ef8af28dd089f79f68289a7a05a208db9a2c5dcbe123c1/numpy-2.3.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:6ee9086235dd6ab7ae75aba5662f582a81ced49f0f1c6de4260a78d8f2d91a19", size = 6738039 }, - { url = "https://files.pythonhosted.org/packages/55/52/af46ac0795e09657d45a7f4db961917314377edecf66db0e39fa7ab5c3d3/numpy-2.3.3-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:94fcaa68757c3e2e668ddadeaa86ab05499a70725811e582b6a9858dd472fb30", size = 14352314 }, - { url = "https://files.pythonhosted.org/packages/a7/b1/dc226b4c90eb9f07a3fff95c2f0db3268e2e54e5cce97c4ac91518aee71b/numpy-2.3.3-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:da1a74b90e7483d6ce5244053399a614b1d6b7bc30a60d2f570e5071f8959d3e", size = 16701722 }, - { url = "https://files.pythonhosted.org/packages/9d/9d/9d8d358f2eb5eced14dba99f110d83b5cd9a4460895230f3b396ad19a323/numpy-2.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2990adf06d1ecee3b3dcbb4977dfab6e9f09807598d647f04d385d29e7a3c3d3", size = 16132755 }, - { url = "https://files.pythonhosted.org/packages/b6/27/b3922660c45513f9377b3fb42240bec63f203c71416093476ec9aa0719dc/numpy-2.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ed635ff692483b8e3f0fcaa8e7eb8a75ee71aa6d975388224f70821421800cea", size = 18651560 }, - { url = "https://files.pythonhosted.org/packages/5b/8e/3ab61a730bdbbc201bb245a71102aa609f0008b9ed15255500a99cd7f780/numpy-2.3.3-cp313-cp313t-win32.whl", hash = "sha256:a333b4ed33d8dc2b373cc955ca57babc00cd6f9009991d9edc5ddbc1bac36bcd", size = 6442776 }, - { url = "https://files.pythonhosted.org/packages/1c/3a/e22b766b11f6030dc2decdeff5c2fb1610768055603f9f3be88b6d192fb2/numpy-2.3.3-cp313-cp313t-win_amd64.whl", hash = "sha256:4384a169c4d8f97195980815d6fcad04933a7e1ab3b530921c3fef7a1c63426d", size = 12927281 }, - { url = "https://files.pythonhosted.org/packages/7b/42/c2e2bc48c5e9b2a83423f99733950fbefd86f165b468a3d85d52b30bf782/numpy-2.3.3-cp313-cp313t-win_arm64.whl", hash = "sha256:75370986cc0bc66f4ce5110ad35aae6d182cc4ce6433c40ad151f53690130bf1", size = 10265275 }, - { url = "https://files.pythonhosted.org/packages/6b/01/342ad585ad82419b99bcf7cebe99e61da6bedb89e213c5fd71acc467faee/numpy-2.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:cd052f1fa6a78dee696b58a914b7229ecfa41f0a6d96dc663c1220a55e137593", size = 20951527 }, - { url = "https://files.pythonhosted.org/packages/ef/d8/204e0d73fc1b7a9ee80ab1fe1983dd33a4d64a4e30a05364b0208e9a241a/numpy-2.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:414a97499480067d305fcac9716c29cf4d0d76db6ebf0bf3cbce666677f12652", size = 14186159 }, - { url = "https://files.pythonhosted.org/packages/22/af/f11c916d08f3a18fb8ba81ab72b5b74a6e42ead4c2846d270eb19845bf74/numpy-2.3.3-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:50a5fe69f135f88a2be9b6ca0481a68a136f6febe1916e4920e12f1a34e708a7", size = 5114624 }, - { url = "https://files.pythonhosted.org/packages/fb/11/0ed919c8381ac9d2ffacd63fd1f0c34d27e99cab650f0eb6f110e6ae4858/numpy-2.3.3-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:b912f2ed2b67a129e6a601e9d93d4fa37bef67e54cac442a2f588a54afe5c67a", size = 6642627 }, - { url = "https://files.pythonhosted.org/packages/ee/83/deb5f77cb0f7ba6cb52b91ed388b47f8f3c2e9930d4665c600408d9b90b9/numpy-2.3.3-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9e318ee0596d76d4cb3d78535dc005fa60e5ea348cd131a51e99d0bdbe0b54fe", size = 14296926 }, - { url = "https://files.pythonhosted.org/packages/77/cc/70e59dcb84f2b005d4f306310ff0a892518cc0c8000a33d0e6faf7ca8d80/numpy-2.3.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ce020080e4a52426202bdb6f7691c65bb55e49f261f31a8f506c9f6bc7450421", size = 16638958 }, - { url = "https://files.pythonhosted.org/packages/b6/5a/b2ab6c18b4257e099587d5b7f903317bd7115333ad8d4ec4874278eafa61/numpy-2.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e6687dc183aa55dae4a705b35f9c0f8cb178bcaa2f029b241ac5356221d5c021", size = 16071920 }, - { url = "https://files.pythonhosted.org/packages/b8/f1/8b3fdc44324a259298520dd82147ff648979bed085feeacc1250ef1656c0/numpy-2.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d8f3b1080782469fdc1718c4ed1d22549b5fb12af0d57d35e992158a772a37cf", size = 18577076 }, - { url = "https://files.pythonhosted.org/packages/f0/a1/b87a284fb15a42e9274e7fcea0dad259d12ddbf07c1595b26883151ca3b4/numpy-2.3.3-cp314-cp314-win32.whl", hash = "sha256:cb248499b0bc3be66ebd6578b83e5acacf1d6cb2a77f2248ce0e40fbec5a76d0", size = 6366952 }, - { url = "https://files.pythonhosted.org/packages/70/5f/1816f4d08f3b8f66576d8433a66f8fa35a5acfb3bbd0bf6c31183b003f3d/numpy-2.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:691808c2b26b0f002a032c73255d0bd89751425f379f7bcd22d140db593a96e8", size = 12919322 }, - { url = "https://files.pythonhosted.org/packages/8c/de/072420342e46a8ea41c324a555fa90fcc11637583fb8df722936aed1736d/numpy-2.3.3-cp314-cp314-win_arm64.whl", hash = "sha256:9ad12e976ca7b10f1774b03615a2a4bab8addce37ecc77394d8e986927dc0dfe", size = 10478630 }, - { url = "https://files.pythonhosted.org/packages/d5/df/ee2f1c0a9de7347f14da5dd3cd3c3b034d1b8607ccb6883d7dd5c035d631/numpy-2.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9cc48e09feb11e1db00b320e9d30a4151f7369afb96bd0e48d942d09da3a0d00", size = 21047987 }, - { url = "https://files.pythonhosted.org/packages/d6/92/9453bdc5a4e9e69cf4358463f25e8260e2ffc126d52e10038b9077815989/numpy-2.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:901bf6123879b7f251d3631967fd574690734236075082078e0571977c6a8e6a", size = 14301076 }, - { url = "https://files.pythonhosted.org/packages/13/77/1447b9eb500f028bb44253105bd67534af60499588a5149a94f18f2ca917/numpy-2.3.3-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:7f025652034199c301049296b59fa7d52c7e625017cae4c75d8662e377bf487d", size = 5229491 }, - { url = "https://files.pythonhosted.org/packages/3d/f9/d72221b6ca205f9736cb4b2ce3b002f6e45cd67cd6a6d1c8af11a2f0b649/numpy-2.3.3-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:533ca5f6d325c80b6007d4d7fb1984c303553534191024ec6a524a4c92a5935a", size = 6737913 }, - { url = "https://files.pythonhosted.org/packages/3c/5f/d12834711962ad9c46af72f79bb31e73e416ee49d17f4c797f72c96b6ca5/numpy-2.3.3-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0edd58682a399824633b66885d699d7de982800053acf20be1eaa46d92009c54", size = 14352811 }, - { url = "https://files.pythonhosted.org/packages/a1/0d/fdbec6629d97fd1bebed56cd742884e4eead593611bbe1abc3eb40d304b2/numpy-2.3.3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:367ad5d8fbec5d9296d18478804a530f1191e24ab4d75ab408346ae88045d25e", size = 16702689 }, - { url = "https://files.pythonhosted.org/packages/9b/09/0a35196dc5575adde1eb97ddfbc3e1687a814f905377621d18ca9bc2b7dd/numpy-2.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8f6ac61a217437946a1fa48d24c47c91a0c4f725237871117dea264982128097", size = 16133855 }, - { url = "https://files.pythonhosted.org/packages/7a/ca/c9de3ea397d576f1b6753eaa906d4cdef1bf97589a6d9825a349b4729cc2/numpy-2.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:179a42101b845a816d464b6fe9a845dfaf308fdfc7925387195570789bb2c970", size = 18652520 }, - { url = "https://files.pythonhosted.org/packages/fd/c2/e5ed830e08cd0196351db55db82f65bc0ab05da6ef2b72a836dcf1936d2f/numpy-2.3.3-cp314-cp314t-win32.whl", hash = "sha256:1250c5d3d2562ec4174bce2e3a1523041595f9b651065e4a4473f5f48a6bc8a5", size = 6515371 }, - { url = "https://files.pythonhosted.org/packages/47/c7/b0f6b5b67f6788a0725f744496badbb604d226bf233ba716683ebb47b570/numpy-2.3.3-cp314-cp314t-win_amd64.whl", hash = "sha256:b37a0b2e5935409daebe82c1e42274d30d9dd355852529eab91dab8dcca7419f", size = 13112576 }, - { url = "https://files.pythonhosted.org/packages/06/b9/33bba5ff6fb679aa0b1f8a07e853f002a6b04b9394db3069a1270a7784ca/numpy-2.3.3-cp314-cp314t-win_arm64.whl", hash = "sha256:78c9f6560dc7e6b3990e32df7ea1a50bbd0e2a111e05209963f5ddcab7073b0b", size = 10545953 }, +sdist = { url = "https://files.pythonhosted.org/packages/d0/19/95b3d357407220ed24c139018d2518fab0a61a948e68286a25f1a4d049ff/numpy-2.3.3.tar.gz", hash = "sha256:ddc7c39727ba62b80dfdbedf400d1c10ddfa8eefbd7ec8dcb118be8b56d31029", size = 20576648, upload_time = "2025-09-09T16:54:12.543Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/5d/bb7fc075b762c96329147799e1bcc9176ab07ca6375ea976c475482ad5b3/numpy-2.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cfdd09f9c84a1a934cde1eec2267f0a43a7cd44b2cca4ff95b7c0d14d144b0bf", size = 20957014, upload_time = "2025-09-09T15:56:29.966Z" }, + { url = "https://files.pythonhosted.org/packages/6b/0e/c6211bb92af26517acd52125a237a92afe9c3124c6a68d3b9f81b62a0568/numpy-2.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cb32e3cf0f762aee47ad1ddc6672988f7f27045b0783c887190545baba73aa25", size = 14185220, upload_time = "2025-09-09T15:56:32.175Z" }, + { url = "https://files.pythonhosted.org/packages/22/f2/07bb754eb2ede9073f4054f7c0286b0d9d2e23982e090a80d478b26d35ca/numpy-2.3.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:396b254daeb0a57b1fe0ecb5e3cff6fa79a380fa97c8f7781a6d08cd429418fe", size = 5113918, upload_time = "2025-09-09T15:56:34.175Z" }, + { url = "https://files.pythonhosted.org/packages/81/0a/afa51697e9fb74642f231ea36aca80fa17c8fb89f7a82abd5174023c3960/numpy-2.3.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:067e3d7159a5d8f8a0b46ee11148fc35ca9b21f61e3c49fbd0a027450e65a33b", size = 6647922, upload_time = "2025-09-09T15:56:36.149Z" }, + { url = "https://files.pythonhosted.org/packages/5d/f5/122d9cdb3f51c520d150fef6e87df9279e33d19a9611a87c0d2cf78a89f4/numpy-2.3.3-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c02d0629d25d426585fb2e45a66154081b9fa677bc92a881ff1d216bc9919a8", size = 14281991, upload_time = "2025-09-09T15:56:40.548Z" }, + { url = "https://files.pythonhosted.org/packages/51/64/7de3c91e821a2debf77c92962ea3fe6ac2bc45d0778c1cbe15d4fce2fd94/numpy-2.3.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d9192da52b9745f7f0766531dcfa978b7763916f158bb63bdb8a1eca0068ab20", size = 16641643, upload_time = "2025-09-09T15:56:43.343Z" }, + { url = "https://files.pythonhosted.org/packages/30/e4/961a5fa681502cd0d68907818b69f67542695b74e3ceaa513918103b7e80/numpy-2.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:cd7de500a5b66319db419dc3c345244404a164beae0d0937283b907d8152e6ea", size = 16056787, upload_time = "2025-09-09T15:56:46.141Z" }, + { url = "https://files.pythonhosted.org/packages/99/26/92c912b966e47fbbdf2ad556cb17e3a3088e2e1292b9833be1dfa5361a1a/numpy-2.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:93d4962d8f82af58f0b2eb85daaf1b3ca23fe0a85d0be8f1f2b7bb46034e56d7", size = 18579598, upload_time = "2025-09-09T15:56:49.844Z" }, + { url = "https://files.pythonhosted.org/packages/17/b6/fc8f82cb3520768718834f310c37d96380d9dc61bfdaf05fe5c0b7653e01/numpy-2.3.3-cp312-cp312-win32.whl", hash = "sha256:5534ed6b92f9b7dca6c0a19d6df12d41c68b991cef051d108f6dbff3babc4ebf", size = 6320800, upload_time = "2025-09-09T15:56:52.499Z" }, + { url = "https://files.pythonhosted.org/packages/32/ee/de999f2625b80d043d6d2d628c07d0d5555a677a3cf78fdf868d409b8766/numpy-2.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:497d7cad08e7092dba36e3d296fe4c97708c93daf26643a1ae4b03f6294d30eb", size = 12786615, upload_time = "2025-09-09T15:56:54.422Z" }, + { url = "https://files.pythonhosted.org/packages/49/6e/b479032f8a43559c383acb20816644f5f91c88f633d9271ee84f3b3a996c/numpy-2.3.3-cp312-cp312-win_arm64.whl", hash = "sha256:ca0309a18d4dfea6fc6262a66d06c26cfe4640c3926ceec90e57791a82b6eee5", size = 10195936, upload_time = "2025-09-09T15:56:56.541Z" }, + { url = "https://files.pythonhosted.org/packages/7d/b9/984c2b1ee61a8b803bf63582b4ac4242cf76e2dbd663efeafcb620cc0ccb/numpy-2.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f5415fb78995644253370985342cd03572ef8620b934da27d77377a2285955bf", size = 20949588, upload_time = "2025-09-09T15:56:59.087Z" }, + { url = "https://files.pythonhosted.org/packages/a6/e4/07970e3bed0b1384d22af1e9912527ecbeb47d3b26e9b6a3bced068b3bea/numpy-2.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d00de139a3324e26ed5b95870ce63be7ec7352171bc69a4cf1f157a48e3eb6b7", size = 14177802, upload_time = "2025-09-09T15:57:01.73Z" }, + { url = "https://files.pythonhosted.org/packages/35/c7/477a83887f9de61f1203bad89cf208b7c19cc9fef0cebef65d5a1a0619f2/numpy-2.3.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:9dc13c6a5829610cc07422bc74d3ac083bd8323f14e2827d992f9e52e22cd6a6", size = 5106537, upload_time = "2025-09-09T15:57:03.765Z" }, + { url = "https://files.pythonhosted.org/packages/52/47/93b953bd5866a6f6986344d045a207d3f1cfbad99db29f534ea9cee5108c/numpy-2.3.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:d79715d95f1894771eb4e60fb23f065663b2298f7d22945d66877aadf33d00c7", size = 6640743, upload_time = "2025-09-09T15:57:07.921Z" }, + { url = "https://files.pythonhosted.org/packages/23/83/377f84aaeb800b64c0ef4de58b08769e782edcefa4fea712910b6f0afd3c/numpy-2.3.3-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:952cfd0748514ea7c3afc729a0fc639e61655ce4c55ab9acfab14bda4f402b4c", size = 14278881, upload_time = "2025-09-09T15:57:11.349Z" }, + { url = "https://files.pythonhosted.org/packages/9a/a5/bf3db6e66c4b160d6ea10b534c381a1955dfab34cb1017ea93aa33c70ed3/numpy-2.3.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5b83648633d46f77039c29078751f80da65aa64d5622a3cd62aaef9d835b6c93", size = 16636301, upload_time = "2025-09-09T15:57:14.245Z" }, + { url = "https://files.pythonhosted.org/packages/a2/59/1287924242eb4fa3f9b3a2c30400f2e17eb2707020d1c5e3086fe7330717/numpy-2.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b001bae8cea1c7dfdb2ae2b017ed0a6f2102d7a70059df1e338e307a4c78a8ae", size = 16053645, upload_time = "2025-09-09T15:57:16.534Z" }, + { url = "https://files.pythonhosted.org/packages/e6/93/b3d47ed882027c35e94ac2320c37e452a549f582a5e801f2d34b56973c97/numpy-2.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8e9aced64054739037d42fb84c54dd38b81ee238816c948c8f3ed134665dcd86", size = 18578179, upload_time = "2025-09-09T15:57:18.883Z" }, + { url = "https://files.pythonhosted.org/packages/20/d9/487a2bccbf7cc9d4bfc5f0f197761a5ef27ba870f1e3bbb9afc4bbe3fcc2/numpy-2.3.3-cp313-cp313-win32.whl", hash = "sha256:9591e1221db3f37751e6442850429b3aabf7026d3b05542d102944ca7f00c8a8", size = 6312250, upload_time = "2025-09-09T15:57:21.296Z" }, + { url = "https://files.pythonhosted.org/packages/1b/b5/263ebbbbcede85028f30047eab3d58028d7ebe389d6493fc95ae66c636ab/numpy-2.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:f0dadeb302887f07431910f67a14d57209ed91130be0adea2f9793f1a4f817cf", size = 12783269, upload_time = "2025-09-09T15:57:23.034Z" }, + { url = "https://files.pythonhosted.org/packages/fa/75/67b8ca554bbeaaeb3fac2e8bce46967a5a06544c9108ec0cf5cece559b6c/numpy-2.3.3-cp313-cp313-win_arm64.whl", hash = "sha256:3c7cf302ac6e0b76a64c4aecf1a09e51abd9b01fc7feee80f6c43e3ab1b1dbc5", size = 10195314, upload_time = "2025-09-09T15:57:25.045Z" }, + { url = "https://files.pythonhosted.org/packages/11/d0/0d1ddec56b162042ddfafeeb293bac672de9b0cfd688383590090963720a/numpy-2.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:eda59e44957d272846bb407aad19f89dc6f58fecf3504bd144f4c5cf81a7eacc", size = 21048025, upload_time = "2025-09-09T15:57:27.257Z" }, + { url = "https://files.pythonhosted.org/packages/36/9e/1996ca6b6d00415b6acbdd3c42f7f03ea256e2c3f158f80bd7436a8a19f3/numpy-2.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:823d04112bc85ef5c4fda73ba24e6096c8f869931405a80aa8b0e604510a26bc", size = 14301053, upload_time = "2025-09-09T15:57:30.077Z" }, + { url = "https://files.pythonhosted.org/packages/05/24/43da09aa764c68694b76e84b3d3f0c44cb7c18cdc1ba80e48b0ac1d2cd39/numpy-2.3.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:40051003e03db4041aa325da2a0971ba41cf65714e65d296397cc0e32de6018b", size = 5229444, upload_time = "2025-09-09T15:57:32.733Z" }, + { url = "https://files.pythonhosted.org/packages/bc/14/50ffb0f22f7218ef8af28dd089f79f68289a7a05a208db9a2c5dcbe123c1/numpy-2.3.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:6ee9086235dd6ab7ae75aba5662f582a81ced49f0f1c6de4260a78d8f2d91a19", size = 6738039, upload_time = "2025-09-09T15:57:34.328Z" }, + { url = "https://files.pythonhosted.org/packages/55/52/af46ac0795e09657d45a7f4db961917314377edecf66db0e39fa7ab5c3d3/numpy-2.3.3-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:94fcaa68757c3e2e668ddadeaa86ab05499a70725811e582b6a9858dd472fb30", size = 14352314, upload_time = "2025-09-09T15:57:36.255Z" }, + { url = "https://files.pythonhosted.org/packages/a7/b1/dc226b4c90eb9f07a3fff95c2f0db3268e2e54e5cce97c4ac91518aee71b/numpy-2.3.3-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:da1a74b90e7483d6ce5244053399a614b1d6b7bc30a60d2f570e5071f8959d3e", size = 16701722, upload_time = "2025-09-09T15:57:38.622Z" }, + { url = "https://files.pythonhosted.org/packages/9d/9d/9d8d358f2eb5eced14dba99f110d83b5cd9a4460895230f3b396ad19a323/numpy-2.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2990adf06d1ecee3b3dcbb4977dfab6e9f09807598d647f04d385d29e7a3c3d3", size = 16132755, upload_time = "2025-09-09T15:57:41.16Z" }, + { url = "https://files.pythonhosted.org/packages/b6/27/b3922660c45513f9377b3fb42240bec63f203c71416093476ec9aa0719dc/numpy-2.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ed635ff692483b8e3f0fcaa8e7eb8a75ee71aa6d975388224f70821421800cea", size = 18651560, upload_time = "2025-09-09T15:57:43.459Z" }, + { url = "https://files.pythonhosted.org/packages/5b/8e/3ab61a730bdbbc201bb245a71102aa609f0008b9ed15255500a99cd7f780/numpy-2.3.3-cp313-cp313t-win32.whl", hash = "sha256:a333b4ed33d8dc2b373cc955ca57babc00cd6f9009991d9edc5ddbc1bac36bcd", size = 6442776, upload_time = "2025-09-09T15:57:45.793Z" }, + { url = "https://files.pythonhosted.org/packages/1c/3a/e22b766b11f6030dc2decdeff5c2fb1610768055603f9f3be88b6d192fb2/numpy-2.3.3-cp313-cp313t-win_amd64.whl", hash = "sha256:4384a169c4d8f97195980815d6fcad04933a7e1ab3b530921c3fef7a1c63426d", size = 12927281, upload_time = "2025-09-09T15:57:47.492Z" }, + { url = "https://files.pythonhosted.org/packages/7b/42/c2e2bc48c5e9b2a83423f99733950fbefd86f165b468a3d85d52b30bf782/numpy-2.3.3-cp313-cp313t-win_arm64.whl", hash = "sha256:75370986cc0bc66f4ce5110ad35aae6d182cc4ce6433c40ad151f53690130bf1", size = 10265275, upload_time = "2025-09-09T15:57:49.647Z" }, + { url = "https://files.pythonhosted.org/packages/6b/01/342ad585ad82419b99bcf7cebe99e61da6bedb89e213c5fd71acc467faee/numpy-2.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:cd052f1fa6a78dee696b58a914b7229ecfa41f0a6d96dc663c1220a55e137593", size = 20951527, upload_time = "2025-09-09T15:57:52.006Z" }, + { url = "https://files.pythonhosted.org/packages/ef/d8/204e0d73fc1b7a9ee80ab1fe1983dd33a4d64a4e30a05364b0208e9a241a/numpy-2.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:414a97499480067d305fcac9716c29cf4d0d76db6ebf0bf3cbce666677f12652", size = 14186159, upload_time = "2025-09-09T15:57:54.407Z" }, + { url = "https://files.pythonhosted.org/packages/22/af/f11c916d08f3a18fb8ba81ab72b5b74a6e42ead4c2846d270eb19845bf74/numpy-2.3.3-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:50a5fe69f135f88a2be9b6ca0481a68a136f6febe1916e4920e12f1a34e708a7", size = 5114624, upload_time = "2025-09-09T15:57:56.5Z" }, + { url = "https://files.pythonhosted.org/packages/fb/11/0ed919c8381ac9d2ffacd63fd1f0c34d27e99cab650f0eb6f110e6ae4858/numpy-2.3.3-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:b912f2ed2b67a129e6a601e9d93d4fa37bef67e54cac442a2f588a54afe5c67a", size = 6642627, upload_time = "2025-09-09T15:57:58.206Z" }, + { url = "https://files.pythonhosted.org/packages/ee/83/deb5f77cb0f7ba6cb52b91ed388b47f8f3c2e9930d4665c600408d9b90b9/numpy-2.3.3-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9e318ee0596d76d4cb3d78535dc005fa60e5ea348cd131a51e99d0bdbe0b54fe", size = 14296926, upload_time = "2025-09-09T15:58:00.035Z" }, + { url = "https://files.pythonhosted.org/packages/77/cc/70e59dcb84f2b005d4f306310ff0a892518cc0c8000a33d0e6faf7ca8d80/numpy-2.3.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ce020080e4a52426202bdb6f7691c65bb55e49f261f31a8f506c9f6bc7450421", size = 16638958, upload_time = "2025-09-09T15:58:02.738Z" }, + { url = "https://files.pythonhosted.org/packages/b6/5a/b2ab6c18b4257e099587d5b7f903317bd7115333ad8d4ec4874278eafa61/numpy-2.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e6687dc183aa55dae4a705b35f9c0f8cb178bcaa2f029b241ac5356221d5c021", size = 16071920, upload_time = "2025-09-09T15:58:05.029Z" }, + { url = "https://files.pythonhosted.org/packages/b8/f1/8b3fdc44324a259298520dd82147ff648979bed085feeacc1250ef1656c0/numpy-2.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d8f3b1080782469fdc1718c4ed1d22549b5fb12af0d57d35e992158a772a37cf", size = 18577076, upload_time = "2025-09-09T15:58:07.745Z" }, + { url = "https://files.pythonhosted.org/packages/f0/a1/b87a284fb15a42e9274e7fcea0dad259d12ddbf07c1595b26883151ca3b4/numpy-2.3.3-cp314-cp314-win32.whl", hash = "sha256:cb248499b0bc3be66ebd6578b83e5acacf1d6cb2a77f2248ce0e40fbec5a76d0", size = 6366952, upload_time = "2025-09-09T15:58:10.096Z" }, + { url = "https://files.pythonhosted.org/packages/70/5f/1816f4d08f3b8f66576d8433a66f8fa35a5acfb3bbd0bf6c31183b003f3d/numpy-2.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:691808c2b26b0f002a032c73255d0bd89751425f379f7bcd22d140db593a96e8", size = 12919322, upload_time = "2025-09-09T15:58:12.138Z" }, + { url = "https://files.pythonhosted.org/packages/8c/de/072420342e46a8ea41c324a555fa90fcc11637583fb8df722936aed1736d/numpy-2.3.3-cp314-cp314-win_arm64.whl", hash = "sha256:9ad12e976ca7b10f1774b03615a2a4bab8addce37ecc77394d8e986927dc0dfe", size = 10478630, upload_time = "2025-09-09T15:58:14.64Z" }, + { url = "https://files.pythonhosted.org/packages/d5/df/ee2f1c0a9de7347f14da5dd3cd3c3b034d1b8607ccb6883d7dd5c035d631/numpy-2.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9cc48e09feb11e1db00b320e9d30a4151f7369afb96bd0e48d942d09da3a0d00", size = 21047987, upload_time = "2025-09-09T15:58:16.889Z" }, + { url = "https://files.pythonhosted.org/packages/d6/92/9453bdc5a4e9e69cf4358463f25e8260e2ffc126d52e10038b9077815989/numpy-2.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:901bf6123879b7f251d3631967fd574690734236075082078e0571977c6a8e6a", size = 14301076, upload_time = "2025-09-09T15:58:20.343Z" }, + { url = "https://files.pythonhosted.org/packages/13/77/1447b9eb500f028bb44253105bd67534af60499588a5149a94f18f2ca917/numpy-2.3.3-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:7f025652034199c301049296b59fa7d52c7e625017cae4c75d8662e377bf487d", size = 5229491, upload_time = "2025-09-09T15:58:22.481Z" }, + { url = "https://files.pythonhosted.org/packages/3d/f9/d72221b6ca205f9736cb4b2ce3b002f6e45cd67cd6a6d1c8af11a2f0b649/numpy-2.3.3-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:533ca5f6d325c80b6007d4d7fb1984c303553534191024ec6a524a4c92a5935a", size = 6737913, upload_time = "2025-09-09T15:58:24.569Z" }, + { url = "https://files.pythonhosted.org/packages/3c/5f/d12834711962ad9c46af72f79bb31e73e416ee49d17f4c797f72c96b6ca5/numpy-2.3.3-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0edd58682a399824633b66885d699d7de982800053acf20be1eaa46d92009c54", size = 14352811, upload_time = "2025-09-09T15:58:26.416Z" }, + { url = "https://files.pythonhosted.org/packages/a1/0d/fdbec6629d97fd1bebed56cd742884e4eead593611bbe1abc3eb40d304b2/numpy-2.3.3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:367ad5d8fbec5d9296d18478804a530f1191e24ab4d75ab408346ae88045d25e", size = 16702689, upload_time = "2025-09-09T15:58:28.831Z" }, + { url = "https://files.pythonhosted.org/packages/9b/09/0a35196dc5575adde1eb97ddfbc3e1687a814f905377621d18ca9bc2b7dd/numpy-2.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8f6ac61a217437946a1fa48d24c47c91a0c4f725237871117dea264982128097", size = 16133855, upload_time = "2025-09-09T15:58:31.349Z" }, + { url = "https://files.pythonhosted.org/packages/7a/ca/c9de3ea397d576f1b6753eaa906d4cdef1bf97589a6d9825a349b4729cc2/numpy-2.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:179a42101b845a816d464b6fe9a845dfaf308fdfc7925387195570789bb2c970", size = 18652520, upload_time = "2025-09-09T15:58:33.762Z" }, + { url = "https://files.pythonhosted.org/packages/fd/c2/e5ed830e08cd0196351db55db82f65bc0ab05da6ef2b72a836dcf1936d2f/numpy-2.3.3-cp314-cp314t-win32.whl", hash = "sha256:1250c5d3d2562ec4174bce2e3a1523041595f9b651065e4a4473f5f48a6bc8a5", size = 6515371, upload_time = "2025-09-09T15:58:36.04Z" }, + { url = "https://files.pythonhosted.org/packages/47/c7/b0f6b5b67f6788a0725f744496badbb604d226bf233ba716683ebb47b570/numpy-2.3.3-cp314-cp314t-win_amd64.whl", hash = "sha256:b37a0b2e5935409daebe82c1e42274d30d9dd355852529eab91dab8dcca7419f", size = 13112576, upload_time = "2025-09-09T15:58:37.927Z" }, + { url = "https://files.pythonhosted.org/packages/06/b9/33bba5ff6fb679aa0b1f8a07e853f002a6b04b9394db3069a1270a7784ca/numpy-2.3.3-cp314-cp314t-win_arm64.whl", hash = "sha256:78c9f6560dc7e6b3990e32df7ea1a50bbd0e2a111e05209963f5ddcab7073b0b", size = 10545953, upload_time = "2025-09-09T15:58:40.576Z" }, ] [[package]] name = "oda-reader" -version = "1.2.2" +version = "1.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ + { name = "filelock" }, { name = "joblib" }, { name = "openpyxl" }, { name = "pandas" }, + { name = "platformdirs" }, { name = "pyarrow" }, { name = "requests" }, + { name = "requests-cache" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/1a/d1/5c0bb2a714ebea7df131b8e87010eab39d0df75878f6785f2a214ff66bb2/oda_reader-1.2.2.tar.gz", hash = "sha256:55be081e1744e75184eca3d09e794fad71958201d08b48fb497aac97a95f3685", size = 35630 } +sdist = { url = "https://files.pythonhosted.org/packages/32/b9/4ac1d7304001bf702d4835beeea0ef3a6fb60c8034ecb047c3141b2624ba/oda_reader-1.3.1.tar.gz", hash = "sha256:2201595bffbe72f7719e0f362db36a0a40968be252adefbe932f2fd284f5cf17", size = 43135, upload_time = "2025-10-27T14:10:45.762Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d8/ec/59338ec9108848dc53f50e7381b9817595bf98f414f4a732100a06828a3b/oda_reader-1.2.2-py3-none-any.whl", hash = "sha256:7f7b854ab1e9bc2cf64b6c63bd56a2ac64cb90ec054518fd01b741fd518cf007", size = 45314 }, + { url = "https://files.pythonhosted.org/packages/55/e8/abbd6b6fb8678adc0d83d0c537a55e84b1798fd3322d3e6edc9acc7a9dd8/oda_reader-1.3.1-py3-none-any.whl", hash = "sha256:57c8fbe5dda303689fb538f01fb0735e34f733547ccc24665f2632a67b93814d", size = 59216, upload_time = "2025-10-27T14:10:44.832Z" }, ] [[package]] @@ -1764,27 +1790,27 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "et-xmlfile" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/3d/f9/88d94a75de065ea32619465d2f77b29a0469500e99012523b91cc4141cd1/openpyxl-3.1.5.tar.gz", hash = "sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050", size = 186464 } +sdist = { url = "https://files.pythonhosted.org/packages/3d/f9/88d94a75de065ea32619465d2f77b29a0469500e99012523b91cc4141cd1/openpyxl-3.1.5.tar.gz", hash = "sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050", size = 186464, upload_time = "2024-06-28T14:03:44.161Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl", hash = "sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2", size = 250910 }, + { url = "https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl", hash = "sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2", size = 250910, upload_time = "2024-06-28T14:03:41.161Z" }, ] [[package]] name = "packaging" version = "25.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727 } +sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727, upload_time = "2025-04-19T11:48:59.673Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469 }, + { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469, upload_time = "2025-04-19T11:48:57.875Z" }, ] [[package]] name = "paginate" version = "0.5.7" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ec/46/68dde5b6bc00c1296ec6466ab27dddede6aec9af1b99090e1107091b3b84/paginate-0.5.7.tar.gz", hash = "sha256:22bd083ab41e1a8b4f3690544afb2c60c25e5c9a63a30fa2f483f6c60c8e5945", size = 19252 } +sdist = { url = "https://files.pythonhosted.org/packages/ec/46/68dde5b6bc00c1296ec6466ab27dddede6aec9af1b99090e1107091b3b84/paginate-0.5.7.tar.gz", hash = "sha256:22bd083ab41e1a8b4f3690544afb2c60c25e5c9a63a30fa2f483f6c60c8e5945", size = 19252, upload_time = "2024-08-25T14:17:24.139Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl", hash = "sha256:b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591", size = 13746 }, + { url = "https://files.pythonhosted.org/packages/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl", hash = "sha256:b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591", size = 13746, upload_time = "2024-08-25T14:17:22.55Z" }, ] [[package]] @@ -1797,64 +1823,80 @@ dependencies = [ { name = "pytz" }, { name = "tzdata" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/79/8e/0e90233ac205ad182bd6b422532695d2b9414944a280488105d598c70023/pandas-2.3.2.tar.gz", hash = "sha256:ab7b58f8f82706890924ccdfb5f48002b83d2b5a3845976a9fb705d36c34dcdb", size = 4488684 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ec/db/614c20fb7a85a14828edd23f1c02db58a30abf3ce76f38806155d160313c/pandas-2.3.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3fbb977f802156e7a3f829e9d1d5398f6192375a3e2d1a9ee0803e35fe70a2b9", size = 11587652 }, - { url = "https://files.pythonhosted.org/packages/99/b0/756e52f6582cade5e746f19bad0517ff27ba9c73404607c0306585c201b3/pandas-2.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1b9b52693123dd234b7c985c68b709b0b009f4521000d0525f2b95c22f15944b", size = 10717686 }, - { url = "https://files.pythonhosted.org/packages/37/4c/dd5ccc1e357abfeee8353123282de17997f90ff67855f86154e5a13b81e5/pandas-2.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0bd281310d4f412733f319a5bc552f86d62cddc5f51d2e392c8787335c994175", size = 11278722 }, - { url = "https://files.pythonhosted.org/packages/d3/a4/f7edcfa47e0a88cda0be8b068a5bae710bf264f867edfdf7b71584ace362/pandas-2.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96d31a6b4354e3b9b8a2c848af75d31da390657e3ac6f30c05c82068b9ed79b9", size = 11987803 }, - { url = "https://files.pythonhosted.org/packages/f6/61/1bce4129f93ab66f1c68b7ed1c12bac6a70b1b56c5dab359c6bbcd480b52/pandas-2.3.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:df4df0b9d02bb873a106971bb85d448378ef14b86ba96f035f50bbd3688456b4", size = 12766345 }, - { url = "https://files.pythonhosted.org/packages/8e/46/80d53de70fee835531da3a1dae827a1e76e77a43ad22a8cd0f8142b61587/pandas-2.3.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:213a5adf93d020b74327cb2c1b842884dbdd37f895f42dcc2f09d451d949f811", size = 13439314 }, - { url = "https://files.pythonhosted.org/packages/28/30/8114832daff7489f179971dbc1d854109b7f4365a546e3ea75b6516cea95/pandas-2.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:8c13b81a9347eb8c7548f53fd9a4f08d4dfe996836543f805c987bafa03317ae", size = 10983326 }, - { url = "https://files.pythonhosted.org/packages/27/64/a2f7bf678af502e16b472527735d168b22b7824e45a4d7e96a4fbb634b59/pandas-2.3.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0c6ecbac99a354a051ef21c5307601093cb9e0f4b1855984a084bfec9302699e", size = 11531061 }, - { url = "https://files.pythonhosted.org/packages/54/4c/c3d21b2b7769ef2f4c2b9299fcadd601efa6729f1357a8dbce8dd949ed70/pandas-2.3.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c6f048aa0fd080d6a06cc7e7537c09b53be6642d330ac6f54a600c3ace857ee9", size = 10668666 }, - { url = "https://files.pythonhosted.org/packages/50/e2/f775ba76ecfb3424d7f5862620841cf0edb592e9abd2d2a5387d305fe7a8/pandas-2.3.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0064187b80a5be6f2f9c9d6bdde29372468751dfa89f4211a3c5871854cfbf7a", size = 11332835 }, - { url = "https://files.pythonhosted.org/packages/8f/52/0634adaace9be2d8cac9ef78f05c47f3a675882e068438b9d7ec7ef0c13f/pandas-2.3.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ac8c320bded4718b298281339c1a50fb00a6ba78cb2a63521c39bec95b0209b", size = 12057211 }, - { url = "https://files.pythonhosted.org/packages/0b/9d/2df913f14b2deb9c748975fdb2491da1a78773debb25abbc7cbc67c6b549/pandas-2.3.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:114c2fe4f4328cf98ce5716d1532f3ab79c5919f95a9cfee81d9140064a2e4d6", size = 12749277 }, - { url = "https://files.pythonhosted.org/packages/87/af/da1a2417026bd14d98c236dba88e39837182459d29dcfcea510b2ac9e8a1/pandas-2.3.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:48fa91c4dfb3b2b9bfdb5c24cd3567575f4e13f9636810462ffed8925352be5a", size = 13415256 }, - { url = "https://files.pythonhosted.org/packages/22/3c/f2af1ce8840ef648584a6156489636b5692c162771918aa95707c165ad2b/pandas-2.3.2-cp313-cp313-win_amd64.whl", hash = "sha256:12d039facec710f7ba305786837d0225a3444af7bbd9c15c32ca2d40d157ed8b", size = 10982579 }, - { url = "https://files.pythonhosted.org/packages/f3/98/8df69c4097a6719e357dc249bf437b8efbde808038268e584421696cbddf/pandas-2.3.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:c624b615ce97864eb588779ed4046186f967374185c047070545253a52ab2d57", size = 12028163 }, - { url = "https://files.pythonhosted.org/packages/0e/23/f95cbcbea319f349e10ff90db488b905c6883f03cbabd34f6b03cbc3c044/pandas-2.3.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:0cee69d583b9b128823d9514171cabb6861e09409af805b54459bd0c821a35c2", size = 11391860 }, - { url = "https://files.pythonhosted.org/packages/ad/1b/6a984e98c4abee22058aa75bfb8eb90dce58cf8d7296f8bc56c14bc330b0/pandas-2.3.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2319656ed81124982900b4c37f0e0c58c015af9a7bbc62342ba5ad07ace82ba9", size = 11309830 }, - { url = "https://files.pythonhosted.org/packages/15/d5/f0486090eb18dd8710bf60afeaf638ba6817047c0c8ae5c6a25598665609/pandas-2.3.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b37205ad6f00d52f16b6d09f406434ba928c1a1966e2771006a9033c736d30d2", size = 11883216 }, - { url = "https://files.pythonhosted.org/packages/10/86/692050c119696da19e20245bbd650d8dfca6ceb577da027c3a73c62a047e/pandas-2.3.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:837248b4fc3a9b83b9c6214699a13f069dc13510a6a6d7f9ba33145d2841a012", size = 12699743 }, - { url = "https://files.pythonhosted.org/packages/cd/d7/612123674d7b17cf345aad0a10289b2a384bff404e0463a83c4a3a59d205/pandas-2.3.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:d2c3554bd31b731cd6490d94a28f3abb8dd770634a9e06eb6d2911b9827db370", size = 13186141 }, +sdist = { url = "https://files.pythonhosted.org/packages/79/8e/0e90233ac205ad182bd6b422532695d2b9414944a280488105d598c70023/pandas-2.3.2.tar.gz", hash = "sha256:ab7b58f8f82706890924ccdfb5f48002b83d2b5a3845976a9fb705d36c34dcdb", size = 4488684, upload_time = "2025-08-21T10:28:29.257Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/db/614c20fb7a85a14828edd23f1c02db58a30abf3ce76f38806155d160313c/pandas-2.3.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3fbb977f802156e7a3f829e9d1d5398f6192375a3e2d1a9ee0803e35fe70a2b9", size = 11587652, upload_time = "2025-08-21T10:27:15.888Z" }, + { url = "https://files.pythonhosted.org/packages/99/b0/756e52f6582cade5e746f19bad0517ff27ba9c73404607c0306585c201b3/pandas-2.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1b9b52693123dd234b7c985c68b709b0b009f4521000d0525f2b95c22f15944b", size = 10717686, upload_time = "2025-08-21T10:27:18.486Z" }, + { url = "https://files.pythonhosted.org/packages/37/4c/dd5ccc1e357abfeee8353123282de17997f90ff67855f86154e5a13b81e5/pandas-2.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0bd281310d4f412733f319a5bc552f86d62cddc5f51d2e392c8787335c994175", size = 11278722, upload_time = "2025-08-21T10:27:21.149Z" }, + { url = "https://files.pythonhosted.org/packages/d3/a4/f7edcfa47e0a88cda0be8b068a5bae710bf264f867edfdf7b71584ace362/pandas-2.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96d31a6b4354e3b9b8a2c848af75d31da390657e3ac6f30c05c82068b9ed79b9", size = 11987803, upload_time = "2025-08-21T10:27:23.767Z" }, + { url = "https://files.pythonhosted.org/packages/f6/61/1bce4129f93ab66f1c68b7ed1c12bac6a70b1b56c5dab359c6bbcd480b52/pandas-2.3.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:df4df0b9d02bb873a106971bb85d448378ef14b86ba96f035f50bbd3688456b4", size = 12766345, upload_time = "2025-08-21T10:27:26.6Z" }, + { url = "https://files.pythonhosted.org/packages/8e/46/80d53de70fee835531da3a1dae827a1e76e77a43ad22a8cd0f8142b61587/pandas-2.3.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:213a5adf93d020b74327cb2c1b842884dbdd37f895f42dcc2f09d451d949f811", size = 13439314, upload_time = "2025-08-21T10:27:29.213Z" }, + { url = "https://files.pythonhosted.org/packages/28/30/8114832daff7489f179971dbc1d854109b7f4365a546e3ea75b6516cea95/pandas-2.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:8c13b81a9347eb8c7548f53fd9a4f08d4dfe996836543f805c987bafa03317ae", size = 10983326, upload_time = "2025-08-21T10:27:31.901Z" }, + { url = "https://files.pythonhosted.org/packages/27/64/a2f7bf678af502e16b472527735d168b22b7824e45a4d7e96a4fbb634b59/pandas-2.3.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0c6ecbac99a354a051ef21c5307601093cb9e0f4b1855984a084bfec9302699e", size = 11531061, upload_time = "2025-08-21T10:27:34.647Z" }, + { url = "https://files.pythonhosted.org/packages/54/4c/c3d21b2b7769ef2f4c2b9299fcadd601efa6729f1357a8dbce8dd949ed70/pandas-2.3.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c6f048aa0fd080d6a06cc7e7537c09b53be6642d330ac6f54a600c3ace857ee9", size = 10668666, upload_time = "2025-08-21T10:27:37.203Z" }, + { url = "https://files.pythonhosted.org/packages/50/e2/f775ba76ecfb3424d7f5862620841cf0edb592e9abd2d2a5387d305fe7a8/pandas-2.3.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0064187b80a5be6f2f9c9d6bdde29372468751dfa89f4211a3c5871854cfbf7a", size = 11332835, upload_time = "2025-08-21T10:27:40.188Z" }, + { url = "https://files.pythonhosted.org/packages/8f/52/0634adaace9be2d8cac9ef78f05c47f3a675882e068438b9d7ec7ef0c13f/pandas-2.3.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ac8c320bded4718b298281339c1a50fb00a6ba78cb2a63521c39bec95b0209b", size = 12057211, upload_time = "2025-08-21T10:27:43.117Z" }, + { url = "https://files.pythonhosted.org/packages/0b/9d/2df913f14b2deb9c748975fdb2491da1a78773debb25abbc7cbc67c6b549/pandas-2.3.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:114c2fe4f4328cf98ce5716d1532f3ab79c5919f95a9cfee81d9140064a2e4d6", size = 12749277, upload_time = "2025-08-21T10:27:45.474Z" }, + { url = "https://files.pythonhosted.org/packages/87/af/da1a2417026bd14d98c236dba88e39837182459d29dcfcea510b2ac9e8a1/pandas-2.3.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:48fa91c4dfb3b2b9bfdb5c24cd3567575f4e13f9636810462ffed8925352be5a", size = 13415256, upload_time = "2025-08-21T10:27:49.885Z" }, + { url = "https://files.pythonhosted.org/packages/22/3c/f2af1ce8840ef648584a6156489636b5692c162771918aa95707c165ad2b/pandas-2.3.2-cp313-cp313-win_amd64.whl", hash = "sha256:12d039facec710f7ba305786837d0225a3444af7bbd9c15c32ca2d40d157ed8b", size = 10982579, upload_time = "2025-08-21T10:28:08.435Z" }, + { url = "https://files.pythonhosted.org/packages/f3/98/8df69c4097a6719e357dc249bf437b8efbde808038268e584421696cbddf/pandas-2.3.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:c624b615ce97864eb588779ed4046186f967374185c047070545253a52ab2d57", size = 12028163, upload_time = "2025-08-21T10:27:52.232Z" }, + { url = "https://files.pythonhosted.org/packages/0e/23/f95cbcbea319f349e10ff90db488b905c6883f03cbabd34f6b03cbc3c044/pandas-2.3.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:0cee69d583b9b128823d9514171cabb6861e09409af805b54459bd0c821a35c2", size = 11391860, upload_time = "2025-08-21T10:27:54.673Z" }, + { url = "https://files.pythonhosted.org/packages/ad/1b/6a984e98c4abee22058aa75bfb8eb90dce58cf8d7296f8bc56c14bc330b0/pandas-2.3.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2319656ed81124982900b4c37f0e0c58c015af9a7bbc62342ba5ad07ace82ba9", size = 11309830, upload_time = "2025-08-21T10:27:56.957Z" }, + { url = "https://files.pythonhosted.org/packages/15/d5/f0486090eb18dd8710bf60afeaf638ba6817047c0c8ae5c6a25598665609/pandas-2.3.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b37205ad6f00d52f16b6d09f406434ba928c1a1966e2771006a9033c736d30d2", size = 11883216, upload_time = "2025-08-21T10:27:59.302Z" }, + { url = "https://files.pythonhosted.org/packages/10/86/692050c119696da19e20245bbd650d8dfca6ceb577da027c3a73c62a047e/pandas-2.3.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:837248b4fc3a9b83b9c6214699a13f069dc13510a6a6d7f9ba33145d2841a012", size = 12699743, upload_time = "2025-08-21T10:28:02.447Z" }, + { url = "https://files.pythonhosted.org/packages/cd/d7/612123674d7b17cf345aad0a10289b2a384bff404e0463a83c4a3a59d205/pandas-2.3.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:d2c3554bd31b731cd6490d94a28f3abb8dd770634a9e06eb6d2911b9827db370", size = 13186141, upload_time = "2025-08-21T10:28:05.377Z" }, +] + +[[package]] +name = "pandera" +version = "0.27.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, + { name = "pydantic" }, + { name = "typeguard" }, + { name = "typing-extensions" }, + { name = "typing-inspect" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ed/9d/36af210c7cef275d646b8dded8cc555078a271514e34f8f8d1c056462dc3/pandera-0.27.0.tar.gz", hash = "sha256:83c66d5896b97b3a91c810621038d2495f56c83864493819e7587d2059e641ad", size = 567135, upload_time = "2025-11-25T16:20:35.156Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d5/26/8e4a28ffbf3406c60d58eaa7f0529fb6197f5ae49f77b173dc84c057e1a2/pandera-0.27.0-py3-none-any.whl", hash = "sha256:e43b8062dfcde984300d798686815cc93feaae09645d3cddee3ab437f2d11ed5", size = 295880, upload_time = "2025-11-25T16:20:33.635Z" }, ] [[package]] name = "pandocfilters" version = "1.5.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/70/6f/3dd4940bbe001c06a65f88e36bad298bc7a0de5036115639926b0c5c0458/pandocfilters-1.5.1.tar.gz", hash = "sha256:002b4a555ee4ebc03f8b66307e287fa492e4a77b4ea14d3f934328297bb4939e", size = 8454 } +sdist = { url = "https://files.pythonhosted.org/packages/70/6f/3dd4940bbe001c06a65f88e36bad298bc7a0de5036115639926b0c5c0458/pandocfilters-1.5.1.tar.gz", hash = "sha256:002b4a555ee4ebc03f8b66307e287fa492e4a77b4ea14d3f934328297bb4939e", size = 8454, upload_time = "2024-01-18T20:08:13.726Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ef/af/4fbc8cab944db5d21b7e2a5b8e9211a03a79852b1157e2c102fcc61ac440/pandocfilters-1.5.1-py2.py3-none-any.whl", hash = "sha256:93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc", size = 8663 }, + { url = "https://files.pythonhosted.org/packages/ef/af/4fbc8cab944db5d21b7e2a5b8e9211a03a79852b1157e2c102fcc61ac440/pandocfilters-1.5.1-py2.py3-none-any.whl", hash = "sha256:93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc", size = 8663, upload_time = "2024-01-18T20:08:11.28Z" }, ] [[package]] name = "parso" version = "0.8.5" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d4/de/53e0bcf53d13e005bd8c92e7855142494f41171b34c2536b86187474184d/parso-0.8.5.tar.gz", hash = "sha256:034d7354a9a018bdce352f48b2a8a450f05e9d6ee85db84764e9b6bd96dafe5a", size = 401205 } +sdist = { url = "https://files.pythonhosted.org/packages/d4/de/53e0bcf53d13e005bd8c92e7855142494f41171b34c2536b86187474184d/parso-0.8.5.tar.gz", hash = "sha256:034d7354a9a018bdce352f48b2a8a450f05e9d6ee85db84764e9b6bd96dafe5a", size = 401205, upload_time = "2025-08-23T15:15:28.028Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/16/32/f8e3c85d1d5250232a5d3477a2a28cc291968ff175caeadaf3cc19ce0e4a/parso-0.8.5-py2.py3-none-any.whl", hash = "sha256:646204b5ee239c396d040b90f9e272e9a8017c630092bf59980beb62fd033887", size = 106668 }, + { url = "https://files.pythonhosted.org/packages/16/32/f8e3c85d1d5250232a5d3477a2a28cc291968ff175caeadaf3cc19ce0e4a/parso-0.8.5-py2.py3-none-any.whl", hash = "sha256:646204b5ee239c396d040b90f9e272e9a8017c630092bf59980beb62fd033887", size = 106668, upload_time = "2025-08-23T15:15:25.663Z" }, ] [[package]] name = "pathspec" version = "0.12.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ca/bc/f35b8446f4531a7cb215605d100cd88b7ac6f44ab3fc94870c120ab3adbf/pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712", size = 51043 } +sdist = { url = "https://files.pythonhosted.org/packages/ca/bc/f35b8446f4531a7cb215605d100cd88b7ac6f44ab3fc94870c120ab3adbf/pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712", size = 51043, upload_time = "2023-12-10T22:30:45Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", size = 31191 }, + { url = "https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", size = 31191, upload_time = "2023-12-10T22:30:43.14Z" }, ] [[package]] name = "petl" version = "1.7.17" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a5/07/16a40e30700f7c6975e62cba01c2f94afbb347dd8ed224a5918c686a47fe/petl-1.7.17.tar.gz", hash = "sha256:802696187c2ef35894c4acf3c0ff9fecff6035cb335944c194416b9a18e8390b", size = 424376 } +sdist = { url = "https://files.pythonhosted.org/packages/a5/07/16a40e30700f7c6975e62cba01c2f94afbb347dd8ed224a5918c686a47fe/petl-1.7.17.tar.gz", hash = "sha256:802696187c2ef35894c4acf3c0ff9fecff6035cb335944c194416b9a18e8390b", size = 424376, upload_time = "2025-07-10T20:47:13.523Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9f/5c/ea831abc18dd3268046d7d9a0119f1f8ddc69642e0a5245f839602b8114d/petl-1.7.17-py3-none-any.whl", hash = "sha256:53785128bcdf46eb4472638ad572acc6d87cc83f80b567fed06ee4a947eea5d1", size = 233093 }, + { url = "https://files.pythonhosted.org/packages/9f/5c/ea831abc18dd3268046d7d9a0119f1f8ddc69642e0a5245f839602b8114d/petl-1.7.17-py3-none-any.whl", hash = "sha256:53785128bcdf46eb4472638ad572acc6d87cc83f80b567fed06ee4a947eea5d1", size = 233093, upload_time = "2025-07-10T20:47:12.03Z" }, ] [[package]] @@ -1864,75 +1906,75 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "ptyprocess" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450 } +sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450, upload_time = "2023-11-25T09:07:26.339Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772 }, + { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772, upload_time = "2023-11-25T06:56:14.81Z" }, ] [[package]] name = "pillow" version = "11.3.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f3/0d/d0d6dea55cd152ce3d6767bb38a8fc10e33796ba4ba210cbab9354b6d238/pillow-11.3.0.tar.gz", hash = "sha256:3828ee7586cd0b2091b6209e5ad53e20d0649bbe87164a459d0676e035e8f523", size = 47113069 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/40/fe/1bc9b3ee13f68487a99ac9529968035cca2f0a51ec36892060edcc51d06a/pillow-11.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fdae223722da47b024b867c1ea0be64e0df702c5e0a60e27daad39bf960dd1e4", size = 5278800 }, - { url = "https://files.pythonhosted.org/packages/2c/32/7e2ac19b5713657384cec55f89065fb306b06af008cfd87e572035b27119/pillow-11.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:921bd305b10e82b4d1f5e802b6850677f965d8394203d182f078873851dada69", size = 4686296 }, - { url = "https://files.pythonhosted.org/packages/8e/1e/b9e12bbe6e4c2220effebc09ea0923a07a6da1e1f1bfbc8d7d29a01ce32b/pillow-11.3.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:eb76541cba2f958032d79d143b98a3a6b3ea87f0959bbe256c0b5e416599fd5d", size = 5871726 }, - { url = "https://files.pythonhosted.org/packages/8d/33/e9200d2bd7ba00dc3ddb78df1198a6e80d7669cce6c2bdbeb2530a74ec58/pillow-11.3.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:67172f2944ebba3d4a7b54f2e95c786a3a50c21b88456329314caaa28cda70f6", size = 7644652 }, - { url = "https://files.pythonhosted.org/packages/41/f1/6f2427a26fc683e00d985bc391bdd76d8dd4e92fac33d841127eb8fb2313/pillow-11.3.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97f07ed9f56a3b9b5f49d3661dc9607484e85c67e27f3e8be2c7d28ca032fec7", size = 5977787 }, - { url = "https://files.pythonhosted.org/packages/e4/c9/06dd4a38974e24f932ff5f98ea3c546ce3f8c995d3f0985f8e5ba48bba19/pillow-11.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:676b2815362456b5b3216b4fd5bd89d362100dc6f4945154ff172e206a22c024", size = 6645236 }, - { url = "https://files.pythonhosted.org/packages/40/e7/848f69fb79843b3d91241bad658e9c14f39a32f71a301bcd1d139416d1be/pillow-11.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3e184b2f26ff146363dd07bde8b711833d7b0202e27d13540bfe2e35a323a809", size = 6086950 }, - { url = "https://files.pythonhosted.org/packages/0b/1a/7cff92e695a2a29ac1958c2a0fe4c0b2393b60aac13b04a4fe2735cad52d/pillow-11.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6be31e3fc9a621e071bc17bb7de63b85cbe0bfae91bb0363c893cbe67247780d", size = 6723358 }, - { url = "https://files.pythonhosted.org/packages/26/7d/73699ad77895f69edff76b0f332acc3d497f22f5d75e5360f78cbcaff248/pillow-11.3.0-cp312-cp312-win32.whl", hash = "sha256:7b161756381f0918e05e7cb8a371fff367e807770f8fe92ecb20d905d0e1c149", size = 6275079 }, - { url = "https://files.pythonhosted.org/packages/8c/ce/e7dfc873bdd9828f3b6e5c2bbb74e47a98ec23cc5c74fc4e54462f0d9204/pillow-11.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:a6444696fce635783440b7f7a9fc24b3ad10a9ea3f0ab66c5905be1c19ccf17d", size = 6986324 }, - { url = "https://files.pythonhosted.org/packages/16/8f/b13447d1bf0b1f7467ce7d86f6e6edf66c0ad7cf44cf5c87a37f9bed9936/pillow-11.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:2aceea54f957dd4448264f9bf40875da0415c83eb85f55069d89c0ed436e3542", size = 2423067 }, - { url = "https://files.pythonhosted.org/packages/1e/93/0952f2ed8db3a5a4c7a11f91965d6184ebc8cd7cbb7941a260d5f018cd2d/pillow-11.3.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:1c627742b539bba4309df89171356fcb3cc5a9178355b2727d1b74a6cf155fbd", size = 2128328 }, - { url = "https://files.pythonhosted.org/packages/4b/e8/100c3d114b1a0bf4042f27e0f87d2f25e857e838034e98ca98fe7b8c0a9c/pillow-11.3.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:30b7c02f3899d10f13d7a48163c8969e4e653f8b43416d23d13d1bbfdc93b9f8", size = 2170652 }, - { url = "https://files.pythonhosted.org/packages/aa/86/3f758a28a6e381758545f7cdb4942e1cb79abd271bea932998fc0db93cb6/pillow-11.3.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:7859a4cc7c9295f5838015d8cc0a9c215b77e43d07a25e460f35cf516df8626f", size = 2227443 }, - { url = "https://files.pythonhosted.org/packages/01/f4/91d5b3ffa718df2f53b0dc109877993e511f4fd055d7e9508682e8aba092/pillow-11.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ec1ee50470b0d050984394423d96325b744d55c701a439d2bd66089bff963d3c", size = 5278474 }, - { url = "https://files.pythonhosted.org/packages/f9/0e/37d7d3eca6c879fbd9dba21268427dffda1ab00d4eb05b32923d4fbe3b12/pillow-11.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7db51d222548ccfd274e4572fdbf3e810a5e66b00608862f947b163e613b67dd", size = 4686038 }, - { url = "https://files.pythonhosted.org/packages/ff/b0/3426e5c7f6565e752d81221af9d3676fdbb4f352317ceafd42899aaf5d8a/pillow-11.3.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2d6fcc902a24ac74495df63faad1884282239265c6839a0a6416d33faedfae7e", size = 5864407 }, - { url = "https://files.pythonhosted.org/packages/fc/c1/c6c423134229f2a221ee53f838d4be9d82bab86f7e2f8e75e47b6bf6cd77/pillow-11.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f0f5d8f4a08090c6d6d578351a2b91acf519a54986c055af27e7a93feae6d3f1", size = 7639094 }, - { url = "https://files.pythonhosted.org/packages/ba/c9/09e6746630fe6372c67c648ff9deae52a2bc20897d51fa293571977ceb5d/pillow-11.3.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c37d8ba9411d6003bba9e518db0db0c58a680ab9fe5179f040b0463644bc9805", size = 5973503 }, - { url = "https://files.pythonhosted.org/packages/d5/1c/a2a29649c0b1983d3ef57ee87a66487fdeb45132df66ab30dd37f7dbe162/pillow-11.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:13f87d581e71d9189ab21fe0efb5a23e9f28552d5be6979e84001d3b8505abe8", size = 6642574 }, - { url = "https://files.pythonhosted.org/packages/36/de/d5cc31cc4b055b6c6fd990e3e7f0f8aaf36229a2698501bcb0cdf67c7146/pillow-11.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:023f6d2d11784a465f09fd09a34b150ea4672e85fb3d05931d89f373ab14abb2", size = 6084060 }, - { url = "https://files.pythonhosted.org/packages/d5/ea/502d938cbaeec836ac28a9b730193716f0114c41325db428e6b280513f09/pillow-11.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:45dfc51ac5975b938e9809451c51734124e73b04d0f0ac621649821a63852e7b", size = 6721407 }, - { url = "https://files.pythonhosted.org/packages/45/9c/9c5e2a73f125f6cbc59cc7087c8f2d649a7ae453f83bd0362ff7c9e2aee2/pillow-11.3.0-cp313-cp313-win32.whl", hash = "sha256:a4d336baed65d50d37b88ca5b60c0fa9d81e3a87d4a7930d3880d1624d5b31f3", size = 6273841 }, - { url = "https://files.pythonhosted.org/packages/23/85/397c73524e0cd212067e0c969aa245b01d50183439550d24d9f55781b776/pillow-11.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:0bce5c4fd0921f99d2e858dc4d4d64193407e1b99478bc5cacecba2311abde51", size = 6978450 }, - { url = "https://files.pythonhosted.org/packages/17/d2/622f4547f69cd173955194b78e4d19ca4935a1b0f03a302d655c9f6aae65/pillow-11.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:1904e1264881f682f02b7f8167935cce37bc97db457f8e7849dc3a6a52b99580", size = 2423055 }, - { url = "https://files.pythonhosted.org/packages/dd/80/a8a2ac21dda2e82480852978416cfacd439a4b490a501a288ecf4fe2532d/pillow-11.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:4c834a3921375c48ee6b9624061076bc0a32a60b5532b322cc0ea64e639dd50e", size = 5281110 }, - { url = "https://files.pythonhosted.org/packages/44/d6/b79754ca790f315918732e18f82a8146d33bcd7f4494380457ea89eb883d/pillow-11.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5e05688ccef30ea69b9317a9ead994b93975104a677a36a8ed8106be9260aa6d", size = 4689547 }, - { url = "https://files.pythonhosted.org/packages/49/20/716b8717d331150cb00f7fdd78169c01e8e0c219732a78b0e59b6bdb2fd6/pillow-11.3.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1019b04af07fc0163e2810167918cb5add8d74674b6267616021ab558dc98ced", size = 5901554 }, - { url = "https://files.pythonhosted.org/packages/74/cf/a9f3a2514a65bb071075063a96f0a5cf949c2f2fce683c15ccc83b1c1cab/pillow-11.3.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f944255db153ebb2b19c51fe85dd99ef0ce494123f21b9db4877ffdfc5590c7c", size = 7669132 }, - { url = "https://files.pythonhosted.org/packages/98/3c/da78805cbdbee9cb43efe8261dd7cc0b4b93f2ac79b676c03159e9db2187/pillow-11.3.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1f85acb69adf2aaee8b7da124efebbdb959a104db34d3a2cb0f3793dbae422a8", size = 6005001 }, - { url = "https://files.pythonhosted.org/packages/6c/fa/ce044b91faecf30e635321351bba32bab5a7e034c60187fe9698191aef4f/pillow-11.3.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:05f6ecbeff5005399bb48d198f098a9b4b6bdf27b8487c7f38ca16eeb070cd59", size = 6668814 }, - { url = "https://files.pythonhosted.org/packages/7b/51/90f9291406d09bf93686434f9183aba27b831c10c87746ff49f127ee80cb/pillow-11.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a7bc6e6fd0395bc052f16b1a8670859964dbd7003bd0af2ff08342eb6e442cfe", size = 6113124 }, - { url = "https://files.pythonhosted.org/packages/cd/5a/6fec59b1dfb619234f7636d4157d11fb4e196caeee220232a8d2ec48488d/pillow-11.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:83e1b0161c9d148125083a35c1c5a89db5b7054834fd4387499e06552035236c", size = 6747186 }, - { url = "https://files.pythonhosted.org/packages/49/6b/00187a044f98255225f172de653941e61da37104a9ea60e4f6887717e2b5/pillow-11.3.0-cp313-cp313t-win32.whl", hash = "sha256:2a3117c06b8fb646639dce83694f2f9eac405472713fcb1ae887469c0d4f6788", size = 6277546 }, - { url = "https://files.pythonhosted.org/packages/e8/5c/6caaba7e261c0d75bab23be79f1d06b5ad2a2ae49f028ccec801b0e853d6/pillow-11.3.0-cp313-cp313t-win_amd64.whl", hash = "sha256:857844335c95bea93fb39e0fa2726b4d9d758850b34075a7e3ff4f4fa3aa3b31", size = 6985102 }, - { url = "https://files.pythonhosted.org/packages/f3/7e/b623008460c09a0cb38263c93b828c666493caee2eb34ff67f778b87e58c/pillow-11.3.0-cp313-cp313t-win_arm64.whl", hash = "sha256:8797edc41f3e8536ae4b10897ee2f637235c94f27404cac7297f7b607dd0716e", size = 2424803 }, - { url = "https://files.pythonhosted.org/packages/73/f4/04905af42837292ed86cb1b1dabe03dce1edc008ef14c473c5c7e1443c5d/pillow-11.3.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:d9da3df5f9ea2a89b81bb6087177fb1f4d1c7146d583a3fe5c672c0d94e55e12", size = 5278520 }, - { url = "https://files.pythonhosted.org/packages/41/b0/33d79e377a336247df6348a54e6d2a2b85d644ca202555e3faa0cf811ecc/pillow-11.3.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0b275ff9b04df7b640c59ec5a3cb113eefd3795a8df80bac69646ef699c6981a", size = 4686116 }, - { url = "https://files.pythonhosted.org/packages/49/2d/ed8bc0ab219ae8768f529597d9509d184fe8a6c4741a6864fea334d25f3f/pillow-11.3.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0743841cabd3dba6a83f38a92672cccbd69af56e3e91777b0ee7f4dba4385632", size = 5864597 }, - { url = "https://files.pythonhosted.org/packages/b5/3d/b932bb4225c80b58dfadaca9d42d08d0b7064d2d1791b6a237f87f661834/pillow-11.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2465a69cf967b8b49ee1b96d76718cd98c4e925414ead59fdf75cf0fd07df673", size = 7638246 }, - { url = "https://files.pythonhosted.org/packages/09/b5/0487044b7c096f1b48f0d7ad416472c02e0e4bf6919541b111efd3cae690/pillow-11.3.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:41742638139424703b4d01665b807c6468e23e699e8e90cffefe291c5832b027", size = 5973336 }, - { url = "https://files.pythonhosted.org/packages/a8/2d/524f9318f6cbfcc79fbc004801ea6b607ec3f843977652fdee4857a7568b/pillow-11.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:93efb0b4de7e340d99057415c749175e24c8864302369e05914682ba642e5d77", size = 6642699 }, - { url = "https://files.pythonhosted.org/packages/6f/d2/a9a4f280c6aefedce1e8f615baaa5474e0701d86dd6f1dede66726462bbd/pillow-11.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7966e38dcd0fa11ca390aed7c6f20454443581d758242023cf36fcb319b1a874", size = 6083789 }, - { url = "https://files.pythonhosted.org/packages/fe/54/86b0cd9dbb683a9d5e960b66c7379e821a19be4ac5810e2e5a715c09a0c0/pillow-11.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:98a9afa7b9007c67ed84c57c9e0ad86a6000da96eaa638e4f8abe5b65ff83f0a", size = 6720386 }, - { url = "https://files.pythonhosted.org/packages/e7/95/88efcaf384c3588e24259c4203b909cbe3e3c2d887af9e938c2022c9dd48/pillow-11.3.0-cp314-cp314-win32.whl", hash = "sha256:02a723e6bf909e7cea0dac1b0e0310be9d7650cd66222a5f1c571455c0a45214", size = 6370911 }, - { url = "https://files.pythonhosted.org/packages/2e/cc/934e5820850ec5eb107e7b1a72dd278140731c669f396110ebc326f2a503/pillow-11.3.0-cp314-cp314-win_amd64.whl", hash = "sha256:a418486160228f64dd9e9efcd132679b7a02a5f22c982c78b6fc7dab3fefb635", size = 7117383 }, - { url = "https://files.pythonhosted.org/packages/d6/e9/9c0a616a71da2a5d163aa37405e8aced9a906d574b4a214bede134e731bc/pillow-11.3.0-cp314-cp314-win_arm64.whl", hash = "sha256:155658efb5e044669c08896c0c44231c5e9abcaadbc5cd3648df2f7c0b96b9a6", size = 2511385 }, - { url = "https://files.pythonhosted.org/packages/1a/33/c88376898aff369658b225262cd4f2659b13e8178e7534df9e6e1fa289f6/pillow-11.3.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:59a03cdf019efbfeeed910bf79c7c93255c3d54bc45898ac2a4140071b02b4ae", size = 5281129 }, - { url = "https://files.pythonhosted.org/packages/1f/70/d376247fb36f1844b42910911c83a02d5544ebd2a8bad9efcc0f707ea774/pillow-11.3.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f8a5827f84d973d8636e9dc5764af4f0cf2318d26744b3d902931701b0d46653", size = 4689580 }, - { url = "https://files.pythonhosted.org/packages/eb/1c/537e930496149fbac69efd2fc4329035bbe2e5475b4165439e3be9cb183b/pillow-11.3.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ee92f2fd10f4adc4b43d07ec5e779932b4eb3dbfbc34790ada5a6669bc095aa6", size = 5902860 }, - { url = "https://files.pythonhosted.org/packages/bd/57/80f53264954dcefeebcf9dae6e3eb1daea1b488f0be8b8fef12f79a3eb10/pillow-11.3.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c96d333dcf42d01f47b37e0979b6bd73ec91eae18614864622d9b87bbd5bbf36", size = 7670694 }, - { url = "https://files.pythonhosted.org/packages/70/ff/4727d3b71a8578b4587d9c276e90efad2d6fe0335fd76742a6da08132e8c/pillow-11.3.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4c96f993ab8c98460cd0c001447bff6194403e8b1d7e149ade5f00594918128b", size = 6005888 }, - { url = "https://files.pythonhosted.org/packages/05/ae/716592277934f85d3be51d7256f3636672d7b1abfafdc42cf3f8cbd4b4c8/pillow-11.3.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:41342b64afeba938edb034d122b2dda5db2139b9a4af999729ba8818e0056477", size = 6670330 }, - { url = "https://files.pythonhosted.org/packages/e7/bb/7fe6cddcc8827b01b1a9766f5fdeb7418680744f9082035bdbabecf1d57f/pillow-11.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:068d9c39a2d1b358eb9f245ce7ab1b5c3246c7c8c7d9ba58cfa5b43146c06e50", size = 6114089 }, - { url = "https://files.pythonhosted.org/packages/8b/f5/06bfaa444c8e80f1a8e4bff98da9c83b37b5be3b1deaa43d27a0db37ef84/pillow-11.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a1bc6ba083b145187f648b667e05a2534ecc4b9f2784c2cbe3089e44868f2b9b", size = 6748206 }, - { url = "https://files.pythonhosted.org/packages/f0/77/bc6f92a3e8e6e46c0ca78abfffec0037845800ea38c73483760362804c41/pillow-11.3.0-cp314-cp314t-win32.whl", hash = "sha256:118ca10c0d60b06d006be10a501fd6bbdfef559251ed31b794668ed569c87e12", size = 6377370 }, - { url = "https://files.pythonhosted.org/packages/4a/82/3a721f7d69dca802befb8af08b7c79ebcab461007ce1c18bd91a5d5896f9/pillow-11.3.0-cp314-cp314t-win_amd64.whl", hash = "sha256:8924748b688aa210d79883357d102cd64690e56b923a186f35a82cbc10f997db", size = 7121500 }, - { url = "https://files.pythonhosted.org/packages/89/c7/5572fa4a3f45740eaab6ae86fcdf7195b55beac1371ac8c619d880cfe948/pillow-11.3.0-cp314-cp314t-win_arm64.whl", hash = "sha256:79ea0d14d3ebad43ec77ad5272e6ff9bba5b679ef73375ea760261207fa8e0aa", size = 2512835 }, +sdist = { url = "https://files.pythonhosted.org/packages/f3/0d/d0d6dea55cd152ce3d6767bb38a8fc10e33796ba4ba210cbab9354b6d238/pillow-11.3.0.tar.gz", hash = "sha256:3828ee7586cd0b2091b6209e5ad53e20d0649bbe87164a459d0676e035e8f523", size = 47113069, upload_time = "2025-07-01T09:16:30.666Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/40/fe/1bc9b3ee13f68487a99ac9529968035cca2f0a51ec36892060edcc51d06a/pillow-11.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fdae223722da47b024b867c1ea0be64e0df702c5e0a60e27daad39bf960dd1e4", size = 5278800, upload_time = "2025-07-01T09:14:17.648Z" }, + { url = "https://files.pythonhosted.org/packages/2c/32/7e2ac19b5713657384cec55f89065fb306b06af008cfd87e572035b27119/pillow-11.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:921bd305b10e82b4d1f5e802b6850677f965d8394203d182f078873851dada69", size = 4686296, upload_time = "2025-07-01T09:14:19.828Z" }, + { url = "https://files.pythonhosted.org/packages/8e/1e/b9e12bbe6e4c2220effebc09ea0923a07a6da1e1f1bfbc8d7d29a01ce32b/pillow-11.3.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:eb76541cba2f958032d79d143b98a3a6b3ea87f0959bbe256c0b5e416599fd5d", size = 5871726, upload_time = "2025-07-03T13:10:04.448Z" }, + { url = "https://files.pythonhosted.org/packages/8d/33/e9200d2bd7ba00dc3ddb78df1198a6e80d7669cce6c2bdbeb2530a74ec58/pillow-11.3.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:67172f2944ebba3d4a7b54f2e95c786a3a50c21b88456329314caaa28cda70f6", size = 7644652, upload_time = "2025-07-03T13:10:10.391Z" }, + { url = "https://files.pythonhosted.org/packages/41/f1/6f2427a26fc683e00d985bc391bdd76d8dd4e92fac33d841127eb8fb2313/pillow-11.3.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97f07ed9f56a3b9b5f49d3661dc9607484e85c67e27f3e8be2c7d28ca032fec7", size = 5977787, upload_time = "2025-07-01T09:14:21.63Z" }, + { url = "https://files.pythonhosted.org/packages/e4/c9/06dd4a38974e24f932ff5f98ea3c546ce3f8c995d3f0985f8e5ba48bba19/pillow-11.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:676b2815362456b5b3216b4fd5bd89d362100dc6f4945154ff172e206a22c024", size = 6645236, upload_time = "2025-07-01T09:14:23.321Z" }, + { url = "https://files.pythonhosted.org/packages/40/e7/848f69fb79843b3d91241bad658e9c14f39a32f71a301bcd1d139416d1be/pillow-11.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3e184b2f26ff146363dd07bde8b711833d7b0202e27d13540bfe2e35a323a809", size = 6086950, upload_time = "2025-07-01T09:14:25.237Z" }, + { url = "https://files.pythonhosted.org/packages/0b/1a/7cff92e695a2a29ac1958c2a0fe4c0b2393b60aac13b04a4fe2735cad52d/pillow-11.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6be31e3fc9a621e071bc17bb7de63b85cbe0bfae91bb0363c893cbe67247780d", size = 6723358, upload_time = "2025-07-01T09:14:27.053Z" }, + { url = "https://files.pythonhosted.org/packages/26/7d/73699ad77895f69edff76b0f332acc3d497f22f5d75e5360f78cbcaff248/pillow-11.3.0-cp312-cp312-win32.whl", hash = "sha256:7b161756381f0918e05e7cb8a371fff367e807770f8fe92ecb20d905d0e1c149", size = 6275079, upload_time = "2025-07-01T09:14:30.104Z" }, + { url = "https://files.pythonhosted.org/packages/8c/ce/e7dfc873bdd9828f3b6e5c2bbb74e47a98ec23cc5c74fc4e54462f0d9204/pillow-11.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:a6444696fce635783440b7f7a9fc24b3ad10a9ea3f0ab66c5905be1c19ccf17d", size = 6986324, upload_time = "2025-07-01T09:14:31.899Z" }, + { url = "https://files.pythonhosted.org/packages/16/8f/b13447d1bf0b1f7467ce7d86f6e6edf66c0ad7cf44cf5c87a37f9bed9936/pillow-11.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:2aceea54f957dd4448264f9bf40875da0415c83eb85f55069d89c0ed436e3542", size = 2423067, upload_time = "2025-07-01T09:14:33.709Z" }, + { url = "https://files.pythonhosted.org/packages/1e/93/0952f2ed8db3a5a4c7a11f91965d6184ebc8cd7cbb7941a260d5f018cd2d/pillow-11.3.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:1c627742b539bba4309df89171356fcb3cc5a9178355b2727d1b74a6cf155fbd", size = 2128328, upload_time = "2025-07-01T09:14:35.276Z" }, + { url = "https://files.pythonhosted.org/packages/4b/e8/100c3d114b1a0bf4042f27e0f87d2f25e857e838034e98ca98fe7b8c0a9c/pillow-11.3.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:30b7c02f3899d10f13d7a48163c8969e4e653f8b43416d23d13d1bbfdc93b9f8", size = 2170652, upload_time = "2025-07-01T09:14:37.203Z" }, + { url = "https://files.pythonhosted.org/packages/aa/86/3f758a28a6e381758545f7cdb4942e1cb79abd271bea932998fc0db93cb6/pillow-11.3.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:7859a4cc7c9295f5838015d8cc0a9c215b77e43d07a25e460f35cf516df8626f", size = 2227443, upload_time = "2025-07-01T09:14:39.344Z" }, + { url = "https://files.pythonhosted.org/packages/01/f4/91d5b3ffa718df2f53b0dc109877993e511f4fd055d7e9508682e8aba092/pillow-11.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ec1ee50470b0d050984394423d96325b744d55c701a439d2bd66089bff963d3c", size = 5278474, upload_time = "2025-07-01T09:14:41.843Z" }, + { url = "https://files.pythonhosted.org/packages/f9/0e/37d7d3eca6c879fbd9dba21268427dffda1ab00d4eb05b32923d4fbe3b12/pillow-11.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7db51d222548ccfd274e4572fdbf3e810a5e66b00608862f947b163e613b67dd", size = 4686038, upload_time = "2025-07-01T09:14:44.008Z" }, + { url = "https://files.pythonhosted.org/packages/ff/b0/3426e5c7f6565e752d81221af9d3676fdbb4f352317ceafd42899aaf5d8a/pillow-11.3.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2d6fcc902a24ac74495df63faad1884282239265c6839a0a6416d33faedfae7e", size = 5864407, upload_time = "2025-07-03T13:10:15.628Z" }, + { url = "https://files.pythonhosted.org/packages/fc/c1/c6c423134229f2a221ee53f838d4be9d82bab86f7e2f8e75e47b6bf6cd77/pillow-11.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f0f5d8f4a08090c6d6d578351a2b91acf519a54986c055af27e7a93feae6d3f1", size = 7639094, upload_time = "2025-07-03T13:10:21.857Z" }, + { url = "https://files.pythonhosted.org/packages/ba/c9/09e6746630fe6372c67c648ff9deae52a2bc20897d51fa293571977ceb5d/pillow-11.3.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c37d8ba9411d6003bba9e518db0db0c58a680ab9fe5179f040b0463644bc9805", size = 5973503, upload_time = "2025-07-01T09:14:45.698Z" }, + { url = "https://files.pythonhosted.org/packages/d5/1c/a2a29649c0b1983d3ef57ee87a66487fdeb45132df66ab30dd37f7dbe162/pillow-11.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:13f87d581e71d9189ab21fe0efb5a23e9f28552d5be6979e84001d3b8505abe8", size = 6642574, upload_time = "2025-07-01T09:14:47.415Z" }, + { url = "https://files.pythonhosted.org/packages/36/de/d5cc31cc4b055b6c6fd990e3e7f0f8aaf36229a2698501bcb0cdf67c7146/pillow-11.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:023f6d2d11784a465f09fd09a34b150ea4672e85fb3d05931d89f373ab14abb2", size = 6084060, upload_time = "2025-07-01T09:14:49.636Z" }, + { url = "https://files.pythonhosted.org/packages/d5/ea/502d938cbaeec836ac28a9b730193716f0114c41325db428e6b280513f09/pillow-11.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:45dfc51ac5975b938e9809451c51734124e73b04d0f0ac621649821a63852e7b", size = 6721407, upload_time = "2025-07-01T09:14:51.962Z" }, + { url = "https://files.pythonhosted.org/packages/45/9c/9c5e2a73f125f6cbc59cc7087c8f2d649a7ae453f83bd0362ff7c9e2aee2/pillow-11.3.0-cp313-cp313-win32.whl", hash = "sha256:a4d336baed65d50d37b88ca5b60c0fa9d81e3a87d4a7930d3880d1624d5b31f3", size = 6273841, upload_time = "2025-07-01T09:14:54.142Z" }, + { url = "https://files.pythonhosted.org/packages/23/85/397c73524e0cd212067e0c969aa245b01d50183439550d24d9f55781b776/pillow-11.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:0bce5c4fd0921f99d2e858dc4d4d64193407e1b99478bc5cacecba2311abde51", size = 6978450, upload_time = "2025-07-01T09:14:56.436Z" }, + { url = "https://files.pythonhosted.org/packages/17/d2/622f4547f69cd173955194b78e4d19ca4935a1b0f03a302d655c9f6aae65/pillow-11.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:1904e1264881f682f02b7f8167935cce37bc97db457f8e7849dc3a6a52b99580", size = 2423055, upload_time = "2025-07-01T09:14:58.072Z" }, + { url = "https://files.pythonhosted.org/packages/dd/80/a8a2ac21dda2e82480852978416cfacd439a4b490a501a288ecf4fe2532d/pillow-11.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:4c834a3921375c48ee6b9624061076bc0a32a60b5532b322cc0ea64e639dd50e", size = 5281110, upload_time = "2025-07-01T09:14:59.79Z" }, + { url = "https://files.pythonhosted.org/packages/44/d6/b79754ca790f315918732e18f82a8146d33bcd7f4494380457ea89eb883d/pillow-11.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5e05688ccef30ea69b9317a9ead994b93975104a677a36a8ed8106be9260aa6d", size = 4689547, upload_time = "2025-07-01T09:15:01.648Z" }, + { url = "https://files.pythonhosted.org/packages/49/20/716b8717d331150cb00f7fdd78169c01e8e0c219732a78b0e59b6bdb2fd6/pillow-11.3.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1019b04af07fc0163e2810167918cb5add8d74674b6267616021ab558dc98ced", size = 5901554, upload_time = "2025-07-03T13:10:27.018Z" }, + { url = "https://files.pythonhosted.org/packages/74/cf/a9f3a2514a65bb071075063a96f0a5cf949c2f2fce683c15ccc83b1c1cab/pillow-11.3.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f944255db153ebb2b19c51fe85dd99ef0ce494123f21b9db4877ffdfc5590c7c", size = 7669132, upload_time = "2025-07-03T13:10:33.01Z" }, + { url = "https://files.pythonhosted.org/packages/98/3c/da78805cbdbee9cb43efe8261dd7cc0b4b93f2ac79b676c03159e9db2187/pillow-11.3.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1f85acb69adf2aaee8b7da124efebbdb959a104db34d3a2cb0f3793dbae422a8", size = 6005001, upload_time = "2025-07-01T09:15:03.365Z" }, + { url = "https://files.pythonhosted.org/packages/6c/fa/ce044b91faecf30e635321351bba32bab5a7e034c60187fe9698191aef4f/pillow-11.3.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:05f6ecbeff5005399bb48d198f098a9b4b6bdf27b8487c7f38ca16eeb070cd59", size = 6668814, upload_time = "2025-07-01T09:15:05.655Z" }, + { url = "https://files.pythonhosted.org/packages/7b/51/90f9291406d09bf93686434f9183aba27b831c10c87746ff49f127ee80cb/pillow-11.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a7bc6e6fd0395bc052f16b1a8670859964dbd7003bd0af2ff08342eb6e442cfe", size = 6113124, upload_time = "2025-07-01T09:15:07.358Z" }, + { url = "https://files.pythonhosted.org/packages/cd/5a/6fec59b1dfb619234f7636d4157d11fb4e196caeee220232a8d2ec48488d/pillow-11.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:83e1b0161c9d148125083a35c1c5a89db5b7054834fd4387499e06552035236c", size = 6747186, upload_time = "2025-07-01T09:15:09.317Z" }, + { url = "https://files.pythonhosted.org/packages/49/6b/00187a044f98255225f172de653941e61da37104a9ea60e4f6887717e2b5/pillow-11.3.0-cp313-cp313t-win32.whl", hash = "sha256:2a3117c06b8fb646639dce83694f2f9eac405472713fcb1ae887469c0d4f6788", size = 6277546, upload_time = "2025-07-01T09:15:11.311Z" }, + { url = "https://files.pythonhosted.org/packages/e8/5c/6caaba7e261c0d75bab23be79f1d06b5ad2a2ae49f028ccec801b0e853d6/pillow-11.3.0-cp313-cp313t-win_amd64.whl", hash = "sha256:857844335c95bea93fb39e0fa2726b4d9d758850b34075a7e3ff4f4fa3aa3b31", size = 6985102, upload_time = "2025-07-01T09:15:13.164Z" }, + { url = "https://files.pythonhosted.org/packages/f3/7e/b623008460c09a0cb38263c93b828c666493caee2eb34ff67f778b87e58c/pillow-11.3.0-cp313-cp313t-win_arm64.whl", hash = "sha256:8797edc41f3e8536ae4b10897ee2f637235c94f27404cac7297f7b607dd0716e", size = 2424803, upload_time = "2025-07-01T09:15:15.695Z" }, + { url = "https://files.pythonhosted.org/packages/73/f4/04905af42837292ed86cb1b1dabe03dce1edc008ef14c473c5c7e1443c5d/pillow-11.3.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:d9da3df5f9ea2a89b81bb6087177fb1f4d1c7146d583a3fe5c672c0d94e55e12", size = 5278520, upload_time = "2025-07-01T09:15:17.429Z" }, + { url = "https://files.pythonhosted.org/packages/41/b0/33d79e377a336247df6348a54e6d2a2b85d644ca202555e3faa0cf811ecc/pillow-11.3.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0b275ff9b04df7b640c59ec5a3cb113eefd3795a8df80bac69646ef699c6981a", size = 4686116, upload_time = "2025-07-01T09:15:19.423Z" }, + { url = "https://files.pythonhosted.org/packages/49/2d/ed8bc0ab219ae8768f529597d9509d184fe8a6c4741a6864fea334d25f3f/pillow-11.3.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0743841cabd3dba6a83f38a92672cccbd69af56e3e91777b0ee7f4dba4385632", size = 5864597, upload_time = "2025-07-03T13:10:38.404Z" }, + { url = "https://files.pythonhosted.org/packages/b5/3d/b932bb4225c80b58dfadaca9d42d08d0b7064d2d1791b6a237f87f661834/pillow-11.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2465a69cf967b8b49ee1b96d76718cd98c4e925414ead59fdf75cf0fd07df673", size = 7638246, upload_time = "2025-07-03T13:10:44.987Z" }, + { url = "https://files.pythonhosted.org/packages/09/b5/0487044b7c096f1b48f0d7ad416472c02e0e4bf6919541b111efd3cae690/pillow-11.3.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:41742638139424703b4d01665b807c6468e23e699e8e90cffefe291c5832b027", size = 5973336, upload_time = "2025-07-01T09:15:21.237Z" }, + { url = "https://files.pythonhosted.org/packages/a8/2d/524f9318f6cbfcc79fbc004801ea6b607ec3f843977652fdee4857a7568b/pillow-11.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:93efb0b4de7e340d99057415c749175e24c8864302369e05914682ba642e5d77", size = 6642699, upload_time = "2025-07-01T09:15:23.186Z" }, + { url = "https://files.pythonhosted.org/packages/6f/d2/a9a4f280c6aefedce1e8f615baaa5474e0701d86dd6f1dede66726462bbd/pillow-11.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7966e38dcd0fa11ca390aed7c6f20454443581d758242023cf36fcb319b1a874", size = 6083789, upload_time = "2025-07-01T09:15:25.1Z" }, + { url = "https://files.pythonhosted.org/packages/fe/54/86b0cd9dbb683a9d5e960b66c7379e821a19be4ac5810e2e5a715c09a0c0/pillow-11.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:98a9afa7b9007c67ed84c57c9e0ad86a6000da96eaa638e4f8abe5b65ff83f0a", size = 6720386, upload_time = "2025-07-01T09:15:27.378Z" }, + { url = "https://files.pythonhosted.org/packages/e7/95/88efcaf384c3588e24259c4203b909cbe3e3c2d887af9e938c2022c9dd48/pillow-11.3.0-cp314-cp314-win32.whl", hash = "sha256:02a723e6bf909e7cea0dac1b0e0310be9d7650cd66222a5f1c571455c0a45214", size = 6370911, upload_time = "2025-07-01T09:15:29.294Z" }, + { url = "https://files.pythonhosted.org/packages/2e/cc/934e5820850ec5eb107e7b1a72dd278140731c669f396110ebc326f2a503/pillow-11.3.0-cp314-cp314-win_amd64.whl", hash = "sha256:a418486160228f64dd9e9efcd132679b7a02a5f22c982c78b6fc7dab3fefb635", size = 7117383, upload_time = "2025-07-01T09:15:31.128Z" }, + { url = "https://files.pythonhosted.org/packages/d6/e9/9c0a616a71da2a5d163aa37405e8aced9a906d574b4a214bede134e731bc/pillow-11.3.0-cp314-cp314-win_arm64.whl", hash = "sha256:155658efb5e044669c08896c0c44231c5e9abcaadbc5cd3648df2f7c0b96b9a6", size = 2511385, upload_time = "2025-07-01T09:15:33.328Z" }, + { url = "https://files.pythonhosted.org/packages/1a/33/c88376898aff369658b225262cd4f2659b13e8178e7534df9e6e1fa289f6/pillow-11.3.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:59a03cdf019efbfeeed910bf79c7c93255c3d54bc45898ac2a4140071b02b4ae", size = 5281129, upload_time = "2025-07-01T09:15:35.194Z" }, + { url = "https://files.pythonhosted.org/packages/1f/70/d376247fb36f1844b42910911c83a02d5544ebd2a8bad9efcc0f707ea774/pillow-11.3.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f8a5827f84d973d8636e9dc5764af4f0cf2318d26744b3d902931701b0d46653", size = 4689580, upload_time = "2025-07-01T09:15:37.114Z" }, + { url = "https://files.pythonhosted.org/packages/eb/1c/537e930496149fbac69efd2fc4329035bbe2e5475b4165439e3be9cb183b/pillow-11.3.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ee92f2fd10f4adc4b43d07ec5e779932b4eb3dbfbc34790ada5a6669bc095aa6", size = 5902860, upload_time = "2025-07-03T13:10:50.248Z" }, + { url = "https://files.pythonhosted.org/packages/bd/57/80f53264954dcefeebcf9dae6e3eb1daea1b488f0be8b8fef12f79a3eb10/pillow-11.3.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c96d333dcf42d01f47b37e0979b6bd73ec91eae18614864622d9b87bbd5bbf36", size = 7670694, upload_time = "2025-07-03T13:10:56.432Z" }, + { url = "https://files.pythonhosted.org/packages/70/ff/4727d3b71a8578b4587d9c276e90efad2d6fe0335fd76742a6da08132e8c/pillow-11.3.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4c96f993ab8c98460cd0c001447bff6194403e8b1d7e149ade5f00594918128b", size = 6005888, upload_time = "2025-07-01T09:15:39.436Z" }, + { url = "https://files.pythonhosted.org/packages/05/ae/716592277934f85d3be51d7256f3636672d7b1abfafdc42cf3f8cbd4b4c8/pillow-11.3.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:41342b64afeba938edb034d122b2dda5db2139b9a4af999729ba8818e0056477", size = 6670330, upload_time = "2025-07-01T09:15:41.269Z" }, + { url = "https://files.pythonhosted.org/packages/e7/bb/7fe6cddcc8827b01b1a9766f5fdeb7418680744f9082035bdbabecf1d57f/pillow-11.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:068d9c39a2d1b358eb9f245ce7ab1b5c3246c7c8c7d9ba58cfa5b43146c06e50", size = 6114089, upload_time = "2025-07-01T09:15:43.13Z" }, + { url = "https://files.pythonhosted.org/packages/8b/f5/06bfaa444c8e80f1a8e4bff98da9c83b37b5be3b1deaa43d27a0db37ef84/pillow-11.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a1bc6ba083b145187f648b667e05a2534ecc4b9f2784c2cbe3089e44868f2b9b", size = 6748206, upload_time = "2025-07-01T09:15:44.937Z" }, + { url = "https://files.pythonhosted.org/packages/f0/77/bc6f92a3e8e6e46c0ca78abfffec0037845800ea38c73483760362804c41/pillow-11.3.0-cp314-cp314t-win32.whl", hash = "sha256:118ca10c0d60b06d006be10a501fd6bbdfef559251ed31b794668ed569c87e12", size = 6377370, upload_time = "2025-07-01T09:15:46.673Z" }, + { url = "https://files.pythonhosted.org/packages/4a/82/3a721f7d69dca802befb8af08b7c79ebcab461007ce1c18bd91a5d5896f9/pillow-11.3.0-cp314-cp314t-win_amd64.whl", hash = "sha256:8924748b688aa210d79883357d102cd64690e56b923a186f35a82cbc10f997db", size = 7121500, upload_time = "2025-07-01T09:15:48.512Z" }, + { url = "https://files.pythonhosted.org/packages/89/c7/5572fa4a3f45740eaab6ae86fcdf7195b55beac1371ac8c619d880cfe948/pillow-11.3.0-cp314-cp314t-win_arm64.whl", hash = "sha256:79ea0d14d3ebad43ec77ad5272e6ff9bba5b679ef73375ea760261207fa8e0aa", size = 2512835, upload_time = "2025-07-01T09:15:50.399Z" }, ] [[package]] @@ -1945,36 +1987,36 @@ dependencies = [ { name = "platformdirs" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/5a/cb/e6ffaf3d019e8501b1264dac529bf829ac2f1fe1d488cfcf67f1fccadacf/pint-0.25.tar.gz", hash = "sha256:22911a30d682ee0540d656571c19a7b1806ce00b2be88a16f67218108b7b8cc2", size = 253010 } +sdist = { url = "https://files.pythonhosted.org/packages/5a/cb/e6ffaf3d019e8501b1264dac529bf829ac2f1fe1d488cfcf67f1fccadacf/pint-0.25.tar.gz", hash = "sha256:22911a30d682ee0540d656571c19a7b1806ce00b2be88a16f67218108b7b8cc2", size = 253010, upload_time = "2025-08-15T19:49:12.72Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/76/cc/c528311d798e22ec884b816e8aa2989e0f1f28cdc8e5969e2be5f10bce85/pint-0.25-py3-none-any.whl", hash = "sha256:cc20ae3dff010b9bbea41fb80c2de008f683cc83512cea73633d55aead80aa1e", size = 305462 }, + { url = "https://files.pythonhosted.org/packages/76/cc/c528311d798e22ec884b816e8aa2989e0f1f28cdc8e5969e2be5f10bce85/pint-0.25-py3-none-any.whl", hash = "sha256:cc20ae3dff010b9bbea41fb80c2de008f683cc83512cea73633d55aead80aa1e", size = 305462, upload_time = "2025-08-15T19:49:11.083Z" }, ] [[package]] name = "platformdirs" -version = "4.4.0" +version = "4.5.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/23/e8/21db9c9987b0e728855bd57bff6984f67952bea55d6f75e055c46b5383e8/platformdirs-4.4.0.tar.gz", hash = "sha256:ca753cf4d81dc309bc67b0ea38fd15dc97bc30ce419a7f58d13eb3bf14c4febf", size = 21634 } +sdist = { url = "https://files.pythonhosted.org/packages/61/33/9611380c2bdb1225fdef633e2a9610622310fed35ab11dac9620972ee088/platformdirs-4.5.0.tar.gz", hash = "sha256:70ddccdd7c99fc5942e9fc25636a8b34d04c24b335100223152c2803e4063312", size = 21632, upload_time = "2025-10-08T17:44:48.791Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/40/4b/2028861e724d3bd36227adfa20d3fd24c3fc6d52032f4a93c133be5d17ce/platformdirs-4.4.0-py3-none-any.whl", hash = "sha256:abd01743f24e5287cd7a5db3752faf1a2d65353f38ec26d98e25a6db65958c85", size = 18654 }, + { url = "https://files.pythonhosted.org/packages/73/cb/ac7874b3e5d58441674fb70742e6c374b28b0c7cb988d37d991cde47166c/platformdirs-4.5.0-py3-none-any.whl", hash = "sha256:e578a81bb873cbb89a41fcc904c7ef523cc18284b7e3b3ccf06aca1403b7ebd3", size = 18651, upload_time = "2025-10-08T17:44:47.223Z" }, ] [[package]] name = "pluggy" version = "1.6.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412 } +sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload_time = "2025-05-15T12:30:07.975Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538 }, + { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload_time = "2025-05-15T12:30:06.134Z" }, ] [[package]] name = "ply" version = "3.11" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e5/69/882ee5c9d017149285cab114ebeab373308ef0f874fcdac9beb90e0ac4da/ply-3.11.tar.gz", hash = "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3", size = 159130 } +sdist = { url = "https://files.pythonhosted.org/packages/e5/69/882ee5c9d017149285cab114ebeab373308ef0f874fcdac9beb90e0ac4da/ply-3.11.tar.gz", hash = "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3", size = 159130, upload_time = "2018-02-15T19:01:31.097Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a3/58/35da89ee790598a0700ea49b2a66594140f44dec458c07e8e3d4979137fc/ply-3.11-py2.py3-none-any.whl", hash = "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce", size = 49567 }, + { url = "https://files.pythonhosted.org/packages/a3/58/35da89ee790598a0700ea49b2a66594140f44dec458c07e8e3d4979137fc/ply-3.11-py2.py3-none-any.whl", hash = "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce", size = 49567, upload_time = "2018-02-15T19:01:27.172Z" }, ] [[package]] @@ -1988,9 +2030,9 @@ dependencies = [ { name = "pyyaml" }, { name = "virtualenv" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ff/29/7cf5bbc236333876e4b41f56e06857a87937ce4bf91e117a6991a2dbb02a/pre_commit-4.3.0.tar.gz", hash = "sha256:499fe450cc9d42e9d58e606262795ecb64dd05438943c62b66f6a8673da30b16", size = 193792 } +sdist = { url = "https://files.pythonhosted.org/packages/ff/29/7cf5bbc236333876e4b41f56e06857a87937ce4bf91e117a6991a2dbb02a/pre_commit-4.3.0.tar.gz", hash = "sha256:499fe450cc9d42e9d58e606262795ecb64dd05438943c62b66f6a8673da30b16", size = 193792, upload_time = "2025-08-09T18:56:14.651Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/5b/a5/987a405322d78a73b66e39e4a90e4ef156fd7141bf71df987e50717c321b/pre_commit-4.3.0-py2.py3-none-any.whl", hash = "sha256:2b0747ad7e6e967169136edffee14c16e148a778a54e4f967921aa1ebf2308d8", size = 220965 }, + { url = "https://files.pythonhosted.org/packages/5b/a5/987a405322d78a73b66e39e4a90e4ef156fd7141bf71df987e50717c321b/pre_commit-4.3.0-py2.py3-none-any.whl", hash = "sha256:2b0747ad7e6e967169136edffee14c16e148a778a54e4f967921aa1ebf2308d8", size = 220965, upload_time = "2025-08-09T18:56:13.192Z" }, ] [[package]] @@ -2000,81 +2042,81 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "wcwidth" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a1/96/06e01a7b38dce6fe1db213e061a4602dd6032a8a97ef6c1a862537732421/prompt_toolkit-3.0.52.tar.gz", hash = "sha256:28cde192929c8e7321de85de1ddbe736f1375148b02f2e17edd840042b1be855", size = 434198 } +sdist = { url = "https://files.pythonhosted.org/packages/a1/96/06e01a7b38dce6fe1db213e061a4602dd6032a8a97ef6c1a862537732421/prompt_toolkit-3.0.52.tar.gz", hash = "sha256:28cde192929c8e7321de85de1ddbe736f1375148b02f2e17edd840042b1be855", size = 434198, upload_time = "2025-08-27T15:24:02.057Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl", hash = "sha256:9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955", size = 391431 }, + { url = "https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl", hash = "sha256:9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955", size = 391431, upload_time = "2025-08-27T15:23:59.498Z" }, ] [[package]] name = "psutil" version = "7.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b3/31/4723d756b59344b643542936e37a31d1d3204bcdc42a7daa8ee9eb06fb50/psutil-7.1.0.tar.gz", hash = "sha256:655708b3c069387c8b77b072fc429a57d0e214221d01c0a772df7dfedcb3bcd2", size = 497660 } +sdist = { url = "https://files.pythonhosted.org/packages/b3/31/4723d756b59344b643542936e37a31d1d3204bcdc42a7daa8ee9eb06fb50/psutil-7.1.0.tar.gz", hash = "sha256:655708b3c069387c8b77b072fc429a57d0e214221d01c0a772df7dfedcb3bcd2", size = 497660, upload_time = "2025-09-17T20:14:52.902Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/46/62/ce4051019ee20ce0ed74432dd73a5bb087a6704284a470bb8adff69a0932/psutil-7.1.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:76168cef4397494250e9f4e73eb3752b146de1dd950040b29186d0cce1d5ca13", size = 245242 }, - { url = "https://files.pythonhosted.org/packages/38/61/f76959fba841bf5b61123fbf4b650886dc4094c6858008b5bf73d9057216/psutil-7.1.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:5d007560c8c372efdff9e4579c2846d71de737e4605f611437255e81efcca2c5", size = 246682 }, - { url = "https://files.pythonhosted.org/packages/88/7a/37c99d2e77ec30d63398ffa6a660450b8a62517cabe44b3e9bae97696e8d/psutil-7.1.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22e4454970b32472ce7deaa45d045b34d3648ce478e26a04c7e858a0a6e75ff3", size = 287994 }, - { url = "https://files.pythonhosted.org/packages/9d/de/04c8c61232f7244aa0a4b9a9fbd63a89d5aeaf94b2fc9d1d16e2faa5cbb0/psutil-7.1.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c70e113920d51e89f212dd7be06219a9b88014e63a4cec69b684c327bc474e3", size = 291163 }, - { url = "https://files.pythonhosted.org/packages/f4/58/c4f976234bf6d4737bc8c02a81192f045c307b72cf39c9e5c5a2d78927f6/psutil-7.1.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7d4a113425c037300de3ac8b331637293da9be9713855c4fc9d2d97436d7259d", size = 293625 }, - { url = "https://files.pythonhosted.org/packages/79/87/157c8e7959ec39ced1b11cc93c730c4fb7f9d408569a6c59dbd92ceb35db/psutil-7.1.0-cp37-abi3-win32.whl", hash = "sha256:09ad740870c8d219ed8daae0ad3b726d3bf9a028a198e7f3080f6a1888b99bca", size = 244812 }, - { url = "https://files.pythonhosted.org/packages/bf/e9/b44c4f697276a7a95b8e94d0e320a7bf7f3318521b23de69035540b39838/psutil-7.1.0-cp37-abi3-win_amd64.whl", hash = "sha256:57f5e987c36d3146c0dd2528cd42151cf96cd359b9d67cfff836995cc5df9a3d", size = 247965 }, - { url = "https://files.pythonhosted.org/packages/26/65/1070a6e3c036f39142c2820c4b52e9243246fcfc3f96239ac84472ba361e/psutil-7.1.0-cp37-abi3-win_arm64.whl", hash = "sha256:6937cb68133e7c97b6cc9649a570c9a18ba0efebed46d8c5dae4c07fa1b67a07", size = 244971 }, + { url = "https://files.pythonhosted.org/packages/46/62/ce4051019ee20ce0ed74432dd73a5bb087a6704284a470bb8adff69a0932/psutil-7.1.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:76168cef4397494250e9f4e73eb3752b146de1dd950040b29186d0cce1d5ca13", size = 245242, upload_time = "2025-09-17T20:14:56.126Z" }, + { url = "https://files.pythonhosted.org/packages/38/61/f76959fba841bf5b61123fbf4b650886dc4094c6858008b5bf73d9057216/psutil-7.1.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:5d007560c8c372efdff9e4579c2846d71de737e4605f611437255e81efcca2c5", size = 246682, upload_time = "2025-09-17T20:14:58.25Z" }, + { url = "https://files.pythonhosted.org/packages/88/7a/37c99d2e77ec30d63398ffa6a660450b8a62517cabe44b3e9bae97696e8d/psutil-7.1.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22e4454970b32472ce7deaa45d045b34d3648ce478e26a04c7e858a0a6e75ff3", size = 287994, upload_time = "2025-09-17T20:14:59.901Z" }, + { url = "https://files.pythonhosted.org/packages/9d/de/04c8c61232f7244aa0a4b9a9fbd63a89d5aeaf94b2fc9d1d16e2faa5cbb0/psutil-7.1.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c70e113920d51e89f212dd7be06219a9b88014e63a4cec69b684c327bc474e3", size = 291163, upload_time = "2025-09-17T20:15:01.481Z" }, + { url = "https://files.pythonhosted.org/packages/f4/58/c4f976234bf6d4737bc8c02a81192f045c307b72cf39c9e5c5a2d78927f6/psutil-7.1.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7d4a113425c037300de3ac8b331637293da9be9713855c4fc9d2d97436d7259d", size = 293625, upload_time = "2025-09-17T20:15:04.492Z" }, + { url = "https://files.pythonhosted.org/packages/79/87/157c8e7959ec39ced1b11cc93c730c4fb7f9d408569a6c59dbd92ceb35db/psutil-7.1.0-cp37-abi3-win32.whl", hash = "sha256:09ad740870c8d219ed8daae0ad3b726d3bf9a028a198e7f3080f6a1888b99bca", size = 244812, upload_time = "2025-09-17T20:15:07.462Z" }, + { url = "https://files.pythonhosted.org/packages/bf/e9/b44c4f697276a7a95b8e94d0e320a7bf7f3318521b23de69035540b39838/psutil-7.1.0-cp37-abi3-win_amd64.whl", hash = "sha256:57f5e987c36d3146c0dd2528cd42151cf96cd359b9d67cfff836995cc5df9a3d", size = 247965, upload_time = "2025-09-17T20:15:09.673Z" }, + { url = "https://files.pythonhosted.org/packages/26/65/1070a6e3c036f39142c2820c4b52e9243246fcfc3f96239ac84472ba361e/psutil-7.1.0-cp37-abi3-win_arm64.whl", hash = "sha256:6937cb68133e7c97b6cc9649a570c9a18ba0efebed46d8c5dae4c07fa1b67a07", size = 244971, upload_time = "2025-09-17T20:15:12.262Z" }, ] [[package]] name = "ptyprocess" version = "0.7.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220", size = 70762 } +sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220", size = 70762, upload_time = "2020-12-28T15:15:30.155Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", size = 13993 }, + { url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", size = 13993, upload_time = "2020-12-28T15:15:28.35Z" }, ] [[package]] name = "pure-eval" version = "0.2.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/cd/05/0a34433a064256a578f1783a10da6df098ceaa4a57bbeaa96a6c0352786b/pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42", size = 19752 } +sdist = { url = "https://files.pythonhosted.org/packages/cd/05/0a34433a064256a578f1783a10da6df098ceaa4a57bbeaa96a6c0352786b/pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42", size = 19752, upload_time = "2024-07-21T12:58:21.801Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842 }, + { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842, upload_time = "2024-07-21T12:58:20.04Z" }, ] [[package]] name = "pyarrow" version = "21.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ef/c2/ea068b8f00905c06329a3dfcd40d0fcc2b7d0f2e355bdb25b65e0a0e4cd4/pyarrow-21.0.0.tar.gz", hash = "sha256:5051f2dccf0e283ff56335760cbc8622cf52264d67e359d5569541ac11b6d5bc", size = 1133487 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ca/d4/d4f817b21aacc30195cf6a46ba041dd1be827efa4a623cc8bf39a1c2a0c0/pyarrow-21.0.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:3a302f0e0963db37e0a24a70c56cf91a4faa0bca51c23812279ca2e23481fccd", size = 31160305 }, - { url = "https://files.pythonhosted.org/packages/a2/9c/dcd38ce6e4b4d9a19e1d36914cb8e2b1da4e6003dd075474c4cfcdfe0601/pyarrow-21.0.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:b6b27cf01e243871390474a211a7922bfbe3bda21e39bc9160daf0da3fe48876", size = 32684264 }, - { url = "https://files.pythonhosted.org/packages/4f/74/2a2d9f8d7a59b639523454bec12dba35ae3d0a07d8ab529dc0809f74b23c/pyarrow-21.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:e72a8ec6b868e258a2cd2672d91f2860ad532d590ce94cdf7d5e7ec674ccf03d", size = 41108099 }, - { url = "https://files.pythonhosted.org/packages/ad/90/2660332eeb31303c13b653ea566a9918484b6e4d6b9d2d46879a33ab0622/pyarrow-21.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:b7ae0bbdc8c6674259b25bef5d2a1d6af5d39d7200c819cf99e07f7dfef1c51e", size = 42829529 }, - { url = "https://files.pythonhosted.org/packages/33/27/1a93a25c92717f6aa0fca06eb4700860577d016cd3ae51aad0e0488ac899/pyarrow-21.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:58c30a1729f82d201627c173d91bd431db88ea74dcaa3885855bc6203e433b82", size = 43367883 }, - { url = "https://files.pythonhosted.org/packages/05/d9/4d09d919f35d599bc05c6950095e358c3e15148ead26292dfca1fb659b0c/pyarrow-21.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:072116f65604b822a7f22945a7a6e581cfa28e3454fdcc6939d4ff6090126623", size = 45133802 }, - { url = "https://files.pythonhosted.org/packages/71/30/f3795b6e192c3ab881325ffe172e526499eb3780e306a15103a2764916a2/pyarrow-21.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:cf56ec8b0a5c8c9d7021d6fd754e688104f9ebebf1bf4449613c9531f5346a18", size = 26203175 }, - { url = "https://files.pythonhosted.org/packages/16/ca/c7eaa8e62db8fb37ce942b1ea0c6d7abfe3786ca193957afa25e71b81b66/pyarrow-21.0.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:e99310a4ebd4479bcd1964dff9e14af33746300cb014aa4a3781738ac63baf4a", size = 31154306 }, - { url = "https://files.pythonhosted.org/packages/ce/e8/e87d9e3b2489302b3a1aea709aaca4b781c5252fcb812a17ab6275a9a484/pyarrow-21.0.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:d2fe8e7f3ce329a71b7ddd7498b3cfac0eeb200c2789bd840234f0dc271a8efe", size = 32680622 }, - { url = "https://files.pythonhosted.org/packages/84/52/79095d73a742aa0aba370c7942b1b655f598069489ab387fe47261a849e1/pyarrow-21.0.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:f522e5709379d72fb3da7785aa489ff0bb87448a9dc5a75f45763a795a089ebd", size = 41104094 }, - { url = "https://files.pythonhosted.org/packages/89/4b/7782438b551dbb0468892a276b8c789b8bbdb25ea5c5eb27faadd753e037/pyarrow-21.0.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:69cbbdf0631396e9925e048cfa5bce4e8c3d3b41562bbd70c685a8eb53a91e61", size = 42825576 }, - { url = "https://files.pythonhosted.org/packages/b3/62/0f29de6e0a1e33518dec92c65be0351d32d7ca351e51ec5f4f837a9aab91/pyarrow-21.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:731c7022587006b755d0bdb27626a1a3bb004bb56b11fb30d98b6c1b4718579d", size = 43368342 }, - { url = "https://files.pythonhosted.org/packages/90/c7/0fa1f3f29cf75f339768cc698c8ad4ddd2481c1742e9741459911c9ac477/pyarrow-21.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dc56bc708f2d8ac71bd1dcb927e458c93cec10b98eb4120206a4091db7b67b99", size = 45131218 }, - { url = "https://files.pythonhosted.org/packages/01/63/581f2076465e67b23bc5a37d4a2abff8362d389d29d8105832e82c9c811c/pyarrow-21.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:186aa00bca62139f75b7de8420f745f2af12941595bbbfa7ed3870ff63e25636", size = 26087551 }, - { url = "https://files.pythonhosted.org/packages/c9/ab/357d0d9648bb8241ee7348e564f2479d206ebe6e1c47ac5027c2e31ecd39/pyarrow-21.0.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:a7a102574faa3f421141a64c10216e078df467ab9576684d5cd696952546e2da", size = 31290064 }, - { url = "https://files.pythonhosted.org/packages/3f/8a/5685d62a990e4cac2043fc76b4661bf38d06efed55cf45a334b455bd2759/pyarrow-21.0.0-cp313-cp313t-macosx_12_0_x86_64.whl", hash = "sha256:1e005378c4a2c6db3ada3ad4c217b381f6c886f0a80d6a316fe586b90f77efd7", size = 32727837 }, - { url = "https://files.pythonhosted.org/packages/fc/de/c0828ee09525c2bafefd3e736a248ebe764d07d0fd762d4f0929dbc516c9/pyarrow-21.0.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:65f8e85f79031449ec8706b74504a316805217b35b6099155dd7e227eef0d4b6", size = 41014158 }, - { url = "https://files.pythonhosted.org/packages/6e/26/a2865c420c50b7a3748320b614f3484bfcde8347b2639b2b903b21ce6a72/pyarrow-21.0.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:3a81486adc665c7eb1a2bde0224cfca6ceaba344a82a971ef059678417880eb8", size = 42667885 }, - { url = "https://files.pythonhosted.org/packages/0a/f9/4ee798dc902533159250fb4321267730bc0a107d8c6889e07c3add4fe3a5/pyarrow-21.0.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:fc0d2f88b81dcf3ccf9a6ae17f89183762c8a94a5bdcfa09e05cfe413acf0503", size = 43276625 }, - { url = "https://files.pythonhosted.org/packages/5a/da/e02544d6997037a4b0d22d8e5f66bc9315c3671371a8b18c79ade1cefe14/pyarrow-21.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6299449adf89df38537837487a4f8d3bd91ec94354fdd2a7d30bc11c48ef6e79", size = 44951890 }, - { url = "https://files.pythonhosted.org/packages/e5/4e/519c1bc1876625fe6b71e9a28287c43ec2f20f73c658b9ae1d485c0c206e/pyarrow-21.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:222c39e2c70113543982c6b34f3077962b44fca38c0bd9e68bb6781534425c10", size = 26371006 }, +sdist = { url = "https://files.pythonhosted.org/packages/ef/c2/ea068b8f00905c06329a3dfcd40d0fcc2b7d0f2e355bdb25b65e0a0e4cd4/pyarrow-21.0.0.tar.gz", hash = "sha256:5051f2dccf0e283ff56335760cbc8622cf52264d67e359d5569541ac11b6d5bc", size = 1133487, upload_time = "2025-07-18T00:57:31.761Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ca/d4/d4f817b21aacc30195cf6a46ba041dd1be827efa4a623cc8bf39a1c2a0c0/pyarrow-21.0.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:3a302f0e0963db37e0a24a70c56cf91a4faa0bca51c23812279ca2e23481fccd", size = 31160305, upload_time = "2025-07-18T00:55:35.373Z" }, + { url = "https://files.pythonhosted.org/packages/a2/9c/dcd38ce6e4b4d9a19e1d36914cb8e2b1da4e6003dd075474c4cfcdfe0601/pyarrow-21.0.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:b6b27cf01e243871390474a211a7922bfbe3bda21e39bc9160daf0da3fe48876", size = 32684264, upload_time = "2025-07-18T00:55:39.303Z" }, + { url = "https://files.pythonhosted.org/packages/4f/74/2a2d9f8d7a59b639523454bec12dba35ae3d0a07d8ab529dc0809f74b23c/pyarrow-21.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:e72a8ec6b868e258a2cd2672d91f2860ad532d590ce94cdf7d5e7ec674ccf03d", size = 41108099, upload_time = "2025-07-18T00:55:42.889Z" }, + { url = "https://files.pythonhosted.org/packages/ad/90/2660332eeb31303c13b653ea566a9918484b6e4d6b9d2d46879a33ab0622/pyarrow-21.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:b7ae0bbdc8c6674259b25bef5d2a1d6af5d39d7200c819cf99e07f7dfef1c51e", size = 42829529, upload_time = "2025-07-18T00:55:47.069Z" }, + { url = "https://files.pythonhosted.org/packages/33/27/1a93a25c92717f6aa0fca06eb4700860577d016cd3ae51aad0e0488ac899/pyarrow-21.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:58c30a1729f82d201627c173d91bd431db88ea74dcaa3885855bc6203e433b82", size = 43367883, upload_time = "2025-07-18T00:55:53.069Z" }, + { url = "https://files.pythonhosted.org/packages/05/d9/4d09d919f35d599bc05c6950095e358c3e15148ead26292dfca1fb659b0c/pyarrow-21.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:072116f65604b822a7f22945a7a6e581cfa28e3454fdcc6939d4ff6090126623", size = 45133802, upload_time = "2025-07-18T00:55:57.714Z" }, + { url = "https://files.pythonhosted.org/packages/71/30/f3795b6e192c3ab881325ffe172e526499eb3780e306a15103a2764916a2/pyarrow-21.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:cf56ec8b0a5c8c9d7021d6fd754e688104f9ebebf1bf4449613c9531f5346a18", size = 26203175, upload_time = "2025-07-18T00:56:01.364Z" }, + { url = "https://files.pythonhosted.org/packages/16/ca/c7eaa8e62db8fb37ce942b1ea0c6d7abfe3786ca193957afa25e71b81b66/pyarrow-21.0.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:e99310a4ebd4479bcd1964dff9e14af33746300cb014aa4a3781738ac63baf4a", size = 31154306, upload_time = "2025-07-18T00:56:04.42Z" }, + { url = "https://files.pythonhosted.org/packages/ce/e8/e87d9e3b2489302b3a1aea709aaca4b781c5252fcb812a17ab6275a9a484/pyarrow-21.0.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:d2fe8e7f3ce329a71b7ddd7498b3cfac0eeb200c2789bd840234f0dc271a8efe", size = 32680622, upload_time = "2025-07-18T00:56:07.505Z" }, + { url = "https://files.pythonhosted.org/packages/84/52/79095d73a742aa0aba370c7942b1b655f598069489ab387fe47261a849e1/pyarrow-21.0.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:f522e5709379d72fb3da7785aa489ff0bb87448a9dc5a75f45763a795a089ebd", size = 41104094, upload_time = "2025-07-18T00:56:10.994Z" }, + { url = "https://files.pythonhosted.org/packages/89/4b/7782438b551dbb0468892a276b8c789b8bbdb25ea5c5eb27faadd753e037/pyarrow-21.0.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:69cbbdf0631396e9925e048cfa5bce4e8c3d3b41562bbd70c685a8eb53a91e61", size = 42825576, upload_time = "2025-07-18T00:56:15.569Z" }, + { url = "https://files.pythonhosted.org/packages/b3/62/0f29de6e0a1e33518dec92c65be0351d32d7ca351e51ec5f4f837a9aab91/pyarrow-21.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:731c7022587006b755d0bdb27626a1a3bb004bb56b11fb30d98b6c1b4718579d", size = 43368342, upload_time = "2025-07-18T00:56:19.531Z" }, + { url = "https://files.pythonhosted.org/packages/90/c7/0fa1f3f29cf75f339768cc698c8ad4ddd2481c1742e9741459911c9ac477/pyarrow-21.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dc56bc708f2d8ac71bd1dcb927e458c93cec10b98eb4120206a4091db7b67b99", size = 45131218, upload_time = "2025-07-18T00:56:23.347Z" }, + { url = "https://files.pythonhosted.org/packages/01/63/581f2076465e67b23bc5a37d4a2abff8362d389d29d8105832e82c9c811c/pyarrow-21.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:186aa00bca62139f75b7de8420f745f2af12941595bbbfa7ed3870ff63e25636", size = 26087551, upload_time = "2025-07-18T00:56:26.758Z" }, + { url = "https://files.pythonhosted.org/packages/c9/ab/357d0d9648bb8241ee7348e564f2479d206ebe6e1c47ac5027c2e31ecd39/pyarrow-21.0.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:a7a102574faa3f421141a64c10216e078df467ab9576684d5cd696952546e2da", size = 31290064, upload_time = "2025-07-18T00:56:30.214Z" }, + { url = "https://files.pythonhosted.org/packages/3f/8a/5685d62a990e4cac2043fc76b4661bf38d06efed55cf45a334b455bd2759/pyarrow-21.0.0-cp313-cp313t-macosx_12_0_x86_64.whl", hash = "sha256:1e005378c4a2c6db3ada3ad4c217b381f6c886f0a80d6a316fe586b90f77efd7", size = 32727837, upload_time = "2025-07-18T00:56:33.935Z" }, + { url = "https://files.pythonhosted.org/packages/fc/de/c0828ee09525c2bafefd3e736a248ebe764d07d0fd762d4f0929dbc516c9/pyarrow-21.0.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:65f8e85f79031449ec8706b74504a316805217b35b6099155dd7e227eef0d4b6", size = 41014158, upload_time = "2025-07-18T00:56:37.528Z" }, + { url = "https://files.pythonhosted.org/packages/6e/26/a2865c420c50b7a3748320b614f3484bfcde8347b2639b2b903b21ce6a72/pyarrow-21.0.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:3a81486adc665c7eb1a2bde0224cfca6ceaba344a82a971ef059678417880eb8", size = 42667885, upload_time = "2025-07-18T00:56:41.483Z" }, + { url = "https://files.pythonhosted.org/packages/0a/f9/4ee798dc902533159250fb4321267730bc0a107d8c6889e07c3add4fe3a5/pyarrow-21.0.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:fc0d2f88b81dcf3ccf9a6ae17f89183762c8a94a5bdcfa09e05cfe413acf0503", size = 43276625, upload_time = "2025-07-18T00:56:48.002Z" }, + { url = "https://files.pythonhosted.org/packages/5a/da/e02544d6997037a4b0d22d8e5f66bc9315c3671371a8b18c79ade1cefe14/pyarrow-21.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6299449adf89df38537837487a4f8d3bd91ec94354fdd2a7d30bc11c48ef6e79", size = 44951890, upload_time = "2025-07-18T00:56:52.568Z" }, + { url = "https://files.pythonhosted.org/packages/e5/4e/519c1bc1876625fe6b71e9a28287c43ec2f20f73c658b9ae1d485c0c206e/pyarrow-21.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:222c39e2c70113543982c6b34f3077962b44fca38c0bd9e68bb6781534425c10", size = 26371006, upload_time = "2025-07-18T00:56:56.379Z" }, ] [[package]] name = "pycparser" version = "2.23" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/fe/cf/d2d3b9f5699fb1e4615c8e32ff220203e43b248e1dfcc6736ad9057731ca/pycparser-2.23.tar.gz", hash = "sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2", size = 173734 } +sdist = { url = "https://files.pythonhosted.org/packages/fe/cf/d2d3b9f5699fb1e4615c8e32ff220203e43b248e1dfcc6736ad9057731ca/pycparser-2.23.tar.gz", hash = "sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2", size = 173734, upload_time = "2025-09-09T13:23:47.91Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/e3/59cd50310fc9b59512193629e1984c1f95e5c8ae6e5d8c69532ccc65a7fe/pycparser-2.23-py3-none-any.whl", hash = "sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934", size = 118140 }, + { url = "https://files.pythonhosted.org/packages/a0/e3/59cd50310fc9b59512193629e1984c1f95e5c8ae6e5d8c69532ccc65a7fe/pycparser-2.23-py3-none-any.whl", hash = "sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934", size = 118140, upload_time = "2025-09-09T13:23:46.651Z" }, ] [[package]] @@ -2087,9 +2129,9 @@ dependencies = [ { name = "typing-extensions" }, { name = "typing-inspection" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ff/5d/09a551ba512d7ca404d785072700d3f6727a02f6f3c24ecfd081c7cf0aa8/pydantic-2.11.9.tar.gz", hash = "sha256:6b8ffda597a14812a7975c90b82a8a2e777d9257aba3453f973acd3c032a18e2", size = 788495 } +sdist = { url = "https://files.pythonhosted.org/packages/ff/5d/09a551ba512d7ca404d785072700d3f6727a02f6f3c24ecfd081c7cf0aa8/pydantic-2.11.9.tar.gz", hash = "sha256:6b8ffda597a14812a7975c90b82a8a2e777d9257aba3453f973acd3c032a18e2", size = 788495, upload_time = "2025-09-13T11:26:39.325Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3e/d3/108f2006987c58e76691d5ae5d200dd3e0f532cb4e5fa3560751c3a1feba/pydantic-2.11.9-py3-none-any.whl", hash = "sha256:c42dd626f5cfc1c6950ce6205ea58c93efa406da65f479dcb4029d5934857da2", size = 444855 }, + { url = "https://files.pythonhosted.org/packages/3e/d3/108f2006987c58e76691d5ae5d200dd3e0f532cb4e5fa3560751c3a1feba/pydantic-2.11.9-py3-none-any.whl", hash = "sha256:c42dd626f5cfc1c6950ce6205ea58c93efa406da65f479dcb4029d5934857da2", size = 444855, upload_time = "2025-09-13T11:26:36.909Z" }, ] [[package]] @@ -2099,57 +2141,60 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ad/88/5f2260bdfae97aabf98f1778d43f69574390ad787afb646292a638c923d4/pydantic_core-2.33.2.tar.gz", hash = "sha256:7cb8bc3605c29176e1b105350d2e6474142d7c1bd1d9327c4a9bdb46bf827acc", size = 435195 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/18/8a/2b41c97f554ec8c71f2a8a5f85cb56a8b0956addfe8b0efb5b3d77e8bdc3/pydantic_core-2.33.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a7ec89dc587667f22b6a0b6579c249fca9026ce7c333fc142ba42411fa243cdc", size = 2009000 }, - { url = "https://files.pythonhosted.org/packages/a1/02/6224312aacb3c8ecbaa959897af57181fb6cf3a3d7917fd44d0f2917e6f2/pydantic_core-2.33.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3c6db6e52c6d70aa0d00d45cdb9b40f0433b96380071ea80b09277dba021ddf7", size = 1847996 }, - { url = "https://files.pythonhosted.org/packages/d6/46/6dcdf084a523dbe0a0be59d054734b86a981726f221f4562aed313dbcb49/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e61206137cbc65e6d5256e1166f88331d3b6238e082d9f74613b9b765fb9025", size = 1880957 }, - { url = "https://files.pythonhosted.org/packages/ec/6b/1ec2c03837ac00886ba8160ce041ce4e325b41d06a034adbef11339ae422/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb8c529b2819c37140eb51b914153063d27ed88e3bdc31b71198a198e921e011", size = 1964199 }, - { url = "https://files.pythonhosted.org/packages/2d/1d/6bf34d6adb9debd9136bd197ca72642203ce9aaaa85cfcbfcf20f9696e83/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c52b02ad8b4e2cf14ca7b3d918f3eb0ee91e63b3167c32591e57c4317e134f8f", size = 2120296 }, - { url = "https://files.pythonhosted.org/packages/e0/94/2bd0aaf5a591e974b32a9f7123f16637776c304471a0ab33cf263cf5591a/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96081f1605125ba0855dfda83f6f3df5ec90c61195421ba72223de35ccfb2f88", size = 2676109 }, - { url = "https://files.pythonhosted.org/packages/f9/41/4b043778cf9c4285d59742281a769eac371b9e47e35f98ad321349cc5d61/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f57a69461af2a5fa6e6bbd7a5f60d3b7e6cebb687f55106933188e79ad155c1", size = 2002028 }, - { url = "https://files.pythonhosted.org/packages/cb/d5/7bb781bf2748ce3d03af04d5c969fa1308880e1dca35a9bd94e1a96a922e/pydantic_core-2.33.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:572c7e6c8bb4774d2ac88929e3d1f12bc45714ae5ee6d9a788a9fb35e60bb04b", size = 2100044 }, - { url = "https://files.pythonhosted.org/packages/fe/36/def5e53e1eb0ad896785702a5bbfd25eed546cdcf4087ad285021a90ed53/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:db4b41f9bd95fbe5acd76d89920336ba96f03e149097365afe1cb092fceb89a1", size = 2058881 }, - { url = "https://files.pythonhosted.org/packages/01/6c/57f8d70b2ee57fc3dc8b9610315949837fa8c11d86927b9bb044f8705419/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:fa854f5cf7e33842a892e5c73f45327760bc7bc516339fda888c75ae60edaeb6", size = 2227034 }, - { url = "https://files.pythonhosted.org/packages/27/b9/9c17f0396a82b3d5cbea4c24d742083422639e7bb1d5bf600e12cb176a13/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5f483cfb75ff703095c59e365360cb73e00185e01aaea067cd19acffd2ab20ea", size = 2234187 }, - { url = "https://files.pythonhosted.org/packages/b0/6a/adf5734ffd52bf86d865093ad70b2ce543415e0e356f6cacabbc0d9ad910/pydantic_core-2.33.2-cp312-cp312-win32.whl", hash = "sha256:9cb1da0f5a471435a7bc7e439b8a728e8b61e59784b2af70d7c169f8dd8ae290", size = 1892628 }, - { url = "https://files.pythonhosted.org/packages/43/e4/5479fecb3606c1368d496a825d8411e126133c41224c1e7238be58b87d7e/pydantic_core-2.33.2-cp312-cp312-win_amd64.whl", hash = "sha256:f941635f2a3d96b2973e867144fde513665c87f13fe0e193c158ac51bfaaa7b2", size = 1955866 }, - { url = "https://files.pythonhosted.org/packages/0d/24/8b11e8b3e2be9dd82df4b11408a67c61bb4dc4f8e11b5b0fc888b38118b5/pydantic_core-2.33.2-cp312-cp312-win_arm64.whl", hash = "sha256:cca3868ddfaccfbc4bfb1d608e2ccaaebe0ae628e1416aeb9c4d88c001bb45ab", size = 1888894 }, - { url = "https://files.pythonhosted.org/packages/46/8c/99040727b41f56616573a28771b1bfa08a3d3fe74d3d513f01251f79f172/pydantic_core-2.33.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:1082dd3e2d7109ad8b7da48e1d4710c8d06c253cbc4a27c1cff4fbcaa97a9e3f", size = 2015688 }, - { url = "https://files.pythonhosted.org/packages/3a/cc/5999d1eb705a6cefc31f0b4a90e9f7fc400539b1a1030529700cc1b51838/pydantic_core-2.33.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f517ca031dfc037a9c07e748cefd8d96235088b83b4f4ba8939105d20fa1dcd6", size = 1844808 }, - { url = "https://files.pythonhosted.org/packages/6f/5e/a0a7b8885c98889a18b6e376f344da1ef323d270b44edf8174d6bce4d622/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a9f2c9dd19656823cb8250b0724ee9c60a82f3cdf68a080979d13092a3b0fef", size = 1885580 }, - { url = "https://files.pythonhosted.org/packages/3b/2a/953581f343c7d11a304581156618c3f592435523dd9d79865903272c256a/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2b0a451c263b01acebe51895bfb0e1cc842a5c666efe06cdf13846c7418caa9a", size = 1973859 }, - { url = "https://files.pythonhosted.org/packages/e6/55/f1a813904771c03a3f97f676c62cca0c0a4138654107c1b61f19c644868b/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ea40a64d23faa25e62a70ad163571c0b342b8bf66d5fa612ac0dec4f069d916", size = 2120810 }, - { url = "https://files.pythonhosted.org/packages/aa/c3/053389835a996e18853ba107a63caae0b9deb4a276c6b472931ea9ae6e48/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fb2d542b4d66f9470e8065c5469ec676978d625a8b7a363f07d9a501a9cb36a", size = 2676498 }, - { url = "https://files.pythonhosted.org/packages/eb/3c/f4abd740877a35abade05e437245b192f9d0ffb48bbbbd708df33d3cda37/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdac5d6ffa1b5a83bca06ffe7583f5576555e6c8b3a91fbd25ea7780f825f7d", size = 2000611 }, - { url = "https://files.pythonhosted.org/packages/59/a7/63ef2fed1837d1121a894d0ce88439fe3e3b3e48c7543b2a4479eb99c2bd/pydantic_core-2.33.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04a1a413977ab517154eebb2d326da71638271477d6ad87a769102f7c2488c56", size = 2107924 }, - { url = "https://files.pythonhosted.org/packages/04/8f/2551964ef045669801675f1cfc3b0d74147f4901c3ffa42be2ddb1f0efc4/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c8e7af2f4e0194c22b5b37205bfb293d166a7344a5b0d0eaccebc376546d77d5", size = 2063196 }, - { url = "https://files.pythonhosted.org/packages/26/bd/d9602777e77fc6dbb0c7db9ad356e9a985825547dce5ad1d30ee04903918/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:5c92edd15cd58b3c2d34873597a1e20f13094f59cf88068adb18947df5455b4e", size = 2236389 }, - { url = "https://files.pythonhosted.org/packages/42/db/0e950daa7e2230423ab342ae918a794964b053bec24ba8af013fc7c94846/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:65132b7b4a1c0beded5e057324b7e16e10910c106d43675d9bd87d4f38dde162", size = 2239223 }, - { url = "https://files.pythonhosted.org/packages/58/4d/4f937099c545a8a17eb52cb67fe0447fd9a373b348ccfa9a87f141eeb00f/pydantic_core-2.33.2-cp313-cp313-win32.whl", hash = "sha256:52fb90784e0a242bb96ec53f42196a17278855b0f31ac7c3cc6f5c1ec4811849", size = 1900473 }, - { url = "https://files.pythonhosted.org/packages/a0/75/4a0a9bac998d78d889def5e4ef2b065acba8cae8c93696906c3a91f310ca/pydantic_core-2.33.2-cp313-cp313-win_amd64.whl", hash = "sha256:c083a3bdd5a93dfe480f1125926afcdbf2917ae714bdb80b36d34318b2bec5d9", size = 1955269 }, - { url = "https://files.pythonhosted.org/packages/f9/86/1beda0576969592f1497b4ce8e7bc8cbdf614c352426271b1b10d5f0aa64/pydantic_core-2.33.2-cp313-cp313-win_arm64.whl", hash = "sha256:e80b087132752f6b3d714f041ccf74403799d3b23a72722ea2e6ba2e892555b9", size = 1893921 }, - { url = "https://files.pythonhosted.org/packages/a4/7d/e09391c2eebeab681df2b74bfe6c43422fffede8dc74187b2b0bf6fd7571/pydantic_core-2.33.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:61c18fba8e5e9db3ab908620af374db0ac1baa69f0f32df4f61ae23f15e586ac", size = 1806162 }, - { url = "https://files.pythonhosted.org/packages/f1/3d/847b6b1fed9f8ed3bb95a9ad04fbd0b212e832d4f0f50ff4d9ee5a9f15cf/pydantic_core-2.33.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95237e53bb015f67b63c91af7518a62a8660376a6a0db19b89acc77a4d6199f5", size = 1981560 }, - { url = "https://files.pythonhosted.org/packages/6f/9a/e73262f6c6656262b5fdd723ad90f518f579b7bc8622e43a942eec53c938/pydantic_core-2.33.2-cp313-cp313t-win_amd64.whl", hash = "sha256:c2fc0a768ef76c15ab9238afa6da7f69895bb5d1ee83aeea2e3509af4472d0b9", size = 1935777 }, +sdist = { url = "https://files.pythonhosted.org/packages/ad/88/5f2260bdfae97aabf98f1778d43f69574390ad787afb646292a638c923d4/pydantic_core-2.33.2.tar.gz", hash = "sha256:7cb8bc3605c29176e1b105350d2e6474142d7c1bd1d9327c4a9bdb46bf827acc", size = 435195, upload_time = "2025-04-23T18:33:52.104Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/8a/2b41c97f554ec8c71f2a8a5f85cb56a8b0956addfe8b0efb5b3d77e8bdc3/pydantic_core-2.33.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a7ec89dc587667f22b6a0b6579c249fca9026ce7c333fc142ba42411fa243cdc", size = 2009000, upload_time = "2025-04-23T18:31:25.863Z" }, + { url = "https://files.pythonhosted.org/packages/a1/02/6224312aacb3c8ecbaa959897af57181fb6cf3a3d7917fd44d0f2917e6f2/pydantic_core-2.33.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3c6db6e52c6d70aa0d00d45cdb9b40f0433b96380071ea80b09277dba021ddf7", size = 1847996, upload_time = "2025-04-23T18:31:27.341Z" }, + { url = "https://files.pythonhosted.org/packages/d6/46/6dcdf084a523dbe0a0be59d054734b86a981726f221f4562aed313dbcb49/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e61206137cbc65e6d5256e1166f88331d3b6238e082d9f74613b9b765fb9025", size = 1880957, upload_time = "2025-04-23T18:31:28.956Z" }, + { url = "https://files.pythonhosted.org/packages/ec/6b/1ec2c03837ac00886ba8160ce041ce4e325b41d06a034adbef11339ae422/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb8c529b2819c37140eb51b914153063d27ed88e3bdc31b71198a198e921e011", size = 1964199, upload_time = "2025-04-23T18:31:31.025Z" }, + { url = "https://files.pythonhosted.org/packages/2d/1d/6bf34d6adb9debd9136bd197ca72642203ce9aaaa85cfcbfcf20f9696e83/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c52b02ad8b4e2cf14ca7b3d918f3eb0ee91e63b3167c32591e57c4317e134f8f", size = 2120296, upload_time = "2025-04-23T18:31:32.514Z" }, + { url = "https://files.pythonhosted.org/packages/e0/94/2bd0aaf5a591e974b32a9f7123f16637776c304471a0ab33cf263cf5591a/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96081f1605125ba0855dfda83f6f3df5ec90c61195421ba72223de35ccfb2f88", size = 2676109, upload_time = "2025-04-23T18:31:33.958Z" }, + { url = "https://files.pythonhosted.org/packages/f9/41/4b043778cf9c4285d59742281a769eac371b9e47e35f98ad321349cc5d61/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f57a69461af2a5fa6e6bbd7a5f60d3b7e6cebb687f55106933188e79ad155c1", size = 2002028, upload_time = "2025-04-23T18:31:39.095Z" }, + { url = "https://files.pythonhosted.org/packages/cb/d5/7bb781bf2748ce3d03af04d5c969fa1308880e1dca35a9bd94e1a96a922e/pydantic_core-2.33.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:572c7e6c8bb4774d2ac88929e3d1f12bc45714ae5ee6d9a788a9fb35e60bb04b", size = 2100044, upload_time = "2025-04-23T18:31:41.034Z" }, + { url = "https://files.pythonhosted.org/packages/fe/36/def5e53e1eb0ad896785702a5bbfd25eed546cdcf4087ad285021a90ed53/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:db4b41f9bd95fbe5acd76d89920336ba96f03e149097365afe1cb092fceb89a1", size = 2058881, upload_time = "2025-04-23T18:31:42.757Z" }, + { url = "https://files.pythonhosted.org/packages/01/6c/57f8d70b2ee57fc3dc8b9610315949837fa8c11d86927b9bb044f8705419/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:fa854f5cf7e33842a892e5c73f45327760bc7bc516339fda888c75ae60edaeb6", size = 2227034, upload_time = "2025-04-23T18:31:44.304Z" }, + { url = "https://files.pythonhosted.org/packages/27/b9/9c17f0396a82b3d5cbea4c24d742083422639e7bb1d5bf600e12cb176a13/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5f483cfb75ff703095c59e365360cb73e00185e01aaea067cd19acffd2ab20ea", size = 2234187, upload_time = "2025-04-23T18:31:45.891Z" }, + { url = "https://files.pythonhosted.org/packages/b0/6a/adf5734ffd52bf86d865093ad70b2ce543415e0e356f6cacabbc0d9ad910/pydantic_core-2.33.2-cp312-cp312-win32.whl", hash = "sha256:9cb1da0f5a471435a7bc7e439b8a728e8b61e59784b2af70d7c169f8dd8ae290", size = 1892628, upload_time = "2025-04-23T18:31:47.819Z" }, + { url = "https://files.pythonhosted.org/packages/43/e4/5479fecb3606c1368d496a825d8411e126133c41224c1e7238be58b87d7e/pydantic_core-2.33.2-cp312-cp312-win_amd64.whl", hash = "sha256:f941635f2a3d96b2973e867144fde513665c87f13fe0e193c158ac51bfaaa7b2", size = 1955866, upload_time = "2025-04-23T18:31:49.635Z" }, + { url = "https://files.pythonhosted.org/packages/0d/24/8b11e8b3e2be9dd82df4b11408a67c61bb4dc4f8e11b5b0fc888b38118b5/pydantic_core-2.33.2-cp312-cp312-win_arm64.whl", hash = "sha256:cca3868ddfaccfbc4bfb1d608e2ccaaebe0ae628e1416aeb9c4d88c001bb45ab", size = 1888894, upload_time = "2025-04-23T18:31:51.609Z" }, + { url = "https://files.pythonhosted.org/packages/46/8c/99040727b41f56616573a28771b1bfa08a3d3fe74d3d513f01251f79f172/pydantic_core-2.33.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:1082dd3e2d7109ad8b7da48e1d4710c8d06c253cbc4a27c1cff4fbcaa97a9e3f", size = 2015688, upload_time = "2025-04-23T18:31:53.175Z" }, + { url = "https://files.pythonhosted.org/packages/3a/cc/5999d1eb705a6cefc31f0b4a90e9f7fc400539b1a1030529700cc1b51838/pydantic_core-2.33.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f517ca031dfc037a9c07e748cefd8d96235088b83b4f4ba8939105d20fa1dcd6", size = 1844808, upload_time = "2025-04-23T18:31:54.79Z" }, + { url = "https://files.pythonhosted.org/packages/6f/5e/a0a7b8885c98889a18b6e376f344da1ef323d270b44edf8174d6bce4d622/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a9f2c9dd19656823cb8250b0724ee9c60a82f3cdf68a080979d13092a3b0fef", size = 1885580, upload_time = "2025-04-23T18:31:57.393Z" }, + { url = "https://files.pythonhosted.org/packages/3b/2a/953581f343c7d11a304581156618c3f592435523dd9d79865903272c256a/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2b0a451c263b01acebe51895bfb0e1cc842a5c666efe06cdf13846c7418caa9a", size = 1973859, upload_time = "2025-04-23T18:31:59.065Z" }, + { url = "https://files.pythonhosted.org/packages/e6/55/f1a813904771c03a3f97f676c62cca0c0a4138654107c1b61f19c644868b/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ea40a64d23faa25e62a70ad163571c0b342b8bf66d5fa612ac0dec4f069d916", size = 2120810, upload_time = "2025-04-23T18:32:00.78Z" }, + { url = "https://files.pythonhosted.org/packages/aa/c3/053389835a996e18853ba107a63caae0b9deb4a276c6b472931ea9ae6e48/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fb2d542b4d66f9470e8065c5469ec676978d625a8b7a363f07d9a501a9cb36a", size = 2676498, upload_time = "2025-04-23T18:32:02.418Z" }, + { url = "https://files.pythonhosted.org/packages/eb/3c/f4abd740877a35abade05e437245b192f9d0ffb48bbbbd708df33d3cda37/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdac5d6ffa1b5a83bca06ffe7583f5576555e6c8b3a91fbd25ea7780f825f7d", size = 2000611, upload_time = "2025-04-23T18:32:04.152Z" }, + { url = "https://files.pythonhosted.org/packages/59/a7/63ef2fed1837d1121a894d0ce88439fe3e3b3e48c7543b2a4479eb99c2bd/pydantic_core-2.33.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04a1a413977ab517154eebb2d326da71638271477d6ad87a769102f7c2488c56", size = 2107924, upload_time = "2025-04-23T18:32:06.129Z" }, + { url = "https://files.pythonhosted.org/packages/04/8f/2551964ef045669801675f1cfc3b0d74147f4901c3ffa42be2ddb1f0efc4/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c8e7af2f4e0194c22b5b37205bfb293d166a7344a5b0d0eaccebc376546d77d5", size = 2063196, upload_time = "2025-04-23T18:32:08.178Z" }, + { url = "https://files.pythonhosted.org/packages/26/bd/d9602777e77fc6dbb0c7db9ad356e9a985825547dce5ad1d30ee04903918/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:5c92edd15cd58b3c2d34873597a1e20f13094f59cf88068adb18947df5455b4e", size = 2236389, upload_time = "2025-04-23T18:32:10.242Z" }, + { url = "https://files.pythonhosted.org/packages/42/db/0e950daa7e2230423ab342ae918a794964b053bec24ba8af013fc7c94846/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:65132b7b4a1c0beded5e057324b7e16e10910c106d43675d9bd87d4f38dde162", size = 2239223, upload_time = "2025-04-23T18:32:12.382Z" }, + { url = "https://files.pythonhosted.org/packages/58/4d/4f937099c545a8a17eb52cb67fe0447fd9a373b348ccfa9a87f141eeb00f/pydantic_core-2.33.2-cp313-cp313-win32.whl", hash = "sha256:52fb90784e0a242bb96ec53f42196a17278855b0f31ac7c3cc6f5c1ec4811849", size = 1900473, upload_time = "2025-04-23T18:32:14.034Z" }, + { url = "https://files.pythonhosted.org/packages/a0/75/4a0a9bac998d78d889def5e4ef2b065acba8cae8c93696906c3a91f310ca/pydantic_core-2.33.2-cp313-cp313-win_amd64.whl", hash = "sha256:c083a3bdd5a93dfe480f1125926afcdbf2917ae714bdb80b36d34318b2bec5d9", size = 1955269, upload_time = "2025-04-23T18:32:15.783Z" }, + { url = "https://files.pythonhosted.org/packages/f9/86/1beda0576969592f1497b4ce8e7bc8cbdf614c352426271b1b10d5f0aa64/pydantic_core-2.33.2-cp313-cp313-win_arm64.whl", hash = "sha256:e80b087132752f6b3d714f041ccf74403799d3b23a72722ea2e6ba2e892555b9", size = 1893921, upload_time = "2025-04-23T18:32:18.473Z" }, + { url = "https://files.pythonhosted.org/packages/a4/7d/e09391c2eebeab681df2b74bfe6c43422fffede8dc74187b2b0bf6fd7571/pydantic_core-2.33.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:61c18fba8e5e9db3ab908620af374db0ac1baa69f0f32df4f61ae23f15e586ac", size = 1806162, upload_time = "2025-04-23T18:32:20.188Z" }, + { url = "https://files.pythonhosted.org/packages/f1/3d/847b6b1fed9f8ed3bb95a9ad04fbd0b212e832d4f0f50ff4d9ee5a9f15cf/pydantic_core-2.33.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95237e53bb015f67b63c91af7518a62a8660376a6a0db19b89acc77a4d6199f5", size = 1981560, upload_time = "2025-04-23T18:32:22.354Z" }, + { url = "https://files.pythonhosted.org/packages/6f/9a/e73262f6c6656262b5fdd723ad90f518f579b7bc8622e43a942eec53c938/pydantic_core-2.33.2-cp313-cp313t-win_amd64.whl", hash = "sha256:c2fc0a768ef76c15ab9238afa6da7f69895bb5d1ee83aeea2e3509af4472d0b9", size = 1935777, upload_time = "2025-04-23T18:32:25.088Z" }, ] [[package]] name = "pydeflate" -version = "2.1.3" +version = "2.3.3" source = { registry = "https://pypi.org/simple" } dependencies = [ + { name = "filelock" }, { name = "hdx-python-country" }, { name = "imf-reader" }, { name = "oda-reader" }, { name = "pandas" }, + { name = "pandera" }, + { name = "platformdirs" }, { name = "pyarrow" }, { name = "requests" }, { name = "wbgapi" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/5e/72/3e56d8166ca4b366a4e37c85711a706bba66768f70ba690bdb279f728d8d/pydeflate-2.1.3.tar.gz", hash = "sha256:48a2b74ad900dd8c50dfb1e4cdfcea8ca11cbd2d3a713bf9208f2028fea4cf4f", size = 26586 } +sdist = { url = "https://files.pythonhosted.org/packages/09/cc/1661ca602d899247552cf851b3d48e95e152ce7ffd706f6c15afc918619c/pydeflate-2.3.3.tar.gz", hash = "sha256:298607a894cff9fb9786ba85924ff122fd72258b6802a6debf5ef66af1f33bf3", size = 39487, upload_time = "2025-12-07T09:41:36.937Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/31/31/e703ab5bc311c58e4dc00759d7a48a850877b8bbcd64c9778e2315e06bd5/pydeflate-2.1.3-py3-none-any.whl", hash = "sha256:09ebdde04eb2fea1c4b6712889cb2a9d4c2dd22ce0204aaeae64f4335667354f", size = 32540 }, + { url = "https://files.pythonhosted.org/packages/15/fc/52a47b29d97d22fec1289602fe65346dedfffbc797fe3df953f484641a31/pydeflate-2.3.3-py3-none-any.whl", hash = "sha256:a19448158bd5cc17848336391d8461f860421dbf75c984b4685e14b93e8b88f3", size = 54114, upload_time = "2025-12-07T09:41:37.803Z" }, ] [[package]] @@ -2163,36 +2208,36 @@ dependencies = [ { name = "typing-extensions" }, { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c1/74/e560bdeffea72ecb26cff27f0fad548bbff5ecc51d6a155311ea7f9e4c4c/pygithub-2.8.1.tar.gz", hash = "sha256:341b7c78521cb07324ff670afd1baa2bf5c286f8d9fd302c1798ba594a5400c9", size = 2246994 } +sdist = { url = "https://files.pythonhosted.org/packages/c1/74/e560bdeffea72ecb26cff27f0fad548bbff5ecc51d6a155311ea7f9e4c4c/pygithub-2.8.1.tar.gz", hash = "sha256:341b7c78521cb07324ff670afd1baa2bf5c286f8d9fd302c1798ba594a5400c9", size = 2246994, upload_time = "2025-09-02T17:41:54.674Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/07/ba/7049ce39f653f6140aac4beb53a5aaf08b4407b6a3019aae394c1c5244ff/pygithub-2.8.1-py3-none-any.whl", hash = "sha256:23a0a5bca93baef082e03411bf0ce27204c32be8bfa7abc92fe4a3e132936df0", size = 432709 }, + { url = "https://files.pythonhosted.org/packages/07/ba/7049ce39f653f6140aac4beb53a5aaf08b4407b6a3019aae394c1c5244ff/pygithub-2.8.1-py3-none-any.whl", hash = "sha256:23a0a5bca93baef082e03411bf0ce27204c32be8bfa7abc92fe4a3e132936df0", size = 432709, upload_time = "2025-09-02T17:41:52.947Z" }, ] [[package]] name = "pygments" version = "2.19.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b0/77/a5b8c569bf593b0140bde72ea885a803b82086995367bf2037de0159d924/pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", size = 4968631 } +sdist = { url = "https://files.pythonhosted.org/packages/b0/77/a5b8c569bf593b0140bde72ea885a803b82086995367bf2037de0159d924/pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", size = 4968631, upload_time = "2025-06-21T13:39:12.283Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217 }, + { url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217, upload_time = "2025-06-21T13:39:07.939Z" }, ] [[package]] name = "pygtrie" version = "2.5.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b9/13/55deec25bf09383216fa7f1dfcdbfca40a04aa00b6d15a5cbf25af8fce5f/pygtrie-2.5.0.tar.gz", hash = "sha256:203514ad826eb403dab1d2e2ddd034e0d1534bbe4dbe0213bb0593f66beba4e2", size = 39266 } +sdist = { url = "https://files.pythonhosted.org/packages/b9/13/55deec25bf09383216fa7f1dfcdbfca40a04aa00b6d15a5cbf25af8fce5f/pygtrie-2.5.0.tar.gz", hash = "sha256:203514ad826eb403dab1d2e2ddd034e0d1534bbe4dbe0213bb0593f66beba4e2", size = 39266, upload_time = "2022-07-16T14:29:47.459Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ec/cd/bd196b2cf014afb1009de8b0f05ecd54011d881944e62763f3c1b1e8ef37/pygtrie-2.5.0-py3-none-any.whl", hash = "sha256:8795cda8105493d5ae159a5bef313ff13156c5d4d72feddefacaad59f8c8ce16", size = 25099 }, + { url = "https://files.pythonhosted.org/packages/ec/cd/bd196b2cf014afb1009de8b0f05ecd54011d881944e62763f3c1b1e8ef37/pygtrie-2.5.0-py3-none-any.whl", hash = "sha256:8795cda8105493d5ae159a5bef313ff13156c5d4d72feddefacaad59f8c8ce16", size = 25099, upload_time = "2022-09-23T20:30:05.12Z" }, ] [[package]] name = "pyjwt" version = "2.10.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e7/46/bd74733ff231675599650d3e47f361794b22ef3e3770998dda30d3b63726/pyjwt-2.10.1.tar.gz", hash = "sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953", size = 87785 } +sdist = { url = "https://files.pythonhosted.org/packages/e7/46/bd74733ff231675599650d3e47f361794b22ef3e3770998dda30d3b63726/pyjwt-2.10.1.tar.gz", hash = "sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953", size = 87785, upload_time = "2024-11-28T03:43:29.933Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/61/ad/689f02752eeec26aed679477e80e632ef1b682313be70793d798c1d5fc8f/PyJWT-2.10.1-py3-none-any.whl", hash = "sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb", size = 22997 }, + { url = "https://files.pythonhosted.org/packages/61/ad/689f02752eeec26aed679477e80e632ef1b682313be70793d798c1d5fc8f/PyJWT-2.10.1-py3-none-any.whl", hash = "sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb", size = 22997, upload_time = "2024-11-28T03:43:27.893Z" }, ] [package.optional-dependencies] @@ -2208,9 +2253,9 @@ dependencies = [ { name = "markdown" }, { name = "pyyaml" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/55/b3/6d2b3f149bc5413b0a29761c2c5832d8ce904a1d7f621e86616d96f505cc/pymdown_extensions-10.16.1.tar.gz", hash = "sha256:aace82bcccba3efc03e25d584e6a22d27a8e17caa3f4dd9f207e49b787aa9a91", size = 853277 } +sdist = { url = "https://files.pythonhosted.org/packages/55/b3/6d2b3f149bc5413b0a29761c2c5832d8ce904a1d7f621e86616d96f505cc/pymdown_extensions-10.16.1.tar.gz", hash = "sha256:aace82bcccba3efc03e25d584e6a22d27a8e17caa3f4dd9f207e49b787aa9a91", size = 853277, upload_time = "2025-07-28T16:19:34.167Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e4/06/43084e6cbd4b3bc0e80f6be743b2e79fbc6eed8de9ad8c629939fa55d972/pymdown_extensions-10.16.1-py3-none-any.whl", hash = "sha256:d6ba157a6c03146a7fb122b2b9a121300056384eafeec9c9f9e584adfdb2a32d", size = 266178 }, + { url = "https://files.pythonhosted.org/packages/e4/06/43084e6cbd4b3bc0e80f6be743b2e79fbc6eed8de9ad8c629939fa55d972/pymdown_extensions-10.16.1-py3-none-any.whl", hash = "sha256:d6ba157a6c03146a7fb122b2b9a121300056384eafeec9c9f9e584adfdb2a32d", size = 266178, upload_time = "2025-07-28T16:19:31.401Z" }, ] [[package]] @@ -2220,34 +2265,34 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/06/c6/a3124dee667a423f2c637cfd262a54d67d8ccf3e160f3c50f622a85b7723/pynacl-1.6.0.tar.gz", hash = "sha256:cb36deafe6e2bce3b286e5d1f3e1c246e0ccdb8808ddb4550bb2792f2df298f2", size = 3505641 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/70/24/1b639176401255605ba7c2b93a7b1eb1e379e0710eca62613633eb204201/pynacl-1.6.0-cp314-cp314t-macosx_10_10_universal2.whl", hash = "sha256:f46386c24a65383a9081d68e9c2de909b1834ec74ff3013271f1bca9c2d233eb", size = 384141 }, - { url = "https://files.pythonhosted.org/packages/5e/7b/874efdf57d6bf172db0df111b479a553c3d9e8bb4f1f69eb3ffff772d6e8/pynacl-1.6.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:dea103a1afcbc333bc0e992e64233d360d393d1e63d0bc88554f572365664348", size = 808132 }, - { url = "https://files.pythonhosted.org/packages/f3/61/9b53f5913f3b75ac3d53170cdb897101b2b98afc76f4d9d3c8de5aa3ac05/pynacl-1.6.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:04f20784083014e265ad58c1b2dd562c3e35864b5394a14ab54f5d150ee9e53e", size = 1407253 }, - { url = "https://files.pythonhosted.org/packages/7c/0a/b138916b22bbf03a1bdbafecec37d714e7489dd7bcaf80cd17852f8b67be/pynacl-1.6.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bbcc4452a1eb10cd5217318c822fde4be279c9de8567f78bad24c773c21254f8", size = 843719 }, - { url = "https://files.pythonhosted.org/packages/01/3b/17c368197dfb2c817ce033f94605a47d0cc27901542109e640cef263f0af/pynacl-1.6.0-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:51fed9fe1bec9e7ff9af31cd0abba179d0e984a2960c77e8e5292c7e9b7f7b5d", size = 1445441 }, - { url = "https://files.pythonhosted.org/packages/35/3c/f79b185365ab9be80cd3cd01dacf30bf5895f9b7b001e683b369e0bb6d3d/pynacl-1.6.0-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:10d755cf2a455d8c0f8c767a43d68f24d163b8fe93ccfaabfa7bafd26be58d73", size = 825691 }, - { url = "https://files.pythonhosted.org/packages/f7/1f/8b37d25e95b8f2a434a19499a601d4d272b9839ab8c32f6b0fc1e40c383f/pynacl-1.6.0-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:536703b8f90e911294831a7fbcd0c062b837f3ccaa923d92a6254e11178aaf42", size = 1410726 }, - { url = "https://files.pythonhosted.org/packages/bd/93/5a4a4cf9913014f83d615ad6a2df9187330f764f606246b3a744c0788c03/pynacl-1.6.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:6b08eab48c9669d515a344fb0ef27e2cbde847721e34bba94a343baa0f33f1f4", size = 801035 }, - { url = "https://files.pythonhosted.org/packages/bf/60/40da6b0fe6a4d5fd88f608389eb1df06492ba2edca93fca0b3bebff9b948/pynacl-1.6.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5789f016e08e5606803161ba24de01b5a345d24590a80323379fc4408832d290", size = 1371854 }, - { url = "https://files.pythonhosted.org/packages/44/b2/37ac1d65008f824cba6b5bf68d18b76d97d0f62d7a032367ea69d4a187c8/pynacl-1.6.0-cp314-cp314t-win32.whl", hash = "sha256:4853c154dc16ea12f8f3ee4b7e763331876316cc3a9f06aeedf39bcdca8f9995", size = 230345 }, - { url = "https://files.pythonhosted.org/packages/f4/5a/9234b7b45af890d02ebee9aae41859b9b5f15fb4a5a56d88e3b4d1659834/pynacl-1.6.0-cp314-cp314t-win_amd64.whl", hash = "sha256:347dcddce0b4d83ed3f32fd00379c83c425abee5a9d2cd0a2c84871334eaff64", size = 243103 }, - { url = "https://files.pythonhosted.org/packages/c9/2c/c1a0f19d720ab0af3bc4241af2bdf4d813c3ecdcb96392b5e1ddf2d8f24f/pynacl-1.6.0-cp314-cp314t-win_arm64.whl", hash = "sha256:2d6cd56ce4998cb66a6c112fda7b1fdce5266c9f05044fa72972613bef376d15", size = 187778 }, - { url = "https://files.pythonhosted.org/packages/63/37/87c72df19857c5b3b47ace6f211a26eb862ada495cc96daa372d96048fca/pynacl-1.6.0-cp38-abi3-macosx_10_10_universal2.whl", hash = "sha256:f4b3824920e206b4f52abd7de621ea7a44fd3cb5c8daceb7c3612345dfc54f2e", size = 382610 }, - { url = "https://files.pythonhosted.org/packages/0c/64/3ce958a5817fd3cc6df4ec14441c43fd9854405668d73babccf77f9597a3/pynacl-1.6.0-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:16dd347cdc8ae0b0f6187a2608c0af1c8b7ecbbe6b4a06bff8253c192f696990", size = 798744 }, - { url = "https://files.pythonhosted.org/packages/e4/8a/3f0dd297a0a33fa3739c255feebd0206bb1df0b44c52fbe2caf8e8bc4425/pynacl-1.6.0-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:16c60daceee88d04f8d41d0a4004a7ed8d9a5126b997efd2933e08e93a3bd850", size = 1397879 }, - { url = "https://files.pythonhosted.org/packages/41/94/028ff0434a69448f61348d50d2c147dda51aabdd4fbc93ec61343332174d/pynacl-1.6.0-cp38-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:25720bad35dfac34a2bcdd61d9e08d6bfc6041bebc7751d9c9f2446cf1e77d64", size = 833907 }, - { url = "https://files.pythonhosted.org/packages/52/bc/a5cff7f8c30d5f4c26a07dfb0bcda1176ab8b2de86dda3106c00a02ad787/pynacl-1.6.0-cp38-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8bfaa0a28a1ab718bad6239979a5a57a8d1506d0caf2fba17e524dbb409441cf", size = 1436649 }, - { url = "https://files.pythonhosted.org/packages/7a/20/c397be374fd5d84295046e398de4ba5f0722dc14450f65db76a43c121471/pynacl-1.6.0-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:ef214b90556bb46a485b7da8258e59204c244b1b5b576fb71848819b468c44a7", size = 817142 }, - { url = "https://files.pythonhosted.org/packages/12/30/5efcef3406940cda75296c6d884090b8a9aad2dcc0c304daebb5ae99fb4a/pynacl-1.6.0-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:49c336dd80ea54780bcff6a03ee1a476be1612423010472e60af83452aa0f442", size = 1401794 }, - { url = "https://files.pythonhosted.org/packages/be/e1/a8fe1248cc17ccb03b676d80fa90763760a6d1247da434844ea388d0816c/pynacl-1.6.0-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:f3482abf0f9815e7246d461fab597aa179b7524628a4bc36f86a7dc418d2608d", size = 772161 }, - { url = "https://files.pythonhosted.org/packages/a3/76/8a62702fb657d6d9104ce13449db221a345665d05e6a3fdefb5a7cafd2ad/pynacl-1.6.0-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:140373378e34a1f6977e573033d1dd1de88d2a5d90ec6958c9485b2fd9f3eb90", size = 1370720 }, - { url = "https://files.pythonhosted.org/packages/6d/38/9e9e9b777a1c4c8204053733e1a0269672c0bd40852908c9ad6b6eaba82c/pynacl-1.6.0-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:6b393bc5e5a0eb86bb85b533deb2d2c815666665f840a09e0aa3362bb6088736", size = 791252 }, - { url = "https://files.pythonhosted.org/packages/63/ef/d972ce3d92ae05c9091363cf185e8646933f91c376e97b8be79ea6e96c22/pynacl-1.6.0-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:4a25cfede801f01e54179b8ff9514bd7b5944da560b7040939732d1804d25419", size = 1362910 }, - { url = "https://files.pythonhosted.org/packages/35/2c/ee0b373a1861f66a7ca8bdb999331525615061320dd628527a50ba8e8a60/pynacl-1.6.0-cp38-abi3-win32.whl", hash = "sha256:dcdeb41c22ff3c66eef5e63049abf7639e0db4edee57ba70531fc1b6b133185d", size = 226461 }, - { url = "https://files.pythonhosted.org/packages/75/f7/41b6c0b9dd9970173b6acc026bab7b4c187e4e5beef2756d419ad65482da/pynacl-1.6.0-cp38-abi3-win_amd64.whl", hash = "sha256:cf831615cc16ba324240de79d925eacae8265b7691412ac6b24221db157f6bd1", size = 238802 }, - { url = "https://files.pythonhosted.org/packages/8e/0f/462326910c6172fa2c6ed07922b22ffc8e77432b3affffd9e18f444dbfbb/pynacl-1.6.0-cp38-abi3-win_arm64.whl", hash = "sha256:84709cea8f888e618c21ed9a0efdb1a59cc63141c403db8bf56c469b71ad56f2", size = 183846 }, +sdist = { url = "https://files.pythonhosted.org/packages/06/c6/a3124dee667a423f2c637cfd262a54d67d8ccf3e160f3c50f622a85b7723/pynacl-1.6.0.tar.gz", hash = "sha256:cb36deafe6e2bce3b286e5d1f3e1c246e0ccdb8808ddb4550bb2792f2df298f2", size = 3505641, upload_time = "2025-09-10T23:39:22.308Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/70/24/1b639176401255605ba7c2b93a7b1eb1e379e0710eca62613633eb204201/pynacl-1.6.0-cp314-cp314t-macosx_10_10_universal2.whl", hash = "sha256:f46386c24a65383a9081d68e9c2de909b1834ec74ff3013271f1bca9c2d233eb", size = 384141, upload_time = "2025-09-10T23:38:28.675Z" }, + { url = "https://files.pythonhosted.org/packages/5e/7b/874efdf57d6bf172db0df111b479a553c3d9e8bb4f1f69eb3ffff772d6e8/pynacl-1.6.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:dea103a1afcbc333bc0e992e64233d360d393d1e63d0bc88554f572365664348", size = 808132, upload_time = "2025-09-10T23:38:38.995Z" }, + { url = "https://files.pythonhosted.org/packages/f3/61/9b53f5913f3b75ac3d53170cdb897101b2b98afc76f4d9d3c8de5aa3ac05/pynacl-1.6.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:04f20784083014e265ad58c1b2dd562c3e35864b5394a14ab54f5d150ee9e53e", size = 1407253, upload_time = "2025-09-10T23:38:40.492Z" }, + { url = "https://files.pythonhosted.org/packages/7c/0a/b138916b22bbf03a1bdbafecec37d714e7489dd7bcaf80cd17852f8b67be/pynacl-1.6.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bbcc4452a1eb10cd5217318c822fde4be279c9de8567f78bad24c773c21254f8", size = 843719, upload_time = "2025-09-10T23:38:30.87Z" }, + { url = "https://files.pythonhosted.org/packages/01/3b/17c368197dfb2c817ce033f94605a47d0cc27901542109e640cef263f0af/pynacl-1.6.0-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:51fed9fe1bec9e7ff9af31cd0abba179d0e984a2960c77e8e5292c7e9b7f7b5d", size = 1445441, upload_time = "2025-09-10T23:38:33.078Z" }, + { url = "https://files.pythonhosted.org/packages/35/3c/f79b185365ab9be80cd3cd01dacf30bf5895f9b7b001e683b369e0bb6d3d/pynacl-1.6.0-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:10d755cf2a455d8c0f8c767a43d68f24d163b8fe93ccfaabfa7bafd26be58d73", size = 825691, upload_time = "2025-09-10T23:38:34.832Z" }, + { url = "https://files.pythonhosted.org/packages/f7/1f/8b37d25e95b8f2a434a19499a601d4d272b9839ab8c32f6b0fc1e40c383f/pynacl-1.6.0-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:536703b8f90e911294831a7fbcd0c062b837f3ccaa923d92a6254e11178aaf42", size = 1410726, upload_time = "2025-09-10T23:38:36.893Z" }, + { url = "https://files.pythonhosted.org/packages/bd/93/5a4a4cf9913014f83d615ad6a2df9187330f764f606246b3a744c0788c03/pynacl-1.6.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:6b08eab48c9669d515a344fb0ef27e2cbde847721e34bba94a343baa0f33f1f4", size = 801035, upload_time = "2025-09-10T23:38:42.109Z" }, + { url = "https://files.pythonhosted.org/packages/bf/60/40da6b0fe6a4d5fd88f608389eb1df06492ba2edca93fca0b3bebff9b948/pynacl-1.6.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5789f016e08e5606803161ba24de01b5a345d24590a80323379fc4408832d290", size = 1371854, upload_time = "2025-09-10T23:38:44.16Z" }, + { url = "https://files.pythonhosted.org/packages/44/b2/37ac1d65008f824cba6b5bf68d18b76d97d0f62d7a032367ea69d4a187c8/pynacl-1.6.0-cp314-cp314t-win32.whl", hash = "sha256:4853c154dc16ea12f8f3ee4b7e763331876316cc3a9f06aeedf39bcdca8f9995", size = 230345, upload_time = "2025-09-10T23:38:48.276Z" }, + { url = "https://files.pythonhosted.org/packages/f4/5a/9234b7b45af890d02ebee9aae41859b9b5f15fb4a5a56d88e3b4d1659834/pynacl-1.6.0-cp314-cp314t-win_amd64.whl", hash = "sha256:347dcddce0b4d83ed3f32fd00379c83c425abee5a9d2cd0a2c84871334eaff64", size = 243103, upload_time = "2025-09-10T23:38:45.503Z" }, + { url = "https://files.pythonhosted.org/packages/c9/2c/c1a0f19d720ab0af3bc4241af2bdf4d813c3ecdcb96392b5e1ddf2d8f24f/pynacl-1.6.0-cp314-cp314t-win_arm64.whl", hash = "sha256:2d6cd56ce4998cb66a6c112fda7b1fdce5266c9f05044fa72972613bef376d15", size = 187778, upload_time = "2025-09-10T23:38:46.731Z" }, + { url = "https://files.pythonhosted.org/packages/63/37/87c72df19857c5b3b47ace6f211a26eb862ada495cc96daa372d96048fca/pynacl-1.6.0-cp38-abi3-macosx_10_10_universal2.whl", hash = "sha256:f4b3824920e206b4f52abd7de621ea7a44fd3cb5c8daceb7c3612345dfc54f2e", size = 382610, upload_time = "2025-09-10T23:38:49.459Z" }, + { url = "https://files.pythonhosted.org/packages/0c/64/3ce958a5817fd3cc6df4ec14441c43fd9854405668d73babccf77f9597a3/pynacl-1.6.0-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:16dd347cdc8ae0b0f6187a2608c0af1c8b7ecbbe6b4a06bff8253c192f696990", size = 798744, upload_time = "2025-09-10T23:38:58.531Z" }, + { url = "https://files.pythonhosted.org/packages/e4/8a/3f0dd297a0a33fa3739c255feebd0206bb1df0b44c52fbe2caf8e8bc4425/pynacl-1.6.0-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:16c60daceee88d04f8d41d0a4004a7ed8d9a5126b997efd2933e08e93a3bd850", size = 1397879, upload_time = "2025-09-10T23:39:00.44Z" }, + { url = "https://files.pythonhosted.org/packages/41/94/028ff0434a69448f61348d50d2c147dda51aabdd4fbc93ec61343332174d/pynacl-1.6.0-cp38-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:25720bad35dfac34a2bcdd61d9e08d6bfc6041bebc7751d9c9f2446cf1e77d64", size = 833907, upload_time = "2025-09-10T23:38:50.936Z" }, + { url = "https://files.pythonhosted.org/packages/52/bc/a5cff7f8c30d5f4c26a07dfb0bcda1176ab8b2de86dda3106c00a02ad787/pynacl-1.6.0-cp38-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8bfaa0a28a1ab718bad6239979a5a57a8d1506d0caf2fba17e524dbb409441cf", size = 1436649, upload_time = "2025-09-10T23:38:52.783Z" }, + { url = "https://files.pythonhosted.org/packages/7a/20/c397be374fd5d84295046e398de4ba5f0722dc14450f65db76a43c121471/pynacl-1.6.0-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:ef214b90556bb46a485b7da8258e59204c244b1b5b576fb71848819b468c44a7", size = 817142, upload_time = "2025-09-10T23:38:54.4Z" }, + { url = "https://files.pythonhosted.org/packages/12/30/5efcef3406940cda75296c6d884090b8a9aad2dcc0c304daebb5ae99fb4a/pynacl-1.6.0-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:49c336dd80ea54780bcff6a03ee1a476be1612423010472e60af83452aa0f442", size = 1401794, upload_time = "2025-09-10T23:38:56.614Z" }, + { url = "https://files.pythonhosted.org/packages/be/e1/a8fe1248cc17ccb03b676d80fa90763760a6d1247da434844ea388d0816c/pynacl-1.6.0-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:f3482abf0f9815e7246d461fab597aa179b7524628a4bc36f86a7dc418d2608d", size = 772161, upload_time = "2025-09-10T23:39:01.93Z" }, + { url = "https://files.pythonhosted.org/packages/a3/76/8a62702fb657d6d9104ce13449db221a345665d05e6a3fdefb5a7cafd2ad/pynacl-1.6.0-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:140373378e34a1f6977e573033d1dd1de88d2a5d90ec6958c9485b2fd9f3eb90", size = 1370720, upload_time = "2025-09-10T23:39:03.531Z" }, + { url = "https://files.pythonhosted.org/packages/6d/38/9e9e9b777a1c4c8204053733e1a0269672c0bd40852908c9ad6b6eaba82c/pynacl-1.6.0-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:6b393bc5e5a0eb86bb85b533deb2d2c815666665f840a09e0aa3362bb6088736", size = 791252, upload_time = "2025-09-10T23:39:05.058Z" }, + { url = "https://files.pythonhosted.org/packages/63/ef/d972ce3d92ae05c9091363cf185e8646933f91c376e97b8be79ea6e96c22/pynacl-1.6.0-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:4a25cfede801f01e54179b8ff9514bd7b5944da560b7040939732d1804d25419", size = 1362910, upload_time = "2025-09-10T23:39:06.924Z" }, + { url = "https://files.pythonhosted.org/packages/35/2c/ee0b373a1861f66a7ca8bdb999331525615061320dd628527a50ba8e8a60/pynacl-1.6.0-cp38-abi3-win32.whl", hash = "sha256:dcdeb41c22ff3c66eef5e63049abf7639e0db4edee57ba70531fc1b6b133185d", size = 226461, upload_time = "2025-09-10T23:39:11.894Z" }, + { url = "https://files.pythonhosted.org/packages/75/f7/41b6c0b9dd9970173b6acc026bab7b4c187e4e5beef2756d419ad65482da/pynacl-1.6.0-cp38-abi3-win_amd64.whl", hash = "sha256:cf831615cc16ba324240de79d925eacae8265b7691412ac6b24221db157f6bd1", size = 238802, upload_time = "2025-09-10T23:39:08.966Z" }, + { url = "https://files.pythonhosted.org/packages/8e/0f/462326910c6172fa2c6ed07922b22ffc8e77432b3affffd9e18f444dbfbb/pynacl-1.6.0-cp38-abi3-win_arm64.whl", hash = "sha256:84709cea8f888e618c21ed9a0efdb1a59cc63141c403db8bf56c469b71ad56f2", size = 183846, upload_time = "2025-09-10T23:39:10.552Z" }, ] [[package]] @@ -2257,17 +2302,17 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "ply" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/91/d4/bbb4ab79bb3015e3bdd488435ef71f7806144cc6ae4146ee6c5f64ac53f2/pyomo-6.9.4.tar.gz", hash = "sha256:34ad22cd6bf9956de9c0d3842d01c1f92dee0515b25aa3e8f113b326549b1231", size = 3033231 } +sdist = { url = "https://files.pythonhosted.org/packages/91/d4/bbb4ab79bb3015e3bdd488435ef71f7806144cc6ae4146ee6c5f64ac53f2/pyomo-6.9.4.tar.gz", hash = "sha256:34ad22cd6bf9956de9c0d3842d01c1f92dee0515b25aa3e8f113b326549b1231", size = 3033231, upload_time = "2025-08-28T02:11:24.976Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/18/6b/80f40b4b72a3c6a207130ce431765f897c76133a15e7e38e66f9f40d36f3/pyomo-6.9.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cc3cd52c143991071821bbb9943d2a59512481b5d15adb7add32f92def4172ce", size = 4266926 }, - { url = "https://files.pythonhosted.org/packages/48/30/f7ef1be3deb445694b63800de6a36dff31670014d5aa67d42e1716c04970/pyomo-6.9.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3a5e1dc79e1a2ec1f6247f0df59ac3572781e40218093a624f9213dd3ae6913f", size = 4255513 }, - { url = "https://files.pythonhosted.org/packages/76/f4/9493daae82595d7d776ba6cd0d5d167951700670e363dec443415e753808/pyomo-6.9.4-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:abea6ca55295b179c1c91184db4eece7589cfd6099869eff8e3e6aa8a06463d1", size = 4311852 }, - { url = "https://files.pythonhosted.org/packages/83/d7/e39e605ab33c2729afb043bed94ce7ee382bd5b4bc708f6c90a1d2600456/pyomo-6.9.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ddd48dec34b270ca2621863a216c4f3a6fcc409db86a7dc34c31eb788a44b8c6", size = 4343130 }, - { url = "https://files.pythonhosted.org/packages/65/04/dc4d3d9369c4cb1b6e68ce18bbba066ea83284942322836e791dbf693bb2/pyomo-6.9.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1a768a178ae3f0391c66e2334da3d1618c9c85c9d879bc86de441efd143f491", size = 4267029 }, - { url = "https://files.pythonhosted.org/packages/6b/52/824e9cea51ed0a25636b66e8c122dce5fcd22a197bf4646dd6c5f138fe36/pyomo-6.9.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:09cde10e5fe8414f453d1ed3bccef1b42fc048fc2da0a9c936e40b2f877201bf", size = 4255606 }, - { url = "https://files.pythonhosted.org/packages/a2/dc/97005d683ca57e231a8f613921adaf480d3a82f40d280c6d0185855a92c6/pyomo-6.9.4-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:df3e173d330666f881258deefa79f37373b941d4a5b00edc6aa5b10680720dc1", size = 4312670 }, - { url = "https://files.pythonhosted.org/packages/64/73/47525078660eced084abb9a79e1e4c74098c992316c93ab6ead2dc7f8bda/pyomo-6.9.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8a13baebcdb05deadeb0ec4b04ecedffa65f1e86179418fa67e603a4f8f1bf17", size = 4344540 }, - { url = "https://files.pythonhosted.org/packages/d8/e3/56c20c3358e58206e7270a42ff666a267a6c01492213c8c47aad8676b487/pyomo-6.9.4-py3-none-any.whl", hash = "sha256:a274d74616c0b793279931f3b2175a31f9c63213f2d7b86c14d168c6c264f782", size = 3892640 }, + { url = "https://files.pythonhosted.org/packages/18/6b/80f40b4b72a3c6a207130ce431765f897c76133a15e7e38e66f9f40d36f3/pyomo-6.9.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cc3cd52c143991071821bbb9943d2a59512481b5d15adb7add32f92def4172ce", size = 4266926, upload_time = "2025-08-28T02:09:44.833Z" }, + { url = "https://files.pythonhosted.org/packages/48/30/f7ef1be3deb445694b63800de6a36dff31670014d5aa67d42e1716c04970/pyomo-6.9.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3a5e1dc79e1a2ec1f6247f0df59ac3572781e40218093a624f9213dd3ae6913f", size = 4255513, upload_time = "2025-08-28T02:09:49.197Z" }, + { url = "https://files.pythonhosted.org/packages/76/f4/9493daae82595d7d776ba6cd0d5d167951700670e363dec443415e753808/pyomo-6.9.4-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:abea6ca55295b179c1c91184db4eece7589cfd6099869eff8e3e6aa8a06463d1", size = 4311852, upload_time = "2025-08-28T02:09:53.415Z" }, + { url = "https://files.pythonhosted.org/packages/83/d7/e39e605ab33c2729afb043bed94ce7ee382bd5b4bc708f6c90a1d2600456/pyomo-6.9.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ddd48dec34b270ca2621863a216c4f3a6fcc409db86a7dc34c31eb788a44b8c6", size = 4343130, upload_time = "2025-08-28T02:09:57.397Z" }, + { url = "https://files.pythonhosted.org/packages/65/04/dc4d3d9369c4cb1b6e68ce18bbba066ea83284942322836e791dbf693bb2/pyomo-6.9.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1a768a178ae3f0391c66e2334da3d1618c9c85c9d879bc86de441efd143f491", size = 4267029, upload_time = "2025-08-28T02:10:02.066Z" }, + { url = "https://files.pythonhosted.org/packages/6b/52/824e9cea51ed0a25636b66e8c122dce5fcd22a197bf4646dd6c5f138fe36/pyomo-6.9.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:09cde10e5fe8414f453d1ed3bccef1b42fc048fc2da0a9c936e40b2f877201bf", size = 4255606, upload_time = "2025-08-28T02:10:06.383Z" }, + { url = "https://files.pythonhosted.org/packages/a2/dc/97005d683ca57e231a8f613921adaf480d3a82f40d280c6d0185855a92c6/pyomo-6.9.4-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:df3e173d330666f881258deefa79f37373b941d4a5b00edc6aa5b10680720dc1", size = 4312670, upload_time = "2025-08-28T02:10:11.563Z" }, + { url = "https://files.pythonhosted.org/packages/64/73/47525078660eced084abb9a79e1e4c74098c992316c93ab6ead2dc7f8bda/pyomo-6.9.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8a13baebcdb05deadeb0ec4b04ecedffa65f1e86179418fa67e603a4f8f1bf17", size = 4344540, upload_time = "2025-08-28T02:10:15.731Z" }, + { url = "https://files.pythonhosted.org/packages/d8/e3/56c20c3358e58206e7270a42ff666a267a6c01492213c8c47aad8676b487/pyomo-6.9.4-py3-none-any.whl", hash = "sha256:a274d74616c0b793279931f3b2175a31f9c63213f2d7b86c14d168c6c264f782", size = 3892640, upload_time = "2025-08-28T02:11:13.845Z" }, ] [[package]] @@ -2277,9 +2322,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "unidecode" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d6/7c/7c45a9e9bf6ddb57b67e66cf4e8076a7baf3a790a3411daac1a7a2df0c5b/pyphonetics-0.5.3.tar.gz", hash = "sha256:2d3c2e359fde91a3c57914f0b5468bba7a5daf38e7927fd999992ea68990fbe4", size = 10314 } +sdist = { url = "https://files.pythonhosted.org/packages/d6/7c/7c45a9e9bf6ddb57b67e66cf4e8076a7baf3a790a3411daac1a7a2df0c5b/pyphonetics-0.5.3.tar.gz", hash = "sha256:2d3c2e359fde91a3c57914f0b5468bba7a5daf38e7927fd999992ea68990fbe4", size = 10314, upload_time = "2020-02-25T12:08:31.049Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/bd/dd/a7d0a860efd3d4335d538b4361b8e9af8311f2aba2e8c7e4c7a47d623b6e/pyphonetics-0.5.3-py2.py3-none-any.whl", hash = "sha256:e6b29671d0d624dda1cac59c0c5a8a7216d8db504bae4941bfc482e04a0621d1", size = 10729 }, + { url = "https://files.pythonhosted.org/packages/bd/dd/a7d0a860efd3d4335d538b4361b8e9af8311f2aba2e8c7e4c7a47d623b6e/pyphonetics-0.5.3-py2.py3-none-any.whl", hash = "sha256:e6b29671d0d624dda1cac59c0c5a8a7216d8db504bae4941bfc482e04a0621d1", size = 10729, upload_time = "2020-02-25T12:08:25.368Z" }, ] [[package]] @@ -2293,9 +2338,9 @@ dependencies = [ { name = "pluggy" }, { name = "pygments" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a3/5c/00a0e072241553e1a7496d638deababa67c5058571567b92a7eaa258397c/pytest-8.4.2.tar.gz", hash = "sha256:86c0d0b93306b961d58d62a4db4879f27fe25513d4b969df351abdddb3c30e01", size = 1519618 } +sdist = { url = "https://files.pythonhosted.org/packages/a3/5c/00a0e072241553e1a7496d638deababa67c5058571567b92a7eaa258397c/pytest-8.4.2.tar.gz", hash = "sha256:86c0d0b93306b961d58d62a4db4879f27fe25513d4b969df351abdddb3c30e01", size = 1519618, upload_time = "2025-09-04T14:34:22.711Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a8/a4/20da314d277121d6534b3a980b29035dcd51e6744bd79075a6ce8fa4eb8d/pytest-8.4.2-py3-none-any.whl", hash = "sha256:872f880de3fc3a5bdc88a11b39c9710c3497a547cfa9320bc3c5e62fbf272e79", size = 365750 }, + { url = "https://files.pythonhosted.org/packages/a8/a4/20da314d277121d6534b3a980b29035dcd51e6744bd79075a6ce8fa4eb8d/pytest-8.4.2-py3-none-any.whl", hash = "sha256:872f880de3fc3a5bdc88a11b39c9710c3497a547cfa9320bc3c5e62fbf272e79", size = 365750, upload_time = "2025-09-04T14:34:20.226Z" }, ] [[package]] @@ -2307,9 +2352,9 @@ dependencies = [ { name = "pluggy" }, { name = "pytest" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/5e/f7/c933acc76f5208b3b00089573cf6a2bc26dc80a8aece8f52bb7d6b1855ca/pytest_cov-7.0.0.tar.gz", hash = "sha256:33c97eda2e049a0c5298e91f519302a1334c26ac65c1a483d6206fd458361af1", size = 54328 } +sdist = { url = "https://files.pythonhosted.org/packages/5e/f7/c933acc76f5208b3b00089573cf6a2bc26dc80a8aece8f52bb7d6b1855ca/pytest_cov-7.0.0.tar.gz", hash = "sha256:33c97eda2e049a0c5298e91f519302a1334c26ac65c1a483d6206fd458361af1", size = 54328, upload_time = "2025-09-09T10:57:02.113Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.whl", hash = "sha256:3b8e9558b16cc1479da72058bdecf8073661c7f57f7d3c5f22a1c23507f2d861", size = 22424 }, + { url = "https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.whl", hash = "sha256:3b8e9558b16cc1479da72058bdecf8073661c7f57f7d3c5f22a1c23507f2d861", size = 22424, upload_time = "2025-09-09T10:57:00.695Z" }, ] [[package]] @@ -2320,76 +2365,76 @@ dependencies = [ { name = "execnet" }, { name = "pytest" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/78/b4/439b179d1ff526791eb921115fca8e44e596a13efeda518b9d845a619450/pytest_xdist-3.8.0.tar.gz", hash = "sha256:7e578125ec9bc6050861aa93f2d59f1d8d085595d6551c2c90b6f4fad8d3a9f1", size = 88069 } +sdist = { url = "https://files.pythonhosted.org/packages/78/b4/439b179d1ff526791eb921115fca8e44e596a13efeda518b9d845a619450/pytest_xdist-3.8.0.tar.gz", hash = "sha256:7e578125ec9bc6050861aa93f2d59f1d8d085595d6551c2c90b6f4fad8d3a9f1", size = 88069, upload_time = "2025-07-01T13:30:59.346Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl", hash = "sha256:202ca578cfeb7370784a8c33d6d05bc6e13b4f25b5053c30a152269fd10f0b88", size = 46396 }, + { url = "https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl", hash = "sha256:202ca578cfeb7370784a8c33d6d05bc6e13b4f25b5053c30a152269fd10f0b88", size = 46396, upload_time = "2025-07-01T13:30:56.632Z" }, ] [[package]] name = "python-calamine" version = "0.5.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f3/ca/295b37a97275d53f072c7307c9d0c4bfec565d3d74157e7fe336ea18de0a/python_calamine-0.5.3.tar.gz", hash = "sha256:b4529c955fa64444184630d5bc8c82c472d1cf6bfe631f0a7bfc5e4802d4e996", size = 130874 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/05/24/f6e3369be221baa6a50476b8a02f5100980ae487a630d80d4983b4c73879/python_calamine-0.5.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:b9a78e471bc02d3f76c294bf996562a9d0fbf2ad0a49d628330ba247865190f1", size = 844280 }, - { url = "https://files.pythonhosted.org/packages/e7/32/f9b689fe40616376457d1a6fd5ab84834066db31fa5ffd10a5b02f996a44/python_calamine-0.5.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bcbd277a4d0a0108aa2f5126a89ca3f2bb18d0bec7ba7d614da02a4556d18ef2", size = 814054 }, - { url = "https://files.pythonhosted.org/packages/f7/26/a07bb6993ae0a524251060397edc710af413dbb175d56f1e1bbc7a2c39c9/python_calamine-0.5.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:04e6b68b26346f559a086bb84c960d4e9ddc79be8c3499752c1ba96051fea98f", size = 889447 }, - { url = "https://files.pythonhosted.org/packages/d8/79/5902d00658e2dd4efe3a4062b710a7eaa6082001c199717468fbcd8cef69/python_calamine-0.5.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e60ebeafebf66889753bfad0055edaa38068663961bb9a18e9f89aef2c9cec50", size = 883540 }, - { url = "https://files.pythonhosted.org/packages/d0/85/6299c909fcbba0663b527b82c87d204372e6f469b4ed5602f7bc1f7f1103/python_calamine-0.5.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2d9da11edb40e9d2fb214fcf575be8004b44b1b407930eceb2458f1a84be634f", size = 1034891 }, - { url = "https://files.pythonhosted.org/packages/65/2c/d0cfd9161b3404528bfba9fe000093be19f2c83ede42c255da4ebfd4da17/python_calamine-0.5.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:44d22bc52fe26b72a6dc07ab8a167d5d97aeb28282957f52b930e92106a35e3c", size = 935055 }, - { url = "https://files.pythonhosted.org/packages/b8/69/420c382535d1aca9af6bc929c78ad6b9f8416312aa4955b7977f5f864082/python_calamine-0.5.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b9ace667e04ea6631a0ada0e43dbc796c56e0d021f04bd64cdacb44de4504da", size = 904143 }, - { url = "https://files.pythonhosted.org/packages/d8/2b/19cc87654f9c85fbb6265a7ebe92cf0f649c308f0cf8f262b5c3de754d19/python_calamine-0.5.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7ec0da29de7366258de2eb765a90b9e9fbe9f9865772f3609dacff302b894393", size = 948890 }, - { url = "https://files.pythonhosted.org/packages/18/e8/3547cb72d3a0f67c173ca07d9137046f2a6c87fdc31316b10e2d7d851f2a/python_calamine-0.5.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4bba5adf123200503e6c07c667a8ce82c3b62ba02f9b3e99205be24fc73abc49", size = 1067802 }, - { url = "https://files.pythonhosted.org/packages/cb/69/31ab3e8010cbed814b5fcdb2ace43e5b76d6464f8abb1dfab9191416ca3d/python_calamine-0.5.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f4c49bc58f3cfd1e9595a05cab7e71aa94f6cff5bf3916de2b87cdaa9b4ce9a3", size = 1074607 }, - { url = "https://files.pythonhosted.org/packages/c4/40/112d113d974bee5fff564e355b01df5bd524dbd5820c913c9dae574fe80a/python_calamine-0.5.3-cp312-cp312-win32.whl", hash = "sha256:42315463e139f5e44f4dedb9444fa0971c51e82573e872428050914f0dec4194", size = 669578 }, - { url = "https://files.pythonhosted.org/packages/3e/87/0af1cf4ad01a2df273cfd3abb7efaba4fba50395b98f5e871cee016d4f09/python_calamine-0.5.3-cp312-cp312-win_amd64.whl", hash = "sha256:8a24bd4c72bd984311f5ebf2e17a8aa3ce4e5ae87eda517c61c3507db8c045de", size = 713021 }, - { url = "https://files.pythonhosted.org/packages/5d/4e/6ed2ed3bb4c4c479e85d3444742f101f7b3099db1819e422bf861cf9923b/python_calamine-0.5.3-cp312-cp312-win_arm64.whl", hash = "sha256:e4a713e56d3cca752d1a7d6a00dca81b224e2e1a0567d370bc0db537e042d6b0", size = 679615 }, - { url = "https://files.pythonhosted.org/packages/33/e7/14f2bec7b4bead0e71e78fa2549e22192c498a3204d931bd0e6522ec955d/python_calamine-0.5.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:90389cc459500644bbc1a1170b5e50a95160f34cedc8de7fe9a4bd1c08764039", size = 843906 }, - { url = "https://files.pythonhosted.org/packages/c2/6c/8c6e7a8c9b421e99ad1a637c3b96d94fef25abad6bf790a7ce35bfc5a48d/python_calamine-0.5.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:221b64c0e126a1263a14d575c61a60177cad852829dca61dfb4f5a8fb9603251", size = 813859 }, - { url = "https://files.pythonhosted.org/packages/c4/ee/f6745016a431f10620b4e803f306d95c57e828dea064e32fb944c0260559/python_calamine-0.5.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:49f3aa50d532c6639be851a644875d5c9cd63892cf545ee614a5c0593dc50c3b", size = 889212 }, - { url = "https://files.pythonhosted.org/packages/b9/72/8de0af1823d587b2683eb25c6feef14c7ea917cfb975d094ad09f46245d0/python_calamine-0.5.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7d8bf3b3542c771795cfcfa8a77d1373273311735517cca599aa7f89c34f38ae", size = 883584 }, - { url = "https://files.pythonhosted.org/packages/5a/90/47b91cf573b6bd4e6dbaeef4f993caf26dc0d2b8117261bc965bd70b38ce/python_calamine-0.5.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d8e452fc1335ab1f7738c3d4d5144f11719b9c5585f3cb5102d47293355067a", size = 1034378 }, - { url = "https://files.pythonhosted.org/packages/48/f7/c75e5f0b0918f0f60b45fad4c313d159633615aa1c96a5170e3fe940862d/python_calamine-0.5.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4fc75ac97be47539465191a00de305c0e150465da8632c14fc1107a0b304f97", size = 934310 }, - { url = "https://files.pythonhosted.org/packages/cd/04/8b5806bdbfabdb51fd2816deac6870d031560f0bbd90d9729ac86b903579/python_calamine-0.5.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1258368551e0b235d5b46c105137294cbb5ca683b2c13f5851f3ebec7f2d42b", size = 903602 }, - { url = "https://files.pythonhosted.org/packages/75/4e/ec27837d5023b8db775db7798b3340eeb6bcb7f61ad64e892d4e1b14853e/python_calamine-0.5.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3a7c51270e5ea518cb02cb531d84a2eb2de68da3cf48b26adae622f031dc5284", size = 948410 }, - { url = "https://files.pythonhosted.org/packages/3d/ba/8b5193637bfa0f363284974ae998f96fa1c8561a0a4d90378b0f202ac317/python_calamine-0.5.3-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:e1d0df3d69b32da05e3e7648bb5802559d44979be721983f0d669b4128f920fa", size = 1067274 }, - { url = "https://files.pythonhosted.org/packages/da/1c/506791e4c7078f2fed1ee2d69703d62c0acfd5b671db157bb755f47cff42/python_calamine-0.5.3-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:6d674ae194744b6080f20a0b5a253a9976d632ee91dc00e13e539e968167cd35", size = 1073351 }, - { url = "https://files.pythonhosted.org/packages/dc/83/e30e21484b1ed55668f67a63578d8a6ba70597a4d7ee8da23d759d3e1b3f/python_calamine-0.5.3-cp313-cp313-win32.whl", hash = "sha256:7a42ff0dae44457a4a3e65ea49357ffdf92e44f8b022ef1fb32c6498097d6d57", size = 669416 }, - { url = "https://files.pythonhosted.org/packages/1d/8f/29c617e9548ed2704657ebaa7d79067cad06cbbf7dd432a6cacd4cc19d16/python_calamine-0.5.3-cp313-cp313-win_amd64.whl", hash = "sha256:054aee805c2cd5ab9848c2b8459822f2581cf22af45ff60251c9f45585cc06e0", size = 712760 }, - { url = "https://files.pythonhosted.org/packages/f8/35/d8117f99037100a28d17d9fbde121511c19d54ff4e5968d6aed693caeb87/python_calamine-0.5.3-cp313-cp313-win_arm64.whl", hash = "sha256:0e870f57651e2f76e7c1f009492aa342a7b1819f8b1131bf501240872777f944", size = 679372 }, - { url = "https://files.pythonhosted.org/packages/d9/0a/61949009a354af9ff5dc19e6816ae68a56281c0765520c9db4ff0ed20054/python_calamine-0.5.3-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:e98c819cd43a7f0048f6d97c9d4ec23d72889cd722de1d6b68e0de24b1f8f037", size = 843418 }, - { url = "https://files.pythonhosted.org/packages/52/7b/4cb7fa988d17c98a0be6e9f74561d8a2381f28a2b88adb89f16abe345d2f/python_calamine-0.5.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:cf90ce46420545f922cde95004ea8d5efaf3864b5a380a5d1defc7abd219421a", size = 813611 }, - { url = "https://files.pythonhosted.org/packages/01/34/4c2a6827da90f366be3fb9c7788f672f5e7d60808f9dbd01da5acc6f11ca/python_calamine-0.5.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e89caa6a1a55215be742cd44f6d94611fb6ab222a30325e772abc40566693e5", size = 888097 }, - { url = "https://files.pythonhosted.org/packages/17/bc/ecf5f6ac95195dfd3e9d63ab8c60b78d6466009751dfb1cdacf71d5f5e19/python_calamine-0.5.3-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b13177e42dac8de57870995699b237ce5a7886d9bd7fb745a36f867e5d3d3e62", size = 880861 }, - { url = "https://files.pythonhosted.org/packages/6e/55/8b60f99221a408f08db280b553aa4321c4cd9365e5c3101638249002d5a4/python_calamine-0.5.3-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:948e28b5f3246177440c70550661e0a27b414cb15535111fca7dbac2a63721b1", size = 1033023 }, - { url = "https://files.pythonhosted.org/packages/05/c5/8c378d3c2c56d12606e20b59eee3538d3b1177fe00b103bb98ef15176610/python_calamine-0.5.3-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e37fef2b67bcd66b5dfc65b0779da9522c82f1ef9f97fc6034848072ff60b3f7", size = 933097 }, - { url = "https://files.pythonhosted.org/packages/26/04/cf14e91ac5c2d6d9795e1c39f3f53e0f173fcbaed4b00198e22a58265fdd/python_calamine-0.5.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ddcef4e0e9d0479e027c90d9e1537bcf05de9bdd137cd7dfdbfc0034b1850973", size = 901917 }, - { url = "https://files.pythonhosted.org/packages/6e/2f/5b2065b9360bda792504fe3ac1cef6d9da51ceba6230ee7634886b44cce9/python_calamine-0.5.3-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6732b47f923102357bde348021a2892a41c2fb173958268c0a1ff8d5abb6b7e8", size = 943328 }, - { url = "https://files.pythonhosted.org/packages/ce/5a/45e4bd8473264b918d83297d15f160471029390cd06ed0056fc57e8f29eb/python_calamine-0.5.3-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:543db1b886cf994aaf7da0752022b37c42c05acb7605b56d09047023c8387610", size = 1065993 }, - { url = "https://files.pythonhosted.org/packages/35/6b/2afd47608495f23408bdf2f1ff57a144700aed8b5bbe50285ac4864edf53/python_calamine-0.5.3-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:b79135dd96129253dc0e547778c700e1e3782e7671e7047c8b106b5501e33706", size = 1071801 }, - { url = "https://files.pythonhosted.org/packages/f7/db/b06a15f25e63290c2efc5433fa8b395bfe870aacbf4ea6c930764d53eca6/python_calamine-0.5.3-cp313-cp313t-win32.whl", hash = "sha256:d84dc3b78adf038a2b452fc784523dcc90477f1631d33aabc0872812db5beb26", size = 669485 }, - { url = "https://files.pythonhosted.org/packages/2d/40/e51adf1dae2002f189c83ae527aad017372d1a1b97a22172dc2e51ce502d/python_calamine-0.5.3-cp313-cp313t-win_amd64.whl", hash = "sha256:8a3fd541576fdf2708e40064ebaaf561a0a2afcab01de91c83ec212193bede34", size = 712636 }, - { url = "https://files.pythonhosted.org/packages/56/fa/db4dc8d27a5daa14a153aebc0cb98bad6fd700befd9e67440a8017f0e108/python_calamine-0.5.3-cp313-cp313t-win_arm64.whl", hash = "sha256:b28a9c9318a5e7dabcead1803bfd48be5bf7c9f339d6e505a5989650a6102487", size = 678307 }, - { url = "https://files.pythonhosted.org/packages/ee/7f/a098680c9d6ad36fe850f2c2c28627ee3bc95aaa052f375806f69c075475/python_calamine-0.5.3-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:b5cdcd85cc08a1805d267fc66aa100940712de6b4524951ab91ba47fa60d481f", size = 843921 }, - { url = "https://files.pythonhosted.org/packages/09/ce/3de5d714779fac6e3333e7ea98ce4eae3b2479eb8a3d2f7d9e4487e16681/python_calamine-0.5.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:828cd5d49fe9eb9c1fc9219fe484b07f2ba9a1e5e3b8475d7f1415e0fa316df8", size = 814173 }, - { url = "https://files.pythonhosted.org/packages/cb/14/ef98575838091b6b24274160d53607e78df94f0176af360bcb063512e643/python_calamine-0.5.3-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d3f4d0532ab4de422fc4b707cdbb93d57ca7ccf9be8bc4742fb9376dc68f861", size = 888958 }, - { url = "https://files.pythonhosted.org/packages/c0/b1/c999dd1f89f415ff06f88f37bce643ece3c4d51ae051e0a143ff16f44c1c/python_calamine-0.5.3-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:89a9ba0a16e4335b676232ddbbea0fd09bfb94757ca6e4cf90ce1348aa843f3f", size = 880988 }, - { url = "https://files.pythonhosted.org/packages/74/16/4984532280e4b2c81aa26ae57b37fc3eaeda414e46e2d9c6a9cfdb27cd56/python_calamine-0.5.3-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0928d0eb1cdea229464de280d0f7cd99314ba28cffd2c4d6c9ce6902f9d6d448", size = 1035685 }, - { url = "https://files.pythonhosted.org/packages/cd/dc/91776b34ab09f36ea41449951148bef731f9b355a2d2b25d398eec774926/python_calamine-0.5.3-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c7f9519dd3b8814ef6e801b9797f918fe7a59937fac4784cb280c8350fb1a2cf", size = 933865 }, - { url = "https://files.pythonhosted.org/packages/01/97/12deaff5e608207398a9f0eaa06447ed69e8c4873ee953be553f9440881a/python_calamine-0.5.3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:954cd764c6b24735c749a447523b4ccf4b9d2b7c231ddd304ed42c15afca9516", size = 902310 }, - { url = "https://files.pythonhosted.org/packages/45/da/45063eee203f6c9d9436d29dfc0f01db85c9264c86d1e438c3b452d7e97f/python_calamine-0.5.3-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b3f0e9c59fece6bbf1a916947fba33e9b635327eb165784d05efed40027164d1", size = 948143 }, - { url = "https://files.pythonhosted.org/packages/33/07/0b661166dd58367bd5d6cc2bf8441f61004dd5ef2555ab224da97b1ac5d3/python_calamine-0.5.3-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:63bb47cc080d8eb9bc654f0961ada385b58a57d4628b0a33d1003c8f62e6ae3d", size = 1067181 }, - { url = "https://files.pythonhosted.org/packages/5d/80/58b107dc2c2e6bad581f58f54b3ccb07705094ff23734c8dd30bd8aef4e8/python_calamine-0.5.3-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:adb62aab9b9298b2fc378b2aec6dd5802f7ee199c3431abae29368ef046f8005", size = 1072683 }, - { url = "https://files.pythonhosted.org/packages/4c/b4/667e40dbe7d4f19a2e69f9cd186e069cd3af0411a177aa2a90231e3e0b06/python_calamine-0.5.3-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:1de68d2586df7a7a05a7779031dabd4c3d95d4738314ba82e943c8d3f36b5a67", size = 843526 }, - { url = "https://files.pythonhosted.org/packages/3e/f7/fb86da5920198a616583f07d1a395cb1241eafb930d5c33f597ae6664711/python_calamine-0.5.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2c70033bbd59f05491743befec5e2a90784f4c8220e7379ce03e956bd1f475be", size = 811074 }, - { url = "https://files.pythonhosted.org/packages/76/2e/5a5a618b351b75155fbb40ad88e166f17ccf202401dd4b830db05b2565a6/python_calamine-0.5.3-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f396a0e57b1a5462668fc247377714b5b4c061718c1863c00ddc64e770b0f1e", size = 887735 }, - { url = "https://files.pythonhosted.org/packages/97/cf/3cfaa550eb1c9c5501728886c5e787c3ddeb34d8bf3e7e9fcaf9fc6fbd86/python_calamine-0.5.3-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ce737cb19d3077cabe0acaecd6b55d5df75021a520c20b47e0c75b65b4bfa919", size = 882356 }, - { url = "https://files.pythonhosted.org/packages/88/b8/97f56e337149d0ce53399be9bd583f735dc1ea9abb2745ac902a09e8c401/python_calamine-0.5.3-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e54b30802fe089cc0c67c67407203412ec7144e84e0960e69c529c7170c37dae", size = 1033195 }, - { url = "https://files.pythonhosted.org/packages/94/45/59a21a18c8e073d2f930a4a9c0c038207b82c5c996b67146fb76f3da2748/python_calamine-0.5.3-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5efc94c2e4119dc0da1e84d036f7e840fb0dd0850f4c10d3d166d725af0751af", size = 931846 }, - { url = "https://files.pythonhosted.org/packages/36/47/715e0c0bc37ccce035ef4be1aa8eafa1e5abb6687af725cb47d81a18def7/python_calamine-0.5.3-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:74e33191a01d52f66dd6b029e99b6eda0245771c4f116c87ff0d5edf922dbbca", size = 902871 }, - { url = "https://files.pythonhosted.org/packages/ca/07/ac0cf8623765106794e297235d6dde3a728f18e61a536792189fca06f2ba/python_calamine-0.5.3-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:85ceec02cb367cf87a72ba559db3279f3b4774edba9330eb77670587d4de95f4", size = 944438 }, - { url = "https://files.pythonhosted.org/packages/88/98/c48c0b8be7fbae5f68b7c55a1ed4068d2c3dab64093e39733d43c23a7459/python_calamine-0.5.3-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:882400368f976ea489e47af04fde936b603c3efcf9ade1cd73e623c88fc4aa5c", size = 1066276 }, - { url = "https://files.pythonhosted.org/packages/73/3a/bbf99531fec43bca2ab28948ab94d851db96c0364c76139dd746cab2f4f9/python_calamine-0.5.3-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:ce2fe421d5564e5341f7a06b9c52b84603b48aa670426d44fffce705609a859b", size = 1073059 }, +sdist = { url = "https://files.pythonhosted.org/packages/f3/ca/295b37a97275d53f072c7307c9d0c4bfec565d3d74157e7fe336ea18de0a/python_calamine-0.5.3.tar.gz", hash = "sha256:b4529c955fa64444184630d5bc8c82c472d1cf6bfe631f0a7bfc5e4802d4e996", size = 130874, upload_time = "2025-09-08T05:41:27.18Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/05/24/f6e3369be221baa6a50476b8a02f5100980ae487a630d80d4983b4c73879/python_calamine-0.5.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:b9a78e471bc02d3f76c294bf996562a9d0fbf2ad0a49d628330ba247865190f1", size = 844280, upload_time = "2025-09-08T05:39:19.991Z" }, + { url = "https://files.pythonhosted.org/packages/e7/32/f9b689fe40616376457d1a6fd5ab84834066db31fa5ffd10a5b02f996a44/python_calamine-0.5.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bcbd277a4d0a0108aa2f5126a89ca3f2bb18d0bec7ba7d614da02a4556d18ef2", size = 814054, upload_time = "2025-09-08T05:39:21.888Z" }, + { url = "https://files.pythonhosted.org/packages/f7/26/a07bb6993ae0a524251060397edc710af413dbb175d56f1e1bbc7a2c39c9/python_calamine-0.5.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:04e6b68b26346f559a086bb84c960d4e9ddc79be8c3499752c1ba96051fea98f", size = 889447, upload_time = "2025-09-08T05:39:23.332Z" }, + { url = "https://files.pythonhosted.org/packages/d8/79/5902d00658e2dd4efe3a4062b710a7eaa6082001c199717468fbcd8cef69/python_calamine-0.5.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e60ebeafebf66889753bfad0055edaa38068663961bb9a18e9f89aef2c9cec50", size = 883540, upload_time = "2025-09-08T05:39:25.15Z" }, + { url = "https://files.pythonhosted.org/packages/d0/85/6299c909fcbba0663b527b82c87d204372e6f469b4ed5602f7bc1f7f1103/python_calamine-0.5.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2d9da11edb40e9d2fb214fcf575be8004b44b1b407930eceb2458f1a84be634f", size = 1034891, upload_time = "2025-09-08T05:39:26.666Z" }, + { url = "https://files.pythonhosted.org/packages/65/2c/d0cfd9161b3404528bfba9fe000093be19f2c83ede42c255da4ebfd4da17/python_calamine-0.5.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:44d22bc52fe26b72a6dc07ab8a167d5d97aeb28282957f52b930e92106a35e3c", size = 935055, upload_time = "2025-09-08T05:39:28.727Z" }, + { url = "https://files.pythonhosted.org/packages/b8/69/420c382535d1aca9af6bc929c78ad6b9f8416312aa4955b7977f5f864082/python_calamine-0.5.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b9ace667e04ea6631a0ada0e43dbc796c56e0d021f04bd64cdacb44de4504da", size = 904143, upload_time = "2025-09-08T05:39:30.23Z" }, + { url = "https://files.pythonhosted.org/packages/d8/2b/19cc87654f9c85fbb6265a7ebe92cf0f649c308f0cf8f262b5c3de754d19/python_calamine-0.5.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7ec0da29de7366258de2eb765a90b9e9fbe9f9865772f3609dacff302b894393", size = 948890, upload_time = "2025-09-08T05:39:31.779Z" }, + { url = "https://files.pythonhosted.org/packages/18/e8/3547cb72d3a0f67c173ca07d9137046f2a6c87fdc31316b10e2d7d851f2a/python_calamine-0.5.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4bba5adf123200503e6c07c667a8ce82c3b62ba02f9b3e99205be24fc73abc49", size = 1067802, upload_time = "2025-09-08T05:39:33.264Z" }, + { url = "https://files.pythonhosted.org/packages/cb/69/31ab3e8010cbed814b5fcdb2ace43e5b76d6464f8abb1dfab9191416ca3d/python_calamine-0.5.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f4c49bc58f3cfd1e9595a05cab7e71aa94f6cff5bf3916de2b87cdaa9b4ce9a3", size = 1074607, upload_time = "2025-09-08T05:39:34.803Z" }, + { url = "https://files.pythonhosted.org/packages/c4/40/112d113d974bee5fff564e355b01df5bd524dbd5820c913c9dae574fe80a/python_calamine-0.5.3-cp312-cp312-win32.whl", hash = "sha256:42315463e139f5e44f4dedb9444fa0971c51e82573e872428050914f0dec4194", size = 669578, upload_time = "2025-09-08T05:39:36.305Z" }, + { url = "https://files.pythonhosted.org/packages/3e/87/0af1cf4ad01a2df273cfd3abb7efaba4fba50395b98f5e871cee016d4f09/python_calamine-0.5.3-cp312-cp312-win_amd64.whl", hash = "sha256:8a24bd4c72bd984311f5ebf2e17a8aa3ce4e5ae87eda517c61c3507db8c045de", size = 713021, upload_time = "2025-09-08T05:39:37.942Z" }, + { url = "https://files.pythonhosted.org/packages/5d/4e/6ed2ed3bb4c4c479e85d3444742f101f7b3099db1819e422bf861cf9923b/python_calamine-0.5.3-cp312-cp312-win_arm64.whl", hash = "sha256:e4a713e56d3cca752d1a7d6a00dca81b224e2e1a0567d370bc0db537e042d6b0", size = 679615, upload_time = "2025-09-08T05:39:39.487Z" }, + { url = "https://files.pythonhosted.org/packages/33/e7/14f2bec7b4bead0e71e78fa2549e22192c498a3204d931bd0e6522ec955d/python_calamine-0.5.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:90389cc459500644bbc1a1170b5e50a95160f34cedc8de7fe9a4bd1c08764039", size = 843906, upload_time = "2025-09-08T05:39:40.972Z" }, + { url = "https://files.pythonhosted.org/packages/c2/6c/8c6e7a8c9b421e99ad1a637c3b96d94fef25abad6bf790a7ce35bfc5a48d/python_calamine-0.5.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:221b64c0e126a1263a14d575c61a60177cad852829dca61dfb4f5a8fb9603251", size = 813859, upload_time = "2025-09-08T05:39:42.853Z" }, + { url = "https://files.pythonhosted.org/packages/c4/ee/f6745016a431f10620b4e803f306d95c57e828dea064e32fb944c0260559/python_calamine-0.5.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:49f3aa50d532c6639be851a644875d5c9cd63892cf545ee614a5c0593dc50c3b", size = 889212, upload_time = "2025-09-08T05:39:44.356Z" }, + { url = "https://files.pythonhosted.org/packages/b9/72/8de0af1823d587b2683eb25c6feef14c7ea917cfb975d094ad09f46245d0/python_calamine-0.5.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7d8bf3b3542c771795cfcfa8a77d1373273311735517cca599aa7f89c34f38ae", size = 883584, upload_time = "2025-09-08T05:39:45.97Z" }, + { url = "https://files.pythonhosted.org/packages/5a/90/47b91cf573b6bd4e6dbaeef4f993caf26dc0d2b8117261bc965bd70b38ce/python_calamine-0.5.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d8e452fc1335ab1f7738c3d4d5144f11719b9c5585f3cb5102d47293355067a", size = 1034378, upload_time = "2025-09-08T05:39:47.57Z" }, + { url = "https://files.pythonhosted.org/packages/48/f7/c75e5f0b0918f0f60b45fad4c313d159633615aa1c96a5170e3fe940862d/python_calamine-0.5.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4fc75ac97be47539465191a00de305c0e150465da8632c14fc1107a0b304f97", size = 934310, upload_time = "2025-09-08T05:39:49.059Z" }, + { url = "https://files.pythonhosted.org/packages/cd/04/8b5806bdbfabdb51fd2816deac6870d031560f0bbd90d9729ac86b903579/python_calamine-0.5.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1258368551e0b235d5b46c105137294cbb5ca683b2c13f5851f3ebec7f2d42b", size = 903602, upload_time = "2025-09-08T05:39:50.91Z" }, + { url = "https://files.pythonhosted.org/packages/75/4e/ec27837d5023b8db775db7798b3340eeb6bcb7f61ad64e892d4e1b14853e/python_calamine-0.5.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3a7c51270e5ea518cb02cb531d84a2eb2de68da3cf48b26adae622f031dc5284", size = 948410, upload_time = "2025-09-08T05:39:53.286Z" }, + { url = "https://files.pythonhosted.org/packages/3d/ba/8b5193637bfa0f363284974ae998f96fa1c8561a0a4d90378b0f202ac317/python_calamine-0.5.3-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:e1d0df3d69b32da05e3e7648bb5802559d44979be721983f0d669b4128f920fa", size = 1067274, upload_time = "2025-09-08T05:39:55.469Z" }, + { url = "https://files.pythonhosted.org/packages/da/1c/506791e4c7078f2fed1ee2d69703d62c0acfd5b671db157bb755f47cff42/python_calamine-0.5.3-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:6d674ae194744b6080f20a0b5a253a9976d632ee91dc00e13e539e968167cd35", size = 1073351, upload_time = "2025-09-08T05:39:57.685Z" }, + { url = "https://files.pythonhosted.org/packages/dc/83/e30e21484b1ed55668f67a63578d8a6ba70597a4d7ee8da23d759d3e1b3f/python_calamine-0.5.3-cp313-cp313-win32.whl", hash = "sha256:7a42ff0dae44457a4a3e65ea49357ffdf92e44f8b022ef1fb32c6498097d6d57", size = 669416, upload_time = "2025-09-08T05:39:59.901Z" }, + { url = "https://files.pythonhosted.org/packages/1d/8f/29c617e9548ed2704657ebaa7d79067cad06cbbf7dd432a6cacd4cc19d16/python_calamine-0.5.3-cp313-cp313-win_amd64.whl", hash = "sha256:054aee805c2cd5ab9848c2b8459822f2581cf22af45ff60251c9f45585cc06e0", size = 712760, upload_time = "2025-09-08T05:40:01.799Z" }, + { url = "https://files.pythonhosted.org/packages/f8/35/d8117f99037100a28d17d9fbde121511c19d54ff4e5968d6aed693caeb87/python_calamine-0.5.3-cp313-cp313-win_arm64.whl", hash = "sha256:0e870f57651e2f76e7c1f009492aa342a7b1819f8b1131bf501240872777f944", size = 679372, upload_time = "2025-09-08T05:40:03.676Z" }, + { url = "https://files.pythonhosted.org/packages/d9/0a/61949009a354af9ff5dc19e6816ae68a56281c0765520c9db4ff0ed20054/python_calamine-0.5.3-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:e98c819cd43a7f0048f6d97c9d4ec23d72889cd722de1d6b68e0de24b1f8f037", size = 843418, upload_time = "2025-09-08T05:40:05.601Z" }, + { url = "https://files.pythonhosted.org/packages/52/7b/4cb7fa988d17c98a0be6e9f74561d8a2381f28a2b88adb89f16abe345d2f/python_calamine-0.5.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:cf90ce46420545f922cde95004ea8d5efaf3864b5a380a5d1defc7abd219421a", size = 813611, upload_time = "2025-09-08T05:40:07.47Z" }, + { url = "https://files.pythonhosted.org/packages/01/34/4c2a6827da90f366be3fb9c7788f672f5e7d60808f9dbd01da5acc6f11ca/python_calamine-0.5.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e89caa6a1a55215be742cd44f6d94611fb6ab222a30325e772abc40566693e5", size = 888097, upload_time = "2025-09-08T05:40:09.256Z" }, + { url = "https://files.pythonhosted.org/packages/17/bc/ecf5f6ac95195dfd3e9d63ab8c60b78d6466009751dfb1cdacf71d5f5e19/python_calamine-0.5.3-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b13177e42dac8de57870995699b237ce5a7886d9bd7fb745a36f867e5d3d3e62", size = 880861, upload_time = "2025-09-08T05:40:11.637Z" }, + { url = "https://files.pythonhosted.org/packages/6e/55/8b60f99221a408f08db280b553aa4321c4cd9365e5c3101638249002d5a4/python_calamine-0.5.3-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:948e28b5f3246177440c70550661e0a27b414cb15535111fca7dbac2a63721b1", size = 1033023, upload_time = "2025-09-08T05:40:13.864Z" }, + { url = "https://files.pythonhosted.org/packages/05/c5/8c378d3c2c56d12606e20b59eee3538d3b1177fe00b103bb98ef15176610/python_calamine-0.5.3-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e37fef2b67bcd66b5dfc65b0779da9522c82f1ef9f97fc6034848072ff60b3f7", size = 933097, upload_time = "2025-09-08T05:40:16.372Z" }, + { url = "https://files.pythonhosted.org/packages/26/04/cf14e91ac5c2d6d9795e1c39f3f53e0f173fcbaed4b00198e22a58265fdd/python_calamine-0.5.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ddcef4e0e9d0479e027c90d9e1537bcf05de9bdd137cd7dfdbfc0034b1850973", size = 901917, upload_time = "2025-09-08T05:40:18.444Z" }, + { url = "https://files.pythonhosted.org/packages/6e/2f/5b2065b9360bda792504fe3ac1cef6d9da51ceba6230ee7634886b44cce9/python_calamine-0.5.3-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6732b47f923102357bde348021a2892a41c2fb173958268c0a1ff8d5abb6b7e8", size = 943328, upload_time = "2025-09-08T05:40:20.302Z" }, + { url = "https://files.pythonhosted.org/packages/ce/5a/45e4bd8473264b918d83297d15f160471029390cd06ed0056fc57e8f29eb/python_calamine-0.5.3-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:543db1b886cf994aaf7da0752022b37c42c05acb7605b56d09047023c8387610", size = 1065993, upload_time = "2025-09-08T05:40:22.528Z" }, + { url = "https://files.pythonhosted.org/packages/35/6b/2afd47608495f23408bdf2f1ff57a144700aed8b5bbe50285ac4864edf53/python_calamine-0.5.3-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:b79135dd96129253dc0e547778c700e1e3782e7671e7047c8b106b5501e33706", size = 1071801, upload_time = "2025-09-08T05:40:24.481Z" }, + { url = "https://files.pythonhosted.org/packages/f7/db/b06a15f25e63290c2efc5433fa8b395bfe870aacbf4ea6c930764d53eca6/python_calamine-0.5.3-cp313-cp313t-win32.whl", hash = "sha256:d84dc3b78adf038a2b452fc784523dcc90477f1631d33aabc0872812db5beb26", size = 669485, upload_time = "2025-09-08T05:40:26.818Z" }, + { url = "https://files.pythonhosted.org/packages/2d/40/e51adf1dae2002f189c83ae527aad017372d1a1b97a22172dc2e51ce502d/python_calamine-0.5.3-cp313-cp313t-win_amd64.whl", hash = "sha256:8a3fd541576fdf2708e40064ebaaf561a0a2afcab01de91c83ec212193bede34", size = 712636, upload_time = "2025-09-08T05:40:28.502Z" }, + { url = "https://files.pythonhosted.org/packages/56/fa/db4dc8d27a5daa14a153aebc0cb98bad6fd700befd9e67440a8017f0e108/python_calamine-0.5.3-cp313-cp313t-win_arm64.whl", hash = "sha256:b28a9c9318a5e7dabcead1803bfd48be5bf7c9f339d6e505a5989650a6102487", size = 678307, upload_time = "2025-09-08T05:40:30.797Z" }, + { url = "https://files.pythonhosted.org/packages/ee/7f/a098680c9d6ad36fe850f2c2c28627ee3bc95aaa052f375806f69c075475/python_calamine-0.5.3-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:b5cdcd85cc08a1805d267fc66aa100940712de6b4524951ab91ba47fa60d481f", size = 843921, upload_time = "2025-09-08T05:40:32.418Z" }, + { url = "https://files.pythonhosted.org/packages/09/ce/3de5d714779fac6e3333e7ea98ce4eae3b2479eb8a3d2f7d9e4487e16681/python_calamine-0.5.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:828cd5d49fe9eb9c1fc9219fe484b07f2ba9a1e5e3b8475d7f1415e0fa316df8", size = 814173, upload_time = "2025-09-08T05:40:33.982Z" }, + { url = "https://files.pythonhosted.org/packages/cb/14/ef98575838091b6b24274160d53607e78df94f0176af360bcb063512e643/python_calamine-0.5.3-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d3f4d0532ab4de422fc4b707cdbb93d57ca7ccf9be8bc4742fb9376dc68f861", size = 888958, upload_time = "2025-09-08T05:40:35.576Z" }, + { url = "https://files.pythonhosted.org/packages/c0/b1/c999dd1f89f415ff06f88f37bce643ece3c4d51ae051e0a143ff16f44c1c/python_calamine-0.5.3-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:89a9ba0a16e4335b676232ddbbea0fd09bfb94757ca6e4cf90ce1348aa843f3f", size = 880988, upload_time = "2025-09-08T05:40:37.264Z" }, + { url = "https://files.pythonhosted.org/packages/74/16/4984532280e4b2c81aa26ae57b37fc3eaeda414e46e2d9c6a9cfdb27cd56/python_calamine-0.5.3-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0928d0eb1cdea229464de280d0f7cd99314ba28cffd2c4d6c9ce6902f9d6d448", size = 1035685, upload_time = "2025-09-08T05:40:38.992Z" }, + { url = "https://files.pythonhosted.org/packages/cd/dc/91776b34ab09f36ea41449951148bef731f9b355a2d2b25d398eec774926/python_calamine-0.5.3-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c7f9519dd3b8814ef6e801b9797f918fe7a59937fac4784cb280c8350fb1a2cf", size = 933865, upload_time = "2025-09-08T05:40:41.089Z" }, + { url = "https://files.pythonhosted.org/packages/01/97/12deaff5e608207398a9f0eaa06447ed69e8c4873ee953be553f9440881a/python_calamine-0.5.3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:954cd764c6b24735c749a447523b4ccf4b9d2b7c231ddd304ed42c15afca9516", size = 902310, upload_time = "2025-09-08T05:40:43.222Z" }, + { url = "https://files.pythonhosted.org/packages/45/da/45063eee203f6c9d9436d29dfc0f01db85c9264c86d1e438c3b452d7e97f/python_calamine-0.5.3-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b3f0e9c59fece6bbf1a916947fba33e9b635327eb165784d05efed40027164d1", size = 948143, upload_time = "2025-09-08T05:40:44.874Z" }, + { url = "https://files.pythonhosted.org/packages/33/07/0b661166dd58367bd5d6cc2bf8441f61004dd5ef2555ab224da97b1ac5d3/python_calamine-0.5.3-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:63bb47cc080d8eb9bc654f0961ada385b58a57d4628b0a33d1003c8f62e6ae3d", size = 1067181, upload_time = "2025-09-08T05:40:46.598Z" }, + { url = "https://files.pythonhosted.org/packages/5d/80/58b107dc2c2e6bad581f58f54b3ccb07705094ff23734c8dd30bd8aef4e8/python_calamine-0.5.3-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:adb62aab9b9298b2fc378b2aec6dd5802f7ee199c3431abae29368ef046f8005", size = 1072683, upload_time = "2025-09-08T05:40:48.629Z" }, + { url = "https://files.pythonhosted.org/packages/4c/b4/667e40dbe7d4f19a2e69f9cd186e069cd3af0411a177aa2a90231e3e0b06/python_calamine-0.5.3-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:1de68d2586df7a7a05a7779031dabd4c3d95d4738314ba82e943c8d3f36b5a67", size = 843526, upload_time = "2025-09-08T05:40:50.334Z" }, + { url = "https://files.pythonhosted.org/packages/3e/f7/fb86da5920198a616583f07d1a395cb1241eafb930d5c33f597ae6664711/python_calamine-0.5.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2c70033bbd59f05491743befec5e2a90784f4c8220e7379ce03e956bd1f475be", size = 811074, upload_time = "2025-09-08T05:40:52.168Z" }, + { url = "https://files.pythonhosted.org/packages/76/2e/5a5a618b351b75155fbb40ad88e166f17ccf202401dd4b830db05b2565a6/python_calamine-0.5.3-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f396a0e57b1a5462668fc247377714b5b4c061718c1863c00ddc64e770b0f1e", size = 887735, upload_time = "2025-09-08T05:40:53.86Z" }, + { url = "https://files.pythonhosted.org/packages/97/cf/3cfaa550eb1c9c5501728886c5e787c3ddeb34d8bf3e7e9fcaf9fc6fbd86/python_calamine-0.5.3-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ce737cb19d3077cabe0acaecd6b55d5df75021a520c20b47e0c75b65b4bfa919", size = 882356, upload_time = "2025-09-08T05:40:55.624Z" }, + { url = "https://files.pythonhosted.org/packages/88/b8/97f56e337149d0ce53399be9bd583f735dc1ea9abb2745ac902a09e8c401/python_calamine-0.5.3-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e54b30802fe089cc0c67c67407203412ec7144e84e0960e69c529c7170c37dae", size = 1033195, upload_time = "2025-09-08T05:40:57.819Z" }, + { url = "https://files.pythonhosted.org/packages/94/45/59a21a18c8e073d2f930a4a9c0c038207b82c5c996b67146fb76f3da2748/python_calamine-0.5.3-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5efc94c2e4119dc0da1e84d036f7e840fb0dd0850f4c10d3d166d725af0751af", size = 931846, upload_time = "2025-09-08T05:40:59.93Z" }, + { url = "https://files.pythonhosted.org/packages/36/47/715e0c0bc37ccce035ef4be1aa8eafa1e5abb6687af725cb47d81a18def7/python_calamine-0.5.3-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:74e33191a01d52f66dd6b029e99b6eda0245771c4f116c87ff0d5edf922dbbca", size = 902871, upload_time = "2025-09-08T05:41:02.021Z" }, + { url = "https://files.pythonhosted.org/packages/ca/07/ac0cf8623765106794e297235d6dde3a728f18e61a536792189fca06f2ba/python_calamine-0.5.3-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:85ceec02cb367cf87a72ba559db3279f3b4774edba9330eb77670587d4de95f4", size = 944438, upload_time = "2025-09-08T05:41:03.748Z" }, + { url = "https://files.pythonhosted.org/packages/88/98/c48c0b8be7fbae5f68b7c55a1ed4068d2c3dab64093e39733d43c23a7459/python_calamine-0.5.3-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:882400368f976ea489e47af04fde936b603c3efcf9ade1cd73e623c88fc4aa5c", size = 1066276, upload_time = "2025-09-08T05:41:05.408Z" }, + { url = "https://files.pythonhosted.org/packages/73/3a/bbf99531fec43bca2ab28948ab94d851db96c0364c76139dd746cab2f4f9/python_calamine-0.5.3-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:ce2fe421d5564e5341f7a06b9c52b84603b48aa670426d44fffce705609a859b", size = 1073059, upload_time = "2025-09-08T05:41:07.75Z" }, ] [[package]] @@ -2399,9 +2444,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "six" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432 } +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload_time = "2024-03-01T18:36:20.211Z" } 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 }, + { 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]] @@ -2411,16 +2456,16 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "charset-normalizer" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/bf/4b/3c4cf635311b6203f17c2d693dc15e898969983dd3f729bee3c428aa60d4/python-debian-1.0.1.tar.gz", hash = "sha256:3ada9b83a3d671b58081782c0969cffa0102f6ce433fbbc7cf21275b8b5cc771", size = 127249 } +sdist = { url = "https://files.pythonhosted.org/packages/bf/4b/3c4cf635311b6203f17c2d693dc15e898969983dd3f729bee3c428aa60d4/python-debian-1.0.1.tar.gz", hash = "sha256:3ada9b83a3d671b58081782c0969cffa0102f6ce433fbbc7cf21275b8b5cc771", size = 127249, upload_time = "2025-03-11T12:27:27.245Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ba/15/e8096189b18dda72e4923622abc10b021ecff723b397e22eff29fb86637b/python_debian-1.0.1-py3-none-any.whl", hash = "sha256:8f137c230c1d9279c2ac892b35915068b2aca090c9fd3da5671ff87af32af12c", size = 137453 }, + { url = "https://files.pythonhosted.org/packages/ba/15/e8096189b18dda72e4923622abc10b021ecff723b397e22eff29fb86637b/python_debian-1.0.1-py3-none-any.whl", hash = "sha256:8f137c230c1d9279c2ac892b35915068b2aca090c9fd3da5671ff87af32af12c", size = 137453, upload_time = "2025-03-11T12:27:25.014Z" }, ] [[package]] name = "python-io-wrapper" version = "0.3.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d7/74/8dc5f7d0b7cc1a0ca9e5c320abf11adee2094998c93ae8c9c80d9a8323ff/python-io-wrapper-0.3.1.tar.gz", hash = "sha256:e3391787ff0d9870e739294c6392437915502153e695a017450aa46b6d091762", size = 3271 } +sdist = { url = "https://files.pythonhosted.org/packages/d7/74/8dc5f7d0b7cc1a0ca9e5c320abf11adee2094998c93ae8c9c80d9a8323ff/python-io-wrapper-0.3.1.tar.gz", hash = "sha256:e3391787ff0d9870e739294c6392437915502153e695a017450aa46b6d091762", size = 3271, upload_time = "2022-11-14T15:00:10.932Z" } [[package]] name = "python-slugify" @@ -2429,18 +2474,18 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "text-unidecode" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/87/c7/5e1547c44e31da50a460df93af11a535ace568ef89d7a811069ead340c4a/python-slugify-8.0.4.tar.gz", hash = "sha256:59202371d1d05b54a9e7720c5e038f928f45daaffe41dd10822f3907b937c856", size = 10921 } +sdist = { url = "https://files.pythonhosted.org/packages/87/c7/5e1547c44e31da50a460df93af11a535ace568ef89d7a811069ead340c4a/python-slugify-8.0.4.tar.gz", hash = "sha256:59202371d1d05b54a9e7720c5e038f928f45daaffe41dd10822f3907b937c856", size = 10921, upload_time = "2024-02-08T18:32:45.488Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a4/62/02da182e544a51a5c3ccf4b03ab79df279f9c60c5e82d5e8bec7ca26ac11/python_slugify-8.0.4-py2.py3-none-any.whl", hash = "sha256:276540b79961052b66b7d116620b36518847f52d5fd9e3a70164fc8c50faa6b8", size = 10051 }, + { url = "https://files.pythonhosted.org/packages/a4/62/02da182e544a51a5c3ccf4b03ab79df279f9c60c5e82d5e8bec7ca26ac11/python_slugify-8.0.4-py2.py3-none-any.whl", hash = "sha256:276540b79961052b66b7d116620b36518847f52d5fd9e3a70164fc8c50faa6b8", size = 10051, upload_time = "2024-02-08T18:32:43.911Z" }, ] [[package]] name = "pytz" version = "2025.2" 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 } +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" } wheels = [ - { url = "https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00", size = 509225 }, + { 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" }, ] [[package]] @@ -2448,41 +2493,41 @@ name = "pywin32" version = "311" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/ab/01ea1943d4eba0f850c3c61e78e8dd59757ff815ff3ccd0a84de5f541f42/pywin32-311-cp312-cp312-win32.whl", hash = "sha256:750ec6e621af2b948540032557b10a2d43b0cee2ae9758c54154d711cc852d31", size = 8706543 }, - { url = "https://files.pythonhosted.org/packages/d1/a8/a0e8d07d4d051ec7502cd58b291ec98dcc0c3fff027caad0470b72cfcc2f/pywin32-311-cp312-cp312-win_amd64.whl", hash = "sha256:b8c095edad5c211ff31c05223658e71bf7116daa0ecf3ad85f3201ea3190d067", size = 9495040 }, - { url = "https://files.pythonhosted.org/packages/ba/3a/2ae996277b4b50f17d61f0603efd8253cb2d79cc7ae159468007b586396d/pywin32-311-cp312-cp312-win_arm64.whl", hash = "sha256:e286f46a9a39c4a18b319c28f59b61de793654af2f395c102b4f819e584b5852", size = 8710102 }, - { url = "https://files.pythonhosted.org/packages/a5/be/3fd5de0979fcb3994bfee0d65ed8ca9506a8a1260651b86174f6a86f52b3/pywin32-311-cp313-cp313-win32.whl", hash = "sha256:f95ba5a847cba10dd8c4d8fefa9f2a6cf283b8b88ed6178fa8a6c1ab16054d0d", size = 8705700 }, - { url = "https://files.pythonhosted.org/packages/e3/28/e0a1909523c6890208295a29e05c2adb2126364e289826c0a8bc7297bd5c/pywin32-311-cp313-cp313-win_amd64.whl", hash = "sha256:718a38f7e5b058e76aee1c56ddd06908116d35147e133427e59a3983f703a20d", size = 9494700 }, - { url = "https://files.pythonhosted.org/packages/04/bf/90339ac0f55726dce7d794e6d79a18a91265bdf3aa70b6b9ca52f35e022a/pywin32-311-cp313-cp313-win_arm64.whl", hash = "sha256:7b4075d959648406202d92a2310cb990fea19b535c7f4a78d3f5e10b926eeb8a", size = 8709318 }, - { url = "https://files.pythonhosted.org/packages/c9/31/097f2e132c4f16d99a22bfb777e0fd88bd8e1c634304e102f313af69ace5/pywin32-311-cp314-cp314-win32.whl", hash = "sha256:b7a2c10b93f8986666d0c803ee19b5990885872a7de910fc460f9b0c2fbf92ee", size = 8840714 }, - { url = "https://files.pythonhosted.org/packages/90/4b/07c77d8ba0e01349358082713400435347df8426208171ce297da32c313d/pywin32-311-cp314-cp314-win_amd64.whl", hash = "sha256:3aca44c046bd2ed8c90de9cb8427f581c479e594e99b5c0bb19b29c10fd6cb87", size = 9656800 }, - { url = "https://files.pythonhosted.org/packages/c0/d2/21af5c535501a7233e734b8af901574572da66fcc254cb35d0609c9080dd/pywin32-311-cp314-cp314-win_arm64.whl", hash = "sha256:a508e2d9025764a8270f93111a970e1d0fbfc33f4153b388bb649b7eec4f9b42", size = 8932540 }, + { url = "https://files.pythonhosted.org/packages/e7/ab/01ea1943d4eba0f850c3c61e78e8dd59757ff815ff3ccd0a84de5f541f42/pywin32-311-cp312-cp312-win32.whl", hash = "sha256:750ec6e621af2b948540032557b10a2d43b0cee2ae9758c54154d711cc852d31", size = 8706543, upload_time = "2025-07-14T20:13:20.765Z" }, + { url = "https://files.pythonhosted.org/packages/d1/a8/a0e8d07d4d051ec7502cd58b291ec98dcc0c3fff027caad0470b72cfcc2f/pywin32-311-cp312-cp312-win_amd64.whl", hash = "sha256:b8c095edad5c211ff31c05223658e71bf7116daa0ecf3ad85f3201ea3190d067", size = 9495040, upload_time = "2025-07-14T20:13:22.543Z" }, + { url = "https://files.pythonhosted.org/packages/ba/3a/2ae996277b4b50f17d61f0603efd8253cb2d79cc7ae159468007b586396d/pywin32-311-cp312-cp312-win_arm64.whl", hash = "sha256:e286f46a9a39c4a18b319c28f59b61de793654af2f395c102b4f819e584b5852", size = 8710102, upload_time = "2025-07-14T20:13:24.682Z" }, + { url = "https://files.pythonhosted.org/packages/a5/be/3fd5de0979fcb3994bfee0d65ed8ca9506a8a1260651b86174f6a86f52b3/pywin32-311-cp313-cp313-win32.whl", hash = "sha256:f95ba5a847cba10dd8c4d8fefa9f2a6cf283b8b88ed6178fa8a6c1ab16054d0d", size = 8705700, upload_time = "2025-07-14T20:13:26.471Z" }, + { url = "https://files.pythonhosted.org/packages/e3/28/e0a1909523c6890208295a29e05c2adb2126364e289826c0a8bc7297bd5c/pywin32-311-cp313-cp313-win_amd64.whl", hash = "sha256:718a38f7e5b058e76aee1c56ddd06908116d35147e133427e59a3983f703a20d", size = 9494700, upload_time = "2025-07-14T20:13:28.243Z" }, + { url = "https://files.pythonhosted.org/packages/04/bf/90339ac0f55726dce7d794e6d79a18a91265bdf3aa70b6b9ca52f35e022a/pywin32-311-cp313-cp313-win_arm64.whl", hash = "sha256:7b4075d959648406202d92a2310cb990fea19b535c7f4a78d3f5e10b926eeb8a", size = 8709318, upload_time = "2025-07-14T20:13:30.348Z" }, + { url = "https://files.pythonhosted.org/packages/c9/31/097f2e132c4f16d99a22bfb777e0fd88bd8e1c634304e102f313af69ace5/pywin32-311-cp314-cp314-win32.whl", hash = "sha256:b7a2c10b93f8986666d0c803ee19b5990885872a7de910fc460f9b0c2fbf92ee", size = 8840714, upload_time = "2025-07-14T20:13:32.449Z" }, + { url = "https://files.pythonhosted.org/packages/90/4b/07c77d8ba0e01349358082713400435347df8426208171ce297da32c313d/pywin32-311-cp314-cp314-win_amd64.whl", hash = "sha256:3aca44c046bd2ed8c90de9cb8427f581c479e594e99b5c0bb19b29c10fd6cb87", size = 9656800, upload_time = "2025-07-14T20:13:34.312Z" }, + { url = "https://files.pythonhosted.org/packages/c0/d2/21af5c535501a7233e734b8af901574572da66fcc254cb35d0609c9080dd/pywin32-311-cp314-cp314-win_arm64.whl", hash = "sha256:a508e2d9025764a8270f93111a970e1d0fbfc33f4153b388bb649b7eec4f9b42", size = 8932540, upload_time = "2025-07-14T20:13:36.379Z" }, ] [[package]] name = "pyyaml" version = "6.0.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/86/0c/c581167fc46d6d6d7ddcfb8c843a4de25bdd27e4466938109ca68492292c/PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", size = 183873 }, - { url = "https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", size = 173302 }, - { url = "https://files.pythonhosted.org/packages/c3/93/9916574aa8c00aa06bbac729972eb1071d002b8e158bd0e83a3b9a20a1f7/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", size = 739154 }, - { url = "https://files.pythonhosted.org/packages/95/0f/b8938f1cbd09739c6da569d172531567dbcc9789e0029aa070856f123984/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", size = 766223 }, - { url = "https://files.pythonhosted.org/packages/b9/2b/614b4752f2e127db5cc206abc23a8c19678e92b23c3db30fc86ab731d3bd/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", size = 767542 }, - { url = "https://files.pythonhosted.org/packages/d4/00/dd137d5bcc7efea1836d6264f049359861cf548469d18da90cd8216cf05f/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", size = 731164 }, - { url = "https://files.pythonhosted.org/packages/c9/1f/4f998c900485e5c0ef43838363ba4a9723ac0ad73a9dc42068b12aaba4e4/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", size = 756611 }, - { url = "https://files.pythonhosted.org/packages/df/d1/f5a275fdb252768b7a11ec63585bc38d0e87c9e05668a139fea92b80634c/PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", size = 140591 }, - { url = "https://files.pythonhosted.org/packages/0c/e8/4f648c598b17c3d06e8753d7d13d57542b30d56e6c2dedf9c331ae56312e/PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", size = 156338 }, - { url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309 }, - { url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679 }, - { url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428 }, - { url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361 }, - { url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523 }, - { url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660 }, - { url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597 }, - { url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527 }, - { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446 }, +sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631, upload_time = "2024-08-06T20:33:50.674Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/86/0c/c581167fc46d6d6d7ddcfb8c843a4de25bdd27e4466938109ca68492292c/PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", size = 183873, upload_time = "2024-08-06T20:32:25.131Z" }, + { url = "https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", size = 173302, upload_time = "2024-08-06T20:32:26.511Z" }, + { url = "https://files.pythonhosted.org/packages/c3/93/9916574aa8c00aa06bbac729972eb1071d002b8e158bd0e83a3b9a20a1f7/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", size = 739154, upload_time = "2024-08-06T20:32:28.363Z" }, + { url = "https://files.pythonhosted.org/packages/95/0f/b8938f1cbd09739c6da569d172531567dbcc9789e0029aa070856f123984/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", size = 766223, upload_time = "2024-08-06T20:32:30.058Z" }, + { url = "https://files.pythonhosted.org/packages/b9/2b/614b4752f2e127db5cc206abc23a8c19678e92b23c3db30fc86ab731d3bd/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", size = 767542, upload_time = "2024-08-06T20:32:31.881Z" }, + { url = "https://files.pythonhosted.org/packages/d4/00/dd137d5bcc7efea1836d6264f049359861cf548469d18da90cd8216cf05f/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", size = 731164, upload_time = "2024-08-06T20:32:37.083Z" }, + { url = "https://files.pythonhosted.org/packages/c9/1f/4f998c900485e5c0ef43838363ba4a9723ac0ad73a9dc42068b12aaba4e4/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", size = 756611, upload_time = "2024-08-06T20:32:38.898Z" }, + { url = "https://files.pythonhosted.org/packages/df/d1/f5a275fdb252768b7a11ec63585bc38d0e87c9e05668a139fea92b80634c/PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", size = 140591, upload_time = "2024-08-06T20:32:40.241Z" }, + { url = "https://files.pythonhosted.org/packages/0c/e8/4f648c598b17c3d06e8753d7d13d57542b30d56e6c2dedf9c331ae56312e/PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", size = 156338, upload_time = "2024-08-06T20:32:41.93Z" }, + { url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309, upload_time = "2024-08-06T20:32:43.4Z" }, + { url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679, upload_time = "2024-08-06T20:32:44.801Z" }, + { url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428, upload_time = "2024-08-06T20:32:46.432Z" }, + { url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361, upload_time = "2024-08-06T20:32:51.188Z" }, + { url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523, upload_time = "2024-08-06T20:32:53.019Z" }, + { url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660, upload_time = "2024-08-06T20:32:54.708Z" }, + { url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597, upload_time = "2024-08-06T20:32:56.985Z" }, + { url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527, upload_time = "2024-08-06T20:33:03.001Z" }, + { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446, upload_time = "2024-08-06T20:33:04.33Z" }, ] [[package]] @@ -2492,9 +2537,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pyyaml" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/eb/2e/79c822141bfd05a853236b504869ebc6b70159afc570e1d5a20641782eaa/pyyaml_env_tag-1.1.tar.gz", hash = "sha256:2eb38b75a2d21ee0475d6d97ec19c63287a7e140231e4214969d0eac923cd7ff", size = 5737 } +sdist = { url = "https://files.pythonhosted.org/packages/eb/2e/79c822141bfd05a853236b504869ebc6b70159afc570e1d5a20641782eaa/pyyaml_env_tag-1.1.tar.gz", hash = "sha256:2eb38b75a2d21ee0475d6d97ec19c63287a7e140231e4214969d0eac923cd7ff", size = 5737, upload_time = "2025-05-13T15:24:01.64Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl", hash = "sha256:17109e1a528561e32f026364712fee1264bc2ea6715120891174ed1b980d2e04", size = 4722 }, + { url = "https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl", hash = "sha256:17109e1a528561e32f026364712fee1264bc2ea6715120891174ed1b980d2e04", size = 4722, upload_time = "2025-05-13T15:23:59.629Z" }, ] [[package]] @@ -2504,47 +2549,47 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cffi", marker = "implementation_name == 'pypy'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/04/0b/3c9baedbdf613ecaa7aa07027780b8867f57b6293b6ee50de316c9f3222b/pyzmq-27.1.0.tar.gz", hash = "sha256:ac0765e3d44455adb6ddbf4417dcce460fc40a05978c08efdf2948072f6db540", size = 281750 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/92/e7/038aab64a946d535901103da16b953c8c9cc9c961dadcbf3609ed6428d23/pyzmq-27.1.0-cp312-abi3-macosx_10_15_universal2.whl", hash = "sha256:452631b640340c928fa343801b0d07eb0c3789a5ffa843f6e1a9cee0ba4eb4fc", size = 1306279 }, - { url = "https://files.pythonhosted.org/packages/e8/5e/c3c49fdd0f535ef45eefcc16934648e9e59dace4a37ee88fc53f6cd8e641/pyzmq-27.1.0-cp312-abi3-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1c179799b118e554b66da67d88ed66cd37a169f1f23b5d9f0a231b4e8d44a113", size = 895645 }, - { url = "https://files.pythonhosted.org/packages/f8/e5/b0b2504cb4e903a74dcf1ebae157f9e20ebb6ea76095f6cfffea28c42ecd/pyzmq-27.1.0-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3837439b7f99e60312f0c926a6ad437b067356dc2bc2ec96eb395fd0fe804233", size = 652574 }, - { url = "https://files.pythonhosted.org/packages/f8/9b/c108cdb55560eaf253f0cbdb61b29971e9fb34d9c3499b0e96e4e60ed8a5/pyzmq-27.1.0-cp312-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:43ad9a73e3da1fab5b0e7e13402f0b2fb934ae1c876c51d0afff0e7c052eca31", size = 840995 }, - { url = "https://files.pythonhosted.org/packages/c2/bb/b79798ca177b9eb0825b4c9998c6af8cd2a7f15a6a1a4272c1d1a21d382f/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:0de3028d69d4cdc475bfe47a6128eb38d8bc0e8f4d69646adfbcd840facbac28", size = 1642070 }, - { url = "https://files.pythonhosted.org/packages/9c/80/2df2e7977c4ede24c79ae39dcef3899bfc5f34d1ca7a5b24f182c9b7a9ca/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_i686.whl", hash = "sha256:cf44a7763aea9298c0aa7dbf859f87ed7012de8bda0f3977b6fb1d96745df856", size = 2021121 }, - { url = "https://files.pythonhosted.org/packages/46/bd/2d45ad24f5f5ae7e8d01525eb76786fa7557136555cac7d929880519e33a/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:f30f395a9e6fbca195400ce833c731e7b64c3919aa481af4d88c3759e0cb7496", size = 1878550 }, - { url = "https://files.pythonhosted.org/packages/e6/2f/104c0a3c778d7c2ab8190e9db4f62f0b6957b53c9d87db77c284b69f33ea/pyzmq-27.1.0-cp312-abi3-win32.whl", hash = "sha256:250e5436a4ba13885494412b3da5d518cd0d3a278a1ae640e113c073a5f88edd", size = 559184 }, - { url = "https://files.pythonhosted.org/packages/fc/7f/a21b20d577e4100c6a41795842028235998a643b1ad406a6d4163ea8f53e/pyzmq-27.1.0-cp312-abi3-win_amd64.whl", hash = "sha256:9ce490cf1d2ca2ad84733aa1d69ce6855372cb5ce9223802450c9b2a7cba0ccf", size = 619480 }, - { url = "https://files.pythonhosted.org/packages/78/c2/c012beae5f76b72f007a9e91ee9401cb88c51d0f83c6257a03e785c81cc2/pyzmq-27.1.0-cp312-abi3-win_arm64.whl", hash = "sha256:75a2f36223f0d535a0c919e23615fc85a1e23b71f40c7eb43d7b1dedb4d8f15f", size = 552993 }, - { url = "https://files.pythonhosted.org/packages/60/cb/84a13459c51da6cec1b7b1dc1a47e6db6da50b77ad7fd9c145842750a011/pyzmq-27.1.0-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:93ad4b0855a664229559e45c8d23797ceac03183c7b6f5b4428152a6b06684a5", size = 1122436 }, - { url = "https://files.pythonhosted.org/packages/dc/b6/94414759a69a26c3dd674570a81813c46a078767d931a6c70ad29fc585cb/pyzmq-27.1.0-cp313-cp313-android_24_x86_64.whl", hash = "sha256:fbb4f2400bfda24f12f009cba62ad5734148569ff4949b1b6ec3b519444342e6", size = 1156301 }, - { url = "https://files.pythonhosted.org/packages/a5/ad/15906493fd40c316377fd8a8f6b1f93104f97a752667763c9b9c1b71d42d/pyzmq-27.1.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:e343d067f7b151cfe4eb3bb796a7752c9d369eed007b91231e817071d2c2fec7", size = 1341197 }, - { url = "https://files.pythonhosted.org/packages/14/1d/d343f3ce13db53a54cb8946594e567410b2125394dafcc0268d8dda027e0/pyzmq-27.1.0-cp313-cp313t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:08363b2011dec81c354d694bdecaef4770e0ae96b9afea70b3f47b973655cc05", size = 897275 }, - { url = "https://files.pythonhosted.org/packages/69/2d/d83dd6d7ca929a2fc67d2c3005415cdf322af7751d773524809f9e585129/pyzmq-27.1.0-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d54530c8c8b5b8ddb3318f481297441af102517602b569146185fa10b63f4fa9", size = 660469 }, - { url = "https://files.pythonhosted.org/packages/3e/cd/9822a7af117f4bc0f1952dbe9ef8358eb50a24928efd5edf54210b850259/pyzmq-27.1.0-cp313-cp313t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6f3afa12c392f0a44a2414056d730eebc33ec0926aae92b5ad5cf26ebb6cc128", size = 847961 }, - { url = "https://files.pythonhosted.org/packages/9a/12/f003e824a19ed73be15542f172fd0ec4ad0b60cf37436652c93b9df7c585/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c65047adafe573ff023b3187bb93faa583151627bc9c51fc4fb2c561ed689d39", size = 1650282 }, - { url = "https://files.pythonhosted.org/packages/d5/4a/e82d788ed58e9a23995cee70dbc20c9aded3d13a92d30d57ec2291f1e8a3/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:90e6e9441c946a8b0a667356f7078d96411391a3b8f80980315455574177ec97", size = 2024468 }, - { url = "https://files.pythonhosted.org/packages/d9/94/2da0a60841f757481e402b34bf4c8bf57fa54a5466b965de791b1e6f747d/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:add071b2d25f84e8189aaf0882d39a285b42fa3853016ebab234a5e78c7a43db", size = 1885394 }, - { url = "https://files.pythonhosted.org/packages/4f/6f/55c10e2e49ad52d080dc24e37adb215e5b0d64990b57598abc2e3f01725b/pyzmq-27.1.0-cp313-cp313t-win32.whl", hash = "sha256:7ccc0700cfdf7bd487bea8d850ec38f204478681ea02a582a8da8171b7f90a1c", size = 574964 }, - { url = "https://files.pythonhosted.org/packages/87/4d/2534970ba63dd7c522d8ca80fb92777f362c0f321900667c615e2067cb29/pyzmq-27.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:8085a9fba668216b9b4323be338ee5437a235fe275b9d1610e422ccc279733e2", size = 641029 }, - { url = "https://files.pythonhosted.org/packages/f6/fa/f8aea7a28b0641f31d40dea42d7ef003fded31e184ef47db696bc74cd610/pyzmq-27.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:6bb54ca21bcfe361e445256c15eedf083f153811c37be87e0514934d6913061e", size = 561541 }, - { url = "https://files.pythonhosted.org/packages/87/45/19efbb3000956e82d0331bafca5d9ac19ea2857722fa2caacefb6042f39d/pyzmq-27.1.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:ce980af330231615756acd5154f29813d553ea555485ae712c491cd483df6b7a", size = 1341197 }, - { url = "https://files.pythonhosted.org/packages/48/43/d72ccdbf0d73d1343936296665826350cb1e825f92f2db9db3e61c2162a2/pyzmq-27.1.0-cp314-cp314t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1779be8c549e54a1c38f805e56d2a2e5c009d26de10921d7d51cfd1c8d4632ea", size = 897175 }, - { url = "https://files.pythonhosted.org/packages/2f/2e/a483f73a10b65a9ef0161e817321d39a770b2acf8bcf3004a28d90d14a94/pyzmq-27.1.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7200bb0f03345515df50d99d3db206a0a6bee1955fbb8c453c76f5bf0e08fb96", size = 660427 }, - { url = "https://files.pythonhosted.org/packages/f5/d2/5f36552c2d3e5685abe60dfa56f91169f7a2d99bbaf67c5271022ab40863/pyzmq-27.1.0-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01c0e07d558b06a60773744ea6251f769cd79a41a97d11b8bf4ab8f034b0424d", size = 847929 }, - { url = "https://files.pythonhosted.org/packages/c4/2a/404b331f2b7bf3198e9945f75c4c521f0c6a3a23b51f7a4a401b94a13833/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:80d834abee71f65253c91540445d37c4c561e293ba6e741b992f20a105d69146", size = 1650193 }, - { url = "https://files.pythonhosted.org/packages/1c/0b/f4107e33f62a5acf60e3ded67ed33d79b4ce18de432625ce2fc5093d6388/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:544b4e3b7198dde4a62b8ff6685e9802a9a1ebf47e77478a5eb88eca2a82f2fd", size = 2024388 }, - { url = "https://files.pythonhosted.org/packages/0d/01/add31fe76512642fd6e40e3a3bd21f4b47e242c8ba33efb6809e37076d9b/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cedc4c68178e59a4046f97eca31b148ddcf51e88677de1ef4e78cf06c5376c9a", size = 1885316 }, - { url = "https://files.pythonhosted.org/packages/c4/59/a5f38970f9bf07cee96128de79590bb354917914a9be11272cfc7ff26af0/pyzmq-27.1.0-cp314-cp314t-win32.whl", hash = "sha256:1f0b2a577fd770aa6f053211a55d1c47901f4d537389a034c690291485e5fe92", size = 587472 }, - { url = "https://files.pythonhosted.org/packages/70/d8/78b1bad170f93fcf5e3536e70e8fadac55030002275c9a29e8f5719185de/pyzmq-27.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:19c9468ae0437f8074af379e986c5d3d7d7bfe033506af442e8c879732bedbe0", size = 661401 }, - { url = "https://files.pythonhosted.org/packages/81/d6/4bfbb40c9a0b42fc53c7cf442f6385db70b40f74a783130c5d0a5aa62228/pyzmq-27.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:dc5dbf68a7857b59473f7df42650c621d7e8923fb03fa74a526890f4d33cc4d7", size = 575170 }, +sdist = { url = "https://files.pythonhosted.org/packages/04/0b/3c9baedbdf613ecaa7aa07027780b8867f57b6293b6ee50de316c9f3222b/pyzmq-27.1.0.tar.gz", hash = "sha256:ac0765e3d44455adb6ddbf4417dcce460fc40a05978c08efdf2948072f6db540", size = 281750, upload_time = "2025-09-08T23:10:18.157Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/92/e7/038aab64a946d535901103da16b953c8c9cc9c961dadcbf3609ed6428d23/pyzmq-27.1.0-cp312-abi3-macosx_10_15_universal2.whl", hash = "sha256:452631b640340c928fa343801b0d07eb0c3789a5ffa843f6e1a9cee0ba4eb4fc", size = 1306279, upload_time = "2025-09-08T23:08:03.807Z" }, + { url = "https://files.pythonhosted.org/packages/e8/5e/c3c49fdd0f535ef45eefcc16934648e9e59dace4a37ee88fc53f6cd8e641/pyzmq-27.1.0-cp312-abi3-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1c179799b118e554b66da67d88ed66cd37a169f1f23b5d9f0a231b4e8d44a113", size = 895645, upload_time = "2025-09-08T23:08:05.301Z" }, + { url = "https://files.pythonhosted.org/packages/f8/e5/b0b2504cb4e903a74dcf1ebae157f9e20ebb6ea76095f6cfffea28c42ecd/pyzmq-27.1.0-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3837439b7f99e60312f0c926a6ad437b067356dc2bc2ec96eb395fd0fe804233", size = 652574, upload_time = "2025-09-08T23:08:06.828Z" }, + { url = "https://files.pythonhosted.org/packages/f8/9b/c108cdb55560eaf253f0cbdb61b29971e9fb34d9c3499b0e96e4e60ed8a5/pyzmq-27.1.0-cp312-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:43ad9a73e3da1fab5b0e7e13402f0b2fb934ae1c876c51d0afff0e7c052eca31", size = 840995, upload_time = "2025-09-08T23:08:08.396Z" }, + { url = "https://files.pythonhosted.org/packages/c2/bb/b79798ca177b9eb0825b4c9998c6af8cd2a7f15a6a1a4272c1d1a21d382f/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:0de3028d69d4cdc475bfe47a6128eb38d8bc0e8f4d69646adfbcd840facbac28", size = 1642070, upload_time = "2025-09-08T23:08:09.989Z" }, + { url = "https://files.pythonhosted.org/packages/9c/80/2df2e7977c4ede24c79ae39dcef3899bfc5f34d1ca7a5b24f182c9b7a9ca/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_i686.whl", hash = "sha256:cf44a7763aea9298c0aa7dbf859f87ed7012de8bda0f3977b6fb1d96745df856", size = 2021121, upload_time = "2025-09-08T23:08:11.907Z" }, + { url = "https://files.pythonhosted.org/packages/46/bd/2d45ad24f5f5ae7e8d01525eb76786fa7557136555cac7d929880519e33a/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:f30f395a9e6fbca195400ce833c731e7b64c3919aa481af4d88c3759e0cb7496", size = 1878550, upload_time = "2025-09-08T23:08:13.513Z" }, + { url = "https://files.pythonhosted.org/packages/e6/2f/104c0a3c778d7c2ab8190e9db4f62f0b6957b53c9d87db77c284b69f33ea/pyzmq-27.1.0-cp312-abi3-win32.whl", hash = "sha256:250e5436a4ba13885494412b3da5d518cd0d3a278a1ae640e113c073a5f88edd", size = 559184, upload_time = "2025-09-08T23:08:15.163Z" }, + { url = "https://files.pythonhosted.org/packages/fc/7f/a21b20d577e4100c6a41795842028235998a643b1ad406a6d4163ea8f53e/pyzmq-27.1.0-cp312-abi3-win_amd64.whl", hash = "sha256:9ce490cf1d2ca2ad84733aa1d69ce6855372cb5ce9223802450c9b2a7cba0ccf", size = 619480, upload_time = "2025-09-08T23:08:17.192Z" }, + { url = "https://files.pythonhosted.org/packages/78/c2/c012beae5f76b72f007a9e91ee9401cb88c51d0f83c6257a03e785c81cc2/pyzmq-27.1.0-cp312-abi3-win_arm64.whl", hash = "sha256:75a2f36223f0d535a0c919e23615fc85a1e23b71f40c7eb43d7b1dedb4d8f15f", size = 552993, upload_time = "2025-09-08T23:08:18.926Z" }, + { url = "https://files.pythonhosted.org/packages/60/cb/84a13459c51da6cec1b7b1dc1a47e6db6da50b77ad7fd9c145842750a011/pyzmq-27.1.0-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:93ad4b0855a664229559e45c8d23797ceac03183c7b6f5b4428152a6b06684a5", size = 1122436, upload_time = "2025-09-08T23:08:20.801Z" }, + { url = "https://files.pythonhosted.org/packages/dc/b6/94414759a69a26c3dd674570a81813c46a078767d931a6c70ad29fc585cb/pyzmq-27.1.0-cp313-cp313-android_24_x86_64.whl", hash = "sha256:fbb4f2400bfda24f12f009cba62ad5734148569ff4949b1b6ec3b519444342e6", size = 1156301, upload_time = "2025-09-08T23:08:22.47Z" }, + { url = "https://files.pythonhosted.org/packages/a5/ad/15906493fd40c316377fd8a8f6b1f93104f97a752667763c9b9c1b71d42d/pyzmq-27.1.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:e343d067f7b151cfe4eb3bb796a7752c9d369eed007b91231e817071d2c2fec7", size = 1341197, upload_time = "2025-09-08T23:08:24.286Z" }, + { url = "https://files.pythonhosted.org/packages/14/1d/d343f3ce13db53a54cb8946594e567410b2125394dafcc0268d8dda027e0/pyzmq-27.1.0-cp313-cp313t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:08363b2011dec81c354d694bdecaef4770e0ae96b9afea70b3f47b973655cc05", size = 897275, upload_time = "2025-09-08T23:08:26.063Z" }, + { url = "https://files.pythonhosted.org/packages/69/2d/d83dd6d7ca929a2fc67d2c3005415cdf322af7751d773524809f9e585129/pyzmq-27.1.0-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d54530c8c8b5b8ddb3318f481297441af102517602b569146185fa10b63f4fa9", size = 660469, upload_time = "2025-09-08T23:08:27.623Z" }, + { url = "https://files.pythonhosted.org/packages/3e/cd/9822a7af117f4bc0f1952dbe9ef8358eb50a24928efd5edf54210b850259/pyzmq-27.1.0-cp313-cp313t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6f3afa12c392f0a44a2414056d730eebc33ec0926aae92b5ad5cf26ebb6cc128", size = 847961, upload_time = "2025-09-08T23:08:29.672Z" }, + { url = "https://files.pythonhosted.org/packages/9a/12/f003e824a19ed73be15542f172fd0ec4ad0b60cf37436652c93b9df7c585/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c65047adafe573ff023b3187bb93faa583151627bc9c51fc4fb2c561ed689d39", size = 1650282, upload_time = "2025-09-08T23:08:31.349Z" }, + { url = "https://files.pythonhosted.org/packages/d5/4a/e82d788ed58e9a23995cee70dbc20c9aded3d13a92d30d57ec2291f1e8a3/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:90e6e9441c946a8b0a667356f7078d96411391a3b8f80980315455574177ec97", size = 2024468, upload_time = "2025-09-08T23:08:33.543Z" }, + { url = "https://files.pythonhosted.org/packages/d9/94/2da0a60841f757481e402b34bf4c8bf57fa54a5466b965de791b1e6f747d/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:add071b2d25f84e8189aaf0882d39a285b42fa3853016ebab234a5e78c7a43db", size = 1885394, upload_time = "2025-09-08T23:08:35.51Z" }, + { url = "https://files.pythonhosted.org/packages/4f/6f/55c10e2e49ad52d080dc24e37adb215e5b0d64990b57598abc2e3f01725b/pyzmq-27.1.0-cp313-cp313t-win32.whl", hash = "sha256:7ccc0700cfdf7bd487bea8d850ec38f204478681ea02a582a8da8171b7f90a1c", size = 574964, upload_time = "2025-09-08T23:08:37.178Z" }, + { url = "https://files.pythonhosted.org/packages/87/4d/2534970ba63dd7c522d8ca80fb92777f362c0f321900667c615e2067cb29/pyzmq-27.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:8085a9fba668216b9b4323be338ee5437a235fe275b9d1610e422ccc279733e2", size = 641029, upload_time = "2025-09-08T23:08:40.595Z" }, + { url = "https://files.pythonhosted.org/packages/f6/fa/f8aea7a28b0641f31d40dea42d7ef003fded31e184ef47db696bc74cd610/pyzmq-27.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:6bb54ca21bcfe361e445256c15eedf083f153811c37be87e0514934d6913061e", size = 561541, upload_time = "2025-09-08T23:08:42.668Z" }, + { url = "https://files.pythonhosted.org/packages/87/45/19efbb3000956e82d0331bafca5d9ac19ea2857722fa2caacefb6042f39d/pyzmq-27.1.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:ce980af330231615756acd5154f29813d553ea555485ae712c491cd483df6b7a", size = 1341197, upload_time = "2025-09-08T23:08:44.973Z" }, + { url = "https://files.pythonhosted.org/packages/48/43/d72ccdbf0d73d1343936296665826350cb1e825f92f2db9db3e61c2162a2/pyzmq-27.1.0-cp314-cp314t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1779be8c549e54a1c38f805e56d2a2e5c009d26de10921d7d51cfd1c8d4632ea", size = 897175, upload_time = "2025-09-08T23:08:46.601Z" }, + { url = "https://files.pythonhosted.org/packages/2f/2e/a483f73a10b65a9ef0161e817321d39a770b2acf8bcf3004a28d90d14a94/pyzmq-27.1.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7200bb0f03345515df50d99d3db206a0a6bee1955fbb8c453c76f5bf0e08fb96", size = 660427, upload_time = "2025-09-08T23:08:48.187Z" }, + { url = "https://files.pythonhosted.org/packages/f5/d2/5f36552c2d3e5685abe60dfa56f91169f7a2d99bbaf67c5271022ab40863/pyzmq-27.1.0-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01c0e07d558b06a60773744ea6251f769cd79a41a97d11b8bf4ab8f034b0424d", size = 847929, upload_time = "2025-09-08T23:08:49.76Z" }, + { url = "https://files.pythonhosted.org/packages/c4/2a/404b331f2b7bf3198e9945f75c4c521f0c6a3a23b51f7a4a401b94a13833/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:80d834abee71f65253c91540445d37c4c561e293ba6e741b992f20a105d69146", size = 1650193, upload_time = "2025-09-08T23:08:51.7Z" }, + { url = "https://files.pythonhosted.org/packages/1c/0b/f4107e33f62a5acf60e3ded67ed33d79b4ce18de432625ce2fc5093d6388/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:544b4e3b7198dde4a62b8ff6685e9802a9a1ebf47e77478a5eb88eca2a82f2fd", size = 2024388, upload_time = "2025-09-08T23:08:53.393Z" }, + { url = "https://files.pythonhosted.org/packages/0d/01/add31fe76512642fd6e40e3a3bd21f4b47e242c8ba33efb6809e37076d9b/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cedc4c68178e59a4046f97eca31b148ddcf51e88677de1ef4e78cf06c5376c9a", size = 1885316, upload_time = "2025-09-08T23:08:55.702Z" }, + { url = "https://files.pythonhosted.org/packages/c4/59/a5f38970f9bf07cee96128de79590bb354917914a9be11272cfc7ff26af0/pyzmq-27.1.0-cp314-cp314t-win32.whl", hash = "sha256:1f0b2a577fd770aa6f053211a55d1c47901f4d537389a034c690291485e5fe92", size = 587472, upload_time = "2025-09-08T23:08:58.18Z" }, + { url = "https://files.pythonhosted.org/packages/70/d8/78b1bad170f93fcf5e3536e70e8fadac55030002275c9a29e8f5719185de/pyzmq-27.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:19c9468ae0437f8074af379e986c5d3d7d7bfe033506af442e8c879732bedbe0", size = 661401, upload_time = "2025-09-08T23:08:59.802Z" }, + { url = "https://files.pythonhosted.org/packages/81/d6/4bfbb40c9a0b42fc53c7cf442f6385db70b40f74a783130c5d0a5aa62228/pyzmq-27.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:dc5dbf68a7857b59473f7df42650c621d7e8923fb03fa74a526890f4d33cc4d7", size = 575170, upload_time = "2025-09-08T23:09:01.418Z" }, ] [[package]] name = "ratelimit" version = "2.2.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ab/38/ff60c8fc9e002d50d48822cc5095deb8ebbc5f91a6b8fdd9731c87a147c9/ratelimit-2.2.1.tar.gz", hash = "sha256:af8a9b64b821529aca09ebaf6d8d279100d766f19e90b5059ac6a718ca6dee42", size = 5251 } +sdist = { url = "https://files.pythonhosted.org/packages/ab/38/ff60c8fc9e002d50d48822cc5095deb8ebbc5f91a6b8fdd9731c87a147c9/ratelimit-2.2.1.tar.gz", hash = "sha256:af8a9b64b821529aca09ebaf6d8d279100d766f19e90b5059ac6a718ca6dee42", size = 5251, upload_time = "2018-12-17T18:55:49.675Z" } [[package]] name = "referencing" @@ -2555,9 +2600,9 @@ dependencies = [ { name = "rpds-py" }, { name = "typing-extensions", marker = "python_full_version < '3.13'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/2f/db/98b5c277be99dd18bfd91dd04e1b759cad18d1a338188c936e92f921c7e2/referencing-0.36.2.tar.gz", hash = "sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa", size = 74744 } +sdist = { url = "https://files.pythonhosted.org/packages/2f/db/98b5c277be99dd18bfd91dd04e1b759cad18d1a338188c936e92f921c7e2/referencing-0.36.2.tar.gz", hash = "sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa", size = 74744, upload_time = "2025-01-25T08:48:16.138Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0", size = 26775 }, + { url = "https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0", size = 26775, upload_time = "2025-01-25T08:48:14.241Z" }, ] [[package]] @@ -2570,9 +2615,26 @@ dependencies = [ { name = "idna" }, { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c9/74/b3ff8e6c8446842c3f5c837e9c3dfcfe2018ea6ecef224c710c85ef728f4/requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf", size = 134517 } +sdist = { url = "https://files.pythonhosted.org/packages/c9/74/b3ff8e6c8446842c3f5c837e9c3dfcfe2018ea6ecef224c710c85ef728f4/requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf", size = 134517, upload_time = "2025-08-18T20:46:02.573Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6", size = 64738 }, + { url = "https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6", size = 64738, upload_time = "2025-08-18T20:46:00.542Z" }, +] + +[[package]] +name = "requests-cache" +version = "1.2.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "cattrs" }, + { name = "platformdirs" }, + { name = "requests" }, + { name = "url-normalize" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1a/be/7b2a95a9e7a7c3e774e43d067c51244e61dea8b120ae2deff7089a93fb2b/requests_cache-1.2.1.tar.gz", hash = "sha256:68abc986fdc5b8d0911318fbb5f7c80eebcd4d01bfacc6685ecf8876052511d1", size = 3018209, upload_time = "2024-06-18T17:18:03.774Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4e/2e/8f4051119f460cfc786aa91f212165bb6e643283b533db572d7b33952bd2/requests_cache-1.2.1-py3-none-any.whl", hash = "sha256:1285151cddf5331067baa82598afe2d47c7495a1334bfe7a7d329b43e9fd3603", size = 61425, upload_time = "2024-06-18T17:17:45Z" }, ] [[package]] @@ -2582,9 +2644,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "requests" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/72/97/bf44e6c6bd8ddbb99943baf7ba8b1a8485bcd2fe0e55e5708d7fee4ff1ae/requests_file-2.1.0.tar.gz", hash = "sha256:0f549a3f3b0699415ac04d167e9cb39bccfb730cb832b4d20be3d9867356e658", size = 6891 } +sdist = { url = "https://files.pythonhosted.org/packages/72/97/bf44e6c6bd8ddbb99943baf7ba8b1a8485bcd2fe0e55e5708d7fee4ff1ae/requests_file-2.1.0.tar.gz", hash = "sha256:0f549a3f3b0699415ac04d167e9cb39bccfb730cb832b4d20be3d9867356e658", size = 6891, upload_time = "2024-05-21T16:28:00.24Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d7/25/dd878a121fcfdf38f52850f11c512e13ec87c2ea72385933818e5b6c15ce/requests_file-2.1.0-py2.py3-none-any.whl", hash = "sha256:cf270de5a4c5874e84599fc5778303d496c10ae5e870bfa378818f35d21bda5c", size = 4244 }, + { url = "https://files.pythonhosted.org/packages/d7/25/dd878a121fcfdf38f52850f11c512e13ec87c2ea72385933818e5b6c15ce/requests_file-2.1.0-py2.py3-none-any.whl", hash = "sha256:cf270de5a4c5874e84599fc5778303d496c10ae5e870bfa378818f35d21bda5c", size = 4244, upload_time = "2024-05-21T16:27:57.733Z" }, ] [[package]] @@ -2601,18 +2663,18 @@ dependencies = [ { name = "python-debian" }, { name = "tomlkit" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/4b/f7/b59fe851b856d0932aedbf311a3d719f30783e27af6d05bb76d77072ab8f/reuse-5.1.1.tar.gz", hash = "sha256:a13914ed8b66b8e5956e96c63203c63d72b55280d348849ccc0eb314c73248cb", size = 419022 } +sdist = { url = "https://files.pythonhosted.org/packages/4b/f7/b59fe851b856d0932aedbf311a3d719f30783e27af6d05bb76d77072ab8f/reuse-5.1.1.tar.gz", hash = "sha256:a13914ed8b66b8e5956e96c63203c63d72b55280d348849ccc0eb314c73248cb", size = 419022, upload_time = "2025-09-05T14:50:01.049Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c9/95/12451ff8bc2c3e8a5755bc810a538de85444015d44353fc6f7ee8800c0bb/reuse-5.1.1-cp313-cp313-manylinux_2_41_x86_64.whl", hash = "sha256:15a68341949b7ddb3630d8d3a49d9537bbc143ee235dca77cc3f4047237c8299", size = 255386 }, + { url = "https://files.pythonhosted.org/packages/c9/95/12451ff8bc2c3e8a5755bc810a538de85444015d44353fc6f7ee8800c0bb/reuse-5.1.1-cp313-cp313-manylinux_2_41_x86_64.whl", hash = "sha256:15a68341949b7ddb3630d8d3a49d9537bbc143ee235dca77cc3f4047237c8299", size = 255386, upload_time = "2025-09-05T14:49:58.576Z" }, ] [[package]] name = "rfc3986" version = "2.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/85/40/1520d68bfa07ab5a6f065a186815fb6610c86fe957bc065754e47f7b0840/rfc3986-2.0.0.tar.gz", hash = "sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c", size = 49026 } +sdist = { url = "https://files.pythonhosted.org/packages/85/40/1520d68bfa07ab5a6f065a186815fb6610c86fe957bc065754e47f7b0840/rfc3986-2.0.0.tar.gz", hash = "sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c", size = 49026, upload_time = "2022-01-10T00:52:30.832Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ff/9a/9afaade874b2fa6c752c36f1548f718b5b83af81ed9b76628329dab81c1b/rfc3986-2.0.0-py2.py3-none-any.whl", hash = "sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd", size = 31326 }, + { url = "https://files.pythonhosted.org/packages/ff/9a/9afaade874b2fa6c752c36f1548f718b5b83af81ed9b76628329dab81c1b/rfc3986-2.0.0-py2.py3-none-any.whl", hash = "sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd", size = 31326, upload_time = "2022-01-10T00:52:29.594Z" }, ] [[package]] @@ -2623,90 +2685,90 @@ dependencies = [ { name = "markdown-it-py" }, { name = "pygments" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/fe/75/af448d8e52bf1d8fa6a9d089ca6c07ff4453d86c65c145d0a300bb073b9b/rich-14.1.0.tar.gz", hash = "sha256:e497a48b844b0320d45007cdebfeaeed8db2a4f4bcf49f15e455cfc4af11eaa8", size = 224441 } +sdist = { url = "https://files.pythonhosted.org/packages/fe/75/af448d8e52bf1d8fa6a9d089ca6c07ff4453d86c65c145d0a300bb073b9b/rich-14.1.0.tar.gz", hash = "sha256:e497a48b844b0320d45007cdebfeaeed8db2a4f4bcf49f15e455cfc4af11eaa8", size = 224441, upload_time = "2025-07-25T07:32:58.125Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e3/30/3c4d035596d3cf444529e0b2953ad0466f6049528a879d27534700580395/rich-14.1.0-py3-none-any.whl", hash = "sha256:536f5f1785986d6dbdea3c75205c473f970777b4a0d6c6dd1b696aa05a3fa04f", size = 243368 }, + { url = "https://files.pythonhosted.org/packages/e3/30/3c4d035596d3cf444529e0b2953ad0466f6049528a879d27534700580395/rich-14.1.0-py3-none-any.whl", hash = "sha256:536f5f1785986d6dbdea3c75205c473f970777b4a0d6c6dd1b696aa05a3fa04f", size = 243368, upload_time = "2025-07-25T07:32:56.73Z" }, ] [[package]] name = "rpds-py" version = "0.27.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e9/dd/2c0cbe774744272b0ae725f44032c77bdcab6e8bcf544bffa3b6e70c8dba/rpds_py-0.27.1.tar.gz", hash = "sha256:26a1c73171d10b7acccbded82bf6a586ab8203601e565badc74bbbf8bc5a10f8", size = 27479 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/bd/fe/38de28dee5df58b8198c743fe2bea0c785c6d40941b9950bac4cdb71a014/rpds_py-0.27.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:ae2775c1973e3c30316892737b91f9283f9908e3cc7625b9331271eaaed7dc90", size = 361887 }, - { url = "https://files.pythonhosted.org/packages/7c/9a/4b6c7eedc7dd90986bf0fab6ea2a091ec11c01b15f8ba0a14d3f80450468/rpds_py-0.27.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2643400120f55c8a96f7c9d858f7be0c88d383cd4653ae2cf0d0c88f668073e5", size = 345795 }, - { url = "https://files.pythonhosted.org/packages/6f/0e/e650e1b81922847a09cca820237b0edee69416a01268b7754d506ade11ad/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:16323f674c089b0360674a4abd28d5042947d54ba620f72514d69be4ff64845e", size = 385121 }, - { url = "https://files.pythonhosted.org/packages/1b/ea/b306067a712988e2bff00dcc7c8f31d26c29b6d5931b461aa4b60a013e33/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9a1f4814b65eacac94a00fc9a526e3fdafd78e439469644032032d0d63de4881", size = 398976 }, - { url = "https://files.pythonhosted.org/packages/2c/0a/26dc43c8840cb8fe239fe12dbc8d8de40f2365e838f3d395835dde72f0e5/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ba32c16b064267b22f1850a34051121d423b6f7338a12b9459550eb2096e7ec", size = 525953 }, - { url = "https://files.pythonhosted.org/packages/22/14/c85e8127b573aaf3a0cbd7fbb8c9c99e735a4a02180c84da2a463b766e9e/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5c20f33fd10485b80f65e800bbe5f6785af510b9f4056c5a3c612ebc83ba6cb", size = 407915 }, - { url = "https://files.pythonhosted.org/packages/ed/7b/8f4fee9ba1fb5ec856eb22d725a4efa3deb47f769597c809e03578b0f9d9/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:466bfe65bd932da36ff279ddd92de56b042f2266d752719beb97b08526268ec5", size = 386883 }, - { url = "https://files.pythonhosted.org/packages/86/47/28fa6d60f8b74fcdceba81b272f8d9836ac0340570f68f5df6b41838547b/rpds_py-0.27.1-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:41e532bbdcb57c92ba3be62c42e9f096431b4cf478da9bc3bc6ce5c38ab7ba7a", size = 405699 }, - { url = "https://files.pythonhosted.org/packages/d0/fd/c5987b5e054548df56953a21fe2ebed51fc1ec7c8f24fd41c067b68c4a0a/rpds_py-0.27.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f149826d742b406579466283769a8ea448eed82a789af0ed17b0cd5770433444", size = 423713 }, - { url = "https://files.pythonhosted.org/packages/ac/ba/3c4978b54a73ed19a7d74531be37a8bcc542d917c770e14d372b8daea186/rpds_py-0.27.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:80c60cfb5310677bd67cb1e85a1e8eb52e12529545441b43e6f14d90b878775a", size = 562324 }, - { url = "https://files.pythonhosted.org/packages/b5/6c/6943a91768fec16db09a42b08644b960cff540c66aab89b74be6d4a144ba/rpds_py-0.27.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:7ee6521b9baf06085f62ba9c7a3e5becffbc32480d2f1b351559c001c38ce4c1", size = 593646 }, - { url = "https://files.pythonhosted.org/packages/11/73/9d7a8f4be5f4396f011a6bb7a19fe26303a0dac9064462f5651ced2f572f/rpds_py-0.27.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a512c8263249a9d68cac08b05dd59d2b3f2061d99b322813cbcc14c3c7421998", size = 558137 }, - { url = "https://files.pythonhosted.org/packages/6e/96/6772cbfa0e2485bcceef8071de7821f81aeac8bb45fbfd5542a3e8108165/rpds_py-0.27.1-cp312-cp312-win32.whl", hash = "sha256:819064fa048ba01b6dadc5116f3ac48610435ac9a0058bbde98e569f9e785c39", size = 221343 }, - { url = "https://files.pythonhosted.org/packages/67/b6/c82f0faa9af1c6a64669f73a17ee0eeef25aff30bb9a1c318509efe45d84/rpds_py-0.27.1-cp312-cp312-win_amd64.whl", hash = "sha256:d9199717881f13c32c4046a15f024971a3b78ad4ea029e8da6b86e5aa9cf4594", size = 232497 }, - { url = "https://files.pythonhosted.org/packages/e1/96/2817b44bd2ed11aebacc9251da03689d56109b9aba5e311297b6902136e2/rpds_py-0.27.1-cp312-cp312-win_arm64.whl", hash = "sha256:33aa65b97826a0e885ef6e278fbd934e98cdcfed80b63946025f01e2f5b29502", size = 222790 }, - { url = "https://files.pythonhosted.org/packages/cc/77/610aeee8d41e39080c7e14afa5387138e3c9fa9756ab893d09d99e7d8e98/rpds_py-0.27.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:e4b9fcfbc021633863a37e92571d6f91851fa656f0180246e84cbd8b3f6b329b", size = 361741 }, - { url = "https://files.pythonhosted.org/packages/3a/fc/c43765f201c6a1c60be2043cbdb664013def52460a4c7adace89d6682bf4/rpds_py-0.27.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1441811a96eadca93c517d08df75de45e5ffe68aa3089924f963c782c4b898cf", size = 345574 }, - { url = "https://files.pythonhosted.org/packages/20/42/ee2b2ca114294cd9847d0ef9c26d2b0851b2e7e00bf14cc4c0b581df0fc3/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55266dafa22e672f5a4f65019015f90336ed31c6383bd53f5e7826d21a0e0b83", size = 385051 }, - { url = "https://files.pythonhosted.org/packages/fd/e8/1e430fe311e4799e02e2d1af7c765f024e95e17d651612425b226705f910/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d78827d7ac08627ea2c8e02c9e5b41180ea5ea1f747e9db0915e3adf36b62dcf", size = 398395 }, - { url = "https://files.pythonhosted.org/packages/82/95/9dc227d441ff2670651c27a739acb2535ccaf8b351a88d78c088965e5996/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae92443798a40a92dc5f0b01d8a7c93adde0c4dc965310a29ae7c64d72b9fad2", size = 524334 }, - { url = "https://files.pythonhosted.org/packages/87/01/a670c232f401d9ad461d9a332aa4080cd3cb1d1df18213dbd0d2a6a7ab51/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c46c9dd2403b66a2a3b9720ec4b74d4ab49d4fabf9f03dfdce2d42af913fe8d0", size = 407691 }, - { url = "https://files.pythonhosted.org/packages/03/36/0a14aebbaa26fe7fab4780c76f2239e76cc95a0090bdb25e31d95c492fcd/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2efe4eb1d01b7f5f1939f4ef30ecea6c6b3521eec451fb93191bf84b2a522418", size = 386868 }, - { url = "https://files.pythonhosted.org/packages/3b/03/8c897fb8b5347ff6c1cc31239b9611c5bf79d78c984430887a353e1409a1/rpds_py-0.27.1-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:15d3b4d83582d10c601f481eca29c3f138d44c92187d197aff663a269197c02d", size = 405469 }, - { url = "https://files.pythonhosted.org/packages/da/07/88c60edc2df74850d496d78a1fdcdc7b54360a7f610a4d50008309d41b94/rpds_py-0.27.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4ed2e16abbc982a169d30d1a420274a709949e2cbdef119fe2ec9d870b42f274", size = 422125 }, - { url = "https://files.pythonhosted.org/packages/6b/86/5f4c707603e41b05f191a749984f390dabcbc467cf833769b47bf14ba04f/rpds_py-0.27.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a75f305c9b013289121ec0f1181931975df78738cdf650093e6b86d74aa7d8dd", size = 562341 }, - { url = "https://files.pythonhosted.org/packages/b2/92/3c0cb2492094e3cd9baf9e49bbb7befeceb584ea0c1a8b5939dca4da12e5/rpds_py-0.27.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:67ce7620704745881a3d4b0ada80ab4d99df390838839921f99e63c474f82cf2", size = 592511 }, - { url = "https://files.pythonhosted.org/packages/10/bb/82e64fbb0047c46a168faa28d0d45a7851cd0582f850b966811d30f67ad8/rpds_py-0.27.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9d992ac10eb86d9b6f369647b6a3f412fc0075cfd5d799530e84d335e440a002", size = 557736 }, - { url = "https://files.pythonhosted.org/packages/00/95/3c863973d409210da7fb41958172c6b7dbe7fc34e04d3cc1f10bb85e979f/rpds_py-0.27.1-cp313-cp313-win32.whl", hash = "sha256:4f75e4bd8ab8db624e02c8e2fc4063021b58becdbe6df793a8111d9343aec1e3", size = 221462 }, - { url = "https://files.pythonhosted.org/packages/ce/2c/5867b14a81dc217b56d95a9f2a40fdbc56a1ab0181b80132beeecbd4b2d6/rpds_py-0.27.1-cp313-cp313-win_amd64.whl", hash = "sha256:f9025faafc62ed0b75a53e541895ca272815bec18abe2249ff6501c8f2e12b83", size = 232034 }, - { url = "https://files.pythonhosted.org/packages/c7/78/3958f3f018c01923823f1e47f1cc338e398814b92d83cd278364446fac66/rpds_py-0.27.1-cp313-cp313-win_arm64.whl", hash = "sha256:ed10dc32829e7d222b7d3b93136d25a406ba9788f6a7ebf6809092da1f4d279d", size = 222392 }, - { url = "https://files.pythonhosted.org/packages/01/76/1cdf1f91aed5c3a7bf2eba1f1c4e4d6f57832d73003919a20118870ea659/rpds_py-0.27.1-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:92022bbbad0d4426e616815b16bc4127f83c9a74940e1ccf3cfe0b387aba0228", size = 358355 }, - { url = "https://files.pythonhosted.org/packages/c3/6f/bf142541229374287604caf3bb2a4ae17f0a580798fd72d3b009b532db4e/rpds_py-0.27.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:47162fdab9407ec3f160805ac3e154df042e577dd53341745fc7fb3f625e6d92", size = 342138 }, - { url = "https://files.pythonhosted.org/packages/1a/77/355b1c041d6be40886c44ff5e798b4e2769e497b790f0f7fd1e78d17e9a8/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb89bec23fddc489e5d78b550a7b773557c9ab58b7946154a10a6f7a214a48b2", size = 380247 }, - { url = "https://files.pythonhosted.org/packages/d6/a4/d9cef5c3946ea271ce2243c51481971cd6e34f21925af2783dd17b26e815/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e48af21883ded2b3e9eb48cb7880ad8598b31ab752ff3be6457001d78f416723", size = 390699 }, - { url = "https://files.pythonhosted.org/packages/3a/06/005106a7b8c6c1a7e91b73169e49870f4af5256119d34a361ae5240a0c1d/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6f5b7bd8e219ed50299e58551a410b64daafb5017d54bbe822e003856f06a802", size = 521852 }, - { url = "https://files.pythonhosted.org/packages/e5/3e/50fb1dac0948e17a02eb05c24510a8fe12d5ce8561c6b7b7d1339ab7ab9c/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08f1e20bccf73b08d12d804d6e1c22ca5530e71659e6673bce31a6bb71c1e73f", size = 402582 }, - { url = "https://files.pythonhosted.org/packages/cb/b0/f4e224090dc5b0ec15f31a02d746ab24101dd430847c4d99123798661bfc/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0dc5dceeaefcc96dc192e3a80bbe1d6c410c469e97bdd47494a7d930987f18b2", size = 384126 }, - { url = "https://files.pythonhosted.org/packages/54/77/ac339d5f82b6afff1df8f0fe0d2145cc827992cb5f8eeb90fc9f31ef7a63/rpds_py-0.27.1-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:d76f9cc8665acdc0c9177043746775aa7babbf479b5520b78ae4002d889f5c21", size = 399486 }, - { url = "https://files.pythonhosted.org/packages/d6/29/3e1c255eee6ac358c056a57d6d6869baa00a62fa32eea5ee0632039c50a3/rpds_py-0.27.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:134fae0e36022edad8290a6661edf40c023562964efea0cc0ec7f5d392d2aaef", size = 414832 }, - { url = "https://files.pythonhosted.org/packages/3f/db/6d498b844342deb3fa1d030598db93937a9964fcf5cb4da4feb5f17be34b/rpds_py-0.27.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:eb11a4f1b2b63337cfd3b4d110af778a59aae51c81d195768e353d8b52f88081", size = 557249 }, - { url = "https://files.pythonhosted.org/packages/60/f3/690dd38e2310b6f68858a331399b4d6dbb9132c3e8ef8b4333b96caf403d/rpds_py-0.27.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:13e608ac9f50a0ed4faec0e90ece76ae33b34c0e8656e3dceb9a7db994c692cd", size = 587356 }, - { url = "https://files.pythonhosted.org/packages/86/e3/84507781cccd0145f35b1dc32c72675200c5ce8d5b30f813e49424ef68fc/rpds_py-0.27.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dd2135527aa40f061350c3f8f89da2644de26cd73e4de458e79606384f4f68e7", size = 555300 }, - { url = "https://files.pythonhosted.org/packages/e5/ee/375469849e6b429b3516206b4580a79e9ef3eb12920ddbd4492b56eaacbe/rpds_py-0.27.1-cp313-cp313t-win32.whl", hash = "sha256:3020724ade63fe320a972e2ffd93b5623227e684315adce194941167fee02688", size = 216714 }, - { url = "https://files.pythonhosted.org/packages/21/87/3fc94e47c9bd0742660e84706c311a860dcae4374cf4a03c477e23ce605a/rpds_py-0.27.1-cp313-cp313t-win_amd64.whl", hash = "sha256:8ee50c3e41739886606388ba3ab3ee2aae9f35fb23f833091833255a31740797", size = 228943 }, - { url = "https://files.pythonhosted.org/packages/70/36/b6e6066520a07cf029d385de869729a895917b411e777ab1cde878100a1d/rpds_py-0.27.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:acb9aafccaae278f449d9c713b64a9e68662e7799dbd5859e2c6b3c67b56d334", size = 362472 }, - { url = "https://files.pythonhosted.org/packages/af/07/b4646032e0dcec0df9c73a3bd52f63bc6c5f9cda992f06bd0e73fe3fbebd/rpds_py-0.27.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:b7fb801aa7f845ddf601c49630deeeccde7ce10065561d92729bfe81bd21fb33", size = 345676 }, - { url = "https://files.pythonhosted.org/packages/b0/16/2f1003ee5d0af4bcb13c0cf894957984c32a6751ed7206db2aee7379a55e/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe0dd05afb46597b9a2e11c351e5e4283c741237e7f617ffb3252780cca9336a", size = 385313 }, - { url = "https://files.pythonhosted.org/packages/05/cd/7eb6dd7b232e7f2654d03fa07f1414d7dfc980e82ba71e40a7c46fd95484/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b6dfb0e058adb12d8b1d1b25f686e94ffa65d9995a5157afe99743bf7369d62b", size = 399080 }, - { url = "https://files.pythonhosted.org/packages/20/51/5829afd5000ec1cb60f304711f02572d619040aa3ec033d8226817d1e571/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ed090ccd235f6fa8bb5861684567f0a83e04f52dfc2e5c05f2e4b1309fcf85e7", size = 523868 }, - { url = "https://files.pythonhosted.org/packages/05/2c/30eebca20d5db95720ab4d2faec1b5e4c1025c473f703738c371241476a2/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bf876e79763eecf3e7356f157540d6a093cef395b65514f17a356f62af6cc136", size = 408750 }, - { url = "https://files.pythonhosted.org/packages/90/1a/cdb5083f043597c4d4276eae4e4c70c55ab5accec078da8611f24575a367/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:12ed005216a51b1d6e2b02a7bd31885fe317e45897de81d86dcce7d74618ffff", size = 387688 }, - { url = "https://files.pythonhosted.org/packages/7c/92/cf786a15320e173f945d205ab31585cc43969743bb1a48b6888f7a2b0a2d/rpds_py-0.27.1-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:ee4308f409a40e50593c7e3bb8cbe0b4d4c66d1674a316324f0c2f5383b486f9", size = 407225 }, - { url = "https://files.pythonhosted.org/packages/33/5c/85ee16df5b65063ef26017bef33096557a4c83fbe56218ac7cd8c235f16d/rpds_py-0.27.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0b08d152555acf1f455154d498ca855618c1378ec810646fcd7c76416ac6dc60", size = 423361 }, - { url = "https://files.pythonhosted.org/packages/4b/8e/1c2741307fcabd1a334ecf008e92c4f47bb6f848712cf15c923becfe82bb/rpds_py-0.27.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:dce51c828941973a5684d458214d3a36fcd28da3e1875d659388f4f9f12cc33e", size = 562493 }, - { url = "https://files.pythonhosted.org/packages/04/03/5159321baae9b2222442a70c1f988cbbd66b9be0675dd3936461269be360/rpds_py-0.27.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:c1476d6f29eb81aa4151c9a31219b03f1f798dc43d8af1250a870735516a1212", size = 592623 }, - { url = "https://files.pythonhosted.org/packages/ff/39/c09fd1ad28b85bc1d4554a8710233c9f4cefd03d7717a1b8fbfd171d1167/rpds_py-0.27.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:3ce0cac322b0d69b63c9cdb895ee1b65805ec9ffad37639f291dd79467bee675", size = 558800 }, - { url = "https://files.pythonhosted.org/packages/c5/d6/99228e6bbcf4baa764b18258f519a9035131d91b538d4e0e294313462a98/rpds_py-0.27.1-cp314-cp314-win32.whl", hash = "sha256:dfbfac137d2a3d0725758cd141f878bf4329ba25e34979797c89474a89a8a3a3", size = 221943 }, - { url = "https://files.pythonhosted.org/packages/be/07/c802bc6b8e95be83b79bdf23d1aa61d68324cb1006e245d6c58e959e314d/rpds_py-0.27.1-cp314-cp314-win_amd64.whl", hash = "sha256:a6e57b0abfe7cc513450fcf529eb486b6e4d3f8aee83e92eb5f1ef848218d456", size = 233739 }, - { url = "https://files.pythonhosted.org/packages/c8/89/3e1b1c16d4c2d547c5717377a8df99aee8099ff050f87c45cb4d5fa70891/rpds_py-0.27.1-cp314-cp314-win_arm64.whl", hash = "sha256:faf8d146f3d476abfee026c4ae3bdd9ca14236ae4e4c310cbd1cf75ba33d24a3", size = 223120 }, - { url = "https://files.pythonhosted.org/packages/62/7e/dc7931dc2fa4a6e46b2a4fa744a9fe5c548efd70e0ba74f40b39fa4a8c10/rpds_py-0.27.1-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:ba81d2b56b6d4911ce735aad0a1d4495e808b8ee4dc58715998741a26874e7c2", size = 358944 }, - { url = "https://files.pythonhosted.org/packages/e6/22/4af76ac4e9f336bfb1a5f240d18a33c6b2fcaadb7472ac7680576512b49a/rpds_py-0.27.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:84f7d509870098de0e864cad0102711c1e24e9b1a50ee713b65928adb22269e4", size = 342283 }, - { url = "https://files.pythonhosted.org/packages/1c/15/2a7c619b3c2272ea9feb9ade67a45c40b3eeb500d503ad4c28c395dc51b4/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9e960fc78fecd1100539f14132425e1d5fe44ecb9239f8f27f079962021523e", size = 380320 }, - { url = "https://files.pythonhosted.org/packages/a2/7d/4c6d243ba4a3057e994bb5bedd01b5c963c12fe38dde707a52acdb3849e7/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:62f85b665cedab1a503747617393573995dac4600ff51869d69ad2f39eb5e817", size = 391760 }, - { url = "https://files.pythonhosted.org/packages/b4/71/b19401a909b83bcd67f90221330bc1ef11bc486fe4e04c24388d28a618ae/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fed467af29776f6556250c9ed85ea5a4dd121ab56a5f8b206e3e7a4c551e48ec", size = 522476 }, - { url = "https://files.pythonhosted.org/packages/e4/44/1a3b9715c0455d2e2f0f6df5ee6d6f5afdc423d0773a8a682ed2b43c566c/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2729615f9d430af0ae6b36cf042cb55c0936408d543fb691e1a9e36648fd35a", size = 403418 }, - { url = "https://files.pythonhosted.org/packages/1c/4b/fb6c4f14984eb56673bc868a66536f53417ddb13ed44b391998100a06a96/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b207d881a9aef7ba753d69c123a35d96ca7cb808056998f6b9e8747321f03b8", size = 384771 }, - { url = "https://files.pythonhosted.org/packages/c0/56/d5265d2d28b7420d7b4d4d85cad8ef891760f5135102e60d5c970b976e41/rpds_py-0.27.1-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:639fd5efec029f99b79ae47e5d7e00ad8a773da899b6309f6786ecaf22948c48", size = 400022 }, - { url = "https://files.pythonhosted.org/packages/8f/e9/9f5fc70164a569bdd6ed9046486c3568d6926e3a49bdefeeccfb18655875/rpds_py-0.27.1-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fecc80cb2a90e28af8a9b366edacf33d7a91cbfe4c2c4544ea1246e949cfebeb", size = 416787 }, - { url = "https://files.pythonhosted.org/packages/d4/64/56dd03430ba491db943a81dcdef115a985aac5f44f565cd39a00c766d45c/rpds_py-0.27.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:42a89282d711711d0a62d6f57d81aa43a1368686c45bc1c46b7f079d55692734", size = 557538 }, - { url = "https://files.pythonhosted.org/packages/3f/36/92cc885a3129993b1d963a2a42ecf64e6a8e129d2c7cc980dbeba84e55fb/rpds_py-0.27.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:cf9931f14223de59551ab9d38ed18d92f14f055a5f78c1d8ad6493f735021bbb", size = 588512 }, - { url = "https://files.pythonhosted.org/packages/dd/10/6b283707780a81919f71625351182b4f98932ac89a09023cb61865136244/rpds_py-0.27.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f39f58a27cc6e59f432b568ed8429c7e1641324fbe38131de852cd77b2d534b0", size = 555813 }, - { url = "https://files.pythonhosted.org/packages/04/2e/30b5ea18c01379da6272a92825dd7e53dc9d15c88a19e97932d35d430ef7/rpds_py-0.27.1-cp314-cp314t-win32.whl", hash = "sha256:d5fa0ee122dc09e23607a28e6d7b150da16c662e66409bbe85230e4c85bb528a", size = 217385 }, - { url = "https://files.pythonhosted.org/packages/32/7d/97119da51cb1dd3f2f3c0805f155a3aa4a95fa44fe7d78ae15e69edf4f34/rpds_py-0.27.1-cp314-cp314t-win_amd64.whl", hash = "sha256:6567d2bb951e21232c2f660c24cf3470bb96de56cdcb3f071a83feeaff8a2772", size = 230097 }, +sdist = { url = "https://files.pythonhosted.org/packages/e9/dd/2c0cbe774744272b0ae725f44032c77bdcab6e8bcf544bffa3b6e70c8dba/rpds_py-0.27.1.tar.gz", hash = "sha256:26a1c73171d10b7acccbded82bf6a586ab8203601e565badc74bbbf8bc5a10f8", size = 27479, upload_time = "2025-08-27T12:16:36.024Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bd/fe/38de28dee5df58b8198c743fe2bea0c785c6d40941b9950bac4cdb71a014/rpds_py-0.27.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:ae2775c1973e3c30316892737b91f9283f9908e3cc7625b9331271eaaed7dc90", size = 361887, upload_time = "2025-08-27T12:13:10.233Z" }, + { url = "https://files.pythonhosted.org/packages/7c/9a/4b6c7eedc7dd90986bf0fab6ea2a091ec11c01b15f8ba0a14d3f80450468/rpds_py-0.27.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2643400120f55c8a96f7c9d858f7be0c88d383cd4653ae2cf0d0c88f668073e5", size = 345795, upload_time = "2025-08-27T12:13:11.65Z" }, + { url = "https://files.pythonhosted.org/packages/6f/0e/e650e1b81922847a09cca820237b0edee69416a01268b7754d506ade11ad/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:16323f674c089b0360674a4abd28d5042947d54ba620f72514d69be4ff64845e", size = 385121, upload_time = "2025-08-27T12:13:13.008Z" }, + { url = "https://files.pythonhosted.org/packages/1b/ea/b306067a712988e2bff00dcc7c8f31d26c29b6d5931b461aa4b60a013e33/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9a1f4814b65eacac94a00fc9a526e3fdafd78e439469644032032d0d63de4881", size = 398976, upload_time = "2025-08-27T12:13:14.368Z" }, + { url = "https://files.pythonhosted.org/packages/2c/0a/26dc43c8840cb8fe239fe12dbc8d8de40f2365e838f3d395835dde72f0e5/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ba32c16b064267b22f1850a34051121d423b6f7338a12b9459550eb2096e7ec", size = 525953, upload_time = "2025-08-27T12:13:15.774Z" }, + { url = "https://files.pythonhosted.org/packages/22/14/c85e8127b573aaf3a0cbd7fbb8c9c99e735a4a02180c84da2a463b766e9e/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5c20f33fd10485b80f65e800bbe5f6785af510b9f4056c5a3c612ebc83ba6cb", size = 407915, upload_time = "2025-08-27T12:13:17.379Z" }, + { url = "https://files.pythonhosted.org/packages/ed/7b/8f4fee9ba1fb5ec856eb22d725a4efa3deb47f769597c809e03578b0f9d9/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:466bfe65bd932da36ff279ddd92de56b042f2266d752719beb97b08526268ec5", size = 386883, upload_time = "2025-08-27T12:13:18.704Z" }, + { url = "https://files.pythonhosted.org/packages/86/47/28fa6d60f8b74fcdceba81b272f8d9836ac0340570f68f5df6b41838547b/rpds_py-0.27.1-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:41e532bbdcb57c92ba3be62c42e9f096431b4cf478da9bc3bc6ce5c38ab7ba7a", size = 405699, upload_time = "2025-08-27T12:13:20.089Z" }, + { url = "https://files.pythonhosted.org/packages/d0/fd/c5987b5e054548df56953a21fe2ebed51fc1ec7c8f24fd41c067b68c4a0a/rpds_py-0.27.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f149826d742b406579466283769a8ea448eed82a789af0ed17b0cd5770433444", size = 423713, upload_time = "2025-08-27T12:13:21.436Z" }, + { url = "https://files.pythonhosted.org/packages/ac/ba/3c4978b54a73ed19a7d74531be37a8bcc542d917c770e14d372b8daea186/rpds_py-0.27.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:80c60cfb5310677bd67cb1e85a1e8eb52e12529545441b43e6f14d90b878775a", size = 562324, upload_time = "2025-08-27T12:13:22.789Z" }, + { url = "https://files.pythonhosted.org/packages/b5/6c/6943a91768fec16db09a42b08644b960cff540c66aab89b74be6d4a144ba/rpds_py-0.27.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:7ee6521b9baf06085f62ba9c7a3e5becffbc32480d2f1b351559c001c38ce4c1", size = 593646, upload_time = "2025-08-27T12:13:24.122Z" }, + { url = "https://files.pythonhosted.org/packages/11/73/9d7a8f4be5f4396f011a6bb7a19fe26303a0dac9064462f5651ced2f572f/rpds_py-0.27.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a512c8263249a9d68cac08b05dd59d2b3f2061d99b322813cbcc14c3c7421998", size = 558137, upload_time = "2025-08-27T12:13:25.557Z" }, + { url = "https://files.pythonhosted.org/packages/6e/96/6772cbfa0e2485bcceef8071de7821f81aeac8bb45fbfd5542a3e8108165/rpds_py-0.27.1-cp312-cp312-win32.whl", hash = "sha256:819064fa048ba01b6dadc5116f3ac48610435ac9a0058bbde98e569f9e785c39", size = 221343, upload_time = "2025-08-27T12:13:26.967Z" }, + { url = "https://files.pythonhosted.org/packages/67/b6/c82f0faa9af1c6a64669f73a17ee0eeef25aff30bb9a1c318509efe45d84/rpds_py-0.27.1-cp312-cp312-win_amd64.whl", hash = "sha256:d9199717881f13c32c4046a15f024971a3b78ad4ea029e8da6b86e5aa9cf4594", size = 232497, upload_time = "2025-08-27T12:13:28.326Z" }, + { url = "https://files.pythonhosted.org/packages/e1/96/2817b44bd2ed11aebacc9251da03689d56109b9aba5e311297b6902136e2/rpds_py-0.27.1-cp312-cp312-win_arm64.whl", hash = "sha256:33aa65b97826a0e885ef6e278fbd934e98cdcfed80b63946025f01e2f5b29502", size = 222790, upload_time = "2025-08-27T12:13:29.71Z" }, + { url = "https://files.pythonhosted.org/packages/cc/77/610aeee8d41e39080c7e14afa5387138e3c9fa9756ab893d09d99e7d8e98/rpds_py-0.27.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:e4b9fcfbc021633863a37e92571d6f91851fa656f0180246e84cbd8b3f6b329b", size = 361741, upload_time = "2025-08-27T12:13:31.039Z" }, + { url = "https://files.pythonhosted.org/packages/3a/fc/c43765f201c6a1c60be2043cbdb664013def52460a4c7adace89d6682bf4/rpds_py-0.27.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1441811a96eadca93c517d08df75de45e5ffe68aa3089924f963c782c4b898cf", size = 345574, upload_time = "2025-08-27T12:13:32.902Z" }, + { url = "https://files.pythonhosted.org/packages/20/42/ee2b2ca114294cd9847d0ef9c26d2b0851b2e7e00bf14cc4c0b581df0fc3/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55266dafa22e672f5a4f65019015f90336ed31c6383bd53f5e7826d21a0e0b83", size = 385051, upload_time = "2025-08-27T12:13:34.228Z" }, + { url = "https://files.pythonhosted.org/packages/fd/e8/1e430fe311e4799e02e2d1af7c765f024e95e17d651612425b226705f910/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d78827d7ac08627ea2c8e02c9e5b41180ea5ea1f747e9db0915e3adf36b62dcf", size = 398395, upload_time = "2025-08-27T12:13:36.132Z" }, + { url = "https://files.pythonhosted.org/packages/82/95/9dc227d441ff2670651c27a739acb2535ccaf8b351a88d78c088965e5996/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae92443798a40a92dc5f0b01d8a7c93adde0c4dc965310a29ae7c64d72b9fad2", size = 524334, upload_time = "2025-08-27T12:13:37.562Z" }, + { url = "https://files.pythonhosted.org/packages/87/01/a670c232f401d9ad461d9a332aa4080cd3cb1d1df18213dbd0d2a6a7ab51/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c46c9dd2403b66a2a3b9720ec4b74d4ab49d4fabf9f03dfdce2d42af913fe8d0", size = 407691, upload_time = "2025-08-27T12:13:38.94Z" }, + { url = "https://files.pythonhosted.org/packages/03/36/0a14aebbaa26fe7fab4780c76f2239e76cc95a0090bdb25e31d95c492fcd/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2efe4eb1d01b7f5f1939f4ef30ecea6c6b3521eec451fb93191bf84b2a522418", size = 386868, upload_time = "2025-08-27T12:13:40.192Z" }, + { url = "https://files.pythonhosted.org/packages/3b/03/8c897fb8b5347ff6c1cc31239b9611c5bf79d78c984430887a353e1409a1/rpds_py-0.27.1-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:15d3b4d83582d10c601f481eca29c3f138d44c92187d197aff663a269197c02d", size = 405469, upload_time = "2025-08-27T12:13:41.496Z" }, + { url = "https://files.pythonhosted.org/packages/da/07/88c60edc2df74850d496d78a1fdcdc7b54360a7f610a4d50008309d41b94/rpds_py-0.27.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4ed2e16abbc982a169d30d1a420274a709949e2cbdef119fe2ec9d870b42f274", size = 422125, upload_time = "2025-08-27T12:13:42.802Z" }, + { url = "https://files.pythonhosted.org/packages/6b/86/5f4c707603e41b05f191a749984f390dabcbc467cf833769b47bf14ba04f/rpds_py-0.27.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a75f305c9b013289121ec0f1181931975df78738cdf650093e6b86d74aa7d8dd", size = 562341, upload_time = "2025-08-27T12:13:44.472Z" }, + { url = "https://files.pythonhosted.org/packages/b2/92/3c0cb2492094e3cd9baf9e49bbb7befeceb584ea0c1a8b5939dca4da12e5/rpds_py-0.27.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:67ce7620704745881a3d4b0ada80ab4d99df390838839921f99e63c474f82cf2", size = 592511, upload_time = "2025-08-27T12:13:45.898Z" }, + { url = "https://files.pythonhosted.org/packages/10/bb/82e64fbb0047c46a168faa28d0d45a7851cd0582f850b966811d30f67ad8/rpds_py-0.27.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9d992ac10eb86d9b6f369647b6a3f412fc0075cfd5d799530e84d335e440a002", size = 557736, upload_time = "2025-08-27T12:13:47.408Z" }, + { url = "https://files.pythonhosted.org/packages/00/95/3c863973d409210da7fb41958172c6b7dbe7fc34e04d3cc1f10bb85e979f/rpds_py-0.27.1-cp313-cp313-win32.whl", hash = "sha256:4f75e4bd8ab8db624e02c8e2fc4063021b58becdbe6df793a8111d9343aec1e3", size = 221462, upload_time = "2025-08-27T12:13:48.742Z" }, + { url = "https://files.pythonhosted.org/packages/ce/2c/5867b14a81dc217b56d95a9f2a40fdbc56a1ab0181b80132beeecbd4b2d6/rpds_py-0.27.1-cp313-cp313-win_amd64.whl", hash = "sha256:f9025faafc62ed0b75a53e541895ca272815bec18abe2249ff6501c8f2e12b83", size = 232034, upload_time = "2025-08-27T12:13:50.11Z" }, + { url = "https://files.pythonhosted.org/packages/c7/78/3958f3f018c01923823f1e47f1cc338e398814b92d83cd278364446fac66/rpds_py-0.27.1-cp313-cp313-win_arm64.whl", hash = "sha256:ed10dc32829e7d222b7d3b93136d25a406ba9788f6a7ebf6809092da1f4d279d", size = 222392, upload_time = "2025-08-27T12:13:52.587Z" }, + { url = "https://files.pythonhosted.org/packages/01/76/1cdf1f91aed5c3a7bf2eba1f1c4e4d6f57832d73003919a20118870ea659/rpds_py-0.27.1-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:92022bbbad0d4426e616815b16bc4127f83c9a74940e1ccf3cfe0b387aba0228", size = 358355, upload_time = "2025-08-27T12:13:54.012Z" }, + { url = "https://files.pythonhosted.org/packages/c3/6f/bf142541229374287604caf3bb2a4ae17f0a580798fd72d3b009b532db4e/rpds_py-0.27.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:47162fdab9407ec3f160805ac3e154df042e577dd53341745fc7fb3f625e6d92", size = 342138, upload_time = "2025-08-27T12:13:55.791Z" }, + { url = "https://files.pythonhosted.org/packages/1a/77/355b1c041d6be40886c44ff5e798b4e2769e497b790f0f7fd1e78d17e9a8/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb89bec23fddc489e5d78b550a7b773557c9ab58b7946154a10a6f7a214a48b2", size = 380247, upload_time = "2025-08-27T12:13:57.683Z" }, + { url = "https://files.pythonhosted.org/packages/d6/a4/d9cef5c3946ea271ce2243c51481971cd6e34f21925af2783dd17b26e815/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e48af21883ded2b3e9eb48cb7880ad8598b31ab752ff3be6457001d78f416723", size = 390699, upload_time = "2025-08-27T12:13:59.137Z" }, + { url = "https://files.pythonhosted.org/packages/3a/06/005106a7b8c6c1a7e91b73169e49870f4af5256119d34a361ae5240a0c1d/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6f5b7bd8e219ed50299e58551a410b64daafb5017d54bbe822e003856f06a802", size = 521852, upload_time = "2025-08-27T12:14:00.583Z" }, + { url = "https://files.pythonhosted.org/packages/e5/3e/50fb1dac0948e17a02eb05c24510a8fe12d5ce8561c6b7b7d1339ab7ab9c/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08f1e20bccf73b08d12d804d6e1c22ca5530e71659e6673bce31a6bb71c1e73f", size = 402582, upload_time = "2025-08-27T12:14:02.034Z" }, + { url = "https://files.pythonhosted.org/packages/cb/b0/f4e224090dc5b0ec15f31a02d746ab24101dd430847c4d99123798661bfc/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0dc5dceeaefcc96dc192e3a80bbe1d6c410c469e97bdd47494a7d930987f18b2", size = 384126, upload_time = "2025-08-27T12:14:03.437Z" }, + { url = "https://files.pythonhosted.org/packages/54/77/ac339d5f82b6afff1df8f0fe0d2145cc827992cb5f8eeb90fc9f31ef7a63/rpds_py-0.27.1-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:d76f9cc8665acdc0c9177043746775aa7babbf479b5520b78ae4002d889f5c21", size = 399486, upload_time = "2025-08-27T12:14:05.443Z" }, + { url = "https://files.pythonhosted.org/packages/d6/29/3e1c255eee6ac358c056a57d6d6869baa00a62fa32eea5ee0632039c50a3/rpds_py-0.27.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:134fae0e36022edad8290a6661edf40c023562964efea0cc0ec7f5d392d2aaef", size = 414832, upload_time = "2025-08-27T12:14:06.902Z" }, + { url = "https://files.pythonhosted.org/packages/3f/db/6d498b844342deb3fa1d030598db93937a9964fcf5cb4da4feb5f17be34b/rpds_py-0.27.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:eb11a4f1b2b63337cfd3b4d110af778a59aae51c81d195768e353d8b52f88081", size = 557249, upload_time = "2025-08-27T12:14:08.37Z" }, + { url = "https://files.pythonhosted.org/packages/60/f3/690dd38e2310b6f68858a331399b4d6dbb9132c3e8ef8b4333b96caf403d/rpds_py-0.27.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:13e608ac9f50a0ed4faec0e90ece76ae33b34c0e8656e3dceb9a7db994c692cd", size = 587356, upload_time = "2025-08-27T12:14:10.034Z" }, + { url = "https://files.pythonhosted.org/packages/86/e3/84507781cccd0145f35b1dc32c72675200c5ce8d5b30f813e49424ef68fc/rpds_py-0.27.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dd2135527aa40f061350c3f8f89da2644de26cd73e4de458e79606384f4f68e7", size = 555300, upload_time = "2025-08-27T12:14:11.783Z" }, + { url = "https://files.pythonhosted.org/packages/e5/ee/375469849e6b429b3516206b4580a79e9ef3eb12920ddbd4492b56eaacbe/rpds_py-0.27.1-cp313-cp313t-win32.whl", hash = "sha256:3020724ade63fe320a972e2ffd93b5623227e684315adce194941167fee02688", size = 216714, upload_time = "2025-08-27T12:14:13.629Z" }, + { url = "https://files.pythonhosted.org/packages/21/87/3fc94e47c9bd0742660e84706c311a860dcae4374cf4a03c477e23ce605a/rpds_py-0.27.1-cp313-cp313t-win_amd64.whl", hash = "sha256:8ee50c3e41739886606388ba3ab3ee2aae9f35fb23f833091833255a31740797", size = 228943, upload_time = "2025-08-27T12:14:14.937Z" }, + { url = "https://files.pythonhosted.org/packages/70/36/b6e6066520a07cf029d385de869729a895917b411e777ab1cde878100a1d/rpds_py-0.27.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:acb9aafccaae278f449d9c713b64a9e68662e7799dbd5859e2c6b3c67b56d334", size = 362472, upload_time = "2025-08-27T12:14:16.333Z" }, + { url = "https://files.pythonhosted.org/packages/af/07/b4646032e0dcec0df9c73a3bd52f63bc6c5f9cda992f06bd0e73fe3fbebd/rpds_py-0.27.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:b7fb801aa7f845ddf601c49630deeeccde7ce10065561d92729bfe81bd21fb33", size = 345676, upload_time = "2025-08-27T12:14:17.764Z" }, + { url = "https://files.pythonhosted.org/packages/b0/16/2f1003ee5d0af4bcb13c0cf894957984c32a6751ed7206db2aee7379a55e/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe0dd05afb46597b9a2e11c351e5e4283c741237e7f617ffb3252780cca9336a", size = 385313, upload_time = "2025-08-27T12:14:19.829Z" }, + { url = "https://files.pythonhosted.org/packages/05/cd/7eb6dd7b232e7f2654d03fa07f1414d7dfc980e82ba71e40a7c46fd95484/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b6dfb0e058adb12d8b1d1b25f686e94ffa65d9995a5157afe99743bf7369d62b", size = 399080, upload_time = "2025-08-27T12:14:21.531Z" }, + { url = "https://files.pythonhosted.org/packages/20/51/5829afd5000ec1cb60f304711f02572d619040aa3ec033d8226817d1e571/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ed090ccd235f6fa8bb5861684567f0a83e04f52dfc2e5c05f2e4b1309fcf85e7", size = 523868, upload_time = "2025-08-27T12:14:23.485Z" }, + { url = "https://files.pythonhosted.org/packages/05/2c/30eebca20d5db95720ab4d2faec1b5e4c1025c473f703738c371241476a2/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bf876e79763eecf3e7356f157540d6a093cef395b65514f17a356f62af6cc136", size = 408750, upload_time = "2025-08-27T12:14:24.924Z" }, + { url = "https://files.pythonhosted.org/packages/90/1a/cdb5083f043597c4d4276eae4e4c70c55ab5accec078da8611f24575a367/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:12ed005216a51b1d6e2b02a7bd31885fe317e45897de81d86dcce7d74618ffff", size = 387688, upload_time = "2025-08-27T12:14:27.537Z" }, + { url = "https://files.pythonhosted.org/packages/7c/92/cf786a15320e173f945d205ab31585cc43969743bb1a48b6888f7a2b0a2d/rpds_py-0.27.1-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:ee4308f409a40e50593c7e3bb8cbe0b4d4c66d1674a316324f0c2f5383b486f9", size = 407225, upload_time = "2025-08-27T12:14:28.981Z" }, + { url = "https://files.pythonhosted.org/packages/33/5c/85ee16df5b65063ef26017bef33096557a4c83fbe56218ac7cd8c235f16d/rpds_py-0.27.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0b08d152555acf1f455154d498ca855618c1378ec810646fcd7c76416ac6dc60", size = 423361, upload_time = "2025-08-27T12:14:30.469Z" }, + { url = "https://files.pythonhosted.org/packages/4b/8e/1c2741307fcabd1a334ecf008e92c4f47bb6f848712cf15c923becfe82bb/rpds_py-0.27.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:dce51c828941973a5684d458214d3a36fcd28da3e1875d659388f4f9f12cc33e", size = 562493, upload_time = "2025-08-27T12:14:31.987Z" }, + { url = "https://files.pythonhosted.org/packages/04/03/5159321baae9b2222442a70c1f988cbbd66b9be0675dd3936461269be360/rpds_py-0.27.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:c1476d6f29eb81aa4151c9a31219b03f1f798dc43d8af1250a870735516a1212", size = 592623, upload_time = "2025-08-27T12:14:33.543Z" }, + { url = "https://files.pythonhosted.org/packages/ff/39/c09fd1ad28b85bc1d4554a8710233c9f4cefd03d7717a1b8fbfd171d1167/rpds_py-0.27.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:3ce0cac322b0d69b63c9cdb895ee1b65805ec9ffad37639f291dd79467bee675", size = 558800, upload_time = "2025-08-27T12:14:35.436Z" }, + { url = "https://files.pythonhosted.org/packages/c5/d6/99228e6bbcf4baa764b18258f519a9035131d91b538d4e0e294313462a98/rpds_py-0.27.1-cp314-cp314-win32.whl", hash = "sha256:dfbfac137d2a3d0725758cd141f878bf4329ba25e34979797c89474a89a8a3a3", size = 221943, upload_time = "2025-08-27T12:14:36.898Z" }, + { url = "https://files.pythonhosted.org/packages/be/07/c802bc6b8e95be83b79bdf23d1aa61d68324cb1006e245d6c58e959e314d/rpds_py-0.27.1-cp314-cp314-win_amd64.whl", hash = "sha256:a6e57b0abfe7cc513450fcf529eb486b6e4d3f8aee83e92eb5f1ef848218d456", size = 233739, upload_time = "2025-08-27T12:14:38.386Z" }, + { url = "https://files.pythonhosted.org/packages/c8/89/3e1b1c16d4c2d547c5717377a8df99aee8099ff050f87c45cb4d5fa70891/rpds_py-0.27.1-cp314-cp314-win_arm64.whl", hash = "sha256:faf8d146f3d476abfee026c4ae3bdd9ca14236ae4e4c310cbd1cf75ba33d24a3", size = 223120, upload_time = "2025-08-27T12:14:39.82Z" }, + { url = "https://files.pythonhosted.org/packages/62/7e/dc7931dc2fa4a6e46b2a4fa744a9fe5c548efd70e0ba74f40b39fa4a8c10/rpds_py-0.27.1-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:ba81d2b56b6d4911ce735aad0a1d4495e808b8ee4dc58715998741a26874e7c2", size = 358944, upload_time = "2025-08-27T12:14:41.199Z" }, + { url = "https://files.pythonhosted.org/packages/e6/22/4af76ac4e9f336bfb1a5f240d18a33c6b2fcaadb7472ac7680576512b49a/rpds_py-0.27.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:84f7d509870098de0e864cad0102711c1e24e9b1a50ee713b65928adb22269e4", size = 342283, upload_time = "2025-08-27T12:14:42.699Z" }, + { url = "https://files.pythonhosted.org/packages/1c/15/2a7c619b3c2272ea9feb9ade67a45c40b3eeb500d503ad4c28c395dc51b4/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9e960fc78fecd1100539f14132425e1d5fe44ecb9239f8f27f079962021523e", size = 380320, upload_time = "2025-08-27T12:14:44.157Z" }, + { url = "https://files.pythonhosted.org/packages/a2/7d/4c6d243ba4a3057e994bb5bedd01b5c963c12fe38dde707a52acdb3849e7/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:62f85b665cedab1a503747617393573995dac4600ff51869d69ad2f39eb5e817", size = 391760, upload_time = "2025-08-27T12:14:45.845Z" }, + { url = "https://files.pythonhosted.org/packages/b4/71/b19401a909b83bcd67f90221330bc1ef11bc486fe4e04c24388d28a618ae/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fed467af29776f6556250c9ed85ea5a4dd121ab56a5f8b206e3e7a4c551e48ec", size = 522476, upload_time = "2025-08-27T12:14:47.364Z" }, + { url = "https://files.pythonhosted.org/packages/e4/44/1a3b9715c0455d2e2f0f6df5ee6d6f5afdc423d0773a8a682ed2b43c566c/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2729615f9d430af0ae6b36cf042cb55c0936408d543fb691e1a9e36648fd35a", size = 403418, upload_time = "2025-08-27T12:14:49.991Z" }, + { url = "https://files.pythonhosted.org/packages/1c/4b/fb6c4f14984eb56673bc868a66536f53417ddb13ed44b391998100a06a96/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b207d881a9aef7ba753d69c123a35d96ca7cb808056998f6b9e8747321f03b8", size = 384771, upload_time = "2025-08-27T12:14:52.159Z" }, + { url = "https://files.pythonhosted.org/packages/c0/56/d5265d2d28b7420d7b4d4d85cad8ef891760f5135102e60d5c970b976e41/rpds_py-0.27.1-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:639fd5efec029f99b79ae47e5d7e00ad8a773da899b6309f6786ecaf22948c48", size = 400022, upload_time = "2025-08-27T12:14:53.859Z" }, + { url = "https://files.pythonhosted.org/packages/8f/e9/9f5fc70164a569bdd6ed9046486c3568d6926e3a49bdefeeccfb18655875/rpds_py-0.27.1-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fecc80cb2a90e28af8a9b366edacf33d7a91cbfe4c2c4544ea1246e949cfebeb", size = 416787, upload_time = "2025-08-27T12:14:55.673Z" }, + { url = "https://files.pythonhosted.org/packages/d4/64/56dd03430ba491db943a81dcdef115a985aac5f44f565cd39a00c766d45c/rpds_py-0.27.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:42a89282d711711d0a62d6f57d81aa43a1368686c45bc1c46b7f079d55692734", size = 557538, upload_time = "2025-08-27T12:14:57.245Z" }, + { url = "https://files.pythonhosted.org/packages/3f/36/92cc885a3129993b1d963a2a42ecf64e6a8e129d2c7cc980dbeba84e55fb/rpds_py-0.27.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:cf9931f14223de59551ab9d38ed18d92f14f055a5f78c1d8ad6493f735021bbb", size = 588512, upload_time = "2025-08-27T12:14:58.728Z" }, + { url = "https://files.pythonhosted.org/packages/dd/10/6b283707780a81919f71625351182b4f98932ac89a09023cb61865136244/rpds_py-0.27.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f39f58a27cc6e59f432b568ed8429c7e1641324fbe38131de852cd77b2d534b0", size = 555813, upload_time = "2025-08-27T12:15:00.334Z" }, + { url = "https://files.pythonhosted.org/packages/04/2e/30b5ea18c01379da6272a92825dd7e53dc9d15c88a19e97932d35d430ef7/rpds_py-0.27.1-cp314-cp314t-win32.whl", hash = "sha256:d5fa0ee122dc09e23607a28e6d7b150da16c662e66409bbe85230e4c85bb528a", size = 217385, upload_time = "2025-08-27T12:15:01.937Z" }, + { url = "https://files.pythonhosted.org/packages/32/7d/97119da51cb1dd3f2f3c0805f155a3aa4a95fa44fe7d78ae15e69edf4f34/rpds_py-0.27.1-cp314-cp314t-win_amd64.whl", hash = "sha256:6567d2bb951e21232c2f660c24cf3470bb96de56cdcb3f071a83feeaff8a2772", size = 230097, upload_time = "2025-08-27T12:15:03.961Z" }, ] [[package]] @@ -2716,35 +2778,35 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "ruamel-yaml-clib", marker = "python_full_version < '3.14' and platform_python_implementation == 'CPython'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/3e/db/f3950f5e5031b618aae9f423a39bf81a55c148aecd15a34527898e752cf4/ruamel.yaml-0.18.15.tar.gz", hash = "sha256:dbfca74b018c4c3fba0b9cc9ee33e53c371194a9000e694995e620490fd40700", size = 146865 } +sdist = { url = "https://files.pythonhosted.org/packages/3e/db/f3950f5e5031b618aae9f423a39bf81a55c148aecd15a34527898e752cf4/ruamel.yaml-0.18.15.tar.gz", hash = "sha256:dbfca74b018c4c3fba0b9cc9ee33e53c371194a9000e694995e620490fd40700", size = 146865, upload_time = "2025-08-19T11:15:10.694Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/e5/f2a0621f1781b76a38194acae72f01e37b1941470407345b6e8653ad7640/ruamel.yaml-0.18.15-py3-none-any.whl", hash = "sha256:148f6488d698b7a5eded5ea793a025308b25eca97208181b6a026037f391f701", size = 119702 }, + { url = "https://files.pythonhosted.org/packages/d1/e5/f2a0621f1781b76a38194acae72f01e37b1941470407345b6e8653ad7640/ruamel.yaml-0.18.15-py3-none-any.whl", hash = "sha256:148f6488d698b7a5eded5ea793a025308b25eca97208181b6a026037f391f701", size = 119702, upload_time = "2025-08-19T11:15:07.696Z" }, ] [[package]] name = "ruamel-yaml-clib" version = "0.2.12" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/20/84/80203abff8ea4993a87d823a5f632e4d92831ef75d404c9fc78d0176d2b5/ruamel.yaml.clib-0.2.12.tar.gz", hash = "sha256:6c8fbb13ec503f99a91901ab46e0b07ae7941cd527393187039aec586fdfd36f", size = 225315 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/48/41/e7a405afbdc26af961678474a55373e1b323605a4f5e2ddd4a80ea80f628/ruamel.yaml.clib-0.2.12-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:20b0f8dc160ba83b6dcc0e256846e1a02d044e13f7ea74a3d1d56ede4e48c632", size = 133433 }, - { url = "https://files.pythonhosted.org/packages/ec/b0/b850385604334c2ce90e3ee1013bd911aedf058a934905863a6ea95e9eb4/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:943f32bc9dedb3abff9879edc134901df92cfce2c3d5c9348f172f62eb2d771d", size = 647362 }, - { url = "https://files.pythonhosted.org/packages/44/d0/3f68a86e006448fb6c005aee66565b9eb89014a70c491d70c08de597f8e4/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95c3829bb364fdb8e0332c9931ecf57d9be3519241323c5274bd82f709cebc0c", size = 754118 }, - { url = "https://files.pythonhosted.org/packages/52/a9/d39f3c5ada0a3bb2870d7db41901125dbe2434fa4f12ca8c5b83a42d7c53/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:749c16fcc4a2b09f28843cda5a193e0283e47454b63ec4b81eaa2242f50e4ccd", size = 706497 }, - { url = "https://files.pythonhosted.org/packages/b0/fa/097e38135dadd9ac25aecf2a54be17ddf6e4c23e43d538492a90ab3d71c6/ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bf165fef1f223beae7333275156ab2022cffe255dcc51c27f066b4370da81e31", size = 698042 }, - { url = "https://files.pythonhosted.org/packages/ec/d5/a659ca6f503b9379b930f13bc6b130c9f176469b73b9834296822a83a132/ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:32621c177bbf782ca5a18ba4d7af0f1082a3f6e517ac2a18b3974d4edf349680", size = 745831 }, - { url = "https://files.pythonhosted.org/packages/db/5d/36619b61ffa2429eeaefaab4f3374666adf36ad8ac6330d855848d7d36fd/ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b82a7c94a498853aa0b272fd5bc67f29008da798d4f93a2f9f289feb8426a58d", size = 715692 }, - { url = "https://files.pythonhosted.org/packages/b1/82/85cb92f15a4231c89b95dfe08b09eb6adca929ef7df7e17ab59902b6f589/ruamel.yaml.clib-0.2.12-cp312-cp312-win32.whl", hash = "sha256:e8c4ebfcfd57177b572e2040777b8abc537cdef58a2120e830124946aa9b42c5", size = 98777 }, - { url = "https://files.pythonhosted.org/packages/d7/8f/c3654f6f1ddb75daf3922c3d8fc6005b1ab56671ad56ffb874d908bfa668/ruamel.yaml.clib-0.2.12-cp312-cp312-win_amd64.whl", hash = "sha256:0467c5965282c62203273b838ae77c0d29d7638c8a4e3a1c8bdd3602c10904e4", size = 115523 }, - { url = "https://files.pythonhosted.org/packages/29/00/4864119668d71a5fa45678f380b5923ff410701565821925c69780356ffa/ruamel.yaml.clib-0.2.12-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:4c8c5d82f50bb53986a5e02d1b3092b03622c02c2eb78e29bec33fd9593bae1a", size = 132011 }, - { url = "https://files.pythonhosted.org/packages/7f/5e/212f473a93ae78c669ffa0cb051e3fee1139cb2d385d2ae1653d64281507/ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux2014_aarch64.whl", hash = "sha256:e7e3736715fbf53e9be2a79eb4db68e4ed857017344d697e8b9749444ae57475", size = 642488 }, - { url = "https://files.pythonhosted.org/packages/1f/8f/ecfbe2123ade605c49ef769788f79c38ddb1c8fa81e01f4dbf5cf1a44b16/ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b7e75b4965e1d4690e93021adfcecccbca7d61c7bddd8e22406ef2ff20d74ef", size = 745066 }, - { url = "https://files.pythonhosted.org/packages/e2/a9/28f60726d29dfc01b8decdb385de4ced2ced9faeb37a847bd5cf26836815/ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96777d473c05ee3e5e3c3e999f5d23c6f4ec5b0c38c098b3a5229085f74236c6", size = 701785 }, - { url = "https://files.pythonhosted.org/packages/84/7e/8e7ec45920daa7f76046578e4f677a3215fe8f18ee30a9cb7627a19d9b4c/ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:3bc2a80e6420ca8b7d3590791e2dfc709c88ab9152c00eeb511c9875ce5778bf", size = 693017 }, - { url = "https://files.pythonhosted.org/packages/c5/b3/d650eaade4ca225f02a648321e1ab835b9d361c60d51150bac49063b83fa/ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:e188d2699864c11c36cdfdada94d781fd5d6b0071cd9c427bceb08ad3d7c70e1", size = 741270 }, - { url = "https://files.pythonhosted.org/packages/87/b8/01c29b924dcbbed75cc45b30c30d565d763b9c4d540545a0eeecffb8f09c/ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4f6f3eac23941b32afccc23081e1f50612bdbe4e982012ef4f5797986828cd01", size = 709059 }, - { url = "https://files.pythonhosted.org/packages/30/8c/ed73f047a73638257aa9377ad356bea4d96125b305c34a28766f4445cc0f/ruamel.yaml.clib-0.2.12-cp313-cp313-win32.whl", hash = "sha256:6442cb36270b3afb1b4951f060eccca1ce49f3d087ca1ca4563a6eb479cb3de6", size = 98583 }, - { url = "https://files.pythonhosted.org/packages/b0/85/e8e751d8791564dd333d5d9a4eab0a7a115f7e349595417fd50ecae3395c/ruamel.yaml.clib-0.2.12-cp313-cp313-win_amd64.whl", hash = "sha256:e5b8daf27af0b90da7bb903a876477a9e6d7270be6146906b276605997c7e9a3", size = 115190 }, +sdist = { url = "https://files.pythonhosted.org/packages/20/84/80203abff8ea4993a87d823a5f632e4d92831ef75d404c9fc78d0176d2b5/ruamel.yaml.clib-0.2.12.tar.gz", hash = "sha256:6c8fbb13ec503f99a91901ab46e0b07ae7941cd527393187039aec586fdfd36f", size = 225315, upload_time = "2024-10-20T10:10:56.22Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/48/41/e7a405afbdc26af961678474a55373e1b323605a4f5e2ddd4a80ea80f628/ruamel.yaml.clib-0.2.12-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:20b0f8dc160ba83b6dcc0e256846e1a02d044e13f7ea74a3d1d56ede4e48c632", size = 133433, upload_time = "2024-10-20T10:12:55.657Z" }, + { url = "https://files.pythonhosted.org/packages/ec/b0/b850385604334c2ce90e3ee1013bd911aedf058a934905863a6ea95e9eb4/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:943f32bc9dedb3abff9879edc134901df92cfce2c3d5c9348f172f62eb2d771d", size = 647362, upload_time = "2024-10-20T10:12:57.155Z" }, + { url = "https://files.pythonhosted.org/packages/44/d0/3f68a86e006448fb6c005aee66565b9eb89014a70c491d70c08de597f8e4/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95c3829bb364fdb8e0332c9931ecf57d9be3519241323c5274bd82f709cebc0c", size = 754118, upload_time = "2024-10-20T10:12:58.501Z" }, + { url = "https://files.pythonhosted.org/packages/52/a9/d39f3c5ada0a3bb2870d7db41901125dbe2434fa4f12ca8c5b83a42d7c53/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:749c16fcc4a2b09f28843cda5a193e0283e47454b63ec4b81eaa2242f50e4ccd", size = 706497, upload_time = "2024-10-20T10:13:00.211Z" }, + { url = "https://files.pythonhosted.org/packages/b0/fa/097e38135dadd9ac25aecf2a54be17ddf6e4c23e43d538492a90ab3d71c6/ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bf165fef1f223beae7333275156ab2022cffe255dcc51c27f066b4370da81e31", size = 698042, upload_time = "2024-10-21T11:26:46.038Z" }, + { url = "https://files.pythonhosted.org/packages/ec/d5/a659ca6f503b9379b930f13bc6b130c9f176469b73b9834296822a83a132/ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:32621c177bbf782ca5a18ba4d7af0f1082a3f6e517ac2a18b3974d4edf349680", size = 745831, upload_time = "2024-10-21T11:26:47.487Z" }, + { url = "https://files.pythonhosted.org/packages/db/5d/36619b61ffa2429eeaefaab4f3374666adf36ad8ac6330d855848d7d36fd/ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b82a7c94a498853aa0b272fd5bc67f29008da798d4f93a2f9f289feb8426a58d", size = 715692, upload_time = "2024-12-11T19:58:17.252Z" }, + { url = "https://files.pythonhosted.org/packages/b1/82/85cb92f15a4231c89b95dfe08b09eb6adca929ef7df7e17ab59902b6f589/ruamel.yaml.clib-0.2.12-cp312-cp312-win32.whl", hash = "sha256:e8c4ebfcfd57177b572e2040777b8abc537cdef58a2120e830124946aa9b42c5", size = 98777, upload_time = "2024-10-20T10:13:01.395Z" }, + { url = "https://files.pythonhosted.org/packages/d7/8f/c3654f6f1ddb75daf3922c3d8fc6005b1ab56671ad56ffb874d908bfa668/ruamel.yaml.clib-0.2.12-cp312-cp312-win_amd64.whl", hash = "sha256:0467c5965282c62203273b838ae77c0d29d7638c8a4e3a1c8bdd3602c10904e4", size = 115523, upload_time = "2024-10-20T10:13:02.768Z" }, + { url = "https://files.pythonhosted.org/packages/29/00/4864119668d71a5fa45678f380b5923ff410701565821925c69780356ffa/ruamel.yaml.clib-0.2.12-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:4c8c5d82f50bb53986a5e02d1b3092b03622c02c2eb78e29bec33fd9593bae1a", size = 132011, upload_time = "2024-10-20T10:13:04.377Z" }, + { url = "https://files.pythonhosted.org/packages/7f/5e/212f473a93ae78c669ffa0cb051e3fee1139cb2d385d2ae1653d64281507/ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux2014_aarch64.whl", hash = "sha256:e7e3736715fbf53e9be2a79eb4db68e4ed857017344d697e8b9749444ae57475", size = 642488, upload_time = "2024-10-20T10:13:05.906Z" }, + { url = "https://files.pythonhosted.org/packages/1f/8f/ecfbe2123ade605c49ef769788f79c38ddb1c8fa81e01f4dbf5cf1a44b16/ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b7e75b4965e1d4690e93021adfcecccbca7d61c7bddd8e22406ef2ff20d74ef", size = 745066, upload_time = "2024-10-20T10:13:07.26Z" }, + { url = "https://files.pythonhosted.org/packages/e2/a9/28f60726d29dfc01b8decdb385de4ced2ced9faeb37a847bd5cf26836815/ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96777d473c05ee3e5e3c3e999f5d23c6f4ec5b0c38c098b3a5229085f74236c6", size = 701785, upload_time = "2024-10-20T10:13:08.504Z" }, + { url = "https://files.pythonhosted.org/packages/84/7e/8e7ec45920daa7f76046578e4f677a3215fe8f18ee30a9cb7627a19d9b4c/ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:3bc2a80e6420ca8b7d3590791e2dfc709c88ab9152c00eeb511c9875ce5778bf", size = 693017, upload_time = "2024-10-21T11:26:48.866Z" }, + { url = "https://files.pythonhosted.org/packages/c5/b3/d650eaade4ca225f02a648321e1ab835b9d361c60d51150bac49063b83fa/ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:e188d2699864c11c36cdfdada94d781fd5d6b0071cd9c427bceb08ad3d7c70e1", size = 741270, upload_time = "2024-10-21T11:26:50.213Z" }, + { url = "https://files.pythonhosted.org/packages/87/b8/01c29b924dcbbed75cc45b30c30d565d763b9c4d540545a0eeecffb8f09c/ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4f6f3eac23941b32afccc23081e1f50612bdbe4e982012ef4f5797986828cd01", size = 709059, upload_time = "2024-12-11T19:58:18.846Z" }, + { url = "https://files.pythonhosted.org/packages/30/8c/ed73f047a73638257aa9377ad356bea4d96125b305c34a28766f4445cc0f/ruamel.yaml.clib-0.2.12-cp313-cp313-win32.whl", hash = "sha256:6442cb36270b3afb1b4951f060eccca1ce49f3d087ca1ca4563a6eb479cb3de6", size = 98583, upload_time = "2024-10-20T10:13:09.658Z" }, + { url = "https://files.pythonhosted.org/packages/b0/85/e8e751d8791564dd333d5d9a4eab0a7a115f7e349595417fd50ecae3395c/ruamel.yaml.clib-0.2.12-cp313-cp313-win_amd64.whl", hash = "sha256:e5b8daf27af0b90da7bb903a876477a9e6d7270be6146906b276605997c7e9a3", size = 115190, upload_time = "2024-10-20T10:13:10.66Z" }, ] [[package]] @@ -2755,9 +2817,9 @@ dependencies = [ { name = "click" }, { name = "requests" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/84/a4/b61c6e7a13b848fd985c9ed9acd525ccb1c2675e6cfa0d62292ae8015792/savepagenow-1.3.0.tar.gz", hash = "sha256:d0bc6bbe4606c700315015c3defcfab3c329208002b2b8cdc59f9b52996c6d3f", size = 42927 } +sdist = { url = "https://files.pythonhosted.org/packages/84/a4/b61c6e7a13b848fd985c9ed9acd525ccb1c2675e6cfa0d62292ae8015792/savepagenow-1.3.0.tar.gz", hash = "sha256:d0bc6bbe4606c700315015c3defcfab3c329208002b2b8cdc59f9b52996c6d3f", size = 42927, upload_time = "2023-07-01T13:31:49.607Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a6/8f/aea39979f8a7091ad2242a038a0e4c2b463593923ce598a914255dfba9ef/savepagenow-1.3.0-py2.py3-none-any.whl", hash = "sha256:4b0a4fff47254c160a37a20868ab53bb90da3d3f9f96086a9255b2375e39fcbf", size = 5649 }, + { url = "https://files.pythonhosted.org/packages/a6/8f/aea39979f8a7091ad2242a038a0e4c2b463593923ce598a914255dfba9ef/savepagenow-1.3.0-py2.py3-none-any.whl", hash = "sha256:4b0a4fff47254c160a37a20868ab53bb90da3d3f9f96086a9255b2375e39fcbf", size = 5649, upload_time = "2023-07-01T13:31:48.005Z" }, ] [[package]] @@ -2770,28 +2832,28 @@ dependencies = [ { name = "scipy" }, { name = "threadpoolctl" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/98/c2/a7855e41c9d285dfe86dc50b250978105dce513d6e459ea66a6aeb0e1e0c/scikit_learn-1.7.2.tar.gz", hash = "sha256:20e9e49ecd130598f1ca38a1d85090e1a600147b9c02fa6f15d69cb53d968fda", size = 7193136 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a7/aa/3996e2196075689afb9fce0410ebdb4a09099d7964d061d7213700204409/scikit_learn-1.7.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:8d91a97fa2b706943822398ab943cde71858a50245e31bc71dba62aab1d60a96", size = 9259818 }, - { url = "https://files.pythonhosted.org/packages/43/5d/779320063e88af9c4a7c2cf463ff11c21ac9c8bd730c4a294b0000b666c9/scikit_learn-1.7.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:acbc0f5fd2edd3432a22c69bed78e837c70cf896cd7993d71d51ba6708507476", size = 8636997 }, - { url = "https://files.pythonhosted.org/packages/5c/d0/0c577d9325b05594fdd33aa970bf53fb673f051a45496842caee13cfd7fe/scikit_learn-1.7.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e5bf3d930aee75a65478df91ac1225ff89cd28e9ac7bd1196853a9229b6adb0b", size = 9478381 }, - { url = "https://files.pythonhosted.org/packages/82/70/8bf44b933837ba8494ca0fc9a9ab60f1c13b062ad0197f60a56e2fc4c43e/scikit_learn-1.7.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b4d6e9deed1a47aca9fe2f267ab8e8fe82ee20b4526b2c0cd9e135cea10feb44", size = 9300296 }, - { url = "https://files.pythonhosted.org/packages/c6/99/ed35197a158f1fdc2fe7c3680e9c70d0128f662e1fee4ed495f4b5e13db0/scikit_learn-1.7.2-cp312-cp312-win_amd64.whl", hash = "sha256:6088aa475f0785e01bcf8529f55280a3d7d298679f50c0bb70a2364a82d0b290", size = 8731256 }, - { url = "https://files.pythonhosted.org/packages/ae/93/a3038cb0293037fd335f77f31fe053b89c72f17b1c8908c576c29d953e84/scikit_learn-1.7.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0b7dacaa05e5d76759fb071558a8b5130f4845166d88654a0f9bdf3eb57851b7", size = 9212382 }, - { url = "https://files.pythonhosted.org/packages/40/dd/9a88879b0c1104259136146e4742026b52df8540c39fec21a6383f8292c7/scikit_learn-1.7.2-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:abebbd61ad9e1deed54cca45caea8ad5f79e1b93173dece40bb8e0c658dbe6fe", size = 8592042 }, - { url = "https://files.pythonhosted.org/packages/46/af/c5e286471b7d10871b811b72ae794ac5fe2989c0a2df07f0ec723030f5f5/scikit_learn-1.7.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:502c18e39849c0ea1a5d681af1dbcf15f6cce601aebb657aabbfe84133c1907f", size = 9434180 }, - { url = "https://files.pythonhosted.org/packages/f1/fd/df59faa53312d585023b2da27e866524ffb8faf87a68516c23896c718320/scikit_learn-1.7.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7a4c328a71785382fe3fe676a9ecf2c86189249beff90bf85e22bdb7efaf9ae0", size = 9283660 }, - { url = "https://files.pythonhosted.org/packages/a7/c7/03000262759d7b6f38c836ff9d512f438a70d8a8ddae68ee80de72dcfb63/scikit_learn-1.7.2-cp313-cp313-win_amd64.whl", hash = "sha256:63a9afd6f7b229aad94618c01c252ce9e6fa97918c5ca19c9a17a087d819440c", size = 8702057 }, - { url = "https://files.pythonhosted.org/packages/55/87/ef5eb1f267084532c8e4aef98a28b6ffe7425acbfd64b5e2f2e066bc29b3/scikit_learn-1.7.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:9acb6c5e867447b4e1390930e3944a005e2cb115922e693c08a323421a6966e8", size = 9558731 }, - { url = "https://files.pythonhosted.org/packages/93/f8/6c1e3fc14b10118068d7938878a9f3f4e6d7b74a8ddb1e5bed65159ccda8/scikit_learn-1.7.2-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:2a41e2a0ef45063e654152ec9d8bcfc39f7afce35b08902bfe290c2498a67a6a", size = 9038852 }, - { url = "https://files.pythonhosted.org/packages/83/87/066cafc896ee540c34becf95d30375fe5cbe93c3b75a0ee9aa852cd60021/scikit_learn-1.7.2-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:98335fb98509b73385b3ab2bd0639b1f610541d3988ee675c670371d6a87aa7c", size = 9527094 }, - { url = "https://files.pythonhosted.org/packages/9c/2b/4903e1ccafa1f6453b1ab78413938c8800633988c838aa0be386cbb33072/scikit_learn-1.7.2-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:191e5550980d45449126e23ed1d5e9e24b2c68329ee1f691a3987476e115e09c", size = 9367436 }, - { url = "https://files.pythonhosted.org/packages/b5/aa/8444be3cfb10451617ff9d177b3c190288f4563e6c50ff02728be67ad094/scikit_learn-1.7.2-cp313-cp313t-win_amd64.whl", hash = "sha256:57dc4deb1d3762c75d685507fbd0bc17160144b2f2ba4ccea5dc285ab0d0e973", size = 9275749 }, - { url = "https://files.pythonhosted.org/packages/d9/82/dee5acf66837852e8e68df6d8d3a6cb22d3df997b733b032f513d95205b7/scikit_learn-1.7.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fa8f63940e29c82d1e67a45d5297bdebbcb585f5a5a50c4914cc2e852ab77f33", size = 9208906 }, - { url = "https://files.pythonhosted.org/packages/3c/30/9029e54e17b87cb7d50d51a5926429c683d5b4c1732f0507a6c3bed9bf65/scikit_learn-1.7.2-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:f95dc55b7902b91331fa4e5845dd5bde0580c9cd9612b1b2791b7e80c3d32615", size = 8627836 }, - { url = "https://files.pythonhosted.org/packages/60/18/4a52c635c71b536879f4b971c2cedf32c35ee78f48367885ed8025d1f7ee/scikit_learn-1.7.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9656e4a53e54578ad10a434dc1f993330568cfee176dff07112b8785fb413106", size = 9426236 }, - { url = "https://files.pythonhosted.org/packages/99/7e/290362f6ab582128c53445458a5befd471ed1ea37953d5bcf80604619250/scikit_learn-1.7.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96dc05a854add0e50d3f47a1ef21a10a595016da5b007c7d9cd9d0bffd1fcc61", size = 9312593 }, - { url = "https://files.pythonhosted.org/packages/8e/87/24f541b6d62b1794939ae6422f8023703bbf6900378b2b34e0b4384dfefd/scikit_learn-1.7.2-cp314-cp314-win_amd64.whl", hash = "sha256:bb24510ed3f9f61476181e4db51ce801e2ba37541def12dc9333b946fc7a9cf8", size = 8820007 }, +sdist = { url = "https://files.pythonhosted.org/packages/98/c2/a7855e41c9d285dfe86dc50b250978105dce513d6e459ea66a6aeb0e1e0c/scikit_learn-1.7.2.tar.gz", hash = "sha256:20e9e49ecd130598f1ca38a1d85090e1a600147b9c02fa6f15d69cb53d968fda", size = 7193136, upload_time = "2025-09-09T08:21:29.075Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a7/aa/3996e2196075689afb9fce0410ebdb4a09099d7964d061d7213700204409/scikit_learn-1.7.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:8d91a97fa2b706943822398ab943cde71858a50245e31bc71dba62aab1d60a96", size = 9259818, upload_time = "2025-09-09T08:20:43.19Z" }, + { url = "https://files.pythonhosted.org/packages/43/5d/779320063e88af9c4a7c2cf463ff11c21ac9c8bd730c4a294b0000b666c9/scikit_learn-1.7.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:acbc0f5fd2edd3432a22c69bed78e837c70cf896cd7993d71d51ba6708507476", size = 8636997, upload_time = "2025-09-09T08:20:45.468Z" }, + { url = "https://files.pythonhosted.org/packages/5c/d0/0c577d9325b05594fdd33aa970bf53fb673f051a45496842caee13cfd7fe/scikit_learn-1.7.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e5bf3d930aee75a65478df91ac1225ff89cd28e9ac7bd1196853a9229b6adb0b", size = 9478381, upload_time = "2025-09-09T08:20:47.982Z" }, + { url = "https://files.pythonhosted.org/packages/82/70/8bf44b933837ba8494ca0fc9a9ab60f1c13b062ad0197f60a56e2fc4c43e/scikit_learn-1.7.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b4d6e9deed1a47aca9fe2f267ab8e8fe82ee20b4526b2c0cd9e135cea10feb44", size = 9300296, upload_time = "2025-09-09T08:20:50.366Z" }, + { url = "https://files.pythonhosted.org/packages/c6/99/ed35197a158f1fdc2fe7c3680e9c70d0128f662e1fee4ed495f4b5e13db0/scikit_learn-1.7.2-cp312-cp312-win_amd64.whl", hash = "sha256:6088aa475f0785e01bcf8529f55280a3d7d298679f50c0bb70a2364a82d0b290", size = 8731256, upload_time = "2025-09-09T08:20:52.627Z" }, + { url = "https://files.pythonhosted.org/packages/ae/93/a3038cb0293037fd335f77f31fe053b89c72f17b1c8908c576c29d953e84/scikit_learn-1.7.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0b7dacaa05e5d76759fb071558a8b5130f4845166d88654a0f9bdf3eb57851b7", size = 9212382, upload_time = "2025-09-09T08:20:54.731Z" }, + { url = "https://files.pythonhosted.org/packages/40/dd/9a88879b0c1104259136146e4742026b52df8540c39fec21a6383f8292c7/scikit_learn-1.7.2-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:abebbd61ad9e1deed54cca45caea8ad5f79e1b93173dece40bb8e0c658dbe6fe", size = 8592042, upload_time = "2025-09-09T08:20:57.313Z" }, + { url = "https://files.pythonhosted.org/packages/46/af/c5e286471b7d10871b811b72ae794ac5fe2989c0a2df07f0ec723030f5f5/scikit_learn-1.7.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:502c18e39849c0ea1a5d681af1dbcf15f6cce601aebb657aabbfe84133c1907f", size = 9434180, upload_time = "2025-09-09T08:20:59.671Z" }, + { url = "https://files.pythonhosted.org/packages/f1/fd/df59faa53312d585023b2da27e866524ffb8faf87a68516c23896c718320/scikit_learn-1.7.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7a4c328a71785382fe3fe676a9ecf2c86189249beff90bf85e22bdb7efaf9ae0", size = 9283660, upload_time = "2025-09-09T08:21:01.71Z" }, + { url = "https://files.pythonhosted.org/packages/a7/c7/03000262759d7b6f38c836ff9d512f438a70d8a8ddae68ee80de72dcfb63/scikit_learn-1.7.2-cp313-cp313-win_amd64.whl", hash = "sha256:63a9afd6f7b229aad94618c01c252ce9e6fa97918c5ca19c9a17a087d819440c", size = 8702057, upload_time = "2025-09-09T08:21:04.234Z" }, + { url = "https://files.pythonhosted.org/packages/55/87/ef5eb1f267084532c8e4aef98a28b6ffe7425acbfd64b5e2f2e066bc29b3/scikit_learn-1.7.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:9acb6c5e867447b4e1390930e3944a005e2cb115922e693c08a323421a6966e8", size = 9558731, upload_time = "2025-09-09T08:21:06.381Z" }, + { url = "https://files.pythonhosted.org/packages/93/f8/6c1e3fc14b10118068d7938878a9f3f4e6d7b74a8ddb1e5bed65159ccda8/scikit_learn-1.7.2-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:2a41e2a0ef45063e654152ec9d8bcfc39f7afce35b08902bfe290c2498a67a6a", size = 9038852, upload_time = "2025-09-09T08:21:08.628Z" }, + { url = "https://files.pythonhosted.org/packages/83/87/066cafc896ee540c34becf95d30375fe5cbe93c3b75a0ee9aa852cd60021/scikit_learn-1.7.2-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:98335fb98509b73385b3ab2bd0639b1f610541d3988ee675c670371d6a87aa7c", size = 9527094, upload_time = "2025-09-09T08:21:11.486Z" }, + { url = "https://files.pythonhosted.org/packages/9c/2b/4903e1ccafa1f6453b1ab78413938c8800633988c838aa0be386cbb33072/scikit_learn-1.7.2-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:191e5550980d45449126e23ed1d5e9e24b2c68329ee1f691a3987476e115e09c", size = 9367436, upload_time = "2025-09-09T08:21:13.602Z" }, + { url = "https://files.pythonhosted.org/packages/b5/aa/8444be3cfb10451617ff9d177b3c190288f4563e6c50ff02728be67ad094/scikit_learn-1.7.2-cp313-cp313t-win_amd64.whl", hash = "sha256:57dc4deb1d3762c75d685507fbd0bc17160144b2f2ba4ccea5dc285ab0d0e973", size = 9275749, upload_time = "2025-09-09T08:21:15.96Z" }, + { url = "https://files.pythonhosted.org/packages/d9/82/dee5acf66837852e8e68df6d8d3a6cb22d3df997b733b032f513d95205b7/scikit_learn-1.7.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fa8f63940e29c82d1e67a45d5297bdebbcb585f5a5a50c4914cc2e852ab77f33", size = 9208906, upload_time = "2025-09-09T08:21:18.557Z" }, + { url = "https://files.pythonhosted.org/packages/3c/30/9029e54e17b87cb7d50d51a5926429c683d5b4c1732f0507a6c3bed9bf65/scikit_learn-1.7.2-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:f95dc55b7902b91331fa4e5845dd5bde0580c9cd9612b1b2791b7e80c3d32615", size = 8627836, upload_time = "2025-09-09T08:21:20.695Z" }, + { url = "https://files.pythonhosted.org/packages/60/18/4a52c635c71b536879f4b971c2cedf32c35ee78f48367885ed8025d1f7ee/scikit_learn-1.7.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9656e4a53e54578ad10a434dc1f993330568cfee176dff07112b8785fb413106", size = 9426236, upload_time = "2025-09-09T08:21:22.645Z" }, + { url = "https://files.pythonhosted.org/packages/99/7e/290362f6ab582128c53445458a5befd471ed1ea37953d5bcf80604619250/scikit_learn-1.7.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96dc05a854add0e50d3f47a1ef21a10a595016da5b007c7d9cd9d0bffd1fcc61", size = 9312593, upload_time = "2025-09-09T08:21:24.65Z" }, + { url = "https://files.pythonhosted.org/packages/8e/87/24f541b6d62b1794939ae6422f8023703bbf6900378b2b34e0b4384dfefd/scikit_learn-1.7.2-cp314-cp314-win_amd64.whl", hash = "sha256:bb24510ed3f9f61476181e4db51ce801e2ba37541def12dc9333b946fc7a9cf8", size = 8820007, upload_time = "2025-09-09T08:21:26.713Z" }, ] [[package]] @@ -2801,103 +2863,103 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/4c/3b/546a6f0bfe791bbb7f8d591613454d15097e53f906308ec6f7c1ce588e8e/scipy-1.16.2.tar.gz", hash = "sha256:af029b153d243a80afb6eabe40b0a07f8e35c9adc269c019f364ad747f826a6b", size = 30580599 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/8d/6396e00db1282279a4ddd507c5f5e11f606812b608ee58517ce8abbf883f/scipy-1.16.2-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:89d6c100fa5c48472047632e06f0876b3c4931aac1f4291afc81a3644316bb0d", size = 36646259 }, - { url = "https://files.pythonhosted.org/packages/3b/93/ea9edd7e193fceb8eef149804491890bde73fb169c896b61aa3e2d1e4e77/scipy-1.16.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:ca748936cd579d3f01928b30a17dc474550b01272d8046e3e1ee593f23620371", size = 28888976 }, - { url = "https://files.pythonhosted.org/packages/91/4d/281fddc3d80fd738ba86fd3aed9202331180b01e2c78eaae0642f22f7e83/scipy-1.16.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:fac4f8ce2ddb40e2e3d0f7ec36d2a1e7f92559a2471e59aec37bd8d9de01fec0", size = 20879905 }, - { url = "https://files.pythonhosted.org/packages/69/40/b33b74c84606fd301b2915f0062e45733c6ff5708d121dd0deaa8871e2d0/scipy-1.16.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:033570f1dcefd79547a88e18bccacff025c8c647a330381064f561d43b821232", size = 23553066 }, - { url = "https://files.pythonhosted.org/packages/55/a7/22c739e2f21a42cc8f16bc76b47cff4ed54fbe0962832c589591c2abec34/scipy-1.16.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ea3421209bf00c8a5ef2227de496601087d8f638a2363ee09af059bd70976dc1", size = 33336407 }, - { url = "https://files.pythonhosted.org/packages/53/11/a0160990b82999b45874dc60c0c183d3a3a969a563fffc476d5a9995c407/scipy-1.16.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f66bd07ba6f84cd4a380b41d1bf3c59ea488b590a2ff96744845163309ee8e2f", size = 35673281 }, - { url = "https://files.pythonhosted.org/packages/96/53/7ef48a4cfcf243c3d0f1643f5887c81f29fdf76911c4e49331828e19fc0a/scipy-1.16.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5e9feab931bd2aea4a23388c962df6468af3d808ddf2d40f94a81c5dc38f32ef", size = 36004222 }, - { url = "https://files.pythonhosted.org/packages/49/7f/71a69e0afd460049d41c65c630c919c537815277dfea214031005f474d78/scipy-1.16.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:03dfc75e52f72cf23ec2ced468645321407faad8f0fe7b1f5b49264adbc29cb1", size = 38664586 }, - { url = "https://files.pythonhosted.org/packages/34/95/20e02ca66fb495a95fba0642fd48e0c390d0ece9b9b14c6e931a60a12dea/scipy-1.16.2-cp312-cp312-win_amd64.whl", hash = "sha256:0ce54e07bbb394b417457409a64fd015be623f36e330ac49306433ffe04bc97e", size = 38550641 }, - { url = "https://files.pythonhosted.org/packages/92/ad/13646b9beb0a95528ca46d52b7babafbe115017814a611f2065ee4e61d20/scipy-1.16.2-cp312-cp312-win_arm64.whl", hash = "sha256:2a8ffaa4ac0df81a0b94577b18ee079f13fecdb924df3328fc44a7dc5ac46851", size = 25456070 }, - { url = "https://files.pythonhosted.org/packages/c1/27/c5b52f1ee81727a9fc457f5ac1e9bf3d6eab311805ea615c83c27ba06400/scipy-1.16.2-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:84f7bf944b43e20b8a894f5fe593976926744f6c185bacfcbdfbb62736b5cc70", size = 36604856 }, - { url = "https://files.pythonhosted.org/packages/32/a9/15c20d08e950b540184caa8ced675ba1128accb0e09c653780ba023a4110/scipy-1.16.2-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:5c39026d12edc826a1ef2ad35ad1e6d7f087f934bb868fc43fa3049c8b8508f9", size = 28864626 }, - { url = "https://files.pythonhosted.org/packages/4c/fc/ea36098df653cca26062a627c1a94b0de659e97127c8491e18713ca0e3b9/scipy-1.16.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:e52729ffd45b68777c5319560014d6fd251294200625d9d70fd8626516fc49f5", size = 20855689 }, - { url = "https://files.pythonhosted.org/packages/dc/6f/d0b53be55727f3e6d7c72687ec18ea6d0047cf95f1f77488b99a2bafaee1/scipy-1.16.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:024dd4a118cccec09ca3209b7e8e614931a6ffb804b2a601839499cb88bdf925", size = 23512151 }, - { url = "https://files.pythonhosted.org/packages/11/85/bf7dab56e5c4b1d3d8eef92ca8ede788418ad38a7dc3ff50262f00808760/scipy-1.16.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7a5dc7ee9c33019973a470556081b0fd3c9f4c44019191039f9769183141a4d9", size = 33329824 }, - { url = "https://files.pythonhosted.org/packages/da/6a/1a927b14ddc7714111ea51f4e568203b2bb6ed59bdd036d62127c1a360c8/scipy-1.16.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c2275ff105e508942f99d4e3bc56b6ef5e4b3c0af970386ca56b777608ce95b7", size = 35681881 }, - { url = "https://files.pythonhosted.org/packages/c1/5f/331148ea5780b4fcc7007a4a6a6ee0a0c1507a796365cc642d4d226e1c3a/scipy-1.16.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:af80196eaa84f033e48444d2e0786ec47d328ba00c71e4299b602235ffef9acb", size = 36006219 }, - { url = "https://files.pythonhosted.org/packages/46/3a/e991aa9d2aec723b4a8dcfbfc8365edec5d5e5f9f133888067f1cbb7dfc1/scipy-1.16.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9fb1eb735fe3d6ed1f89918224e3385fbf6f9e23757cacc35f9c78d3b712dd6e", size = 38682147 }, - { url = "https://files.pythonhosted.org/packages/a1/57/0f38e396ad19e41b4c5db66130167eef8ee620a49bc7d0512e3bb67e0cab/scipy-1.16.2-cp313-cp313-win_amd64.whl", hash = "sha256:fda714cf45ba43c9d3bae8f2585c777f64e3f89a2e073b668b32ede412d8f52c", size = 38520766 }, - { url = "https://files.pythonhosted.org/packages/1b/a5/85d3e867b6822d331e26c862a91375bb7746a0b458db5effa093d34cdb89/scipy-1.16.2-cp313-cp313-win_arm64.whl", hash = "sha256:2f5350da923ccfd0b00e07c3e5cfb316c1c0d6c1d864c07a72d092e9f20db104", size = 25451169 }, - { url = "https://files.pythonhosted.org/packages/09/d9/60679189bcebda55992d1a45498de6d080dcaf21ce0c8f24f888117e0c2d/scipy-1.16.2-cp313-cp313t-macosx_10_14_x86_64.whl", hash = "sha256:53d8d2ee29b925344c13bda64ab51785f016b1b9617849dac10897f0701b20c1", size = 37012682 }, - { url = "https://files.pythonhosted.org/packages/83/be/a99d13ee4d3b7887a96f8c71361b9659ba4ef34da0338f14891e102a127f/scipy-1.16.2-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:9e05e33657efb4c6a9d23bd8300101536abd99c85cca82da0bffff8d8764d08a", size = 29389926 }, - { url = "https://files.pythonhosted.org/packages/bf/0a/130164a4881cec6ca8c00faf3b57926f28ed429cd6001a673f83c7c2a579/scipy-1.16.2-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:7fe65b36036357003b3ef9d37547abeefaa353b237e989c21027b8ed62b12d4f", size = 21381152 }, - { url = "https://files.pythonhosted.org/packages/47/a6/503ffb0310ae77fba874e10cddfc4a1280bdcca1d13c3751b8c3c2996cf8/scipy-1.16.2-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:6406d2ac6d40b861cccf57f49592f9779071655e9f75cd4f977fa0bdd09cb2e4", size = 23914410 }, - { url = "https://files.pythonhosted.org/packages/fa/c7/1147774bcea50d00c02600aadaa919facbd8537997a62496270133536ed6/scipy-1.16.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ff4dc42bd321991fbf611c23fc35912d690f731c9914bf3af8f417e64aca0f21", size = 33481880 }, - { url = "https://files.pythonhosted.org/packages/6a/74/99d5415e4c3e46b2586f30cdbecb95e101c7192628a484a40dd0d163811a/scipy-1.16.2-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:654324826654d4d9133e10675325708fb954bc84dae6e9ad0a52e75c6b1a01d7", size = 35791425 }, - { url = "https://files.pythonhosted.org/packages/1b/ee/a6559de7c1cc710e938c0355d9d4fbcd732dac4d0d131959d1f3b63eb29c/scipy-1.16.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:63870a84cd15c44e65220eaed2dac0e8f8b26bbb991456a033c1d9abfe8a94f8", size = 36178622 }, - { url = "https://files.pythonhosted.org/packages/4e/7b/f127a5795d5ba8ece4e0dce7d4a9fb7cb9e4f4757137757d7a69ab7d4f1a/scipy-1.16.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:fa01f0f6a3050fa6a9771a95d5faccc8e2f5a92b4a2e5440a0fa7264a2398472", size = 38783985 }, - { url = "https://files.pythonhosted.org/packages/3e/9f/bc81c1d1e033951eb5912cd3750cc005943afa3e65a725d2443a3b3c4347/scipy-1.16.2-cp313-cp313t-win_amd64.whl", hash = "sha256:116296e89fba96f76353a8579820c2512f6e55835d3fad7780fece04367de351", size = 38631367 }, - { url = "https://files.pythonhosted.org/packages/d6/5e/2cc7555fd81d01814271412a1d59a289d25f8b63208a0a16c21069d55d3e/scipy-1.16.2-cp313-cp313t-win_arm64.whl", hash = "sha256:98e22834650be81d42982360382b43b17f7ba95e0e6993e2a4f5b9ad9283a94d", size = 25787992 }, - { url = "https://files.pythonhosted.org/packages/8b/ac/ad8951250516db71619f0bd3b2eb2448db04b720a003dd98619b78b692c0/scipy-1.16.2-cp314-cp314-macosx_10_14_x86_64.whl", hash = "sha256:567e77755019bb7461513c87f02bb73fb65b11f049aaaa8ca17cfaa5a5c45d77", size = 36595109 }, - { url = "https://files.pythonhosted.org/packages/ff/f6/5779049ed119c5b503b0f3dc6d6f3f68eefc3a9190d4ad4c276f854f051b/scipy-1.16.2-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:17d9bb346194e8967296621208fcdfd39b55498ef7d2f376884d5ac47cec1a70", size = 28859110 }, - { url = "https://files.pythonhosted.org/packages/82/09/9986e410ae38bf0a0c737ff8189ac81a93b8e42349aac009891c054403d7/scipy-1.16.2-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:0a17541827a9b78b777d33b623a6dcfe2ef4a25806204d08ead0768f4e529a88", size = 20850110 }, - { url = "https://files.pythonhosted.org/packages/0d/ad/485cdef2d9215e2a7df6d61b81d2ac073dfacf6ae24b9ae87274c4e936ae/scipy-1.16.2-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:d7d4c6ba016ffc0f9568d012f5f1eb77ddd99412aea121e6fa8b4c3b7cbad91f", size = 23497014 }, - { url = "https://files.pythonhosted.org/packages/a7/74/f6a852e5d581122b8f0f831f1d1e32fb8987776ed3658e95c377d308ed86/scipy-1.16.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:9702c4c023227785c779cba2e1d6f7635dbb5b2e0936cdd3a4ecb98d78fd41eb", size = 33401155 }, - { url = "https://files.pythonhosted.org/packages/d9/f5/61d243bbc7c6e5e4e13dde9887e84a5cbe9e0f75fd09843044af1590844e/scipy-1.16.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d1cdf0ac28948d225decdefcc45ad7dd91716c29ab56ef32f8e0d50657dffcc7", size = 35691174 }, - { url = "https://files.pythonhosted.org/packages/03/99/59933956331f8cc57e406cdb7a483906c74706b156998f322913e789c7e1/scipy-1.16.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:70327d6aa572a17c2941cdfb20673f82e536e91850a2e4cb0c5b858b690e1548", size = 36070752 }, - { url = "https://files.pythonhosted.org/packages/c6/7d/00f825cfb47ee19ef74ecf01244b43e95eae74e7e0ff796026ea7cd98456/scipy-1.16.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5221c0b2a4b58aa7c4ed0387d360fd90ee9086d383bb34d9f2789fafddc8a936", size = 38701010 }, - { url = "https://files.pythonhosted.org/packages/e4/9f/b62587029980378304ba5a8563d376c96f40b1e133daacee76efdcae32de/scipy-1.16.2-cp314-cp314-win_amd64.whl", hash = "sha256:f5a85d7b2b708025af08f060a496dd261055b617d776fc05a1a1cc69e09fe9ff", size = 39360061 }, - { url = "https://files.pythonhosted.org/packages/82/04/7a2f1609921352c7fbee0815811b5050582f67f19983096c4769867ca45f/scipy-1.16.2-cp314-cp314-win_arm64.whl", hash = "sha256:2cc73a33305b4b24556957d5857d6253ce1e2dcd67fa0ff46d87d1670b3e1e1d", size = 26126914 }, - { url = "https://files.pythonhosted.org/packages/51/b9/60929ce350c16b221928725d2d1d7f86cf96b8bc07415547057d1196dc92/scipy-1.16.2-cp314-cp314t-macosx_10_14_x86_64.whl", hash = "sha256:9ea2a3fed83065d77367775d689401a703d0f697420719ee10c0780bcab594d8", size = 37013193 }, - { url = "https://files.pythonhosted.org/packages/2a/41/ed80e67782d4bc5fc85a966bc356c601afddd175856ba7c7bb6d9490607e/scipy-1.16.2-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:7280d926f11ca945c3ef92ba960fa924e1465f8d07ce3a9923080363390624c4", size = 29390172 }, - { url = "https://files.pythonhosted.org/packages/c4/a3/2f673ace4090452696ccded5f5f8efffb353b8f3628f823a110e0170b605/scipy-1.16.2-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:8afae1756f6a1fe04636407ef7dbece33d826a5d462b74f3d0eb82deabefd831", size = 21381326 }, - { url = "https://files.pythonhosted.org/packages/42/bf/59df61c5d51395066c35836b78136accf506197617c8662e60ea209881e1/scipy-1.16.2-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:5c66511f29aa8d233388e7416a3f20d5cae7a2744d5cee2ecd38c081f4e861b3", size = 23915036 }, - { url = "https://files.pythonhosted.org/packages/91/c3/edc7b300dc16847ad3672f1a6f3f7c5d13522b21b84b81c265f4f2760d4a/scipy-1.16.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:efe6305aeaa0e96b0ccca5ff647a43737d9a092064a3894e46c414db84bc54ac", size = 33484341 }, - { url = "https://files.pythonhosted.org/packages/26/c7/24d1524e72f06ff141e8d04b833c20db3021020563272ccb1b83860082a9/scipy-1.16.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7f3a337d9ae06a1e8d655ee9d8ecb835ea5ddcdcbd8d23012afa055ab014f374", size = 35790840 }, - { url = "https://files.pythonhosted.org/packages/aa/b7/5aaad984eeedd56858dc33d75efa59e8ce798d918e1033ef62d2708f2c3d/scipy-1.16.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:bab3605795d269067d8ce78a910220262711b753de8913d3deeaedb5dded3bb6", size = 36174716 }, - { url = "https://files.pythonhosted.org/packages/fd/c2/e276a237acb09824822b0ada11b028ed4067fdc367a946730979feacb870/scipy-1.16.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:b0348d8ddb55be2a844c518cd8cc8deeeb8aeba707cf834db5758fc89b476a2c", size = 38790088 }, - { url = "https://files.pythonhosted.org/packages/c6/b4/5c18a766e8353015439f3780f5fc473f36f9762edc1a2e45da3ff5a31b21/scipy-1.16.2-cp314-cp314t-win_amd64.whl", hash = "sha256:26284797e38b8a75e14ea6631d29bda11e76ceaa6ddb6fdebbfe4c4d90faf2f9", size = 39457455 }, - { url = "https://files.pythonhosted.org/packages/97/30/2f9a5243008f76dfc5dee9a53dfb939d9b31e16ce4bd4f2e628bfc5d89d2/scipy-1.16.2-cp314-cp314t-win_arm64.whl", hash = "sha256:d2a4472c231328d4de38d5f1f68fdd6d28a615138f842580a8a321b5845cf779", size = 26448374 }, +sdist = { url = "https://files.pythonhosted.org/packages/4c/3b/546a6f0bfe791bbb7f8d591613454d15097e53f906308ec6f7c1ce588e8e/scipy-1.16.2.tar.gz", hash = "sha256:af029b153d243a80afb6eabe40b0a07f8e35c9adc269c019f364ad747f826a6b", size = 30580599, upload_time = "2025-09-11T17:48:08.271Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/8d/6396e00db1282279a4ddd507c5f5e11f606812b608ee58517ce8abbf883f/scipy-1.16.2-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:89d6c100fa5c48472047632e06f0876b3c4931aac1f4291afc81a3644316bb0d", size = 36646259, upload_time = "2025-09-11T17:40:39.329Z" }, + { url = "https://files.pythonhosted.org/packages/3b/93/ea9edd7e193fceb8eef149804491890bde73fb169c896b61aa3e2d1e4e77/scipy-1.16.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:ca748936cd579d3f01928b30a17dc474550b01272d8046e3e1ee593f23620371", size = 28888976, upload_time = "2025-09-11T17:40:46.82Z" }, + { url = "https://files.pythonhosted.org/packages/91/4d/281fddc3d80fd738ba86fd3aed9202331180b01e2c78eaae0642f22f7e83/scipy-1.16.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:fac4f8ce2ddb40e2e3d0f7ec36d2a1e7f92559a2471e59aec37bd8d9de01fec0", size = 20879905, upload_time = "2025-09-11T17:40:52.545Z" }, + { url = "https://files.pythonhosted.org/packages/69/40/b33b74c84606fd301b2915f0062e45733c6ff5708d121dd0deaa8871e2d0/scipy-1.16.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:033570f1dcefd79547a88e18bccacff025c8c647a330381064f561d43b821232", size = 23553066, upload_time = "2025-09-11T17:40:59.014Z" }, + { url = "https://files.pythonhosted.org/packages/55/a7/22c739e2f21a42cc8f16bc76b47cff4ed54fbe0962832c589591c2abec34/scipy-1.16.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ea3421209bf00c8a5ef2227de496601087d8f638a2363ee09af059bd70976dc1", size = 33336407, upload_time = "2025-09-11T17:41:06.796Z" }, + { url = "https://files.pythonhosted.org/packages/53/11/a0160990b82999b45874dc60c0c183d3a3a969a563fffc476d5a9995c407/scipy-1.16.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f66bd07ba6f84cd4a380b41d1bf3c59ea488b590a2ff96744845163309ee8e2f", size = 35673281, upload_time = "2025-09-11T17:41:15.055Z" }, + { url = "https://files.pythonhosted.org/packages/96/53/7ef48a4cfcf243c3d0f1643f5887c81f29fdf76911c4e49331828e19fc0a/scipy-1.16.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5e9feab931bd2aea4a23388c962df6468af3d808ddf2d40f94a81c5dc38f32ef", size = 36004222, upload_time = "2025-09-11T17:41:23.868Z" }, + { url = "https://files.pythonhosted.org/packages/49/7f/71a69e0afd460049d41c65c630c919c537815277dfea214031005f474d78/scipy-1.16.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:03dfc75e52f72cf23ec2ced468645321407faad8f0fe7b1f5b49264adbc29cb1", size = 38664586, upload_time = "2025-09-11T17:41:31.021Z" }, + { url = "https://files.pythonhosted.org/packages/34/95/20e02ca66fb495a95fba0642fd48e0c390d0ece9b9b14c6e931a60a12dea/scipy-1.16.2-cp312-cp312-win_amd64.whl", hash = "sha256:0ce54e07bbb394b417457409a64fd015be623f36e330ac49306433ffe04bc97e", size = 38550641, upload_time = "2025-09-11T17:41:36.61Z" }, + { url = "https://files.pythonhosted.org/packages/92/ad/13646b9beb0a95528ca46d52b7babafbe115017814a611f2065ee4e61d20/scipy-1.16.2-cp312-cp312-win_arm64.whl", hash = "sha256:2a8ffaa4ac0df81a0b94577b18ee079f13fecdb924df3328fc44a7dc5ac46851", size = 25456070, upload_time = "2025-09-11T17:41:41.3Z" }, + { url = "https://files.pythonhosted.org/packages/c1/27/c5b52f1ee81727a9fc457f5ac1e9bf3d6eab311805ea615c83c27ba06400/scipy-1.16.2-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:84f7bf944b43e20b8a894f5fe593976926744f6c185bacfcbdfbb62736b5cc70", size = 36604856, upload_time = "2025-09-11T17:41:47.695Z" }, + { url = "https://files.pythonhosted.org/packages/32/a9/15c20d08e950b540184caa8ced675ba1128accb0e09c653780ba023a4110/scipy-1.16.2-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:5c39026d12edc826a1ef2ad35ad1e6d7f087f934bb868fc43fa3049c8b8508f9", size = 28864626, upload_time = "2025-09-11T17:41:52.642Z" }, + { url = "https://files.pythonhosted.org/packages/4c/fc/ea36098df653cca26062a627c1a94b0de659e97127c8491e18713ca0e3b9/scipy-1.16.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:e52729ffd45b68777c5319560014d6fd251294200625d9d70fd8626516fc49f5", size = 20855689, upload_time = "2025-09-11T17:41:57.886Z" }, + { url = "https://files.pythonhosted.org/packages/dc/6f/d0b53be55727f3e6d7c72687ec18ea6d0047cf95f1f77488b99a2bafaee1/scipy-1.16.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:024dd4a118cccec09ca3209b7e8e614931a6ffb804b2a601839499cb88bdf925", size = 23512151, upload_time = "2025-09-11T17:42:02.303Z" }, + { url = "https://files.pythonhosted.org/packages/11/85/bf7dab56e5c4b1d3d8eef92ca8ede788418ad38a7dc3ff50262f00808760/scipy-1.16.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7a5dc7ee9c33019973a470556081b0fd3c9f4c44019191039f9769183141a4d9", size = 33329824, upload_time = "2025-09-11T17:42:07.549Z" }, + { url = "https://files.pythonhosted.org/packages/da/6a/1a927b14ddc7714111ea51f4e568203b2bb6ed59bdd036d62127c1a360c8/scipy-1.16.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c2275ff105e508942f99d4e3bc56b6ef5e4b3c0af970386ca56b777608ce95b7", size = 35681881, upload_time = "2025-09-11T17:42:13.255Z" }, + { url = "https://files.pythonhosted.org/packages/c1/5f/331148ea5780b4fcc7007a4a6a6ee0a0c1507a796365cc642d4d226e1c3a/scipy-1.16.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:af80196eaa84f033e48444d2e0786ec47d328ba00c71e4299b602235ffef9acb", size = 36006219, upload_time = "2025-09-11T17:42:18.765Z" }, + { url = "https://files.pythonhosted.org/packages/46/3a/e991aa9d2aec723b4a8dcfbfc8365edec5d5e5f9f133888067f1cbb7dfc1/scipy-1.16.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9fb1eb735fe3d6ed1f89918224e3385fbf6f9e23757cacc35f9c78d3b712dd6e", size = 38682147, upload_time = "2025-09-11T17:42:25.177Z" }, + { url = "https://files.pythonhosted.org/packages/a1/57/0f38e396ad19e41b4c5db66130167eef8ee620a49bc7d0512e3bb67e0cab/scipy-1.16.2-cp313-cp313-win_amd64.whl", hash = "sha256:fda714cf45ba43c9d3bae8f2585c777f64e3f89a2e073b668b32ede412d8f52c", size = 38520766, upload_time = "2025-09-11T17:43:25.342Z" }, + { url = "https://files.pythonhosted.org/packages/1b/a5/85d3e867b6822d331e26c862a91375bb7746a0b458db5effa093d34cdb89/scipy-1.16.2-cp313-cp313-win_arm64.whl", hash = "sha256:2f5350da923ccfd0b00e07c3e5cfb316c1c0d6c1d864c07a72d092e9f20db104", size = 25451169, upload_time = "2025-09-11T17:43:30.198Z" }, + { url = "https://files.pythonhosted.org/packages/09/d9/60679189bcebda55992d1a45498de6d080dcaf21ce0c8f24f888117e0c2d/scipy-1.16.2-cp313-cp313t-macosx_10_14_x86_64.whl", hash = "sha256:53d8d2ee29b925344c13bda64ab51785f016b1b9617849dac10897f0701b20c1", size = 37012682, upload_time = "2025-09-11T17:42:30.677Z" }, + { url = "https://files.pythonhosted.org/packages/83/be/a99d13ee4d3b7887a96f8c71361b9659ba4ef34da0338f14891e102a127f/scipy-1.16.2-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:9e05e33657efb4c6a9d23bd8300101536abd99c85cca82da0bffff8d8764d08a", size = 29389926, upload_time = "2025-09-11T17:42:35.845Z" }, + { url = "https://files.pythonhosted.org/packages/bf/0a/130164a4881cec6ca8c00faf3b57926f28ed429cd6001a673f83c7c2a579/scipy-1.16.2-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:7fe65b36036357003b3ef9d37547abeefaa353b237e989c21027b8ed62b12d4f", size = 21381152, upload_time = "2025-09-11T17:42:40.07Z" }, + { url = "https://files.pythonhosted.org/packages/47/a6/503ffb0310ae77fba874e10cddfc4a1280bdcca1d13c3751b8c3c2996cf8/scipy-1.16.2-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:6406d2ac6d40b861cccf57f49592f9779071655e9f75cd4f977fa0bdd09cb2e4", size = 23914410, upload_time = "2025-09-11T17:42:44.313Z" }, + { url = "https://files.pythonhosted.org/packages/fa/c7/1147774bcea50d00c02600aadaa919facbd8537997a62496270133536ed6/scipy-1.16.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ff4dc42bd321991fbf611c23fc35912d690f731c9914bf3af8f417e64aca0f21", size = 33481880, upload_time = "2025-09-11T17:42:49.325Z" }, + { url = "https://files.pythonhosted.org/packages/6a/74/99d5415e4c3e46b2586f30cdbecb95e101c7192628a484a40dd0d163811a/scipy-1.16.2-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:654324826654d4d9133e10675325708fb954bc84dae6e9ad0a52e75c6b1a01d7", size = 35791425, upload_time = "2025-09-11T17:42:54.711Z" }, + { url = "https://files.pythonhosted.org/packages/1b/ee/a6559de7c1cc710e938c0355d9d4fbcd732dac4d0d131959d1f3b63eb29c/scipy-1.16.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:63870a84cd15c44e65220eaed2dac0e8f8b26bbb991456a033c1d9abfe8a94f8", size = 36178622, upload_time = "2025-09-11T17:43:00.375Z" }, + { url = "https://files.pythonhosted.org/packages/4e/7b/f127a5795d5ba8ece4e0dce7d4a9fb7cb9e4f4757137757d7a69ab7d4f1a/scipy-1.16.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:fa01f0f6a3050fa6a9771a95d5faccc8e2f5a92b4a2e5440a0fa7264a2398472", size = 38783985, upload_time = "2025-09-11T17:43:06.661Z" }, + { url = "https://files.pythonhosted.org/packages/3e/9f/bc81c1d1e033951eb5912cd3750cc005943afa3e65a725d2443a3b3c4347/scipy-1.16.2-cp313-cp313t-win_amd64.whl", hash = "sha256:116296e89fba96f76353a8579820c2512f6e55835d3fad7780fece04367de351", size = 38631367, upload_time = "2025-09-11T17:43:14.44Z" }, + { url = "https://files.pythonhosted.org/packages/d6/5e/2cc7555fd81d01814271412a1d59a289d25f8b63208a0a16c21069d55d3e/scipy-1.16.2-cp313-cp313t-win_arm64.whl", hash = "sha256:98e22834650be81d42982360382b43b17f7ba95e0e6993e2a4f5b9ad9283a94d", size = 25787992, upload_time = "2025-09-11T17:43:19.745Z" }, + { url = "https://files.pythonhosted.org/packages/8b/ac/ad8951250516db71619f0bd3b2eb2448db04b720a003dd98619b78b692c0/scipy-1.16.2-cp314-cp314-macosx_10_14_x86_64.whl", hash = "sha256:567e77755019bb7461513c87f02bb73fb65b11f049aaaa8ca17cfaa5a5c45d77", size = 36595109, upload_time = "2025-09-11T17:43:35.713Z" }, + { url = "https://files.pythonhosted.org/packages/ff/f6/5779049ed119c5b503b0f3dc6d6f3f68eefc3a9190d4ad4c276f854f051b/scipy-1.16.2-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:17d9bb346194e8967296621208fcdfd39b55498ef7d2f376884d5ac47cec1a70", size = 28859110, upload_time = "2025-09-11T17:43:40.814Z" }, + { url = "https://files.pythonhosted.org/packages/82/09/9986e410ae38bf0a0c737ff8189ac81a93b8e42349aac009891c054403d7/scipy-1.16.2-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:0a17541827a9b78b777d33b623a6dcfe2ef4a25806204d08ead0768f4e529a88", size = 20850110, upload_time = "2025-09-11T17:43:44.981Z" }, + { url = "https://files.pythonhosted.org/packages/0d/ad/485cdef2d9215e2a7df6d61b81d2ac073dfacf6ae24b9ae87274c4e936ae/scipy-1.16.2-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:d7d4c6ba016ffc0f9568d012f5f1eb77ddd99412aea121e6fa8b4c3b7cbad91f", size = 23497014, upload_time = "2025-09-11T17:43:49.074Z" }, + { url = "https://files.pythonhosted.org/packages/a7/74/f6a852e5d581122b8f0f831f1d1e32fb8987776ed3658e95c377d308ed86/scipy-1.16.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:9702c4c023227785c779cba2e1d6f7635dbb5b2e0936cdd3a4ecb98d78fd41eb", size = 33401155, upload_time = "2025-09-11T17:43:54.661Z" }, + { url = "https://files.pythonhosted.org/packages/d9/f5/61d243bbc7c6e5e4e13dde9887e84a5cbe9e0f75fd09843044af1590844e/scipy-1.16.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d1cdf0ac28948d225decdefcc45ad7dd91716c29ab56ef32f8e0d50657dffcc7", size = 35691174, upload_time = "2025-09-11T17:44:00.101Z" }, + { url = "https://files.pythonhosted.org/packages/03/99/59933956331f8cc57e406cdb7a483906c74706b156998f322913e789c7e1/scipy-1.16.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:70327d6aa572a17c2941cdfb20673f82e536e91850a2e4cb0c5b858b690e1548", size = 36070752, upload_time = "2025-09-11T17:44:05.619Z" }, + { url = "https://files.pythonhosted.org/packages/c6/7d/00f825cfb47ee19ef74ecf01244b43e95eae74e7e0ff796026ea7cd98456/scipy-1.16.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5221c0b2a4b58aa7c4ed0387d360fd90ee9086d383bb34d9f2789fafddc8a936", size = 38701010, upload_time = "2025-09-11T17:44:11.322Z" }, + { url = "https://files.pythonhosted.org/packages/e4/9f/b62587029980378304ba5a8563d376c96f40b1e133daacee76efdcae32de/scipy-1.16.2-cp314-cp314-win_amd64.whl", hash = "sha256:f5a85d7b2b708025af08f060a496dd261055b617d776fc05a1a1cc69e09fe9ff", size = 39360061, upload_time = "2025-09-11T17:45:09.814Z" }, + { url = "https://files.pythonhosted.org/packages/82/04/7a2f1609921352c7fbee0815811b5050582f67f19983096c4769867ca45f/scipy-1.16.2-cp314-cp314-win_arm64.whl", hash = "sha256:2cc73a33305b4b24556957d5857d6253ce1e2dcd67fa0ff46d87d1670b3e1e1d", size = 26126914, upload_time = "2025-09-11T17:45:14.73Z" }, + { url = "https://files.pythonhosted.org/packages/51/b9/60929ce350c16b221928725d2d1d7f86cf96b8bc07415547057d1196dc92/scipy-1.16.2-cp314-cp314t-macosx_10_14_x86_64.whl", hash = "sha256:9ea2a3fed83065d77367775d689401a703d0f697420719ee10c0780bcab594d8", size = 37013193, upload_time = "2025-09-11T17:44:16.757Z" }, + { url = "https://files.pythonhosted.org/packages/2a/41/ed80e67782d4bc5fc85a966bc356c601afddd175856ba7c7bb6d9490607e/scipy-1.16.2-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:7280d926f11ca945c3ef92ba960fa924e1465f8d07ce3a9923080363390624c4", size = 29390172, upload_time = "2025-09-11T17:44:21.783Z" }, + { url = "https://files.pythonhosted.org/packages/c4/a3/2f673ace4090452696ccded5f5f8efffb353b8f3628f823a110e0170b605/scipy-1.16.2-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:8afae1756f6a1fe04636407ef7dbece33d826a5d462b74f3d0eb82deabefd831", size = 21381326, upload_time = "2025-09-11T17:44:25.982Z" }, + { url = "https://files.pythonhosted.org/packages/42/bf/59df61c5d51395066c35836b78136accf506197617c8662e60ea209881e1/scipy-1.16.2-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:5c66511f29aa8d233388e7416a3f20d5cae7a2744d5cee2ecd38c081f4e861b3", size = 23915036, upload_time = "2025-09-11T17:44:30.527Z" }, + { url = "https://files.pythonhosted.org/packages/91/c3/edc7b300dc16847ad3672f1a6f3f7c5d13522b21b84b81c265f4f2760d4a/scipy-1.16.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:efe6305aeaa0e96b0ccca5ff647a43737d9a092064a3894e46c414db84bc54ac", size = 33484341, upload_time = "2025-09-11T17:44:35.981Z" }, + { url = "https://files.pythonhosted.org/packages/26/c7/24d1524e72f06ff141e8d04b833c20db3021020563272ccb1b83860082a9/scipy-1.16.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7f3a337d9ae06a1e8d655ee9d8ecb835ea5ddcdcbd8d23012afa055ab014f374", size = 35790840, upload_time = "2025-09-11T17:44:41.76Z" }, + { url = "https://files.pythonhosted.org/packages/aa/b7/5aaad984eeedd56858dc33d75efa59e8ce798d918e1033ef62d2708f2c3d/scipy-1.16.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:bab3605795d269067d8ce78a910220262711b753de8913d3deeaedb5dded3bb6", size = 36174716, upload_time = "2025-09-11T17:44:47.316Z" }, + { url = "https://files.pythonhosted.org/packages/fd/c2/e276a237acb09824822b0ada11b028ed4067fdc367a946730979feacb870/scipy-1.16.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:b0348d8ddb55be2a844c518cd8cc8deeeb8aeba707cf834db5758fc89b476a2c", size = 38790088, upload_time = "2025-09-11T17:44:53.011Z" }, + { url = "https://files.pythonhosted.org/packages/c6/b4/5c18a766e8353015439f3780f5fc473f36f9762edc1a2e45da3ff5a31b21/scipy-1.16.2-cp314-cp314t-win_amd64.whl", hash = "sha256:26284797e38b8a75e14ea6631d29bda11e76ceaa6ddb6fdebbfe4c4d90faf2f9", size = 39457455, upload_time = "2025-09-11T17:44:58.899Z" }, + { url = "https://files.pythonhosted.org/packages/97/30/2f9a5243008f76dfc5dee9a53dfb939d9b31e16ce4bd4f2e628bfc5d89d2/scipy-1.16.2-cp314-cp314t-win_arm64.whl", hash = "sha256:d2a4472c231328d4de38d5f1f68fdd6d28a615138f842580a8a321b5845cf779", size = 26448374, upload_time = "2025-09-11T17:45:03.45Z" }, ] [[package]] name = "shellingham" version = "1.5.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310 } +sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310, upload_time = "2023-10-24T04:13:40.426Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755 }, + { url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755, upload_time = "2023-10-24T04:13:38.866Z" }, ] [[package]] name = "simpleeval" version = "1.0.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ff/6f/15be211749430f52f2c8f0c69158a6fc961c03aac93fa28d44d1a6f5ebc7/simpleeval-1.0.3.tar.gz", hash = "sha256:67bbf246040ac3b57c29cf048657b9cf31d4e7b9d6659684daa08ca8f1e45829", size = 24358 } +sdist = { url = "https://files.pythonhosted.org/packages/ff/6f/15be211749430f52f2c8f0c69158a6fc961c03aac93fa28d44d1a6f5ebc7/simpleeval-1.0.3.tar.gz", hash = "sha256:67bbf246040ac3b57c29cf048657b9cf31d4e7b9d6659684daa08ca8f1e45829", size = 24358, upload_time = "2024-11-02T10:29:46.912Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/e9/e58082fbb8cecbb6fb4133033c40cc50c248b1a331582be3a0f39138d65b/simpleeval-1.0.3-py3-none-any.whl", hash = "sha256:e3bdbb8c82c26297c9a153902d0fd1858a6c3774bf53ff4f134788c3f2035c38", size = 15762 }, + { url = "https://files.pythonhosted.org/packages/a0/e9/e58082fbb8cecbb6fb4133033c40cc50c248b1a331582be3a0f39138d65b/simpleeval-1.0.3-py3-none-any.whl", hash = "sha256:e3bdbb8c82c26297c9a153902d0fd1858a6c3774bf53ff4f134788c3f2035c38", size = 15762, upload_time = "2024-11-02T10:29:45.706Z" }, ] [[package]] name = "six" version = "1.17.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031 } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload_time = "2024-12-04T17:35:28.174Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050 }, + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload_time = "2024-12-04T17:35:26.475Z" }, ] [[package]] name = "smmap" version = "5.0.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/44/cd/a040c4b3119bbe532e5b0732286f805445375489fceaec1f48306068ee3b/smmap-5.0.2.tar.gz", hash = "sha256:26ea65a03958fa0c8a1c7e8c7a58fdc77221b8910f6be2131affade476898ad5", size = 22329 } +sdist = { url = "https://files.pythonhosted.org/packages/44/cd/a040c4b3119bbe532e5b0732286f805445375489fceaec1f48306068ee3b/smmap-5.0.2.tar.gz", hash = "sha256:26ea65a03958fa0c8a1c7e8c7a58fdc77221b8910f6be2131affade476898ad5", size = 22329, upload_time = "2025-01-02T07:14:40.909Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-py3-none-any.whl", hash = "sha256:b30115f0def7d7531d22a0fb6502488d879e75b260a9db4d0819cfb25403af5e", size = 24303 }, + { url = "https://files.pythonhosted.org/packages/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-py3-none-any.whl", hash = "sha256:b30115f0def7d7531d22a0fb6502488d879e75b260a9db4d0819cfb25403af5e", size = 24303, upload_time = "2025-01-02T07:14:38.724Z" }, ] [[package]] name = "soupsieve" version = "2.8" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6d/e6/21ccce3262dd4889aa3332e5a119a3491a95e8f60939870a3a035aabac0d/soupsieve-2.8.tar.gz", hash = "sha256:e2dd4a40a628cb5f28f6d4b0db8800b8f581b65bb380b97de22ba5ca8d72572f", size = 103472 } +sdist = { url = "https://files.pythonhosted.org/packages/6d/e6/21ccce3262dd4889aa3332e5a119a3491a95e8f60939870a3a035aabac0d/soupsieve-2.8.tar.gz", hash = "sha256:e2dd4a40a628cb5f28f6d4b0db8800b8f581b65bb380b97de22ba5ca8d72572f", size = 103472, upload_time = "2025-08-27T15:39:51.78Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/14/a0/bb38d3b76b8cae341dad93a2dd83ab7462e6dbcdd84d43f54ee60a8dc167/soupsieve-2.8-py3-none-any.whl", hash = "sha256:0cc76456a30e20f5d7f2e14a98a4ae2ee4e5abdc7c5ea0aafe795f344bc7984c", size = 36679 }, + { url = "https://files.pythonhosted.org/packages/14/a0/bb38d3b76b8cae341dad93a2dd83ab7462e6dbcdd84d43f54ee60a8dc167/soupsieve-2.8-py3-none-any.whl", hash = "sha256:0cc76456a30e20f5d7f2e14a98a4ae2ee4e5abdc7c5ea0aafe795f344bc7984c", size = 36679, upload_time = "2025-08-27T15:39:50.179Z" }, ] [[package]] @@ -2909,18 +2971,18 @@ dependencies = [ { name = "executing" }, { name = "pure-eval" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/28/e3/55dcc2cfbc3ca9c29519eb6884dd1415ecb53b0e934862d3559ddcb7e20b/stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9", size = 44707 } +sdist = { url = "https://files.pythonhosted.org/packages/28/e3/55dcc2cfbc3ca9c29519eb6884dd1415ecb53b0e934862d3559ddcb7e20b/stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9", size = 44707, upload_time = "2023-09-30T13:58:05.479Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521 }, + { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521, upload_time = "2023-09-30T13:58:03.53Z" }, ] [[package]] name = "structlog" version = "25.4.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/79/b9/6e672db4fec07349e7a8a8172c1a6ae235c58679ca29c3f86a61b5e59ff3/structlog-25.4.0.tar.gz", hash = "sha256:186cd1b0a8ae762e29417095664adf1d6a31702160a46dacb7796ea82f7409e4", size = 1369138 } +sdist = { url = "https://files.pythonhosted.org/packages/79/b9/6e672db4fec07349e7a8a8172c1a6ae235c58679ca29c3f86a61b5e59ff3/structlog-25.4.0.tar.gz", hash = "sha256:186cd1b0a8ae762e29417095664adf1d6a31702160a46dacb7796ea82f7409e4", size = 1369138, upload_time = "2025-06-02T08:21:12.971Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/4a/97ee6973e3a73c74c8120d59829c3861ea52210667ec3e7a16045c62b64d/structlog-25.4.0-py3-none-any.whl", hash = "sha256:fe809ff5c27e557d14e613f45ca441aabda051d119ee5a0102aaba6ce40eed2c", size = 68720 }, + { url = "https://files.pythonhosted.org/packages/a0/4a/97ee6973e3a73c74c8120d59829c3861ea52210667ec3e7a16045c62b64d/structlog-25.4.0-py3-none-any.whl", hash = "sha256:fe809ff5c27e557d14e613f45ca441aabda051d119ee5a0102aaba6ce40eed2c", size = 68720, upload_time = "2025-06-02T08:21:11.43Z" }, ] [[package]] @@ -2932,18 +2994,18 @@ dependencies = [ { name = "pyyaml" }, { name = "xlsxwriter" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/23/2d/5b5c0127e959a715c5365b3b491846fba5bc1fb7f94370cc3a4fb3f51f68/tableschema-to-template-0.0.13.tar.gz", hash = "sha256:2d8d2250efb840e0ecb9012c5e879a82ef68f65dd86bdff574200fdfc978ff1c", size = 13564 } +sdist = { url = "https://files.pythonhosted.org/packages/23/2d/5b5c0127e959a715c5365b3b491846fba5bc1fb7f94370cc3a4fb3f51f68/tableschema-to-template-0.0.13.tar.gz", hash = "sha256:2d8d2250efb840e0ecb9012c5e879a82ef68f65dd86bdff574200fdfc978ff1c", size = 13564, upload_time = "2023-02-01T21:53:17.238Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9f/7f/3c129377d9b815c0bb92b8c24bbecabe5e6b13b831f38924f80d2e5b40b2/tableschema_to_template-0.0.13-py3-none-any.whl", hash = "sha256:4905500a4235740654230c3223629d26fdccb7a0457ec1d0110ea102c4f1146c", size = 14860 }, + { url = "https://files.pythonhosted.org/packages/9f/7f/3c129377d9b815c0bb92b8c24bbecabe5e6b13b831f38924f80d2e5b40b2/tableschema_to_template-0.0.13-py3-none-any.whl", hash = "sha256:4905500a4235740654230c3223629d26fdccb7a0457ec1d0110ea102c4f1146c", size = 14860, upload_time = "2023-02-01T21:53:16.02Z" }, ] [[package]] name = "tabulate" version = "0.9.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ec/fe/802052aecb21e3797b8f7902564ab6ea0d60ff8ca23952079064155d1ae1/tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c", size = 81090 } +sdist = { url = "https://files.pythonhosted.org/packages/ec/fe/802052aecb21e3797b8f7902564ab6ea0d60ff8ca23952079064155d1ae1/tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c", size = 81090, upload_time = "2022-10-06T17:21:48.54Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/40/44/4a5f08c96eb108af5cb50b41f76142f0afa346dfa99d5296fe7202a11854/tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f", size = 35252 }, + { url = "https://files.pythonhosted.org/packages/40/44/4a5f08c96eb108af5cb50b41f76142f0afa346dfa99d5296fe7202a11854/tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f", size = 35252, upload_time = "2022-10-06T17:21:44.262Z" }, ] [[package]] @@ -3003,7 +3065,7 @@ requires-dist = [ { name = "pandas", specifier = ">=2.2.3" }, { name = "pint", specifier = ">=0.24.4" }, { name = "pydantic", specifier = ">=2.11.7" }, - { name = "pydeflate", specifier = ">=2.1.3" }, + { name = "pydeflate", specifier = ">=2.3.3" }, { name = "requests", specifier = ">=2.32.3" }, { name = "savepagenow", specifier = ">=1.3.0" }, { name = "scipy", specifier = ">=1.16.1" }, @@ -3046,27 +3108,27 @@ docs = [ name = "tenacity" version = "9.1.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0a/d4/2b0cd0fe285e14b36db076e78c93766ff1d529d70408bd1d2a5a84f1d929/tenacity-9.1.2.tar.gz", hash = "sha256:1169d376c297e7de388d18b4481760d478b0e99a777cad3a9c86e556f4b697cb", size = 48036 } +sdist = { url = "https://files.pythonhosted.org/packages/0a/d4/2b0cd0fe285e14b36db076e78c93766ff1d529d70408bd1d2a5a84f1d929/tenacity-9.1.2.tar.gz", hash = "sha256:1169d376c297e7de388d18b4481760d478b0e99a777cad3a9c86e556f4b697cb", size = 48036, upload_time = "2025-04-02T08:25:09.966Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e5/30/643397144bfbfec6f6ef821f36f33e57d35946c44a2352d3c9f0ae847619/tenacity-9.1.2-py3-none-any.whl", hash = "sha256:f77bf36710d8b73a50b2dd155c97b870017ad21afe6ab300326b0371b3b05138", size = 28248 }, + { url = "https://files.pythonhosted.org/packages/e5/30/643397144bfbfec6f6ef821f36f33e57d35946c44a2352d3c9f0ae847619/tenacity-9.1.2-py3-none-any.whl", hash = "sha256:f77bf36710d8b73a50b2dd155c97b870017ad21afe6ab300326b0371b3b05138", size = 28248, upload_time = "2025-04-02T08:25:07.678Z" }, ] [[package]] name = "text-unidecode" version = "1.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ab/e2/e9a00f0ccb71718418230718b3d900e71a5d16e701a3dae079a21e9cd8f8/text-unidecode-1.3.tar.gz", hash = "sha256:bad6603bb14d279193107714b288be206cac565dfa49aa5b105294dd5c4aab93", size = 76885 } +sdist = { url = "https://files.pythonhosted.org/packages/ab/e2/e9a00f0ccb71718418230718b3d900e71a5d16e701a3dae079a21e9cd8f8/text-unidecode-1.3.tar.gz", hash = "sha256:bad6603bb14d279193107714b288be206cac565dfa49aa5b105294dd5c4aab93", size = 76885, upload_time = "2019-08-30T21:36:45.405Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a6/a5/c0b6468d3824fe3fde30dbb5e1f687b291608f9473681bbf7dabbf5a87d7/text_unidecode-1.3-py2.py3-none-any.whl", hash = "sha256:1311f10e8b895935241623731c2ba64f4c455287888b18189350b67134a822e8", size = 78154 }, + { url = "https://files.pythonhosted.org/packages/a6/a5/c0b6468d3824fe3fde30dbb5e1f687b291608f9473681bbf7dabbf5a87d7/text_unidecode-1.3-py2.py3-none-any.whl", hash = "sha256:1311f10e8b895935241623731c2ba64f4c455287888b18189350b67134a822e8", size = 78154, upload_time = "2019-08-30T21:37:03.543Z" }, ] [[package]] name = "threadpoolctl" version = "3.6.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b7/4d/08c89e34946fce2aec4fbb45c9016efd5f4d7f24af8e5d93296e935631d8/threadpoolctl-3.6.0.tar.gz", hash = "sha256:8ab8b4aa3491d812b623328249fab5302a68d2d71745c8a4c719a2fcaba9f44e", size = 21274 } +sdist = { url = "https://files.pythonhosted.org/packages/b7/4d/08c89e34946fce2aec4fbb45c9016efd5f4d7f24af8e5d93296e935631d8/threadpoolctl-3.6.0.tar.gz", hash = "sha256:8ab8b4aa3491d812b623328249fab5302a68d2d71745c8a4c719a2fcaba9f44e", size = 21274, upload_time = "2025-03-13T13:49:23.031Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl", hash = "sha256:43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb", size = 18638 }, + { url = "https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl", hash = "sha256:43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb", size = 18638, upload_time = "2025-03-13T13:49:21.846Z" }, ] [[package]] @@ -3076,37 +3138,37 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "webencodings" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/7a/fd/7a5ee21fd08ff70d3d33a5781c255cbe779659bd03278feb98b19ee550f4/tinycss2-1.4.0.tar.gz", hash = "sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7", size = 87085 } +sdist = { url = "https://files.pythonhosted.org/packages/7a/fd/7a5ee21fd08ff70d3d33a5781c255cbe779659bd03278feb98b19ee550f4/tinycss2-1.4.0.tar.gz", hash = "sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7", size = 87085, upload_time = "2024-10-24T14:58:29.895Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e6/34/ebdc18bae6aa14fbee1a08b63c015c72b64868ff7dae68808ab500c492e2/tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289", size = 26610 }, + { url = "https://files.pythonhosted.org/packages/e6/34/ebdc18bae6aa14fbee1a08b63c015c72b64868ff7dae68808ab500c492e2/tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289", size = 26610, upload_time = "2024-10-24T14:58:28.029Z" }, ] [[package]] name = "tomlkit" version = "0.13.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/cc/18/0bbf3884e9eaa38819ebe46a7bd25dcd56b67434402b66a58c4b8e552575/tomlkit-0.13.3.tar.gz", hash = "sha256:430cf247ee57df2b94ee3fbe588e71d362a941ebb545dec29b53961d61add2a1", size = 185207 } +sdist = { url = "https://files.pythonhosted.org/packages/cc/18/0bbf3884e9eaa38819ebe46a7bd25dcd56b67434402b66a58c4b8e552575/tomlkit-0.13.3.tar.gz", hash = "sha256:430cf247ee57df2b94ee3fbe588e71d362a941ebb545dec29b53961d61add2a1", size = 185207, upload_time = "2025-06-05T07:13:44.947Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/bd/75/8539d011f6be8e29f339c42e633aae3cb73bffa95dd0f9adec09b9c58e85/tomlkit-0.13.3-py3-none-any.whl", hash = "sha256:c89c649d79ee40629a9fda55f8ace8c6a1b42deb912b2a8fd8d942ddadb606b0", size = 38901 }, + { url = "https://files.pythonhosted.org/packages/bd/75/8539d011f6be8e29f339c42e633aae3cb73bffa95dd0f9adec09b9c58e85/tomlkit-0.13.3-py3-none-any.whl", hash = "sha256:c89c649d79ee40629a9fda55f8ace8c6a1b42deb912b2a8fd8d942ddadb606b0", size = 38901, upload_time = "2025-06-05T07:13:43.546Z" }, ] [[package]] name = "tornado" version = "6.5.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/09/ce/1eb500eae19f4648281bb2186927bb062d2438c2e5093d1360391afd2f90/tornado-6.5.2.tar.gz", hash = "sha256:ab53c8f9a0fa351e2c0741284e06c7a45da86afb544133201c5cc8578eb076a0", size = 510821 } +sdist = { url = "https://files.pythonhosted.org/packages/09/ce/1eb500eae19f4648281bb2186927bb062d2438c2e5093d1360391afd2f90/tornado-6.5.2.tar.gz", hash = "sha256:ab53c8f9a0fa351e2c0741284e06c7a45da86afb544133201c5cc8578eb076a0", size = 510821, upload_time = "2025-08-08T18:27:00.78Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f6/48/6a7529df2c9cc12efd2e8f5dd219516184d703b34c06786809670df5b3bd/tornado-6.5.2-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:2436822940d37cde62771cff8774f4f00b3c8024fe482e16ca8387b8a2724db6", size = 442563 }, - { url = "https://files.pythonhosted.org/packages/f2/b5/9b575a0ed3e50b00c40b08cbce82eb618229091d09f6d14bce80fc01cb0b/tornado-6.5.2-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:583a52c7aa94ee046854ba81d9ebb6c81ec0fd30386d96f7640c96dad45a03ef", size = 440729 }, - { url = "https://files.pythonhosted.org/packages/1b/4e/619174f52b120efcf23633c817fd3fed867c30bff785e2cd5a53a70e483c/tornado-6.5.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b0fe179f28d597deab2842b86ed4060deec7388f1fd9c1b4a41adf8af058907e", size = 444295 }, - { url = "https://files.pythonhosted.org/packages/95/fa/87b41709552bbd393c85dd18e4e3499dcd8983f66e7972926db8d96aa065/tornado-6.5.2-cp39-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b186e85d1e3536d69583d2298423744740986018e393d0321df7340e71898882", size = 443644 }, - { url = "https://files.pythonhosted.org/packages/f9/41/fb15f06e33d7430ca89420283a8762a4e6b8025b800ea51796ab5e6d9559/tornado-6.5.2-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e792706668c87709709c18b353da1f7662317b563ff69f00bab83595940c7108", size = 443878 }, - { url = "https://files.pythonhosted.org/packages/11/92/fe6d57da897776ad2e01e279170ea8ae726755b045fe5ac73b75357a5a3f/tornado-6.5.2-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:06ceb1300fd70cb20e43b1ad8aaee0266e69e7ced38fa910ad2e03285009ce7c", size = 444549 }, - { url = "https://files.pythonhosted.org/packages/9b/02/c8f4f6c9204526daf3d760f4aa555a7a33ad0e60843eac025ccfd6ff4a93/tornado-6.5.2-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:74db443e0f5251be86cbf37929f84d8c20c27a355dd452a5cfa2aada0d001ec4", size = 443973 }, - { url = "https://files.pythonhosted.org/packages/ae/2d/f5f5707b655ce2317190183868cd0f6822a1121b4baeae509ceb9590d0bd/tornado-6.5.2-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b5e735ab2889d7ed33b32a459cac490eda71a1ba6857b0118de476ab6c366c04", size = 443954 }, - { url = "https://files.pythonhosted.org/packages/e8/59/593bd0f40f7355806bf6573b47b8c22f8e1374c9b6fd03114bd6b7a3dcfd/tornado-6.5.2-cp39-abi3-win32.whl", hash = "sha256:c6f29e94d9b37a95013bb669616352ddb82e3bfe8326fccee50583caebc8a5f0", size = 445023 }, - { url = "https://files.pythonhosted.org/packages/c7/2a/f609b420c2f564a748a2d80ebfb2ee02a73ca80223af712fca591386cafb/tornado-6.5.2-cp39-abi3-win_amd64.whl", hash = "sha256:e56a5af51cc30dd2cae649429af65ca2f6571da29504a07995175df14c18f35f", size = 445427 }, - { url = "https://files.pythonhosted.org/packages/5e/4f/e1f65e8f8c76d73658b33d33b81eed4322fb5085350e4328d5c956f0c8f9/tornado-6.5.2-cp39-abi3-win_arm64.whl", hash = "sha256:d6c33dc3672e3a1f3618eb63b7ef4683a7688e7b9e6e8f0d9aa5726360a004af", size = 444456 }, + { url = "https://files.pythonhosted.org/packages/f6/48/6a7529df2c9cc12efd2e8f5dd219516184d703b34c06786809670df5b3bd/tornado-6.5.2-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:2436822940d37cde62771cff8774f4f00b3c8024fe482e16ca8387b8a2724db6", size = 442563, upload_time = "2025-08-08T18:26:42.945Z" }, + { url = "https://files.pythonhosted.org/packages/f2/b5/9b575a0ed3e50b00c40b08cbce82eb618229091d09f6d14bce80fc01cb0b/tornado-6.5.2-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:583a52c7aa94ee046854ba81d9ebb6c81ec0fd30386d96f7640c96dad45a03ef", size = 440729, upload_time = "2025-08-08T18:26:44.473Z" }, + { url = "https://files.pythonhosted.org/packages/1b/4e/619174f52b120efcf23633c817fd3fed867c30bff785e2cd5a53a70e483c/tornado-6.5.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b0fe179f28d597deab2842b86ed4060deec7388f1fd9c1b4a41adf8af058907e", size = 444295, upload_time = "2025-08-08T18:26:46.021Z" }, + { url = "https://files.pythonhosted.org/packages/95/fa/87b41709552bbd393c85dd18e4e3499dcd8983f66e7972926db8d96aa065/tornado-6.5.2-cp39-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b186e85d1e3536d69583d2298423744740986018e393d0321df7340e71898882", size = 443644, upload_time = "2025-08-08T18:26:47.625Z" }, + { url = "https://files.pythonhosted.org/packages/f9/41/fb15f06e33d7430ca89420283a8762a4e6b8025b800ea51796ab5e6d9559/tornado-6.5.2-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e792706668c87709709c18b353da1f7662317b563ff69f00bab83595940c7108", size = 443878, upload_time = "2025-08-08T18:26:50.599Z" }, + { url = "https://files.pythonhosted.org/packages/11/92/fe6d57da897776ad2e01e279170ea8ae726755b045fe5ac73b75357a5a3f/tornado-6.5.2-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:06ceb1300fd70cb20e43b1ad8aaee0266e69e7ced38fa910ad2e03285009ce7c", size = 444549, upload_time = "2025-08-08T18:26:51.864Z" }, + { url = "https://files.pythonhosted.org/packages/9b/02/c8f4f6c9204526daf3d760f4aa555a7a33ad0e60843eac025ccfd6ff4a93/tornado-6.5.2-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:74db443e0f5251be86cbf37929f84d8c20c27a355dd452a5cfa2aada0d001ec4", size = 443973, upload_time = "2025-08-08T18:26:53.625Z" }, + { url = "https://files.pythonhosted.org/packages/ae/2d/f5f5707b655ce2317190183868cd0f6822a1121b4baeae509ceb9590d0bd/tornado-6.5.2-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b5e735ab2889d7ed33b32a459cac490eda71a1ba6857b0118de476ab6c366c04", size = 443954, upload_time = "2025-08-08T18:26:55.072Z" }, + { url = "https://files.pythonhosted.org/packages/e8/59/593bd0f40f7355806bf6573b47b8c22f8e1374c9b6fd03114bd6b7a3dcfd/tornado-6.5.2-cp39-abi3-win32.whl", hash = "sha256:c6f29e94d9b37a95013bb669616352ddb82e3bfe8326fccee50583caebc8a5f0", size = 445023, upload_time = "2025-08-08T18:26:56.677Z" }, + { url = "https://files.pythonhosted.org/packages/c7/2a/f609b420c2f564a748a2d80ebfb2ee02a73ca80223af712fca591386cafb/tornado-6.5.2-cp39-abi3-win_amd64.whl", hash = "sha256:e56a5af51cc30dd2cae649429af65ca2f6571da29504a07995175df14c18f35f", size = 445427, upload_time = "2025-08-08T18:26:57.91Z" }, + { url = "https://files.pythonhosted.org/packages/5e/4f/e1f65e8f8c76d73658b33d33b81eed4322fb5085350e4328d5c956f0c8f9/tornado-6.5.2-cp39-abi3-win_arm64.whl", hash = "sha256:d6c33dc3672e3a1f3618eb63b7ef4683a7688e7b9e6e8f0d9aa5726360a004af", size = 444456, upload_time = "2025-08-08T18:26:59.207Z" }, ] [[package]] @@ -3116,18 +3178,18 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a8/4b/29b4ef32e036bb34e4ab51796dd745cdba7ed47ad142a9f4a1eb8e0c744d/tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2", size = 169737 } +sdist = { url = "https://files.pythonhosted.org/packages/a8/4b/29b4ef32e036bb34e4ab51796dd745cdba7ed47ad142a9f4a1eb8e0c744d/tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2", size = 169737, upload_time = "2024-11-24T20:12:22.481Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2", size = 78540 }, + { url = "https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2", size = 78540, upload_time = "2024-11-24T20:12:19.698Z" }, ] [[package]] name = "traitlets" version = "5.14.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/eb/79/72064e6a701c2183016abbbfedaba506d81e30e232a68c9f0d6f6fcd1574/traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7", size = 161621 } +sdist = { url = "https://files.pythonhosted.org/packages/eb/79/72064e6a701c2183016abbbfedaba506d81e30e232a68c9f0d6f6fcd1574/traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7", size = 161621, upload_time = "2024-04-19T11:11:49.746Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359 }, + { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359, upload_time = "2024-04-19T11:11:46.763Z" }, ] [[package]] @@ -3143,9 +3205,21 @@ dependencies = [ { name = "scikit-learn" }, { name = "tqdm" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/e7/67/c69f8c46fd46e01480ca10280ab612253255a729a850e2d61fdf0ea08258/tsam-2.3.9.tar.gz", hash = "sha256:1f219eef05788d199af1ff61bd5a3d9217a26f9279988b1ef4b7d5af2757ed15", size = 223755 } +sdist = { url = "https://files.pythonhosted.org/packages/e7/67/c69f8c46fd46e01480ca10280ab612253255a729a850e2d61fdf0ea08258/tsam-2.3.9.tar.gz", hash = "sha256:1f219eef05788d199af1ff61bd5a3d9217a26f9279988b1ef4b7d5af2757ed15", size = 223755, upload_time = "2025-06-16T07:30:03.015Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/44/e7/5c072b990bddccc4a78a186d641e50257993c50658cddc0d4bf300acd1e1/tsam-2.3.9-py3-none-any.whl", hash = "sha256:edcc4febb9e1dacc028bc819d710974ede8f563467c3d235a250f46416f93a1b", size = 36816, upload_time = "2025-06-16T07:30:01.562Z" }, +] + +[[package]] +name = "typeguard" +version = "4.4.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c7/68/71c1a15b5f65f40e91b65da23b8224dad41349894535a97f63a52e462196/typeguard-4.4.4.tar.gz", hash = "sha256:3a7fd2dffb705d4d0efaed4306a704c89b9dee850b688f060a8b1615a79e5f74", size = 75203, upload_time = "2025-06-18T09:56:07.624Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/44/e7/5c072b990bddccc4a78a186d641e50257993c50658cddc0d4bf300acd1e1/tsam-2.3.9-py3-none-any.whl", hash = "sha256:edcc4febb9e1dacc028bc819d710974ede8f563467c3d235a250f46416f93a1b", size = 36816 }, + { url = "https://files.pythonhosted.org/packages/1b/a9/e3aee762739c1d7528da1c3e06d518503f8b6c439c35549b53735ba52ead/typeguard-4.4.4-py3-none-any.whl", hash = "sha256:b5f562281b6bfa1f5492470464730ef001646128b180769880468bd84b68b09e", size = 34874, upload_time = "2025-06-18T09:56:05.999Z" }, ] [[package]] @@ -3158,18 +3232,31 @@ dependencies = [ { name = "shellingham" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/03/ea/9cc57c3c627fd7a6a0907ea371019fe74c3ec00e3cf209a6864140a602ad/typer-0.19.1.tar.gz", hash = "sha256:cb881433a4b15dacc875bb0583d1a61e78497806741f9aba792abcab390c03e6", size = 104802 } +sdist = { url = "https://files.pythonhosted.org/packages/03/ea/9cc57c3c627fd7a6a0907ea371019fe74c3ec00e3cf209a6864140a602ad/typer-0.19.1.tar.gz", hash = "sha256:cb881433a4b15dacc875bb0583d1a61e78497806741f9aba792abcab390c03e6", size = 104802, upload_time = "2025-09-20T08:59:22.692Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1e/fa/6473c00b5eb26a2ba427813107699d3e6f4e1a4afad3f7494b17bdef3422/typer-0.19.1-py3-none-any.whl", hash = "sha256:914b2b39a1da4bafca5f30637ca26fa622a5bf9f515e5fdc772439f306d5682a", size = 46876 }, + { url = "https://files.pythonhosted.org/packages/1e/fa/6473c00b5eb26a2ba427813107699d3e6f4e1a4afad3f7494b17bdef3422/typer-0.19.1-py3-none-any.whl", hash = "sha256:914b2b39a1da4bafca5f30637ca26fa622a5bf9f515e5fdc772439f306d5682a", size = 46876, upload_time = "2025-09-20T08:59:21.153Z" }, ] [[package]] name = "typing-extensions" version = "4.15.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391 } +sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391, upload_time = "2025-08-25T13:49:26.313Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614 }, + { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614, upload_time = "2025-08-25T13:49:24.86Z" }, +] + +[[package]] +name = "typing-inspect" +version = "0.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mypy-extensions" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/dc/74/1789779d91f1961fa9438e9a8710cdae6bd138c80d7303996933d117264a/typing_inspect-0.9.0.tar.gz", hash = "sha256:b23fc42ff6f6ef6954e4852c1fb512cdd18dbea03134f91f856a95ccc9461f78", size = 13825, upload_time = "2023-05-24T20:25:47.612Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/65/f3/107a22063bf27bdccf2024833d3445f4eea42b2e598abfbd46f6a63b6cb0/typing_inspect-0.9.0-py3-none-any.whl", hash = "sha256:9ee6fc59062311ef8547596ab6b955e1b8aa46242d854bfc78f4f6b0eff35f9f", size = 8827, upload_time = "2023-05-24T20:25:45.287Z" }, ] [[package]] @@ -3179,45 +3266,57 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f8/b1/0c11f5058406b3af7609f121aaa6b609744687f1d158b3c3a5bf4cc94238/typing_inspection-0.4.1.tar.gz", hash = "sha256:6ae134cc0203c33377d43188d4064e9b357dba58cff3185f22924610e70a9d28", size = 75726 } +sdist = { url = "https://files.pythonhosted.org/packages/f8/b1/0c11f5058406b3af7609f121aaa6b609744687f1d158b3c3a5bf4cc94238/typing_inspection-0.4.1.tar.gz", hash = "sha256:6ae134cc0203c33377d43188d4064e9b357dba58cff3185f22924610e70a9d28", size = 75726, upload_time = "2025-05-21T18:55:23.885Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/17/69/cd203477f944c353c31bade965f880aa1061fd6bf05ded0726ca845b6ff7/typing_inspection-0.4.1-py3-none-any.whl", hash = "sha256:389055682238f53b04f7badcb49b989835495a96700ced5dab2d8feae4b26f51", size = 14552 }, + { url = "https://files.pythonhosted.org/packages/17/69/cd203477f944c353c31bade965f880aa1061fd6bf05ded0726ca845b6ff7/typing_inspection-0.4.1-py3-none-any.whl", hash = "sha256:389055682238f53b04f7badcb49b989835495a96700ced5dab2d8feae4b26f51", size = 14552, upload_time = "2025-05-21T18:55:22.152Z" }, ] [[package]] name = "tzdata" version = "2025.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/95/32/1a225d6164441be760d75c2c42e2780dc0873fe382da3e98a2e1e48361e5/tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9", size = 196380 } +sdist = { url = "https://files.pythonhosted.org/packages/95/32/1a225d6164441be760d75c2c42e2780dc0873fe382da3e98a2e1e48361e5/tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9", size = 196380, upload_time = "2025-03-23T13:54:43.652Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8", size = 347839 }, + { url = "https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8", size = 347839, upload_time = "2025-03-23T13:54:41.845Z" }, ] [[package]] name = "unidecode" version = "1.4.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/94/7d/a8a765761bbc0c836e397a2e48d498305a865b70a8600fd7a942e85dcf63/Unidecode-1.4.0.tar.gz", hash = "sha256:ce35985008338b676573023acc382d62c264f307c8f7963733405add37ea2b23", size = 200149 } +sdist = { url = "https://files.pythonhosted.org/packages/94/7d/a8a765761bbc0c836e397a2e48d498305a865b70a8600fd7a942e85dcf63/Unidecode-1.4.0.tar.gz", hash = "sha256:ce35985008338b676573023acc382d62c264f307c8f7963733405add37ea2b23", size = 200149, upload_time = "2025-04-24T08:45:03.798Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8f/b7/559f59d57d18b44c6d1250d2eeaa676e028b9c527431f5d0736478a73ba1/Unidecode-1.4.0-py3-none-any.whl", hash = "sha256:c3c7606c27503ad8d501270406e345ddb480a7b5f38827eafe4fa82a137f0021", size = 235837, upload_time = "2025-04-24T08:45:01.609Z" }, +] + +[[package]] +name = "url-normalize" +version = "2.2.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "idna" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/80/31/febb777441e5fcdaacb4522316bf2a527c44551430a4873b052d545e3279/url_normalize-2.2.1.tar.gz", hash = "sha256:74a540a3b6eba1d95bdc610c24f2c0141639f3ba903501e61a52a8730247ff37", size = 18846, upload_time = "2025-04-26T20:37:58.553Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/8f/b7/559f59d57d18b44c6d1250d2eeaa676e028b9c527431f5d0736478a73ba1/Unidecode-1.4.0-py3-none-any.whl", hash = "sha256:c3c7606c27503ad8d501270406e345ddb480a7b5f38827eafe4fa82a137f0021", size = 235837 }, + { url = "https://files.pythonhosted.org/packages/bc/d9/5ec15501b675f7bc07c5d16aa70d8d778b12375686b6efd47656efdc67cd/url_normalize-2.2.1-py3-none-any.whl", hash = "sha256:3deb687587dc91f7b25c9ae5162ffc0f057ae85d22b1e15cf5698311247f567b", size = 14728, upload_time = "2025-04-26T20:37:57.217Z" }, ] [[package]] name = "urllib3" version = "2.5.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/15/22/9ee70a2574a4f4599c47dd506532914ce044817c7752a79b6a51286319bc/urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760", size = 393185 } +sdist = { url = "https://files.pythonhosted.org/packages/15/22/9ee70a2574a4f4599c47dd506532914ce044817c7752a79b6a51286319bc/urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760", size = 393185, upload_time = "2025-06-18T14:07:41.644Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795 }, + { url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795, upload_time = "2025-06-18T14:07:40.39Z" }, ] [[package]] name = "validators" version = "0.35.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/53/66/a435d9ae49850b2f071f7ebd8119dd4e84872b01630d6736761e6e7fd847/validators-0.35.0.tar.gz", hash = "sha256:992d6c48a4e77c81f1b4daba10d16c3a9bb0dbb79b3a19ea847ff0928e70497a", size = 73399 } +sdist = { url = "https://files.pythonhosted.org/packages/53/66/a435d9ae49850b2f071f7ebd8119dd4e84872b01630d6736761e6e7fd847/validators-0.35.0.tar.gz", hash = "sha256:992d6c48a4e77c81f1b4daba10d16c3a9bb0dbb79b3a19ea847ff0928e70497a", size = 73399, upload_time = "2025-05-01T05:42:06.7Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fa/6e/3e955517e22cbdd565f2f8b2e73d52528b14b8bcfdb04f62466b071de847/validators-0.35.0-py3-none-any.whl", hash = "sha256:e8c947097eae7892cb3d26868d637f79f47b4a0554bc6b80065dfe5aac3705dd", size = 44712 }, + { url = "https://files.pythonhosted.org/packages/fa/6e/3e955517e22cbdd565f2f8b2e73d52528b14b8bcfdb04f62466b071de847/validators-0.35.0-py3-none-any.whl", hash = "sha256:e8c947097eae7892cb3d26868d637f79f47b4a0554bc6b80065dfe5aac3705dd", size = 44712, upload_time = "2025-05-01T05:42:04.203Z" }, ] [[package]] @@ -3229,33 +3328,33 @@ dependencies = [ { name = "filelock" }, { name = "platformdirs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/1c/14/37fcdba2808a6c615681cd216fecae00413c9dab44fb2e57805ecf3eaee3/virtualenv-20.34.0.tar.gz", hash = "sha256:44815b2c9dee7ed86e387b842a84f20b93f7f417f95886ca1996a72a4138eb1a", size = 6003808 } +sdist = { url = "https://files.pythonhosted.org/packages/1c/14/37fcdba2808a6c615681cd216fecae00413c9dab44fb2e57805ecf3eaee3/virtualenv-20.34.0.tar.gz", hash = "sha256:44815b2c9dee7ed86e387b842a84f20b93f7f417f95886ca1996a72a4138eb1a", size = 6003808, upload_time = "2025-08-13T14:24:07.464Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/76/06/04c8e804f813cf972e3262f3f8584c232de64f0cde9f703b46cf53a45090/virtualenv-20.34.0-py3-none-any.whl", hash = "sha256:341f5afa7eee943e4984a9207c025feedd768baff6753cd660c857ceb3e36026", size = 5983279 }, + { url = "https://files.pythonhosted.org/packages/76/06/04c8e804f813cf972e3262f3f8584c232de64f0cde9f703b46cf53a45090/virtualenv-20.34.0-py3-none-any.whl", hash = "sha256:341f5afa7eee943e4984a9207c025feedd768baff6753cd660c857ceb3e36026", size = 5983279, upload_time = "2025-08-13T14:24:05.111Z" }, ] [[package]] name = "watchdog" version = "6.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/db/7d/7f3d619e951c88ed75c6037b246ddcf2d322812ee8ea189be89511721d54/watchdog-6.0.0.tar.gz", hash = "sha256:9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282", size = 131220 } +sdist = { url = "https://files.pythonhosted.org/packages/db/7d/7f3d619e951c88ed75c6037b246ddcf2d322812ee8ea189be89511721d54/watchdog-6.0.0.tar.gz", hash = "sha256:9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282", size = 131220, upload_time = "2024-11-01T14:07:13.037Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/39/ea/3930d07dafc9e286ed356a679aa02d777c06e9bfd1164fa7c19c288a5483/watchdog-6.0.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:bdd4e6f14b8b18c334febb9c4425a878a2ac20efd1e0b231978e7b150f92a948", size = 96471 }, - { url = "https://files.pythonhosted.org/packages/12/87/48361531f70b1f87928b045df868a9fd4e253d9ae087fa4cf3f7113be363/watchdog-6.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c7c15dda13c4eb00d6fb6fc508b3c0ed88b9d5d374056b239c4ad1611125c860", size = 88449 }, - { url = "https://files.pythonhosted.org/packages/5b/7e/8f322f5e600812e6f9a31b75d242631068ca8f4ef0582dd3ae6e72daecc8/watchdog-6.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6f10cb2d5902447c7d0da897e2c6768bca89174d0c6e1e30abec5421af97a5b0", size = 89054 }, - { url = "https://files.pythonhosted.org/packages/68/98/b0345cabdce2041a01293ba483333582891a3bd5769b08eceb0d406056ef/watchdog-6.0.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:490ab2ef84f11129844c23fb14ecf30ef3d8a6abafd3754a6f75ca1e6654136c", size = 96480 }, - { url = "https://files.pythonhosted.org/packages/85/83/cdf13902c626b28eedef7ec4f10745c52aad8a8fe7eb04ed7b1f111ca20e/watchdog-6.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:76aae96b00ae814b181bb25b1b98076d5fc84e8a53cd8885a318b42b6d3a5134", size = 88451 }, - { url = "https://files.pythonhosted.org/packages/fe/c4/225c87bae08c8b9ec99030cd48ae9c4eca050a59bf5c2255853e18c87b50/watchdog-6.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a175f755fc2279e0b7312c0035d52e27211a5bc39719dd529625b1930917345b", size = 89057 }, - { url = "https://files.pythonhosted.org/packages/a9/c7/ca4bf3e518cb57a686b2feb4f55a1892fd9a3dd13f470fca14e00f80ea36/watchdog-6.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7607498efa04a3542ae3e05e64da8202e58159aa1fa4acddf7678d34a35d4f13", size = 79079 }, - { url = "https://files.pythonhosted.org/packages/5c/51/d46dc9332f9a647593c947b4b88e2381c8dfc0942d15b8edc0310fa4abb1/watchdog-6.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:9041567ee8953024c83343288ccc458fd0a2d811d6a0fd68c4c22609e3490379", size = 79078 }, - { url = "https://files.pythonhosted.org/packages/d4/57/04edbf5e169cd318d5f07b4766fee38e825d64b6913ca157ca32d1a42267/watchdog-6.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:82dc3e3143c7e38ec49d61af98d6558288c415eac98486a5c581726e0737c00e", size = 79076 }, - { url = "https://files.pythonhosted.org/packages/ab/cc/da8422b300e13cb187d2203f20b9253e91058aaf7db65b74142013478e66/watchdog-6.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:212ac9b8bf1161dc91bd09c048048a95ca3a4c4f5e5d4a7d1b1a7d5752a7f96f", size = 79077 }, - { url = "https://files.pythonhosted.org/packages/2c/3b/b8964e04ae1a025c44ba8e4291f86e97fac443bca31de8bd98d3263d2fcf/watchdog-6.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:e3df4cbb9a450c6d49318f6d14f4bbc80d763fa587ba46ec86f99f9e6876bb26", size = 79078 }, - { url = "https://files.pythonhosted.org/packages/62/ae/a696eb424bedff7407801c257d4b1afda455fe40821a2be430e173660e81/watchdog-6.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:2cce7cfc2008eb51feb6aab51251fd79b85d9894e98ba847408f662b3395ca3c", size = 79077 }, - { url = "https://files.pythonhosted.org/packages/b5/e8/dbf020b4d98251a9860752a094d09a65e1b436ad181faf929983f697048f/watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:20ffe5b202af80ab4266dcd3e91aae72bf2da48c0d33bdb15c66658e685e94e2", size = 79078 }, - { url = "https://files.pythonhosted.org/packages/07/f6/d0e5b343768e8bcb4cda79f0f2f55051bf26177ecd5651f84c07567461cf/watchdog-6.0.0-py3-none-win32.whl", hash = "sha256:07df1fdd701c5d4c8e55ef6cf55b8f0120fe1aef7ef39a1c6fc6bc2e606d517a", size = 79065 }, - { url = "https://files.pythonhosted.org/packages/db/d9/c495884c6e548fce18a8f40568ff120bc3a4b7b99813081c8ac0c936fa64/watchdog-6.0.0-py3-none-win_amd64.whl", hash = "sha256:cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680", size = 79070 }, - { url = "https://files.pythonhosted.org/packages/33/e8/e40370e6d74ddba47f002a32919d91310d6074130fe4e17dabcafc15cbf1/watchdog-6.0.0-py3-none-win_ia64.whl", hash = "sha256:a1914259fa9e1454315171103c6a30961236f508b9b623eae470268bbcc6a22f", size = 79067 }, + { url = "https://files.pythonhosted.org/packages/39/ea/3930d07dafc9e286ed356a679aa02d777c06e9bfd1164fa7c19c288a5483/watchdog-6.0.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:bdd4e6f14b8b18c334febb9c4425a878a2ac20efd1e0b231978e7b150f92a948", size = 96471, upload_time = "2024-11-01T14:06:37.745Z" }, + { url = "https://files.pythonhosted.org/packages/12/87/48361531f70b1f87928b045df868a9fd4e253d9ae087fa4cf3f7113be363/watchdog-6.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c7c15dda13c4eb00d6fb6fc508b3c0ed88b9d5d374056b239c4ad1611125c860", size = 88449, upload_time = "2024-11-01T14:06:39.748Z" }, + { url = "https://files.pythonhosted.org/packages/5b/7e/8f322f5e600812e6f9a31b75d242631068ca8f4ef0582dd3ae6e72daecc8/watchdog-6.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6f10cb2d5902447c7d0da897e2c6768bca89174d0c6e1e30abec5421af97a5b0", size = 89054, upload_time = "2024-11-01T14:06:41.009Z" }, + { url = "https://files.pythonhosted.org/packages/68/98/b0345cabdce2041a01293ba483333582891a3bd5769b08eceb0d406056ef/watchdog-6.0.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:490ab2ef84f11129844c23fb14ecf30ef3d8a6abafd3754a6f75ca1e6654136c", size = 96480, upload_time = "2024-11-01T14:06:42.952Z" }, + { url = "https://files.pythonhosted.org/packages/85/83/cdf13902c626b28eedef7ec4f10745c52aad8a8fe7eb04ed7b1f111ca20e/watchdog-6.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:76aae96b00ae814b181bb25b1b98076d5fc84e8a53cd8885a318b42b6d3a5134", size = 88451, upload_time = "2024-11-01T14:06:45.084Z" }, + { url = "https://files.pythonhosted.org/packages/fe/c4/225c87bae08c8b9ec99030cd48ae9c4eca050a59bf5c2255853e18c87b50/watchdog-6.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a175f755fc2279e0b7312c0035d52e27211a5bc39719dd529625b1930917345b", size = 89057, upload_time = "2024-11-01T14:06:47.324Z" }, + { url = "https://files.pythonhosted.org/packages/a9/c7/ca4bf3e518cb57a686b2feb4f55a1892fd9a3dd13f470fca14e00f80ea36/watchdog-6.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7607498efa04a3542ae3e05e64da8202e58159aa1fa4acddf7678d34a35d4f13", size = 79079, upload_time = "2024-11-01T14:06:59.472Z" }, + { url = "https://files.pythonhosted.org/packages/5c/51/d46dc9332f9a647593c947b4b88e2381c8dfc0942d15b8edc0310fa4abb1/watchdog-6.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:9041567ee8953024c83343288ccc458fd0a2d811d6a0fd68c4c22609e3490379", size = 79078, upload_time = "2024-11-01T14:07:01.431Z" }, + { url = "https://files.pythonhosted.org/packages/d4/57/04edbf5e169cd318d5f07b4766fee38e825d64b6913ca157ca32d1a42267/watchdog-6.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:82dc3e3143c7e38ec49d61af98d6558288c415eac98486a5c581726e0737c00e", size = 79076, upload_time = "2024-11-01T14:07:02.568Z" }, + { url = "https://files.pythonhosted.org/packages/ab/cc/da8422b300e13cb187d2203f20b9253e91058aaf7db65b74142013478e66/watchdog-6.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:212ac9b8bf1161dc91bd09c048048a95ca3a4c4f5e5d4a7d1b1a7d5752a7f96f", size = 79077, upload_time = "2024-11-01T14:07:03.893Z" }, + { url = "https://files.pythonhosted.org/packages/2c/3b/b8964e04ae1a025c44ba8e4291f86e97fac443bca31de8bd98d3263d2fcf/watchdog-6.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:e3df4cbb9a450c6d49318f6d14f4bbc80d763fa587ba46ec86f99f9e6876bb26", size = 79078, upload_time = "2024-11-01T14:07:05.189Z" }, + { url = "https://files.pythonhosted.org/packages/62/ae/a696eb424bedff7407801c257d4b1afda455fe40821a2be430e173660e81/watchdog-6.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:2cce7cfc2008eb51feb6aab51251fd79b85d9894e98ba847408f662b3395ca3c", size = 79077, upload_time = "2024-11-01T14:07:06.376Z" }, + { url = "https://files.pythonhosted.org/packages/b5/e8/dbf020b4d98251a9860752a094d09a65e1b436ad181faf929983f697048f/watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:20ffe5b202af80ab4266dcd3e91aae72bf2da48c0d33bdb15c66658e685e94e2", size = 79078, upload_time = "2024-11-01T14:07:07.547Z" }, + { url = "https://files.pythonhosted.org/packages/07/f6/d0e5b343768e8bcb4cda79f0f2f55051bf26177ecd5651f84c07567461cf/watchdog-6.0.0-py3-none-win32.whl", hash = "sha256:07df1fdd701c5d4c8e55ef6cf55b8f0120fe1aef7ef39a1c6fc6bc2e606d517a", size = 79065, upload_time = "2024-11-01T14:07:09.525Z" }, + { url = "https://files.pythonhosted.org/packages/db/d9/c495884c6e548fce18a8f40568ff120bc3a4b7b99813081c8ac0c936fa64/watchdog-6.0.0-py3-none-win_amd64.whl", hash = "sha256:cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680", size = 79070, upload_time = "2024-11-01T14:07:10.686Z" }, + { url = "https://files.pythonhosted.org/packages/33/e8/e40370e6d74ddba47f002a32919d91310d6074130fe4e17dabcafc15cbf1/watchdog-6.0.0-py3-none-win_ia64.whl", hash = "sha256:a1914259fa9e1454315171103c6a30961236f508b9b623eae470268bbcc6a22f", size = 79067, upload_time = "2024-11-01T14:07:11.845Z" }, ] [[package]] @@ -3267,88 +3366,88 @@ dependencies = [ { name = "requests" }, { name = "tabulate" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d7/4a/f55695bd1c9f1996b675b6e9e980eef40ebdb5e4bf8774c059c31af6ade1/wbgapi-1.0.12.tar.gz", hash = "sha256:338c3c768bd120b80596b48fa0449ecabc93513ac989c55671dce579dbb3a5be", size = 33590 } +sdist = { url = "https://files.pythonhosted.org/packages/d7/4a/f55695bd1c9f1996b675b6e9e980eef40ebdb5e4bf8774c059c31af6ade1/wbgapi-1.0.12.tar.gz", hash = "sha256:338c3c768bd120b80596b48fa0449ecabc93513ac989c55671dce579dbb3a5be", size = 33590, upload_time = "2022-07-05T15:07:22.772Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/00/12/224030af4886e119a3d03b709f7130e9601a4d15332e1d6a35671b25a4de/wbgapi-1.0.12-py3-none-any.whl", hash = "sha256:c5a1e1683b03d4264d287627c2562932f30e7f5c65509b812cb2e3de7d32633f", size = 36385 }, + { url = "https://files.pythonhosted.org/packages/00/12/224030af4886e119a3d03b709f7130e9601a4d15332e1d6a35671b25a4de/wbgapi-1.0.12-py3-none-any.whl", hash = "sha256:c5a1e1683b03d4264d287627c2562932f30e7f5c65509b812cb2e3de7d32633f", size = 36385, upload_time = "2022-07-05T15:07:20.606Z" }, ] [[package]] name = "wcwidth" version = "0.2.13" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6c/63/53559446a878410fc5a5974feb13d31d78d752eb18aeba59c7fef1af7598/wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5", size = 101301 } +sdist = { url = "https://files.pythonhosted.org/packages/6c/63/53559446a878410fc5a5974feb13d31d78d752eb18aeba59c7fef1af7598/wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5", size = 101301, upload_time = "2024-01-06T02:10:57.829Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fd/84/fd2ba7aafacbad3c4201d395674fc6348826569da3c0937e75505ead3528/wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859", size = 34166 }, + { url = "https://files.pythonhosted.org/packages/fd/84/fd2ba7aafacbad3c4201d395674fc6348826569da3c0937e75505ead3528/wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859", size = 34166, upload_time = "2024-01-06T02:10:55.763Z" }, ] [[package]] name = "webencodings" version = "0.5.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0b/02/ae6ceac1baeda530866a85075641cec12989bd8d31af6d5ab4a3e8c92f47/webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923", size = 9721 } +sdist = { url = "https://files.pythonhosted.org/packages/0b/02/ae6ceac1baeda530866a85075641cec12989bd8d31af6d5ab4a3e8c92f47/webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923", size = 9721, upload_time = "2017-04-05T20:21:34.189Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", size = 11774 }, + { url = "https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", size = 11774, upload_time = "2017-04-05T20:21:32.581Z" }, ] [[package]] name = "wheel" version = "0.45.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8a/98/2d9906746cdc6a6ef809ae6338005b3f21bb568bea3165cfc6a243fdc25c/wheel-0.45.1.tar.gz", hash = "sha256:661e1abd9198507b1409a20c02106d9670b2576e916d58f520316666abca6729", size = 107545 } +sdist = { url = "https://files.pythonhosted.org/packages/8a/98/2d9906746cdc6a6ef809ae6338005b3f21bb568bea3165cfc6a243fdc25c/wheel-0.45.1.tar.gz", hash = "sha256:661e1abd9198507b1409a20c02106d9670b2576e916d58f520316666abca6729", size = 107545, upload_time = "2024-11-23T00:18:23.513Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0b/2c/87f3254fd8ffd29e4c02732eee68a83a1d3c346ae39bc6822dcbcb697f2b/wheel-0.45.1-py3-none-any.whl", hash = "sha256:708e7481cc80179af0e556bbf0cc00b8444c7321e2700b8d8580231d13017248", size = 72494 }, + { url = "https://files.pythonhosted.org/packages/0b/2c/87f3254fd8ffd29e4c02732eee68a83a1d3c346ae39bc6822dcbcb697f2b/wheel-0.45.1-py3-none-any.whl", hash = "sha256:708e7481cc80179af0e556bbf0cc00b8444c7321e2700b8d8580231d13017248", size = 72494, upload_time = "2024-11-23T00:18:21.207Z" }, ] [[package]] name = "win32-setctime" version = "1.2.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b3/8f/705086c9d734d3b663af0e9bb3d4de6578d08f46b1b101c2442fd9aecaa2/win32_setctime-1.2.0.tar.gz", hash = "sha256:ae1fdf948f5640aae05c511ade119313fb6a30d7eabe25fef9764dca5873c4c0", size = 4867 } +sdist = { url = "https://files.pythonhosted.org/packages/b3/8f/705086c9d734d3b663af0e9bb3d4de6578d08f46b1b101c2442fd9aecaa2/win32_setctime-1.2.0.tar.gz", hash = "sha256:ae1fdf948f5640aae05c511ade119313fb6a30d7eabe25fef9764dca5873c4c0", size = 4867, upload_time = "2024-12-07T15:28:28.314Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e1/07/c6fe3ad3e685340704d314d765b7912993bcb8dc198f0e7a89382d37974b/win32_setctime-1.2.0-py3-none-any.whl", hash = "sha256:95d644c4e708aba81dc3704a116d8cbc974d70b3bdb8be1d150e36be6e9d1390", size = 4083 }, + { url = "https://files.pythonhosted.org/packages/e1/07/c6fe3ad3e685340704d314d765b7912993bcb8dc198f0e7a89382d37974b/win32_setctime-1.2.0-py3-none-any.whl", hash = "sha256:95d644c4e708aba81dc3704a116d8cbc974d70b3bdb8be1d150e36be6e9d1390", size = 4083, upload_time = "2024-12-07T15:28:26.465Z" }, ] [[package]] name = "xlrd" version = "2.0.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/07/5a/377161c2d3538d1990d7af382c79f3b2372e880b65de21b01b1a2b78691e/xlrd-2.0.2.tar.gz", hash = "sha256:08b5e25de58f21ce71dc7db3b3b8106c1fa776f3024c54e45b45b374e89234c9", size = 100167 } +sdist = { url = "https://files.pythonhosted.org/packages/07/5a/377161c2d3538d1990d7af382c79f3b2372e880b65de21b01b1a2b78691e/xlrd-2.0.2.tar.gz", hash = "sha256:08b5e25de58f21ce71dc7db3b3b8106c1fa776f3024c54e45b45b374e89234c9", size = 100167, upload_time = "2025-06-14T08:46:39.039Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1a/62/c8d562e7766786ba6587d09c5a8ba9f718ed3fa8af7f4553e8f91c36f302/xlrd-2.0.2-py2.py3-none-any.whl", hash = "sha256:ea762c3d29f4cca48d82df517b6d89fbce4db3107f9d78713e48cd321d5c9aa9", size = 96555 }, + { url = "https://files.pythonhosted.org/packages/1a/62/c8d562e7766786ba6587d09c5a8ba9f718ed3fa8af7f4553e8f91c36f302/xlrd-2.0.2-py2.py3-none-any.whl", hash = "sha256:ea762c3d29f4cca48d82df517b6d89fbce4db3107f9d78713e48cd321d5c9aa9", size = 96555, upload_time = "2025-06-14T08:46:37.766Z" }, ] [[package]] name = "xlrd3" version = "1.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/79/db/88d8d49ddacc203956ecb98dc86c6ffeee6e933ef1f50da9b369de518f7f/xlrd3-1.1.0.tar.gz", hash = "sha256:20e6ed2e5f7f8b4ab61e30faffebceff6fab348332b4c915373f0a72742dc177", size = 58919847 } +sdist = { url = "https://files.pythonhosted.org/packages/79/db/88d8d49ddacc203956ecb98dc86c6ffeee6e933ef1f50da9b369de518f7f/xlrd3-1.1.0.tar.gz", hash = "sha256:20e6ed2e5f7f8b4ab61e30faffebceff6fab348332b4c915373f0a72742dc177", size = 58919847, upload_time = "2021-04-25T12:27:10.03Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/5d/08/fce745025e58f160e7dcb5a45d4d43eb0bd44c0d8851425be87ef90271fa/xlrd3-1.1.0-py2.py3-none-any.whl", hash = "sha256:8e8e808f938144e7936a6e07c1d57be7a0f6c6f5b37c9c67974b43246d8aacb6", size = 105268 }, + { url = "https://files.pythonhosted.org/packages/5d/08/fce745025e58f160e7dcb5a45d4d43eb0bd44c0d8851425be87ef90271fa/xlrd3-1.1.0-py2.py3-none-any.whl", hash = "sha256:8e8e808f938144e7936a6e07c1d57be7a0f6c6f5b37c9c67974b43246d8aacb6", size = 105268, upload_time = "2021-04-25T12:26:55.264Z" }, ] [[package]] name = "xlsx2csv" version = "0.8.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/36/20/94860286a308a4213581c1beacd4fc7be724250c03583fcff23aaa6107bb/xlsx2csv-0.8.4.tar.gz", hash = "sha256:2aa809888826f6af5b26c77fc7f613f2bbeada0d8cc09e5a58e0f59684bb6911", size = 221390 } +sdist = { url = "https://files.pythonhosted.org/packages/36/20/94860286a308a4213581c1beacd4fc7be724250c03583fcff23aaa6107bb/xlsx2csv-0.8.4.tar.gz", hash = "sha256:2aa809888826f6af5b26c77fc7f613f2bbeada0d8cc09e5a58e0f59684bb6911", size = 221390, upload_time = "2024-11-19T17:06:07.818Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c4/c0/15c21556362c67f1155f3643a375d50ac67559b82c768e64e800a42a2577/xlsx2csv-0.8.4-py3-none-any.whl", hash = "sha256:52ab873fc7b2f2ca75d14aee8bd1985a9f5c1bcb3cc7b80df7a5d57a40a67473", size = 15904 }, + { url = "https://files.pythonhosted.org/packages/c4/c0/15c21556362c67f1155f3643a375d50ac67559b82c768e64e800a42a2577/xlsx2csv-0.8.4-py3-none-any.whl", hash = "sha256:52ab873fc7b2f2ca75d14aee8bd1985a9f5c1bcb3cc7b80df7a5d57a40a67473", size = 15904, upload_time = "2024-11-19T17:06:05.362Z" }, ] [[package]] name = "xlsxwriter" version = "3.2.9" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/46/2c/c06ef49dc36e7954e55b802a8b231770d286a9758b3d936bd1e04ce5ba88/xlsxwriter-3.2.9.tar.gz", hash = "sha256:254b1c37a368c444eac6e2f867405cc9e461b0ed97a3233b2ac1e574efb4140c", size = 215940 } +sdist = { url = "https://files.pythonhosted.org/packages/46/2c/c06ef49dc36e7954e55b802a8b231770d286a9758b3d936bd1e04ce5ba88/xlsxwriter-3.2.9.tar.gz", hash = "sha256:254b1c37a368c444eac6e2f867405cc9e461b0ed97a3233b2ac1e574efb4140c", size = 215940, upload_time = "2025-09-16T00:16:21.63Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3a/0c/3662f4a66880196a590b202f0db82d919dd2f89e99a27fadef91c4a33d41/xlsxwriter-3.2.9-py3-none-any.whl", hash = "sha256:9a5db42bc5dff014806c58a20b9eae7322a134abb6fce3c92c181bfb275ec5b3", size = 175315 }, + { url = "https://files.pythonhosted.org/packages/3a/0c/3662f4a66880196a590b202f0db82d919dd2f89e99a27fadef91c4a33d41/xlsxwriter-3.2.9-py3-none-any.whl", hash = "sha256:9a5db42bc5dff014806c58a20b9eae7322a134abb6fce3c92c181bfb275ec5b3", size = 175315, upload_time = "2025-09-16T00:16:20.108Z" }, ] [[package]] name = "xlwt" version = "1.3.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/06/97/56a6f56ce44578a69343449aa5a0d98eefe04085d69da539f3034e2cd5c1/xlwt-1.3.0.tar.gz", hash = "sha256:c59912717a9b28f1a3c2a98fd60741014b06b043936dcecbc113eaaada156c88", size = 153929 } +sdist = { url = "https://files.pythonhosted.org/packages/06/97/56a6f56ce44578a69343449aa5a0d98eefe04085d69da539f3034e2cd5c1/xlwt-1.3.0.tar.gz", hash = "sha256:c59912717a9b28f1a3c2a98fd60741014b06b043936dcecbc113eaaada156c88", size = 153929, upload_time = "2017-08-22T06:47:16.498Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/44/48/def306413b25c3d01753603b1a222a011b8621aed27cd7f89cbc27e6b0f4/xlwt-1.3.0-py2.py3-none-any.whl", hash = "sha256:a082260524678ba48a297d922cc385f58278b8aa68741596a87de01a9c628b2e", size = 99981 }, + { url = "https://files.pythonhosted.org/packages/44/48/def306413b25c3d01753603b1a222a011b8621aed27cd7f89cbc27e6b0f4/xlwt-1.3.0-py2.py3-none-any.whl", hash = "sha256:a082260524678ba48a297d922cc385f58278b8aa68741596a87de01a9c628b2e", size = 99981, upload_time = "2017-08-22T06:47:15.281Z" }, ] From 625eb2afc4ed255117598928d0e39ee3dbe17e52 Mon Sep 17 00:00:00 2001 From: Fabrizio Finozzi <167071962+finozzifa@users.noreply.github.com> Date: Fri, 16 Jan 2026 13:46:46 +0100 Subject: [PATCH 31/43] Documentation (#74) --- .codespell.ignore | 2 +- .github/instructions/copilot-instructions.md | 2 +- .github/workflows/ci.yaml | 2 +- .gitignore | 2 +- .pre-commit-config.yaml | 4 +- CITATIONS.cff | 17 +++ CONTRIBUTING.md | 5 + MANIFEST.in | 11 ++ README.md | 43 ++---- REUSE.toml | 12 +- docs/api/commons/commons.md | 1 + docs/api/commons/dateformatenum.md | 1 + docs/api/commons/fileextensionenum.md | 1 + docs/api/datapackage.md | 1 + docs/api/parameter.md | 1 + docs/api/source.md | 1 + docs/api/source_collection.md | 1 + docs/api/technology.md | 1 + docs/api/technology_collection.md | 1 + docs/api/units/customundefineduniterror.md | 1 + docs/api/units/specialunitregistry.md | 1 + docs/contributing/contributors.md | 2 +- docs/contributing/instructions.md | 10 +- docs/examples/dea_storage.md | 84 +++++++++++ docs/home/citing.md | 10 +- docs/home/contacts.md | 4 +- docs/home/installation.md | 8 +- docs/home/license.md | 4 +- docs/home/release-notes.md | 2 +- docs/home/users.md | 14 +- docs/index.md | 15 +- docs/user_guide/class-diagram.puml | 2 +- docs/user_guide/datapackage.md | 113 +++++++++++++++ docs/user_guide/design.md | 8 +- docs/{ => user_guide}/models.md | 23 ++- docs/user_guide/parameter.md | 34 ++--- docs/user_guide/source.md | 82 +++++++++++ docs/user_guide/source_collection.md | 97 +++++++++++++ docs/user_guide/technology.md | 136 ++++++++++++++++++ docs/user_guide/technology_collection.md | 128 +++++++++++++++++ mkdocs.yaml | 38 ++++- pyproject.toml | 10 +- src/technologydata/__init__.py | 3 +- src/technologydata/constants/__init__.py | 2 +- .../constants/energy_density.py | 2 +- src/technologydata/datapackage.py | 2 +- .../dea_energy_storage/dea_energy_storage.py | 2 +- src/technologydata/parameter.py | 14 +- src/technologydata/source.py | 6 +- src/technologydata/source_collection.py | 2 +- src/technologydata/technologies/__init__.py | 2 +- .../technologies/growth_models.py | 3 +- src/technologydata/technology.py | 2 +- src/technologydata/technology_collection.py | 2 +- src/technologydata/utils/__init__.py | 2 +- src/technologydata/utils/carriers.txt | 2 +- src/technologydata/utils/commons.py | 2 +- src/technologydata/utils/heating_values.txt | 2 +- src/technologydata/utils/units.py | 3 +- test/conftest.py | 2 +- test/test_commons.py | 2 +- test/test_datapackage.py | 2 +- test/test_dea_energy_storage.py | 2 +- test/test_growth_models.py | 3 +- test/test_parameter.py | 2 +- test/test_source.py | 2 +- test/test_source_collection.py | 2 +- test/test_technology.py | 2 +- test/test_technology_collection.py | 2 +- test/test_units.py | 2 +- 70 files changed, 848 insertions(+), 163 deletions(-) create mode 100644 CITATIONS.cff create mode 100644 CONTRIBUTING.md create mode 100644 MANIFEST.in create mode 100644 docs/api/commons/commons.md create mode 100644 docs/api/commons/dateformatenum.md create mode 100644 docs/api/commons/fileextensionenum.md create mode 100644 docs/api/datapackage.md create mode 100644 docs/api/parameter.md create mode 100644 docs/api/source.md create mode 100644 docs/api/source_collection.md create mode 100644 docs/api/technology.md create mode 100644 docs/api/technology_collection.md create mode 100644 docs/api/units/customundefineduniterror.md create mode 100644 docs/api/units/specialunitregistry.md create mode 100644 docs/examples/dea_storage.md create mode 100644 docs/user_guide/datapackage.md rename docs/{ => user_guide}/models.md (97%) create mode 100644 docs/user_guide/source.md create mode 100644 docs/user_guide/source_collection.md create mode 100644 docs/user_guide/technology.md create mode 100644 docs/user_guide/technology_collection.md diff --git a/.codespell.ignore b/.codespell.ignore index a292ceee..a706ba1e 100644 --- a/.codespell.ignore +++ b/.codespell.ignore @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: The technology-data authors +# SPDX-FileCopyrightText: technologydata contributors # # SPDX-License-Identifier: MIT CAF diff --git a/.github/instructions/copilot-instructions.md b/.github/instructions/copilot-instructions.md index 2d93e54e..169de61f 100644 --- a/.github/instructions/copilot-instructions.md +++ b/.github/instructions/copilot-instructions.md @@ -1,7 +1,7 @@ # Copilot Coding Agent Instructions for `technologydata` - - First of all, thank you for your contributions to `technologydata`! We enthusiastically invite anyone interested in `technologydata` to share new ideas, provide suggestions, submit bug reports, or contribute code changes. @@ -17,7 +11,7 @@ We enthusiastically invite anyone interested in `technologydata` to share new id ## Where to go for help -- To **discuss** with other `technologydata` users, organise projects, share news, and get in touch with the community, please refer to the [Contacts](/docs/home/contacts.md) page. +- To **discuss** with other `technologydata` users, organise projects, share news, and get in touch with the community, please refer to the [Contacts](../home/contacts.md) page. - For **guidelines to contribute**, stay right here. ## Code contributions @@ -183,6 +177,8 @@ The documentation is generated with [MkDocs](https://www.mkdocs.org/). The docum MkDocs offers the possibility to start a built-in development server to preview the documentation as you work on it. To start the development server run: +### Building the documentation locally + ```bash mkdocs serve ``` diff --git a/docs/examples/dea_storage.md b/docs/examples/dea_storage.md new file mode 100644 index 00000000..4b1788cb --- /dev/null +++ b/docs/examples/dea_storage.md @@ -0,0 +1,84 @@ +# Danish Energy Agency Parser Documentation + +## Overview + +The Danish Energy Agency (DEA) data parser `dea_energy_storage.py` demonstrates a full data-cleaning and transformation pipeline for converting raw tabular data into the `technologydata` schema files `technologies.json` and `sources.json`. The parser is implemented in `src/technologydata/package_data/dea_energy_storage/dea_energy_storage.py`. + +## Dataset Description + +The original dataset is available at this [link](https://ens.dk/media/6589/download). A full description of the dataset is available at this [link](https://ens.dk/media/6588/download). The raw source file is included in the repository at `src/technologydata/package_data/raw/Technology_datasheet_for_energy_storage.xlsx`. + +The dataset is in Excel format, and it includes, under the data sheet `alldata_flat`, a flat table of technology parameters for a range of energy storage technologies. Columns include `Technology`, `ws`, `par` (parameter name), `val` (value), `unit`, `year`, `est` (case/estimate), `priceyear`, plus metadata columns such as `cat`, `ref`, `note`. Rows are individual parameter records (parameter value + unit + context) for technologies and estimation cases. + +## Parser description + +The parser is articulated in the following steps. + +### Command line argument parsing + +Function `parse_input_arguments()` defines and parses the command-line arguments: + +- `--num_digits` (int, default 4) β€” number of decimals used when rounding numeric values. The default value is 4. +- `--store_source` (boolean flag) β€” whether to store the source on the Wayback Machine. The default value is `false`. +- `--filter_params` (boolean flag) β€” whether to limit exported parameters to a fixed allowed set. The default value is `false`. +- `--export_schema` (boolean flag) β€” export JSON schema files. The default value is `false`. + +### Read the raw data + +The script reads the raw data available at `src/technologydata/package_data/raw/Technology_datasheet_for_energy_storage.xlsx`, under sheet `alldata_flat`, in a `pandas` dataframe. It uses `pandas.read_excel(..., engine=calamine, dtype=str)`. All entries are handled as strings initially. + +### Data cleaning, validation and dealing with missing/null values + +The data cleaning and validation happens with the following steps. + +Function `drop_invalid_rows(df)` validates whether required columns are present. It drops rows with missing/null or empty critical fields (`Technology`, `par`, `val`, `year`) and keeps rows where `year` contains a 4-digit year and `val` contains numeric characters and no comparator symbols (`<`, `>`, `≀`, `β‰₯`). + +Function `clean_technology_string()` normalizes text fields by removing leading 3-digit numeric codes, trims whitespace and lower-cases the string for consistent matching. It is applied to the columns `Technology` and `ws`. As an example, `clean_technology_string()` converts `151b Hydrogen Storage - LOHC` to `hydrogen storage - lohc`. + +Function `extract_year()` extracts the first sequence of digits from the `year` column and converts it to an integer. The column contains in fact entries like `Uncertainty (2050)` (str) which are converted to `2050` (int). + +Function `clean_parameter_string()` removes leading hyphens, removes text inside square brackets (units/notes), collapses extra spaces and lower-cases the parameter name. It is applied to the `par` column. + +Function `standardize_units()` is applied to columns `par` and `unit`. It completes missing units based on parameter name (e.g., `energy storage capacity for one unit` is mapped to the unit `MWh`) via a parameter-to-unit map. Moreover, it replaces known incorrect unit strings as `⁰C` -> `C` or `m2` to `meter**2`. The unit substitutions are driven by the `pint` documentation available at this [link](https://github.com/hgrecco/pint/blob/master/pint/default_en.txt). + +Function `Commons.update_unit_with_currency_year(unit, priceyear)`, if present, appends `priceyear` information to currency units. This is because `technologydata` follows the currency pattern `\b(?P[A-Z]{3})_(?P\d{4})\b`, as for example `EUR_2021`. + +Function `format_val_number(value, num_decimals)` parses numeric formats including comma decimal separators and scientific notation variants (e.g., `Γ—10`) and converts them to float and rounds them to `num_decimals`. + +The parser also applies the following corrections and substitutions: + +- Convert `MEUR_2020` and `kEUR_2020`/`KEUR_2020` to `EUR_2020` and scale numeric `val` accordingly (Γ—1e6 or Γ—1e3). +- Specific unit fixes (example: `mol/s/m/MPa1/2` β†’ `mol/s/m/Pa` with value scaling). +- Certain `par` values (e.g., `energy storage capacity for one unit`, `tank volume of example`) are normalized to `capacity`. + +Function `clean_est_string()` normalizes the `est` column by casefolding it and by replacing `ctrl` with `control`. + +Function `filter_parameters(df, filter_flag)`, if `filter_flag` is true, keeps only an allowed set of parameters (e.g., `technical lifetime`, `fixed o&m`, `specific investment`, `variable o&m`, `charge efficiency`, `discharge efficiency`, `capacity`). Otherwise returns the full set. + +### Populate and export the source and technology collections + +Function `build_technology_collection()`: + +- if `store_source` is set, constructs a `Source` object for the DEA dataset, calls `ensure_in_wayback()` and writes `sources.json`; otherwise reads an existing `sources.json`. +- groups the cleaned DataFrame by `est`, `year`, `ws`, `Technology`. +- for each group, builds a dictionary of `Parameter` objects (each with `magnitude`, `units`, `sources`, `provenance`). +- creates a `Technology` object for each group, with `name` = `ws`, `detailed_technology` = `Technology`, `year`=`year`, `region` = `EU`, `case` = `est` and collects them into a `TechnologyCollection` object. +- writes the `TechnologyCollection` object to a `technologies.json`. +- if `--export_schema` is used, schema files produced during export are moved to the sub-folder `src/technologydata/package_data/schemas`. + +## Running the parser + +### Execution instructions + +From repository root: + +- Basic run: `python src/technologydata/package_data/dea_energy_storage/dea_energy_storage.py` +- Example with options: `--num_digits 3 --store_source --filter_params --export_schema` + +### Outputs + +The parser generates the following outputs: + +- `src/technologydata/package_data/dea_energy_storage/technologies.json`. +- `src/technologydata/package_data/dea_energy_storage/sources.json`. +- Optional schema files moved to `src/technologydata/package_data/schemas` when `--export_schema` is used. diff --git a/docs/home/citing.md b/docs/home/citing.md index 5922dbef..94157163 100644 --- a/docs/home/citing.md +++ b/docs/home/citing.md @@ -1,3 +1,11 @@ # Citing -TODO +If you use `technologydata` for your research, we suggest the following way of citing it. + +```text +technologydata: Data for Energy Systems Models. + +The package is available at: https://github.com/open-energy-transition/technology-data/tree/prototype-2. + +Authors: Johannes Hampp, Fabrizio Finozzi +``` diff --git a/docs/home/contacts.md b/docs/home/contacts.md index edec8092..a5ceb67f 100644 --- a/docs/home/contacts.md +++ b/docs/home/contacts.md @@ -3,5 +3,5 @@ Please consider the following ways to reach out to the community and the developers: * To **discuss** with other `technology-data` users, organise projects, share news, and get in touch with the community you can use the [Discord server](https://discord.gg/T7YZbnVU). -* For **bugs and feature requests**, please use the [issue tracker](https://github.com/PyPSA/technology-data/issues). -* We strongly welcome anyone interested in providing **contributions** to this project. If you have any ideas, suggestions or encounter problems, feel invited to file issues or make pull requests on [GitHub](https://github.com/PyPSA/technology-data). +* For **bugs and feature requests**, please use the [issue tracker](https://github.com/open-energy-transition/technology-data/issues). +* We strongly welcome anyone interested in providing **contributions** to this project. If you have any ideas, suggestions or encounter problems, feel invited to file issues or make pull requests on [GitHub](https://github.com/open-energy-transition/technology-data). diff --git a/docs/home/installation.md b/docs/home/installation.md index 6238f0c1..df05a97e 100644 --- a/docs/home/installation.md +++ b/docs/home/installation.md @@ -1,6 +1,6 @@ # Installation -You can install `technologydata` using either **PyPI** or **conda-forge**. Choose the method that best fits your workflow. +You can install `technologydata` using **PyPI**. ## Using pip (from PyPI) @@ -13,9 +13,3 @@ pip install technologydata ```bash uv pip install technologydata ``` - -## Using conda (from conda-forge) - -```bash -conda install -c conda-forge technologydata -``` diff --git a/docs/home/license.md b/docs/home/license.md index ae029c5b..122cfe36 100644 --- a/docs/home/license.md +++ b/docs/home/license.md @@ -1,11 +1,11 @@ # License -`technology-data` is licensed under the open-source [MIT](https://opensource.org/license/mit) license: +`technologydata` is licensed under the open-source [MIT](https://opensource.org/license/mit) license: ```text MIT License -Copyright The technology-data authors +Copyright (c) 2026 technologydata contributors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the diff --git a/docs/home/release-notes.md b/docs/home/release-notes.md index 36a9d8bd..3fd24143 100644 --- a/docs/home/release-notes.md +++ b/docs/home/release-notes.md @@ -6,4 +6,4 @@ The features listed below are not released yet, but will be part of the next release! To use the features already you have to clone and install the repository from GitHub, e.g. using - ``pip install git+https://github.com/PyPSA/technology-data``. + ``pip install git+https://github.com/open-energy-transition/technology-data``. diff --git a/docs/home/users.md b/docs/home/users.md index 76711e86..c619137b 100644 --- a/docs/home/users.md +++ b/docs/home/users.md @@ -3,17 +3,23 @@ The following contains a list of users from academia, industry, institutions and organisations that are actively using `technologydata` or have used it in the past. The list references to specific projects to showcase the different use cases of `technologydata`. -If you are missing from this list and would like to be included, give us a shoutout on our Discord server, drop us a message elsewhere or open a pull request in the repository, as described . +If you are missing from this list and would like to be included, give us a shoutout on our [Discord server](https://discord.gg/T7YZbnVU), drop us a message elsewhere or open a pull request in the repository, as described . We would love to hear about your use case and stay in touch, in order to develop and evolve this package further. ## Academia and Research institutions -TODO + + +For the moment, this is a prototype of the new version of `technologydata`. Users will be specified at a later stage. ## Industry -TODO + + +For the moment, this is a prototype of the new version of `technologydata`. Users will be specified at a later stage. ## Institutions and Organisations -TODO + + +For the moment, this is a prototype of the new version of `technologydata`. Users will be specified at a later stage. diff --git a/docs/index.md b/docs/index.md index 7efe43cb..e66a6f9c 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,6 +1,15 @@ +

+ technologydata Header Logo +

+ +[![License](https://img.shields.io/pypi/l/pypsa.svg)](https://github.com/PyPSA/pypsa?tab=MIT-1-ov-file) +[![Discord](https://img.shields.io/discord/911692131440148490?logo=discord)](https://discord.gg/T7YZbnVU) + # technologydata: Techno-economic assumptions for energy models -!!! note "Under Construction" +`technologydata` is a Python package that supports the management of techno-economic assumptions for energy system models. +It provides a structured way to store, retrieve, and manipulate data related to various technologies used in energy systems, +including unit-ful parameters, currency conversions, inflation adjustment, and temporal modelling. - The documentation is currently under construction. - Please come back later. +The goal of this package is to make energy system modelling easier and more efficient, +automating common tasks and transformations to reduce errors and allowing for easier data exchange between models. diff --git a/docs/user_guide/class-diagram.puml b/docs/user_guide/class-diagram.puml index 1892e442..6492d977 100644 --- a/docs/user_guide/class-diagram.puml +++ b/docs/user_guide/class-diagram.puml @@ -1,5 +1,5 @@ /' -SPDX-FileCopyrightText: The technology-data authors +SPDX-FileCopyrightText: technologydata contributors SPDX-License-Identifier: MIT '/ diff --git a/docs/user_guide/datapackage.md b/docs/user_guide/datapackage.md new file mode 100644 index 00000000..c67e78d5 --- /dev/null +++ b/docs/user_guide/datapackage.md @@ -0,0 +1,113 @@ +# `DataPackage` Class Documentation + + + +## Overview + +The `DataPackage` class in `technologydata` provides a container for managing collections of `Technology` and `Source` objects, supporting batch operations and import/export utilities. It is designed to facilitate the organization, sharing, and processing of technology datasets, including provenance tracking and source management. + +## Features + +- **Technology Collection**: Stores a collection of `Technology` objects via the `TechnologyCollection` class. +- **Source Collection**: Stores a collection of `Source` objects via the `SourceCollection` class. +- **Batch Operations**: Supports batch export to JSON and CSV formats. +- **Source Extraction**: Automatically extracts and aggregates sources from all parameters in the technology collection. +- **Loading Utilities**: Provides methods to load a data package from JSON files. + +## Usage Examples + +### Creating a DataPackage + +You can create a `DataPackage` by instantiating it directly or by loading from JSON files. + +```python +from technologydata import DataPackage, TechnologyCollection, SourceCollection + +# Create a DataPackage with existing collections +dp = DataPackage( + technologies=TechnologyCollection(...), + sources=SourceCollection(...), +) +``` + +### Loading from JSON + +To load a `DataPackage` from a folder containing `technologies.json` and (optionally) `sources.json`: + +```python +from technologydata import DataPackage +dp = DataPackage.from_json("path/to/data_package_folder") +``` + +This will automatically extract sources from the technologies if not already present. + +### Exporting to JSON + +Export the data package to JSON files in a specified folder: + +```python +from technologydata import DataPackage, TechnologyCollection, SourceCollection + +# Create a DataPackage with existing collections +dp = DataPackage( + technologies=TechnologyCollection(...), + sources=SourceCollection(...), +) +dp.to_json("path/to/output_folder") +``` + +### Exporting to CSV + +Export the data package to CSV files: + +```python +from technologydata import DataPackage, TechnologyCollection, SourceCollection + +# Create a DataPackage with existing collections +dp = DataPackage( + technologies=TechnologyCollection(...), + sources=SourceCollection(...), +) + +dp.to_csv("path/to/output_folder") +# Creates technologies.csv and sources.csv in the output folder +``` + +### Extracting Source Collection + +The `sources` attribute of the `DataPackage` can be automatically populated by extracting the sources from the `TechnologyCollection`. + +In this context, `extracting` means scanning the `TechnologyCollection` for all `Source` references that appear in the technology parameters, and aggregating them into a single `SourceCollection`. The extraction process yields a collection of unique sources, by removing duplicates based on all source attributes. + +```python +from technologydata.datapackage import DataPackage +from technologydata.technology_collection import TechnologyCollection + +# Create a DataPackage with existing collections +dp = DataPackage( + technologies=TechnologyCollection(...), +) + +# Populate dp.sources with all unique sources from the technology collection +dp.get_source_collection() +``` + +Extracting the source collection can be useful in scenarios such as: + +- When loading a data package that does not include a `sources.json` file, to ensure that all sources referenced in the technologies are captured. +- Before exporting the data package (to `sources.json`, CSV, or for sharing) so the package includes a consistent, central catalog of sources. +- When you need to produce provenance, citation lists, or run validations that require an explicit `SourceCollection`. + +## API Reference + +Please refer to the [API documentation](../api/datapackage.md) for detailed information on the `DataPackage` class methods and attributes. + +## Limitations & Notes + +- **Error Handling**: If neither technologies nor sources are available, source extraction will raise a `ValueError`. +- **No Data Validation**: The class assumes that the underlying `TechnologyCollection` and `SourceCollection` are valid and compatible. diff --git a/docs/user_guide/design.md b/docs/user_guide/design.md index 4f01732c..b6e8fe7a 100644 --- a/docs/user_guide/design.md +++ b/docs/user_guide/design.md @@ -1,10 +1,4 @@ -# Use cases we have designed `technology-data` for - - +# Use cases we have designed `technologydata` for ## Design diff --git a/docs/models.md b/docs/user_guide/models.md similarity index 97% rename from docs/models.md rename to docs/user_guide/models.md index 21ba4e3c..d043bf4e 100644 --- a/docs/models.md +++ b/docs/user_guide/models.md @@ -1,11 +1,4 @@ -# Title - - +# Growth Models Documentation ## Models @@ -13,6 +6,8 @@ Different models can be used to modify assumptions to fit specific scenarios. ## Supported Model Types +`technologydata` currently supports the following model types: + - **Growth models**: For projecting technology parameters forward in time using mathematical models. These are implemented as Python classes and can be used for fitting to data and making projections. @@ -21,8 +16,6 @@ These are implemented as Python classes and can be used for fitting to data and Growth models are mathematical models for projecting technology parameters over time. They are implemented as Pydantic classes in `technologydata.technologies.growth_models` and can be used for both fitting to data and making projections. The following growth models are available: -### Available Growth Models - - `LinearGrowth`: Linear model, $f(x) = m \cdot (x - x_0) + c$ - `ExponentialGrowth`: Exponential model, $f(x) = A \cdot \exp(k \cdot (x - x_0))$ - `LogisticGrowth`: Logistic (sigmoid) model, $f(x) = \frac{L}{1 + \exp(-k \cdot (x - x_0))}$ @@ -36,7 +29,7 @@ Each model exposes: - A `project(to_year)` method to project to a given year. Requires all parameters of the models to be set, either manually or via fitting. - Data points can be added via each models constructor or later via the `add_data((x, y))` function -#### Model Parameters +### Model Parameters Each model has its own parameters, e.g. for `LinearGrowth` those are `x0`, `A` and `m`. These parameters can either be set when instantiating the model or later by setting the attributes directly. @@ -44,6 +37,7 @@ Not all parameters need to be set, e.g. if you are planning on fitting one param Omitting parameters can be done by either not providing them at all or setting them to `None`. ```python +from technologydata.technologies.growth_models import LinearGrowth model = LinearGrowth(x0=2020, A=None) # Set only x0; A and m are not set # Set A after instantiation of the model @@ -75,7 +69,7 @@ and the function docstring: ::: technologydata.technologies.growth_models.LinearGrowth.function ``` -#### Creating a model and projecting a value +### Creating a model and projecting a value To create a model, e.g. for the growth of electric vehicles over time, instantiate the model with the known parameters: @@ -101,7 +95,7 @@ LinearGrowth().function(2030, x0=2020, A=5_000_000, m=2_000_000) Note that when using the `function` method directly, all parameters must be explicitly provided. (TODO: maybe function should be a classmethod or read the parameters from the instance if they are set?) -#### Fitting a model to data +### Fitting a model to data To fit a model to data points, provide the data points to the model via the `data_points` argument when instantiating the model or add them later via the `add_data((x, y))` method: @@ -209,7 +203,6 @@ Take for example the following `TechnologyCollection` for utility scale solar ph ```python from technologydata import TechnologyCollection, Technology, Parameter -from technologydata.technologies.growth_models import ExponentialGrowth, LinearGrowth tc = TechnologyCollection( technologies=[ @@ -260,6 +253,7 @@ By using models it is possible to create consistent scenarios for the parameters Using the `.project()` method of the `TechnologyCollection`, models can be specified for each parameter to be projected to specified years: ```python +from technologydata.technologies.growth_models import ExponentialGrowth, LinearGrowth tc.project( to_years=[2010, 2020, 2030, 2040, 2050], parameters={ @@ -289,6 +283,7 @@ This allows models to be reused across multiple projections, e.g. for different A model can also be fit to data points before being provided to the `project` method, allowing more control over the fitting process like providing initial guesses `p0`: ```python +from technologydata.technologies.growth_models import ExponentialGrowth model = tc.fit( parameter="electricity supply", model=ExponentialGrowth(x0=2010), diff --git a/docs/user_guide/parameter.md b/docs/user_guide/parameter.md index 5a51ca3b..0354727d 100644 --- a/docs/user_guide/parameter.md +++ b/docs/user_guide/parameter.md @@ -1,12 +1,5 @@ # `Parameter` Class Documentation - - ## Overview The `Parameter` class in `technologydata` encapsulates a value, its unit, provenance, notes, sources, and additional attributes required to describe technology parameters, such as carrier and heating value. It is designed for use in energy system modeling workflows, supporting unit handling, currency/inflation adjustments, and provenance tracking. @@ -14,7 +7,7 @@ The `Parameter` class in `technologydata` encapsulates a value, its unit, proven ## Features - **Value and Units**: Stores a numerical value (`magnitude`) and its associated units (`units`). Units are handled using `pint` and support custom currency units (e.g., `USD_2020/kW`). The default `pint` units definition file is available [here](https://github.com/hgrecco/pint/blob/master/pint/default_en.txt) for reference. Be mindful of false unit-friends, e.g. `t = metric_ton = tonne != ton = US_ton` -- **Currency Unit Convention**: Currency units must follow the pattern `XYZ_YYYY`, where `XYZ` is the 3-letter [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) currency code (e.g., `USD`, `EUR`, `CNY`) and `YYYY` is the 4-digit year (e.g., `USD_2020`). This allows for both currency and inflation adjustment. +- **Currency Unit Convention**: Currency units must follow the pattern `XYZ_YYYY`, where `XYZ` is the 3-letter [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) currency code (e.g., `USD`, `EUR`, `CNY`) and `YYYY` is the 4-digit year (e.g., `USD_2020`). This allows for both currency and inflation adjustments. - **Carrier and Heating Value**: Optionally specify an energy carrier (e.g., `H2`) and a heating value type (`LHV` or `HHV`). - **Provenance and Notes**: Track the origin of the data and any additional notes. - **Sources**: Attach a `SourceCollection` of references for traceability. @@ -39,12 +32,12 @@ param = Parameter( provenance="Directly extracted from literature", note="Estimated", sources=SourceCollection(sources=[ - Source(name="Example Source", authors="some authors", title="Example Title") + Source(title="Example Title", authors="some authors") ]), ) >>> param -Parameter(magnitude=1000.0, units='USD_2020/kW', carrier='H2', heating_value='LHV', provenance='literature', note='Estimated', sources=SourceCollection(sources=[Source(name='Example Source', authors='some authors', title='Example Title')])) +Parameter(magnitude=1000.0, units='USD_2020/kW', carrier='H2', heating_value='LHV', provenance='literature', note='Estimated', sources=SourceCollection(sources=[Source(title='Example Title', authors='some authors', )])) ``` ### Unit Conversion (excluding currency) @@ -64,15 +57,17 @@ euro_param = param.to_currency("EUR_2023", "DEU", source="worldbank") 950.0 EUR_2023 / kilowatt ``` -Currency conversion and infation adjustment are also available for `Technology` and `TechnologyCollection` objects. -This allows to quickly adjust and harmonise the currency of all parameters in a technology or collection. +Currency conversion and inflation adjustment are also available for `Technology` and `TechnologyCollection` objects. This allows to quickly adjust and harmonise the currency of all parameters in a technology or collection. ```python # for a Technology from technologydata.technology import Technology tech = Technology( name="Example Tech", + detailed_technology="Detailed Example Tech", + case="Scenario", region="DEU", + year="2020", parameters={"cost": param} ) converted_tech = tech.to_currency("USD_2020", source="worldbank") @@ -88,7 +83,7 @@ USD_2020 / kilowatt ``` Compared to the `to_currency()` method of the `Parameter` class, the `to_currency()` methods of `Technology` and `TechnologyCollection` do not require specifying a country for inflation adjustment. -By default the `region` field of the `Technology` object or the `Technology` objects in the `TechnologyCollection` are used for inflation adjustment. +By default, the `region` field of the `Technology` object or the `Technology` objects in the `TechnologyCollection` are used for inflation adjustment. If the value of the `region` field should not be used or is not suitable, because e.g. it is not a valid ISO 3166 alpha-3 country code, the optional `overwrite_country` argument can be used to specify a different country code for inflation adjustment. ```python @@ -104,6 +99,8 @@ DEU ### Arithmetic Operations ```python +from technologydata.parameter import Parameter + param2 = Parameter(magnitude=500, units="USD_2020/kW", carrier="H2", heating_value="LHV") sum_param = param + param2 >>> print(sum_param.magnitude, sum_param.units) @@ -113,6 +110,8 @@ sum_param = param + param2 **Note:** If you try to add or subtract parameters with different carriers or heating values, a `ValueError` will be raised: ```python +from technologydata.parameter import Parameter + param_hhv = Parameter(magnitude=1, units="USD_2020/kW", carrier="H2", heating_value="HHV") param + param_hhv >>> # ValueError: Cannot add parameters with different heating values @@ -135,8 +134,7 @@ Only parameters with the same heating value can be used in arithmetic operations The heating value can be changed using the `change_heating_value` method, which uses the `carrier` attribute of the `Parameter` to determine the conversion factor between LHV and HHV based on their energy densities. - **Supported Carriers:** The method currently supports conversion for common carriers such as hydrogen and methane. For any other carrier that is not implemented, a ratio of 1 is assumed. -- **Changing Heating Value -- **Adding Carriers:** New carriers can be added programmatically by extending the `EnergyDensityLHV` and `EnergyDensityHHV` dictionaries in the `technologydata.constants`. The LHV/HHV ratio is calculated based on these two dictionaries, so any new carrier must have both LHV and HHV energy densities defined. In addition the carrier name must be a valid dimensionality defined in `technologydata.utils.units.creg`. +- **Adding Carriers:** New carriers can be added programmatically by extending the `EnergyDensityLHV` and `EnergyDensityHHV` dictionaries in `technologydata.constants`. The LHV/HHV ratio is calculated based on these two dictionaries, so any new carrier must have both LHV and HHV energy densities defined. In addition, the carrier name must be a valid dimensionality defined in `technologydata.utils.units.creg`. ### Example: Converting Between LHV and HHV @@ -165,7 +163,11 @@ param_mixed_hhv = param_mixed.change_heating_value("HHV") 0.13 kWh/kg higher_heating_value ``` -## Limitations & Missing Features +## API Reference + +Please refer to the [API documentation](../api/parameter.md) for detailed information on the `Parameter` class methods and attributes. + +## Notes - **Provenance/Note/Sources in Arithmetic**: When performing arithmetic operations, the handling and merging of `provenance`, `note`, and `sources` is not yet implemented (see `TODO` comments in the code). - **Unit Conversion**: The `.to()` method does not support currency conversion; use `.to_currency()` for that. diff --git a/docs/user_guide/source.md b/docs/user_guide/source.md new file mode 100644 index 00000000..95502d97 --- /dev/null +++ b/docs/user_guide/source.md @@ -0,0 +1,82 @@ +# `Source` Class Documentation + +## Overview + +The `Source` class in `technologydata` represents bibliographic and web sources, supporting metadata, archiving, and retrieval from the Wayback Machine. It is designed to track provenance, ensure reproducibility, and facilitate the management of references for technology parameters and datasets. + +## Features + +- **Bibliographic Metadata**: Stores title, authors, and optional URL, access date, archive URL, and archive date. +- **Equality and Hashing**: Implements equality and hashing for use in sets and as dictionary keys. +- **String Representation**: Provides a readable string summary of the source. +- **Wayback Machine Archiving**: Ensures URLs are archived and retrieves archive URLs and timestamps from the Wayback Machine. +- **File Retrieval**: Downloads archived files from the Wayback Machine to a specified directory. +- **Automatic File Naming**: Determines file extension and save path based on content type or URL. + +## Usage Examples + +### Creating a Source + +```python +from technologydata.source import Source +src = Source(title="Example Source", authors="The Authors", url="http://example.com") +``` + +A `Source` object can also be used to archive and retrieve PDFs or other files format as Excel. + +### Archiving a URL + +```python +from technologydata.source import Source +src = Source(title="Example Source", authors="The Authors", url="http://example.com") + +src.ensure_in_wayback() +print(src.url_archive) # Archived URL +print(src.url_date_archive) # Archive timestamp +``` + +### Downloading an Archived File + +```python +import pathlib +from technologydata.source import Source +src = Source(title="Example Source", authors="The Authors", url="http://example.com") + +output_path = src.retrieve_from_wayback(pathlib.Path("downloads/")) +print(output_path) # Path to downloaded file +``` + +### Example usage for an Excel file + +```python +import pathlib +import pandas as pd +from technologydata.source import Source + +# Create a Source for an Excel file +excel_src = Source(title="Example Spreadsheet", authors="The Authors", url="http://example.com/data.xlsx") + +# Ensure the URL is archived (creates an archive if missing) +excel_src.ensure_in_wayback() +print("Archive URL:", excel_src.url_archive) +print("Archive timestamp:", excel_src.url_date_archive) + +# Retrieve the archived file to `downloads/` +out_path = excel_src.retrieve_from_wayback(pathlib.Path("downloads/")) +print("Downloaded to:", out_path) + +# Read the downloaded Excel file with pandas +df = pd.read_excel(out_path) +print(df.head()) +``` + +## API Reference + +Please refer to the [API documentation](../api/source.md) for detailed information on the `Source` class methods and attributes. + +## Notes + +- **Archiving**: If the URL is not set, archiving will raise a `ValueError`. +- **File Extensions**: File extension is inferred from content type or URL; unsupported types raise a `ValueError`. +- **HTTP Errors**: Download and content type retrieval may raise `requests.exceptions.RequestException`. +- **Duplicates**: Equality and hashing are based on all attributes; sources with identical metadata are considered equal. diff --git a/docs/user_guide/source_collection.md b/docs/user_guide/source_collection.md new file mode 100644 index 00000000..1ce9970d --- /dev/null +++ b/docs/user_guide/source_collection.md @@ -0,0 +1,97 @@ +# `SourceCollection` Class Documentation + +## Overview + +The `SourceCollection` class in `technologydata` represents a collection of `Source` objects, providing tools for filtering, exporting, archiving, and data conversion. It is designed to manage multiple bibliographic or web sources, supporting reproducibility and provenance tracking for technology datasets. + +## Features + +- **Collection Management**: Stores and iterates over multiple `Source` objects. +- **Filtering**: Supports regex-based filtering by title and authors. +- **Archiving**: Downloads archived files for all sources using the Wayback Machine. +- **Data Export**: Converts the collection to pandas DataFrame, CSV, and JSON formats. +- **Schema Export**: Exports a JSON schema describing the collection structure. +- **Integration**: Designed for use with technology parameters and datasets. + +## Usage Examples + +### Creating a SourceCollection + +```python +from technologydata.source import Source +from technologydata.source_collection import SourceCollection + +src1 = Source(title="Source One", authors="Author A", url="http://example.com/1") +src2 = Source(title="Source Two", authors="Author B", url="http://example.com/2") +collection = SourceCollection(sources=[src1, src2]) +``` + +### Filtering Sources + +```python +from technologydata.source import Source +from technologydata.source_collection import SourceCollection + +src1 = Source(title="Source One", authors="Author A", url="http://example.com/1") +src2 = Source(title="Source Two", authors="Author B", url="http://example.com/2") +collection = SourceCollection(sources=[src1, src2]) + +filtered = collection.get(title="Source One", authors="Author A") +print(filtered) # SourceCollection with sources matching the patterns +``` + +### Exporting to CSV + +```python +from technologydata.source import Source +from technologydata.source_collection import SourceCollection + +src1 = Source(title="Source One", authors="Author A", url="http://example.com/1") +src2 = Source(title="Source Two", authors="Author B", url="http://example.com/2") +collection = SourceCollection(sources=[src1, src2]) + +collection.to_csv(path_or_buf="sources.csv") +``` + +### Exporting to JSON and Schema + +```python +import pathlib + +from technologydata.source import Source +from technologydata.source_collection import SourceCollection + +src1 = Source(title="Source One", authors="Author A", url="http://example.com/1") +src2 = Source(title="Source Two", authors="Author B", url="http://example.com/2") +collection = SourceCollection(sources=[src1, src2]) + +collection.to_json(file_path=pathlib.Path("sources.json")) +``` + +### Downloading Archived Files + +```python +import pathlib + +from technologydata.source import Source +from technologydata.source_collection import SourceCollection + +src1 = Source(title="Source One", authors="Author A", url="http://example.com/1") +src2 = Source(title="Source Two", authors="Author B", url="http://example.com/2") +collection = SourceCollection(sources=[src1, src2]) + +downloaded_paths = collection.retrieve_all_from_wayback(pathlib.Path("downloads/")) +print(downloaded_paths) +``` + +## API Reference + +Please refer to the [API documentation](../api/source_collection.md) for detailed information on the `SourceCollection` class methods and attributes. + +## Notes + +- **Filtering**: Regex patterns are case-insensitive and applied to non-optional attributes. +- **Archiving**: Download failures return `None` for the corresponding source. +- **Export**: Default CSV export uses UTF-8 encoding and quotes all fields. +- **Schema**: JSON schema is generated automatically and includes field descriptions. +- **Type Checking**: The class uses Pydantic for validation and type enforcement. diff --git a/docs/user_guide/technology.md b/docs/user_guide/technology.md new file mode 100644 index 00000000..2adc6faa --- /dev/null +++ b/docs/user_guide/technology.md @@ -0,0 +1,136 @@ +# `Technology` Class Documentation + +## Overview + +The `Technology` class in `technologydata` represents a single technology, including its region, year, scenario, and a flexible set of parameters. It provides methods for accessing, modifying, and transforming technology parameters, as well as for currency adjustment and scaling. + +## Features + +- **Flexible Parameter Storage**: Stores technology parameters as a dictionary mapping names to `Parameter` objects. +- **Region, Year, and Scenario**: Tracks metadata for each technology, including `region`, `year`, `case`, and `detailed technology` name. +- **Parameter Access**: Supports dictionary-like access and assignment for parameters. +- **Consistency Checking**: Checks for completeness and consistency of required parameters. +- **Parameter Calculation**: Placeholder for calculating missing or derived parameters. +- **Currency Adjustment**: Harmonizes all technology parameters to a target currency, including inflation and exchange rates. +- **Region and Scale Adjustment**: Placeholder methods for adjusting technology parameters to a different region or scaling values. + +## Usage Examples + +### Creating a Technology + +```python +from technologydata.technology import Technology +from technologydata.parameter import Parameter + +tech = Technology( + name="Solar PV", + detailed_technology="Crystalline Silicon", + case="Base", + region="DEU", + year=2020, + parameters={ + "specific_investment": Parameter(magnitude=1000, units="EUR_2020/kW"), + "lifetime": Parameter(magnitude=25, units="year"), + } +) +``` + +### Accessing and Setting Parameters + +```python +from technologydata.technology import Technology +from technologydata.parameter import Parameter + +tech = Technology( + name="Solar PV", + detailed_technology="Crystalline Silicon", + case="Base", + region="DEU", + year=2020, + parameters={ + "specific_investment": Parameter(magnitude=1000, units="EUR_2020/kW"), + "lifetime": Parameter(magnitude=25, units="year"), + } +) + +# Access a parameter +investment = tech["specific_investment"] + +# Set a parameter +tech["efficiency"] = Parameter(magnitude=0.18, units=None) +``` + +### Checking Consistency + +```python +from technologydata.technology import Technology +from technologydata.parameter import Parameter + +tech = Technology( + name="Solar PV", + detailed_technology="Crystalline Silicon", + case="Base", + region="DEU", + year=2020, + parameters={ + "specific_investment": Parameter(magnitude=1000, units="EUR_2020/kW"), + "lifetime": Parameter(magnitude=25, units="year"), + } +) + +is_consistent = tech.check_consistency() +print(is_consistent) # True if all required parameters are present +``` + +### Adjusting Currency + +```python +from technologydata.technology import Technology +from technologydata.parameter import Parameter + +tech = Technology( + name="Solar PV", + detailed_technology="Crystalline Silicon", + case="Base", + region="DEU", + year=2020, + parameters={ + "specific_investment": Parameter(magnitude=1000, units="EUR_2020/kW"), + "lifetime": Parameter(magnitude=25, units="year"), + } +) + +converted_tech = tech.to_currency("USD_2025", source="worldbank") +``` + +### Scaling Parameters + +```python +from technologydata.technology import Technology +from technologydata.parameter import Parameter + +tech = Technology( + name="Solar PV", + detailed_technology="Crystalline Silicon", + case="Base", + region="DEU", + year=2020, + parameters={ + "specific_investment": Parameter(magnitude=1000, units="EUR_2020/kW"), + "lifetime": Parameter(magnitude=25, units="year"), + } +) + +scaled_tech = tech.adjust_scale(1.1) +``` + +## API Reference + +Please refer to the [API documentation](../api/technology.md) for detailed information on the `Technology` class methods and attributes. + +## Notes + +- **Parameter Calculation**: The method for calculating missing or derived parameters is a placeholder and not yet implemented. +- **Region and Scale Adjustment**: Methods for region and scale adjustment are placeholders. +- **Consistency Checking**: Only checks for the presence of required parameters; does not validate values. +- **Type Checking**: The class uses Pydantic for validation and type enforcement. diff --git a/docs/user_guide/technology_collection.md b/docs/user_guide/technology_collection.md new file mode 100644 index 00000000..9b745481 --- /dev/null +++ b/docs/user_guide/technology_collection.md @@ -0,0 +1,128 @@ +# `TechnologyCollection` Class Documentation + +## Overview + +The `TechnologyCollection` class in `technologydata` represents a collection of `Technology` objects, providing tools for filtering, exporting, currency adjustment, model fitting, and projection. It is designed to manage multiple technology datasets, supporting reproducibility, scenario analysis, and future projections. + +## Features + +- **Collection Management**: Stores and iterates over multiple `Technology` objects. +- **Filtering**: Supports regex-based filtering by attributes `name`, `region`, `year`, `case`, and `detailed technology`. +- **Data Export**: Converts the collection to pandas DataFrame, CSV, and JSON formats, with schema export. +- **Currency Adjustment**: Harmonizes all technology parameters to a target currency, including inflation and exchange rates. +- **Model Fitting**: Fits growth models to technology parameters across the collection. +- **Projection**: Projects parameters to future years using growth models or statistical options. +- **Integration**: Designed for use with energy system modeling and technology parameter analysis. + +## Usage Examples + +### Creating a TechnologyCollection + +```python +from technologydata.technology import Technology +from technologydata.technology_collection import TechnologyCollection + +tech1 = Technology(name="Tech1", region="DEU", year=2020, case="Base", detailed_technology="Solar PV", parameters={}) +tech2 = Technology(name="Tech2", region="DEU", year=2021, case="Base", detailed_technology="Wind", parameters={}) +collection = TechnologyCollection(technologies=[tech1, tech2]) +``` + +### Filtering Technologies + +```python +from technologydata.technology import Technology +from technologydata.technology_collection import TechnologyCollection + +tech1 = Technology(name="Tech1", region="DEU", year=2020, case="Base", detailed_technology="Solar PV", parameters={}) +tech2 = Technology(name="Tech2", region="DEU", year=2021, case="Base", detailed_technology="Wind", parameters={}) +collection = TechnologyCollection(technologies=[tech1, tech2]) + +filtered = collection.get(name="Tech", region="DEU", year=2020, case="Base", detailed_technology="Solar") +print(filtered) # TechnologyCollection with matching technologies +``` + +### Exporting to CSV + +```python +from technologydata.technology import Technology +from technologydata.technology_collection import TechnologyCollection + +tech1 = Technology(name="Tech1", region="DEU", year=2020, case="Base", detailed_technology="Solar PV", parameters={}) +tech2 = Technology(name="Tech2", region="DEU", year=2021, case="Base", detailed_technology="Wind", parameters={}) +collection = TechnologyCollection(technologies=[tech1, tech2]) + +collection.to_csv(path_or_buf="technologies.csv") +``` + +### Exporting to JSON and Schema + +```python +import pathlib +from technologydata.technology import Technology +from technologydata.technology_collection import TechnologyCollection + +tech1 = Technology(name="Tech1", region="DEU", year=2020, case="Base", detailed_technology="Solar PV", parameters={}) +tech2 = Technology(name="Tech2", region="DEU", year=2021, case="Base", detailed_technology="Wind", parameters={}) +collection = TechnologyCollection(technologies=[tech1, tech2]) + +collection.to_json(file_path=pathlib.Path("technologies.json")) +``` + +### Currency Adjustment + +```python +from technologydata.technology import Technology +from technologydata.technology_collection import TechnologyCollection + +tech1 = Technology(name="Tech1", region="DEU", year=2020, case="Base", detailed_technology="Solar PV", parameters={}) +tech2 = Technology(name="Tech2", region="DEU", year=2021, case="Base", detailed_technology="Wind", parameters={}) +collection = TechnologyCollection(technologies=[tech1, tech2]) +converted = collection.to_currency("USD_2025", source="worldbank") +``` + +### Fitting a Growth Model + +```python +from technologydata.technologies.growth_models import LinearGrowth +from technologydata.technology import Technology +from technologydata.technology_collection import TechnologyCollection + +tech1 = Technology(name="Tech1", region="DEU", year=2020, case="Base", detailed_technology="Solar PV", parameters={}) +tech2 = Technology(name="Tech2", region="DEU", year=2021, case="Base", detailed_technology="Wind", parameters={}) +collection = TechnologyCollection(technologies=[tech1, tech2]) + +fitted_model = collection.fit(parameter="installed capacity", model=LinearGrowth(m=0.5, A=10)) +``` + +### Projecting Parameters + +```python +from technologydata.technologies.growth_models import LinearGrowth +from technologydata.technology import Technology +from technologydata.technology_collection import TechnologyCollection + +tech1 = Technology(name="Tech1", region="DEU", year=2020, case="Base", detailed_technology="Solar PV", parameters={}) +tech2 = Technology(name="Tech2", region="DEU", year=2021, case="Base", detailed_technology="Wind", parameters={}) +collection = TechnologyCollection(technologies=[tech1, tech2]) + +projected = collection.project( + to_years=[2030, 2040], + parameters={ + "installed capacity": LinearGrowth(m=0.5, A=10), + "lifetime": "mean", + "efficiency": "NaN" + } +) +``` + +## API Reference + +Please refer to the [API documentation](../api/technology_collection.md) for detailed information on the `TechnologyCollection` class methods and attributes. + +## Notes + +- **Filtering**: Regex patterns are case-insensitive and applied to non-optional attributes. +- **Export**: Default CSV export uses UTF-8 encoding and quotes all fields. +- **Schema**: JSON schema is generated automatically and includes field descriptions. +- **Type Checking**: The class uses Pydantic for validation and type enforcement. +- **Projection**: The 'closest' option for parameter projection is not yet implemented. diff --git a/mkdocs.yaml b/mkdocs.yaml index 4304e194..7456ad0c 100644 --- a/mkdocs.yaml +++ b/mkdocs.yaml @@ -1,7 +1,7 @@ site_name: Documentation site_url: !ENV READTHEDOCS_CANONICAL_URL -repo_url: https://github.com/PyPSA/technology-data -repo_name: PyPSA/technology-data +repo_url: https://github.com/open-energy-transition/technology-data +repo_name: open-energy-transition/technology-data edit_uri: edit/master/docs/ # Navigation @@ -21,8 +21,34 @@ nav: - Contacts: home/contacts.md - User Guide: - - Use Cases: user_guide/design.md + - Data Package: user_guide/datapackage.md + - Models: user_guide/models.md - Parameter: user_guide/parameter.md + - Source: user_guide/source.md + - Source Collection: user_guide/source_collection.md + - Technology: user_guide/technology.md + - Technology Collection: user_guide/technology_collection.md + - Use Cases: user_guide/design.md + +- Examples: + - Danish Energy Agency Parser: examples/dea_storage.md + +- API Reference: + - Data Package: api/datapackage.md + - Parameter: api/parameter.md + - Source: api/source.md + - Source Collection: api/source_collection.md + - Technology: api/technology.md + - Technology Collection: api/technology_collection.md + - Utils: + - Commons: + - Common functionalities: api/commons/commons.md + - File extension enumeration: api/commons/fileextensionenum.md + - Date format enumeration: api/commons/dateformatenum.md + - Units: + - Custom undefined unit error: api/units/customundefineduniterror.md + - Special unit registry: api/units/specialunitregistry.md + - Contributing: - Instructions: contributing/instructions.md @@ -128,7 +154,7 @@ plugins: - argref: autolinks: - reference_prefix: ":octicons-git-pull-request-16:" - target_url: https://github.com/PyPSA/technology-data/pull/ + target_url: https://github.com/open-energy-transition/technology-data/pull/ - social: cards_layout_options: font_family: Overpass @@ -148,6 +174,7 @@ plugins: filters: - "!^_[^_]" - "!logger" + - "!iteration" heading_level: 1 merge_init_into_class: true parameter_headings: false @@ -162,9 +189,10 @@ plugins: summary: true show_if_no_docstring: true show_inheritance_diagram: true + show_root_toc_entry: false hooks: - docs/assets/overrides/hooks/shortcodes.py copyright: >- - © The technology-data authors + © technologydata contributors diff --git a/pyproject.toml b/pyproject.toml index 0303bd82..2bc9070c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: The technology-data authors +# SPDX-FileCopyrightText: technologydata contributors # # SPDX-License-Identifier: MIT @@ -40,10 +40,10 @@ dependencies = [ ] [project.urls] -Homepage = "https://github.com/PyPSA/technology-data" -Source = "https://github.com/PyPSA/technology-data" -BugTracker = "https://github.com/PyPSA/technology-data/issues" -Changelog = "https://github.com/PyPSA/technology-data/releases" +Homepage = "https://github.com/open-energy-transition/technology-data" +Source = "https://github.com/open-energy-transition/technology-data" +BugTracker = "https://github.com/open-energy-transition/technology-data/issues" +Changelog = "https://github.com/open-energy-transition/technology-data/releases" # https://docs.astral.sh/uv/concepts/projects/dependencies/#dependency-groups # editable installation of package and non-packaged dependencies diff --git a/src/technologydata/__init__.py b/src/technologydata/__init__.py index 1e2962ef..75bb5122 100644 --- a/src/technologydata/__init__.py +++ b/src/technologydata/__init__.py @@ -1,4 +1,5 @@ -# SPDX-FileCopyrightText: The technology-data authors +# SPDX-FileCopyrightText: technologydata contributors +# # SPDX-License-Identifier: MIT """technologydata: A package for managing and analyzing technology data used for energy system models.""" diff --git a/src/technologydata/constants/__init__.py b/src/technologydata/constants/__init__.py index 3c2b6ca2..24351d20 100644 --- a/src/technologydata/constants/__init__.py +++ b/src/technologydata/constants/__init__.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: The technology-data authors +# SPDX-FileCopyrightText: technologydata contributors # # SPDX-License-Identifier: MIT diff --git a/src/technologydata/constants/energy_density.py b/src/technologydata/constants/energy_density.py index 51b005c7..1146783f 100644 --- a/src/technologydata/constants/energy_density.py +++ b/src/technologydata/constants/energy_density.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: The technology-data authors +# SPDX-FileCopyrightText: technologydata contributors # # SPDX-License-Identifier: MIT diff --git a/src/technologydata/datapackage.py b/src/technologydata/datapackage.py index 10c0c340..78e91593 100644 --- a/src/technologydata/datapackage.py +++ b/src/technologydata/datapackage.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: The technology-data authors +# SPDX-FileCopyrightText: technologydata contributors # # SPDX-License-Identifier: MIT diff --git a/src/technologydata/package_data/dea_energy_storage/dea_energy_storage.py b/src/technologydata/package_data/dea_energy_storage/dea_energy_storage.py index da178dc8..69b0b562 100644 --- a/src/technologydata/package_data/dea_energy_storage/dea_energy_storage.py +++ b/src/technologydata/package_data/dea_energy_storage/dea_energy_storage.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: The technology-data authors +# SPDX-FileCopyrightText: technologydata contributors # # SPDX-License-Identifier: MIT diff --git a/src/technologydata/parameter.py b/src/technologydata/parameter.py index 34d59200..2db0f7b7 100644 --- a/src/technologydata/parameter.py +++ b/src/technologydata/parameter.py @@ -1,18 +1,8 @@ -# SPDX-FileCopyrightText: The technology-data authors +# SPDX-FileCopyrightText: technologydata contributors # # SPDX-License-Identifier: MIT -""" -Parameter class for encapsulating a value, its unit, provenance, notes, and sources. - -Examples --------- ->>> from technologydata.source import Source ->>> uv = pint.Quantity(1000, "EUR_2020/kW") ->>> src = Source(name="Example Source", authors="some authors", url="http://example.com") ->>> param = Parameter(quantity=uv, provenance="literature", note="Estimated", sources=[src]) - -""" +"""Parameter class for encapsulating a value, its unit, provenance, notes, and sources.""" import logging from typing import Annotated, Self diff --git a/src/technologydata/source.py b/src/technologydata/source.py index 7fda6b9b..73dcd338 100644 --- a/src/technologydata/source.py +++ b/src/technologydata/source.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: The technology-data authors +# SPDX-FileCopyrightText: technologydata contributors # # SPDX-License-Identifier: MIT @@ -140,10 +140,6 @@ def ensure_in_wayback(self) -> None: an archived URL or archive date is already present. If neither is available, it attempts to archive the URL using the Wayback Machine and updates the corresponding attributes. - Parameters - ---------- - None - Returns ------- None diff --git a/src/technologydata/source_collection.py b/src/technologydata/source_collection.py index 4e14d4f2..4ab8ddd4 100644 --- a/src/technologydata/source_collection.py +++ b/src/technologydata/source_collection.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: The technology-data authors +# SPDX-FileCopyrightText: technologydata contributors # # SPDX-License-Identifier: MIT diff --git a/src/technologydata/technologies/__init__.py b/src/technologydata/technologies/__init__.py index 5cbb4a64..0a01b9f6 100644 --- a/src/technologydata/technologies/__init__.py +++ b/src/technologydata/technologies/__init__.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2025 The technology-data authors +# SPDX-FileCopyrightText: technologydata contributors # # SPDX-License-Identifier: MIT diff --git a/src/technologydata/technologies/growth_models.py b/src/technologydata/technologies/growth_models.py index dbfa2774..23183c8a 100644 --- a/src/technologydata/technologies/growth_models.py +++ b/src/technologydata/technologies/growth_models.py @@ -1,6 +1,7 @@ -# SPDX-FileCopyrightText: 2025 The technology-data authors +# SPDX-FileCopyrightText: technologydata contributors # # SPDX-License-Identifier: MIT + """Growth models for projecting technology parameters over time.""" import inspect diff --git a/src/technologydata/technology.py b/src/technologydata/technology.py index eafb5811..8065f8e1 100644 --- a/src/technologydata/technology.py +++ b/src/technologydata/technology.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: The technology-data authors +# SPDX-FileCopyrightText: technologydata contributors # # SPDX-License-Identifier: MIT diff --git a/src/technologydata/technology_collection.py b/src/technologydata/technology_collection.py index 5e7a56ab..b3f78fa1 100644 --- a/src/technologydata/technology_collection.py +++ b/src/technologydata/technology_collection.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: The technology-data authors +# SPDX-FileCopyrightText: technologydata contributors # # SPDX-License-Identifier: MIT diff --git a/src/technologydata/utils/__init__.py b/src/technologydata/utils/__init__.py index d7f45354..98e977c7 100644 --- a/src/technologydata/utils/__init__.py +++ b/src/technologydata/utils/__init__.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: The technology-data authors +# SPDX-FileCopyrightText: technologydata contributors # # SPDX-License-Identifier: MIT diff --git a/src/technologydata/utils/carriers.txt b/src/technologydata/utils/carriers.txt index 41108aa5..ab41391c 100644 --- a/src/technologydata/utils/carriers.txt +++ b/src/technologydata/utils/carriers.txt @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: The technology-data authors +# SPDX-FileCopyrightText: technologydata contributors # # SPDX-License-Identifier: MIT diff --git a/src/technologydata/utils/commons.py b/src/technologydata/utils/commons.py index 64b829f9..a740a7e0 100644 --- a/src/technologydata/utils/commons.py +++ b/src/technologydata/utils/commons.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: The technology-data authors +# SPDX-FileCopyrightText: technologydata contributors # # SPDX-License-Identifier: MIT diff --git a/src/technologydata/utils/heating_values.txt b/src/technologydata/utils/heating_values.txt index 8b2162db..5afde0e4 100644 --- a/src/technologydata/utils/heating_values.txt +++ b/src/technologydata/utils/heating_values.txt @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: The technology-data authors +# SPDX-FileCopyrightText: technologydata contributors # # SPDX-License-Identifier: MIT diff --git a/src/technologydata/utils/units.py b/src/technologydata/utils/units.py index 47ce8131..d12eaac2 100644 --- a/src/technologydata/utils/units.py +++ b/src/technologydata/utils/units.py @@ -1,6 +1,7 @@ -# SPDX-FileCopyrightText: The technology-data authors +# SPDX-FileCopyrightText: technologydata contributors # # SPDX-License-Identifier: MIT + """Submodule containing pint.UnitRegistry subclasses and utility functions for handling units, conversions, and currency units.""" import json diff --git a/test/conftest.py b/test/conftest.py index a1f77a9d..07d6ba9f 100644 --- a/test/conftest.py +++ b/test/conftest.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: The technology-data authors +# SPDX-FileCopyrightText: technologydata contributors # # SPDX-License-Identifier: MIT diff --git a/test/test_commons.py b/test/test_commons.py index 1c302f56..e9deb158 100644 --- a/test/test_commons.py +++ b/test/test_commons.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: The technology-data authors +# SPDX-FileCopyrightText: technologydata contributors # # SPDX-License-Identifier: MIT diff --git a/test/test_datapackage.py b/test/test_datapackage.py index ce345e87..d6d24489 100644 --- a/test/test_datapackage.py +++ b/test/test_datapackage.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: The technology-data authors +# SPDX-FileCopyrightText: technologydata contributors # # SPDX-License-Identifier: MIT diff --git a/test/test_dea_energy_storage.py b/test/test_dea_energy_storage.py index 7a74e1ad..2da6ccc4 100644 --- a/test/test_dea_energy_storage.py +++ b/test/test_dea_energy_storage.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: The technology-data authors +# SPDX-FileCopyrightText: technologydata contributors # # SPDX-License-Identifier: MIT diff --git a/test/test_growth_models.py b/test/test_growth_models.py index a29a10f9..d2a4cbf5 100644 --- a/test/test_growth_models.py +++ b/test/test_growth_models.py @@ -1,4 +1,5 @@ -# SPDX-FileCopyrightText: 2025 The technology-data authors +# SPDX-FileCopyrightText: technologydata contributors +# # SPDX-License-Identifier: MIT """Unit tests for growth models in technologydata.technologies.growth_models.""" diff --git a/test/test_parameter.py b/test/test_parameter.py index e99a1a42..116abcd3 100644 --- a/test/test_parameter.py +++ b/test/test_parameter.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: The technology-data authors +# SPDX-FileCopyrightText: technologydata contributors # # SPDX-License-Identifier: MIT diff --git a/test/test_source.py b/test/test_source.py index 92fa313b..4e3dab27 100644 --- a/test/test_source.py +++ b/test/test_source.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: The technology-data authors +# SPDX-FileCopyrightText: technologydata contributors # # SPDX-License-Identifier: MIT diff --git a/test/test_source_collection.py b/test/test_source_collection.py index 7ec6e7f9..faa95fb5 100644 --- a/test/test_source_collection.py +++ b/test/test_source_collection.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: The technology-data authors +# SPDX-FileCopyrightText: technologydata contributors # # SPDX-License-Identifier: MIT diff --git a/test/test_technology.py b/test/test_technology.py index 14495733..c85b823f 100644 --- a/test/test_technology.py +++ b/test/test_technology.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: The technology-data authors +# SPDX-FileCopyrightText: technologydata contributors # # SPDX-License-Identifier: MIT diff --git a/test/test_technology_collection.py b/test/test_technology_collection.py index 84560d50..db1537fe 100644 --- a/test/test_technology_collection.py +++ b/test/test_technology_collection.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: The technology-data authors +# SPDX-FileCopyrightText: technologydata contributors # # SPDX-License-Identifier: MIT diff --git a/test/test_units.py b/test/test_units.py index e729a327..d2a033c4 100644 --- a/test/test_units.py +++ b/test/test_units.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: The technology-data authors +# SPDX-FileCopyrightText: technologydata contributors # # SPDX-License-Identifier: MIT """Test the creation of custom units and handling of currencies using Pint.""" From 78bd9cbdf626967f5479efe39c838bf727deb142 Mon Sep 17 00:00:00 2001 From: Fabrizio Finozzi <167071962+finozzifa@users.noreply.github.com> Date: Mon, 19 Jan 2026 10:27:41 +0100 Subject: [PATCH 32/43] add first version of release.yml (#84) --- .github/workflows/release.yml | 139 ++++++++++++++++++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 .github/workflows/release.yml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..57f75fef --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,139 @@ +# SPDX-FileCopyrightText: technologydata contributors +# +# SPDX-License-Identifier: MIT + +name: Release + +on: + push: + tags: + - v*.*.* + +env: + PREPARATION_COMMIT: '[github-actions.ci] prepare release ${{ github.ref_name }}' + +jobs: + check-preparation: + name: Check if release is prepared + runs-on: ubuntu-latest + outputs: + prepared: ${{ steps.validate.outputs.prepared }} + steps: + - uses: actions/checkout@v6 + + - name: Validate commit message + id: validate + run: | + # Check if last commit is the expected commit message + COMMIT_MESSAGE=$(git log -1 --pretty=%B) + echo "Expected: '${{ env.PREPARATION_COMMIT }}'" + echo "Received: '$COMMIT_MESSAGE'" + + prepared="false" + if [[ "$COMMIT_MESSAGE" == "${{ env.PREPARATION_COMMIT }}" ]]; then + prepared="true" + fi + + echo "prepared=$prepared" >> $GITHUB_OUTPUT + + prepare-release: + name: Prepare release + needs: [check-preparation] + if: ${{ needs.check-preparation.outputs.prepared == 'false' }} + runs-on: ubuntu-latest + steps: + - name: Find the branch for commit/ tag + run: | + branch=$(git branch -r --contains ${{ github.sha }} | grep -v 'HEAD' | head -n 1 | sed 's|origin/||' | sed 's/^[[:space:]]*//;s/[[:space:]]*$//') + echo "Branch found: $branch" + echo "BRANCH_NAME=$branch" >> $GITHUB_ENV + + - uses: actions/checkout@v6 + with: + fetch-depth: 0 + ref: ${{ env.BRANCH_NAME }} + token: ${{ steps.generate-token.outputs.token }} + + # Start of preparation script + + - uses: actions/setup-python@v6 + with: + python-version: 3.12 + + - name: Install packages + run: | + python -m pip install uv + uv pip install --system toml + uv pip install --system setuptools_scm + uv pip install --system . + + - name: Update CITATION.cff + run: | + import re + from setuptools_scm import get_version + + version = get_version() + + with open('CITATION.cff', 'r') as file: + cff_content = file.read() + cff_content = open('CITATION.cff', 'r').read() + + updated_cff_content = re.sub(r"(?<=version: ).+(?= #)",version,cff_content,flags=re.MULTILINE) + + with open('CITATION.cff', 'w') as file: + file.write(updated_cff_content) + shell: python + + # End of preparation script + + - name: Remove previous tag + run: | + git tag -d ${{ github.ref_name }} + git push origin --delete ${{ github.ref_name }} + + - name: Commit changes + uses: stefanzweifel/git-auto-commit-action@v7 + with: + branch: ${{ env.BRANCH_NAME }} + commit_message: '${{ env.PREPARATION_COMMIT }}' + tagging_message: '${{ github.ref_name }}' # add tag again + push_options: '${{ github.ref_name }}' + add_options: '-u' # Never add untracked files + + build: + name: Build and verify package + needs: [check-preparation] + if: ${{ needs.check-preparation.outputs.prepared == 'true' }} + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + - uses: hynek/build-and-inspect-python-package@v2 + + release: + name: Create GitHub release + needs: [build] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + - uses: softprops/action-gh-release@v2 + with: + body: | + Revised release notes are available in the documentation. + append_body: true + generate_release_notes: true + + publish: + name: Publish to PyPI + needs: [build] + runs-on: ubuntu-latest + environment: + name: pypi + url: https://pypi.org/project/technologydata + permissions: + id-token: write + steps: + - uses: actions/download-artifact@v6 + with: + name: Packages + path: dist + - uses: pypa/gh-action-pypi-publish@release/v1 From daa20c771edd6c9e5db1cb8fc17d3d8dfb280330 Mon Sep 17 00:00:00 2001 From: Fabrizio Finozzi Date: Mon, 19 Jan 2026 10:34:28 +0100 Subject: [PATCH 33/43] Prepare Release v0.1.0 --- docs/home/release-notes.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/home/release-notes.md b/docs/home/release-notes.md index 3fd24143..a7914e3a 100644 --- a/docs/home/release-notes.md +++ b/docs/home/release-notes.md @@ -1,5 +1,6 @@ # Release Notes + + +### Release v0.1.0 +First version of the new `technologydata` prototype. + From 2700fd6c05e9c7589e61151887a0e9d93b072c60 Mon Sep 17 00:00:00 2001 From: Fabrizio Finozzi Date: Mon, 19 Jan 2026 10:52:42 +0100 Subject: [PATCH 34/43] Prepare Release v0.1.0 --- .github/workflows/release.yml | 11 +++-------- docs/home/release-notes.md | 3 ++- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 57f75fef..41805283 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -42,18 +42,13 @@ jobs: if: ${{ needs.check-preparation.outputs.prepared == 'false' }} runs-on: ubuntu-latest steps: + - name: Find the branch for commit/ tag run: | branch=$(git branch -r --contains ${{ github.sha }} | grep -v 'HEAD' | head -n 1 | sed 's|origin/||' | sed 's/^[[:space:]]*//;s/[[:space:]]*$//') echo "Branch found: $branch" echo "BRANCH_NAME=$branch" >> $GITHUB_ENV - - uses: actions/checkout@v6 - with: - fetch-depth: 0 - ref: ${{ env.BRANCH_NAME }} - token: ${{ steps.generate-token.outputs.token }} - # Start of preparation script - uses: actions/setup-python@v6 @@ -113,6 +108,8 @@ jobs: name: Create GitHub release needs: [build] runs-on: ubuntu-latest + permissions: + contents: write steps: - uses: actions/checkout@v6 - uses: softprops/action-gh-release@v2 @@ -129,8 +126,6 @@ jobs: environment: name: pypi url: https://pypi.org/project/technologydata - permissions: - id-token: write steps: - uses: actions/download-artifact@v6 with: diff --git a/docs/home/release-notes.md b/docs/home/release-notes.md index a7914e3a..ffd159e9 100644 --- a/docs/home/release-notes.md +++ b/docs/home/release-notes.md @@ -1,6 +1,7 @@ # Release Notes ### Release v0.1.0 -First version of the new `technologydata` prototype. +First version of the new `technologydata` prototype. From 7ca5abce2a70e9cdd75ca07c21214df77f5b8cf3 Mon Sep 17 00:00:00 2001 From: Fabrizio Finozzi Date: Mon, 19 Jan 2026 11:02:16 +0100 Subject: [PATCH 35/43] Prepare Release v0.1.0 --- .github/workflows/release.yml | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 41805283..93d11255 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -33,7 +33,7 @@ jobs: if [[ "$COMMIT_MESSAGE" == "${{ env.PREPARATION_COMMIT }}" ]]; then prepared="true" fi - + prepared="true" # HOTFIX as preparation step is not working. Force true echo "prepared=$prepared" >> $GITHUB_OUTPUT prepare-release: @@ -42,13 +42,18 @@ jobs: if: ${{ needs.check-preparation.outputs.prepared == 'false' }} runs-on: ubuntu-latest steps: - - name: Find the branch for commit/ tag run: | branch=$(git branch -r --contains ${{ github.sha }} | grep -v 'HEAD' | head -n 1 | sed 's|origin/||' | sed 's/^[[:space:]]*//;s/[[:space:]]*$//') echo "Branch found: $branch" echo "BRANCH_NAME=$branch" >> $GITHUB_ENV + - uses: actions/checkout@v6 + with: + fetch-depth: 0 + ref: ${{ env.BRANCH_NAME }} + token: ${{ steps.generate-token.outputs.token }} + # Start of preparation script - uses: actions/setup-python@v6 @@ -109,7 +114,7 @@ jobs: needs: [build] runs-on: ubuntu-latest permissions: - contents: write + contents: write steps: - uses: actions/checkout@v6 - uses: softprops/action-gh-release@v2 @@ -126,6 +131,8 @@ jobs: environment: name: pypi url: https://pypi.org/project/technologydata + permissions: + id-token: write steps: - uses: actions/download-artifact@v6 with: From dd2e4b86bd7213a262297125d5bc34d63f1b15bc Mon Sep 17 00:00:00 2001 From: Fabrizio Finozzi <167071962+finozzifa@users.noreply.github.com> Date: Fri, 30 Jan 2026 18:15:21 +0100 Subject: [PATCH 36/43] Prototest manual input USA (#68) * data: add manual_input_usa.csv * code: create parser file * code: improve manual_input_usa.py * code: update manual_input_usa.py * code: update manual_input_usa.py * code: update carrier and unit * code: pre-commit * code: new update * pre-commit * code: modify manual_input_usa.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * code: include pre-commit hooks * code: re-set parameter dictionary * code: move parse_input_arguments to Commons * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * code: move parse_input_arguments to Commons * code: add unit tests * Update src/technologydata/utils/carriers.txt Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * Update src/technologydata/package_data/manual_input_usa/manual_input_usa.py Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * Update src/technologydata/package_data/manual_input_usa/manual_input_usa.py Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * Update src/technologydata/package_data/manual_input_usa/manual_input_usa.py Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update src/technologydata/parsers/manual_input_usa/manual_input_usa.py Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * Update src/technologydata/parsers/manual_input_usa/manual_input_usa.py Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * further changes * code: update manual_input_usa technologies.json * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * code: include changes to parser * include pre-commit * doc: update documentation' * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * include pre-commit * modify MANIFEST.in --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> --- MANIFEST.in | 5 +- REUSE.toml | 7 +- docs/examples/dea_storage.md | 16 +- docs/examples/manual_input_usa.md | 78 + mkdocs.yaml | 1 + src/technologydata/parsers/commons.py | 136 + .../dea_energy_storage/dea_energy_storage.py | 79 +- .../dea_energy_storage/sources.json | 0 .../dea_energy_storage/technologies.json | 0 .../manual_input_usa/manual_input_usa.py | 256 + .../parsers/manual_input_usa/sources.json | 12 + .../manual_input_usa/technologies.json | 4149 +++++++++++++++++ ...chnology_datasheet_for_energy_storage.xlsx | Bin .../parsers/raw/manual_input_usa.csv | 287 ++ src/technologydata/utils/carriers.txt | 2 + test/test_dea_energy_storage.py | 2 +- test/test_parser_commons.py | 28 + 17 files changed, 4987 insertions(+), 71 deletions(-) create mode 100644 docs/examples/manual_input_usa.md create mode 100644 src/technologydata/parsers/commons.py rename src/technologydata/{package_data => parsers}/dea_energy_storage/dea_energy_storage.py (92%) rename src/technologydata/{package_data => parsers}/dea_energy_storage/sources.json (100%) rename src/technologydata/{package_data => parsers}/dea_energy_storage/technologies.json (100%) create mode 100644 src/technologydata/parsers/manual_input_usa/manual_input_usa.py create mode 100644 src/technologydata/parsers/manual_input_usa/sources.json create mode 100644 src/technologydata/parsers/manual_input_usa/technologies.json rename src/technologydata/{package_data => parsers}/raw/Technology_datasheet_for_energy_storage.xlsx (100%) create mode 100644 src/technologydata/parsers/raw/manual_input_usa.csv create mode 100644 test/test_parser_commons.py diff --git a/MANIFEST.in b/MANIFEST.in index 4239df3a..8bfd8dee 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,6 +1,7 @@ include src/technologydata/utils/*.txt -include src/technologydata/package_data/dea_energy_storage/*.json -include src/technologydata/package_data/raw/* +include src/technologydata/parsers/dea_energy_storage/*.json +include src/technologydata/parsers/manual_input_usa/*.json +include src/technologydata/parsers/raw/* include test/test_data/currency_conversion/WB_CNY_2020/* include test/test_data/currency_conversion/WB_EUR_2020/* include test/test_data/currency_conversion/WB_USD_2020/* diff --git a/REUSE.toml b/REUSE.toml index 99934bc1..c23a3566 100644 --- a/REUSE.toml +++ b/REUSE.toml @@ -8,22 +8,21 @@ path = ["uv.lock", "*.yaml", "docs/**", "*.md", "*.in"] SPDX-FileCopyrightText = "technologydata contributors" SPDX-License-Identifier = "MIT" - [[annotations]] -path = ["test/test_data/**",] +path = ["test/test_data/**"] SPDX-FileCopyrightText = "technologydata contributors" SPDX-License-Identifier = "CC-BY-4.0" [[annotations]] path = [ - "src/technologydata/package_data/dea_energy_storage/*.json", "src/technologydata/package_data/schemas/*.json" + "src/technologydata/parsers/dea_energy_storage/*.json", "src/technologydata/parsers/schemas/*.json", "src/technologydata/parsers/raw/manual_input_usa.csv", "src/technologydata/parsers/manual_input_usa/*.json", ] SPDX-FileCopyrightText = "technologydata contributors" SPDX-License-Identifier = "CC-BY-4.0" [[annotations]] path = [ - "src/technologydata/package_data/raw/Technology_datasheet_for_energy_storage.xlsx" + "src/technologydata/parsers/raw/Technology_datasheet_for_energy_storage.xlsx" ] SPDX-FileCopyrightText = "The Danish Energy Agency" SPDX-License-Identifier = "CC-BY-4.0" diff --git a/docs/examples/dea_storage.md b/docs/examples/dea_storage.md index 4b1788cb..67853a5f 100644 --- a/docs/examples/dea_storage.md +++ b/docs/examples/dea_storage.md @@ -2,11 +2,11 @@ ## Overview -The Danish Energy Agency (DEA) data parser `dea_energy_storage.py` demonstrates a full data-cleaning and transformation pipeline for converting raw tabular data into the `technologydata` schema files `technologies.json` and `sources.json`. The parser is implemented in `src/technologydata/package_data/dea_energy_storage/dea_energy_storage.py`. +The Danish Energy Agency (DEA) data parser `dea_energy_storage.py` demonstrates a full data-cleaning and transformation pipeline for converting raw tabular data into the `technologydata` schema files `technologies.json` and `sources.json`. The parser is implemented in `src/technologydata/parsers/dea_energy_storage/dea_energy_storage.py`. ## Dataset Description -The original dataset is available at this [link](https://ens.dk/media/6589/download). A full description of the dataset is available at this [link](https://ens.dk/media/6588/download). The raw source file is included in the repository at `src/technologydata/package_data/raw/Technology_datasheet_for_energy_storage.xlsx`. +The original dataset is available at this [link](https://ens.dk/media/6589/download). A full description of the dataset is available at this [link](https://ens.dk/media/6588/download). The raw source file is included in the repository at `src/technologydata/parsers/raw/Technology_datasheet_for_energy_storage.xlsx`. The dataset is in Excel format, and it includes, under the data sheet `alldata_flat`, a flat table of technology parameters for a range of energy storage technologies. Columns include `Technology`, `ws`, `par` (parameter name), `val` (value), `unit`, `year`, `est` (case/estimate), `priceyear`, plus metadata columns such as `cat`, `ref`, `note`. Rows are individual parameter records (parameter value + unit + context) for technologies and estimation cases. @@ -25,7 +25,7 @@ Function `parse_input_arguments()` defines and parses the command-line arguments ### Read the raw data -The script reads the raw data available at `src/technologydata/package_data/raw/Technology_datasheet_for_energy_storage.xlsx`, under sheet `alldata_flat`, in a `pandas` dataframe. It uses `pandas.read_excel(..., engine=calamine, dtype=str)`. All entries are handled as strings initially. +The script reads the raw data available at `src/technologydata/parsers/raw/Technology_datasheet_for_energy_storage.xlsx`, under sheet `alldata_flat`, in a `pandas` dataframe. It uses `pandas.read_excel(..., engine=calamine, dtype=str)`. All entries are handled as strings initially. ### Data cleaning, validation and dealing with missing/null values @@ -64,7 +64,7 @@ Function `build_technology_collection()`: - for each group, builds a dictionary of `Parameter` objects (each with `magnitude`, `units`, `sources`, `provenance`). - creates a `Technology` object for each group, with `name` = `ws`, `detailed_technology` = `Technology`, `year`=`year`, `region` = `EU`, `case` = `est` and collects them into a `TechnologyCollection` object. - writes the `TechnologyCollection` object to a `technologies.json`. -- if `--export_schema` is used, schema files produced during export are moved to the sub-folder `src/technologydata/package_data/schemas`. +- if `--export_schema` is used, schema files produced during export are moved to the sub-folder `src/technologydata/parsers/schemas`. ## Running the parser @@ -72,13 +72,13 @@ Function `build_technology_collection()`: From repository root: -- Basic run: `python src/technologydata/package_data/dea_energy_storage/dea_energy_storage.py` +- Basic run: `python src/technologydata/parsers/dea_energy_storage/dea_energy_storage.py` - Example with options: `--num_digits 3 --store_source --filter_params --export_schema` ### Outputs The parser generates the following outputs: -- `src/technologydata/package_data/dea_energy_storage/technologies.json`. -- `src/technologydata/package_data/dea_energy_storage/sources.json`. -- Optional schema files moved to `src/technologydata/package_data/schemas` when `--export_schema` is used. +- `src/technologydata/parsers/dea_energy_storage/technologies.json`. +- `src/technologydata/parsers/dea_energy_storage/sources.json`. +- Optional schema files moved to `src/technologydata/parsers/schemas` when `--export_schema` is used. diff --git a/docs/examples/manual_input_usa.md b/docs/examples/manual_input_usa.md new file mode 100644 index 00000000..83e75263 --- /dev/null +++ b/docs/examples/manual_input_usa.md @@ -0,0 +1,78 @@ +# Manual Input USA Parser Documentation + +## Overview + +The Manual Input USA data parser `manual_input_usa.py` demonstrates a data-cleaning and transformation pipeline for converting manually curated, USA-specific tabular data into the `technologydata` schema files `technologies.json` and `sources.json`. The parser is implemented in `src/technologydata/parsers/manual_input_usa/manual_input_usa.py`. + +## Dataset Description + +The original dataset is a manually curated CSV file containing USA-specific technology parameters available at this [link](https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv). The raw source file is included in the repository at `src/technologydata/parsers/raw/manual_input_usa.csv`. + +The dataset is in CSV format and includes a flat table of technology parameters for various energy technologies relevant to the USA context. Columns include `technology`, `parameter`, `year`, `value`, `unit`, `currency_year`, `source`, `further_description`, `financial_case`, and `scenario`. Rows are individual parameter records (parameter value + unit + context) for technologies with different scenarios and financial cases. + +## Parser description + +The parser is articulated in the following steps. + +### Command line argument parsing + +Function `CommonsParser.parse_input_arguments()` defines and parses the command-line arguments: + +- `--num_digits` (int, default 4) β€” number of decimals used when rounding numeric values. The default value is 4. +- `--store_source` (boolean flag) β€” whether to store the source on the Wayback Machine. The default value is `false`. + +### Read the raw data + +The script reads the raw data available at `src/technologydata/parsers/raw/manual_input_usa.csv` in a `pandas` dataframe. It uses `pandas.read_csv(..., dtype=str, na_values="None")`. All entries are handled as strings initially except for the `value` column which is converted to float. + +### Data cleaning, validation and dealing with missing/null values + +The data cleaning and validation happens with the following steps. + +Function `extract_units_carriers_heating_value()` extracts standardized units, carriers, and heating values from input unit strings. This function maps complex unit representations to simplified unit, carrier, and heating value combinations using a predefined dictionary of special patterns. Examples include: + +- `USD_2022/MW_FT` β†’ unit: `USD_2022/MW`, carrier: `1/FT`, heating_value: `1/LHV` +- `MWh_H2/MWh_FT` β†’ unit: `MWh/MWh`, carrier: `H2/FT`, heating_value: `LHV` +- `MWh_el/MWh_FT` β†’ unit: `MWh/MWh`, carrier: `el/FT`, heating_value: `LHV` +- `t_CO2/MWh_FT` β†’ unit: `t/MWh`, carrier: `CO2/FT`, heating_value: `LHV` +- `USD_2022/kWh_H2` β†’ unit: `USD_2022/kWh`, carrier: `1/H2`, heating_value: `LHV` +- `USD_2023/t_CO2/h` β†’ unit: `USD_2023/t/h`, carrier: `1/CO2`, heating_value: `None` +- `MWh_el/t_CO2` β†’ unit: `MWh/t`, carrier: `el/CO2`, heating_value: `LHV` +- `MWh_th/t_CO2` β†’ unit: `MWh/t`, carrier: `thermal/CO2`, heating_value: `LHV` + +The parser also fills missing values in the `scenario` column with `"not_available"`. + +The parser applies the following unit conversions: + +- Convert `per unit` to `%` and multiply the corresponding `value` by 100.0, rounding to `num_digits` decimals. + +Function `Commons.update_unit_with_currency_year(unit, currency_year)` appends `currency_year` information to currency units when present. This is because `technologydata` follows the currency pattern `\b(?P[A-Z]{3})_(?P\d{4})\b`, as for example `USD_2022`. + +### Populate and export the source and technology collections + +Function `build_technology_collection()`: + +- if `store_source` is set, constructs a `Source` object for the manual input USA dataset, calls `ensure_in_wayback()` and writes `sources.json`; otherwise reads an existing `sources.json`. +- groups the cleaned DataFrame by `scenario`, `year`, `technology`. +- for each group, builds a dictionary of `Parameter` objects (each with `magnitude`, `sources`, and optionally `carrier`, `heating_value`, `units`, `note`). +- captures the `financial_case` value from rows within each group to combine with `scenario`. +- creates a `case` value by combining `scenario` and `financial_case` in the format `"{scenario} - {financial_case}"` when `financial_case` is present; otherwise uses `scenario` alone. +- creates a `Technology` object for each group, with `name` = `technology`, `detailed_technology` = `technology`, `year` = `year`, `region` = `USA`, `case` = combined case value, and collects them into a `TechnologyCollection` object. +- writes the `TechnologyCollection` object to a `technologies.json`. + +## Running the parser + +### Execution instructions + +From repository root: + +- Basic run: `python src/technologydata/parsers/manual_input_usa/manual_input_usa.py` +- Example with options: `--num_digits 3 --store_source` + +### Outputs + +The parser generates the following outputs: + +- `src/technologydata/parsers/manual_input_usa/technologies.json`. +- `src/technologydata/parsers/manual_input_usa/sources.json`. +- Optional schema files moved to `src/technologydata/parsers/schemas` when `--export_schema` is used. diff --git a/mkdocs.yaml b/mkdocs.yaml index 7456ad0c..2c8b5aa0 100644 --- a/mkdocs.yaml +++ b/mkdocs.yaml @@ -32,6 +32,7 @@ nav: - Examples: - Danish Energy Agency Parser: examples/dea_storage.md + - Manual Input USA Parser: examples/manual_input_usa.md - API Reference: - Data Package: api/datapackage.md diff --git a/src/technologydata/parsers/commons.py b/src/technologydata/parsers/commons.py new file mode 100644 index 00000000..b820b64e --- /dev/null +++ b/src/technologydata/parsers/commons.py @@ -0,0 +1,136 @@ +# SPDX-FileCopyrightText: technologydata contributors +# +# SPDX-License-Identifier: MIT + +"""Classes for Commons methods for the data parsers.""" + +import argparse +from typing import Annotated, Any + +import pydantic +from pydantic import BaseModel, ConfigDict + + +class ArgumentConfig(BaseModel): + """ + Pydantic model for defining argument configurations. + + Allows flexible configuration of command-line arguments with type checking + and validation. + """ + + name: Annotated[str, pydantic.Field(description="Name of the argument config")] + arg_type: Annotated[ + type | None, + pydantic.Field( + description="The type to which the command-line argument should be converted." + ), + ] = None + default: Annotated[ + Any | None, pydantic.Field(description="Default value of the argument config") + ] = None + help: Annotated[ + str | None, + pydantic.Field(description="A brief description of what the argument does."), + ] = None + action: Annotated[ + str | None, + pydantic.Field( + description="Specification of how the command-line arguments should be handled" + ), + ] = None + required: Annotated[ + bool, pydantic.Field(description="Flag to check whether field is mondatory") + ] = False + + # Allow extra fields for maximum flexibility + model_config = ConfigDict(extra="allow") + + +class CommonsParser: + """Commons methods for the data parsers.""" + + @staticmethod + @pydantic.validate_call + def parse_input_arguments( + additional_arguments: list[ArgumentConfig] | None = None, + description: str = "Flexible command line argument parser", + ) -> argparse.Namespace: + """ + Parse command line arguments with robust configuration. + + Parameters + ---------- + additional_arguments : Optional[List[ArgumentConfig]] + A list of ArgumentConfig objects defining extra arguments. + description : str + Description for the argument parser. Defaults to a generic message. + + Returns + ------- + argparse.Namespace + Parsed command line arguments + + Examples + -------- + >>> extra_args = [ + ... ArgumentConfig( + ... name="--input_file", + ... arg_type=str, + ... required=True, + ... help="Path to input CSV file" + ... ), + ... ArgumentConfig( + ... name="--verbose", + ... action="store_true", + ... help="Enable verbose output" + ... ) + ... ] + >>> args = CommonsParser.parse_input_arguments(additional_arguments=extra_args) + + """ + # Create parser with provided or default description + parser = argparse.ArgumentParser( + description=description, + formatter_class=argparse.RawTextHelpFormatter, + ) + + # Default arguments + default_args = [ + ArgumentConfig( + name="--num_digits", + arg_type=int, + default=4, + help="Number of significant digits to round the values.", + ), + ArgumentConfig( + name="--store_source", + action="store_true", + help="Store_source, store the source object on the wayback machine. Default: false", + ), + ] + + # Combine default and additional arguments + all_arguments = default_args + (additional_arguments or []) + + # Add arguments to parser (Option 1) + for arg_config in all_arguments: + # Convert Pydantic model to argparse-compatible dictionary + arg_dict = { + k: v + for k, v in arg_config.model_dump().items() + if v is not None and k != "name" + } + + if arg_dict.get("arg_type") is not None: + arg_dict["type"] = arg_dict.pop("arg_type") + + print("arg_dict", arg_dict) + + # Add argument to parser + parser.add_argument(arg_config.name, **arg_dict) + + # Parse arguments + args = parser.parse_args() + + return args diff --git a/src/technologydata/package_data/dea_energy_storage/dea_energy_storage.py b/src/technologydata/parsers/dea_energy_storage/dea_energy_storage.py similarity index 92% rename from src/technologydata/package_data/dea_energy_storage/dea_energy_storage.py rename to src/technologydata/parsers/dea_energy_storage/dea_energy_storage.py index 69b0b562..46c7fe22 100644 --- a/src/technologydata/package_data/dea_energy_storage/dea_energy_storage.py +++ b/src/technologydata/parsers/dea_energy_storage/dea_energy_storage.py @@ -7,19 +7,19 @@ How to run: From the repository root, execute: - python src/technologydata/package_data/dea_energy_storage/dea_energy_storage.py + python src/technologydata/parsers/dea_energy_storage/dea_energy_storage.py Configuration options (command-line arguments): --num_digits Number of significant digits to round the values. Default: 4 --store_source Store the source object on the Wayback Machine. Default: False --filter_params Filter the parameters stored to technologies.json. Default: False + --export_schema Export the Source/TechnologyCollection schemas. Default: False Example: - python src/technologydata/package_data/dea_energy_storage/dea_energy_storage.py --num_digits 3 --store_source --filter_params + python src/technologydata/parsers/dea_energy_storage/dea_energy_storage.py --num_digits 3 --store_source --filter_params """ -import argparse import logging import pathlib import re @@ -36,6 +36,7 @@ Technology, TechnologyCollection, ) +from technologydata.parsers.commons import ArgumentConfig, CommonsParser path_cwd = pathlib.Path.cwd() @@ -478,60 +479,26 @@ def build_technology_collection( return TechnologyCollection(technologies=list_techs) -@pydantic.validate_call -def parse_input_arguments() -> argparse.Namespace: - """ - Parse command line arguments. +if __name__ == "__main__": + # Parse input arguments - Returns - ------- - argparse.Namespace - Parsed command line arguments containing: - - Number of significant digits - - Store source flag + additional_input_args = [ + ArgumentConfig( + name="--filter_params", + action="store_true", + help="filter_params. Filter the parameters stored to technologies.json. Default: false", + ), + ArgumentConfig( + name="--export_schema", + action="store_true", + help="export_schema. Export the Source/TechnologyCollection schemas. Default: false", + ), + ] - """ - # Create the parser - parser = argparse.ArgumentParser( + input_args = CommonsParser.parse_input_arguments( + additional_arguments=additional_input_args, description="Parse the DEA technology storage dataset", - formatter_class=argparse.RawTextHelpFormatter, - ) - - # Define arguments - parser.add_argument( - "--num_digits", - type=int, - default=4, - help="Name of significant digits to round the values. ", ) - - parser.add_argument( - "--store_source", - action="store_true", - help="store_source, store the source object on the wayback machine. Default: false", - ) - - parser.add_argument( - "--filter_params", - action="store_true", - help="filter_params. Filter the parameters stored to technologies.json. Default: false", - ) - - parser.add_argument( - "--export_schema", - action="store_true", - help="export_schema. Export the Source/TechnologyCollection schemas. Default: false", - ) - - # Parse arguments - args = parser.parse_args() - - return args - - -if __name__ == "__main__": - # Parse input arguments - input_args = parse_input_arguments() logger.info("Command line arguments parsed.") # Read the raw data @@ -539,7 +506,7 @@ def parse_input_arguments() -> argparse.Namespace: path_cwd, "src", "technologydata", - "package_data", + "parsers", "raw", "Technology_datasheet_for_energy_storage.xlsx", ) @@ -651,7 +618,7 @@ def parse_input_arguments() -> argparse.Namespace: path_cwd, "src", "technologydata", - "package_data", + "parsers", "dea_energy_storage", ) output_technologies_path = pathlib.Path( @@ -676,7 +643,7 @@ def parse_input_arguments() -> argparse.Namespace: if input_args.export_schema: # Move schema files if they exist schema_folder = pathlib.Path( - path_cwd, "src", "technologydata", "package_data", "schemas" + path_cwd, "src", "technologydata", "parsers", "schemas" ) sources_schema = pathlib.Path(dea_storage_path, "sources.schema.json") technologies_schema = pathlib.Path(dea_storage_path, "technologies.schema.json") diff --git a/src/technologydata/package_data/dea_energy_storage/sources.json b/src/technologydata/parsers/dea_energy_storage/sources.json similarity index 100% rename from src/technologydata/package_data/dea_energy_storage/sources.json rename to src/technologydata/parsers/dea_energy_storage/sources.json diff --git a/src/technologydata/package_data/dea_energy_storage/technologies.json b/src/technologydata/parsers/dea_energy_storage/technologies.json similarity index 100% rename from src/technologydata/package_data/dea_energy_storage/technologies.json rename to src/technologydata/parsers/dea_energy_storage/technologies.json diff --git a/src/technologydata/parsers/manual_input_usa/manual_input_usa.py b/src/technologydata/parsers/manual_input_usa/manual_input_usa.py new file mode 100644 index 00000000..7ad159e4 --- /dev/null +++ b/src/technologydata/parsers/manual_input_usa/manual_input_usa.py @@ -0,0 +1,256 @@ +# SPDX-FileCopyrightText: technologydata contributors +# +# SPDX-License-Identifier: MIT + +""" +Data parser for manually specified, USA-specific data from the technology-data repository (`manual_input_usa.csv`). + +How to run: + From the repository root, execute: + python src/technologydata/parsers/manual_input_usa/manual_input_usa.py + +This will regenerate the files `src/technologydata/parsers/manual_input_usa/{sources.json|technologies.json}` with the specified options. +Use the default options to reproduce the file provided with the package. + +Configuration options (command-line arguments): + --num_digits Number of significant digits to round the values. Default: 4 + --store_source Store the source object on the Wayback Machine. Default: False + +Example: + python src/technologydata/parsers/manual_input_usa/manual_input_usa.py --num_digits 3 --store_source + +""" + +import logging +import pathlib + +import pandas + +from technologydata import ( + Commons, + Parameter, + Source, + SourceCollection, + Technology, + TechnologyCollection, +) +from technologydata.parsers.commons import CommonsParser + +path_cwd = pathlib.Path.cwd() + +logger = logging.getLogger(__name__) + + +def extract_units_carriers_heating_value( + input_unit: str, +) -> tuple[str, str | None, str | None]: + """ + Extract standardized units and carriers from an input unit string. Add also heating_value. + + This function maps complex unit representations to simplified unit and carrier + combinations using a predefined dictionary of special patterns. + + Parameters + ---------- + input_unit : str + A specialized unit string to be converted. + + Returns + ------- + tuple[str, str | None, str | None] + A tuple containing two elements: + - The first element is the standardized unit + - The second element is the corresponding carrier (or None if not found) + - The third element is the corresponding heating value (or None if not found) + + """ + # Define conversion dictionary + special_patterns = { + "USD_2022/MW_FT": ("USD_2022/MW", "1/FT", "1/LHV"), + "MWh_H2/MWh_FT": ("MWh/MWh", "H2/FT", "LHV"), + "MWh_el/MWh_FT": ("MWh/MWh", "el/FT", "LHV"), + "t_CO2/MWh_FT": ("t/MWh", "CO2/FT", "LHV"), + "USD_2022/kWh_H2": ("USD_2022/kWh", "1/H2", "LHV"), + "MWh_el/MWh_H2": ("MWh/MWh", "el/H2", "LHV"), + "USD_2023/t_CO2/h": ("USD_2023/t/h", "1/CO2", None), + "MWh_el/t_CO2": ("MWh/t", "el/CO2", "LHV"), + "MWh_th/t_CO2": ("MWh/t", "thermal/CO2", "LHV"), + } + + if isinstance(input_unit, str) and input_unit in special_patterns.keys(): + return special_patterns[input_unit] + else: + return input_unit, None, None + + +def build_technology_collection( + dataframe: pandas.DataFrame, + sources_path: pathlib.Path, + store_source: bool = False, +) -> TechnologyCollection: + """ + Compute a collection of technologies from a grouped DataFrame. + + Processes input DataFrame by grouping technologies and extracting their parameters, + creating Technology instances for each unique group. + + Parameters + ---------- + dataframe : pandas.DataFrame + Input DataFrame containing technology parameters. + Expected columns include: + - 'scenario': Estimation or case identifier + - 'year': Year of the technology + - 'technology': Detailed technology name + - 'parameter': Parameter name + - 'value': Parameter value + - 'unit': Parameter units + - 'further_description': Extra information about the technology + - 'financial_case': Technology financial case + sources_path: pathlib.Path + Output path for storing the SourceCollection object + store_source: Optional[bool] + Flag to decide whether to store the source object on the Wayback Machine. Default False. + + Returns + ------- + TechnologyCollection + A collection of Technology instances, each representing a unique + technology group with its associated parameters. + + Notes + ----- + - The function groups the DataFrame by ["scenario", "year", "technology"] + - For each group, it creates a dictionary of Parameters + - Each Technology is instantiated with group-specific attributes + + """ + list_techs = [] + + if store_source: + source = Source( + title="Energy system technology data for the US", + authors="Contributors to technology-data. Data source: manual_input_usa.csv", + url="https://github.com/PyPSA/technology-data/blob/master/inputs/US/manual_input_usa.csv", + ) + source.ensure_in_wayback() + sources = SourceCollection(sources=[source]) + sources.to_json(sources_path) + else: + sources = SourceCollection.from_json(sources_path) + + for (scenario, year, technology), group in dataframe.groupby( + ["scenario", "year", "technology"] + ): + parameters = {} + financial_case_for_tech = None + for _, row in group.iterrows(): + unit, carrier, heating_value = extract_units_carriers_heating_value( + row["unit"] + ) + param_kwargs = { + "magnitude": row["value"], + "sources": sources, + } + if carrier is not None: + param_kwargs["carrier"] = carrier + if heating_value is not None: + param_kwargs["heating_value"] = heating_value + if unit is not None: + param_kwargs["units"] = unit + if row["further_description"] is not None and isinstance( + row["further_description"], str + ): + param_kwargs["note"] = row["further_description"] + if row["financial_case"] is not None and isinstance( + row["financial_case"], str + ): + financial_case_for_tech = str(row["financial_case"]) + parameters[row["parameter"]] = Parameter(**param_kwargs) + + # Combine scenario and financial_case for the case attribute + case_value = str(scenario) + if financial_case_for_tech is not None: + case_value = f"{scenario} - {financial_case_for_tech}" + + list_techs.append( + Technology( + name=technology, + region="USA", + year=year, + parameters=parameters, + case=case_value, + detailed_technology=technology, + ) + ) + + return TechnologyCollection(technologies=list_techs) + + +if __name__ == "__main__": + # Parse input arguments + input_args = CommonsParser.parse_input_arguments( + description="Parse the technology_data manual_input_usa.csv dataset" + ) + logger.info("Command line arguments parsed.") + + manual_input_usa_input_path = pathlib.Path( + path_cwd, + "src", + "technologydata", + "parsers", + "raw", + "manual_input_usa.csv", + ) + + manual_input_usa_df = pandas.read_csv( + manual_input_usa_input_path, dtype=str, na_values="None" + ) + manual_input_usa_df["value"] = manual_input_usa_df["value"].astype(float) + manual_input_usa_df["scenario"] = manual_input_usa_df["scenario"].fillna( + "not_available" + ) + + # Replace "per unit" with "%" and multiply val by 100 + mask_per_unit = manual_input_usa_df["unit"].str.contains("per unit") + manual_input_usa_df.loc[mask_per_unit, "unit"] = manual_input_usa_df.loc[ + mask_per_unit, "unit" + ].str.replace("per unit", "%") + manual_input_usa_df.loc[mask_per_unit, "value"] = ( + manual_input_usa_df.loc[mask_per_unit, "value"] * 100.0 + ).round(input_args.num_digits) + logger.info("`per unit` replaced by `%`. Corresponding value multiplied by 100.") + + # Include currency_year in unit if applicable + manual_input_usa_df["unit"] = manual_input_usa_df.apply( + lambda row: Commons.update_unit_with_currency_year( + row["unit"], row["currency_year"] + ), + axis=1, + ) + logger.info("`currency_year` included in `unit` column.") + + # Build TechnologyCollection + manual_input_usa_base_path = pathlib.Path( + path_cwd, + "src", + "technologydata", + "parsers", + "manual_input_usa", + ) + output_technologies_path = pathlib.Path( + manual_input_usa_base_path, + "technologies.json", + ) + output_sources_path = pathlib.Path( + manual_input_usa_base_path, + "sources.json", + ) + + tech_col = build_technology_collection( + manual_input_usa_df, output_sources_path, store_source=input_args.store_source + ) + + logger.info("TechnologyCollection object instantiated.") + tech_col.to_json(output_technologies_path) + logger.info("TechnologyCollection object exported to json.") diff --git a/src/technologydata/parsers/manual_input_usa/sources.json b/src/technologydata/parsers/manual_input_usa/sources.json new file mode 100644 index 00000000..0d0db8fc --- /dev/null +++ b/src/technologydata/parsers/manual_input_usa/sources.json @@ -0,0 +1,12 @@ +{ + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] +} diff --git a/src/technologydata/parsers/manual_input_usa/technologies.json b/src/technologydata/parsers/manual_input_usa/technologies.json new file mode 100644 index 00000000..2e87e336 --- /dev/null +++ b/src/technologydata/parsers/manual_input_usa/technologies.json @@ -0,0 +1,4149 @@ +{ + "technologies": [ + { + "name": "Alkaline electrolyzer large size", + "detailed_technology": "Alkaline electrolyzer large size", + "case": "Advanced - Market", + "region": "USA", + "year": 2020, + "parameters": { + "investment": { + "magnitude": 1671.0, + "units": "USD_2022 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 4.0, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "PEM electrolyzer small size", + "detailed_technology": "PEM electrolyzer small size", + "case": "Advanced - Market", + "region": "USA", + "year": 2020, + "parameters": { + "investment": { + "magnitude": 2599.0, + "units": "USD_2022 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 4.0, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "SOEC", + "detailed_technology": "SOEC", + "case": "Advanced - Market", + "region": "USA", + "year": 2020, + "parameters": { + "investment": { + "magnitude": 2851.0, + "units": "USD_2022 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 4.0, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "direct air capture", + "detailed_technology": "direct air capture", + "case": "Advanced - Market", + "region": "USA", + "year": 2020, + "parameters": { + "FOM": { + "magnitude": 1.3, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "investment": { + "magnitude": 7103597.31, + "units": "USD_2023 / hour / metric_ton", + "carrier": "1 / carbon_dioxide", + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "battery inverter", + "detailed_technology": "battery inverter", + "case": "Advanced - Market", + "region": "USA", + "year": 2022, + "parameters": { + "investment": { + "magnitude": 480.1, + "units": "USD_2022 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 2.5, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "battery storage", + "detailed_technology": "battery storage", + "case": "Advanced - Market", + "region": "USA", + "year": 2022, + "parameters": { + "investment": { + "magnitude": 405.4, + "units": "USD_2022 / kilowatt_hour", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 2.5, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "Alkaline electrolyzer large size", + "detailed_technology": "Alkaline electrolyzer large size", + "case": "Advanced - Market", + "region": "USA", + "year": 2030, + "parameters": { + "investment": { + "magnitude": 1342.0, + "units": "USD_2022 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 4.0, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "PEM electrolyzer small size", + "detailed_technology": "PEM electrolyzer small size", + "case": "Advanced - Market", + "region": "USA", + "year": 2030, + "parameters": { + "investment": { + "magnitude": 2062.0, + "units": "USD_2022 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 4.0, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "SOEC", + "detailed_technology": "SOEC", + "case": "Advanced - Market", + "region": "USA", + "year": 2030, + "parameters": { + "investment": { + "magnitude": 2258.0, + "units": "USD_2022 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 4.0, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "battery inverter", + "detailed_technology": "battery inverter", + "case": "Advanced - Market", + "region": "USA", + "year": 2030, + "parameters": { + "investment": { + "magnitude": 294.7, + "units": "USD_2022 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 2.5, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "battery storage", + "detailed_technology": "battery storage", + "case": "Advanced - Market", + "region": "USA", + "year": 2030, + "parameters": { + "investment": { + "magnitude": 205.8, + "units": "USD_2022 / kilowatt_hour", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 2.5, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "Alkaline electrolyzer large size", + "detailed_technology": "Alkaline electrolyzer large size", + "case": "Advanced - Market", + "region": "USA", + "year": 2040, + "parameters": { + "investment": { + "magnitude": 1086.0, + "units": "USD_2022 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "PEM electrolyzer small size", + "detailed_technology": "PEM electrolyzer small size", + "case": "Advanced - Market", + "region": "USA", + "year": 2040, + "parameters": { + "investment": { + "magnitude": 1646.0, + "units": "USD_2022 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "SOEC", + "detailed_technology": "SOEC", + "case": "Advanced - Market", + "region": "USA", + "year": 2040, + "parameters": { + "investment": { + "magnitude": 1797.0, + "units": "USD_2022 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "battery inverter", + "detailed_technology": "battery inverter", + "case": "Advanced - Market", + "region": "USA", + "year": 2040, + "parameters": { + "investment": { + "magnitude": 262.0, + "units": "USD_2022 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 2.5, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "battery storage", + "detailed_technology": "battery storage", + "case": "Advanced - Market", + "region": "USA", + "year": 2040, + "parameters": { + "investment": { + "magnitude": 169.5, + "units": "USD_2022 / kilowatt_hour", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 2.5, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "Alkaline electrolyzer large size", + "detailed_technology": "Alkaline electrolyzer large size", + "case": "Advanced - Market", + "region": "USA", + "year": 2050, + "parameters": { + "investment": { + "magnitude": 888.0, + "units": "USD_2022 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 4.0, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "PEM electrolyzer small size", + "detailed_technology": "PEM electrolyzer small size", + "case": "Advanced - Market", + "region": "USA", + "year": 2050, + "parameters": { + "investment": { + "magnitude": 1322.0, + "units": "USD_2022 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 4.0, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "SOEC", + "detailed_technology": "SOEC", + "case": "Advanced - Market", + "region": "USA", + "year": 2050, + "parameters": { + "investment": { + "magnitude": 1440.0, + "units": "USD_2022 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 4.0, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "battery inverter", + "detailed_technology": "battery inverter", + "case": "Advanced - Market", + "region": "USA", + "year": 2050, + "parameters": { + "investment": { + "magnitude": 226.6, + "units": "USD_2022 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 2.5, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "battery storage", + "detailed_technology": "battery storage", + "case": "Advanced - Market", + "region": "USA", + "year": 2050, + "parameters": { + "investment": { + "magnitude": 134.0, + "units": "USD_2022 / kilowatt_hour", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 2.5, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "Alkaline electrolyzer large size", + "detailed_technology": "Alkaline electrolyzer large size", + "case": "Conservative - Market", + "region": "USA", + "year": 2020, + "parameters": { + "investment": { + "magnitude": 1671.0, + "units": "USD_2022 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 4.0, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "PEM electrolyzer small size", + "detailed_technology": "PEM electrolyzer small size", + "case": "Conservative - Market", + "region": "USA", + "year": 2020, + "parameters": { + "investment": { + "magnitude": 2599.0, + "units": "USD_2022 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 4.0, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "SOEC", + "detailed_technology": "SOEC", + "case": "Conservative - Market", + "region": "USA", + "year": 2020, + "parameters": { + "investment": { + "magnitude": 2851.0, + "units": "USD_2022 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 4.0, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "direct air capture", + "detailed_technology": "direct air capture", + "case": "Conservative - Market", + "region": "USA", + "year": 2020, + "parameters": { + "FOM": { + "magnitude": 1.3, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "investment": { + "magnitude": 19180739.93, + "units": "USD_2023 / hour / metric_ton", + "carrier": "1 / carbon_dioxide", + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "battery inverter", + "detailed_technology": "battery inverter", + "case": "Conservative - Market", + "region": "USA", + "year": 2022, + "parameters": { + "investment": { + "magnitude": 480.1, + "units": "USD_2022 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 2.5, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "battery storage", + "detailed_technology": "battery storage", + "case": "Conservative - Market", + "region": "USA", + "year": 2022, + "parameters": { + "investment": { + "magnitude": 405.4, + "units": "USD_2022 / kilowatt_hour", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 2.5, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "Alkaline electrolyzer large size", + "detailed_technology": "Alkaline electrolyzer large size", + "case": "Conservative - Market", + "region": "USA", + "year": 2030, + "parameters": { + "investment": { + "magnitude": 1599.0, + "units": "USD_2022 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 4.0, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "PEM electrolyzer small size", + "detailed_technology": "PEM electrolyzer small size", + "case": "Conservative - Market", + "region": "USA", + "year": 2030, + "parameters": { + "investment": { + "magnitude": 2160.0, + "units": "USD_2022 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 4.0, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "SOEC", + "detailed_technology": "SOEC", + "case": "Conservative - Market", + "region": "USA", + "year": 2030, + "parameters": { + "investment": { + "magnitude": 2721.0, + "units": "USD_2022 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 4.0, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "battery inverter", + "detailed_technology": "battery inverter", + "case": "Conservative - Market", + "region": "USA", + "year": 2030, + "parameters": { + "investment": { + "magnitude": 454.2, + "units": "USD_2022 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 2.5, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "battery storage", + "detailed_technology": "battery storage", + "case": "Conservative - Market", + "region": "USA", + "year": 2030, + "parameters": { + "investment": { + "magnitude": 330.4, + "units": "USD_2022 / kilowatt_hour", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 2.5, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "Alkaline electrolyzer large size", + "detailed_technology": "Alkaline electrolyzer large size", + "case": "Conservative - Market", + "region": "USA", + "year": 2040, + "parameters": { + "investment": { + "magnitude": 1531.0, + "units": "USD_2022 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "PEM electrolyzer small size", + "detailed_technology": "PEM electrolyzer small size", + "case": "Conservative - Market", + "region": "USA", + "year": 2040, + "parameters": { + "investment": { + "magnitude": 1802.0, + "units": "USD_2022 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "SOEC", + "detailed_technology": "SOEC", + "case": "Conservative - Market", + "region": "USA", + "year": 2040, + "parameters": { + "investment": { + "magnitude": 2598.0, + "units": "USD_2022 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "battery inverter", + "detailed_technology": "battery inverter", + "case": "Conservative - Market", + "region": "USA", + "year": 2040, + "parameters": { + "investment": { + "magnitude": 430.3, + "units": "USD_2022 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 2.5, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "battery storage", + "detailed_technology": "battery storage", + "case": "Conservative - Market", + "region": "USA", + "year": 2040, + "parameters": { + "investment": { + "magnitude": 307.8, + "units": "USD_2022 / kilowatt_hour", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 2.5, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "Alkaline electrolyzer large size", + "detailed_technology": "Alkaline electrolyzer large size", + "case": "Conservative - Market", + "region": "USA", + "year": 2050, + "parameters": { + "investment": { + "magnitude": 1466.0, + "units": "USD_2022 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 4.0, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "PEM electrolyzer small size", + "detailed_technology": "PEM electrolyzer small size", + "case": "Conservative - Market", + "region": "USA", + "year": 2050, + "parameters": { + "investment": { + "magnitude": 1509.0, + "units": "USD_2022 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 4.0, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "SOEC", + "detailed_technology": "SOEC", + "case": "Conservative - Market", + "region": "USA", + "year": 2050, + "parameters": { + "investment": { + "magnitude": 2481.0, + "units": "USD_2022 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 4.0, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "battery inverter", + "detailed_technology": "battery inverter", + "case": "Conservative - Market", + "region": "USA", + "year": 2050, + "parameters": { + "investment": { + "magnitude": 406.2, + "units": "USD_2022 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 2.5, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "battery storage", + "detailed_technology": "battery storage", + "case": "Conservative - Market", + "region": "USA", + "year": 2050, + "parameters": { + "investment": { + "magnitude": 285.2, + "units": "USD_2022 / kilowatt_hour", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 2.5, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "Alkaline electrolyzer large size", + "detailed_technology": "Alkaline electrolyzer large size", + "case": "Moderate - Market", + "region": "USA", + "year": 2020, + "parameters": { + "investment": { + "magnitude": 1671.0, + "units": "USD_2022 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 4.0, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "PEM electrolyzer small size", + "detailed_technology": "PEM electrolyzer small size", + "case": "Moderate - Market", + "region": "USA", + "year": 2020, + "parameters": { + "investment": { + "magnitude": 2599.0, + "units": "USD_2022 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 4.0, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "SOEC", + "detailed_technology": "SOEC", + "case": "Moderate - Market", + "region": "USA", + "year": 2020, + "parameters": { + "investment": { + "magnitude": 2851.0, + "units": "USD_2022 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 4.0, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "direct air capture", + "detailed_technology": "direct air capture", + "case": "Moderate - Market", + "region": "USA", + "year": 2020, + "parameters": { + "FOM": { + "magnitude": 1.3, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "investment": { + "magnitude": 12398844.91, + "units": "USD_2023 / hour / metric_ton", + "carrier": "1 / carbon_dioxide", + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "battery inverter", + "detailed_technology": "battery inverter", + "case": "Moderate - Market", + "region": "USA", + "year": 2022, + "parameters": { + "investment": { + "magnitude": 480.1, + "units": "USD_2022 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 2.5, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "battery storage", + "detailed_technology": "battery storage", + "case": "Moderate - Market", + "region": "USA", + "year": 2022, + "parameters": { + "investment": { + "magnitude": 405.4, + "units": "USD_2022 / kilowatt_hour", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 2.5, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "Alkaline electrolyzer large size", + "detailed_technology": "Alkaline electrolyzer large size", + "case": "Moderate - Market", + "region": "USA", + "year": 2030, + "parameters": { + "investment": { + "magnitude": 1402.0, + "units": "USD_2022 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 4.0, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "PEM electrolyzer small size", + "detailed_technology": "PEM electrolyzer small size", + "case": "Moderate - Market", + "region": "USA", + "year": 2030, + "parameters": { + "investment": { + "magnitude": 2160.0, + "units": "USD_2022 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 4.0, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "SOEC", + "detailed_technology": "SOEC", + "case": "Moderate - Market", + "region": "USA", + "year": 2030, + "parameters": { + "investment": { + "magnitude": 2366.0, + "units": "USD_2022 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 4.0, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "battery inverter", + "detailed_technology": "battery inverter", + "case": "Moderate - Market", + "region": "USA", + "year": 2030, + "parameters": { + "investment": { + "magnitude": 432.8, + "units": "USD_2022 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 2.5, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "battery storage", + "detailed_technology": "battery storage", + "case": "Moderate - Market", + "region": "USA", + "year": 2030, + "parameters": { + "investment": { + "magnitude": 254.8, + "units": "USD_2022 / kilowatt_hour", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 2.5, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "Alkaline electrolyzer large size", + "detailed_technology": "Alkaline electrolyzer large size", + "case": "Moderate - Market", + "region": "USA", + "year": 2040, + "parameters": { + "investment": { + "magnitude": 1182.0, + "units": "USD_2022 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "PEM electrolyzer small size", + "detailed_technology": "PEM electrolyzer small size", + "case": "Moderate - Market", + "region": "USA", + "year": 2040, + "parameters": { + "investment": { + "magnitude": 1802.0, + "units": "USD_2022 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "SOEC", + "detailed_technology": "SOEC", + "case": "Moderate - Market", + "region": "USA", + "year": 2040, + "parameters": { + "investment": { + "magnitude": 1970.0, + "units": "USD_2022 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "battery inverter", + "detailed_technology": "battery inverter", + "case": "Moderate - Market", + "region": "USA", + "year": 2040, + "parameters": { + "investment": { + "magnitude": 409.6, + "units": "USD_2022 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 2.5, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "battery storage", + "detailed_technology": "battery storage", + "case": "Moderate - Market", + "region": "USA", + "year": 2040, + "parameters": { + "investment": { + "magnitude": 208.6, + "units": "USD_2022 / kilowatt_hour", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 2.5, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "Alkaline electrolyzer large size", + "detailed_technology": "Alkaline electrolyzer large size", + "case": "Moderate - Market", + "region": "USA", + "year": 2050, + "parameters": { + "investment": { + "magnitude": 1002.0, + "units": "USD_2022 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 4.0, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "PEM electrolyzer small size", + "detailed_technology": "PEM electrolyzer small size", + "case": "Moderate - Market", + "region": "USA", + "year": 2050, + "parameters": { + "investment": { + "magnitude": 1509.0, + "units": "USD_2022 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 4.0, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "SOEC", + "detailed_technology": "SOEC", + "case": "Moderate - Market", + "region": "USA", + "year": 2050, + "parameters": { + "investment": { + "magnitude": 1646.0, + "units": "USD_2022 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 4.0, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "battery inverter", + "detailed_technology": "battery inverter", + "case": "Moderate - Market", + "region": "USA", + "year": 2050, + "parameters": { + "investment": { + "magnitude": 384.0, + "units": "USD_2022 / kilowatt", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 2.5, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "battery storage", + "detailed_technology": "battery storage", + "case": "Moderate - Market", + "region": "USA", + "year": 2050, + "parameters": { + "investment": { + "magnitude": 163.0, + "units": "USD_2022 / kilowatt_hour", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 2.5, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": "Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "Alkaline electrolyzer large size", + "detailed_technology": "Alkaline electrolyzer large size", + "case": "not_available", + "region": "USA", + "year": 2020, + "parameters": { + "lifetime": { + "magnitude": 30.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": null, + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "Coal-IGCC", + "detailed_technology": "Coal-IGCC", + "case": "not_available", + "region": "USA", + "year": 2020, + "parameters": { + "lifetime": { + "magnitude": 40.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": null, + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "efficiency": { + "magnitude": 50.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": null, + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "Fischer-Tropsch", + "detailed_technology": "Fischer-Tropsch", + "case": "not_available", + "region": "USA", + "year": 2020, + "parameters": { + "efficiency": { + "magnitude": 70.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": null, + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "investment": { + "magnitude": 1696429.0, + "units": "USD_2022 / megawatt", + "carrier": "1 / fischer_tropsch", + "heating_value": "1 / lower_heating_value", + "provenance": null, + "note": null, + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "lifetime": { + "magnitude": 20.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": null, + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 4.0, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": null, + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "hydrogen-input": { + "magnitude": 1.43, + "units": "dimensionless", + "carrier": "hydrogen / fischer_tropsch", + "heating_value": "lower_heating_value", + "provenance": null, + "note": "0.995 MWh_H2 per output, output increasing from 2020 to 2050 (0.65, 0.7, 0.73, 0.75 MWh liquid FT output).", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "electricity-input": { + "magnitude": 0.04, + "units": "dimensionless", + "carrier": "electricity / fischer_tropsch", + "heating_value": "lower_heating_value", + "provenance": null, + "note": "0.005 MWh_el input per FT output, output increasing from 2020 to 2050 (0.65, 0.7, 0.73, 0.75 MWh liquid FT output).", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "carbondioxide-input": { + "magnitude": 0.32, + "units": "metric_ton / megawatt_hour", + "carrier": "carbon_dioxide / fischer_tropsch", + "heating_value": "lower_heating_value", + "provenance": null, + "note": "Input per 1t FT liquid fuels output, carbon efficiency increases with years (4.3, 3.9, 3.6, 3.3 t_CO2/t_FT from 2020-2050 with LHV 11.95 MWh_th/t_FT).", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "NG 2-on-1 Combined Cycle (F-Frame)", + "detailed_technology": "NG 2-on-1 Combined Cycle (F-Frame)", + "case": "not_available", + "region": "USA", + "year": 2020, + "parameters": { + "efficiency": { + "magnitude": 57.3, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": null, + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "PEM electrolyzer small size", + "detailed_technology": "PEM electrolyzer small size", + "case": "not_available", + "region": "USA", + "year": 2020, + "parameters": { + "lifetime": { + "magnitude": 30.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": null, + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "SOEC", + "detailed_technology": "SOEC", + "case": "not_available", + "region": "USA", + "year": 2020, + "parameters": { + "lifetime": { + "magnitude": 30.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": null, + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "direct air capture", + "detailed_technology": "direct air capture", + "case": "not_available", + "region": "USA", + "year": 2020, + "parameters": { + "lifetime": { + "magnitude": 30.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": null, + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "electricity-input": { + "magnitude": 0.24, + "units": "megawatt_hour / metric_ton", + "carrier": "electricity / carbon_dioxide", + "heating_value": "lower_heating_value", + "provenance": null, + "note": null, + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "heat-input": { + "magnitude": 1.17, + "units": "megawatt_hour / metric_ton", + "carrier": "thermal / carbon_dioxide", + "heating_value": "lower_heating_value", + "provenance": null, + "note": null, + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "hydrogen storage compressor", + "detailed_technology": "hydrogen storage compressor", + "case": "not_available", + "region": "USA", + "year": 2020, + "parameters": { + "investment": { + "magnitude": 2.28, + "units": "USD_2022 / kilowatt_hour", + "carrier": "1 / hydrogen", + "heating_value": "lower_heating_value", + "provenance": null, + "note": null, + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 4.0, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": null, + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "lifetime": { + "magnitude": 30.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": null, + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "compression-electricity-input": { + "magnitude": 0.05, + "units": "dimensionless", + "carrier": "electricity / hydrogen", + "heating_value": "lower_heating_value", + "provenance": null, + "note": "1.707 kWh/kg.", + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "hydrogen storage tank type 1", + "detailed_technology": "hydrogen storage tank type 1", + "case": "not_available", + "region": "USA", + "year": 2020, + "parameters": { + "investment": { + "magnitude": 16.87, + "units": "USD_2022 / kilowatt_hour", + "carrier": "1 / hydrogen", + "heating_value": "lower_heating_value", + "provenance": null, + "note": null, + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "FOM": { + "magnitude": 4.0, + "units": "percent / year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": null, + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "lifetime": { + "magnitude": 30.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": null, + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "min_fill_level": { + "magnitude": 6.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": null, + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "battery inverter", + "detailed_technology": "battery inverter", + "case": "not_available", + "region": "USA", + "year": 2022, + "parameters": { + "lifetime": { + "magnitude": 15.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": null, + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "battery storage", + "detailed_technology": "battery storage", + "case": "not_available", + "region": "USA", + "year": 2022, + "parameters": { + "lifetime": { + "magnitude": 15.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": null, + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "Coal integrated retrofit 90%-CCS", + "detailed_technology": "Coal integrated retrofit 90%-CCS", + "case": "not_available", + "region": "USA", + "year": 2030, + "parameters": { + "capture_rate": { + "magnitude": 90.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": null, + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "efficiency": { + "magnitude": 38.6, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": null, + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "Coal integrated retrofit 95%-CCS", + "detailed_technology": "Coal integrated retrofit 95%-CCS", + "case": "not_available", + "region": "USA", + "year": 2030, + "parameters": { + "capture_rate": { + "magnitude": 95.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": null, + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "efficiency": { + "magnitude": 38.6, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": null, + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "Coal-95%-CCS", + "detailed_technology": "Coal-95%-CCS", + "case": "not_available", + "region": "USA", + "year": 2030, + "parameters": { + "lifetime": { + "magnitude": 40.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": null, + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "capture_rate": { + "magnitude": 95.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": null, + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "efficiency": { + "magnitude": 40.3, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": null, + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "Coal-99%-CCS", + "detailed_technology": "Coal-99%-CCS", + "case": "not_available", + "region": "USA", + "year": 2030, + "parameters": { + "lifetime": { + "magnitude": 40.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": null, + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "capture_rate": { + "magnitude": 99.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": null, + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "efficiency": { + "magnitude": 40.3, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": null, + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "Coal-IGCC-90%-CCS", + "detailed_technology": "Coal-IGCC-90%-CCS", + "case": "not_available", + "region": "USA", + "year": 2030, + "parameters": { + "lifetime": { + "magnitude": 40.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": null, + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "capture_rate": { + "magnitude": 90.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": null, + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "efficiency": { + "magnitude": 40.3, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": null, + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "Fischer-Tropsch", + "detailed_technology": "Fischer-Tropsch", + "case": "not_available", + "region": "USA", + "year": 2030, + "parameters": { + "lifetime": { + "magnitude": 30.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": null, + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "NG 2-on-1 Combined Cycle (F-Frame)", + "detailed_technology": "NG 2-on-1 Combined Cycle (F-Frame)", + "case": "not_available", + "region": "USA", + "year": 2030, + "parameters": { + "lifetime": { + "magnitude": 30.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": null, + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "efficiency": { + "magnitude": 57.3, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": null, + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "NG 2-on-1 Combined Cycle (F-Frame) 95% CCS", + "detailed_technology": "NG 2-on-1 Combined Cycle (F-Frame) 95% CCS", + "case": "not_available", + "region": "USA", + "year": 2030, + "parameters": { + "lifetime": { + "magnitude": 30.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": null, + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "capture_rate": { + "magnitude": 95.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": null, + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "efficiency": { + "magnitude": 52.7, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": null, + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "NG 2-on-1 Combined Cycle (F-Frame) 97% CCS", + "detailed_technology": "NG 2-on-1 Combined Cycle (F-Frame) 97% CCS", + "case": "not_available", + "region": "USA", + "year": 2030, + "parameters": { + "lifetime": { + "magnitude": 30.0, + "units": "year", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": null, + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "capture_rate": { + "magnitude": 97.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": null, + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "efficiency": { + "magnitude": 52.5, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": null, + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "NG Combined Cycle F-Class integrated retrofit 90%-CCS", + "detailed_technology": "NG Combined Cycle F-Class integrated retrofit 90%-CCS", + "case": "not_available", + "region": "USA", + "year": 2030, + "parameters": { + "capture_rate": { + "magnitude": 90.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": null, + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "efficiency": { + "magnitude": 53.6, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": null, + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + }, + { + "name": "NG Combined Cycle F-Class integrated retrofit 95%-CCS", + "detailed_technology": "NG Combined Cycle F-Class integrated retrofit 95%-CCS", + "case": "not_available", + "region": "USA", + "year": 2030, + "parameters": { + "capture_rate": { + "magnitude": 95.0, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": null, + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + }, + "efficiency": { + "magnitude": 53.6, + "units": "percent", + "carrier": null, + "heating_value": null, + "provenance": null, + "note": null, + "sources": { + "sources": [ + { + "title": "Energy system technology data for the US", + "authors": "Contributors to technology-data. Data source: manual_input_usa.csv", + "url": "https://github.com/PyPSA/technology-data/blob/v0.13.4/inputs/US/manual_input_usa.csv", + "url_archive": null, + "url_date": "2025-10-20", + "url_date_archive": null + } + ] + } + } + } + } + ] +} diff --git a/src/technologydata/package_data/raw/Technology_datasheet_for_energy_storage.xlsx b/src/technologydata/parsers/raw/Technology_datasheet_for_energy_storage.xlsx similarity index 100% rename from src/technologydata/package_data/raw/Technology_datasheet_for_energy_storage.xlsx rename to src/technologydata/parsers/raw/Technology_datasheet_for_energy_storage.xlsx diff --git a/src/technologydata/parsers/raw/manual_input_usa.csv b/src/technologydata/parsers/raw/manual_input_usa.csv new file mode 100644 index 00000000..57ff9ce6 --- /dev/null +++ b/src/technologydata/parsers/raw/manual_input_usa.csv @@ -0,0 +1,287 @@ +technology,parameter,year,value,unit,currency_year,source,further_description,financial_case,scenario +Fischer-Tropsch,efficiency,2020,0.7,per unit,,ICCT IRA e-fuels assumptions ,,, +Fischer-Tropsch,investment,2020,1696429,USD/MW_FT,2022,ICCT IRA e-fuels assumptions ,,, +Fischer-Tropsch,lifetime,2020,20,years,,ICCT IRA e-fuels assumptions ,,, +Fischer-Tropsch,FOM,2020,4,%/year,2022,ICCT IRA e-fuels assumptions ,,, +Fischer-Tropsch,lifetime,2030,30,years,,ICCT IRA e-fuels assumptions ,,, +Fischer-Tropsch,hydrogen-input,2020,1.43,MWh_H2/MWh_FT,,ICCT IRA e-fuels assumptions ,"0.995 MWh_H2 per output, output increasing from 2020 to 2050 (0.65, 0.7, 0.73, 0.75 MWh liquid FT output).",, +Fischer-Tropsch,electricity-input,2020,0.04,MWh_el/MWh_FT,,ICCT IRA e-fuels assumptions ,"0.005 MWh_el input per FT output, output increasing from 2020 to 2050 (0.65, 0.7, 0.73, 0.75 MWh liquid FT output).",, +Fischer-Tropsch,carbondioxide-input,2020,0.32,t_CO2/MWh_FT,,ICCT IRA e-fuels assumptions ,"Input per 1t FT liquid fuels output, carbon efficiency increases with years (4.3, 3.9, 3.6, 3.3 t_CO2/t_FT from 2020-2050 with LHV 11.95 MWh_th/t_FT).",, +hydrogen storage tank type 1,investment,2020,16.87,USD/kWh_H2,2022,ICCT IRA e-fuels assumptions ,,, +hydrogen storage tank type 1,FOM,2020,4,%/year,2022,ICCT IRA e-fuels assumptions ,,, +hydrogen storage tank type 1,lifetime,2020,30,years,,ICCT IRA e-fuels assumptions ,,, +hydrogen storage tank type 1,min_fill_level,2020,6,%,,"Based on StΓΆckl et al (2021): https://doi.org/10.48550/arXiv.2005.03464, table SI.9.",,, +hydrogen storage compressor,investment,2020,2.28,USD/kWh_H2,2022,ICCT IRA e-fuels assumptions ,,, +hydrogen storage compressor,FOM,2020,4,%/year,2022,ICCT IRA e-fuels assumptions ,,, +hydrogen storage compressor,lifetime,2020,30,years,,ICCT IRA e-fuels assumptions ,,, +hydrogen storage compressor,compression-electricity-input,2020,0.05,MWh_el/MWh_H2,,"Based on StΓΆckl et al (2021): https://doi.org/10.48550/arXiv.2005.03464, table SI.4.",1.707 kWh/kg.,, +direct air capture,lifetime,2020,30,years,-,ICCT IRA e-fuels assumptions ,,, +direct air capture,FOM,2020,1.3,%/year,2023,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Moderate +direct air capture,FOM,2020,1.3,%/year,2023,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Conservative +direct air capture,FOM,2020,1.3,%/year,2023,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Advanced +direct air capture,investment,2020,12398844.91,USD/t_CO2/h,2023,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Moderate +direct air capture,investment,2020,19180739.93,USD/t_CO2/h,2023,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Conservative +direct air capture,investment,2020,7103597.31,USD/t_CO2/h,2023,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Advanced +direct air capture,FOM,2020,1.3,%/year,2023,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Moderate +direct air capture,FOM,2020,1.3,%/year,2023,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Conservative +direct air capture,FOM,2020,1.3,%/year,2023,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Advanced +direct air capture,investment,2020,12398844.91,USD/t_CO2/h,2023,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Moderate +direct air capture,investment,2020,19180739.93,USD/t_CO2/h,2023,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Conservative +direct air capture,investment,2020,7103597.31,USD/t_CO2/h,2023,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Advanced +direct air capture,electricity-input,2020,0.24,MWh_el/t_CO2,-,ICCT IRA e-fuels assumptions ,,, +direct air capture,heat-input,2020,1.17,MWh_th/t_CO2,-,ICCT IRA e-fuels assumptions ,,, +Coal-IGCC,lifetime,2020,40,years,-,"JRC, 01_JRC-EU-TIMES Full model, https://zenodo.org/records/3544900, file `SubRES_15_TECHS_HYDROGEN.xlsx`",,, +Coal-IGCC-90%-CCS,lifetime,2030,40,years,-,"JRC, 01_JRC-EU-TIMES Full model, https://zenodo.org/records/3544900, file `SubRES_15_TECHS_HYDROGEN.xlsx`",,, +Coal-95%-CCS,lifetime,2030,40,years,-,"JRC, 01_JRC-EU-TIMES Full model, https://zenodo.org/records/3544900, file `SubRES_15_TECHS_HYDROGEN.xlsx`",,, +Coal-99%-CCS,lifetime,2030,40,years,-,"JRC, 01_JRC-EU-TIMES Full model, https://zenodo.org/records/3544900, file `SubRES_15_TECHS_HYDROGEN.xlsx`",,, +NG 2-on-1 Combined Cycle (F-Frame),lifetime,2030,30,years,-,"JRC, 01_JRC-EU-TIMES Full model, https://zenodo.org/records/3544900, file `SubRES_15_TECHS_HYDROGEN.xlsx`",,, +NG 2-on-1 Combined Cycle (F-Frame) 95% CCS,lifetime,2030,30,years,-,"JRC, 01_JRC-EU-TIMES Full model, https://zenodo.org/records/3544900, file `SubRES_15_TECHS_HYDROGEN.xlsx`",,, +NG 2-on-1 Combined Cycle (F-Frame) 97% CCS,lifetime,2030,30,years,-,"JRC, 01_JRC-EU-TIMES Full model, https://zenodo.org/records/3544900, file `SubRES_15_TECHS_HYDROGEN.xlsx`",,, +Coal-95%-CCS,capture_rate,2030,0.95,per unit,-,"NREL, NREL ATB 2024",,, +Coal-99%-CCS,capture_rate,2030,0.99,per unit,-,"NREL, NREL ATB 2024",,, +Coal-IGCC-90%-CCS,capture_rate,2030,0.9,per unit,-,"NREL, NREL ATB 2024",,, +NG 2-on-1 Combined Cycle (F-Frame) 95% CCS,capture_rate,2030,0.95,per unit,-,"NREL, NREL ATB 2024",,, +NG 2-on-1 Combined Cycle (F-Frame) 97% CCS,capture_rate,2030,0.97,per unit,-,"NREL, NREL ATB 2024",,, +Coal-IGCC,efficiency,2020,0.5,per unit,-,"JRC, 01_JRC-EU-TIMES Full model, https://zenodo.org/records/3544900, file `SubRES_15_TECHS_HYDROGEN.xlsx`",,, +Coal-IGCC-90%-CCS,efficiency,2030,0.403,per unit,,"JRC, 01_JRC-EU-TIMES Full model, https://zenodo.org/records/3544900, file `SubRES_15_TECHS_HYDROGEN.xlsx`",,, +NG 2-on-1 Combined Cycle (F-Frame),efficiency,2020,0.573,per unit,-,"NREL, β€œCost and performance projections for coal- and natural gas-fired power plants""",,, +Coal-95%-CCS,efficiency,2030,0.403,per unit,-,"JRC, 01_JRC-EU-TIMES Full model, https://zenodo.org/records/3544900, file `SubRES_15_TECHS_HYDROGEN.xlsx`",,, +Coal-99%-CCS,efficiency,2030,0.403,per unit,-,"JRC, 01_JRC-EU-TIMES Full model, https://zenodo.org/records/3544900, file `SubRES_15_TECHS_HYDROGEN.xlsx`",,, +NG 2-on-1 Combined Cycle (F-Frame),efficiency,2030,0.573,per unit,-,"NREL, β€œCost and performance projections for coal- and natural gas-fired power plants""",,, +NG 2-on-1 Combined Cycle (F-Frame) 95% CCS,efficiency,2030,0.527,per unit,-,"NREL, β€œCost and performance projections for coal- and natural gas-fired power plants""",,, +NG 2-on-1 Combined Cycle (F-Frame) 97% CCS,efficiency,2030,0.525,per unit,-,"NREL, β€œCost and performance projections for coal- and natural gas-fired power plants""",,, +Coal integrated retrofit 90%-CCS,capture_rate,2030,0.9,per unit,-,"NREL, β€œCost and performance projections for coal- and natural gas-fired power plants""",,, +Coal integrated retrofit 95%-CCS,capture_rate,2030,0.95,per unit,-,"NREL, β€œCost and performance projections for coal- and natural gas-fired power plants""",,, +NG Combined Cycle F-Class integrated retrofit 90%-CCS,capture_rate,2030,0.9,per unit,-,"NREL, β€œCost and performance projections for coal- and natural gas-fired power plants""",,, +NG Combined Cycle F-Class integrated retrofit 95%-CCS,capture_rate,2030,0.95,per unit,-,"NREL, β€œCost and performance projections for coal- and natural gas-fired power plants""",,, +Coal integrated retrofit 90%-CCS,efficiency,2030,0.386,per unit,-,"NREL, β€œCost and performance projections for coal- and natural gas-fired power plants""",,, +Coal integrated retrofit 95%-CCS,efficiency,2030,0.386,per unit,-,"NREL, β€œCost and performance projections for coal- and natural gas-fired power plants""",,, +NG Combined Cycle F-Class integrated retrofit 90%-CCS,efficiency,2030,0.536,per unit,-,"NREL, β€œCost and performance projections for coal- and natural gas-fired power plants""",,, +NG Combined Cycle F-Class integrated retrofit 95%-CCS,efficiency,2030,0.536,per unit,-,"NREL, β€œCost and performance projections for coal- and natural gas-fired power plants""",,, +Alkaline electrolyzer large size,lifetime,2020,30,years,-,ICCT IRA e-fuels assumptions ,,, +PEM electrolyzer small size,lifetime,2020,30,years,-,ICCT IRA e-fuels assumptions ,,, +SOEC,lifetime,2020,30,years,-,ICCT IRA e-fuels assumptions ,,, +Alkaline electrolyzer large size,investment,2020,1671,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Moderate +Alkaline electrolyzer large size,investment,2030,1402,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Moderate +Alkaline electrolyzer large size,investment,2040,1182,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Moderate +Alkaline electrolyzer large size,investment,2050,1002,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Moderate +PEM electrolyzer small size,investment,2020,2599,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Moderate +PEM electrolyzer small size,investment,2030,2160,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Moderate +PEM electrolyzer small size,investment,2040,1802,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Moderate +PEM electrolyzer small size,investment,2050,1509,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Moderate +SOEC,investment,2020,2851,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Moderate +SOEC,investment,2030,2366,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Moderate +SOEC,investment,2040,1970,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Moderate +SOEC,investment,2050,1646,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Moderate +Alkaline electrolyzer large size,investment,2020,1671,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Conservative +Alkaline electrolyzer large size,investment,2030,1599,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Conservative +Alkaline electrolyzer large size,investment,2040,1531,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Conservative +Alkaline electrolyzer large size,investment,2050,1466,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Conservative +PEM electrolyzer small size,investment,2020,2599,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Conservative +PEM electrolyzer small size,investment,2030,2160,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Conservative +PEM electrolyzer small size,investment,2040,1802,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Conservative +PEM electrolyzer small size,investment,2050,1509,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Conservative +SOEC,investment,2020,2851,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Conservative +SOEC,investment,2030,2721,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Conservative +SOEC,investment,2040,2598,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Conservative +SOEC,investment,2050,2481,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Conservative +Alkaline electrolyzer large size,investment,2020,1671,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Advanced +Alkaline electrolyzer large size,investment,2030,1342,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Advanced +Alkaline electrolyzer large size,investment,2040,1086,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Advanced +Alkaline electrolyzer large size,investment,2050,888,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Advanced +PEM electrolyzer small size,investment,2020,2599,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Advanced +PEM electrolyzer small size,investment,2030,2062,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Advanced +PEM electrolyzer small size,investment,2040,1646,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Advanced +PEM electrolyzer small size,investment,2050,1322,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Advanced +SOEC,investment,2020,2851,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Advanced +SOEC,investment,2030,2258,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Advanced +SOEC,investment,2040,1797,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Advanced +SOEC,investment,2050,1440,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Advanced +Alkaline electrolyzer large size,investment,2020,1671,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Moderate +Alkaline electrolyzer large size,investment,2030,1402,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Moderate +Alkaline electrolyzer large size,investment,2040,1182,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Moderate +Alkaline electrolyzer large size,investment,2050,1002,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Moderate +PEM electrolyzer small size,investment,2020,2599,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Moderate +PEM electrolyzer small size,investment,2030,2160,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Moderate +PEM electrolyzer small size,investment,2040,1802,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Moderate +PEM electrolyzer small size,investment,2050,1509,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Moderate +SOEC,investment,2020,2851,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Moderate +SOEC,investment,2030,2366,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Moderate +SOEC,investment,2040,1970,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Moderate +SOEC,investment,2050,1646,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Moderate +Alkaline electrolyzer large size,investment,2020,1671,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Conservative +Alkaline electrolyzer large size,investment,2030,1599,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Conservative +Alkaline electrolyzer large size,investment,2040,1531,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Conservative +Alkaline electrolyzer large size,investment,2050,1466,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Conservative +PEM electrolyzer small size,investment,2020,2599,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Conservative +PEM electrolyzer small size,investment,2030,2160,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Conservative +PEM electrolyzer small size,investment,2040,1802,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Conservative +PEM electrolyzer small size,investment,2050,1509,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Conservative +SOEC,investment,2020,2851,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Conservative +SOEC,investment,2030,2721,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Conservative +SOEC,investment,2040,2598,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Conservative +SOEC,investment,2050,2481,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Conservative +Alkaline electrolyzer large size,investment,2020,1671,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Advanced +Alkaline electrolyzer large size,investment,2030,1342,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Advanced +Alkaline electrolyzer large size,investment,2040,1086,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Advanced +Alkaline electrolyzer large size,investment,2050,888,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Advanced +PEM electrolyzer small size,investment,2020,2599,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Advanced +PEM electrolyzer small size,investment,2030,2062,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Advanced +PEM electrolyzer small size,investment,2040,1646,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Advanced +PEM electrolyzer small size,investment,2050,1322,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Advanced +SOEC,investment,2020,2851,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Advanced +SOEC,investment,2030,2258,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Advanced +SOEC,investment,2040,1797,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Advanced +SOEC,investment,2050,1440,USD/kW,2022,"ICCT IRA e-fuels assumptions, https://theicct.org/wp-content/uploads/2022/02/fuels-eu-cost-renew-H-produced-onsite-H-refueling-stations-europe-feb22.pdf adjusted according to DOE observations https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf?sfvrsn=8cb10889_1#:~:text=This%20Record%20shows%20that%20the,factors%20of%2050%2D75%25",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Advanced +Alkaline electrolyzer large size,FOM,2020,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Moderate +Alkaline electrolyzer large size,FOM,2030,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Moderate +Alkaline electrolyzer large size,FOM,2050,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Moderate +PEM electrolyzer small size,FOM,2020,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Moderate +PEM electrolyzer small size,FOM,2030,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Moderate +PEM electrolyzer small size,FOM,2050,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Moderate +SOEC,FOM,2020,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Moderate +SOEC,FOM,2030,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Moderate +SOEC,FOM,2050,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Moderate +Alkaline electrolyzer large size,FOM,2020,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Conservative +Alkaline electrolyzer large size,FOM,2030,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Conservative +Alkaline electrolyzer large size,FOM,2050,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Conservative +PEM electrolyzer small size,FOM,2020,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Conservative +PEM electrolyzer small size,FOM,2030,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Conservative +PEM electrolyzer small size,FOM,2050,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Conservative +SOEC,FOM,2020,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Conservative +SOEC,FOM,2030,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Conservative +SOEC,FOM,2050,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Conservative +Alkaline electrolyzer large size,FOM,2020,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Advanced +Alkaline electrolyzer large size,FOM,2030,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Advanced +Alkaline electrolyzer large size,FOM,2050,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Advanced +PEM electrolyzer small size,FOM,2020,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Advanced +PEM electrolyzer small size,FOM,2030,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Advanced +PEM electrolyzer small size,FOM,2050,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Advanced +SOEC,FOM,2020,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Advanced +SOEC,FOM,2030,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Advanced +SOEC,FOM,2050,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Advanced +Alkaline electrolyzer large size,FOM,2020,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Moderate +Alkaline electrolyzer large size,FOM,2030,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Moderate +Alkaline electrolyzer large size,FOM,2050,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Moderate +PEM electrolyzer small size,FOM,2020,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Moderate +PEM electrolyzer small size,FOM,2030,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Moderate +PEM electrolyzer small size,FOM,2050,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Moderate +SOEC,FOM,2020,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Moderate +SOEC,FOM,2030,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Moderate +SOEC,FOM,2050,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Moderate +Alkaline electrolyzer large size,FOM,2020,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Conservative +Alkaline electrolyzer large size,FOM,2030,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Conservative +Alkaline electrolyzer large size,FOM,2050,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Conservative +PEM electrolyzer small size,FOM,2020,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Conservative +PEM electrolyzer small size,FOM,2030,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Conservative +PEM electrolyzer small size,FOM,2050,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Conservative +SOEC,FOM,2020,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Conservative +SOEC,FOM,2030,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Conservative +SOEC,FOM,2050,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Conservative +Alkaline electrolyzer large size,FOM,2020,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Advanced +Alkaline electrolyzer large size,FOM,2030,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Advanced +Alkaline electrolyzer large size,FOM,2050,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Advanced +PEM electrolyzer small size,FOM,2020,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Advanced +PEM electrolyzer small size,FOM,2030,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Advanced +PEM electrolyzer small size,FOM,2050,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Advanced +SOEC,FOM,2020,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Advanced +SOEC,FOM,2030,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Advanced +SOEC,FOM,2050,4,%/year,2022,ICCT IRA e-fuels assumptions ,Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Advanced +battery storage,investment,2022,405.4,USD/kWh,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Moderate +battery storage,investment,2030,254.8,USD/kWh,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Moderate +battery storage,investment,2040,208.6,USD/kWh,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Moderate +battery storage,investment,2050,163,USD/kWh,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Moderate +battery storage,investment,2022,405.4,USD/kWh,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Conservative +battery storage,investment,2030,330.4,USD/kWh,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Conservative +battery storage,investment,2040,307.8,USD/kWh,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Conservative +battery storage,investment,2050,285.2,USD/kWh,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Conservative +battery storage,investment,2022,405.4,USD/kWh,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Advanced +battery storage,investment,2030,205.8,USD/kWh,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Advanced +battery storage,investment,2040,169.5,USD/kWh,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Advanced +battery storage,investment,2050,134,USD/kWh,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Advanced +battery storage,investment,2022,405.4,USD/kWh,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Moderate +battery storage,investment,2030,254.8,USD/kWh,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Moderate +battery storage,investment,2040,208.6,USD/kWh,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Moderate +battery storage,investment,2050,163,USD/kWh,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Moderate +battery storage,investment,2022,405.4,USD/kWh,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Conservative +battery storage,investment,2030,330.4,USD/kWh,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Conservative +battery storage,investment,2040,307.8,USD/kWh,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Conservative +battery storage,investment,2050,285.2,USD/kWh,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Conservative +battery storage,investment,2022,405.4,USD/kWh,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Advanced +battery storage,investment,2030,205.8,USD/kWh,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Advanced +battery storage,investment,2040,169.5,USD/kWh,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Advanced +battery storage,investment,2050,134,USD/kWh,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Advanced +battery inverter,investment,2022,480.1,USD/kW,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Moderate +battery inverter,investment,2030,432.8,USD/kW,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Moderate +battery inverter,investment,2040,409.6,USD/kW,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Moderate +battery inverter,investment,2050,384,USD/kW,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Moderate +battery inverter,investment,2022,480.1,USD/kW,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Conservative +battery inverter,investment,2030,454.2,USD/kW,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Conservative +battery inverter,investment,2040,430.3,USD/kW,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Conservative +battery inverter,investment,2050,406.2,USD/kW,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Conservative +battery inverter,investment,2022,480.1,USD/kW,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Advanced +battery inverter,investment,2030,294.7,USD/kW,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Advanced +battery inverter,investment,2040,262,USD/kW,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Advanced +battery inverter,investment,2050,226.6,USD/kW,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Advanced +battery inverter,investment,2022,480.1,USD/kW,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Moderate +battery inverter,investment,2030,432.8,USD/kW,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Moderate +battery inverter,investment,2040,409.6,USD/kW,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Moderate +battery inverter,investment,2050,384,USD/kW,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Moderate +battery inverter,investment,2022,480.1,USD/kW,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Conservative +battery inverter,investment,2030,454.2,USD/kW,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Conservative +battery inverter,investment,2040,430.3,USD/kW,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Conservative +battery inverter,investment,2050,406.2,USD/kW,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Conservative +battery inverter,investment,2022,480.1,USD/kW,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Advanced +battery inverter,investment,2030,294.7,USD/kW,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Advanced +battery inverter,investment,2040,262,USD/kW,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Advanced +battery inverter,investment,2050,226.6,USD/kW,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Includes grid connection and project financing costs; Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Advanced +battery storage,FOM,2022,2.5,%/year,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Moderate +battery storage,FOM,2030,2.5,%/year,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Moderate +battery storage,FOM,2040,2.5,%/year,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Moderate +battery storage,FOM,2050,2.5,%/year,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Moderate +battery storage,FOM,2022,2.5,%/year,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Conservative +battery storage,FOM,2030,2.5,%/year,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Conservative +battery storage,FOM,2040,2.5,%/year,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Conservative +battery storage,FOM,2050,2.5,%/year,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Conservative +battery storage,FOM,2022,2.5,%/year,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Advanced +battery storage,FOM,2030,2.5,%/year,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Advanced +battery storage,FOM,2040,2.5,%/year,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Advanced +battery storage,FOM,2050,2.5,%/year,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Advanced +battery storage,FOM,2022,2.5,%/year,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Moderate +battery storage,FOM,2030,2.5,%/year,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Moderate +battery storage,FOM,2040,2.5,%/year,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Moderate +battery storage,FOM,2050,2.5,%/year,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Moderate +battery storage,FOM,2022,2.5,%/year,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Conservative +battery storage,FOM,2030,2.5,%/year,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Conservative +battery storage,FOM,2040,2.5,%/year,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Conservative +battery storage,FOM,2050,2.5,%/year,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Conservative +battery storage,FOM,2022,2.5,%/year,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Advanced +battery storage,FOM,2030,2.5,%/year,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Advanced +battery storage,FOM,2040,2.5,%/year,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Advanced +battery storage,FOM,2050,2.5,%/year,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Advanced +battery inverter,FOM,2022,2.5,%/year,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Moderate +battery inverter,FOM,2030,2.5,%/year,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Moderate +battery inverter,FOM,2040,2.5,%/year,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Moderate +battery inverter,FOM,2050,2.5,%/year,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Moderate +battery inverter,FOM,2022,2.5,%/year,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Conservative +battery inverter,FOM,2030,2.5,%/year,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Conservative +battery inverter,FOM,2040,2.5,%/year,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Conservative +battery inverter,FOM,2050,2.5,%/year,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Conservative +battery inverter,FOM,2022,2.5,%/year,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Advanced +battery inverter,FOM,2030,2.5,%/year,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Advanced +battery inverter,FOM,2040,2.5,%/year,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Advanced +battery inverter,FOM,2050,2.5,%/year,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,R&D,Advanced +battery inverter,FOM,2022,2.5,%/year,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Moderate +battery inverter,FOM,2030,2.5,%/year,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Moderate +battery inverter,FOM,2040,2.5,%/year,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Moderate +battery inverter,FOM,2050,2.5,%/year,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Moderate +battery inverter,FOM,2022,2.5,%/year,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Conservative +battery inverter,FOM,2030,2.5,%/year,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Conservative +battery inverter,FOM,2040,2.5,%/year,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Conservative +battery inverter,FOM,2050,2.5,%/year,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Conservative +battery inverter,FOM,2022,2.5,%/year,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Advanced +battery inverter,FOM,2030,2.5,%/year,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Advanced +battery inverter,FOM,2040,2.5,%/year,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Advanced +battery inverter,FOM,2050,2.5,%/year,2022,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",Meaning of scenario and financial case: https://atb.nrel.gov/electricity/2024/definitions#scenarios,Market,Advanced +battery storage,lifetime,2022,15,years,-,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",,, +battery inverter,lifetime,2022,15,years,-,"NREL, 2024 ATB Excel Workbook, Sheet β€œUtility-Scale Battery Storage”, https://data.openei.org/files/6006/2024_v3_Workbook.xlsx",,, diff --git a/src/technologydata/utils/carriers.txt b/src/technologydata/utils/carriers.txt index ab41391c..ce376cb1 100644 --- a/src/technologydata/utils/carriers.txt +++ b/src/technologydata/utils/carriers.txt @@ -19,6 +19,7 @@ carbon_dioxide = [carbon_dioxide] = CO2 carbon_monoxide = [carbon_monoxide] = CO coal = [coal] = anthracite = hard_coal = black_coal diesel = [diesel] +fischer_tropsch = [fischer_tropsch] = FT = FTF = fischer_tropsch_fuel gasoline = [gasoline] = petrol jet_fuel_a1 = [jet_fuel_a1] = JETA1 electricity = [electricity] = e = el @@ -29,5 +30,6 @@ methanol = [methanol] = CH3OH = MeOH natural_gas = [natural_gas] = NG nitrogen = [nitrogen] = N2 oxygen = [oxygen] = O2 +thermal = [thermal] = th water = [water] = H2O wood = [wood] diff --git a/test/test_dea_energy_storage.py b/test/test_dea_energy_storage.py index 2da6ccc4..1a5b02d1 100644 --- a/test/test_dea_energy_storage.py +++ b/test/test_dea_energy_storage.py @@ -10,7 +10,7 @@ import pandas import pytest -from technologydata.package_data.dea_energy_storage.dea_energy_storage import ( +from technologydata.parsers.dea_energy_storage.dea_energy_storage import ( build_technology_collection, clean_est_string, clean_parameter_string, diff --git a/test/test_parser_commons.py b/test/test_parser_commons.py new file mode 100644 index 00000000..4790d84a --- /dev/null +++ b/test/test_parser_commons.py @@ -0,0 +1,28 @@ +# SPDX-FileCopyrightText: technologydata contributors +# +# SPDX-License-Identifier: MIT + +"""Test the utility methods.""" + +import typing + +from technologydata.parsers.commons import CommonsParser + + +class TestCommonsUtils: + """Test suite for the Commons utility functions in the technologydata module.""" + + def test_defaults_and_flag(self, monkeypatch: typing.Any) -> None: + """Check if parse_input_arguments works when both default arg and the store_true flag are provided.""" + monkeypatch.setattr("sys.argv", ["prog", "--num_digits", "2", "--store_source"]) + args = CommonsParser.parse_input_arguments() + assert args.num_digits == 2 + assert args.store_source is True + + def test_default_values_when_not_provided(self, monkeypatch: typing.Any) -> None: + """Check if parse_input_arguments works when no args are provided (so defaults are used).""" + # no args -> defaults apply + monkeypatch.setattr("sys.argv", ["prog"]) + args = CommonsParser.parse_input_arguments() + assert args.num_digits == 4 # default from the function + assert args.store_source is False From 2f4a96aae153464d60afd9f725c31bf9d573e954 Mon Sep 17 00:00:00 2001 From: Fabrizio Finozzi Date: Mon, 2 Feb 2026 07:54:26 +0100 Subject: [PATCH 37/43] doc: add pypi link --- docs/index.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/index.md b/docs/index.md index e66a6f9c..0cdac0bb 100644 --- a/docs/index.md +++ b/docs/index.md @@ -2,6 +2,8 @@ technologydata Header Logo

+ +[![PyPI version](https://img.shields.io/pypi/v/technologydata.svg)](https://pypi.python.org/pypi/technologydata) [![License](https://img.shields.io/pypi/l/pypsa.svg)](https://github.com/PyPSA/pypsa?tab=MIT-1-ov-file) [![Discord](https://img.shields.io/discord/911692131440148490?logo=discord)](https://discord.gg/T7YZbnVU) From 622eb16b74409e2962b6d144331a481557b719d4 Mon Sep 17 00:00:00 2001 From: Fabrizio Finozzi Date: Mon, 2 Feb 2026 08:00:58 +0100 Subject: [PATCH 38/43] doc: add pre-commit checks --- docs/index.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/index.md b/docs/index.md index 0cdac0bb..79c5e0da 100644 --- a/docs/index.md +++ b/docs/index.md @@ -2,7 +2,6 @@ technologydata Header Logo

- [![PyPI version](https://img.shields.io/pypi/v/technologydata.svg)](https://pypi.python.org/pypi/technologydata) [![License](https://img.shields.io/pypi/l/pypsa.svg)](https://github.com/PyPSA/pypsa?tab=MIT-1-ov-file) [![Discord](https://img.shields.io/discord/911692131440148490?logo=discord)](https://discord.gg/T7YZbnVU) From ee4fbebf74afedee484446b27eb5cde882b85a42 Mon Sep 17 00:00:00 2001 From: Fabrizio Finozzi Date: Mon, 2 Feb 2026 10:19:57 +0100 Subject: [PATCH 39/43] update version --- CITATIONS.cff | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CITATIONS.cff b/CITATIONS.cff index fe9d5c3b..6bdc2722 100644 --- a/CITATIONS.cff +++ b/CITATIONS.cff @@ -6,7 +6,7 @@ cff-version: 1.2.0 message: "If you use this package, we suggest the following way of citing it." title: "technologydata: Data for Energy Systems Models" repository: https://github.com/open-energy-transition/technology-data -version: 0.1.0 # Don't touch, will be updated by the release script +version: 0.2.1 # Don't touch, will be updated by the release script license: MIT authors: - family-names: Hampp From ff94d75a74a8233963e5d14fda3051af2ed55a97 Mon Sep 17 00:00:00 2001 From: Fabrizio Finozzi <167071962+finozzifa@users.noreply.github.com> Date: Wed, 4 Feb 2026 17:54:10 +0100 Subject: [PATCH 40/43] Issue 82 repeated calls change_heating_value (#87) --- src/technologydata/parameter.py | 4 +++- test/test_parameter.py | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/technologydata/parameter.py b/src/technologydata/parameter.py index 2db0f7b7..789693df 100644 --- a/src/technologydata/parameter.py +++ b/src/technologydata/parameter.py @@ -295,7 +295,9 @@ def change_heating_value(self, to_heating_value: str) -> Self: "Cannot change heating value without a current heating value. " "Please provide a valid heating value." ) - if to_heating_value == self.heating_value: + # pint uses canonical names for units, ensure we compare against that + to_heating_value_pint = str(technologydata.hvreg.Unit(to_heating_value)) + if to_heating_value_pint == self.heating_value: # No change needed, return the same parameter return self diff --git a/test/test_parameter.py b/test/test_parameter.py index 116abcd3..65726536 100644 --- a/test/test_parameter.py +++ b/test/test_parameter.py @@ -740,6 +740,21 @@ def test_change_heating_value_ch4_hhv_to_lhv_adapt_units(self) -> None: assert p2.heating_value == "lower_heating_value" assert p2.carrier == "methane" + def test_change_heating_value_multiple_calls(self) -> None: + """Test conversion when multiple calls are performed and to_heating_value is constant.""" + p = technologydata.Parameter( + magnitude=10, units="kW", heating_value="LHV", carrier="natural_gas" + ) + p = p.change_heating_value("HHV") + assert p.units == "kilowatt" + assert pytest.approx(p.magnitude) == 11.0828 + p = p.change_heating_value("HHV") + assert p.units == "kilowatt" + assert pytest.approx(p.magnitude) == 11.0828 + p = p.change_heating_value("HHV") + assert p.units == "kilowatt" + assert pytest.approx(p.magnitude) == 11.0828 + def test_change_heating_value_no_carrier_in_units(self) -> None: """Test conversion when carrier does not appear in units (should treat as 1 appearance).""" p = technologydata.Parameter( From e65f0a2d241744840a7af5fcf38d7434b8236e85 Mon Sep 17 00:00:00 2001 From: Fabrizio Finozzi Date: Fri, 6 Feb 2026 10:30:13 +0100 Subject: [PATCH 41/43] code: update CITATIONS.cff with new patch release --- CITATIONS.cff | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CITATIONS.cff b/CITATIONS.cff index 6bdc2722..02720fe6 100644 --- a/CITATIONS.cff +++ b/CITATIONS.cff @@ -6,7 +6,7 @@ cff-version: 1.2.0 message: "If you use this package, we suggest the following way of citing it." title: "technologydata: Data for Energy Systems Models" repository: https://github.com/open-energy-transition/technology-data -version: 0.2.1 # Don't touch, will be updated by the release script +version: 0.2.2 # Don't touch, will be updated by the release script license: MIT authors: - family-names: Hampp From 0465cb059958e8ec68b53925066fe86b4caf36c0 Mon Sep 17 00:00:00 2001 From: Fabrizio Finozzi <167071962+finozzifa@users.noreply.github.com> Date: Tue, 17 Feb 2026 15:01:13 +0100 Subject: [PATCH 42/43] Data accessor (#90) * add __init__.py in parsers directory * code: create data_accessor class * code: pre-commit check * code: add datapackage load * code: add data accessor class * code: update test description * code: modify logic for DataSourceName enum * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * code: fix failing unit test * code: omit __init__.py from code coverage * Update docs/user_guide/data_accessor.md Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * Update docs/user_guide/data_accessor.md Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> * code: add load * code: new changes --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com> --- MANIFEST.in | 4 +- REUSE.toml | 2 +- docs/api/data_accessor.md | 1 + docs/user_guide/data_accessor.md | 85 +++++++++++ mkdocs.yaml | 2 + pyproject.toml | 1 + src/technologydata/parsers/__init__.py | 5 + src/technologydata/parsers/data_accessor.py | 143 ++++++++++++++++++ .../parsers/dea_energy_storage/__init__.py | 5 + .../dea_energy_storage/dea_energy_storage.py | 4 +- .../dea_energy_storage/{ => v10}/sources.json | 0 .../{ => v10}/technologies.json | 0 .../parsers/manual_input_usa/__init__.py | 5 + .../manual_input_usa/manual_input_usa.py | 4 +- .../{ => v0.13.4}/sources.json | 0 .../{ => v0.13.4}/technologies.json | 0 test/test_parser_data_accessor.py | 72 +++++++++ 17 files changed, 326 insertions(+), 7 deletions(-) create mode 100644 docs/api/data_accessor.md create mode 100644 docs/user_guide/data_accessor.md create mode 100644 src/technologydata/parsers/__init__.py create mode 100644 src/technologydata/parsers/data_accessor.py create mode 100644 src/technologydata/parsers/dea_energy_storage/__init__.py rename src/technologydata/parsers/dea_energy_storage/{ => v10}/sources.json (100%) rename src/technologydata/parsers/dea_energy_storage/{ => v10}/technologies.json (100%) create mode 100644 src/technologydata/parsers/manual_input_usa/__init__.py rename src/technologydata/parsers/manual_input_usa/{ => v0.13.4}/sources.json (100%) rename src/technologydata/parsers/manual_input_usa/{ => v0.13.4}/technologies.json (100%) create mode 100644 test/test_parser_data_accessor.py diff --git a/MANIFEST.in b/MANIFEST.in index 8bfd8dee..e9341945 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,6 +1,6 @@ include src/technologydata/utils/*.txt -include src/technologydata/parsers/dea_energy_storage/*.json -include src/technologydata/parsers/manual_input_usa/*.json +include src/technologydata/parsers/dea_energy_storage/v10/*.json +include src/technologydata/parsers/manual_input_usa/v0.13.4/*.json include src/technologydata/parsers/raw/* include test/test_data/currency_conversion/WB_CNY_2020/* include test/test_data/currency_conversion/WB_EUR_2020/* diff --git a/REUSE.toml b/REUSE.toml index c23a3566..f4f198a1 100644 --- a/REUSE.toml +++ b/REUSE.toml @@ -15,7 +15,7 @@ SPDX-License-Identifier = "CC-BY-4.0" [[annotations]] path = [ - "src/technologydata/parsers/dea_energy_storage/*.json", "src/technologydata/parsers/schemas/*.json", "src/technologydata/parsers/raw/manual_input_usa.csv", "src/technologydata/parsers/manual_input_usa/*.json", + "src/technologydata/parsers/dea_energy_storage/v*/*.json", "src/technologydata/parsers/schemas/*.json", "src/technologydata/parsers/raw/manual_input_usa.csv", "src/technologydata/parsers/manual_input_usa/v*/*.json", ] SPDX-FileCopyrightText = "technologydata contributors" SPDX-License-Identifier = "CC-BY-4.0" diff --git a/docs/api/data_accessor.md b/docs/api/data_accessor.md new file mode 100644 index 00000000..dcd66bd3 --- /dev/null +++ b/docs/api/data_accessor.md @@ -0,0 +1 @@ +::: technologydata.parsers.data_accessor.DataAccessor diff --git a/docs/user_guide/data_accessor.md b/docs/user_guide/data_accessor.md new file mode 100644 index 00000000..7532198c --- /dev/null +++ b/docs/user_guide/data_accessor.md @@ -0,0 +1,85 @@ +# `DataAccessor` Class Documentation + + + +## Overview + +The `DataAccessor` class provides a standardized way to access and load technology datasets from versioned data sources. It simplifies the process of selecting a specific data source and version, automatically handling the resolution of file paths and loading the data into a `DataPackage` object. + +It is designed to work with a specific directory structure where datasets are organized by name and version. + +## Features + +- **Data Source Selection**: Easily specify which dataset to load using the `DataSourceName` enumeration. +- **Version Management**: Load a specific version of a dataset or automatically detect and use the latest available version. +- **Standardized Loading**: Loads a `DataPackage` from a versioned folder, which is expected to contain `technologies.json` and optionally `sources.json`. +- **Error Handling**: Raises `FileNotFoundError` if the specified data source or version directories cannot be found. +- **Seamless Integration**: Returns a `DataPackage` object, ready for use with other components of the `technologydata` library. + +## Usage Examples + +### Creating a DataAccessor + +To use the `DataAccessor`, you first create an instance, specifying the `data_source_name`. You can optionally provide a `data_version`. If no version is specified, the latest available version for this dataset is used. + +```python +from technologydata.parsers.data_accessor import DataAccessor + +# Create an accessor for a specific version +accessor_v1 = DataAccessor( + data_source="manual_input_usa", + version="v1.0.0" +) + +# Create an accessor that will use the latest version +accessor_latest = DataAccessor( + data_source_name="dea_energy_storage" +) +``` + +### Accessing Data + +Once the `DataAccessor` is instantiated, call the `access_data()` method to load the dataset. The method handles finding the correct directory and then calls `DataPackage.from_json()` on that directory. + +The directory structure is expected to be: `src/technologydata/parsers///`. + +#### Loading a Specific Version + +If `data_version` was specified during instantiation, `access_data()` will look for that exact version. + +```python +# Assuming the path .../parsers/manual_input_usa/v1.0.0/ exists +dp_v1 = accessor_v1.access_data() + +# dp_v1 is now a DataPackage object containing the data from v1.0.0 +print(type(dp_v1)) +# +``` + +#### Loading the Latest Version + +If `data_version` is not provided or not found, `access_data()` automatically identifies the latest version based on semantic versioning rules (e.g., `v2.1.0` is newer than `v2.0.0`, and `v10` is newer than `v2`). + +```python +# Assuming .../parsers/dea_energy_storage/ contains version directories like 'v1', 'v2' +# The accessor will load data from the latest version found (e.g., 'v2') +dp_latest = accessor_latest.access_data() + +print(type(dp_latest)) +# +``` + +## API Reference + +Please refer to the [API documentation](../api/data_accessor.md) for detailed information on the `DataAccessor` class methods and attributes. + +## Limitations & Notes + +- **Directory Structure**: The `DataAccessor` expects a specific directory structure within the project: `src/technologydata/parsers///`. It will not find data located elsewhere. +- **Version Naming**: Version directories must be prefixed with a `v` and follow a pattern that can be parsed by `packaging.version` (e.g., `v1`, `v2.0`, `v1.0.1-alpha`). Directories that do not match this pattern will be ignored when searching for the latest version. +- **Target Data**: The class is designed to load a `DataPackage` from a folder. See the `DataPackage` documentation for more details on the expected contents of that folder (i.e., `technologies.json`). diff --git a/mkdocs.yaml b/mkdocs.yaml index 2c8b5aa0..0455268c 100644 --- a/mkdocs.yaml +++ b/mkdocs.yaml @@ -28,6 +28,7 @@ nav: - Source Collection: user_guide/source_collection.md - Technology: user_guide/technology.md - Technology Collection: user_guide/technology_collection.md + - Data Accessor: user_guide/data_accessor.md - Use Cases: user_guide/design.md - Examples: @@ -41,6 +42,7 @@ nav: - Source Collection: api/source_collection.md - Technology: api/technology.md - Technology Collection: api/technology_collection.md + - Data Accessor: api/data_accessor.md - Utils: - Commons: - Common functionalities: api/commons/commons.md diff --git a/pyproject.toml b/pyproject.toml index 2bc9070c..e41f9a34 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -112,6 +112,7 @@ include = ["technologydata"] source = [ "src/technologydata", ] +omit = ["*/__init__.py"] # Static type checker settings [tool.mypy] diff --git a/src/technologydata/parsers/__init__.py b/src/technologydata/parsers/__init__.py new file mode 100644 index 00000000..7aa2c725 --- /dev/null +++ b/src/technologydata/parsers/__init__.py @@ -0,0 +1,5 @@ +# SPDX-FileCopyrightText: technologydata contributors +# +# SPDX-License-Identifier: MIT + +"""Provide parsers for datasets.""" diff --git a/src/technologydata/parsers/data_accessor.py b/src/technologydata/parsers/data_accessor.py new file mode 100644 index 00000000..8d01b811 --- /dev/null +++ b/src/technologydata/parsers/data_accessor.py @@ -0,0 +1,143 @@ +# SPDX-FileCopyrightText: technologydata contributors +# +# SPDX-License-Identifier: MIT + +"""Provide a class to access data from a data source.""" + +import logging +import pathlib +import re +from enum import Enum +from typing import Annotated + +import pydantic +from packaging.version import parse +from pydantic import field_validator + +from technologydata import DataPackage + +path_cwd = pathlib.Path.cwd() + +logger = logging.getLogger(__name__) + + +class DataSourceName(str, Enum): + """An enumeration of available data sources.""" + + DEA_ENERGY_STORAGE = "dea_energy_storage" + MANUAL_INPUT_USA = "manual_input_usa" + + +class DataAccessor(pydantic.BaseModel): + """ + Access data from a versioned data source. + + This class provides a standardized interface to locate and load technology + datasets from predefined data sources. It can either load a specific version + or automatically determine and load the latest available version. + + Parameters + ---------- + data_source_name : str + The name of the data source to access, as defined in the + `DataSourceName` enumeration. + data_version : str, optional + The specific version string of the data to load (e.g., "v1.0.0"). + If not provided, the latest version will be automatically determined + and used. Default is None. + + Attributes + ---------- + data_source_name : str + The name of the data source. + data_version : str or None + The version of the data source. + + """ + + data_source_name: Annotated[ + str, pydantic.Field(description="The name of the data source.") + ] + data_version: Annotated[ + str | None, pydantic.Field(description="The version of the data source.") + ] = None + + @field_validator("data_source_name", mode="before") + @classmethod + def _validate_data_source_name(cls, v: str) -> DataSourceName: + # Validate if the given string is a valid DataSourceName + try: + return DataSourceName(v) + except ValueError: + raise ValueError( + f"{v} is not a valid DataSourceName. Available options: {[e for e in DataSourceName]}" + ) + + @staticmethod + def get_latest_version_string(data_source_path_list: list[pathlib.Path]) -> str: + """ + Find the latest version string for the data source. + + Returns + ------- + str + The string of the latest version (e.g., 'v10', 'v1.0.0'). + + Raises + ------ + FileNotFoundError + If the data source directory or valid version directories are not found. + + """ + version_pattern = re.compile(r"^v(\d+(\.\d+)*)$") + versions = [] + for item in data_source_path_list: + if item.is_dir(): + match = version_pattern.match(item.name) + if match: + versions.append(item.name) + + if not versions: + raise FileNotFoundError("No valid version directories found.") + + latest_version_str = max(versions, key=lambda v: parse(v[1:])) + return latest_version_str + + def load(self) -> DataPackage: + """ + Load the default 'technologies.json' from the package data. + + Returns + ------- + DataPackage + An instance of DataPackage initialized with the requested data. + + Raises + ------ + FileNotFoundError + If the data source directory or the specified version directory is not found. + ValueError + If the specified version is not found. The user is notified of the latest available version. + + """ + source_path = pathlib.Path( + path_cwd, "src", "technologydata", "parsers", self.data_source_name + ) + if not source_path.is_dir(): + raise FileNotFoundError(f"Data source directory not found: {source_path}") + + source_path_list = [p.name for p in source_path.iterdir() if p.is_dir()] + + if self.data_version and self.data_version in source_path_list: + version = self.data_version + logger.info( + f"Data source directory corresponding to version {self.data_version} found." + ) + else: + version = self.get_latest_version_string(list(source_path.iterdir())) + raise ValueError( + f"Data source version '{self.data_version}' not found. The latest available version is {version}." + ) + + data_path = pathlib.Path(source_path, version) + return DataPackage.from_json(data_path) diff --git a/src/technologydata/parsers/dea_energy_storage/__init__.py b/src/technologydata/parsers/dea_energy_storage/__init__.py new file mode 100644 index 00000000..1ef3068c --- /dev/null +++ b/src/technologydata/parsers/dea_energy_storage/__init__.py @@ -0,0 +1,5 @@ +# SPDX-FileCopyrightText: technologydata contributors +# +# SPDX-License-Identifier: MIT + +"""Provide a parser for the DEA data storage dataset.""" diff --git a/src/technologydata/parsers/dea_energy_storage/dea_energy_storage.py b/src/technologydata/parsers/dea_energy_storage/dea_energy_storage.py index 46c7fe22..2a3be692 100644 --- a/src/technologydata/parsers/dea_energy_storage/dea_energy_storage.py +++ b/src/technologydata/parsers/dea_energy_storage/dea_energy_storage.py @@ -623,11 +623,11 @@ def build_technology_collection( ) output_technologies_path = pathlib.Path( dea_storage_path, - "technologies.json", + "v10/technologies.json", ) output_sources_path = pathlib.Path( dea_storage_path, - "sources.json", + "v10/sources.json", ) tech_col = build_technology_collection( diff --git a/src/technologydata/parsers/dea_energy_storage/sources.json b/src/technologydata/parsers/dea_energy_storage/v10/sources.json similarity index 100% rename from src/technologydata/parsers/dea_energy_storage/sources.json rename to src/technologydata/parsers/dea_energy_storage/v10/sources.json diff --git a/src/technologydata/parsers/dea_energy_storage/technologies.json b/src/technologydata/parsers/dea_energy_storage/v10/technologies.json similarity index 100% rename from src/technologydata/parsers/dea_energy_storage/technologies.json rename to src/technologydata/parsers/dea_energy_storage/v10/technologies.json diff --git a/src/technologydata/parsers/manual_input_usa/__init__.py b/src/technologydata/parsers/manual_input_usa/__init__.py new file mode 100644 index 00000000..c0cd27e1 --- /dev/null +++ b/src/technologydata/parsers/manual_input_usa/__init__.py @@ -0,0 +1,5 @@ +# SPDX-FileCopyrightText: technologydata contributors +# +# SPDX-License-Identifier: MIT + +"""Provide a parser for manually inputted data for the USA.""" diff --git a/src/technologydata/parsers/manual_input_usa/manual_input_usa.py b/src/technologydata/parsers/manual_input_usa/manual_input_usa.py index 7ad159e4..1212c95f 100644 --- a/src/technologydata/parsers/manual_input_usa/manual_input_usa.py +++ b/src/technologydata/parsers/manual_input_usa/manual_input_usa.py @@ -240,11 +240,11 @@ def build_technology_collection( ) output_technologies_path = pathlib.Path( manual_input_usa_base_path, - "technologies.json", + "v0.13.4/technologies.json", ) output_sources_path = pathlib.Path( manual_input_usa_base_path, - "sources.json", + "v0.13.4/sources.json", ) tech_col = build_technology_collection( diff --git a/src/technologydata/parsers/manual_input_usa/sources.json b/src/technologydata/parsers/manual_input_usa/v0.13.4/sources.json similarity index 100% rename from src/technologydata/parsers/manual_input_usa/sources.json rename to src/technologydata/parsers/manual_input_usa/v0.13.4/sources.json diff --git a/src/technologydata/parsers/manual_input_usa/technologies.json b/src/technologydata/parsers/manual_input_usa/v0.13.4/technologies.json similarity index 100% rename from src/technologydata/parsers/manual_input_usa/technologies.json rename to src/technologydata/parsers/manual_input_usa/v0.13.4/technologies.json diff --git a/test/test_parser_data_accessor.py b/test/test_parser_data_accessor.py new file mode 100644 index 00000000..f7b9cbec --- /dev/null +++ b/test/test_parser_data_accessor.py @@ -0,0 +1,72 @@ +# SPDX-FileCopyrightText: technologydata contributors +# +# SPDX-License-Identifier: MIT + +"""Test the DataAccessor class.""" + +import pathlib + +import pytest + +from technologydata.parsers.data_accessor import DataAccessor, DataSourceName + + +class TestDataAccessor: + """Test suite for the DataAccessor class in the technologydata module.""" + + @pytest.mark.parametrize( + ("versions", "expected"), + [ + (["v1", "v2", "v3", "v4"], "v4"), + (["v0.1.0", "v0.1.1"], "v0.1.1"), + (["v1", "v10", "v2"], "v10"), + (["v1.0.0", "v0.2.1", "v0.1.0"], "v1.0.0"), + ], + ) # type: ignore + def test_get_latest_version_string( + self, tmp_path: pathlib.Path, versions: list[pathlib.Path], expected: str + ) -> None: + """Test get_latest_version_string.""" + versions_dir = [pathlib.Path(tmp_path, version) for version in versions] + for version in versions_dir: + version.mkdir() + + assert DataAccessor.get_latest_version_string(versions_dir) == expected + + def test_get_latest_version_string_raises_error( + self, tmp_path: pathlib.Path + ) -> None: + """Test if get_latest_version_string raises FileNotFoundError for no valid versions.""" + (tmp_path / "invalid1").mkdir() + (tmp_path / "another_invalid").mkdir() + + path_list = [p for p in tmp_path.iterdir() if p.is_dir()] + + with pytest.raises( + FileNotFoundError, match="No valid version directories found." + ): + DataAccessor.get_latest_version_string(path_list) + + def test_access_data_dea_energy_storage(self) -> None: + """Test access_data.""" + data_accessor = DataAccessor( + data_source_name="dea_energy_storage", data_version="v10" + ) + data_package = data_accessor.load() + + assert data_accessor.data_source_name == DataSourceName.DEA_ENERGY_STORAGE + assert data_accessor.data_version == "v10" + assert data_package is not None + assert data_package.technologies is not None + assert data_package.sources is not None + assert len(data_package.technologies) == 136 + + def test_load_raises_value_error_for_invalid_version(self) -> None: + """Test if load raises ValueError for an invalid version.""" + with pytest.raises( + ValueError, + match="Data source version 'v11' not found. The latest available version is v10.", + ): + DataAccessor( + data_source_name="dea_energy_storage", data_version="v11" + ).load() From 899eb52aa8997c818c011b2f439f49f0390271f7 Mon Sep 17 00:00:00 2001 From: Fabrizio Finozzi <167071962+finozzifa@users.noreply.github.com> Date: Fri, 20 Feb 2026 18:45:47 +0100 Subject: [PATCH 43/43] Multi version parser (#91) --- docs/api/dea_energy_storage_parser.md | 2 + docs/api/manual_input_usa_parser.md | 2 + docs/examples/dea_storage.md | 84 --- docs/examples/dea_storage_v10.md | 111 +++ ...input_usa.md => manual_input_usa_v0134.md} | 64 +- docs/user_guide/data_accessor.md | 43 +- docs/user_guide/datapackage.md | 20 +- docs/user_guide/dea_energy_storage_parser.md | 80 +++ docs/user_guide/manual_input_usa_parser.md | 78 ++ mkdocs.yaml | 8 +- src/technologydata/datapackage.py | 26 +- src/technologydata/parsers/commons.py | 15 +- src/technologydata/parsers/data_accessor.py | 117 ++- .../parsers/data_parser_base.py | 41 ++ .../parsers/dea_energy_storage/__init__.py | 87 +++ .../dea_energy_storage/dea_energy_storage.py | 658 ----------------- .../parsers/dea_energy_storage/parser_v10.py | 668 ++++++++++++++++++ .../parsers/manual_input_usa/__init__.py | 89 ++- .../manual_input_usa/manual_input_usa.py | 256 ------- .../parsers/manual_input_usa/parser_v0134.py | 273 +++++++ test/test_datapackage.py | 4 + ...rage.py => test_dea_energy_storage_v10.py} | 39 +- test/test_parser_commons.py | 20 +- test/test_parser_data_accessor.py | 53 +- 24 files changed, 1742 insertions(+), 1096 deletions(-) create mode 100644 docs/api/dea_energy_storage_parser.md create mode 100644 docs/api/manual_input_usa_parser.md delete mode 100644 docs/examples/dea_storage.md create mode 100644 docs/examples/dea_storage_v10.md rename docs/examples/{manual_input_usa.md => manual_input_usa_v0134.md} (58%) create mode 100644 docs/user_guide/dea_energy_storage_parser.md create mode 100644 docs/user_guide/manual_input_usa_parser.md create mode 100644 src/technologydata/parsers/data_parser_base.py delete mode 100644 src/technologydata/parsers/dea_energy_storage/dea_energy_storage.py create mode 100644 src/technologydata/parsers/dea_energy_storage/parser_v10.py delete mode 100644 src/technologydata/parsers/manual_input_usa/manual_input_usa.py create mode 100644 src/technologydata/parsers/manual_input_usa/parser_v0134.py rename test/{test_dea_energy_storage.py => test_dea_energy_storage_v10.py} (87%) diff --git a/docs/api/dea_energy_storage_parser.md b/docs/api/dea_energy_storage_parser.md new file mode 100644 index 00000000..50fd3513 --- /dev/null +++ b/docs/api/dea_energy_storage_parser.md @@ -0,0 +1,2 @@ +::: technologydata.parsers.dea_energy_storage.DeaEnergyStorageParser +::: technologydata.parsers.dea_energy_storage.parser_v10.DeaEnergyStorageV10Parser diff --git a/docs/api/manual_input_usa_parser.md b/docs/api/manual_input_usa_parser.md new file mode 100644 index 00000000..a88a53f1 --- /dev/null +++ b/docs/api/manual_input_usa_parser.md @@ -0,0 +1,2 @@ +::: technologydata.parsers.manual_input_usa.ManualInputUsaParser +::: technologydata.parsers.manual_input_usa.parser_v0134.ManualInputUSAV0134Parser diff --git a/docs/examples/dea_storage.md b/docs/examples/dea_storage.md deleted file mode 100644 index 67853a5f..00000000 --- a/docs/examples/dea_storage.md +++ /dev/null @@ -1,84 +0,0 @@ -# Danish Energy Agency Parser Documentation - -## Overview - -The Danish Energy Agency (DEA) data parser `dea_energy_storage.py` demonstrates a full data-cleaning and transformation pipeline for converting raw tabular data into the `technologydata` schema files `technologies.json` and `sources.json`. The parser is implemented in `src/technologydata/parsers/dea_energy_storage/dea_energy_storage.py`. - -## Dataset Description - -The original dataset is available at this [link](https://ens.dk/media/6589/download). A full description of the dataset is available at this [link](https://ens.dk/media/6588/download). The raw source file is included in the repository at `src/technologydata/parsers/raw/Technology_datasheet_for_energy_storage.xlsx`. - -The dataset is in Excel format, and it includes, under the data sheet `alldata_flat`, a flat table of technology parameters for a range of energy storage technologies. Columns include `Technology`, `ws`, `par` (parameter name), `val` (value), `unit`, `year`, `est` (case/estimate), `priceyear`, plus metadata columns such as `cat`, `ref`, `note`. Rows are individual parameter records (parameter value + unit + context) for technologies and estimation cases. - -## Parser description - -The parser is articulated in the following steps. - -### Command line argument parsing - -Function `parse_input_arguments()` defines and parses the command-line arguments: - -- `--num_digits` (int, default 4) β€” number of decimals used when rounding numeric values. The default value is 4. -- `--store_source` (boolean flag) β€” whether to store the source on the Wayback Machine. The default value is `false`. -- `--filter_params` (boolean flag) β€” whether to limit exported parameters to a fixed allowed set. The default value is `false`. -- `--export_schema` (boolean flag) β€” export JSON schema files. The default value is `false`. - -### Read the raw data - -The script reads the raw data available at `src/technologydata/parsers/raw/Technology_datasheet_for_energy_storage.xlsx`, under sheet `alldata_flat`, in a `pandas` dataframe. It uses `pandas.read_excel(..., engine=calamine, dtype=str)`. All entries are handled as strings initially. - -### Data cleaning, validation and dealing with missing/null values - -The data cleaning and validation happens with the following steps. - -Function `drop_invalid_rows(df)` validates whether required columns are present. It drops rows with missing/null or empty critical fields (`Technology`, `par`, `val`, `year`) and keeps rows where `year` contains a 4-digit year and `val` contains numeric characters and no comparator symbols (`<`, `>`, `≀`, `β‰₯`). - -Function `clean_technology_string()` normalizes text fields by removing leading 3-digit numeric codes, trims whitespace and lower-cases the string for consistent matching. It is applied to the columns `Technology` and `ws`. As an example, `clean_technology_string()` converts `151b Hydrogen Storage - LOHC` to `hydrogen storage - lohc`. - -Function `extract_year()` extracts the first sequence of digits from the `year` column and converts it to an integer. The column contains in fact entries like `Uncertainty (2050)` (str) which are converted to `2050` (int). - -Function `clean_parameter_string()` removes leading hyphens, removes text inside square brackets (units/notes), collapses extra spaces and lower-cases the parameter name. It is applied to the `par` column. - -Function `standardize_units()` is applied to columns `par` and `unit`. It completes missing units based on parameter name (e.g., `energy storage capacity for one unit` is mapped to the unit `MWh`) via a parameter-to-unit map. Moreover, it replaces known incorrect unit strings as `⁰C` -> `C` or `m2` to `meter**2`. The unit substitutions are driven by the `pint` documentation available at this [link](https://github.com/hgrecco/pint/blob/master/pint/default_en.txt). - -Function `Commons.update_unit_with_currency_year(unit, priceyear)`, if present, appends `priceyear` information to currency units. This is because `technologydata` follows the currency pattern `\b(?P[A-Z]{3})_(?P\d{4})\b`, as for example `EUR_2021`. - -Function `format_val_number(value, num_decimals)` parses numeric formats including comma decimal separators and scientific notation variants (e.g., `Γ—10`) and converts them to float and rounds them to `num_decimals`. - -The parser also applies the following corrections and substitutions: - -- Convert `MEUR_2020` and `kEUR_2020`/`KEUR_2020` to `EUR_2020` and scale numeric `val` accordingly (Γ—1e6 or Γ—1e3). -- Specific unit fixes (example: `mol/s/m/MPa1/2` β†’ `mol/s/m/Pa` with value scaling). -- Certain `par` values (e.g., `energy storage capacity for one unit`, `tank volume of example`) are normalized to `capacity`. - -Function `clean_est_string()` normalizes the `est` column by casefolding it and by replacing `ctrl` with `control`. - -Function `filter_parameters(df, filter_flag)`, if `filter_flag` is true, keeps only an allowed set of parameters (e.g., `technical lifetime`, `fixed o&m`, `specific investment`, `variable o&m`, `charge efficiency`, `discharge efficiency`, `capacity`). Otherwise returns the full set. - -### Populate and export the source and technology collections - -Function `build_technology_collection()`: - -- if `store_source` is set, constructs a `Source` object for the DEA dataset, calls `ensure_in_wayback()` and writes `sources.json`; otherwise reads an existing `sources.json`. -- groups the cleaned DataFrame by `est`, `year`, `ws`, `Technology`. -- for each group, builds a dictionary of `Parameter` objects (each with `magnitude`, `units`, `sources`, `provenance`). -- creates a `Technology` object for each group, with `name` = `ws`, `detailed_technology` = `Technology`, `year`=`year`, `region` = `EU`, `case` = `est` and collects them into a `TechnologyCollection` object. -- writes the `TechnologyCollection` object to a `technologies.json`. -- if `--export_schema` is used, schema files produced during export are moved to the sub-folder `src/technologydata/parsers/schemas`. - -## Running the parser - -### Execution instructions - -From repository root: - -- Basic run: `python src/technologydata/parsers/dea_energy_storage/dea_energy_storage.py` -- Example with options: `--num_digits 3 --store_source --filter_params --export_schema` - -### Outputs - -The parser generates the following outputs: - -- `src/technologydata/parsers/dea_energy_storage/technologies.json`. -- `src/technologydata/parsers/dea_energy_storage/sources.json`. -- Optional schema files moved to `src/technologydata/parsers/schemas` when `--export_schema` is used. diff --git a/docs/examples/dea_storage_v10.md b/docs/examples/dea_storage_v10.md new file mode 100644 index 00000000..818ff07c --- /dev/null +++ b/docs/examples/dea_storage_v10.md @@ -0,0 +1,111 @@ +# Danish Energy Agency Parser Documentation + + + +## Overview + +!!! note + This example refers specifically to **version 10** (`v10`) of the DEA Energy Storage dataset. Details such as file names, sheet structure, and parser behaviour may differ for other versions. + +The Danish Energy Agency (DEA) data parser demonstrates a full data-cleaning and transformation pipeline for converting raw tabular data into the `technologydata` schema files `technologies.json` and `sources.json`. The parser is implemented in `src/technologydata/parsers/dea_energy_storage/`. + +## Dataset Description + +The original dataset is available at this [link](https://ens.dk/media/6589/download). A full description of the dataset is available at this [link](https://ens.dk/media/6588/download). The raw source file is included in the repository at `src/technologydata/parsers/raw/Technology_datasheet_for_energy_storage.xlsx`. + +The dataset is in Excel format, and it includes, under the data sheet `alldata_flat`, a flat table of technology parameters for a range of energy storage technologies. Columns include `Technology`, `ws`, `par` (parameter name), `val` (value), `unit`, `year`, `est` (case/estimate), `priceyear`, plus metadata columns such as `cat`, `ref`, `note`. Rows are individual parameter records (parameter value + unit + context) for technologies and estimation cases. + +## Parser description + +The parser is articulated in the following steps. + +### Read the raw data + +The script reads the raw data available at `src/technologydata/parsers/raw/Technology_datasheet_for_energy_storage.xlsx`, under sheet `alldata_flat`, in a `pandas` dataframe. It uses `pandas.read_excel(..., engine=calamine, dtype=str)`. All entries are handled as strings initially. + +### Data cleaning, validation and dealing with missing/null values + +The data cleaning and validation happens with the following steps. + +Function `_drop_invalid_rows(df)` validates whether required columns are present. It drops rows with missing/null or empty critical fields (`Technology`, `par`, `val`, `year`) and keeps rows where `year` contains a 4-digit year and `val` contains numeric characters and no comparator symbols (`<`, `>`, `≀`, `β‰₯`). + +Function `_clean_technology_string()` normalizes text fields by removing leading 3-digit numeric codes, trims whitespace and lower-cases the string for consistent matching. It is applied to the columns `Technology` and `ws`. As an example, `_clean_technology_string()` converts `151b Hydrogen Storage - LOHC` to `hydrogen storage - lohc`. + +Function `_extract_year()` extracts the first sequence of digits from the `year` column and converts it to an integer. The column contains in fact entries like `Uncertainty (2050)` (str) which are converted to `2050` (int). + +Function `_clean_parameter_string()` removes leading hyphens, removes text inside square brackets (units/notes), collapses extra spaces and lower-cases the parameter name. It is applied to the `par` column. + +Function `_standardize_units()` is applied to columns `par` and `unit`. It completes missing units based on parameter name (e.g., `energy storage capacity for one unit` is mapped to the unit `MWh`) via a parameter-to-unit map. Moreover, it replaces known incorrect unit strings as `⁰C` -> `C` or `m2` to `meter**2`. The unit substitutions are driven by the `pint` documentation available at this [link](https://github.com/hgrecco/pint/blob/master/pint/default_en.txt). + +Function `Commons.update_unit_with_currency_year(unit, priceyear)`, if present, appends `priceyear` information to currency units. This is because `technologydata` follows the currency pattern `\b(?P[A-Z]{3})_(?P\d{4})\b`, as for example `EUR_2021`. + +Function `_format_val_number(value, num_decimals)` parses numeric formats including comma decimal separators and scientific notation variants (e.g., `Γ—10`) and converts them to float and rounds them to `num_decimals`. + +The parser also applies the following corrections and substitutions: + +- Convert `MEUR_2020` and `kEUR_2020`/`KEUR_2020` to `EUR_2020` and scale numeric `val` accordingly (Γ—1e6 or Γ—1e3). +- Specific unit fixes (example: `mol/s/m/MPa1/2` β†’ `mol/s/m/Pa` with value scaling). +- Certain `par` values (e.g., `energy storage capacity for one unit`, `tank volume of example`) are normalized to `capacity`. + +Function `_clean_est_string()` normalizes the `est` column by casefolding it and by replacing `ctrl` with `control`. + +Function `_filter_parameters(df, filter_flag)`, if `filter_flag` is true, keeps only an allowed set of parameters (e.g., `technical lifetime`, `fixed o&m`, `specific investment`, `variable o&m`, `charge efficiency`, `discharge efficiency`, `capacity`). Otherwise returns the full set. + +### Populate and export the source and technology collections + +Function `_build_technology_collection()`: + +- if `archive_source` is set, constructs a `Source` object for the DEA dataset, calls `ensure_in_wayback()` and writes `sources.json`; otherwise reads an existing `sources.json`. +- groups the cleaned DataFrame by `est`, `year`, `ws`, `Technology`. +- for each group, builds a dictionary of `Parameter` objects (each with `magnitude`, `units`, `sources`, `provenance`). +- creates a `Technology` object for each group, with `name` = `ws`, `detailed_technology` = `Technology`, `year`=`year`, `region` = `EU`, `case` = `est` and collects them into a `TechnologyCollection` object. +- writes the `TechnologyCollection` object to a `technologies.json`. +- if `export_schema` is used, schema files produced during export are moved to the sub-folder `src/technologydata/parsers/schemas`. + +## Running the parser + +### Execution instructions + +The parser is run using the `DataAccessor` class. You need to create an instance of `DataAccessor` with the desired `data_source` and `version`, and then call the `parse()` method. + +Here is an example of how to run the parser from a Python script: + +```python +from technologydata.parsers.data_accessor import DataAccessor + +# Create an accessor for the version to be parsed +parser_accessor = DataAccessor( + data_source="dea_energy_storage", + version="v10" +) + +# Run the parser with desired options +parser_accessor.parse( + input_file_name="Technology_datasheet_for_energy_storage.xlsx", + num_digits=3, + archive_source=True, + filter_params=True, + export_schema=True, +) +``` + +The `parse` method accepts the following arguments: +- `input_file_name` (str): The name of the raw data file located in `src/technologydata/parsers/raw/`. +- `num_digits` (int, default 4): Number of decimals for rounding numeric values. +- `archive_source` (bool, default False): Whether to store the source on the Wayback Machine. +- `filter_params` (bool, default False): Whether to filter parameters. +- `export_schema` (bool, default False): Whether to export Pydantic schemas. + +### Outputs + +The parser generates the following outputs inside `src/technologydata/parsers/dea_energy_storage/v10/`: + +- `technologies.json` +- `sources.json` + +If `export_schema` is set to `True`, the Pydantic schema files are generated and moved to `src/technologydata/parsers/schemas/`. diff --git a/docs/examples/manual_input_usa.md b/docs/examples/manual_input_usa_v0134.md similarity index 58% rename from docs/examples/manual_input_usa.md rename to docs/examples/manual_input_usa_v0134.md index 83e75263..abfa1351 100644 --- a/docs/examples/manual_input_usa.md +++ b/docs/examples/manual_input_usa_v0134.md @@ -1,8 +1,18 @@ # Manual Input USA Parser Documentation + + ## Overview -The Manual Input USA data parser `manual_input_usa.py` demonstrates a data-cleaning and transformation pipeline for converting manually curated, USA-specific tabular data into the `technologydata` schema files `technologies.json` and `sources.json`. The parser is implemented in `src/technologydata/parsers/manual_input_usa/manual_input_usa.py`. +!!! note + This example refers specifically to **version 0.13.4** (`v0134`) of the Manual Input USA dataset. + +The Manual Input USA data parser demonstrates a data-cleaning and transformation pipeline for converting manually curated, USA-specific tabular data into the `technologydata` schema files `technologies.json` and `sources.json`. The parser is implemented in `src/technologydata/parsers/manual_input_usa/`. ## Dataset Description @@ -14,13 +24,6 @@ The dataset is in CSV format and includes a flat table of technology parameters The parser is articulated in the following steps. -### Command line argument parsing - -Function `CommonsParser.parse_input_arguments()` defines and parses the command-line arguments: - -- `--num_digits` (int, default 4) β€” number of decimals used when rounding numeric values. The default value is 4. -- `--store_source` (boolean flag) β€” whether to store the source on the Wayback Machine. The default value is `false`. - ### Read the raw data The script reads the raw data available at `src/technologydata/parsers/raw/manual_input_usa.csv` in a `pandas` dataframe. It uses `pandas.read_csv(..., dtype=str, na_values="None")`. All entries are handled as strings initially except for the `value` column which is converted to float. @@ -29,7 +32,7 @@ The script reads the raw data available at `src/technologydata/parsers/raw/manua The data cleaning and validation happens with the following steps. -Function `extract_units_carriers_heating_value()` extracts standardized units, carriers, and heating values from input unit strings. This function maps complex unit representations to simplified unit, carrier, and heating value combinations using a predefined dictionary of special patterns. Examples include: +Function `_extract_units_carriers_heating_value()` extracts standardized units, carriers, and heating values from input unit strings. This function maps complex unit representations to simplified unit, carrier, and heating value combinations using a predefined dictionary of special patterns. Examples include: - `USD_2022/MW_FT` β†’ unit: `USD_2022/MW`, carrier: `1/FT`, heating_value: `1/LHV` - `MWh_H2/MWh_FT` β†’ unit: `MWh/MWh`, carrier: `H2/FT`, heating_value: `LHV` @@ -50,9 +53,9 @@ Function `Commons.update_unit_with_currency_year(unit, currency_year)` appends ` ### Populate and export the source and technology collections -Function `build_technology_collection()`: +Function `_build_technology_collection()`: -- if `store_source` is set, constructs a `Source` object for the manual input USA dataset, calls `ensure_in_wayback()` and writes `sources.json`; otherwise reads an existing `sources.json`. +- if `archive_source` is set, constructs a `Source` object for the manual input USA dataset, calls `ensure_in_wayback()` and writes `sources.json`; otherwise reads an existing `sources.json`. - groups the cleaned DataFrame by `scenario`, `year`, `technology`. - for each group, builds a dictionary of `Parameter` objects (each with `magnitude`, `sources`, and optionally `carrier`, `heating_value`, `units`, `note`). - captures the `financial_case` value from rows within each group to combine with `scenario`. @@ -64,15 +67,40 @@ Function `build_technology_collection()`: ### Execution instructions -From repository root: +The parser is run using the `DataAccessor` class. You need to create an instance of `DataAccessor` with the desired `data_source` and `version`, and then call the `parse()` method. + +Here is an example of how to run the parser from a Python script: + +```python +from technologydata.parsers.data_accessor import DataAccessor -- Basic run: `python src/technologydata/parsers/manual_input_usa/manual_input_usa.py` -- Example with options: `--num_digits 3 --store_source` +# Create an accessor for the version to be parsed +parser_accessor = DataAccessor( + data_source="manual_input_usa", + version="v0.13.4" +) + +# Run the parser with desired options +parser_accessor.parse( + input_file_name="manual_input_usa.csv", + num_digits=3, + archive_source=True, + export_schema=True, +) +``` + +The `parse` method accepts the following arguments: +- `input_file_name` (str): The name of the raw data file located in `src/technologydata/parsers/raw/`. +- `num_digits` (int, default 4): Number of decimals for rounding numeric values. +- `archive_source` (bool, default False): Whether to store the source on the Wayback Machine. +- `filter_params` (bool, default False): Whether to filter parameters (not used by this parser). +- `export_schema` (bool, default False): Whether to export Pydantic schemas. ### Outputs -The parser generates the following outputs: +The parser generates the following outputs inside `src/technologydata/parsers/manual_input_usa/v0.13.4/`: + +- `technologies.json` +- `sources.json` -- `src/technologydata/parsers/manual_input_usa/technologies.json`. -- `src/technologydata/parsers/manual_input_usa/sources.json`. -- Optional schema files moved to `src/technologydata/parsers/schemas` when `--export_schema` is used. +If `export_schema` is set to `True`, the Pydantic schema files are generated and moved to `src/technologydata/parsers/schemas/`. diff --git a/docs/user_guide/data_accessor.md b/docs/user_guide/data_accessor.md index 7532198c..0af0d876 100644 --- a/docs/user_guide/data_accessor.md +++ b/docs/user_guide/data_accessor.md @@ -9,7 +9,7 @@ SPDX-License-Identifier: MIT ## Overview -The `DataAccessor` class provides a standardized way to access and load technology datasets from versioned data sources. It simplifies the process of selecting a specific data source and version, automatically handling the resolution of file paths and loading the data into a `DataPackage` object. +The `DataAccessor` class provides a standardized way to access and load technology datasets from versioned data sources. It simplifies the process of selecting a specific data source and version, automatically handling the resolution of file paths and loading the data into a `DataPackage` object. It also provides an interface to run the parsers that generate this data. It is designed to work with a specific directory structure where datasets are organized by name and version. @@ -18,8 +18,9 @@ It is designed to work with a specific directory structure where datasets are or - **Data Source Selection**: Easily specify which dataset to load using the `DataSourceName` enumeration. - **Version Management**: Load a specific version of a dataset or automatically detect and use the latest available version. - **Standardized Loading**: Loads a `DataPackage` from a versioned folder, which is expected to contain `technologies.json` and optionally `sources.json`. -- **Error Handling**: Raises `FileNotFoundError` if the specified data source or version directories cannot be found. -- **Seamless Integration**: Returns a `DataPackage` object, ready for use with other components of the `technologydata` library. +- **Parsing Interface**: Provides a `parse()` method to run the appropriate parser for a given data source and version to generate the data files. +- **Error Handling**: Raises `FileNotFoundError` if the specified data source or version directories cannot be found, and `ValueError` for unsupported sources or versions. +- **Seamless Integration**: The `load()` method returns a `DataPackage` object, ready for use with other components of the `technologydata` library. ## Usage Examples @@ -38,40 +39,46 @@ accessor_v1 = DataAccessor( # Create an accessor that will use the latest version accessor_latest = DataAccessor( - data_source_name="dea_energy_storage" + data_source="dea_energy_storage" ) ``` -### Accessing Data +### Loading Data -Once the `DataAccessor` is instantiated, call the `access_data()` method to load the dataset. The method handles finding the correct directory and then calls `DataPackage.from_json()` on that directory. +Once the `DataAccessor` is instantiated, call the `load()` method to load the dataset. The method handles finding the correct directory and then calls `DataPackage.from_json()` on that directory. The directory structure is expected to be: `src/technologydata/parsers///`. -#### Loading a Specific Version - -If `data_version` was specified during instantiation, `access_data()` will look for that exact version. +The `load()` method will look for the exact version specified during instantiation. If the version is not provided or not found, it will raise a `ValueError` and inform you of the latest available version. ```python # Assuming the path .../parsers/manual_input_usa/v1.0.0/ exists -dp_v1 = accessor_v1.access_data() +dp_v1 = accessor_v1.load() # dp_v1 is now a DataPackage object containing the data from v1.0.0 print(type(dp_v1)) # ``` -#### Loading the Latest Version +### Parsing Raw Data -If `data_version` is not provided or not found, `access_data()` automatically identifies the latest version based on semantic versioning rules (e.g., `v2.1.0` is newer than `v2.0.0`, and `v10` is newer than `v2`). +The `parse()` method is used to execute the data processing pipeline for a specific data source and version. It takes the raw data file as input and generates the structured `technologies.json` and `sources.json` files. ```python -# Assuming .../parsers/dea_energy_storage/ contains version directories like 'v1', 'v2' -# The accessor will load data from the latest version found (e.g., 'v2') -dp_latest = accessor_latest.access_data() +from technologydata.parsers.data_accessor import DataAccessor -print(type(dp_latest)) -# +# Create an accessor for the version to be parsed +parser_accessor = DataAccessor( + data_source="dea_energy_storage", + version="v10" +) + +# Run the parser +parser_accessor.parse( + input_file_name="dea_energy_storage_v10.xlsx", + num_digits=2, + archive_source=True +) ``` ## API Reference @@ -82,4 +89,4 @@ Please refer to the [API documentation](../api/data_accessor.md) for detailed in - **Directory Structure**: The `DataAccessor` expects a specific directory structure within the project: `src/technologydata/parsers///`. It will not find data located elsewhere. - **Version Naming**: Version directories must be prefixed with a `v` and follow a pattern that can be parsed by `packaging.version` (e.g., `v1`, `v2.0`, `v1.0.1-alpha`). Directories that do not match this pattern will be ignored when searching for the latest version. -- **Target Data**: The class is designed to load a `DataPackage` from a folder. See the `DataPackage` documentation for more details on the expected contents of that folder (i.e., `technologies.json`). +- **Target Data**: The `load()` method is designed to load a `DataPackage` from a folder. See the [DataPackage](./datapackage.md) documentation for more details on the expected contents of that folder (i.e.,`technologies.json`). diff --git a/docs/user_guide/datapackage.md b/docs/user_guide/datapackage.md index c67e78d5..019c5616 100644 --- a/docs/user_guide/datapackage.md +++ b/docs/user_guide/datapackage.md @@ -13,6 +13,7 @@ The `DataPackage` class in `technologydata` provides a container for managing co ## Features +- **Name & Version**: Stores the dataset name (required) and version (optional) as first-class attributes. - **Technology Collection**: Stores a collection of `Technology` objects via the `TechnologyCollection` class. - **Source Collection**: Stores a collection of `Source` objects via the `SourceCollection` class. - **Batch Operations**: Supports batch export to JSON and CSV formats. @@ -23,13 +24,15 @@ The `DataPackage` class in `technologydata` provides a container for managing co ### Creating a DataPackage -You can create a `DataPackage` by instantiating it directly or by loading from JSON files. +You can create a `DataPackage` by instantiating it directly or by loading from JSON files. The `name` field is required; `version` is optional. ```python from technologydata import DataPackage, TechnologyCollection, SourceCollection # Create a DataPackage with existing collections dp = DataPackage( + name="dataset_name", + version="v10", technologies=TechnologyCollection(...), sources=SourceCollection(...), ) @@ -37,11 +40,16 @@ dp = DataPackage( ### Loading from JSON -To load a `DataPackage` from a folder containing `technologies.json` and (optionally) `sources.json`: +To load a `DataPackage` from a folder containing `technologies.json` and (optionally) `sources.json`, pass the dataset `name`, an optional `version`, and the path to the folder: ```python from technologydata import DataPackage -dp = DataPackage.from_json("path/to/data_package_folder") + +dp = DataPackage.from_json( + name="dataset_name", + version="v10", + path_to_folder="path/to/data_package_folder", +) ``` This will automatically extract sources from the technologies if not already present. @@ -55,6 +63,8 @@ from technologydata import DataPackage, TechnologyCollection, SourceCollection # Create a DataPackage with existing collections dp = DataPackage( + name="dataset_name", + version="v10", technologies=TechnologyCollection(...), sources=SourceCollection(...), ) @@ -70,6 +80,8 @@ from technologydata import DataPackage, TechnologyCollection, SourceCollection # Create a DataPackage with existing collections dp = DataPackage( + name="dataset_name", + version="v10", technologies=TechnologyCollection(...), sources=SourceCollection(...), ) @@ -90,6 +102,8 @@ from technologydata.technology_collection import TechnologyCollection # Create a DataPackage with existing collections dp = DataPackage( + name="dataset_name", + version="v10", technologies=TechnologyCollection(...), ) diff --git a/docs/user_guide/dea_energy_storage_parser.md b/docs/user_guide/dea_energy_storage_parser.md new file mode 100644 index 00000000..ff9482c3 --- /dev/null +++ b/docs/user_guide/dea_energy_storage_parser.md @@ -0,0 +1,80 @@ +# DEA Energy Storage Parser + +The `DeaEnergyStorageParser` is responsible for parsing data from the Danish Energy Agency (DEA) Energy Storage dataset. It is designed to handle different versions of the dataset, with a specific implementation for `v10`. + +## Main Parser: `DeaEnergyStorageParser` + +The main parser, `DeaEnergyStorageParser`, acts as a dispatcher that selects the appropriate version-specific parser based on the user's request. + +### Key Features: + +- **Version Dispatching**: Dynamically selects the correct parser for a given dataset version (e.g., `v10`). +- **Supported Versions**: Provides a method to get a list of all supported dataset versions. + +### Usage: + +While it is possible to use the parser directly, the recommended way to access the data is through the `DataAccessor` class, which provides a higher-level interface and handles the parsing process internally. See the [Data Accessor](./data_accessor.md) documentation for more details. + +If you need to use the parser directly, you can instantiate `DeaEnergyStorageParser` and call the `parse` method with the desired version and other parameters. + +```python +from technologydata.parsers.dea_energy_storage import DeaEnergyStorageParser +import pathlib + +# Instantiate the main parser +dea_parser = DeaEnergyStorageParser() + +# Define parameters +version = "v10" +input_file = pathlib.Path("path/to/your/data.xlsx") +num_digits = 3 +archive_source = False +filter_params = True +export_schema = False + +# Parse the data +dea_parser.parse( + version=version, + input_path=input_file, + num_digits=num_digits, + archive_source=archive_source, + filter_params=filter_params, + export_schema=export_schema, +) +``` + +## Version-Specific Parser: `DeaEnergyStorageV10Parser` + +The `DeaEnergyStorageV10Parser` is a concrete implementation that handles version 10 of the DEA Energy Storage dataset. It inherits from `ParserBase` and contains the logic for reading, cleaning, and transforming the raw data. + +### Key Responsibilities: + +- **Data Loading**: Reads data from the specified Excel file (`alldata_flat` sheet). +- **Data Cleaning**: + - Removes invalid or incomplete rows. + - Cleans and standardizes technology names, parameters, and units. + - Extracts and formats year values. +- **Data Transformation**: + - Converts currency units (e.g., `MEUR_2020` to `EUR_2020`) and adjusts values accordingly. + - Standardizes parameter names (e.g., maps `energy storage capacity for one unit` to `capacity`). +- **Object Creation**: Builds a `TechnologyCollection` from the processed data. +- **Output Generation**: Exports the final `TechnologyCollection` and `SourceCollection` to JSON files. + +### `parse` Method + +The `parse` method orchestrates the entire parsing process for the `v10` dataset. + +**Parameters:** + +- `input_path` (`pathlib.Path`): Path to the raw input Excel file. +- `num_digits` (`int`): Number of significant digits for rounding numerical values. +- `archive_source` (`bool`): If `True`, archives the data source on the Wayback Machine. +- `**kwargs`: + - `filter_params` (`bool`): If `True`, filters parameters to a predefined allowed set. + - `export_schema` (`bool`): If `True`, exports the Pydantic schema for the data models. + +The processed data is saved to `technologies.json` and `sources.json` in the `src/technologydata/parsers/dea_energy_storage/v10/` directory. + +## API Reference + +Please refer to the [API documentation](../api/dea_energy_storage_parser.md) for detailed information on the class methods and attributes. diff --git a/docs/user_guide/manual_input_usa_parser.md b/docs/user_guide/manual_input_usa_parser.md new file mode 100644 index 00000000..af924820 --- /dev/null +++ b/docs/user_guide/manual_input_usa_parser.md @@ -0,0 +1,78 @@ +# Manual Input USA Parser + +The `ManualInputUsaParser` is responsible for parsing data from the `manual_input_usa.csv` dataset. It is designed to handle different versions of the dataset, with a specific implementation for `v0.13.4`. + +## Main Parser: `ManualInputUsaParser` + +The main parser, `ManualInputUsaParser`, acts as a dispatcher that selects the appropriate version-specific parser based on the user's request. + +### Key Features: + +- **Version Dispatching**: Dynamically selects the correct parser for a given dataset version (e.g., `v0.13.4`). +- **Supported Versions**: Provides a method to get a list of all supported dataset versions. + +### Usage: + +While it is possible to use the parser directly, the recommended way to access the data is through the `DataAccessor` class, which provides a higher-level interface and handles the parsing process internally. See the [Data Accessor](./data_accessor.md) documentation for more details. + +If you need to use the parser directly, you can instantiate `ManualInputUsaParser` and call the `parse` method with the desired version and other parameters. + +```python +from technologydata.parsers.manual_input_usa import ManualInputUsaParser +import pathlib + +# Instantiate the main parser +manual_input_parser = ManualInputUsaParser() + +# Define parameters +version = "v0.13.4" +input_file = pathlib.Path("path/to/your/manual_input_usa.csv") +num_digits = 3 +archive_source = False +filter_params = True +export_schema = False + +# Parse the data +manual_input_parser.parse( + version=version, + input_path=input_file, + num_digits=num_digits, + archive_source=archive_source, + filter_params=filter_params, + export_schema=export_schema, +) +``` + +## Version-Specific Parser: `ManualInputUSAV0134Parser` + +The `ManualInputUSAV0134Parser` is a concrete implementation that handles version `v0.13.4` of the `manual_input_usa.csv` dataset. It inherits from `ParserBase` and contains the logic for reading, cleaning, and transforming the raw data. + +### Key Responsibilities: + +- **Data Loading**: Reads data from the specified CSV file. +- **Data Cleaning**: + - Handles missing values in the `scenario` column. + - Converts `per unit` to `%` and adjusts the corresponding values. + - Includes `currency_year` in the `unit` column where applicable. +- **Data Transformation**: + - Extracts standardized units, carriers, and heating values from complex unit strings using the `_extract_units_carriers_heating_value` method. +- **Object Creation**: Builds a `TechnologyCollection` from the processed data using the `_build_technology_collection` method. +- **Output Generation**: Exports the final `TechnologyCollection` and `SourceCollection` to JSON files. + +### `parse` Method + +The `parse` method orchestrates the entire parsing process for the `v0.13.4` dataset. + +**Parameters:** + +- `input_path` (`pathlib.Path`): Path to the raw input CSV file. +- `num_digits` (`int`): Number of significant digits for rounding numerical values. +- `archive_source` (`bool`): If `True`, archives the data source on the Wayback Machine. +- `**kwargs`: + - `export_schema` (`bool`): If `True`, exports the Pydantic schema for the data models. + +The processed data is saved to `technologies.json` and `sources.json` in the `src/technologydata/parsers/manual_input_usa/v0.13.4/` directory. + +## API Reference + +Please refer to the [API documentation](../api/manual_input_usa_parser.md) for detailed information on the class methods and attributes. diff --git a/mkdocs.yaml b/mkdocs.yaml index 0455268c..04ddcbd1 100644 --- a/mkdocs.yaml +++ b/mkdocs.yaml @@ -28,12 +28,14 @@ nav: - Source Collection: user_guide/source_collection.md - Technology: user_guide/technology.md - Technology Collection: user_guide/technology_collection.md + - DEA Energy Storage Parser: user_guide/dea_energy_storage_parser.md + - Manual Input USA Parser: user_guide/manual_input_usa_parser.md - Data Accessor: user_guide/data_accessor.md - Use Cases: user_guide/design.md - Examples: - - Danish Energy Agency Parser: examples/dea_storage.md - - Manual Input USA Parser: examples/manual_input_usa.md + - Danish Energy Agency Parser (version 10): examples/dea_storage_v10.md + - Manual Input USA Parser (version 0.13.4): examples/manual_input_usa_v0134.md - API Reference: - Data Package: api/datapackage.md @@ -43,6 +45,8 @@ nav: - Technology: api/technology.md - Technology Collection: api/technology_collection.md - Data Accessor: api/data_accessor.md + - Dea Energy Storage Parser: api/dea_energy_storage_parser.md + - Manual Input USA Parser: api/manual_input_usa_parser.md - Utils: - Commons: - Common functionalities: api/commons/commons.md diff --git a/src/technologydata/datapackage.py b/src/technologydata/datapackage.py index 78e91593..1f7a431e 100644 --- a/src/technologydata/datapackage.py +++ b/src/technologydata/datapackage.py @@ -29,6 +29,10 @@ class DataPackage(pydantic.BaseModel): Attributes ---------- + name : str + The name of the dataset stored in the DataPackage object. + version : Optional[str] + The version of the dataset stored in the DataPackage object. technologies : Optional[TechnologyCollection] List of Technology objects. sources : Optional[SourceCollection] @@ -36,6 +40,18 @@ class DataPackage(pydantic.BaseModel): """ + name: Annotated[ + str, + pydantic.Field( + description="The name of the dataset stored in the DataPackage object." + ), + ] + version: Annotated[ + str | None, + pydantic.Field( + description="The version of the dataset stored in the DataPackage object." + ), + ] = None technologies: Annotated[ TechnologyCollection | None, pydantic.Field(description="List of Technology objects."), @@ -70,12 +86,18 @@ def get_source_collection(self) -> None: self.sources = SourceCollection(sources=list(sources_set)) @classmethod - def from_json(cls, path_to_folder: pathlib.Path | str) -> Self: + def from_json( + cls, name: str, version: str | None, path_to_folder: pathlib.Path | str + ) -> Self: """ Load a DataPackage from a JSON file. Parameters ---------- + name : str + The name of the dataset stored in the DataPackage object. + version: Optional[str] + The version of the dataset stored in the DataPackage object. path_to_folder : pathlib.Path or str Path to the data package folder. @@ -91,6 +113,8 @@ def from_json(cls, path_to_folder: pathlib.Path | str) -> Self: # Create DataPackage instance data_package = cls( + name=name, + version=version, path=path_to_folder, technologies=technologies, ) diff --git a/src/technologydata/parsers/commons.py b/src/technologydata/parsers/commons.py index b820b64e..a154d11d 100644 --- a/src/technologydata/parsers/commons.py +++ b/src/technologydata/parsers/commons.py @@ -104,9 +104,20 @@ def parse_input_arguments( help="Number of significant digits to round the values.", ), ArgumentConfig( - name="--store_source", + name="--archive_source", action="store_true", - help="Store_source, store the source object on the wayback machine. Default: false", + help="Archive_source, store the source object on the wayback machine. Default: false", + ), + ArgumentConfig( + name="--version", + arg_type=str, + help="Version of the dataset to parse.", + ), + ArgumentConfig( + name="--input_file_name", + arg_type=str, + help="Name of the dataset file to parse. Default: None", + required=True, ), ] diff --git a/src/technologydata/parsers/data_accessor.py b/src/technologydata/parsers/data_accessor.py index 8d01b811..7d651897 100644 --- a/src/technologydata/parsers/data_accessor.py +++ b/src/technologydata/parsers/data_accessor.py @@ -7,6 +7,7 @@ import logging import pathlib import re +import sys from enum import Enum from typing import Annotated @@ -15,6 +16,8 @@ from pydantic import field_validator from technologydata import DataPackage +from technologydata.parsers.dea_energy_storage import DeaEnergyStorageParser +from technologydata.parsers.manual_input_usa import ManualInputUsaParser path_cwd = pathlib.Path.cwd() @@ -36,33 +39,26 @@ class DataAccessor(pydantic.BaseModel): datasets from predefined data sources. It can either load a specific version or automatically determine and load the latest available version. - Parameters + Attributes ---------- - data_source_name : str + data_source : str The name of the data source to access, as defined in the `DataSourceName` enumeration. - data_version : str, optional + version : str, optional The specific version string of the data to load (e.g., "v1.0.0"). If not provided, the latest version will be automatically determined and used. Default is None. - Attributes - ---------- - data_source_name : str - The name of the data source. - data_version : str or None - The version of the data source. - """ - data_source_name: Annotated[ + data_source: Annotated[ str, pydantic.Field(description="The name of the data source.") ] - data_version: Annotated[ + version: Annotated[ str | None, pydantic.Field(description="The version of the data source.") ] = None - @field_validator("data_source_name", mode="before") + @field_validator("data_source", mode="before") @classmethod def _validate_data_source_name(cls, v: str) -> DataSourceName: # Validate if the given string is a valid DataSourceName @@ -121,23 +117,106 @@ def load(self) -> DataPackage: """ source_path = pathlib.Path( - path_cwd, "src", "technologydata", "parsers", self.data_source_name + path_cwd, "src", "technologydata", "parsers", self.data_source ) if not source_path.is_dir(): raise FileNotFoundError(f"Data source directory not found: {source_path}") source_path_list = [p.name for p in source_path.iterdir() if p.is_dir()] - if self.data_version and self.data_version in source_path_list: - version = self.data_version + if self.version and self.version in source_path_list: + version = self.version logger.info( - f"Data source directory corresponding to version {self.data_version} found." + f"Data source directory corresponding to version {self.version} found." ) else: version = self.get_latest_version_string(list(source_path.iterdir())) raise ValueError( - f"Data source version '{self.data_version}' not found. The latest available version is {version}." + f"Data source version '{self.version}' not found. The latest available version is {version}." ) data_path = pathlib.Path(source_path, version) - return DataPackage.from_json(data_path) + dp = DataPackage.from_json(self.data_source, self.version, data_path) + return dp + + def parse( + self, + input_file_name: str, + num_digits: int = 4, + archive_source: bool = False, + filter_params: bool = False, + export_schema: bool = False, + ) -> None: + """ + Run the parser for the specified data source and version. + + This method locates the appropriate parser for the given data source + and version, and executes it to generate the technology data package. + + Parameters + ---------- + input_file_name : str + The name of the input file in the 'raw' directory. + num_digits : int, optional + Number of significant digits to round the values. Default is 4. + archive_source : bool, optional + Store the source object on the Wayback Machine. Default is False. + filter_params : bool, optional + Filter the parameters stored to technologies.json. Default is False. + export_schema : bool, optional + Export the Source/TechnologyCollection schemas. Default is False. + + Raises + ------ + ValueError + If the specified data source or version is not supported. + FileNotFoundError + If the required input data file is not found. + + """ + parser: DeaEnergyStorageParser | ManualInputUsaParser + + if self.data_source == DataSourceName.DEA_ENERGY_STORAGE: + parser = DeaEnergyStorageParser() + elif self.data_source == DataSourceName.MANUAL_INPUT_USA: + parser = ManualInputUsaParser() + else: + raise ValueError( + f"Unsupported data source: {self.data_source}. " + f"Supported data sources are: {[e for e in DataSourceName]}" + ) + + # Read the raw data + input_data_path = pathlib.Path( + path_cwd, + "src", + "technologydata", + "parsers", + "raw", + input_file_name, + ) + + logger.info(f"Input data path set to: {input_data_path}") + + if self.version not in parser.get_supported_versions(): + logging.error( + f"Version '{self.version}' is not supported. " + f"Supported versions: {parser.get_supported_versions()}" + ) + sys.exit(1) + + try: + parser.parse( + version=self.version, + input_path=input_data_path, + num_digits=num_digits, + archive_source=archive_source, + filter_params=filter_params, + export_schema=export_schema, + ) + + logging.info(f"Successfully generated files for version {self.version} ") + + except (ValueError, FileNotFoundError, KeyError) as e: + logging.error(f"An error occurred during parsing: {e}") + sys.exit(1) diff --git a/src/technologydata/parsers/data_parser_base.py b/src/technologydata/parsers/data_parser_base.py new file mode 100644 index 00000000..59fb5ec1 --- /dev/null +++ b/src/technologydata/parsers/data_parser_base.py @@ -0,0 +1,41 @@ +# SPDX-FileCopyrightText: technologydata contributors +# +# SPDX-License-Identifier: MIT + +"""Abstract base class for a specific version of the data parser.""" + +import abc +import pathlib +from typing import Any + + +class ParserBase(abc.ABC): + """Abstract base class for a specific version of the data parser.""" + + @abc.abstractmethod + def parse( + self, + input_path: pathlib.Path, + num_digits: int, + archive_source: bool, + **kwargs: Any, + ) -> None: + """ + Parse a specific version of a dataset. + + Parameters + ---------- + input_path : pathlib.Path + Path to the raw input data file. + num_digits : int + Number of significant digits to round the values. + archive_source : bool + If True, archive the source object on the Wayback Machine. + **kwargs : Any + filter_params : bool, optional + If True, filter the parameters stored in the output. + export_schema : bool, optional + If True, export the Pydantic schema for the data models. + + """ + raise NotImplementedError diff --git a/src/technologydata/parsers/dea_energy_storage/__init__.py b/src/technologydata/parsers/dea_energy_storage/__init__.py index 1ef3068c..49ce63ea 100644 --- a/src/technologydata/parsers/dea_energy_storage/__init__.py +++ b/src/technologydata/parsers/dea_energy_storage/__init__.py @@ -3,3 +3,90 @@ # SPDX-License-Identifier: MIT """Provide a parser for the DEA data storage dataset.""" + +import logging +import pathlib + +from technologydata.parsers.data_parser_base import ParserBase +from technologydata.parsers.dea_energy_storage.parser_v10 import ( + DeaEnergyStorageV10Parser, +) + + +class DeaEnergyStorageParser: + """ + Main parser for the DEA Energy Storage dataset. + + Dispatches to version-specific parser implementations. + """ + + def __init__(self) -> None: + """Initialize the parser and maps versions to parser classes.""" + self._parsers: dict[str, type[ParserBase]] = { + "v10": DeaEnergyStorageV10Parser, + # "v11": DeaEnergyStorageV11Parser, # Add new versions here + } + + def get_supported_versions(self) -> list[str]: + """Return a list of supported dataset versions.""" + return list(self._parsers.keys()) + + def parse( + self, + version: str, + input_path: pathlib.Path, + num_digits: int, + archive_source: bool, + filter_params: bool, + export_schema: bool, + ) -> None: + """ + Parse the specified version of the DEA Energy Storage dataset. + + This method selects the appropriate parser for the given version and + delegates the parsing task to it. + + Parameters + ---------- + version : str + The version of the dataset to parse (e.g., 'v10'). + input_path : pathlib.Path + Path to the raw input data file. + num_digits : int, optional + Number of significant digits to round the values, by default 4. + archive_source : bool, optional + If True, archives the source object on the Wayback Machine, by default False. + filter_params : bool, optional + If True, filters the parameters stored in the output, by default False. + export_schema : bool, optional + If True, exports the Pydantic schema for the data models, by default False. + + Raises + ------ + ValueError + If the specified version is not supported. + + """ + if version not in self._parsers: + raise ValueError( + f"Unsupported version: {version}. " + f"Supported versions are: {', '.join(self.get_supported_versions())}" + ) + + parser_class = self._parsers[version] + parser_instance = parser_class() + + logging.info( + f"Parsing DEA Energy Storage dataset version {version} using {parser_class.__name__}" + ) + return parser_instance.parse( + input_path=input_path, + num_digits=num_digits, + archive_source=archive_source, + filter_params=filter_params, + export_schema=export_schema, + ) + + +# Make the main parser class available for import from the module +__all__ = ["DeaEnergyStorageParser", "DeaEnergyStorageV10Parser"] diff --git a/src/technologydata/parsers/dea_energy_storage/dea_energy_storage.py b/src/technologydata/parsers/dea_energy_storage/dea_energy_storage.py deleted file mode 100644 index 2a3be692..00000000 --- a/src/technologydata/parsers/dea_energy_storage/dea_energy_storage.py +++ /dev/null @@ -1,658 +0,0 @@ -# SPDX-FileCopyrightText: technologydata contributors -# -# SPDX-License-Identifier: MIT - -""" -Data parser for the DEA energy storage data set. - -How to run: - From the repository root, execute: - python src/technologydata/parsers/dea_energy_storage/dea_energy_storage.py - -Configuration options (command-line arguments): - --num_digits Number of significant digits to round the values. Default: 4 - --store_source Store the source object on the Wayback Machine. Default: False - --filter_params Filter the parameters stored to technologies.json. Default: False - --export_schema Export the Source/TechnologyCollection schemas. Default: False - -Example: - python src/technologydata/parsers/dea_energy_storage/dea_energy_storage.py --num_digits 3 --store_source --filter_params - -""" - -import logging -import pathlib -import re -import typing - -import pandas as pd -import pydantic - -from technologydata import ( - Commons, - Parameter, - Source, - SourceCollection, - Technology, - TechnologyCollection, -) -from technologydata.parsers.commons import ArgumentConfig, CommonsParser - -path_cwd = pathlib.Path.cwd() - -logger = logging.getLogger(__name__) - - -def drop_invalid_rows(dataframe: pd.DataFrame) -> pd.DataFrame: - """ - Clean and filter a DataFrame by removing rows with invalid or incomplete data. - - This function performs multiple validation checks to ensure data quality: - - Removes rows with None or NaN values in critical columns - - Removes rows with empty or whitespace-only strings - - Filters rows based on specific data integrity criteria - - Discards rows where 'val' column contains comparator symbols or non-numeric values - - Parameters - ---------- - dataframe : pd.DataFrame - The input DataFrame to be cleaned and validated. - - Returns - ------- - pd.DataFrame - A new DataFrame with invalid rows removed, maintaining data integrity. - - Notes - ----- - Validation criteria include: - - Non-empty 'Technology', 'par', and 'val' columns - - 'year' column containing a valid 4-digit year - - 'val' column containing only numeric values (no comparator symbols) - - """ - # Create a copy to avoid modifying the original DataFrame - df_cleaned = dataframe.copy() - - # Validate column existence - required_columns = ["Technology", "par", "val", "year"] - missing_columns = [col for col in required_columns if col not in df_cleaned.columns] - if missing_columns: - raise ValueError(f"Missing required columns: {missing_columns}") - - # Remove rows with None or NaN values in critical columns - df_cleaned = df_cleaned.dropna(subset=required_columns) - - # Remove rows with empty or whitespace-only strings - for column in required_columns: - df_cleaned = df_cleaned[df_cleaned[column].astype(str).str.strip() != ""] - - # Filter rows with valid year (4 consecutive digits) - df_cleaned = df_cleaned[ - df_cleaned["year"].astype(str).str.contains(r"\d{4}", regex=True) - ] - - # Remove rows with comparator symbols or without digits in 'val' column - df_cleaned = df_cleaned[ - (~df_cleaned["val"].astype(str).str.contains(r"[<>≀β‰₯]", regex=True)) - & (df_cleaned["val"].astype(str).str.contains(r"\d", regex=True)) - ] - - return df_cleaned - - -@pydantic.validate_call -def clean_parameter_string(text_string: str) -> str: - """ - Remove any string between [] or [), any leading hyphen or double quotes from the input string. Lower-case all. - - Parameters - ---------- - text_string : str - input string to be cleaned. - - Returns - ------- - str - cleaned string with [] and [) and leading hyphen or double quotes removed. - - Examples - -------- - >>> clean_parameter_string("- Charge efficiency [%]") - charge efficiency - >>> clean_parameter_string("Energy storage capacity for one unit [MWh)") - energy storage capacity for one unit - - """ - # Remove leading hyphen - text_string = text_string.lstrip("-") - - # Remove content inside square brackets including the brackets themselves - result = re.sub(r"\[.*?\]", "", text_string) - - # Remove content inside square bracket and parenthesis including the brackets/parenthesis themselves - result = re.sub(r"\[.*?\)", "", result) - - # Remove extra spaces resulting from the removal and set all to lower case - result = re.sub(r"\s+", " ", result).strip().casefold() - - return result - - -@pydantic.validate_call -def clean_technology_string(tech_str: str) -> str: - """ - Clean a technology string by removing numeric patterns and standardizing case. - - This function pre-processes technology-related strings by: - - Removing three-digit numeric patterns (with optional letter) - - Stripping leading and trailing whitespace - - Converting to lowercase for case-insensitive comparison - - Parameters - ---------- - tech_str : str - Input technology string to be cleaned. - - Returns - ------- - str - Cleaned technology string with: - - Numeric patterns (like '123' or '456a') removed - - Whitespace stripped - - Converted to lowercase - - Raises - ------ - Exception - If string conversion or processing fails, logs the error and returns the original input. - - Examples - -------- - >>> clean_technology_string("143a Rock-based Carnot battery") - rock-based carnot battery - >>> clean_technology_string("Pit Thermal Energy Storage [PTES]") - pit thermal energy storage [ptes] - - """ - try: - # Remove three-digit patterns or three digits followed by a letter - return re.sub(r"^(\d{3}[a-zA-Z]?)", "", tech_str.strip()).strip().casefold() - except Exception as e: - logger.error(f"Error cleaning technology '{tech_str}': {e}") - return tech_str - - -@pydantic.validate_call -def format_val_number(input_value: str, num_decimals: int) -> float | None | typing.Any: - """ - Parse various number formats into a float value. - - Parameters - ---------- - input_value : str - The input number in different formats, such as: - - Scientific notation with "x10^": e.g., "2.84x10^23" - - Numbers with commas as decimal separators: e.g., "1,1" - num_decimals : int - Number of decimals - - Returns - ------- - float - The parsed numerical value as a float. - - Raises - ------ - ValueError - If the input cannot be parsed into a float. - - Examples - -------- - >>> format_val_number("1,1") - 1.1 - >>> format_val_numer("2.84Γ—10-27") - 2.84e-27 - - """ - s = str(input_value).strip() - - # Handle scientific notation like "2.84x10^23" - match = re.match(r"([+-]?\d*\.?\d+)Γ—10([+-]?\d+)", s) - if match: - base, exponent = match.groups() - return round(float(base), num_decimals) * (10 ** int(exponent)) - - # Replace comma with dot for decimal numbers - s = s.replace(",", ".") - try: - return round(float(s), num_decimals) - except ValueError: - raise ValueError(f"Cannot parse number from input: {input_value}") - - -@pydantic.validate_call -def extract_year(year_str: str) -> int | None: - """ - Extract the first year (integer) from a given input. - - Parameters - ---------- - year_str : str - Input value containing a potential year. - - Returns - ------- - int, None - Extracted first year. - - Examples - -------- - >>> extract_year('uncertainty (2050)') - 2050 - - """ - # Extract digits - digits = re.findall(r"\d+", year_str) - - # Convert to integer - return int(digits[0]) if digits else None - - -@pydantic.validate_call -def clean_est_string(est_str: str) -> str: - """ - Casefold the 'est' string, trim whitespace and replace `ctrl` with `control`. - - Parameters - ---------- - est_str : str - The input 'est' string to be cleaned. - - Returns - ------- - str - The cleaned 'est' string. - - Examples - -------- - >>> clean_est_string("Lower") - lower - >>> clean_est_string("ctrl") - control - - """ - if est_str == "ctrl": - cleaned_str = "control" - else: - cleaned_str = est_str.casefold().strip() - return cleaned_str - - -def standardize_units(series: pd.Series) -> pd.Series: - """ - Complete missing units based on parameter names and replace incorrect units. - - Parameters - ---------- - series : pandas.Series - A series containing two elements: [par, unit] - - Returns - ------- - pandas.Series - Updated series with completed and corrected unit. - - Notes - ----- - The following substitutions are driven by the `pint` documentation available - at https://github.com/hgrecco/pint/blob/master/pint/default_en.txt: - - "pct.": "percent", - - "m2": "meter**2", - - "m3": "meter**3", - - """ - par, unit = series - - # Mapping of parameters to their default units - param_unit_map = { - "energy storage capacity for one unit": "MWh", - "typical temperature difference in storage": "K", - "fixed o&m": "pct./year", - "lifetime in total number of cycles": "cycles", - "cycle life": "cycles", - } - - # Mapping of incorrect units to correct units - unit_corrections = { - "pct./period": "percent", - "⁰C": "C", - "Β°C": "C", - "pct./30sec": "pct.", - "m2": "meter**2", - "m3": "meter**3", - "MWhoutput": "MWh", - "hot/cold,K": "K", - "pct.investement": "percent", - "pct.investment": "percent", - "tank/": "", - "pct.": "percent", - } - - # Complete missing or empty units - if (not isinstance(unit, str)) or (unit.strip() == ""): - unit = param_unit_map.get(par, unit) - - # Replace wrong units - for incorrect, correct in unit_corrections.items(): - if incorrect == unit or incorrect in unit: - unit = unit.replace(incorrect, correct) - - return pd.Series([par, unit]) - - -def filter_parameters(dataframe: pd.DataFrame, filter_flag: bool) -> pd.DataFrame: - """ - Filter rows of a DataFrame by allowed technology parameters. - - Parameters - ---------- - dataframe : pandas.DataFrame - Input DataFrame containing at least a "Technology" column. - filter_flag : Boolean - If true, filter parameter `par` column - - Returns - ------- - pandas.DataFrame - The filtered DataFrame. The returned - DataFrame contains only rows where the `par` column is one of: - "technical lifetime", "fixed o&m", "specific investment", or - "variable o&m". - - """ - allowed_set = { - "technical lifetime", - "fixed o&m", - "specific investment", - "variable o&m", - "charge efficiency", - "discharge efficiency", - "capacity", - } - print("filter_flag", filter_flag) - if filter_flag: - # Filter the DataFrame based on the allowed set - df_filtered = dataframe[dataframe["par"].isin(allowed_set)].reset_index( - drop=True - ) - logger.info( - f"technologies.json contains a subset of the allowed parameters: {allowed_set}." - ) - else: - # Return the original DataFrame if filter_flag is False - df_filtered = dataframe - logger.info("All parameters are outputted to technologies.json") - return df_filtered - - -def build_technology_collection( - dataframe: pd.DataFrame, - sources_path: pathlib.Path, - store_source: bool = False, - output_schema: bool = False, -) -> TechnologyCollection: - """ - Compute a collection of technologies from a grouped DataFrame. - - Processes input DataFrame by grouping technologies and extracting their parameters, - creating Technology instances for each unique group. - - Parameters - ---------- - dataframe : pandas.DataFrame - Input DataFrame containing technology parameters. - Expected columns include: - - 'est': Estimation or case identifier - - 'year': Year of the technology - - 'ws': Workspace or technology identifier - - 'Technology': Detailed technology name - - 'par': Parameter name - - 'val': Parameter value - - 'unit': Parameter units - sources_path: pathlib.Path - Output path for storing the SourceCollection object - store_source: Optional[bool] - Flag to decide whether to store the source object on the Wayback Machine. Default False. - output_schema : Optional[bool] - Flag to decide whether to export the source collection schema. Default False. - - Returns - ------- - TechnologyCollection - A collection of Technology instances, each representing a unique - technology group with its associated parameters. - - Notes - ----- - - The function groups the DataFrame by 'est', 'year', 'ws', and 'Technology' - - For each group, it creates a dictionary of Parameters - - Each Technology is instantiated with group-specific attributes - - """ - list_techs = [] - - if store_source: - source = Source( - title="Technology Data for Energy storage (May 2025)", - authors="Danish Energy Agency", - url="https://ens.dk/media/6589/download", - url_date="2025-10-08 09:24:00", - ) - source.ensure_in_wayback() - sources = SourceCollection(sources=[source]) - sources.to_json(sources_path, output_schema=output_schema) - else: - sources = SourceCollection.from_json(sources_path) - - for (est, year, ws, technology_name), group in dataframe.groupby( - ["est", "year", "ws", "Technology"] - ): - parameters = {} - for _, row in group.iterrows(): - parameters[row["par"]] = Parameter( - magnitude=row["val"], - units=row["unit"], - sources=sources, - provenance="Parsed from Excel file", - ) - list_techs.append( - Technology( - name=ws, - region="EU", - year=year, - parameters=parameters, - case=est, - detailed_technology=technology_name, - ) - ) - return TechnologyCollection(technologies=list_techs) - - -if __name__ == "__main__": - # Parse input arguments - - additional_input_args = [ - ArgumentConfig( - name="--filter_params", - action="store_true", - help="filter_params. Filter the parameters stored to technologies.json. Default: false", - ), - ArgumentConfig( - name="--export_schema", - action="store_true", - help="export_schema. Export the Source/TechnologyCollection schemas. Default: false", - ), - ] - - input_args = CommonsParser.parse_input_arguments( - additional_arguments=additional_input_args, - description="Parse the DEA technology storage dataset", - ) - logger.info("Command line arguments parsed.") - - # Read the raw data - dea_energy_storage_file_path = pathlib.Path( - path_cwd, - "src", - "technologydata", - "parsers", - "raw", - "Technology_datasheet_for_energy_storage.xlsx", - ) - - dea_energy_storage_df = pd.read_excel( - dea_energy_storage_file_path, - sheet_name="alldata_flat", - engine="calamine", - dtype=str, - ) - logger.info("Input file read-in.") - - # Drop unnecessary rows - cleaned_df = drop_invalid_rows(dea_energy_storage_df) - logger.info("Unnecessary rows dropped.") - - # Clean technology (Technology) column - cleaned_df["Technology"] = cleaned_df["Technology"].apply(clean_technology_string) - - # Clean ws column - cleaned_df["ws"] = cleaned_df["ws"].apply(clean_technology_string) - logger.info("`Technology` and `ws` cleaned.") - - # Clean year column - cleaned_df["year"] = cleaned_df["year"].apply(extract_year) - logger.info("`year` column cleaned.") - - # Clean parameter (par) column - cleaned_df["par"] = cleaned_df["par"].apply(clean_parameter_string) - logger.info("`par` column cleaned.") - - # Complete missing units based on parameter names and replace incorrect units. - cleaned_df[["par", "unit"]] = cleaned_df[["par", "unit"]].apply( - standardize_units, axis=1 - ) - logger.info("Missing units added and wrong units replaced.") - - # Include priceyear in unit if applicable - cleaned_df["unit"] = cleaned_df.apply( - lambda row: Commons.update_unit_with_currency_year( - row["unit"], row["priceyear"] - ), - axis=1, - ) - logger.info("`priceyear` included in `unit` column.") - - # Format value (val) column - cleaned_df["val"] = cleaned_df["val"].apply( - lambda x: format_val_number(x, input_args.num_digits) - ) - logger.info("`val` column formatted.") - - # Replace "MEUR_2020" with "EUR_2020" and multiply val by 1_000_000 - mask_meur = cleaned_df["unit"].str.contains("MEUR_2020") - cleaned_df.loc[mask_meur, "unit"] = cleaned_df.loc[mask_meur, "unit"].str.replace( - "MEUR_2020", "EUR_2020" - ) - cleaned_df.loc[mask_meur, "val"] = ( - cleaned_df.loc[mask_meur, "val"] * 1_000_000.0 - ).round(input_args.num_digits) - - # Replace "kEUR_2020" with "EUR_2020" and multiply val by 1_000 - mask_lower_keur = cleaned_df["unit"].str.contains("kEUR_2020") - cleaned_df.loc[mask_lower_keur, "unit"] = cleaned_df.loc[ - mask_lower_keur, "unit" - ].str.replace("kEUR_2020", "EUR_2020") - cleaned_df.loc[mask_lower_keur, "val"] = ( - cleaned_df.loc[mask_lower_keur, "val"] * 1_000.0 - ).round(input_args.num_digits) - - # Replace "KEUR_2020" with "EUR_2020" and multiply val by 1_000 - mask_upper_keur = cleaned_df["unit"].str.contains("KEUR_2020") - cleaned_df.loc[mask_upper_keur, "unit"] = cleaned_df.loc[ - mask_upper_keur, "unit" - ].str.replace("KEUR_2020", "EUR_2020") - cleaned_df.loc[mask_upper_keur, "val"] = ( - cleaned_df.loc[mask_upper_keur, "val"] * 1_000.0 - ).round(input_args.num_digits) - - # Replace "mol/s/m/MPa1/2" with "mol/s/m/Pa" and multiply val by 1_000_000 - mask_mols = cleaned_df["unit"].str.contains("mol/s/m/MPa1/2") - cleaned_df.loc[mask_mols, "unit"] = cleaned_df.loc[mask_mols, "unit"].str.replace( - "mol/s/m/MPa1/2", "mol/s/m/Pa" - ) - cleaned_df.loc[mask_mols, "val"] = cleaned_df.loc[mask_mols, "val"] * 1_000_000.0 - - # Replace, in column `par`, `energy storage capacity for one unit` and `tank volume of example` with `capacity` - mask_capacity = cleaned_df["par"].isin( - [ - "energy storage capacity for one unit", - "tank volume of example", - ] - ) - cleaned_df.loc[mask_capacity, "par"] = "capacity" - - # Clean est column - cleaned_df["est"] = cleaned_df["est"].apply(clean_est_string) - logger.info("`est` column cleaned.") - - # Drop unnecessary columns - columns_to_drop = ["cat", "priceyear", "ref", "note"] - cleaned_df = cleaned_df.drop(columns=columns_to_drop, errors="ignore") - logger.info("Unnecessary columns dropped.") - - filtered_df = filter_parameters(cleaned_df, input_args.filter_params) - - # Build TechnologyCollection - dea_storage_path = pathlib.Path( - path_cwd, - "src", - "technologydata", - "parsers", - "dea_energy_storage", - ) - output_technologies_path = pathlib.Path( - dea_storage_path, - "v10/technologies.json", - ) - output_sources_path = pathlib.Path( - dea_storage_path, - "v10/sources.json", - ) - - tech_col = build_technology_collection( - filtered_df, - output_sources_path, - store_source=input_args.store_source, - output_schema=input_args.export_schema, - ) - logger.info("TechnologyCollection object instantiated.") - tech_col.to_json(output_technologies_path, output_schema=input_args.export_schema) - logger.info("TechnologyCollection object exported to json.") - - if input_args.export_schema: - # Move schema files if they exist - schema_folder = pathlib.Path( - path_cwd, "src", "technologydata", "parsers", "schemas" - ) - sources_schema = pathlib.Path(dea_storage_path, "sources.schema.json") - technologies_schema = pathlib.Path(dea_storage_path, "technologies.schema.json") - - schema_folder.mkdir(parents=True, exist_ok=True) - - if sources_schema.exists(): - sources_schema.rename(schema_folder / "sources.schema.json") - logger.info(f"Moved {sources_schema} to {schema_folder}") - if technologies_schema.exists(): - technologies_schema.rename(schema_folder / "technologies.schema.json") - logger.info(f"Moved {technologies_schema} to {schema_folder}") diff --git a/src/technologydata/parsers/dea_energy_storage/parser_v10.py b/src/technologydata/parsers/dea_energy_storage/parser_v10.py new file mode 100644 index 00000000..85122342 --- /dev/null +++ b/src/technologydata/parsers/dea_energy_storage/parser_v10.py @@ -0,0 +1,668 @@ +# SPDX-FileCopyrightText: technologydata contributors +# +# SPDX-License-Identifier: MIT + + +"""Parser for version 10 of the DEA Energy Storage dataset.""" + +import logging +import pathlib +import re +from typing import Any + +import pandas as pd +import pydantic + +from technologydata import ( + Commons, + Parameter, + Source, + SourceCollection, + Technology, + TechnologyCollection, +) +from technologydata.parsers.data_parser_base import ParserBase + +path_cwd = pathlib.Path.cwd() + +logger = logging.getLogger(__name__) + + +class DeaEnergyStorageV10Parser(ParserBase): + """Parser for v10 of the DEA Energy Storage dataset.""" + + @staticmethod + def _drop_invalid_rows(dataframe: pd.DataFrame) -> pd.DataFrame: + """ + Clean and filter a DataFrame by removing rows with invalid or incomplete data. + + This function performs multiple validation checks to ensure data quality: + - Removes rows with None or NaN values in critical columns + - Removes rows with empty or whitespace-only strings + - Filters rows based on specific data integrity criteria + - Discards rows where 'val' column contains comparator symbols or non-numeric values + + Parameters + ---------- + dataframe : pd.DataFrame + The input DataFrame to be cleaned and validated. + + Returns + ------- + pd.DataFrame + A new DataFrame with invalid rows removed, maintaining data integrity. + + Notes + ----- + Validation criteria include: + - Non-empty 'Technology', 'par', and 'val' columns + - 'year' column containing a valid 4-digit year + - 'val' column containing only numeric values (no comparator symbols) + + """ + # Create a copy to avoid modifying the original DataFrame + df_cleaned = dataframe.copy() + + # Validate column existence + required_columns = ["Technology", "par", "val", "year"] + missing_columns = [ + col for col in required_columns if col not in df_cleaned.columns + ] + if missing_columns: + raise ValueError(f"Missing required columns: {missing_columns}") + + # Remove rows with None or NaN values in critical columns + df_cleaned = df_cleaned.dropna(subset=required_columns) + + # Remove rows with empty or whitespace-only strings + for column in required_columns: + df_cleaned = df_cleaned[df_cleaned[column].astype(str).str.strip() != ""] + + # Filter rows with valid year (4 consecutive digits) + df_cleaned = df_cleaned[ + df_cleaned["year"].astype(str).str.contains(r"\d{4}", regex=True) + ] + + # Remove rows with comparator symbols or without digits in 'val' column + df_cleaned = df_cleaned[ + (~df_cleaned["val"].astype(str).str.contains(r"[<>≀β‰₯]", regex=True)) + & (df_cleaned["val"].astype(str).str.contains(r"\d", regex=True)) + ] + + return df_cleaned + + @staticmethod + @pydantic.validate_call + def _clean_parameter_string(text_string: str) -> str: + """ + Remove any string between [] or [), any leading hyphen or double quotes from the input string. Lower-case all. + + Parameters + ---------- + text_string : str + input string to be cleaned. + + Returns + ------- + str + cleaned string with [] and [) and leading hyphen or double quotes removed. + + Examples + -------- + >>> DeaEnergyStorageV10Parser._clean_parameter_string("- Charge efficiency [%]") + charge efficiency + >>> DeaEnergyStorageV10Parser._clean_parameter_string("Energy storage capacity for one unit [MWh)") + energy storage capacity for one unit + + """ + # Remove leading hyphen + text_string = text_string.lstrip("-") + + # Remove content inside square brackets including the brackets themselves + result = re.sub(r"\[.*?\]", "", text_string) + + # Remove content inside square bracket and parenthesis including the brackets/parenthesis themselves + result = re.sub(r"\[.*?\)", "", result) + + # Remove extra spaces resulting from the removal and set all to lower case + result = re.sub(r"\s+", " ", result).strip().casefold() + + return result + + @staticmethod + @pydantic.validate_call + def _clean_technology_string(tech_str: str) -> str: + """ + Clean a technology string by removing numeric patterns and standardizing case. + + This function pre-processes technology-related strings by: + - Removing three-digit numeric patterns (with optional letter) + - Stripping leading and trailing whitespace + - Converting to lowercase for case-insensitive comparison + + Parameters + ---------- + tech_str : str + Input technology string to be cleaned. + + Returns + ------- + str + Cleaned technology string with: + - Numeric patterns (like '123' or '456a') removed + - Whitespace stripped + - Converted to lowercase + + Raises + ------ + Exception + If string conversion or processing fails, logs the error and returns the original input. + + Examples + -------- + >>> DeaEnergyStorageV10Parser._clean_technology_string("143a Rock-based Carnot battery") + rock-based carnot battery + >>> DeaEnergyStorageV10Parser._clean_technology_string("Pit Thermal Energy Storage [PTES]") + pit thermal energy storage [ptes] + + """ + try: + # Remove three-digit patterns or three digits followed by a letter + return re.sub(r"^(\d{3}[a-zA-Z]?)", "", tech_str.strip()).strip().casefold() + except Exception as e: + logger.error(f"Error cleaning technology '{tech_str}': {e}") + return tech_str + + @staticmethod + @pydantic.validate_call + def _format_val_number(input_value: str, num_decimals: int) -> float | None | Any: + """ + Parse various number formats into a float value. + + Parameters + ---------- + input_value : str + The input number in different formats, such as: + - Scientific notation with "x10^": e.g., "2.84x10^23" + - Numbers with commas as decimal separators: e.g., "1,1" + num_decimals : int + Number of decimals + + Returns + ------- + float + The parsed numerical value as a float. + + Raises + ------ + ValueError + If the input cannot be parsed into a float. + + Examples + -------- + >>> DeaEnergyStorageV10Parser._format_val_number("1,1") + 1.1 + >>> DeaEnergyStorageV10Parser._format_val_number("2.84Γ—10-27") + 2.84e-27 + + """ + s = str(input_value).strip() + + # Handle scientific notation like "2.84x10^23" + match = re.match(r"([+-]?\d*\.?\d+)Γ—10([+-]?\d+)", s) + if match: + base, exponent = match.groups() + return round(float(base), num_decimals) * (10 ** int(exponent)) + + # Replace comma with dot for decimal numbers + s = s.replace(",", ".") + try: + return round(float(s), num_decimals) + except ValueError: + raise ValueError(f"Cannot parse number from input: {input_value}") + + @staticmethod + @pydantic.validate_call + def _extract_year(year_str: str) -> int | None: + """ + Extract the first year (integer) from a given input. + + Parameters + ---------- + year_str : str + Input value containing a potential year. + + Returns + ------- + int, None + Extracted first year. + + Examples + -------- + >>> DeaEnergyStorageV10Parser._extract_year('uncertainty (2050)') + 2050 + + """ + # Extract digits + digits = re.findall(r"\d+", year_str) + + # Convert to integer + return int(digits[0]) if digits else None + + @staticmethod + @pydantic.validate_call + def _clean_est_string(est_str: str) -> str: + """ + Casefold the 'est' string, trim whitespace and replace `ctrl` with `control`. + + Parameters + ---------- + est_str : str + The input 'est' string to be cleaned. + + Returns + ------- + str + The cleaned 'est' string. + + Examples + -------- + >>> DeaEnergyStorageV10Parser._clean_est_string("Lower") + lower + >>> DeaEnergyStorageV10Parser._clean_est_string("ctrl") + control + + """ + if est_str == "ctrl": + cleaned_str = "control" + else: + cleaned_str = est_str.casefold().strip() + return cleaned_str + + @staticmethod + def _standardize_units(series: pd.Series) -> pd.Series: + """ + Complete missing units based on parameter names and replace incorrect units. + + Parameters + ---------- + series : pandas.Series + A series containing two elements: [par, unit] + + Returns + ------- + pandas.Series + Updated series with completed and corrected unit. + + Notes + ----- + The following substitutions are driven by the `pint` documentation available + at https://github.com/hgrecco/pint/blob/master/pint/default_en.txt: + - "pct.": "percent", + - "m2": "meter**2", + - "m3": "meter**3", + + """ + par, unit = series + + # Mapping of parameters to their default units + param_unit_map = { + "energy storage capacity for one unit": "MWh", + "typical temperature difference in storage": "K", + "fixed o&m": "pct./year", + "lifetime in total number of cycles": "cycles", + "cycle life": "cycles", + } + + # Mapping of incorrect units to correct units + unit_corrections = { + "pct./period": "percent", + "⁰C": "C", + "Β°C": "C", + "pct./30sec": "pct.", + "m2": "meter**2", + "m3": "meter**3", + "MWhoutput": "MWh", + "hot/cold,K": "K", + "pct.investement": "percent", + "pct.investment": "percent", + "tank/": "", + "pct.": "percent", + } + + # Complete missing or empty units + if (not isinstance(unit, str)) or (unit.strip() == ""): + unit = param_unit_map.get(par, unit) + + # Replace wrong units + for incorrect, correct in unit_corrections.items(): + if incorrect == unit or incorrect in unit: + unit = unit.replace(incorrect, correct) + + return pd.Series([par, unit]) + + @staticmethod + def _filter_parameters(dataframe: pd.DataFrame, filter_flag: bool) -> pd.DataFrame: + """ + Filter rows of a DataFrame by allowed technology parameters. + + Parameters + ---------- + dataframe : pandas.DataFrame + Input DataFrame containing at least a "Technology" column. + filter_flag : Boolean + If true, filter parameter `par` column + + Returns + ------- + pandas.DataFrame + The filtered DataFrame. The returned + DataFrame contains only rows where the `par` column is one of: + "technical lifetime", "fixed o&m", "specific investment", or + "variable o&m". + + """ + allowed_set = { + "technical lifetime", + "fixed o&m", + "specific investment", + "variable o&m", + "charge efficiency", + "discharge efficiency", + "capacity", + } + if filter_flag: + # Filter the DataFrame based on the allowed set + df_filtered = dataframe[dataframe["par"].isin(allowed_set)].reset_index( + drop=True + ) + logger.info( + f"technologies.json contains a subset of the allowed parameters: {allowed_set}." + ) + else: + # Return the original DataFrame if filter_flag is False + df_filtered = dataframe + logger.info("All parameters are outputted to technologies.json") + return df_filtered + + @staticmethod + def _build_technology_collection( + dataframe: pd.DataFrame, + sources_path: pathlib.Path, + archive_source: bool = False, + output_schema: bool = False, + ) -> TechnologyCollection: + """ + Compute a collection of technologies from a grouped DataFrame. + + Processes input DataFrame by grouping technologies and extracting their parameters, + creating Technology instances for each unique group. + + Parameters + ---------- + dataframe : pandas.DataFrame + Input DataFrame containing technology parameters. + Expected columns include: + - 'est': Estimation or case identifier + - 'year': Year of the technology + - 'ws': Workspace or technology identifier + - 'Technology': Detailed technology name + - 'par': Parameter name + - 'val': Parameter value + - 'unit': Parameter units + sources_path: pathlib.Path + Output path for storing the SourceCollection object + archive_source: Optional[bool] + Flag to decide whether to archive the source object on the Wayback Machine. Default False. + output_schema : Optional[bool] + Flag to decide whether to export the source collection schema. Default False. + + Returns + ------- + TechnologyCollection + A collection of Technology instances, each representing a unique + technology group with its associated parameters. + + Notes + ----- + - The function groups the DataFrame by 'est', 'year', 'ws', and 'Technology' + - For each group, it creates a dictionary of Parameters + - Each Technology is instantiated with group-specific attributes + + """ + list_techs = [] + + if archive_source: + source = Source( + title="Technology Data for Energy storage (May 2025)", + authors="Danish Energy Agency", + url="https://ens.dk/media/6589/download", + url_date="2025-10-08 09:24:00", + ) + source.ensure_in_wayback() + sources = SourceCollection(sources=[source]) + sources.to_json(sources_path, output_schema=output_schema) + else: + sources = SourceCollection.from_json(sources_path) + + for (est, year, ws, technology_name), group in dataframe.groupby( + ["est", "year", "ws", "Technology"] + ): + parameters = {} + for _, row in group.iterrows(): + parameters[row["par"]] = Parameter( + magnitude=row["val"], + units=row["unit"], + sources=sources, + provenance="Parsed from Excel file", + ) + list_techs.append( + Technology( + name=ws, + region="EU", + year=year, + parameters=parameters, + case=est, + detailed_technology=technology_name, + ) + ) + return TechnologyCollection(technologies=list_techs) + + def parse( + self, + input_path: pathlib.Path, + num_digits: int, + archive_source: bool, + **kwargs: Any, + ) -> None: + """ + Parse and process version 10 of the DEA Energy Storage dataset. + + This method reads the raw data from an Excel file, cleans and transforms + it through a series of steps, and then builds a TechnologyCollection. + The processed data is saved to JSON files. + + Parameters + ---------- + input_path : pathlib.Path + Path to the raw input data file (Excel). + num_digits : int + Number of significant digits to round numerical values. + archive_source : bool + If True, archives the source object on the Wayback Machine. + **kwargs : bool + filter_params : bool + If True, filters the parameters to a predefined allowed set. + export_schema : bool + If True, exports the Pydantic schema for the data models. + + Returns + ------- + TechnologyCollection + A collection of parsed technology data. + + """ + filter_params = kwargs.get("filter_params", False) + export_schema = kwargs.get("export_schema", False) + + dea_energy_storage_df = pd.read_excel( + input_path, + sheet_name="alldata_flat", + engine="calamine", + dtype=str, + ) + logger.info("Input file read-in.") + + # Drop unnecessary rows + cleaned_df = DeaEnergyStorageV10Parser._drop_invalid_rows(dea_energy_storage_df) + logger.info("Unnecessary rows dropped.") + + # Clean technology (Technology) column + cleaned_df["Technology"] = cleaned_df["Technology"].apply( + DeaEnergyStorageV10Parser._clean_technology_string + ) + + # Clean ws column + cleaned_df["ws"] = cleaned_df["ws"].apply( + DeaEnergyStorageV10Parser._clean_technology_string + ) + logger.info("`Technology` and `ws` cleaned.") + + # Clean year column + cleaned_df["year"] = cleaned_df["year"].apply( + DeaEnergyStorageV10Parser._extract_year + ) + logger.info("`year` column cleaned.") + + # Clean parameter (par) column + cleaned_df["par"] = cleaned_df["par"].apply( + DeaEnergyStorageV10Parser._clean_parameter_string + ) + logger.info("`par` column cleaned.") + + # Complete missing units based on parameter names and replace incorrect units. + cleaned_df[["par", "unit"]] = cleaned_df[["par", "unit"]].apply( + DeaEnergyStorageV10Parser._standardize_units, axis=1 + ) + logger.info("Missing units added and wrong units replaced.") + + # Include priceyear in unit if applicable + cleaned_df["unit"] = cleaned_df.apply( + lambda row: Commons.update_unit_with_currency_year( + row["unit"], row["priceyear"] + ), + axis=1, + ) + logger.info("`priceyear` included in `unit` column.") + + # Format value (val) column + cleaned_df["val"] = cleaned_df["val"].apply( + lambda x: DeaEnergyStorageV10Parser._format_val_number(x, num_digits) + ) + logger.info("`val` column formatted.") + + # Replace "MEUR_2020" with "EUR_2020" and multiply val by 1_000_000 + mask_meur = cleaned_df["unit"].str.contains("MEUR_2020") + cleaned_df.loc[mask_meur, "unit"] = cleaned_df.loc[ + mask_meur, "unit" + ].str.replace("MEUR_2020", "EUR_2020") + cleaned_df.loc[mask_meur, "val"] = ( + cleaned_df.loc[mask_meur, "val"] * 1_000_000.0 + ).round(num_digits) + + # Replace "kEUR_2020" with "EUR_2020" and multiply val by 1_000 + mask_lower_keur = cleaned_df["unit"].str.contains("kEUR_2020") + cleaned_df.loc[mask_lower_keur, "unit"] = cleaned_df.loc[ + mask_lower_keur, "unit" + ].str.replace("kEUR_2020", "EUR_2020") + cleaned_df.loc[mask_lower_keur, "val"] = ( + cleaned_df.loc[mask_lower_keur, "val"] * 1_000.0 + ).round(num_digits) + + # Replace "KEUR_2020" with "EUR_2020" and multiply val by 1_000 + mask_upper_keur = cleaned_df["unit"].str.contains("KEUR_2020") + cleaned_df.loc[mask_upper_keur, "unit"] = cleaned_df.loc[ + mask_upper_keur, "unit" + ].str.replace("KEUR_2020", "EUR_2020") + cleaned_df.loc[mask_upper_keur, "val"] = ( + cleaned_df.loc[mask_upper_keur, "val"] * 1_000.0 + ).round(num_digits) + + # Replace "mol/s/m/MPa1/2" with "mol/s/m/Pa" and multiply val by 1_000_000 + mask_mols = cleaned_df["unit"].str.contains("mol/s/m/MPa1/2") + cleaned_df.loc[mask_mols, "unit"] = cleaned_df.loc[ + mask_mols, "unit" + ].str.replace("mol/s/m/MPa1/2", "mol/s/m/Pa") + cleaned_df.loc[mask_mols, "val"] = ( + cleaned_df.loc[mask_mols, "val"] * 1_000_000.0 + ) + + # Replace, in column `par`, `energy storage capacity for one unit` and `tank volume of example` with `capacity` + mask_capacity = cleaned_df["par"].isin( + [ + "energy storage capacity for one unit", + "tank volume of example", + ] + ) + cleaned_df.loc[mask_capacity, "par"] = "capacity" + + # Clean est column + cleaned_df["est"] = cleaned_df["est"].apply( + DeaEnergyStorageV10Parser._clean_est_string + ) + logger.info("`est` column cleaned.") + + # Drop unnecessary columns + columns_to_drop = ["cat", "priceyear", "ref", "note"] + cleaned_df = cleaned_df.drop(columns=columns_to_drop, errors="ignore") + logger.info("Unnecessary columns dropped.") + + filtered_df = DeaEnergyStorageV10Parser._filter_parameters( + cleaned_df, filter_params + ) + + # Build TechnologyCollection + dea_storage_path = pathlib.Path( + path_cwd, + "src", + "technologydata", + "parsers", + "dea_energy_storage", + ) + output_technologies_path = pathlib.Path( + dea_storage_path, + "v10/technologies.json", + ) + output_sources_path = pathlib.Path( + dea_storage_path, + "v10/sources.json", + ) + + tech_col = DeaEnergyStorageV10Parser._build_technology_collection( + filtered_df, + output_sources_path, + archive_source=archive_source, + output_schema=export_schema, + ) + logger.info("TechnologyCollection object instantiated.") + tech_col.to_json(output_technologies_path, output_schema=export_schema) + logger.info("TechnologyCollection object exported to json.") + + if export_schema: + # Move schema files if they exist + schema_folder = pathlib.Path( + path_cwd, "src", "technologydata", "parsers", "schemas" + ) + sources_schema = pathlib.Path(dea_storage_path, "sources.schema.json") + technologies_schema = pathlib.Path( + dea_storage_path, "technologies.schema.json" + ) + + schema_folder.mkdir(parents=True, exist_ok=True) + + if sources_schema.exists(): + sources_schema.rename(schema_folder / "sources.schema.json") + logger.info(f"Moved {sources_schema} to {schema_folder}") + if technologies_schema.exists(): + technologies_schema.rename(schema_folder / "technologies.schema.json") + logger.info(f"Moved {technologies_schema} to {schema_folder}") diff --git a/src/technologydata/parsers/manual_input_usa/__init__.py b/src/technologydata/parsers/manual_input_usa/__init__.py index c0cd27e1..711c21f5 100644 --- a/src/technologydata/parsers/manual_input_usa/__init__.py +++ b/src/technologydata/parsers/manual_input_usa/__init__.py @@ -2,4 +2,91 @@ # # SPDX-License-Identifier: MIT -"""Provide a parser for manually inputted data for the USA.""" +"""Provide a parser for the technology-data manual_input_usa.csv dataset.""" + +import logging +import pathlib + +from technologydata.parsers.data_parser_base import ParserBase +from technologydata.parsers.manual_input_usa.parser_v0134 import ( + ManualInputUSAV0134Parser, +) + + +class ManualInputUsaParser: + """ + Main parser for the technology_data manual_input_usa.csv dataset. + + Dispatches to version-specific parser implementations. + """ + + def __init__(self) -> None: + """Initialize the parser and maps versions to parser classes.""" + self._parsers: dict[str, type[ParserBase]] = { + "v0.13.4": ManualInputUSAV0134Parser, + # "v0.13.5": ManualInputUSAV0135Parser, # Add new versions here + } + + def get_supported_versions(self) -> list[str]: + """Return a list of supported dataset versions.""" + return list(self._parsers.keys()) + + def parse( + self, + version: str, + input_path: pathlib.Path, + num_digits: int, + archive_source: bool, + filter_params: bool, + export_schema: bool, + ) -> None: + """ + Parse the specified version of the technology_data manual_input_usa.csv dataset. + + This method selects the appropriate parser for the given version and + delegates the parsing task to it. + + Parameters + ---------- + version : str + The version of the dataset to parse (e.g., 'v0.13.4'). + input_path : pathlib.Path + Path to the raw input data file. + num_digits : int, optional + Number of significant digits to round the values, by default 4. + archive_source : bool, optional + If True, archives the source object on the Wayback Machine, by default False. + filter_params : bool, optional + If True, filters the parameters stored in the output, by default False. + export_schema : bool, optional + If True, exports the Pydantic schema for the data models, by default False. + + Raises + ------ + ValueError + If the specified version is not supported. + + """ + if version not in self._parsers: + raise ValueError( + f"Unsupported version: {version}. " + f"Supported versions are: {', '.join(self.get_supported_versions())}" + ) + + parser_class = self._parsers[version] + parser_instance = parser_class() + + logging.info( + f"Parsing the technology-data manual_input_usa.csv. dataset version {version} using {parser_class.__name__}" + ) + return parser_instance.parse( + input_path=input_path, + num_digits=num_digits, + archive_source=archive_source, + filter_params=filter_params, + export_schema=export_schema, + ) + + +# Make the main parser class available for import from the module +__all__ = ["ManualInputUsaParser", "ManualInputUSAV0134Parser"] diff --git a/src/technologydata/parsers/manual_input_usa/manual_input_usa.py b/src/technologydata/parsers/manual_input_usa/manual_input_usa.py deleted file mode 100644 index 1212c95f..00000000 --- a/src/technologydata/parsers/manual_input_usa/manual_input_usa.py +++ /dev/null @@ -1,256 +0,0 @@ -# SPDX-FileCopyrightText: technologydata contributors -# -# SPDX-License-Identifier: MIT - -""" -Data parser for manually specified, USA-specific data from the technology-data repository (`manual_input_usa.csv`). - -How to run: - From the repository root, execute: - python src/technologydata/parsers/manual_input_usa/manual_input_usa.py - -This will regenerate the files `src/technologydata/parsers/manual_input_usa/{sources.json|technologies.json}` with the specified options. -Use the default options to reproduce the file provided with the package. - -Configuration options (command-line arguments): - --num_digits Number of significant digits to round the values. Default: 4 - --store_source Store the source object on the Wayback Machine. Default: False - -Example: - python src/technologydata/parsers/manual_input_usa/manual_input_usa.py --num_digits 3 --store_source - -""" - -import logging -import pathlib - -import pandas - -from technologydata import ( - Commons, - Parameter, - Source, - SourceCollection, - Technology, - TechnologyCollection, -) -from technologydata.parsers.commons import CommonsParser - -path_cwd = pathlib.Path.cwd() - -logger = logging.getLogger(__name__) - - -def extract_units_carriers_heating_value( - input_unit: str, -) -> tuple[str, str | None, str | None]: - """ - Extract standardized units and carriers from an input unit string. Add also heating_value. - - This function maps complex unit representations to simplified unit and carrier - combinations using a predefined dictionary of special patterns. - - Parameters - ---------- - input_unit : str - A specialized unit string to be converted. - - Returns - ------- - tuple[str, str | None, str | None] - A tuple containing two elements: - - The first element is the standardized unit - - The second element is the corresponding carrier (or None if not found) - - The third element is the corresponding heating value (or None if not found) - - """ - # Define conversion dictionary - special_patterns = { - "USD_2022/MW_FT": ("USD_2022/MW", "1/FT", "1/LHV"), - "MWh_H2/MWh_FT": ("MWh/MWh", "H2/FT", "LHV"), - "MWh_el/MWh_FT": ("MWh/MWh", "el/FT", "LHV"), - "t_CO2/MWh_FT": ("t/MWh", "CO2/FT", "LHV"), - "USD_2022/kWh_H2": ("USD_2022/kWh", "1/H2", "LHV"), - "MWh_el/MWh_H2": ("MWh/MWh", "el/H2", "LHV"), - "USD_2023/t_CO2/h": ("USD_2023/t/h", "1/CO2", None), - "MWh_el/t_CO2": ("MWh/t", "el/CO2", "LHV"), - "MWh_th/t_CO2": ("MWh/t", "thermal/CO2", "LHV"), - } - - if isinstance(input_unit, str) and input_unit in special_patterns.keys(): - return special_patterns[input_unit] - else: - return input_unit, None, None - - -def build_technology_collection( - dataframe: pandas.DataFrame, - sources_path: pathlib.Path, - store_source: bool = False, -) -> TechnologyCollection: - """ - Compute a collection of technologies from a grouped DataFrame. - - Processes input DataFrame by grouping technologies and extracting their parameters, - creating Technology instances for each unique group. - - Parameters - ---------- - dataframe : pandas.DataFrame - Input DataFrame containing technology parameters. - Expected columns include: - - 'scenario': Estimation or case identifier - - 'year': Year of the technology - - 'technology': Detailed technology name - - 'parameter': Parameter name - - 'value': Parameter value - - 'unit': Parameter units - - 'further_description': Extra information about the technology - - 'financial_case': Technology financial case - sources_path: pathlib.Path - Output path for storing the SourceCollection object - store_source: Optional[bool] - Flag to decide whether to store the source object on the Wayback Machine. Default False. - - Returns - ------- - TechnologyCollection - A collection of Technology instances, each representing a unique - technology group with its associated parameters. - - Notes - ----- - - The function groups the DataFrame by ["scenario", "year", "technology"] - - For each group, it creates a dictionary of Parameters - - Each Technology is instantiated with group-specific attributes - - """ - list_techs = [] - - if store_source: - source = Source( - title="Energy system technology data for the US", - authors="Contributors to technology-data. Data source: manual_input_usa.csv", - url="https://github.com/PyPSA/technology-data/blob/master/inputs/US/manual_input_usa.csv", - ) - source.ensure_in_wayback() - sources = SourceCollection(sources=[source]) - sources.to_json(sources_path) - else: - sources = SourceCollection.from_json(sources_path) - - for (scenario, year, technology), group in dataframe.groupby( - ["scenario", "year", "technology"] - ): - parameters = {} - financial_case_for_tech = None - for _, row in group.iterrows(): - unit, carrier, heating_value = extract_units_carriers_heating_value( - row["unit"] - ) - param_kwargs = { - "magnitude": row["value"], - "sources": sources, - } - if carrier is not None: - param_kwargs["carrier"] = carrier - if heating_value is not None: - param_kwargs["heating_value"] = heating_value - if unit is not None: - param_kwargs["units"] = unit - if row["further_description"] is not None and isinstance( - row["further_description"], str - ): - param_kwargs["note"] = row["further_description"] - if row["financial_case"] is not None and isinstance( - row["financial_case"], str - ): - financial_case_for_tech = str(row["financial_case"]) - parameters[row["parameter"]] = Parameter(**param_kwargs) - - # Combine scenario and financial_case for the case attribute - case_value = str(scenario) - if financial_case_for_tech is not None: - case_value = f"{scenario} - {financial_case_for_tech}" - - list_techs.append( - Technology( - name=technology, - region="USA", - year=year, - parameters=parameters, - case=case_value, - detailed_technology=technology, - ) - ) - - return TechnologyCollection(technologies=list_techs) - - -if __name__ == "__main__": - # Parse input arguments - input_args = CommonsParser.parse_input_arguments( - description="Parse the technology_data manual_input_usa.csv dataset" - ) - logger.info("Command line arguments parsed.") - - manual_input_usa_input_path = pathlib.Path( - path_cwd, - "src", - "technologydata", - "parsers", - "raw", - "manual_input_usa.csv", - ) - - manual_input_usa_df = pandas.read_csv( - manual_input_usa_input_path, dtype=str, na_values="None" - ) - manual_input_usa_df["value"] = manual_input_usa_df["value"].astype(float) - manual_input_usa_df["scenario"] = manual_input_usa_df["scenario"].fillna( - "not_available" - ) - - # Replace "per unit" with "%" and multiply val by 100 - mask_per_unit = manual_input_usa_df["unit"].str.contains("per unit") - manual_input_usa_df.loc[mask_per_unit, "unit"] = manual_input_usa_df.loc[ - mask_per_unit, "unit" - ].str.replace("per unit", "%") - manual_input_usa_df.loc[mask_per_unit, "value"] = ( - manual_input_usa_df.loc[mask_per_unit, "value"] * 100.0 - ).round(input_args.num_digits) - logger.info("`per unit` replaced by `%`. Corresponding value multiplied by 100.") - - # Include currency_year in unit if applicable - manual_input_usa_df["unit"] = manual_input_usa_df.apply( - lambda row: Commons.update_unit_with_currency_year( - row["unit"], row["currency_year"] - ), - axis=1, - ) - logger.info("`currency_year` included in `unit` column.") - - # Build TechnologyCollection - manual_input_usa_base_path = pathlib.Path( - path_cwd, - "src", - "technologydata", - "parsers", - "manual_input_usa", - ) - output_technologies_path = pathlib.Path( - manual_input_usa_base_path, - "v0.13.4/technologies.json", - ) - output_sources_path = pathlib.Path( - manual_input_usa_base_path, - "v0.13.4/sources.json", - ) - - tech_col = build_technology_collection( - manual_input_usa_df, output_sources_path, store_source=input_args.store_source - ) - - logger.info("TechnologyCollection object instantiated.") - tech_col.to_json(output_technologies_path) - logger.info("TechnologyCollection object exported to json.") diff --git a/src/technologydata/parsers/manual_input_usa/parser_v0134.py b/src/technologydata/parsers/manual_input_usa/parser_v0134.py new file mode 100644 index 00000000..fc88985d --- /dev/null +++ b/src/technologydata/parsers/manual_input_usa/parser_v0134.py @@ -0,0 +1,273 @@ +# SPDX-FileCopyrightText: technologydata contributors +# +# SPDX-License-Identifier: MIT + +"""Parser for version 0.13.4 of the manual_input_usa.csv dataset.""" + +import logging +import pathlib +from typing import Any + +import pandas + +from technologydata import ( + Commons, + Parameter, + Source, + SourceCollection, + Technology, + TechnologyCollection, +) +from technologydata.parsers.data_parser_base import ParserBase + +path_cwd = pathlib.Path.cwd() + +logger = logging.getLogger(__name__) + + +class ManualInputUSAV0134Parser(ParserBase): + """Parser for v0.13.4 of the manual_input_usa.csv dataset.""" + + @staticmethod + def _extract_units_carriers_heating_value( + input_unit: str, + ) -> tuple[str, str | None, str | None]: + """ + Extract standardized units and carriers from an input unit string. Add also heating_value. + + This function maps complex unit representations to simplified unit and carrier + combinations using a predefined dictionary of special patterns. + + Parameters + ---------- + input_unit : str + A specialized unit string to be converted. + + Returns + ------- + tuple[str, str | None, str | None] + A tuple containing two elements: + - The first element is the standardized unit + - The second element is the corresponding carrier (or None if not found) + - The third element is the corresponding heating value (or None if not found) + + """ + # Define conversion dictionary + special_patterns = { + "USD_2022/MW_FT": ("USD_2022/MW", "1/FT", "1/LHV"), + "MWh_H2/MWh_FT": ("MWh/MWh", "H2/FT", "LHV"), + "MWh_el/MWh_FT": ("MWh/MWh", "el/FT", "LHV"), + "t_CO2/MWh_FT": ("t/MWh", "CO2/FT", "LHV"), + "USD_2022/kWh_H2": ("USD_2022/kWh", "1/H2", "LHV"), + "MWh_el/MWh_H2": ("MWh/MWh", "el/H2", "LHV"), + "USD_2023/t_CO2/h": ("USD_2023/t/h", "1/CO2", None), + "MWh_el/t_CO2": ("MWh/t", "el/CO2", "LHV"), + "MWh_th/t_CO2": ("MWh/t", "thermal/CO2", "LHV"), + } + + if isinstance(input_unit, str) and input_unit in special_patterns.keys(): + return special_patterns[input_unit] + else: + return input_unit, None, None + + @staticmethod + def _build_technology_collection( + dataframe: pandas.DataFrame, + sources_path: pathlib.Path, + archive_source: bool = False, + output_schema: bool = False, + ) -> TechnologyCollection: + """ + Compute a collection of technologies from a grouped DataFrame. + + Processes input DataFrame by grouping technologies and extracting their parameters, + creating Technology instances for each unique group. + + Parameters + ---------- + dataframe : pandas.DataFrame + Input DataFrame containing technology parameters. + Expected columns include: + - 'scenario': Estimation or case identifier + - 'year': Year of the technology + - 'technology': Detailed technology name + - 'parameter': Parameter name + - 'value': Parameter value + - 'unit': Parameter units + - 'further_description': Extra information about the technology + - 'financial_case': Technology financial case + sources_path: pathlib.Path + Output path for storing the SourceCollection object + archive_source: Optional[bool] + Flag to decide whether to archive the source object on the Wayback Machine. Default False. + output_schema : Optional[bool] + Flag to decide whether to export the source collection schema. Default False. + + Returns + ------- + TechnologyCollection + A collection of Technology instances, each representing a unique + technology group with its associated parameters. + + Notes + ----- + - The function groups the DataFrame by ["scenario", "year", "technology"] + - For each group, it creates a dictionary of Parameters + - Each Technology is instantiated with group-specific attributes + + """ + list_techs = [] + + if archive_source: + source = Source( + title="Energy system technology data for the US", + authors="Contributors to technology-data. Data source: manual_input_usa.csv", + url="https://github.com/PyPSA/technology-data/blob/master/inputs/US/manual_input_usa.csv", + ) + source.ensure_in_wayback() + sources = SourceCollection(sources=[source]) + sources.to_json(sources_path, output_schema=output_schema) + else: + sources = SourceCollection.from_json(sources_path) + + for (scenario, year, technology), group in dataframe.groupby( + ["scenario", "year", "technology"] + ): + parameters = {} + financial_case_for_tech = None + for _, row in group.iterrows(): + unit, carrier, heating_value = ( + ManualInputUSAV0134Parser._extract_units_carriers_heating_value( + row["unit"] + ) + ) + param_kwargs = { + "magnitude": row["value"], + "sources": sources, + } + if carrier is not None: + param_kwargs["carrier"] = carrier + if heating_value is not None: + param_kwargs["heating_value"] = heating_value + if unit is not None: + param_kwargs["units"] = unit + if row["further_description"] is not None and isinstance( + row["further_description"], str + ): + param_kwargs["note"] = row["further_description"] + if row["financial_case"] is not None and isinstance( + row["financial_case"], str + ): + financial_case_for_tech = str(row["financial_case"]) + parameters[row["parameter"]] = Parameter(**param_kwargs) + + # Combine scenario and financial_case for the case attribute + case_value = str(scenario) + if financial_case_for_tech is not None: + case_value = f"{scenario} - {financial_case_for_tech}" + + list_techs.append( + Technology( + name=technology, + region="USA", + year=year, + parameters=parameters, + case=case_value, + detailed_technology=technology, + ) + ) + + return TechnologyCollection(technologies=list_techs) + + def parse( + self, + input_path: pathlib.Path, + num_digits: int, + archive_source: bool, + **kwargs: Any, + ) -> None: + """ + Parse and process version 0.13.4 of the manual_input_usa.csv dataset. + + This method reads the raw data from an Excel file, cleans and transforms + it through a series of steps, and then builds a TechnologyCollection. + The processed data is saved to JSON files. + + Parameters + ---------- + input_path : pathlib.Path + Path to the raw input data file (Excel). + num_digits : int + Number of significant digits to round numerical values. + archive_source : bool + If True, archives the source object on the Wayback Machine. + **kwargs : bool + export_schema : bool + If True, exports the Pydantic schema for the data models. + + Returns + ------- + TechnologyCollection + A collection of parsed technology data. + + """ + export_schema = kwargs.get("export_schema", False) + + manual_input_usa_input_path = pathlib.Path(input_path) + + manual_input_usa_df = pandas.read_csv( + manual_input_usa_input_path, dtype=str, na_values="None" + ) + manual_input_usa_df["value"] = manual_input_usa_df["value"].astype(float) + manual_input_usa_df["scenario"] = manual_input_usa_df["scenario"].fillna( + "not_available" + ) + + # Replace "per unit" with "%" and multiply val by 100 + mask_per_unit = manual_input_usa_df["unit"].str.contains("per unit") + manual_input_usa_df.loc[mask_per_unit, "unit"] = manual_input_usa_df.loc[ + mask_per_unit, "unit" + ].str.replace("per unit", "%") + manual_input_usa_df.loc[mask_per_unit, "value"] = ( + manual_input_usa_df.loc[mask_per_unit, "value"] * 100.0 + ).round(num_digits) + logger.info( + "`per unit` replaced by `%`. Corresponding value multiplied by 100." + ) + + # Include currency_year in unit if applicable + manual_input_usa_df["unit"] = manual_input_usa_df.apply( + lambda row: Commons.update_unit_with_currency_year( + row["unit"], row["currency_year"] + ), + axis=1, + ) + logger.info("`currency_year` included in `unit` column.") + + # Build TechnologyCollection + manual_input_usa_base_path = pathlib.Path( + path_cwd, + "src", + "technologydata", + "parsers", + "manual_input_usa", + ) + output_technologies_path = pathlib.Path( + manual_input_usa_base_path, + "v0.13.4/technologies.json", + ) + output_sources_path = pathlib.Path( + manual_input_usa_base_path, + "v0.13.4/sources.json", + ) + + tech_col = ManualInputUSAV0134Parser._build_technology_collection( + manual_input_usa_df, + output_sources_path, + archive_source=archive_source, + output_schema=export_schema, + ) + + logger.info("TechnologyCollection object instantiated.") + tech_col.to_json(output_technologies_path, output_schema=export_schema) + logger.info("TechnologyCollection object exported to json.") diff --git a/test/test_datapackage.py b/test/test_datapackage.py index d6d24489..1dc0267d 100644 --- a/test/test_datapackage.py +++ b/test/test_datapackage.py @@ -28,8 +28,12 @@ def test_get_source_collection(self) -> None: input_file ) data_package = technologydata.DataPackage( + name="solar_photovoltaics_example", + version="v1.0", technologies=technologies_collection, ) data_package.get_source_collection() assert isinstance(data_package.sources, technologydata.SourceCollection) assert len(data_package.sources) == 2 + assert data_package.name == "solar_photovoltaics_example" + assert data_package.version == "v1.0" diff --git a/test/test_dea_energy_storage.py b/test/test_dea_energy_storage_v10.py similarity index 87% rename from test/test_dea_energy_storage.py rename to test/test_dea_energy_storage_v10.py index 1a5b02d1..4585b9b5 100644 --- a/test/test_dea_energy_storage.py +++ b/test/test_dea_energy_storage_v10.py @@ -10,17 +10,7 @@ import pandas import pytest -from technologydata.parsers.dea_energy_storage.dea_energy_storage import ( - build_technology_collection, - clean_est_string, - clean_parameter_string, - clean_technology_string, - drop_invalid_rows, - extract_year, - filter_parameters, - format_val_number, - standardize_units, -) +from technologydata.parsers.dea_energy_storage import DeaEnergyStorageV10Parser class TestDEAEnergyStorage: @@ -40,7 +30,10 @@ def test_clean_parameter_string( self, input_string: str, expected_string: str ) -> None: """Check if the clean_parameter_string works as expected.""" - assert clean_parameter_string(input_string) == expected_string + assert ( + DeaEnergyStorageV10Parser._clean_parameter_string(input_string) + == expected_string + ) def test_drop_invalid_rows(self) -> None: """Check if the drop_invalid_rows works as expected.""" @@ -68,7 +61,9 @@ def test_drop_invalid_rows(self) -> None: "year": ["nearly 2020", "2024"], } ) - output_dataframe = drop_invalid_rows(input_dataframe).reset_index(drop=True) + output_dataframe = DeaEnergyStorageV10Parser._drop_invalid_rows( + input_dataframe + ).reset_index(drop=True) comparison_df = output_dataframe.compare(expected_dataframe) assert comparison_df.empty @@ -86,7 +81,7 @@ def test_clean_technology_string( self, input_string: str, expected_string: str ) -> None: """Check if clean_technology_string works as expected.""" - result = clean_technology_string(input_string) + result = DeaEnergyStorageV10Parser._clean_technology_string(input_string) assert result == expected_string assert isinstance(result, str) @@ -100,7 +95,7 @@ def test_clean_technology_string( ) # type: ignore def test_extract_year(self, input_year: str, expected_year: int) -> None: """Check if extract_year works as expected.""" - result = extract_year(input_year) + result = DeaEnergyStorageV10Parser._extract_year(input_year) assert result == expected_year assert isinstance(result, int) @@ -116,7 +111,7 @@ def test_format_val_number( self, input_number: str, expected_number: int | None | typing.Any ) -> None: """Check if format_val_number works as expected, including exception handling.""" - result = format_val_number(input_number, 2) + result = DeaEnergyStorageV10Parser._format_val_number(input_number, 2) assert isinstance(result, float) assert result == expected_number @@ -130,7 +125,7 @@ def test_format_val_number( ) # type: ignore def test_clean_est_string(self, input_string: str, expected_string: str) -> None: """Check if clean_est_string works as expected.""" - result = clean_est_string(input_string) + result = DeaEnergyStorageV10Parser._clean_est_string(input_string) assert isinstance(result, str) assert result == expected_string @@ -194,7 +189,7 @@ def test_standardize_units(self) -> None: ) input_dataframe[["par", "unit"]] = ( input_dataframe[["par", "unit"]] - .apply(standardize_units, axis=1) + .apply(DeaEnergyStorageV10Parser._standardize_units, axis=1) .reset_index(drop=True) ) comparison_df = input_dataframe.compare(expected_dataframe) @@ -205,9 +200,9 @@ def test_filter_parameters_true_false(self) -> None: dataframe = pandas.DataFrame( {"par": ["technical lifetime", "other"], "Technology": ["A", "B"]} ) - filtered = filter_parameters(dataframe, True) + filtered = DeaEnergyStorageV10Parser._filter_parameters(dataframe, True) assert all(filtered["par"] == "technical lifetime") - filtered2 = filter_parameters(dataframe, False) + filtered2 = DeaEnergyStorageV10Parser._filter_parameters(dataframe, False) assert len(filtered2) == 2 @pytest.mark.webarchive # type: ignore @@ -225,6 +220,8 @@ def test_build_technology_collection(self, tmp_path: pathlib.Path) -> None: } ) sources_path = pathlib.Path(tmp_path, "sources.json") - tech_collection = build_technology_collection(dataframe, sources_path) + tech_collection = DeaEnergyStorageV10Parser._build_technology_collection( + dataframe, sources_path + ) assert len(tech_collection.technologies) == 1 assert "specific_investment" in tech_collection.technologies[0].parameters diff --git a/test/test_parser_commons.py b/test/test_parser_commons.py index 4790d84a..07b97644 100644 --- a/test/test_parser_commons.py +++ b/test/test_parser_commons.py @@ -14,15 +14,27 @@ class TestCommonsUtils: def test_defaults_and_flag(self, monkeypatch: typing.Any) -> None: """Check if parse_input_arguments works when both default arg and the store_true flag are provided.""" - monkeypatch.setattr("sys.argv", ["prog", "--num_digits", "2", "--store_source"]) + monkeypatch.setattr( + "sys.argv", + [ + "prog", + "--num_digits", + "2", + "--archive_source", + "--input_file_name", + "file_name", + ], + ) args = CommonsParser.parse_input_arguments() assert args.num_digits == 2 - assert args.store_source is True + assert args.archive_source is True + assert args.input_file_name == "file_name" def test_default_values_when_not_provided(self, monkeypatch: typing.Any) -> None: """Check if parse_input_arguments works when no args are provided (so defaults are used).""" # no args -> defaults apply - monkeypatch.setattr("sys.argv", ["prog"]) + monkeypatch.setattr("sys.argv", ["prog", "--input_file_name", "file_name"]) args = CommonsParser.parse_input_arguments() + assert args.input_file_name == "file_name" assert args.num_digits == 4 # default from the function - assert args.store_source is False + assert args.archive_source is False diff --git a/test/test_parser_data_accessor.py b/test/test_parser_data_accessor.py index f7b9cbec..eda5a677 100644 --- a/test/test_parser_data_accessor.py +++ b/test/test_parser_data_accessor.py @@ -48,25 +48,60 @@ def test_get_latest_version_string_raises_error( DataAccessor.get_latest_version_string(path_list) def test_access_data_dea_energy_storage(self) -> None: - """Test access_data.""" - data_accessor = DataAccessor( - data_source_name="dea_energy_storage", data_version="v10" - ) + """Test load data for dea_energy_storage.""" + data_accessor = DataAccessor(data_source="dea_energy_storage", version="v10") data_package = data_accessor.load() - assert data_accessor.data_source_name == DataSourceName.DEA_ENERGY_STORAGE - assert data_accessor.data_version == "v10" + assert data_accessor.data_source == DataSourceName.DEA_ENERGY_STORAGE + assert data_accessor.version == "v10" assert data_package is not None assert data_package.technologies is not None assert data_package.sources is not None + assert data_package.name == "dea_energy_storage" + assert data_package.version == "v10" assert len(data_package.technologies) == 136 + def test_access_data_dea_energy_storage_validation(self) -> None: + """Test load data for dea_energy_storage with a wrong data set name.""" + with pytest.raises(ValueError): + DataAccessor(data_source="dea_energy", version="v10") + + def test_parse_and_access_data_dea_energy_storage(self) -> None: + """Test parse and load data for dea_energy_storage.""" + data_accessor = DataAccessor(data_source="dea_energy_storage", version="v10") + file_name = "Technology_datasheet_for_energy_storage.xlsx" + data_accessor.parse(file_name, num_digits=3, filter_params=True) + data_package = data_accessor.load() + + assert data_accessor.data_source == DataSourceName.DEA_ENERGY_STORAGE + assert data_accessor.version == "v10" + assert data_package is not None + assert data_package.technologies is not None + assert data_package.sources is not None + assert data_package.name == "dea_energy_storage" + assert data_package.version == "v10" + assert len(data_package.technologies) == 136 + + def test_parse_and_access_data_manual_input_usa(self) -> None: + """Test parse and load data for manual_input_usa.csv.""" + data_accessor = DataAccessor(data_source="manual_input_usa", version="v0.13.4") + file_name = "manual_input_usa.csv" + data_accessor.parse(file_name, num_digits=3) + data_package = data_accessor.load() + + assert data_accessor.data_source == DataSourceName.MANUAL_INPUT_USA + assert data_accessor.version == "v0.13.4" + assert data_package is not None + assert data_package.technologies is not None + assert data_package.sources is not None + assert data_package.name == "manual_input_usa" + assert data_package.version == "v0.13.4" + assert len(data_package.technologies) == 85 + def test_load_raises_value_error_for_invalid_version(self) -> None: """Test if load raises ValueError for an invalid version.""" with pytest.raises( ValueError, match="Data source version 'v11' not found. The latest available version is v10.", ): - DataAccessor( - data_source_name="dea_energy_storage", data_version="v11" - ).load() + DataAccessor(data_source="dea_energy_storage", version="v11").load()