From aa968586d91f261412c383c9f580de3683a2a624 Mon Sep 17 00:00:00 2001 From: Vijay Vammi Date: Thu, 23 May 2024 05:15:02 +0100 Subject: [PATCH 1/4] fix: identify on failure behaviours and improve sdk API --- docs/concepts/map.md | 6 +- docs/configurations/overview.md | 50 +--- docs/reference.md | 72 ++--- examples/01-tasks/stub.py | 5 +- examples/02-sequential/on_failure_fail.py | 2 +- .../03-parameters/static_parameters_python.py | 1 - examples/07-map/custom_reducer.py | 1 - examples/07-map/map.py | 1 - mkdocs.yml | 2 +- runnable/sdk.py | 251 +++++++++++------- tests/test_examples.py | 4 +- 11 files changed, 201 insertions(+), 194 deletions(-) diff --git a/docs/concepts/map.md b/docs/concepts/map.md index aad92874..894f88c5 100644 --- a/docs/concepts/map.md +++ b/docs/concepts/map.md @@ -12,21 +12,21 @@ to run on every hyper parameter. success([Success]):::green subgraph one[Parameter 1] - process_chunk1([Process Chunk]):::yellow + process_chunk1([Train model]):::yellow success_chunk1([Success]):::yellow process_chunk1 --> success_chunk1 end subgraph two[Parameter ...] - process_chunk2([Process Chunk]):::yellow + process_chunk2([Train model]):::yellow success_chunk2([Success]):::yellow process_chunk2 --> success_chunk2 end subgraph three[Parameter n] - process_chunk3([Process Chunk]):::yellow + process_chunk3([Train model]):::yellow success_chunk3([Success]):::yellow process_chunk3 --> success_chunk3 diff --git a/docs/configurations/overview.md b/docs/configurations/overview.md index 6ff83205..47ea5a5f 100644 --- a/docs/configurations/overview.md +++ b/docs/configurations/overview.md @@ -1,49 +1,3 @@ -**runnable** is designed to make effective collaborations between data scientists/researchers -and infrastructure engineers. +**runnable** is designed to enable the pipeline execution in varied computational environments. -All the features described in the [concepts](../concepts/the-big-picture.md) are -aimed at the *research* side of data science projects while configurations add *scaling* features to them. - - -Configurations are presented during the execution: - -For ```yaml``` based pipeline, use the ```--config-file, -c``` option in the [runnable CLI](../usage.md/#usage). - -For [python SDK](../sdk.md/#runnable.Pipeline.execute), use the ```configuration_file``` option or via -environment variable ```runnable_CONFIGURATION_FILE``` - -## Default configuration - -```yaml ---8<-- "examples/configs/default.yaml" -``` - -1. Execute the pipeline in the local compute environment. -2. The run log is not persisted but present in-memory and flushed at the end of execution. -3. No catalog functionality, all catalog operations are effectively no-op. -4. No secrets functionality, all secrets are effectively no-op. -5. No experiment tracking tools, all interactions with experiment tracking tools are effectively no-op. -Run log still captures the metrics, but are not passed to the experiment tracking tools. - -The default configuration for all the pipeline executions runs on the -[local compute](executors/local.md), using a -[buffered run log](run-log.md/#buffered) store with -[no catalog](catalog.md/#do-nothing) or -[secrets](secrets.md/#do-nothing) or -[experiment tracking functionality](experiment-tracking.md/). - - - -## Format - -The configuration file is in yaml format and the typical structure is: - -```yaml -service: - type: service provider - config: - ... -``` - -where service is one of ```executor```, ```catalog```, ```experiment_tracker```, - ```secrets``` or ```run_log_store```. +This is controlled by a ```configuration``` file without changing either the domain code or the pipeline definition. diff --git a/docs/reference.md b/docs/reference.md index 0104737c..6d162633 100644 --- a/docs/reference.md +++ b/docs/reference.md @@ -1,3 +1,8 @@ +Please accompany the reference with ```examples``` from +[the repo](https://github.com/AstraZeneca/runnable-core). + + + ## PythonTask === "sdk" @@ -75,18 +80,40 @@
-## Catalog +## ShellTask === "sdk" - ::: runnable.Catalog + ::: runnable.ShellTask options: show_root_heading: true show_bases: false + show_docstring_description: true heading_level: 3 === "yaml" + Attributes: + + - ```name```: the name of the task + - ```command```: the path to the notebook relative to the project root. + - ```next```: the next node to call if the function succeeds. Use ```success``` to terminate + the pipeline successfully or ```fail``` to terminate with fail. + - ```on_failure```: The next node in case of failure. + - ```catalog```: mapping of cataloging items + - ```overrides```: mapping of step overrides from global configuration. + + ```yaml + dag: + steps: + name: <> + type: task + command: <> + next: <> + on_failure: <> + catalog: # Any cataloging to be done. + overrides: # mapping of overrides of global configuration + ```
@@ -108,16 +135,14 @@
- -## ShellTask +## Catalog === "sdk" - ::: runnable.ShellTask + ::: runnable.Catalog options: show_root_heading: true show_bases: false - show_docstring_description: true heading_level: 3 === "yaml" @@ -128,30 +153,29 @@ - -## Parallel - +## Pipeline === "sdk" - ::: runnable.Parallel + ::: runnable.Pipeline options: show_root_heading: true show_bases: false show_docstring_description: true heading_level: 3 + members: + - execute === "yaml" -
+## Parallel -## Map === "sdk" - ::: runnable.Map + ::: runnable.Parallel options: show_root_heading: true show_bases: false @@ -160,31 +184,15 @@ === "yaml" -
- - - -::: runnable.Success - options: - show_root_heading: true - show_bases: false - show_docstring_description: true - -
-::: runnable.Fail - options: - show_root_heading: true - show_bases: false - show_docstring_description: true
-## Pipeline +## Map === "sdk" - ::: runnable.Pipeline + ::: runnable.Map options: show_root_heading: true show_bases: false @@ -192,3 +200,5 @@ heading_level: 3 === "yaml" + +
diff --git a/examples/01-tasks/stub.py b/examples/01-tasks/stub.py index 8899fb30..a61ed462 100644 --- a/examples/01-tasks/stub.py +++ b/examples/01-tasks/stub.py @@ -29,10 +29,7 @@ def main(): step3 = Stub(name="step3", terminate_with_success=True) - pipeline = Pipeline( - steps=[step1, step2, step3], - add_terminal_nodes=True, - ) + pipeline = Pipeline(steps=[step1, step2, step3]) pipeline.execute() diff --git a/examples/02-sequential/on_failure_fail.py b/examples/02-sequential/on_failure_fail.py index ef6fefe2..770c272d 100644 --- a/examples/02-sequential/on_failure_fail.py +++ b/examples/02-sequential/on_failure_fail.py @@ -31,7 +31,7 @@ def main(): step_1.on_failure = step_4.name pipeline = Pipeline( - steps=[step_1, step_2, step_3, [step_4]], + steps=[step_1, step_2, step_3], ) pipeline.execute() diff --git a/examples/03-parameters/static_parameters_python.py b/examples/03-parameters/static_parameters_python.py index 6d783150..0a38c7b9 100644 --- a/examples/03-parameters/static_parameters_python.py +++ b/examples/03-parameters/static_parameters_python.py @@ -64,7 +64,6 @@ def read_initial_params_as_json( pipeline = Pipeline( steps=[read_params_as_pydantic, read_params_as_json], - add_terminal_nodes=True, ) _ = pipeline.execute(parameters_file="examples/common/initial_parameters.yaml") diff --git a/examples/07-map/custom_reducer.py b/examples/07-map/custom_reducer.py index 9d178cfa..cb3b4314 100644 --- a/examples/07-map/custom_reducer.py +++ b/examples/07-map/custom_reducer.py @@ -85,7 +85,6 @@ def iterable_branch(execute: bool = True): pipeline = Pipeline( steps=[process_chunk_task_python, process_chunk_task_notebook, process_chunk_task_shell, read_chunk], - add_terminal_nodes=True, ) if execute: diff --git a/examples/07-map/map.py b/examples/07-map/map.py index e8afb0e8..ca6fffee 100644 --- a/examples/07-map/map.py +++ b/examples/07-map/map.py @@ -88,7 +88,6 @@ def iterable_branch(execute: bool = True): pipeline = Pipeline( steps=[process_chunk_task_python, process_chunk_task_notebook, process_chunk_task_shell, read_chunk], - add_terminal_nodes=True, ) if execute: diff --git a/mkdocs.yml b/mkdocs.yml index 76c37971..ab5ba67b 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -126,7 +126,7 @@ nav: - "Map": "concepts/map.md" - "Reproducibility": "concepts/run-log.md" - "Run pipeline": - - "Overview": "configurations/overview.md" + - "configurations/overview.md" - "Executor": - "local": "configurations/executors/local.md" - "mocked": "configurations/executors/mocked.md" diff --git a/runnable/sdk.py b/runnable/sdk.py index dff11912..41c92664 100644 --- a/runnable/sdk.py +++ b/runnable/sdk.py @@ -61,11 +61,9 @@ class Catalog(BaseModel): put (List[str]): List of glob patterns to put into central catalog from the compute data folder. Examples: - >>> from runnable import Catalog, Task + >>> from runnable import Catalog >>> catalog = Catalog(compute_data_folder="/path/to/data", get=["*.csv"], put=["*.csv"]) - >>> task = Task(name="task", catalog=catalog, command="echo 'hello'") - """ model_config = ConfigDict(extra="forbid") # Need to be for command, would be validated later @@ -143,50 +141,7 @@ def create_node(self) -> TraversalNode: class BaseTask(BaseTraversal): """ - An execution node of the pipeline. - Please refer to [concepts](concepts/task.md) for more information. - - Attributes: - name (str): The name of the node. - command (str): The command to execute. - - - For python functions, [dotted path](concepts/task.md/#python_functions) to the function. - - For shell commands: command to execute in the shell. - - For notebooks: path to the notebook. - command_type (str): The type of command to execute. - Can be one of "shell", "python", or "notebook". - catalog (Optional[Catalog]): The catalog to sync data from/to. - Please see Catalog about the structure of the catalog. - overrides (Dict[str, Any]): Any overrides to the command. - Individual tasks can override the global configuration config by referring to the - specific override. - - For example, - ### Global configuration - ```yaml - executor: - type: local-container - config: - docker_image: "runnable/runnable:latest" - overrides: - custom_docker_image: - docker_image: "runnable/runnable:custom" - ``` - ### Task specific configuration - ```python - task = Task(name="task", command="echo 'hello'", command_type="shell", - overrides={'local-container': custom_docker_image}) - ``` - notebook_output_path (Optional[str]): The path to save the notebook output. - Only used when command_type is 'notebook', defaults to command+_out.ipynb - optional_ploomber_args (Optional[Dict[str, Any]]): Any optional ploomber args. - Only used when command_type is 'notebook', defaults to {} - output_cell_tag (Optional[str]): The tag of the output cell. - Only used when command_type is 'notebook', defaults to "runnable_output" - terminate_with_failure (bool): Whether to terminate the pipeline with a failure after this node. - terminate_with_success (bool): Whether to terminate the pipeline with a success after this node. - on_failure (str): The name of the node to execute if the step fails. - + Base task type which has catalog, overrides, returns and secrets. """ catalog: Optional[Catalog] = Field(default=None, alias="catalog") @@ -220,12 +175,50 @@ def create_node(self) -> TaskNode: class PythonTask(BaseTask): """ An execution node of the pipeline of python functions. + Please refer to [concepts](concepts/task.md/#python_functions) for more information. Attributes: name (str): The name of the node. function (callable): The function to execute. - catalog (Optional[Catalog]): The catalog to sync data from/to. - Please see Catalog about the structure of the catalog. + + terminate_with_success (bool): Whether to terminate the pipeline with a success after this node. + Defaults to False. + terminate_with_failure (bool): Whether to terminate the pipeline with a failure after this node. + Defaults to False. + + on_failure (str): The name of the node to execute if the step fails. + + returns List[Union[str, TaskReturns]] : A list of the names of variables to return from the task. + The names should match the order of the variables returned by the function. + + ```TaskReturns```: can be JSON friendly variables, objects or metrics. + + By default, all variables are assumed to be JSON friendly and will be serialized to JSON. + Pydantic models are readily supported and will be serialized to JSON. + + To return a python object, please use ```pickled()```. + It is advised to use ```pickled()``` for big JSON friendly variables. + + For example, + ```python + from runnable import pickled + + def f(): + ... + x = 1 + return x, df # A simple JSON friendly variable and a python object. + + task = PythonTask(name="task", function=f, returns=["x", pickled(df)])) + ``` + + To mark any JSON friendly variable as a ```metric```, please use ```metric(x)```. + Metric variables should be JSON friendly and can be treated just like any other parameter. + + catalog Optional[Catalog]: The files sync data from/to, refer to Catalog. + + secrets List[str]: List of secrets to pass to the task. They are exposed as environment variables + and removed after execution. + overrides (Dict[str, Any]): Any overrides to the command. Individual tasks can override the global configuration config by referring to the specific override. @@ -246,11 +239,6 @@ class PythonTask(BaseTask): task = PythonTask(name="task", function="function'", overrides={'local-container': custom_docker_image}) ``` - - terminate_with_failure (bool): Whether to terminate the pipeline with a failure after this node. - terminate_with_success (bool): Whether to terminate the pipeline with a success after this node. - on_failure (str): The name of the node to execute if the step fails. - """ function: Callable = Field(exclude=True) @@ -269,15 +257,52 @@ def command(self) -> str: class NotebookTask(BaseTask): """ - An execution node of the pipeline of type notebook. - Please refer to [concepts](concepts/task.md) for more information. + An execution node of the pipeline of notebook. + Please refer to [concepts](concepts/task.md/#notebooks) for more information. + + We internally use [Ploomber engine](https://github.com/ploomber/ploomber-engine) to execute the notebook. Attributes: name (str): The name of the node. - notebook: The path to the notebook - catalog (Optional[Catalog]): The catalog to sync data from/to. - Please see Catalog about the structure of the catalog. - returns: A list of the names of variables to return from the notebook. + notebook (str): The path to the notebook relative the project root. + optional_ploomber_args (Dict[str, Any]): Any optional ploomber args, please refer to + [Ploomber engine](https://github.com/ploomber/ploomber-engine) for more information. + + terminate_with_success (bool): Whether to terminate the pipeline with a success after this node. + Defaults to False. + terminate_with_failure (bool): Whether to terminate the pipeline with a failure after this node. + Defaults to False. + + on_failure (str): The name of the node to execute if the step fails. + + returns List[Union[str, TaskReturns]] : A list of the names of variables to return from the task. + The names should match the order of the variables returned by the function. + + ```TaskReturns```: can be JSON friendly variables, objects or metrics. + + By default, all variables are assumed to be JSON friendly and will be serialized to JSON. + Pydantic models are readily supported and will be serialized to JSON. + + To return a python object, please use ```pickled()```. + It is advised to use ```pickled()``` for big JSON friendly variables. + + For example, + ```python + from runnable import pickled + + # assume, example.ipynb is the notebook with df and x as variables in some cells. + + task = Notebook(name="task", notebook="example.ipynb", returns=["x", pickled(df)])) + ``` + + To mark any JSON friendly variable as a ```metric```, please use ```metric(x)```. + Metric variables should be JSON friendly and can be treated just like any other parameter. + + catalog Optional[Catalog]: The files sync data from/to, refer to Catalog. + + secrets List[str]: List of secrets to pass to the task. They are exposed as environment variables + and removed after execution. + overrides (Dict[str, Any]): Any overrides to the command. Individual tasks can override the global configuration config by referring to the specific override. @@ -295,18 +320,9 @@ class NotebookTask(BaseTask): ``` ### Task specific configuration ```python - task = NotebookTask(name="task", notebook="evaluation.ipynb", + task = NotebookTask(name="task", notebook="example.ipynb", overrides={'local-container': custom_docker_image}) ``` - notebook_output_path (Optional[str]): The path to save the notebook output. - Only used when command_type is 'notebook', defaults to command+_out.ipynb - optional_ploomber_args (Optional[Dict[str, Any]]): Any optional ploomber args. - Only used when command_type is 'notebook', defaults to {} - - terminate_with_failure (bool): Whether to terminate the pipeline with a failure after this node. - terminate_with_success (bool): Whether to terminate the pipeline with a success after this node. - on_failure (str): The name of the node to execute if the step fails. - """ notebook: str = Field(serialization_alias="command") @@ -319,15 +335,33 @@ def command_type(self) -> str: class ShellTask(BaseTask): """ - An execution node of the pipeline of type shell. - Please refer to [concepts](concepts/task.md) for more information. + An execution node of the pipeline of shell script. + Please refer to [concepts](concepts/task.md/#shell) for more information. + Attributes: name (str): The name of the node. - command: The shell command to execute. - catalog (Optional[Catalog]): The catalog to sync data from/to. - Please see Catalog about the structure of the catalog. - returns: A list of the names of variables to capture from environment variables of shell. + command (str): The path to the notebook relative the project root. + terminate_with_success (bool): Whether to terminate the pipeline with a success after this node. + Defaults to False. + terminate_with_failure (bool): Whether to terminate the pipeline with a failure after this node. + Defaults to False. + + on_failure (str): The name of the node to execute if the step fails. + + returns List[str] : A list of the names of environment variables to collect from the task. + + The names should match the order of the variables returned by the function. + Shell based tasks can only return JSON friendly variables. + + To mark any JSON friendly variable as a ```metric```, please use ```metric(x)```. + Metric variables should be JSON friendly and can be treated just like any other parameter. + + catalog Optional[Catalog]: The files sync data from/to, refer to Catalog. + + secrets List[str]: List of secrets to pass to the task. They are exposed as environment variables + and removed after execution. + overrides (Dict[str, Any]): Any overrides to the command. Individual tasks can override the global configuration config by referring to the specific override. @@ -345,14 +379,10 @@ class ShellTask(BaseTask): ``` ### Task specific configuration ```python - task = ShellTask(name="task", command="exit 0", + task = ShellTask(name="task", command="export x=1", overrides={'local-container': custom_docker_image}) ``` - terminate_with_failure (bool): Whether to terminate the pipeline with a failure after this node. - terminate_with_success (bool): Whether to terminate the pipeline with a success after this node. - on_failure (str): The name of the node to execute if the step fails. - """ command: str = Field(alias="command") @@ -364,16 +394,20 @@ def command_type(self) -> str: class Stub(BaseTraversal): """ - A node that does nothing. + A node that passes through the pipeline with no action. Just like ```pass``` in Python. + Please refer to [concepts](concepts/task.md/#stub) for more information. A stub node can tak arbitrary number of arguments. - Please refer to [concepts](concepts/stub.md) for more information. Attributes: name (str): The name of the node. - terminate_with_failure (bool): Whether to terminate the pipeline with a failure after this node. + command (str): The path to the notebook relative the project root. terminate_with_success (bool): Whether to terminate the pipeline with a success after this node. + Defaults to False. + terminate_with_failure (bool): Whether to terminate the pipeline with a failure after this node. + Defaults to False. + on_failure (str): The name of the node to execute if the step fails. """ model_config = ConfigDict(extra="ignore") @@ -422,12 +456,13 @@ class Map(BaseTraversal): Please refer to [concepts](concepts/map.md) for more information. Attributes: - branch: The pipeline to execute for each item. + branch (Pipeline): The pipeline to execute for each item. - iterate_on: The name of the parameter to iterate over. + iterate_on (str): The name of the parameter to iterate over. The parameter should be defined either by previous steps or statically at the start of execution. - iterate_as: The name of the iterable to be passed to functions. + iterate_as (str): The name of the iterable to be passed to functions. + reducer (Callable): The function to reduce the results of the branches. overrides (Dict[str, Any]): Any overrides to the command. @@ -510,29 +545,44 @@ def create_node(self) -> FailNode: class Pipeline(BaseModel): """ - A Pipeline is a directed acyclic graph of Steps that define a workflow. + A Pipeline is a sequence of Steps. Attributes: - steps (List[Stub | PythonTask | NotebookTask | ShellTask | Parallel | Map | Success | Fail]): + steps (List[Stub | PythonTask | NotebookTask | ShellTask | Parallel | Map]]): A list of Steps that make up the Pipeline. - start_at (Stub | Task | Parallel | Map): The name of the first Step in the Pipeline. + + The order of steps is important as it determines the order of execution. + Any on failure behavior should the first step in ```on_failure``` pipelines. + + + + on_failure (List[List[Pipeline], optional): A list of Pipelines to execute in case of failure. + + For example, for the below pipeline: + step1 >> step2 + and step1 to reach step3 in case of failure. + + failure_pipeline = Pipeline(steps=[step1, step3]) + + pipeline = Pipeline(steps=[step1, step2, on_failure=[failure_pipeline]) + name (str, optional): The name of the Pipeline. Defaults to "". description (str, optional): A description of the Pipeline. Defaults to "". - add_terminal_nodes (bool, optional): Whether to add terminal nodes to the Pipeline. Defaults to True. - The default behavior is to add "success" and "fail" nodes to the Pipeline. - To add custom success and fail nodes, set add_terminal_nodes=False and create success - and fail nodes manually. + The pipeline implicitly add success and fail nodes. """ - steps: List[Union[StepType, List[StepType]]] + steps: List[Union[StepType, List["Pipeline"]]] name: str = "" description: str = "" - add_terminal_nodes: bool = True # Adds "success" and "fail" nodes internal_branch_name: str = "" + @property + def add_terminal_nodes(self) -> bool: + return True + _dag: graph.Graph = PrivateAttr() model_config = ConfigDict(extra="forbid") @@ -590,6 +640,7 @@ def model_post_init(self, __context: Any) -> None: Any definition of pipeline should have one node that terminates with success. """ # TODO: Bug with repeat names + # TODO: https://github.com/AstraZeneca/runnable/issues/156 success_path: List[StepType] = [] on_failure_paths: List[List[StepType]] = [] @@ -598,7 +649,7 @@ def model_post_init(self, __context: Any) -> None: if isinstance(step, (Stub, PythonTask, NotebookTask, ShellTask, Parallel, Map)): success_path.append(step) continue - on_failure_paths.append(step) + # on_failure_paths.append(step) if not success_path: raise Exception("There should be some success path") @@ -654,21 +705,19 @@ def execute( Traverse and execute all the steps of the pipeline, eg. [local execution](configurations/executors/local.md). - Or create the ```yaml``` representation of the pipeline for other executors. + Or create the representation of the pipeline for other executors. Please refer to [concepts](concepts/executor.md) for more information. Args: configuration_file (str, optional): The path to the configuration file. Defaults to "". - The configuration file can be overridden by the environment variable runnable_CONFIGURATION_FILE. + The configuration file can be overridden by the environment variable RUNNABLE_CONFIGURATION_FILE. run_id (str, optional): The ID of the run. Defaults to "". tag (str, optional): The tag of the run. Defaults to "". Use to group multiple runs. parameters_file (str, optional): The path to the parameters file. Defaults to "". - use_cached (str, optional): Whether to use cached results. Defaults to "". - Provide the run_id of the older execution to recover. log_level (str, optional): The log level. Defaults to defaults.LOG_LEVEL. """ diff --git a/tests/test_examples.py b/tests/test_examples.py index 974a4263..4e338a45 100644 --- a/tests/test_examples.py +++ b/tests/test_examples.py @@ -73,8 +73,8 @@ def argo_context(): ("01-tasks/scripts", False, []), ("01-tasks/stub", False, []), ("02-sequential/default_fail", True, []), - ("02-sequential/on_failure_fail", True, []), - ("02-sequential/on_failure_succeed", False, []), + # ("02-sequential/on_failure_fail", True, []), # need https://github.com/AstraZeneca/runnable/issues/156 + # ("02-sequential/on_failure_succeed", False, []), # https://github.com/AstraZeneca/runnable/issues/156 ("02-sequential/traversal", False, []), ("03-parameters/passing_parameters_notebook", False, []), ("03-parameters/passing_parameters_python", False, []), From 5d12a09cd948648326fc59e8b4562841ad3af8a2 Mon Sep 17 00:00:00 2001 From: Vijay Vammi Date: Tue, 4 Jun 2024 21:42:51 +0100 Subject: [PATCH 2/4] docs: comparison with metaflow --- docs/configurations/overview.md | 5 +- examples/comparisions/README.md | 1 - examples/comparisons/README.md | 66 + examples/comparisons/metaflow/main.py | 127 + examples/comparisons/metaflow/parameters.json | 46 + examples/comparisons/runnable/main.py | 283 ++ .../comparisons/runnable/runnable_params.yaml | 41 + examples/comparisons/source.py | 148 + poetry.lock | 2405 ++++++++++------- pyproject.toml | 66 +- 10 files changed, 2247 insertions(+), 941 deletions(-) delete mode 100644 examples/comparisions/README.md create mode 100644 examples/comparisons/README.md create mode 100644 examples/comparisons/metaflow/main.py create mode 100644 examples/comparisons/metaflow/parameters.json create mode 100644 examples/comparisons/runnable/main.py create mode 100644 examples/comparisons/runnable/runnable_params.yaml create mode 100644 examples/comparisons/source.py diff --git a/docs/configurations/overview.md b/docs/configurations/overview.md index 47ea5a5f..fed9ee7f 100644 --- a/docs/configurations/overview.md +++ b/docs/configurations/overview.md @@ -1,3 +1,2 @@ -**runnable** is designed to enable the pipeline execution in varied computational environments. - -This is controlled by a ```configuration``` file without changing either the domain code or the pipeline definition. +**runnable** is designed to enable the pipeline execution in varied computational environments without changing the +infrastructure patterns. diff --git a/examples/comparisions/README.md b/examples/comparisions/README.md deleted file mode 100644 index 769790f9..00000000 --- a/examples/comparisions/README.md +++ /dev/null @@ -1 +0,0 @@ -To avoid any subjective bias in comparisons, we take the same example and implement it in alternate frameworks. diff --git a/examples/comparisons/README.md b/examples/comparisons/README.md new file mode 100644 index 00000000..d0295f48 --- /dev/null +++ b/examples/comparisons/README.md @@ -0,0 +1,66 @@ +In this section, we take the familiar MNIST problem and implement it in different orchestration frameworks. + +The [original source code](https://github.com/pytorch/examples/blob/main/mnist/main.py) is shown in [source.py](source.py) + +The individual directories are orchestration specific implementations. + +## Notes + +For the purpose of comparisons, consider the following function: + +```python +def func(x: int, y:pd.DataFrame): + # do something with the inputs. + # Write a file called data.csv for downstream steps. + # return an output. + return z +``` + +It takes *inputs* x (integer) and y (a pandas dataframe or any other object), does some processing and writes a file to local disk and returns z (a simple datatype or object) + +The function in wrapped in runnable as: + +```python +from somewhere import func +from runnable import PythonTask, pickled, Catalog + +# instruction to move the file data.csv from local disk to a blob store +catalog = Catalog(put=["data.csv"]) +# Call the function, func and expect it to return "z" while moving the files +# It is expected that "x" and "y" are parameters set by some upstream step. +# If the return parameter is an object, use pickled("z") +func_task = PythonTask(name="function", function=func, returns=["z"], catalog=catalog) +``` + + +### metaflow + +The function in metaflow's step would rougly be: + +```python +from metaflow import step, conda, FlowSpec + +class Flow(FlowSpec) + + @conda(libraries={...}) + @step + def func_step(self): + from somewhere import func + self.z = func(self.x, self.y) + + # Use metaflow.S3 to move files + # Move to next step. + ... +``` + +- The API between ```runnable``` and ```metaflow``` are comparable. +- There is a mechanism for functions to accept/return parameters. + +The differences between both: + +- dependency management in ```runnable``` is expected to be user driven and "pythonic" (venv, poetry etc) while metaflow packages provides a per-step (or flow level) libraries. +- data flow between steps is by an instruction in runnable to ```glob``` files in +local disk and present them in the same structure to downstream steps. ```metaflow``` needs this to be via code. +- runnable allows ```notebooks``` to be a task, allowing simple data types to be +parameters while collecting objects from the notebook execution. +- metaflow has a *platform* side to it and comes up with prescribed infrastructure while runnable is, in many ways, a transpiler to your chosen infrastructure. diff --git a/examples/comparisons/metaflow/main.py b/examples/comparisons/metaflow/main.py new file mode 100644 index 00000000..68724bd7 --- /dev/null +++ b/examples/comparisons/metaflow/main.py @@ -0,0 +1,127 @@ +# Code as seen here: https://outerbounds.com/docs/use-pytorch-with-metaflow/ + +# ruff: noqa + +import torch +import torch.nn as nn +import torch.nn.functional as F +from metaflow import FlowSpec, Parameter, conda_base, step +from torch_utilities import Net, get_data_loaders, test, train +from torchvision import datasets, transforms + + +class Net(nn.Module): + def __init__(self): + super(Net, self).__init__() + self.conv1 = nn.Conv2d(1, 32, 3, 1) + self.conv2 = nn.Conv2d(32, 64, 3, 1) + self.dropout1 = nn.Dropout(0.25) + self.dropout2 = nn.Dropout(0.5) + self.fc1 = nn.Linear(9216, 128) + self.fc2 = nn.Linear(128, 10) + + def forward(self, x): + x = self.conv1(x) + x = F.relu(x) + x = self.conv2(x) + x = F.relu(x) + x = F.max_pool2d(x, 2) + x = self.dropout1(x) + x = torch.flatten(x, 1) + x = self.fc1(x) + x = F.relu(x) + x = self.dropout2(x) + x = self.fc2(x) + output = F.log_softmax(x, dim=1) + return output + + +def train(model, train_loader, optimizer, epoch): + model.train() + for idx, (data, target) in enumerate(train_loader): + optimizer.zero_grad() + output = model(data) + loss = F.nll_loss(output, target) + loss.backward() + optimizer.step() + if idx * len(data) % 10000 == 0: + out = "Train Epoch: " + "{} [{}/{} ({:.0f}%)]\tLoss: {:.6f}".format( + epoch, idx * len(data), len(train_loader.dataset), 100.0 * idx / len(train_loader), loss.item() + ) + print(out) + + +def test(model, test_loader): + model.eval() + test_loss = 0 + correct = 0 + with torch.no_grad(): + for data, target in test_loader: + output = model(data) + test_loss += F.nll_loss(output, target, reduction="sum").item() + pred = output.argmax(dim=1, keepdim=True) + correct += pred.eq(target.view_as(pred)).sum().item() + return correct / len(test_loader.dataset) + + +def get_data_loaders(name="train"): + transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,))]) + if name == "train": + dataset = datasets.MNIST("../data", train=True, download=True, transform=transform) + train_args = {"batch_size": 32} + return dataset, train_args + elif name == "test": + dataset = datasets.MNIST("../data", train=False, transform=transform) + test_args = {"batch_size": 32} + return dataset, test_args + + +@conda_base(libraries={"pytorch": "1.11.0", "torchvision": "0.12.0"}, python="3.8") +class TorchFlow(FlowSpec): + lr = Parameter("lr", default=0.01) + epochs = Parameter("epochs", default=1) + + # It might be better to user a parameters.json? + # There is an example json in this directory. + + @step + def start(self): + self.next(self.get_data) + + @step + def get_data(self): + import torch + + train_dataset, train_args = get_data_loaders() + test_dataset, test_args = get_data_loaders("test") + self.train_loader = torch.utils.data.DataLoader(train_dataset, **train_args) + self.test_loader = torch.utils.data.DataLoader(test_dataset, **test_args) + self.next(self.fit_model) + + @step + def fit_model(self): + import torch.optim as optim + from torch.optim.lr_scheduler import StepLR + + self.model = Net() + optimizer = optim.Adadelta(self.model.parameters(), lr=self.lr) + scheduler = StepLR(optimizer, step_size=1) + for epoch in range(1, self.epochs + 1): + train(self.model, self.train_loader, optimizer, epoch) + _ = test(self.model, self.test_loader) + scheduler.step() + self.next(self.evaluate_model) + + @step + def evaluate_model(self): + self.test_score = test(self.model, self.test_loader) + print(f"Model scored {100*self.test_score}%") + self.next(self.end) + + @step + def end(self): + pass + + +if __name__ == "__main__": + TorchFlow() diff --git a/examples/comparisons/metaflow/parameters.json b/examples/comparisons/metaflow/parameters.json new file mode 100644 index 00000000..73ac2078 --- /dev/null +++ b/examples/comparisons/metaflow/parameters.json @@ -0,0 +1,46 @@ +{ + "cuda_args": { + "num_workers": 1, + "pin_memory": true, + "shuffle": true + }, + "train_batch_size": { + "num_workers": 1, + "pin_memory": true, + "shuffle": true, + "batch_size": 64 + }, + "test_batch_size": { + "num_workers": 1, + "pin_memory": true, + "shuffle": true, + "batch_size": 1000 + }, + "num_epochs": 14, + "lr": 1, + "gamma": 0.7, + "seed": 1, + "log_interval": 10, + "conv1_params": { + "in_channels": 1, + "out_channels": 32, + "kernel_size": 3, + "stride": 1 + }, + "conv2_params": { + "in_channels": 32, + "out_channels": 64, + "kernel_size": 3, + "stride": 1 + }, + "dropout1": 0.25, + "dropout2": 0.5, + "fc1": [ + 9216, + 128 + ], + "fc2": [ + 128, + 10 + ] +} diff --git a/examples/comparisons/runnable/main.py b/examples/comparisons/runnable/main.py new file mode 100644 index 00000000..3b9d9c36 --- /dev/null +++ b/examples/comparisons/runnable/main.py @@ -0,0 +1,283 @@ +# https://github.com/pytorch/examples/blob/main/mnist/main.py +# The main function is modularized into many smaller functions. + +# ruff: noqa + +""" +The captured data/logs can be found in the.catalog folder. + +tree .catalog/pounded-swanson-0626 +├── data +│   └── MNIST +│   └── raw +│   ├── t10k-images-idx3-ubyte +│   ├── t10k-images-idx3-ubyte.gz +│   ├── t10k-labels-idx1-ubyte +│   ├── t10k-labels-idx1-ubyte.gz +│   ├── train-images-idx3-ubyte +│   ├── train-images-idx3-ubyte.gz +│   ├── train-labels-idx1-ubyte +│   └── train-labels-idx1-ubyte.gz +├── dataloadersJYZ.execution.log +├── device.dill +├── devicetaskJ6P.execution.log +├── mnist_cnn.pt_epoch_1.pt +├── mnist_cnn.pt_epoch_10.pt +├── mnist_cnn.pt_epoch_11.pt +├── mnist_cnn.pt_epoch_12.pt +├── mnist_cnn.pt_epoch_13.pt +├── mnist_cnn.pt_epoch_14.pt +├── mnist_cnn.pt_epoch_2.pt +├── mnist_cnn.pt_epoch_3.pt +├── mnist_cnn.pt_epoch_4.pt +├── mnist_cnn.pt_epoch_5.pt +├── mnist_cnn.pt_epoch_6.pt +├── mnist_cnn.pt_epoch_7.pt +├── mnist_cnn.pt_epoch_8.pt +├── mnist_cnn.pt_epoch_9.pt +├── test_loader.dill +├── train_loader.dill +└── trainingloop0TF.execution.log + +4 directories, 28 files +""" + + +from __future__ import print_function + +# import argparse +from typing import Any, Dict + +import torch +import torch.nn as nn +import torch.nn.functional as F +import torch.optim as optim +from pydantic import BaseModel +from torch.optim.lr_scheduler import StepLR +from torchvision import datasets, transforms + +from runnable import Catalog, Pipeline, PythonTask, pickled + + +# pydantic model for the convolutional layer parameters. +# This is not essential but it makes the code more readable. +class ConvParams(BaseModel): + in_channels: int + out_channels: int + kernel_size: int + stride: int + + +class Net(nn.Module): + # A parameterized version of the Net class would be + # def __init__( + # self, + # conv1_params: ConvParams, + # conv2_params: ConvParams, + # dropout1: float, + # dropout2: float, + # fc1: List[int], + # fc2: List[int], + # ): + # super(Net, self).__init__() + # self.conv1 = nn.Conv2d(**conv1_params.model_dump()) + # self.conv2 = nn.Conv2d(**conv2_params.model_dump()) + # self.dropout1 = nn.Dropout(dropout1) + # self.dropout2 = nn.Dropout(dropout2) + # self.fc1 = nn.Linear(*fc1) + # self.fc2 = nn.Linear(*fc2) + + def __init__(self): + super(Net, self).__init__() + self.conv1 = nn.Conv2d(1, 32, 3, 1) + self.conv2 = nn.Conv2d(32, 64, 3, 1) + self.dropout1 = nn.Dropout(0.25) + self.dropout2 = nn.Dropout(0.5) + self.fc1 = nn.Linear(9216, 128) + self.fc2 = nn.Linear(128, 10) + + def forward(self, x): + x = self.conv1(x) + x = F.relu(x) + x = self.conv2(x) + x = F.relu(x) + x = F.max_pool2d(x, 2) + x = self.dropout1(x) + x = torch.flatten(x, 1) + x = self.fc1(x) + x = F.relu(x) + x = self.dropout2(x) + x = self.fc2(x) + output = F.log_softmax(x, dim=1) + return output + + +# same as the source but with explicit arguments +def train( + model, + device, + train_loader, + optimizer, + epoch, + dry_run: bool = False, + log_interval: int = 10, +): + model.train() + for batch_idx, (data, target) in enumerate(train_loader): + data, target = data.to(device), target.to(device) + optimizer.zero_grad() + output = model(data) + loss = F.nll_loss(output, target) + loss.backward() + optimizer.step() + if batch_idx % log_interval == 0: + print( + "Train Epoch: {} [{}/{} ({:.0f}%)]\tLoss: {:.6f}".format( + epoch, + batch_idx * len(data), + len(train_loader.dataset), + 100.0 * batch_idx / len(train_loader), + loss.item(), + ) + ) + if dry_run: + break + + +def test(model, device, test_loader): + model.eval() + test_loss = 0 + correct = 0 + with torch.no_grad(): + for data, target in test_loader: + data, target = data.to(device), target.to(device) + output = model(data) + test_loss += F.nll_loss(output, target, reduction="sum").item() # sum up batch loss + pred = output.argmax(dim=1, keepdim=True) # get the index of the max log-probability + correct += pred.eq(target.view_as(pred)).sum().item() + + test_loss /= len(test_loader.dataset) + + print( + "\nTest set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\n".format( + test_loss, correct, len(test_loader.dataset), 100.0 * correct / len(test_loader.dataset) + ) + ) + + +# A function to prepare the dataset. +def prepare_dataset(train_batch_size: Dict[str, Any], test_batch_size: Dict[str, Any]): + transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,))]) + dataset1 = datasets.MNIST("data", train=True, download=True, transform=transform) + dataset2 = datasets.MNIST("data", train=False, transform=transform) + train_loader = torch.utils.data.DataLoader(dataset1, **train_batch_size) + test_loader = torch.utils.data.DataLoader(dataset2, **test_batch_size) + + return train_loader, test_loader + + +# A function to identify the device to use. +def get_device(use_cuda: bool = False, use_mps: bool = False, seed: int = 1): + use_cuda = not use_cuda and torch.cuda.is_available() + use_mps = not use_mps and torch.backends.mps.is_available() + + torch.manual_seed(seed) + + if use_cuda: + device = torch.device("cuda") + elif use_mps: + device = torch.device("mps") + else: + device = torch.device("cpu") + + return device + + +def fit_model( + device, + train_loader, + test_loader, + num_epochs: int, + gamma: float = 0.7, + dry_run: bool = False, + lr: float = 1.0, +): + model = Net().to(device) + optimizer = optim.Adadelta(model.parameters(), lr=lr) + + scheduler = StepLR(optimizer, step_size=1, gamma=gamma) + for epoch in range(1, num_epochs + 1): + print(f"Epoch {epoch}") + train(model, device, train_loader, optimizer, epoch, dry_run=dry_run) + test(model, device, test_loader) + scheduler.step() + + torch.save(model.state_dict(), f"mnist_cnn.pt_epoch_{epoch}.pt") + + +def main(): + # device = get_device(args.use_cuda, args.use_mps) + device_task = PythonTask( + name="device_task", + function=get_device, + returns=[pickled("device")], + ) + + data_catalog = Catalog(put=["data/**/*"]) + + # train_loader, test_loader = prepare_dataset() + data_loaders = PythonTask( + name="data_loaders", + function=prepare_dataset, + returns=[pickled("train_loader"), pickled("test_loader")], + catalog=data_catalog, + ) + + train_catalog = Catalog(put=["mnist_cnn.pt_epoch_*"], get=["data/**/*"]) + + # fit_model( + # device, + # train_loader, + # test_loader, + # args.epochs, + # gamma=args.gamma, + # dry_run=args.dry_run, + # lr=args.lr, + # ) + fit_model_task = PythonTask( + name="training_loop", + function=fit_model, + catalog=train_catalog, + terminate_with_success=True, + ) + + pipeline = Pipeline(steps=[device_task, data_loaders, fit_model_task]) + pipeline.execute(parameters_file="examples/comparisons/runnable_params.yaml") + + +if __name__ == "__main__": + # parser = argparse.ArgumentParser(description="PyTorch MNIST Example") + # parser.add_argument( + # "--batch-size", type=int, default=64, metavar="N", help="input batch size for training (default: 64)" + # ) + # parser.add_argument( + # "--test-batch-size", type=int, default=1000, metavar="N", help="input batch size for testing (default: 1000)" + # ) + # parser.add_argument("--epochs", type=int, default=14, metavar="N", help="number of epochs to train (default: 14)") + # parser.add_argument("--lr", type=float, default=1.0, metavar="LR", help="learning rate (default: 1.0)") + # parser.add_argument("--gamma", type=float, default=0.7, metavar="M", help="Learning rate step gamma (default: 0.7)") + # parser.add_argument("--no-cuda", action="store_true", default=False, help="disables CUDA training") + # parser.add_argument("--no-mps", action="store_true", default=False, help="disables macOS GPU training") + # parser.add_argument("--dry-run", action="store_true", default=False, help="quickly check a single pass") + # parser.add_argument("--seed", type=int, default=1, metavar="S", help="random seed (default: 1)") + # parser.add_argument( + # "--log-interval", + # type=int, + # default=10, + # metavar="N", + # help="how many batches to wait before logging training status", + # ) + # parser.add_argument("--save-model", action="store_true", default=False, help="For Saving the current Model") + # args = parser.parse_args() + # main(args) + main() diff --git a/examples/comparisons/runnable/runnable_params.yaml b/examples/comparisons/runnable/runnable_params.yaml new file mode 100644 index 00000000..ae736318 --- /dev/null +++ b/examples/comparisons/runnable/runnable_params.yaml @@ -0,0 +1,41 @@ +cuda_args: &cuda_args + num_workers: 1 + pin_memory: True + shuffle: True + +train_batch_size: + <<: *cuda_args # yaml syntax to merge keys + # The above essentially does this. + # num_workers: 1 + # pin_memory: True + # shuffle: True + batch_size: 64 + +test_batch_size: + <<: *cuda_args + batch_size: 1000 + +num_epochs: 14 +lr: 1.0 +gamma: 0.7 +seed: 1 +log_interval: 10 + +## NN params +# not used by code, this is just to show the extent of parameterization +conv1_params: + in_channels: 1 + out_channels: 32 + kernel_size: 3 + stride: 1 + +conv2_params: + in_channels: 32 + out_channels: 64 + kernel_size: 3 + stride: 1 + +dropout1: 0.25 +dropout2: 0.5 +fc1: [9216, 128] +fc2: [128, 10] diff --git a/examples/comparisons/source.py b/examples/comparisons/source.py new file mode 100644 index 00000000..10c7daed --- /dev/null +++ b/examples/comparisons/source.py @@ -0,0 +1,148 @@ +# Script as taken from https://github.com/pytorch/examples/blob/main/mnist/main.py +from __future__ import print_function + +import argparse + +import torch +import torch.nn as nn +import torch.nn.functional as F +import torch.optim as optim +from torch.optim.lr_scheduler import StepLR +from torchvision import datasets, transforms + + +class Net(nn.Module): + def __init__(self): + super(Net, self).__init__() + self.conv1 = nn.Conv2d(1, 32, 3, 1) + self.conv2 = nn.Conv2d(32, 64, 3, 1) + self.dropout1 = nn.Dropout(0.25) + self.dropout2 = nn.Dropout(0.5) + self.fc1 = nn.Linear(9216, 128) + self.fc2 = nn.Linear(128, 10) + + def forward(self, x): + x = self.conv1(x) + x = F.relu(x) + x = self.conv2(x) + x = F.relu(x) + x = F.max_pool2d(x, 2) + x = self.dropout1(x) + x = torch.flatten(x, 1) + x = self.fc1(x) + x = F.relu(x) + x = self.dropout2(x) + x = self.fc2(x) + output = F.log_softmax(x, dim=1) + return output + + +def train(args, model, device, train_loader, optimizer, epoch): + model.train() + for batch_idx, (data, target) in enumerate(train_loader): + data, target = data.to(device), target.to(device) + optimizer.zero_grad() + output = model(data) + loss = F.nll_loss(output, target) + loss.backward() + optimizer.step() + if batch_idx % args.log_interval == 0: + print( + "Train Epoch: {} [{}/{} ({:.0f}%)]\tLoss: {:.6f}".format( + epoch, + batch_idx * len(data), + len(train_loader.dataset), + 100.0 * batch_idx / len(train_loader), + loss.item(), + ) + ) + if args.dry_run: + break + + +def test(model, device, test_loader): + model.eval() + test_loss = 0 + correct = 0 + with torch.no_grad(): + for data, target in test_loader: + data, target = data.to(device), target.to(device) + output = model(data) + test_loss += F.nll_loss(output, target, reduction="sum").item() # sum up batch loss + pred = output.argmax(dim=1, keepdim=True) # get the index of the max log-probability + correct += pred.eq(target.view_as(pred)).sum().item() + + test_loss /= len(test_loader.dataset) + + print( + "\nTest set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\n".format( + test_loss, correct, len(test_loader.dataset), 100.0 * correct / len(test_loader.dataset) + ) + ) + + +def main(): + # Training settings + parser = argparse.ArgumentParser(description="PyTorch MNIST Example") + parser.add_argument( + "--batch-size", type=int, default=64, metavar="N", help="input batch size for training (default: 64)" + ) + parser.add_argument( + "--test-batch-size", type=int, default=1000, metavar="N", help="input batch size for testing (default: 1000)" + ) + parser.add_argument("--epochs", type=int, default=14, metavar="N", help="number of epochs to train (default: 14)") + parser.add_argument("--lr", type=float, default=1.0, metavar="LR", help="learning rate (default: 1.0)") + parser.add_argument("--gamma", type=float, default=0.7, metavar="M", help="Learning rate step gamma (default: 0.7)") + parser.add_argument("--no-cuda", action="store_true", default=False, help="disables CUDA training") + parser.add_argument("--no-mps", action="store_true", default=False, help="disables macOS GPU training") + parser.add_argument("--dry-run", action="store_true", default=False, help="quickly check a single pass") + parser.add_argument("--seed", type=int, default=1, metavar="S", help="random seed (default: 1)") + parser.add_argument( + "--log-interval", + type=int, + default=10, + metavar="N", + help="how many batches to wait before logging training status", + ) + parser.add_argument("--save-model", action="store_true", default=False, help="For Saving the current Model") + args = parser.parse_args() + use_cuda = not args.no_cuda and torch.cuda.is_available() + use_mps = not args.no_mps and torch.backends.mps.is_available() + + torch.manual_seed(args.seed) + + if use_cuda: + device = torch.device("cuda") + elif use_mps: + device = torch.device("mps") + else: + device = torch.device("cpu") + + train_kwargs = {"batch_size": args.batch_size} + test_kwargs = {"batch_size": args.test_batch_size} + if use_cuda: + cuda_kwargs = {"num_workers": 1, "pin_memory": True, "shuffle": True} + train_kwargs.update(cuda_kwargs) + test_kwargs.update(cuda_kwargs) + + transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,))]) + dataset1 = datasets.MNIST("../data", train=True, download=True, transform=transform) + dataset2 = datasets.MNIST("../data", train=False, transform=transform) + train_loader = torch.utils.data.DataLoader(dataset1, **train_kwargs) + test_loader = torch.utils.data.DataLoader(dataset2, **test_kwargs) + + model = Net().to(device) + optimizer = optim.Adadelta(model.parameters(), lr=args.lr) + + scheduler = StepLR(optimizer, step_size=1, gamma=args.gamma) + for epoch in range(1, args.epochs + 1): + train(args, model, device, train_loader, optimizer, epoch) + test(model, device, test_loader) + scheduler.step() + + if args.save_model: + torch.save(model.state_dict(), "mnist_cnn.pt") + + +if __name__ == "__main__": + main() diff --git a/poetry.lock b/poetry.lock index da08314b..b158f414 100644 --- a/poetry.lock +++ b/poetry.lock @@ -24,13 +24,13 @@ files = [ [[package]] name = "annotated-types" -version = "0.6.0" +version = "0.7.0" description = "Reusable constraint types to use with typing.Annotated" optional = false python-versions = ">=3.8" files = [ - {file = "annotated_types-0.6.0-py3-none-any.whl", hash = "sha256:0641064de18ba7a25dee8f96403ebc39113d0cb953a01429249d5c7564666a43"}, - {file = "annotated_types-0.6.0.tar.gz", hash = "sha256:563339e807e53ffd9c267e99fc6d9ea23eb8443c08f112651963e24e22f84a5d"}, + {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, + {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, ] [[package]] @@ -101,13 +101,13 @@ tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "p [[package]] name = "babel" -version = "2.14.0" +version = "2.15.0" description = "Internationalization utilities" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "Babel-2.14.0-py3-none-any.whl", hash = "sha256:efb1a25b7118e67ce3a259bed20545c29cb68be8ad2c784c83689981b7a57287"}, - {file = "Babel-2.14.0.tar.gz", hash = "sha256:6919867db036398ba21eb5c7a0f6b28ab8cbc3ae7a73a44ebe34ae74a4e7d363"}, + {file = "Babel-2.15.0-py3-none-any.whl", hash = "sha256:08706bdad8d0a3413266ab61bd6c34d0c28d6e1e7badf40a2cebe67644e2e1fb"}, + {file = "babel-2.15.0.tar.gz", hash = "sha256:8daf0e265d05768bc6c7a314cf1321e9a123afc328cc635c18622a2f30a04413"}, ] [package.extras] @@ -255,6 +255,17 @@ files = [ [package.dependencies] numpy = {version = ">=1.19.0", markers = "python_version >= \"3.9\""} +[[package]] +name = "cachetools" +version = "5.3.3" +description = "Extensible memoizing collections and decorators" +optional = true +python-versions = ">=3.7" +files = [ + {file = "cachetools-5.3.3-py3-none-any.whl", hash = "sha256:0abad1021d3f8325b2fc1d2e9c8b9c9d57b04c3932657a72465447332c24d945"}, + {file = "cachetools-5.3.3.tar.gz", hash = "sha256:ba29e2dfa0b8b556606f097407ed1aa62080ee108ab0dc5ec9d6a723a007d105"}, +] + [[package]] name = "catalogue" version = "2.0.10" @@ -556,13 +567,13 @@ files = [ [[package]] name = "confection" -version = "0.1.4" +version = "0.1.5" description = "The sweetest config system for Python" optional = false python-versions = ">=3.6" files = [ - {file = "confection-0.1.4-py3-none-any.whl", hash = "sha256:a658818d004939069c3e2b3db74a2cb9d956a5e61a1c9ad61788e0ee09a7090f"}, - {file = "confection-0.1.4.tar.gz", hash = "sha256:e80f22fd008b5231a2e8852fac6de9e28f2276a04031d0536cff74fe4a990c8f"}, + {file = "confection-0.1.5-py3-none-any.whl", hash = "sha256:e29d3c3f8eac06b3f77eb9dfb4bf2fc6bcc9622a98ca00a698e3d019c6430b14"}, + {file = "confection-0.1.5.tar.gz", hash = "sha256:8e72dd3ca6bd4f48913cd220f10b8275978e740411654b6e8ca6d7008c590f0e"}, ] [package.dependencies] @@ -634,63 +645,63 @@ test-no-images = ["pytest", "pytest-cov", "pytest-xdist", "wurlitzer"] [[package]] name = "coverage" -version = "7.4.4" +version = "7.5.3" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.8" files = [ - {file = "coverage-7.4.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e0be5efd5127542ef31f165de269f77560d6cdef525fffa446de6f7e9186cfb2"}, - {file = "coverage-7.4.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ccd341521be3d1b3daeb41960ae94a5e87abe2f46f17224ba5d6f2b8398016cf"}, - {file = "coverage-7.4.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09fa497a8ab37784fbb20ab699c246053ac294d13fc7eb40ec007a5043ec91f8"}, - {file = "coverage-7.4.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b1a93009cb80730c9bca5d6d4665494b725b6e8e157c1cb7f2db5b4b122ea562"}, - {file = "coverage-7.4.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:690db6517f09336559dc0b5f55342df62370a48f5469fabf502db2c6d1cffcd2"}, - {file = "coverage-7.4.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:09c3255458533cb76ef55da8cc49ffab9e33f083739c8bd4f58e79fecfe288f7"}, - {file = "coverage-7.4.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:8ce1415194b4a6bd0cdcc3a1dfbf58b63f910dcb7330fe15bdff542c56949f87"}, - {file = "coverage-7.4.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b91cbc4b195444e7e258ba27ac33769c41b94967919f10037e6355e998af255c"}, - {file = "coverage-7.4.4-cp310-cp310-win32.whl", hash = "sha256:598825b51b81c808cb6f078dcb972f96af96b078faa47af7dfcdf282835baa8d"}, - {file = "coverage-7.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:09ef9199ed6653989ebbcaacc9b62b514bb63ea2f90256e71fea3ed74bd8ff6f"}, - {file = "coverage-7.4.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0f9f50e7ef2a71e2fae92774c99170eb8304e3fdf9c8c3c7ae9bab3e7229c5cf"}, - {file = "coverage-7.4.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:623512f8ba53c422fcfb2ce68362c97945095b864cda94a92edbaf5994201083"}, - {file = "coverage-7.4.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0513b9508b93da4e1716744ef6ebc507aff016ba115ffe8ecff744d1322a7b63"}, - {file = "coverage-7.4.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40209e141059b9370a2657c9b15607815359ab3ef9918f0196b6fccce8d3230f"}, - {file = "coverage-7.4.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a2b2b78c78293782fd3767d53e6474582f62443d0504b1554370bde86cc8227"}, - {file = "coverage-7.4.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:73bfb9c09951125d06ee473bed216e2c3742f530fc5acc1383883125de76d9cd"}, - {file = "coverage-7.4.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:1f384c3cc76aeedce208643697fb3e8437604b512255de6d18dae3f27655a384"}, - {file = "coverage-7.4.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:54eb8d1bf7cacfbf2a3186019bcf01d11c666bd495ed18717162f7eb1e9dd00b"}, - {file = "coverage-7.4.4-cp311-cp311-win32.whl", hash = "sha256:cac99918c7bba15302a2d81f0312c08054a3359eaa1929c7e4b26ebe41e9b286"}, - {file = "coverage-7.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:b14706df8b2de49869ae03a5ccbc211f4041750cd4a66f698df89d44f4bd30ec"}, - {file = "coverage-7.4.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:201bef2eea65e0e9c56343115ba3814e896afe6d36ffd37bab783261db430f76"}, - {file = "coverage-7.4.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:41c9c5f3de16b903b610d09650e5e27adbfa7f500302718c9ffd1c12cf9d6818"}, - {file = "coverage-7.4.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d898fe162d26929b5960e4e138651f7427048e72c853607f2b200909794ed978"}, - {file = "coverage-7.4.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ea79bb50e805cd6ac058dfa3b5c8f6c040cb87fe83de10845857f5535d1db70"}, - {file = "coverage-7.4.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce4b94265ca988c3f8e479e741693d143026632672e3ff924f25fab50518dd51"}, - {file = "coverage-7.4.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:00838a35b882694afda09f85e469c96367daa3f3f2b097d846a7216993d37f4c"}, - {file = "coverage-7.4.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:fdfafb32984684eb03c2d83e1e51f64f0906b11e64482df3c5db936ce3839d48"}, - {file = "coverage-7.4.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:69eb372f7e2ece89f14751fbcbe470295d73ed41ecd37ca36ed2eb47512a6ab9"}, - {file = "coverage-7.4.4-cp312-cp312-win32.whl", hash = "sha256:137eb07173141545e07403cca94ab625cc1cc6bc4c1e97b6e3846270e7e1fea0"}, - {file = "coverage-7.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:d71eec7d83298f1af3326ce0ff1d0ea83c7cb98f72b577097f9083b20bdaf05e"}, - {file = "coverage-7.4.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d5ae728ff3b5401cc320d792866987e7e7e880e6ebd24433b70a33b643bb0384"}, - {file = "coverage-7.4.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cc4f1358cb0c78edef3ed237ef2c86056206bb8d9140e73b6b89fbcfcbdd40e1"}, - {file = "coverage-7.4.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8130a2aa2acb8788e0b56938786c33c7c98562697bf9f4c7d6e8e5e3a0501e4a"}, - {file = "coverage-7.4.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cf271892d13e43bc2b51e6908ec9a6a5094a4df1d8af0bfc360088ee6c684409"}, - {file = "coverage-7.4.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a4cdc86d54b5da0df6d3d3a2f0b710949286094c3a6700c21e9015932b81447e"}, - {file = "coverage-7.4.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ae71e7ddb7a413dd60052e90528f2f65270aad4b509563af6d03d53e979feafd"}, - {file = "coverage-7.4.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:38dd60d7bf242c4ed5b38e094baf6401faa114fc09e9e6632374388a404f98e7"}, - {file = "coverage-7.4.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:aa5b1c1bfc28384f1f53b69a023d789f72b2e0ab1b3787aae16992a7ca21056c"}, - {file = "coverage-7.4.4-cp38-cp38-win32.whl", hash = "sha256:dfa8fe35a0bb90382837b238fff375de15f0dcdb9ae68ff85f7a63649c98527e"}, - {file = "coverage-7.4.4-cp38-cp38-win_amd64.whl", hash = "sha256:b2991665420a803495e0b90a79233c1433d6ed77ef282e8e152a324bbbc5e0c8"}, - {file = "coverage-7.4.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3b799445b9f7ee8bf299cfaed6f5b226c0037b74886a4e11515e569b36fe310d"}, - {file = "coverage-7.4.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b4d33f418f46362995f1e9d4f3a35a1b6322cb959c31d88ae56b0298e1c22357"}, - {file = "coverage-7.4.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aadacf9a2f407a4688d700e4ebab33a7e2e408f2ca04dbf4aef17585389eff3e"}, - {file = "coverage-7.4.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7c95949560050d04d46b919301826525597f07b33beba6187d04fa64d47ac82e"}, - {file = "coverage-7.4.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff7687ca3d7028d8a5f0ebae95a6e4827c5616b31a4ee1192bdfde697db110d4"}, - {file = "coverage-7.4.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5fc1de20b2d4a061b3df27ab9b7c7111e9a710f10dc2b84d33a4ab25065994ec"}, - {file = "coverage-7.4.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c74880fc64d4958159fbd537a091d2a585448a8f8508bf248d72112723974cbd"}, - {file = "coverage-7.4.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:742a76a12aa45b44d236815d282b03cfb1de3b4323f3e4ec933acfae08e54ade"}, - {file = "coverage-7.4.4-cp39-cp39-win32.whl", hash = "sha256:d89d7b2974cae412400e88f35d86af72208e1ede1a541954af5d944a8ba46c57"}, - {file = "coverage-7.4.4-cp39-cp39-win_amd64.whl", hash = "sha256:9ca28a302acb19b6af89e90f33ee3e1906961f94b54ea37de6737b7ca9d8827c"}, - {file = "coverage-7.4.4-pp38.pp39.pp310-none-any.whl", hash = "sha256:b2c5edc4ac10a7ef6605a966c58929ec6c1bd0917fb8c15cb3363f65aa40e677"}, - {file = "coverage-7.4.4.tar.gz", hash = "sha256:c901df83d097649e257e803be22592aedfd5182f07b3cc87d640bbb9afd50f49"}, + {file = "coverage-7.5.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a6519d917abb15e12380406d721e37613e2a67d166f9fb7e5a8ce0375744cd45"}, + {file = "coverage-7.5.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:aea7da970f1feccf48be7335f8b2ca64baf9b589d79e05b9397a06696ce1a1ec"}, + {file = "coverage-7.5.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:923b7b1c717bd0f0f92d862d1ff51d9b2b55dbbd133e05680204465f454bb286"}, + {file = "coverage-7.5.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62bda40da1e68898186f274f832ef3e759ce929da9a9fd9fcf265956de269dbc"}, + {file = "coverage-7.5.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8b7339180d00de83e930358223c617cc343dd08e1aa5ec7b06c3a121aec4e1d"}, + {file = "coverage-7.5.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:25a5caf742c6195e08002d3b6c2dd6947e50efc5fc2c2205f61ecb47592d2d83"}, + {file = "coverage-7.5.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:05ac5f60faa0c704c0f7e6a5cbfd6f02101ed05e0aee4d2822637a9e672c998d"}, + {file = "coverage-7.5.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:239a4e75e09c2b12ea478d28815acf83334d32e722e7433471fbf641c606344c"}, + {file = "coverage-7.5.3-cp310-cp310-win32.whl", hash = "sha256:a5812840d1d00eafae6585aba38021f90a705a25b8216ec7f66aebe5b619fb84"}, + {file = "coverage-7.5.3-cp310-cp310-win_amd64.whl", hash = "sha256:33ca90a0eb29225f195e30684ba4a6db05dbef03c2ccd50b9077714c48153cac"}, + {file = "coverage-7.5.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f81bc26d609bf0fbc622c7122ba6307993c83c795d2d6f6f6fd8c000a770d974"}, + {file = "coverage-7.5.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7cec2af81f9e7569280822be68bd57e51b86d42e59ea30d10ebdbb22d2cb7232"}, + {file = "coverage-7.5.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55f689f846661e3f26efa535071775d0483388a1ccfab899df72924805e9e7cd"}, + {file = "coverage-7.5.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:50084d3516aa263791198913a17354bd1dc627d3c1639209640b9cac3fef5807"}, + {file = "coverage-7.5.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:341dd8f61c26337c37988345ca5c8ccabeff33093a26953a1ac72e7d0103c4fb"}, + {file = "coverage-7.5.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ab0b028165eea880af12f66086694768f2c3139b2c31ad5e032c8edbafca6ffc"}, + {file = "coverage-7.5.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:5bc5a8c87714b0c67cfeb4c7caa82b2d71e8864d1a46aa990b5588fa953673b8"}, + {file = "coverage-7.5.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:38a3b98dae8a7c9057bd91fbf3415c05e700a5114c5f1b5b0ea5f8f429ba6614"}, + {file = "coverage-7.5.3-cp311-cp311-win32.whl", hash = "sha256:fcf7d1d6f5da887ca04302db8e0e0cf56ce9a5e05f202720e49b3e8157ddb9a9"}, + {file = "coverage-7.5.3-cp311-cp311-win_amd64.whl", hash = "sha256:8c836309931839cca658a78a888dab9676b5c988d0dd34ca247f5f3e679f4e7a"}, + {file = "coverage-7.5.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:296a7d9bbc598e8744c00f7a6cecf1da9b30ae9ad51c566291ff1314e6cbbed8"}, + {file = "coverage-7.5.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:34d6d21d8795a97b14d503dcaf74226ae51eb1f2bd41015d3ef332a24d0a17b3"}, + {file = "coverage-7.5.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e317953bb4c074c06c798a11dbdd2cf9979dbcaa8ccc0fa4701d80042d4ebf1"}, + {file = "coverage-7.5.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:705f3d7c2b098c40f5b81790a5fedb274113373d4d1a69e65f8b68b0cc26f6db"}, + {file = "coverage-7.5.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1196e13c45e327d6cd0b6e471530a1882f1017eb83c6229fc613cd1a11b53cd"}, + {file = "coverage-7.5.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:015eddc5ccd5364dcb902eaecf9515636806fa1e0d5bef5769d06d0f31b54523"}, + {file = "coverage-7.5.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:fd27d8b49e574e50caa65196d908f80e4dff64d7e592d0c59788b45aad7e8b35"}, + {file = "coverage-7.5.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:33fc65740267222fc02975c061eb7167185fef4cc8f2770267ee8bf7d6a42f84"}, + {file = "coverage-7.5.3-cp312-cp312-win32.whl", hash = "sha256:7b2a19e13dfb5c8e145c7a6ea959485ee8e2204699903c88c7d25283584bfc08"}, + {file = "coverage-7.5.3-cp312-cp312-win_amd64.whl", hash = "sha256:0bbddc54bbacfc09b3edaec644d4ac90c08ee8ed4844b0f86227dcda2d428fcb"}, + {file = "coverage-7.5.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f78300789a708ac1f17e134593f577407d52d0417305435b134805c4fb135adb"}, + {file = "coverage-7.5.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b368e1aee1b9b75757942d44d7598dcd22a9dbb126affcbba82d15917f0cc155"}, + {file = "coverage-7.5.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f836c174c3a7f639bded48ec913f348c4761cbf49de4a20a956d3431a7c9cb24"}, + {file = "coverage-7.5.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:244f509f126dc71369393ce5fea17c0592c40ee44e607b6d855e9c4ac57aac98"}, + {file = "coverage-7.5.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c4c2872b3c91f9baa836147ca33650dc5c172e9273c808c3c3199c75490e709d"}, + {file = "coverage-7.5.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:dd4b3355b01273a56b20c219e74e7549e14370b31a4ffe42706a8cda91f19f6d"}, + {file = "coverage-7.5.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:f542287b1489c7a860d43a7d8883e27ca62ab84ca53c965d11dac1d3a1fab7ce"}, + {file = "coverage-7.5.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:75e3f4e86804023e991096b29e147e635f5e2568f77883a1e6eed74512659ab0"}, + {file = "coverage-7.5.3-cp38-cp38-win32.whl", hash = "sha256:c59d2ad092dc0551d9f79d9d44d005c945ba95832a6798f98f9216ede3d5f485"}, + {file = "coverage-7.5.3-cp38-cp38-win_amd64.whl", hash = "sha256:fa21a04112c59ad54f69d80e376f7f9d0f5f9123ab87ecd18fbb9ec3a2beed56"}, + {file = "coverage-7.5.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f5102a92855d518b0996eb197772f5ac2a527c0ec617124ad5242a3af5e25f85"}, + {file = "coverage-7.5.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d1da0a2e3b37b745a2b2a678a4c796462cf753aebf94edcc87dcc6b8641eae31"}, + {file = "coverage-7.5.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8383a6c8cefba1b7cecc0149415046b6fc38836295bc4c84e820872eb5478b3d"}, + {file = "coverage-7.5.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9aad68c3f2566dfae84bf46295a79e79d904e1c21ccfc66de88cd446f8686341"}, + {file = "coverage-7.5.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e079c9ec772fedbade9d7ebc36202a1d9ef7291bc9b3a024ca395c4d52853d7"}, + {file = "coverage-7.5.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bde997cac85fcac227b27d4fb2c7608a2c5f6558469b0eb704c5726ae49e1c52"}, + {file = "coverage-7.5.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:990fb20b32990b2ce2c5f974c3e738c9358b2735bc05075d50a6f36721b8f303"}, + {file = "coverage-7.5.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3d5a67f0da401e105753d474369ab034c7bae51a4c31c77d94030d59e41df5bd"}, + {file = "coverage-7.5.3-cp39-cp39-win32.whl", hash = "sha256:e08c470c2eb01977d221fd87495b44867a56d4d594f43739a8028f8646a51e0d"}, + {file = "coverage-7.5.3-cp39-cp39-win_amd64.whl", hash = "sha256:1d2a830ade66d3563bb61d1e3c77c8def97b30ed91e166c67d0632c018f380f0"}, + {file = "coverage-7.5.3-pp38.pp39.pp310-none-any.whl", hash = "sha256:3538d8fb1ee9bdd2e2692b3b18c22bb1c19ffbefd06880f5ac496e42d7bb3884"}, + {file = "coverage-7.5.3.tar.gz", hash = "sha256:04aefca5190d1dc7a53a4c1a5a7f8568811306d7a8ee231c42fb69215571944f"}, ] [package.dependencies] @@ -796,6 +807,23 @@ files = [ {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, ] +[[package]] +name = "deprecated" +version = "1.2.14" +description = "Python @deprecated decorator to deprecate old python classes, functions or methods." +optional = true +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "Deprecated-1.2.14-py2.py3-none-any.whl", hash = "sha256:6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c"}, + {file = "Deprecated-1.2.14.tar.gz", hash = "sha256:e5323eb936458dccc2582dc6f9c322c852a775a27065ff2b0c4970b9d53d01b3"}, +] + +[package.dependencies] +wrapt = ">=1.10,<2" + +[package.extras] +dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "sphinx (<2)", "tox"] + [[package]] name = "dill" version = "0.3.8" @@ -824,22 +852,23 @@ files = [ [[package]] name = "docker" -version = "7.0.0" +version = "7.1.0" description = "A Python library for the Docker Engine API." optional = true python-versions = ">=3.8" files = [ - {file = "docker-7.0.0-py3-none-any.whl", hash = "sha256:12ba681f2777a0ad28ffbcc846a69c31b4dfd9752b47eb425a274ee269c5e14b"}, - {file = "docker-7.0.0.tar.gz", hash = "sha256:323736fb92cd9418fc5e7133bc953e11a9da04f4483f828b527db553f1e7e5a3"}, + {file = "docker-7.1.0-py3-none-any.whl", hash = "sha256:c96b93b7f0a746f9e77d325bcfb87422a3d8bd4f03136ae8a85b37f1898d5fc0"}, + {file = "docker-7.1.0.tar.gz", hash = "sha256:ad8c70e6e3f8926cb8a92619b832b4ea5299e2831c14284663184e200546fa6c"}, ] [package.dependencies] -packaging = ">=14.0" pywin32 = {version = ">=304", markers = "sys_platform == \"win32\""} requests = ">=2.26.0" urllib3 = ">=1.26.0" [package.extras] +dev = ["coverage (==7.2.7)", "pytest (==7.4.2)", "pytest-cov (==4.1.0)", "pytest-timeout (==2.1.0)", "ruff (==0.1.8)"] +docs = ["myst-parser (==0.18.0)", "sphinx (==5.1.1)"] ssh = ["paramiko (>=2.4.3)"] websockets = ["websocket-client (>=1.3.0)"] @@ -884,13 +913,13 @@ files = [ [[package]] name = "exceptiongroup" -version = "1.2.0" +version = "1.2.1" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.2.0-py3-none-any.whl", hash = "sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14"}, - {file = "exceptiongroup-1.2.0.tar.gz", hash = "sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68"}, + {file = "exceptiongroup-1.2.1-py3-none-any.whl", hash = "sha256:5258b9ed329c5bbdd31a309f53cbfb0b155341807f6ff7606a1e801a891b29ad"}, + {file = "exceptiongroup-1.2.1.tar.gz", hash = "sha256:a4785e48b045528f5bfe627b6ad554ff32def154f42372786903b7abcfe1aa16"}, ] [package.extras] @@ -926,13 +955,13 @@ devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benc [[package]] name = "filelock" -version = "3.13.4" +version = "3.14.0" description = "A platform independent file lock." optional = false python-versions = ">=3.8" files = [ - {file = "filelock-3.13.4-py3-none-any.whl", hash = "sha256:404e5e9253aa60ad457cae1be07c0f0ca90a63931200a47d9b6a6af84fd7b45f"}, - {file = "filelock-3.13.4.tar.gz", hash = "sha256:d13f466618bfde72bd2c18255e269f72542c6e70e7bac83a0232d6b1cc5c8cf4"}, + {file = "filelock-3.14.0-py3-none-any.whl", hash = "sha256:43339835842f110ca7ae60f1e1c160714c5a6afd15a2873419ab185334975c0f"}, + {file = "filelock-3.14.0.tar.gz", hash = "sha256:6ea72da3be9b8c82afd3edcf99f2fffbb5076335a5ae4d03248bb5b6c3eae78a"}, ] [package.extras] @@ -953,53 +982,53 @@ files = [ [[package]] name = "fonttools" -version = "4.51.0" +version = "4.53.0" description = "Tools to manipulate font files" optional = false python-versions = ">=3.8" files = [ - {file = "fonttools-4.51.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:84d7751f4468dd8cdd03ddada18b8b0857a5beec80bce9f435742abc9a851a74"}, - {file = "fonttools-4.51.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8b4850fa2ef2cfbc1d1f689bc159ef0f45d8d83298c1425838095bf53ef46308"}, - {file = "fonttools-4.51.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5b48a1121117047d82695d276c2af2ee3a24ffe0f502ed581acc2673ecf1037"}, - {file = "fonttools-4.51.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:180194c7fe60c989bb627d7ed5011f2bef1c4d36ecf3ec64daec8302f1ae0716"}, - {file = "fonttools-4.51.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:96a48e137c36be55e68845fc4284533bda2980f8d6f835e26bca79d7e2006438"}, - {file = "fonttools-4.51.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:806e7912c32a657fa39d2d6eb1d3012d35f841387c8fc6cf349ed70b7c340039"}, - {file = "fonttools-4.51.0-cp310-cp310-win32.whl", hash = "sha256:32b17504696f605e9e960647c5f64b35704782a502cc26a37b800b4d69ff3c77"}, - {file = "fonttools-4.51.0-cp310-cp310-win_amd64.whl", hash = "sha256:c7e91abdfae1b5c9e3a543f48ce96013f9a08c6c9668f1e6be0beabf0a569c1b"}, - {file = "fonttools-4.51.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a8feca65bab31479d795b0d16c9a9852902e3a3c0630678efb0b2b7941ea9c74"}, - {file = "fonttools-4.51.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8ac27f436e8af7779f0bb4d5425aa3535270494d3bc5459ed27de3f03151e4c2"}, - {file = "fonttools-4.51.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e19bd9e9964a09cd2433a4b100ca7f34e34731e0758e13ba9a1ed6e5468cc0f"}, - {file = "fonttools-4.51.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2b92381f37b39ba2fc98c3a45a9d6383bfc9916a87d66ccb6553f7bdd129097"}, - {file = "fonttools-4.51.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5f6bc991d1610f5c3bbe997b0233cbc234b8e82fa99fc0b2932dc1ca5e5afec0"}, - {file = "fonttools-4.51.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9696fe9f3f0c32e9a321d5268208a7cc9205a52f99b89479d1b035ed54c923f1"}, - {file = "fonttools-4.51.0-cp311-cp311-win32.whl", hash = "sha256:3bee3f3bd9fa1d5ee616ccfd13b27ca605c2b4270e45715bd2883e9504735034"}, - {file = "fonttools-4.51.0-cp311-cp311-win_amd64.whl", hash = "sha256:0f08c901d3866a8905363619e3741c33f0a83a680d92a9f0e575985c2634fcc1"}, - {file = "fonttools-4.51.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:4060acc2bfa2d8e98117828a238889f13b6f69d59f4f2d5857eece5277b829ba"}, - {file = "fonttools-4.51.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1250e818b5f8a679ad79660855528120a8f0288f8f30ec88b83db51515411fcc"}, - {file = "fonttools-4.51.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76f1777d8b3386479ffb4a282e74318e730014d86ce60f016908d9801af9ca2a"}, - {file = "fonttools-4.51.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b5ad456813d93b9c4b7ee55302208db2b45324315129d85275c01f5cb7e61a2"}, - {file = "fonttools-4.51.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:68b3fb7775a923be73e739f92f7e8a72725fd333eab24834041365d2278c3671"}, - {file = "fonttools-4.51.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8e2f1a4499e3b5ee82c19b5ee57f0294673125c65b0a1ff3764ea1f9db2f9ef5"}, - {file = "fonttools-4.51.0-cp312-cp312-win32.whl", hash = "sha256:278e50f6b003c6aed19bae2242b364e575bcb16304b53f2b64f6551b9c000e15"}, - {file = "fonttools-4.51.0-cp312-cp312-win_amd64.whl", hash = "sha256:b3c61423f22165541b9403ee39874dcae84cd57a9078b82e1dce8cb06b07fa2e"}, - {file = "fonttools-4.51.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:1621ee57da887c17312acc4b0e7ac30d3a4fb0fec6174b2e3754a74c26bbed1e"}, - {file = "fonttools-4.51.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e9d9298be7a05bb4801f558522adbe2feea1b0b103d5294ebf24a92dd49b78e5"}, - {file = "fonttools-4.51.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee1af4be1c5afe4c96ca23badd368d8dc75f611887fb0c0dac9f71ee5d6f110e"}, - {file = "fonttools-4.51.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c18b49adc721a7d0b8dfe7c3130c89b8704baf599fb396396d07d4aa69b824a1"}, - {file = "fonttools-4.51.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:de7c29bdbdd35811f14493ffd2534b88f0ce1b9065316433b22d63ca1cd21f14"}, - {file = "fonttools-4.51.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cadf4e12a608ef1d13e039864f484c8a968840afa0258b0b843a0556497ea9ed"}, - {file = "fonttools-4.51.0-cp38-cp38-win32.whl", hash = "sha256:aefa011207ed36cd280babfaa8510b8176f1a77261833e895a9d96e57e44802f"}, - {file = "fonttools-4.51.0-cp38-cp38-win_amd64.whl", hash = "sha256:865a58b6e60b0938874af0968cd0553bcd88e0b2cb6e588727117bd099eef836"}, - {file = "fonttools-4.51.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:60a3409c9112aec02d5fb546f557bca6efa773dcb32ac147c6baf5f742e6258b"}, - {file = "fonttools-4.51.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f7e89853d8bea103c8e3514b9f9dc86b5b4120afb4583b57eb10dfa5afbe0936"}, - {file = "fonttools-4.51.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56fc244f2585d6c00b9bcc59e6593e646cf095a96fe68d62cd4da53dd1287b55"}, - {file = "fonttools-4.51.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d145976194a5242fdd22df18a1b451481a88071feadf251221af110ca8f00ce"}, - {file = "fonttools-4.51.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c5b8cab0c137ca229433570151b5c1fc6af212680b58b15abd797dcdd9dd5051"}, - {file = "fonttools-4.51.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:54dcf21a2f2d06ded676e3c3f9f74b2bafded3a8ff12f0983160b13e9f2fb4a7"}, - {file = "fonttools-4.51.0-cp39-cp39-win32.whl", hash = "sha256:0118ef998a0699a96c7b28457f15546815015a2710a1b23a7bf6c1be60c01636"}, - {file = "fonttools-4.51.0-cp39-cp39-win_amd64.whl", hash = "sha256:599bdb75e220241cedc6faebfafedd7670335d2e29620d207dd0378a4e9ccc5a"}, - {file = "fonttools-4.51.0-py3-none-any.whl", hash = "sha256:15c94eeef6b095831067f72c825eb0e2d48bb4cea0647c1b05c981ecba2bf39f"}, - {file = "fonttools-4.51.0.tar.gz", hash = "sha256:dc0673361331566d7a663d7ce0f6fdcbfbdc1f59c6e3ed1165ad7202ca183c68"}, + {file = "fonttools-4.53.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:52a6e0a7a0bf611c19bc8ec8f7592bdae79c8296c70eb05917fd831354699b20"}, + {file = "fonttools-4.53.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:099634631b9dd271d4a835d2b2a9e042ccc94ecdf7e2dd9f7f34f7daf333358d"}, + {file = "fonttools-4.53.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e40013572bfb843d6794a3ce076c29ef4efd15937ab833f520117f8eccc84fd6"}, + {file = "fonttools-4.53.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:715b41c3e231f7334cbe79dfc698213dcb7211520ec7a3bc2ba20c8515e8a3b5"}, + {file = "fonttools-4.53.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74ae2441731a05b44d5988d3ac2cf784d3ee0a535dbed257cbfff4be8bb49eb9"}, + {file = "fonttools-4.53.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:95db0c6581a54b47c30860d013977b8a14febc206c8b5ff562f9fe32738a8aca"}, + {file = "fonttools-4.53.0-cp310-cp310-win32.whl", hash = "sha256:9cd7a6beec6495d1dffb1033d50a3f82dfece23e9eb3c20cd3c2444d27514068"}, + {file = "fonttools-4.53.0-cp310-cp310-win_amd64.whl", hash = "sha256:daaef7390e632283051e3cf3e16aff2b68b247e99aea916f64e578c0449c9c68"}, + {file = "fonttools-4.53.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a209d2e624ba492df4f3bfad5996d1f76f03069c6133c60cd04f9a9e715595ec"}, + {file = "fonttools-4.53.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4f520d9ac5b938e6494f58a25c77564beca7d0199ecf726e1bd3d56872c59749"}, + {file = "fonttools-4.53.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eceef49f457253000e6a2d0f7bd08ff4e9fe96ec4ffce2dbcb32e34d9c1b8161"}, + {file = "fonttools-4.53.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa1f3e34373aa16045484b4d9d352d4c6b5f9f77ac77a178252ccbc851e8b2ee"}, + {file = "fonttools-4.53.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:28d072169fe8275fb1a0d35e3233f6df36a7e8474e56cb790a7258ad822b6fd6"}, + {file = "fonttools-4.53.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4a2a6ba400d386e904fd05db81f73bee0008af37799a7586deaa4aef8cd5971e"}, + {file = "fonttools-4.53.0-cp311-cp311-win32.whl", hash = "sha256:bb7273789f69b565d88e97e9e1da602b4ee7ba733caf35a6c2affd4334d4f005"}, + {file = "fonttools-4.53.0-cp311-cp311-win_amd64.whl", hash = "sha256:9fe9096a60113e1d755e9e6bda15ef7e03391ee0554d22829aa506cdf946f796"}, + {file = "fonttools-4.53.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:d8f191a17369bd53a5557a5ee4bab91d5330ca3aefcdf17fab9a497b0e7cff7a"}, + {file = "fonttools-4.53.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:93156dd7f90ae0a1b0e8871032a07ef3178f553f0c70c386025a808f3a63b1f4"}, + {file = "fonttools-4.53.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bff98816cb144fb7b85e4b5ba3888a33b56ecef075b0e95b95bcd0a5fbf20f06"}, + {file = "fonttools-4.53.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:973d030180eca8255b1bce6ffc09ef38a05dcec0e8320cc9b7bcaa65346f341d"}, + {file = "fonttools-4.53.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c4ee5a24e281fbd8261c6ab29faa7fd9a87a12e8c0eed485b705236c65999109"}, + {file = "fonttools-4.53.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bd5bc124fae781a4422f61b98d1d7faa47985f663a64770b78f13d2c072410c2"}, + {file = "fonttools-4.53.0-cp312-cp312-win32.whl", hash = "sha256:a239afa1126b6a619130909c8404070e2b473dd2b7fc4aacacd2e763f8597fea"}, + {file = "fonttools-4.53.0-cp312-cp312-win_amd64.whl", hash = "sha256:45b4afb069039f0366a43a5d454bc54eea942bfb66b3fc3e9a2c07ef4d617380"}, + {file = "fonttools-4.53.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:93bc9e5aaa06ff928d751dc6be889ff3e7d2aa393ab873bc7f6396a99f6fbb12"}, + {file = "fonttools-4.53.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2367d47816cc9783a28645bc1dac07f8ffc93e0f015e8c9fc674a5b76a6da6e4"}, + {file = "fonttools-4.53.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:907fa0b662dd8fc1d7c661b90782ce81afb510fc4b7aa6ae7304d6c094b27bce"}, + {file = "fonttools-4.53.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e0ad3c6ea4bd6a289d958a1eb922767233f00982cf0fe42b177657c86c80a8f"}, + {file = "fonttools-4.53.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:73121a9b7ff93ada888aaee3985a88495489cc027894458cb1a736660bdfb206"}, + {file = "fonttools-4.53.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:ee595d7ba9bba130b2bec555a40aafa60c26ce68ed0cf509983e0f12d88674fd"}, + {file = "fonttools-4.53.0-cp38-cp38-win32.whl", hash = "sha256:fca66d9ff2ac89b03f5aa17e0b21a97c21f3491c46b583bb131eb32c7bab33af"}, + {file = "fonttools-4.53.0-cp38-cp38-win_amd64.whl", hash = "sha256:31f0e3147375002aae30696dd1dc596636abbd22fca09d2e730ecde0baad1d6b"}, + {file = "fonttools-4.53.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7d6166192dcd925c78a91d599b48960e0a46fe565391c79fe6de481ac44d20ac"}, + {file = "fonttools-4.53.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ef50ec31649fbc3acf6afd261ed89d09eb909b97cc289d80476166df8438524d"}, + {file = "fonttools-4.53.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f193f060391a455920d61684a70017ef5284ccbe6023bb056e15e5ac3de11d1"}, + {file = "fonttools-4.53.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba9f09ff17f947392a855e3455a846f9855f6cf6bec33e9a427d3c1d254c712f"}, + {file = "fonttools-4.53.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0c555e039d268445172b909b1b6bdcba42ada1cf4a60e367d68702e3f87e5f64"}, + {file = "fonttools-4.53.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5a4788036201c908079e89ae3f5399b33bf45b9ea4514913f4dbbe4fac08efe0"}, + {file = "fonttools-4.53.0-cp39-cp39-win32.whl", hash = "sha256:d1a24f51a3305362b94681120c508758a88f207fa0a681c16b5a4172e9e6c7a9"}, + {file = "fonttools-4.53.0-cp39-cp39-win_amd64.whl", hash = "sha256:1e677bfb2b4bd0e5e99e0f7283e65e47a9814b0486cb64a41adf9ef110e078f2"}, + {file = "fonttools-4.53.0-py3-none-any.whl", hash = "sha256:6b4f04b1fbc01a3569d63359f2227c89ab294550de277fd09d8fca6185669fa4"}, + {file = "fonttools-4.53.0.tar.gz", hash = "sha256:c93ed66d32de1559b6fc348838c7572d5c0ac1e4a258e76763a5caddd8944002"}, ] [package.extras] @@ -1016,6 +1045,44 @@ ufo = ["fs (>=2.2.0,<3)"] unicode = ["unicodedata2 (>=15.1.0)"] woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] +[[package]] +name = "fsspec" +version = "2024.5.0" +description = "File-system specification" +optional = false +python-versions = ">=3.8" +files = [ + {file = "fsspec-2024.5.0-py3-none-any.whl", hash = "sha256:e0fdbc446d67e182f49a70b82cf7889028a63588fde6b222521f10937b2b670c"}, + {file = "fsspec-2024.5.0.tar.gz", hash = "sha256:1d021b0b0f933e3b3029ed808eb400c08ba101ca2de4b3483fbc9ca23fcee94a"}, +] + +[package.extras] +abfs = ["adlfs"] +adl = ["adlfs"] +arrow = ["pyarrow (>=1)"] +dask = ["dask", "distributed"] +dev = ["pre-commit", "ruff"] +dropbox = ["dropbox", "dropboxdrivefs", "requests"] +full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "dask", "distributed", "dropbox", "dropboxdrivefs", "fusepy", "gcsfs", "libarchive-c", "ocifs", "panel", "paramiko", "pyarrow (>=1)", "pygit2", "requests", "s3fs", "smbprotocol", "tqdm"] +fuse = ["fusepy"] +gcs = ["gcsfs"] +git = ["pygit2"] +github = ["requests"] +gs = ["gcsfs"] +gui = ["panel"] +hdfs = ["pyarrow (>=1)"] +http = ["aiohttp (!=4.0.0a0,!=4.0.0a1)"] +libarchive = ["libarchive-c"] +oci = ["ocifs"] +s3 = ["s3fs"] +sftp = ["paramiko"] +smb = ["smbprotocol"] +ssh = ["paramiko"] +test = ["aiohttp (!=4.0.0a0,!=4.0.0a1)", "numpy", "pytest", "pytest-asyncio (!=0.22.0)", "pytest-benchmark", "pytest-cov", "pytest-mock", "pytest-recording", "pytest-rerunfailures", "requests"] +test-downstream = ["aiobotocore (>=2.5.4,<3.0.0)", "dask-expr", "dask[dataframe,test]", "moto[server] (>4,<5)", "pytest-timeout", "xarray"] +test-full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "cloudpickle", "dask", "distributed", "dropbox", "dropboxdrivefs", "fastparquet", "fusepy", "gcsfs", "jinja2", "kerchunk", "libarchive-c", "lz4", "notebook", "numpy", "ocifs", "pandas", "panel", "paramiko", "pyarrow", "pyarrow (>=1)", "pyftpdlib", "pygit2", "pytest", "pytest-asyncio (!=0.22.0)", "pytest-benchmark", "pytest-cov", "pytest-mock", "pytest-recording", "pytest-rerunfailures", "python-snappy", "requests", "smbprotocol", "tqdm", "urllib3", "zarr", "zstandard"] +tqdm = ["tqdm"] + [[package]] name = "gast" version = "0.5.4" @@ -1206,13 +1273,13 @@ test = ["objgraph", "psutil"] [[package]] name = "griffe" -version = "0.42.2" +version = "0.45.2" description = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API." optional = false python-versions = ">=3.8" files = [ - {file = "griffe-0.42.2-py3-none-any.whl", hash = "sha256:bf9a09d7e9dcc3aca6a2c7ab4f63368c19e882f58c816fbd159bea613daddde3"}, - {file = "griffe-0.42.2.tar.gz", hash = "sha256:d5547b7a1a0786f84042379a5da8bd97c11d0464d4de3d7510328ebce5fda772"}, + {file = "griffe-0.45.2-py3-none-any.whl", hash = "sha256:297ec8530d0c68e5b98ff86fb588ebc3aa3559bb5dc21f3caea8d9542a350133"}, + {file = "griffe-0.45.2.tar.gz", hash = "sha256:83ce7dcaafd8cb7f43cbf1a455155015a1eb624b1ffd93249e5e1c4a22b2fdb2"}, ] [package.dependencies] @@ -1220,69 +1287,61 @@ colorama = ">=0.4" [[package]] name = "grpcio" -version = "1.62.1" +version = "1.64.0" description = "HTTP/2-based RPC framework" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "grpcio-1.62.1-cp310-cp310-linux_armv7l.whl", hash = "sha256:179bee6f5ed7b5f618844f760b6acf7e910988de77a4f75b95bbfaa8106f3c1e"}, - {file = "grpcio-1.62.1-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:48611e4fa010e823ba2de8fd3f77c1322dd60cb0d180dc6630a7e157b205f7ea"}, - {file = "grpcio-1.62.1-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:b2a0e71b0a2158aa4bce48be9f8f9eb45cbd17c78c7443616d00abbe2a509f6d"}, - {file = "grpcio-1.62.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fbe80577c7880911d3ad65e5ecc997416c98f354efeba2f8d0f9112a67ed65a5"}, - {file = "grpcio-1.62.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58f6c693d446964e3292425e1d16e21a97a48ba9172f2d0df9d7b640acb99243"}, - {file = "grpcio-1.62.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:77c339403db5a20ef4fed02e4d1a9a3d9866bf9c0afc77a42234677313ea22f3"}, - {file = "grpcio-1.62.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b5a4ea906db7dec694098435d84bf2854fe158eb3cd51e1107e571246d4d1d70"}, - {file = "grpcio-1.62.1-cp310-cp310-win32.whl", hash = "sha256:4187201a53f8561c015bc745b81a1b2d278967b8de35f3399b84b0695e281d5f"}, - {file = "grpcio-1.62.1-cp310-cp310-win_amd64.whl", hash = "sha256:844d1f3fb11bd1ed362d3fdc495d0770cfab75761836193af166fee113421d66"}, - {file = "grpcio-1.62.1-cp311-cp311-linux_armv7l.whl", hash = "sha256:833379943d1728a005e44103f17ecd73d058d37d95783eb8f0b28ddc1f54d7b2"}, - {file = "grpcio-1.62.1-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:c7fcc6a32e7b7b58f5a7d27530669337a5d587d4066060bcb9dee7a8c833dfb7"}, - {file = "grpcio-1.62.1-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:fa7d28eb4d50b7cbe75bb8b45ed0da9a1dc5b219a0af59449676a29c2eed9698"}, - {file = "grpcio-1.62.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48f7135c3de2f298b833be8b4ae20cafe37091634e91f61f5a7eb3d61ec6f660"}, - {file = "grpcio-1.62.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:71f11fd63365ade276c9d4a7b7df5c136f9030e3457107e1791b3737a9b9ed6a"}, - {file = "grpcio-1.62.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4b49fd8fe9f9ac23b78437da94c54aa7e9996fbb220bac024a67469ce5d0825f"}, - {file = "grpcio-1.62.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:482ae2ae78679ba9ed5752099b32e5fe580443b4f798e1b71df412abf43375db"}, - {file = "grpcio-1.62.1-cp311-cp311-win32.whl", hash = "sha256:1faa02530b6c7426404372515fe5ddf66e199c2ee613f88f025c6f3bd816450c"}, - {file = "grpcio-1.62.1-cp311-cp311-win_amd64.whl", hash = "sha256:5bd90b8c395f39bc82a5fb32a0173e220e3f401ff697840f4003e15b96d1befc"}, - {file = "grpcio-1.62.1-cp312-cp312-linux_armv7l.whl", hash = "sha256:b134d5d71b4e0837fff574c00e49176051a1c532d26c052a1e43231f252d813b"}, - {file = "grpcio-1.62.1-cp312-cp312-macosx_10_10_universal2.whl", hash = "sha256:d1f6c96573dc09d50dbcbd91dbf71d5cf97640c9427c32584010fbbd4c0e0037"}, - {file = "grpcio-1.62.1-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:359f821d4578f80f41909b9ee9b76fb249a21035a061a327f91c953493782c31"}, - {file = "grpcio-1.62.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a485f0c2010c696be269184bdb5ae72781344cb4e60db976c59d84dd6354fac9"}, - {file = "grpcio-1.62.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b50b09b4dc01767163d67e1532f948264167cd27f49e9377e3556c3cba1268e1"}, - {file = "grpcio-1.62.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3227c667dccbe38f2c4d943238b887bac588d97c104815aecc62d2fd976e014b"}, - {file = "grpcio-1.62.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3952b581eb121324853ce2b191dae08badb75cd493cb4e0243368aa9e61cfd41"}, - {file = "grpcio-1.62.1-cp312-cp312-win32.whl", hash = "sha256:83a17b303425104d6329c10eb34bba186ffa67161e63fa6cdae7776ff76df73f"}, - {file = "grpcio-1.62.1-cp312-cp312-win_amd64.whl", hash = "sha256:6696ffe440333a19d8d128e88d440f91fb92c75a80ce4b44d55800e656a3ef1d"}, - {file = "grpcio-1.62.1-cp37-cp37m-linux_armv7l.whl", hash = "sha256:e3393b0823f938253370ebef033c9fd23d27f3eae8eb9a8f6264900c7ea3fb5a"}, - {file = "grpcio-1.62.1-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:83e7ccb85a74beaeae2634f10eb858a0ed1a63081172649ff4261f929bacfd22"}, - {file = "grpcio-1.62.1-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:882020c87999d54667a284c7ddf065b359bd00251fcd70279ac486776dbf84ec"}, - {file = "grpcio-1.62.1-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a10383035e864f386fe096fed5c47d27a2bf7173c56a6e26cffaaa5a361addb1"}, - {file = "grpcio-1.62.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:960edebedc6b9ada1ef58e1c71156f28689978188cd8cff3b646b57288a927d9"}, - {file = "grpcio-1.62.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:23e2e04b83f347d0aadde0c9b616f4726c3d76db04b438fd3904b289a725267f"}, - {file = "grpcio-1.62.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:978121758711916d34fe57c1f75b79cdfc73952f1481bb9583399331682d36f7"}, - {file = "grpcio-1.62.1-cp37-cp37m-win_amd64.whl", hash = "sha256:9084086190cc6d628f282e5615f987288b95457292e969b9205e45b442276407"}, - {file = "grpcio-1.62.1-cp38-cp38-linux_armv7l.whl", hash = "sha256:22bccdd7b23c420a27fd28540fb5dcbc97dc6be105f7698cb0e7d7a420d0e362"}, - {file = "grpcio-1.62.1-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:8999bf1b57172dbc7c3e4bb3c732658e918f5c333b2942243f10d0d653953ba9"}, - {file = "grpcio-1.62.1-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:d9e52558b8b8c2f4ac05ac86344a7417ccdd2b460a59616de49eb6933b07a0bd"}, - {file = "grpcio-1.62.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1714e7bc935780bc3de1b3fcbc7674209adf5208ff825799d579ffd6cd0bd505"}, - {file = "grpcio-1.62.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c8842ccbd8c0e253c1f189088228f9b433f7a93b7196b9e5b6f87dba393f5d5d"}, - {file = "grpcio-1.62.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1f1e7b36bdff50103af95a80923bf1853f6823dd62f2d2a2524b66ed74103e49"}, - {file = "grpcio-1.62.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bba97b8e8883a8038606480d6b6772289f4c907f6ba780fa1f7b7da7dfd76f06"}, - {file = "grpcio-1.62.1-cp38-cp38-win32.whl", hash = "sha256:a7f615270fe534548112a74e790cd9d4f5509d744dd718cd442bf016626c22e4"}, - {file = "grpcio-1.62.1-cp38-cp38-win_amd64.whl", hash = "sha256:e6c8c8693df718c5ecbc7babb12c69a4e3677fd11de8886f05ab22d4e6b1c43b"}, - {file = "grpcio-1.62.1-cp39-cp39-linux_armv7l.whl", hash = "sha256:73db2dc1b201d20ab7083e7041946910bb991e7e9761a0394bbc3c2632326483"}, - {file = "grpcio-1.62.1-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:407b26b7f7bbd4f4751dbc9767a1f0716f9fe72d3d7e96bb3ccfc4aace07c8de"}, - {file = "grpcio-1.62.1-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:f8de7c8cef9261a2d0a62edf2ccea3d741a523c6b8a6477a340a1f2e417658de"}, - {file = "grpcio-1.62.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd5c8a1af40ec305d001c60236308a67e25419003e9bb3ebfab5695a8d0b369"}, - {file = "grpcio-1.62.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be0477cb31da67846a33b1a75c611f88bfbcd427fe17701b6317aefceee1b96f"}, - {file = "grpcio-1.62.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:60dcd824df166ba266ee0cfaf35a31406cd16ef602b49f5d4dfb21f014b0dedd"}, - {file = "grpcio-1.62.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:973c49086cabab773525f6077f95e5a993bfc03ba8fc32e32f2c279497780585"}, - {file = "grpcio-1.62.1-cp39-cp39-win32.whl", hash = "sha256:12859468e8918d3bd243d213cd6fd6ab07208195dc140763c00dfe901ce1e1b4"}, - {file = "grpcio-1.62.1-cp39-cp39-win_amd64.whl", hash = "sha256:b7209117bbeebdfa5d898205cc55153a51285757902dd73c47de498ad4d11332"}, - {file = "grpcio-1.62.1.tar.gz", hash = "sha256:6c455e008fa86d9e9a9d85bb76da4277c0d7d9668a3bfa70dbe86e9f3c759947"}, + {file = "grpcio-1.64.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:3b09c3d9de95461214a11d82cc0e6a46a6f4e1f91834b50782f932895215e5db"}, + {file = "grpcio-1.64.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:7e013428ab472892830287dd082b7d129f4d8afef49227a28223a77337555eaa"}, + {file = "grpcio-1.64.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:02cc9cc3f816d30f7993d0d408043b4a7d6a02346d251694d8ab1f78cc723e7e"}, + {file = "grpcio-1.64.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1f5de082d936e0208ce8db9095821361dfa97af8767a6607ae71425ac8ace15c"}, + {file = "grpcio-1.64.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7b7bf346391dffa182fba42506adf3a84f4a718a05e445b37824136047686a1"}, + {file = "grpcio-1.64.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:b2cbdfba18408389a1371f8c2af1659119e1831e5ed24c240cae9e27b4abc38d"}, + {file = "grpcio-1.64.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:aca4f15427d2df592e0c8f3d38847e25135e4092d7f70f02452c0e90d6a02d6d"}, + {file = "grpcio-1.64.0-cp310-cp310-win32.whl", hash = "sha256:7c1f5b2298244472bcda49b599be04579f26425af0fd80d3f2eb5fd8bc84d106"}, + {file = "grpcio-1.64.0-cp310-cp310-win_amd64.whl", hash = "sha256:73f84f9e5985a532e47880b3924867de16fa1aa513fff9b26106220c253c70c5"}, + {file = "grpcio-1.64.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:2a18090371d138a57714ee9bffd6c9c9cb2e02ce42c681aac093ae1e7189ed21"}, + {file = "grpcio-1.64.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:59c68df3a934a586c3473d15956d23a618b8f05b5e7a3a904d40300e9c69cbf0"}, + {file = "grpcio-1.64.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:b52e1ec7185512103dd47d41cf34ea78e7a7361ba460187ddd2416b480e0938c"}, + {file = "grpcio-1.64.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8d598b5d5e2c9115d7fb7e2cb5508d14286af506a75950762aa1372d60e41851"}, + {file = "grpcio-1.64.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01615bbcae6875eee8091e6b9414072f4e4b00d8b7e141f89635bdae7cf784e5"}, + {file = "grpcio-1.64.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:0b2dfe6dcace264807d9123d483d4c43274e3f8c39f90ff51de538245d7a4145"}, + {file = "grpcio-1.64.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7f17572dc9acd5e6dfd3014d10c0b533e9f79cd9517fc10b0225746f4c24b58e"}, + {file = "grpcio-1.64.0-cp311-cp311-win32.whl", hash = "sha256:6ec5ed15b4ffe56e2c6bc76af45e6b591c9be0224b3fb090adfb205c9012367d"}, + {file = "grpcio-1.64.0-cp311-cp311-win_amd64.whl", hash = "sha256:597191370951b477b7a1441e1aaa5cacebeb46a3b0bd240ec3bb2f28298c7553"}, + {file = "grpcio-1.64.0-cp312-cp312-linux_armv7l.whl", hash = "sha256:1ce4cd5a61d4532651079e7aae0fedf9a80e613eed895d5b9743e66b52d15812"}, + {file = "grpcio-1.64.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:650a8150a9b288f40d5b7c1d5400cc11724eae50bd1f501a66e1ea949173649b"}, + {file = "grpcio-1.64.0-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:8de0399b983f8676a7ccfdd45e5b2caec74a7e3cc576c6b1eecf3b3680deda5e"}, + {file = "grpcio-1.64.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:46b8b43ba6a2a8f3103f103f97996cad507bcfd72359af6516363c48793d5a7b"}, + {file = "grpcio-1.64.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a54362f03d4dcfae63be455d0a7d4c1403673498b92c6bfe22157d935b57c7a9"}, + {file = "grpcio-1.64.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:1f8ea18b928e539046bb5f9c124d717fbf00cc4b2d960ae0b8468562846f5aa1"}, + {file = "grpcio-1.64.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c56c91bd2923ddb6e7ed28ebb66d15633b03e0df22206f22dfcdde08047e0a48"}, + {file = "grpcio-1.64.0-cp312-cp312-win32.whl", hash = "sha256:874c741c8a66f0834f653a69e7e64b4e67fcd4a8d40296919b93bab2ccc780ba"}, + {file = "grpcio-1.64.0-cp312-cp312-win_amd64.whl", hash = "sha256:0da1d921f8e4bcee307aeef6c7095eb26e617c471f8cb1c454fd389c5c296d1e"}, + {file = "grpcio-1.64.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:c46fb6bfca17bfc49f011eb53416e61472fa96caa0979b4329176bdd38cbbf2a"}, + {file = "grpcio-1.64.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:3d2004e85cf5213995d09408501f82c8534700d2babeb81dfdba2a3bff0bb396"}, + {file = "grpcio-1.64.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:6d5541eb460d73a07418524fb64dcfe0adfbcd32e2dac0f8f90ce5b9dd6c046c"}, + {file = "grpcio-1.64.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1f279ad72dd7d64412e10f2443f9f34872a938c67387863c4cd2fb837f53e7d2"}, + {file = "grpcio-1.64.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85fda90b81da25993aa47fae66cae747b921f8f6777550895fb62375b776a231"}, + {file = "grpcio-1.64.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a053584079b793a54bece4a7d1d1b5c0645bdbee729215cd433703dc2532f72b"}, + {file = "grpcio-1.64.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:579dd9fb11bc73f0de061cab5f8b2def21480fd99eb3743ed041ad6a1913ee2f"}, + {file = "grpcio-1.64.0-cp38-cp38-win32.whl", hash = "sha256:23b6887bb21d77649d022fa1859e05853fdc2e60682fd86c3db652a555a282e0"}, + {file = "grpcio-1.64.0-cp38-cp38-win_amd64.whl", hash = "sha256:753cb58683ba0c545306f4e17dabf468d29cb6f6b11832e1e432160bb3f8403c"}, + {file = "grpcio-1.64.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:2186d76a7e383e1466e0ea2b0febc343ffeae13928c63c6ec6826533c2d69590"}, + {file = "grpcio-1.64.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0f30596cdcbed3c98024fb4f1d91745146385b3f9fd10c9f2270cbfe2ed7ed91"}, + {file = "grpcio-1.64.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:d9171f025a196f5bcfec7e8e7ffb7c3535f7d60aecd3503f9e250296c7cfc150"}, + {file = "grpcio-1.64.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cf4c8daed18ae2be2f1fc7d613a76ee2a2e28fdf2412d5c128be23144d28283d"}, + {file = "grpcio-1.64.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3550493ac1d23198d46dc9c9b24b411cef613798dc31160c7138568ec26bc9b4"}, + {file = "grpcio-1.64.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:3161a8f8bb38077a6470508c1a7301cd54301c53b8a34bb83e3c9764874ecabd"}, + {file = "grpcio-1.64.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2e8fabe2cc57a369638ab1ad8e6043721014fdf9a13baa7c0e35995d3a4a7618"}, + {file = "grpcio-1.64.0-cp39-cp39-win32.whl", hash = "sha256:31890b24d47b62cc27da49a462efe3d02f3c120edb0e6c46dcc0025506acf004"}, + {file = "grpcio-1.64.0-cp39-cp39-win_amd64.whl", hash = "sha256:5a56797dea8c02e7d3a85dfea879f286175cf4d14fbd9ab3ef2477277b927baa"}, + {file = "grpcio-1.64.0.tar.gz", hash = "sha256:257baf07f53a571c215eebe9679c3058a313fd1d1f7c4eede5a8660108c52d9c"}, ] [package.extras] -protobuf = ["grpcio-tools (>=1.62.1)"] +protobuf = ["grpcio-tools (>=1.64.0)"] [[package]] name = "h5py" @@ -1319,13 +1378,13 @@ numpy = ">=1.17.3" [[package]] name = "identify" -version = "2.5.35" +version = "2.5.36" description = "File identification library for Python" optional = false python-versions = ">=3.8" files = [ - {file = "identify-2.5.35-py2.py3-none-any.whl", hash = "sha256:c4de0081837b211594f8e877a6b4fad7ca32bbfc1a9307fdd61c28bfe923f13e"}, - {file = "identify-2.5.35.tar.gz", hash = "sha256:10a7ca245cfcd756a554a7288159f72ff105ad233c7c4b9c6f0f4d108f5f6791"}, + {file = "identify-2.5.36-py2.py3-none-any.whl", hash = "sha256:37d93f380f4de590500d9dba7db359d0d3da95ffe7f9de1753faa159e71e7dfa"}, + {file = "identify-2.5.36.tar.gz", hash = "sha256:e5e00f54165f9047fbebeb4a560f9acfb8af4c88232be60a488e9b68d122745d"}, ] [package.extras] @@ -1390,6 +1449,20 @@ files = [ {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, ] +[[package]] +name = "intel-openmp" +version = "2021.4.0" +description = "Intel OpenMP* Runtime Library" +optional = false +python-versions = "*" +files = [ + {file = "intel_openmp-2021.4.0-py2.py3-none-macosx_10_15_x86_64.macosx_11_0_x86_64.whl", hash = "sha256:41c01e266a7fdb631a7609191709322da2bbf24b252ba763f125dd651bcc7675"}, + {file = "intel_openmp-2021.4.0-py2.py3-none-manylinux1_i686.whl", hash = "sha256:3b921236a38384e2016f0f3d65af6732cf2c12918087128a9163225451e776f2"}, + {file = "intel_openmp-2021.4.0-py2.py3-none-manylinux1_x86_64.whl", hash = "sha256:e2240ab8d01472fed04f3544a878cda5da16c26232b7ea1b59132dbfb48b186e"}, + {file = "intel_openmp-2021.4.0-py2.py3-none-win32.whl", hash = "sha256:6e863d8fd3d7e8ef389d52cf97a50fe2afe1a19247e8c0d168ce021546f96fc9"}, + {file = "intel_openmp-2021.4.0-py2.py3-none-win_amd64.whl", hash = "sha256:eef4c8bcc8acefd7f5cd3b9384dbf73d59e2c99fc56545712ded913f43c4a94f"}, +] + [[package]] name = "ipython" version = "8.18.1" @@ -1448,13 +1521,13 @@ testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] [[package]] name = "jinja2" -version = "3.1.3" +version = "3.1.4" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" files = [ - {file = "Jinja2-3.1.3-py3-none-any.whl", hash = "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa"}, - {file = "Jinja2-3.1.3.tar.gz", hash = "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90"}, + {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"}, + {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"}, ] [package.dependencies] @@ -1465,24 +1538,24 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "joblib" -version = "1.4.0" +version = "1.4.2" description = "Lightweight pipelining with Python functions" optional = false python-versions = ">=3.8" files = [ - {file = "joblib-1.4.0-py3-none-any.whl", hash = "sha256:42942470d4062537be4d54c83511186da1fc14ba354961a2114da91efa9a4ed7"}, - {file = "joblib-1.4.0.tar.gz", hash = "sha256:1eb0dc091919cd384490de890cb5dfd538410a6d4b3b54eef09fb8c50b409b1c"}, + {file = "joblib-1.4.2-py3-none-any.whl", hash = "sha256:06d478d5674cbc267e7496a410ee875abd68e4340feff4490bcb7afb88060ae6"}, + {file = "joblib-1.4.2.tar.gz", hash = "sha256:2382c5816b2636fbd20a09e0f4e9dad4736765fdfb7dca582943b9c1366b3f0e"}, ] [[package]] name = "jsonschema" -version = "4.21.1" +version = "4.22.0" description = "An implementation of JSON Schema validation for Python" optional = false python-versions = ">=3.8" files = [ - {file = "jsonschema-4.21.1-py3-none-any.whl", hash = "sha256:7996507afae316306f9e2290407761157c6f78002dcf7419acb99822143d1c6f"}, - {file = "jsonschema-4.21.1.tar.gz", hash = "sha256:85727c00279f5fa6bedbe6238d2aa6403bedd8b4864ab11207d07df3cc1b2ee5"}, + {file = "jsonschema-4.22.0-py3-none-any.whl", hash = "sha256:ff4cfd6b1367a40e7bc6411caec72effadd3db0bbe5017de188f2d6108335802"}, + {file = "jsonschema-4.22.0.tar.gz", hash = "sha256:5b22d434a45935119af990552c862e5d6d564e8f6601206b305a61fdf661a2b7"}, ] [package.dependencies] @@ -1511,13 +1584,13 @@ referencing = ">=0.31.0" [[package]] name = "jupyter-client" -version = "8.6.1" +version = "8.6.2" description = "Jupyter protocol implementation and client libraries" optional = false python-versions = ">=3.8" files = [ - {file = "jupyter_client-8.6.1-py3-none-any.whl", hash = "sha256:3b7bd22f058434e3b9a7ea4b1500ed47de2713872288c0d511d19926f99b459f"}, - {file = "jupyter_client-8.6.1.tar.gz", hash = "sha256:e842515e2bab8e19186d89fdfea7abd15e39dd581f94e399f00e2af5a1652d3f"}, + {file = "jupyter_client-8.6.2-py3-none-any.whl", hash = "sha256:50cbc5c66fd1b8f65ecb66bc490ab73217993632809b6e505687de18e9dea39f"}, + {file = "jupyter_client-8.6.2.tar.gz", hash = "sha256:2bda14d55ee5ba58552a8c53ae43d215ad9868853489213f37da060ced54d8df"}, ] [package.dependencies] @@ -1530,7 +1603,7 @@ traitlets = ">=5.3" [package.extras] docs = ["ipykernel", "myst-parser", "pydata-sphinx-theme", "sphinx (>=4)", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] -test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko", "pre-commit", "pytest", "pytest-cov", "pytest-jupyter[client] (>=0.4.1)", "pytest-timeout"] +test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko", "pre-commit", "pytest (<8.2.0)", "pytest-cov", "pytest-jupyter[client] (>=0.4.1)", "pytest-timeout"] [[package]] name = "jupyter-core" @@ -1565,13 +1638,13 @@ files = [ [[package]] name = "keras" -version = "3.2.1" +version = "3.3.3" description = "Multi-backend Keras." optional = false python-versions = ">=3.9" files = [ - {file = "keras-3.2.1-py3-none-any.whl", hash = "sha256:0be1e89b041e697be562d8422ecb958ee5481acfc089913200926c561d258a03"}, - {file = "keras-3.2.1.tar.gz", hash = "sha256:966abbf0dfc1f9725f6293fb2a04ec83f56cd2a800990b38d1a03041255214a7"}, + {file = "keras-3.3.3-py3-none-any.whl", hash = "sha256:260df9ef71c6b89eb6816ce1c60f139c38ccdddd16f24e7005d2be127cdef8e4"}, + {file = "keras-3.3.3.tar.gz", hash = "sha256:f2fdffc8434fd77045cf8fb21816dbaa2308d5f76974ca924b2f60b40433b1a0"}, ] [package.dependencies] @@ -1698,17 +1771,39 @@ files = [ [[package]] name = "langcodes" -version = "3.3.0" +version = "3.4.0" description = "Tools for labeling human languages with IETF language tags" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "langcodes-3.3.0-py3-none-any.whl", hash = "sha256:4d89fc9acb6e9c8fdef70bcdf376113a3db09b67285d9e1d534de6d8818e7e69"}, - {file = "langcodes-3.3.0.tar.gz", hash = "sha256:794d07d5a28781231ac335a1561b8442f8648ca07cd518310aeb45d6f0807ef6"}, + {file = "langcodes-3.4.0-py3-none-any.whl", hash = "sha256:10a4cc078b8e8937d8485d3352312a0a89a3125190db9f2bb2074250eef654e9"}, + {file = "langcodes-3.4.0.tar.gz", hash = "sha256:ae5a77d1a01d0d1e91854a671890892b7ce9abb601ab7327fc5c874f899e1979"}, ] +[package.dependencies] +language-data = ">=1.2" + [package.extras] -data = ["language-data (>=1.1,<2.0)"] +build = ["build", "twine"] +test = ["pytest", "pytest-cov"] + +[[package]] +name = "language-data" +version = "1.2.0" +description = "Supplementary data about languages used by the langcodes module" +optional = false +python-versions = "*" +files = [ + {file = "language_data-1.2.0-py3-none-any.whl", hash = "sha256:77d5cab917f91ee0b2f1aa7018443e911cf8985ef734ca2ba3940770f6a3816b"}, + {file = "language_data-1.2.0.tar.gz", hash = "sha256:82a86050bbd677bfde87d97885b17566cfe75dad3ac4f5ce44b52c28f752e773"}, +] + +[package.dependencies] +marisa-trie = ">=0.7.7" + +[package.extras] +build = ["build", "twine"] +test = ["pytest", "pytest-cov"] [[package]] name = "libclang" @@ -1742,6 +1837,109 @@ files = [ [package.dependencies] altgraph = ">=0.17" +[[package]] +name = "marisa-trie" +version = "1.1.1" +description = "Static memory-efficient and fast Trie-like structures for Python." +optional = false +python-versions = ">=3.7" +files = [ + {file = "marisa_trie-1.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:68e48a547b9a1fd64c648684cd375402ba521c2c4a724756a944ef4b88c3047c"}, + {file = "marisa_trie-1.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:615d7de907919bda16e9cafc1fa74942354273c299bf07e3c0adb2420d6fad48"}, + {file = "marisa_trie-1.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d587001ef30960eba6d4c9b1f6b03037480c1e4b277b305b5a2957a5eebe4f09"}, + {file = "marisa_trie-1.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:11765ee9c2ad162bc7f8ab9cf383a21349673034bfac9bf00d6b06e44d70a4c9"}, + {file = "marisa_trie-1.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d5abc72a7267de6a4e3aa7463e780ddfaac442ef3a385f9e1c60e7f32c0cc34"}, + {file = "marisa_trie-1.1.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c70f85ab67754e2f28af6cb1f1db826b5ec735beca2fa021a79c14f9afbc6167"}, + {file = "marisa_trie-1.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d5c3a3d12f9c1a4312562b03ccbbd29d0aa28bda999c4f7fa7763f011c9d3a11"}, + {file = "marisa_trie-1.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:73eec66265424a548119648a6f38b119a525a767a86dc397e001bfe70f518b91"}, + {file = "marisa_trie-1.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:93c7129f410f9f3215d01ae7737cfc9afa528264c53ba8ee9859a29f164069e0"}, + {file = "marisa_trie-1.1.1-cp310-cp310-win32.whl", hash = "sha256:fe5b7ed1768409933d4457b8bf8d2b2b1af77b7333a27bd418ea0510289d4763"}, + {file = "marisa_trie-1.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:9c5baad750994681ebb8a92bd577a9be31de6e6f9cd391156bf595b91f719db2"}, + {file = "marisa_trie-1.1.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:bfc1a6b60bccee0f8b2edba893b9ad339e7607aee728f3bc4f75ba7d28185c7d"}, + {file = "marisa_trie-1.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d45329585ad3e068b7878ba929032987c6a53f85a40bd859b9a1a16324236dd6"}, + {file = "marisa_trie-1.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bd028e97d418f092e18d451a0a42bffaa849457662d66747a03332dfff6c39d9"}, + {file = "marisa_trie-1.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37d423cb3a9fe4270ee2ad083d1bb62d6c4cc333dcb1197b024ee1ae7c5d6535"}, + {file = "marisa_trie-1.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7cbcf88ddab9890a4942b52fff6c09d8b8aea59f4861b5d37e112a16a4218461"}, + {file = "marisa_trie-1.1.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4268b12a279c90450b39e062068ff4c878a6b9750d6ab52ade8285b1594b5d10"}, + {file = "marisa_trie-1.1.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bbfbbff3e94b3a0be44e010b093af1ce0e29c7ed081d2a020496e863333f5c11"}, + {file = "marisa_trie-1.1.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:5ecc678f562dd0cfe2406f0d5447e8200691509149c979334c2d0c26420d28ac"}, + {file = "marisa_trie-1.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1039316fc5899eee25df9302d81380e0be9a7fa0c10231322187b6d932b55a4a"}, + {file = "marisa_trie-1.1.1-cp311-cp311-win32.whl", hash = "sha256:67fa17083d5fb6d883c91ae512f9aab093a8a73ed77eae07e963014774909e81"}, + {file = "marisa_trie-1.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:c3140312ecb40456490d2afe24594bfc62a5a18de5344672ce6526e4c6e79e0e"}, + {file = "marisa_trie-1.1.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:98270ed60d0906a185dca185a9ce92fb97fbb68878a6cd76bd61994725727402"}, + {file = "marisa_trie-1.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3ff16e08924f0c342a37b1b1762d8d1394c4cc3b29724e124af54edecbdbd820"}, + {file = "marisa_trie-1.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e2f867376a302d4770817f8caf1b1f22ac32a2a8a49629343391640054f8f7ab"}, + {file = "marisa_trie-1.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a2ae28c5ad4abc1e638db5b39c454a03b25e966836cb3b7edbf398b34393d5ed"}, + {file = "marisa_trie-1.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:597077e4687d1ab2df13a6d46e33a09e6edcb985566717fe52bcb262f592754b"}, + {file = "marisa_trie-1.1.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:29414a4b49905c67b48c662f39894d7594be6e3a58b15d3e7eee3588188d5591"}, + {file = "marisa_trie-1.1.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:52414fd15573475c8f79f90c3b7bbc37723e54f9671ba7d0e491887bcdeac7e7"}, + {file = "marisa_trie-1.1.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:5aa364e4ccda1af55784b6dd318954924870792f9fd336b941d9b2fd8a4311e0"}, + {file = "marisa_trie-1.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:86427594ee1024d092a1482c33ed857b74d55418a4385495e1e2c60de8ca7572"}, + {file = "marisa_trie-1.1.1-cp312-cp312-win32.whl", hash = "sha256:dea2583084f7d5e095676afc1cc6d342862911cd496095b636ef14ac74f14aa3"}, + {file = "marisa_trie-1.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:8a2af61b5c3d9151b9320020499c3609651e24dd0c6178ec8f4826c78dbd5f42"}, + {file = "marisa_trie-1.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5be36ef0f5649e47f53302dc5317445c2764870d6a0ab5317a79381ff5ddf2bb"}, + {file = "marisa_trie-1.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:298a496ac0a7d06710e1ecc4df1f22b7384ca1a46d5295eb7b4445bbd15adb92"}, + {file = "marisa_trie-1.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:883ec31db8ec790a3ce6f39988a983b2c2b49ab018ec0d5bad4a248c8171f90d"}, + {file = "marisa_trie-1.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f839cddd130d1073a151eb13d709b4449eb4eb2a29c0f38b8e1436fd57eb4a4b"}, + {file = "marisa_trie-1.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:235a14f65fc453e6ffe1f4287d7eda832b6870f925adf9bf72a402b0417d2711"}, + {file = "marisa_trie-1.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a707aa9d0ad8fb2fcc074129652903801e5295e53c94d46fb66f46fe38ad8b19"}, + {file = "marisa_trie-1.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3fc5ba277a586a3fd97c56076d9bd84339ef8cef08f28527b2384d72f28df853"}, + {file = "marisa_trie-1.1.1-cp37-cp37m-win32.whl", hash = "sha256:6c5519ff75e6001a62404b087774b517d669122b9b8b8ecf622f21e6d990700a"}, + {file = "marisa_trie-1.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:f9cc48c12556610d814e4b162123eee43a6048f032d3957554e664feb2f77504"}, + {file = "marisa_trie-1.1.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:73d7ae84293ea6986c168b0cf0d29cd3abf16cfef7375c33d423816ca0eebe48"}, + {file = "marisa_trie-1.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5f410c0c28ec0d411d75f56327de35df15656bdc308648312c983a15ee84023b"}, + {file = "marisa_trie-1.1.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b406bab536dde70b36a8e3e60d0b2f224b280281988d6b0a0c24e47bd71b2c18"}, + {file = "marisa_trie-1.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:27567a8e8950ced08aa3c74da2ceeff1f433114064df15e9ed1ec981f30970af"}, + {file = "marisa_trie-1.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02578f4c709232caeb3bf404bfd6b1c49936db8899790dfe5cd21e1a72df18bb"}, + {file = "marisa_trie-1.1.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a3edbb4373f20a5d62e33d8aad9d7f7ad40c2ccf8e41d0e2534f28c9a73d5613"}, + {file = "marisa_trie-1.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:86184796d384183da5e0068e6fb96b060fb437efc60ba264b125350e8c7f498c"}, + {file = "marisa_trie-1.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:9992a5f0c90dfc21664d218cf016acc6d9ebeb2f97c57bb4aa4d063dcb2253b8"}, + {file = "marisa_trie-1.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:dad3167eb1c8259afb183c3dddee070bc39c68857490ed61c5c90186ec380ab0"}, + {file = "marisa_trie-1.1.1-cp38-cp38-win32.whl", hash = "sha256:c0a0ae5d8b6c39f53f3711b8bcdda0fe559f52c1789438b8399ea8a81b399dff"}, + {file = "marisa_trie-1.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:a127e3eebfb638799cf35a8504174462cf45395825f1ae9d45a5c434490b1bcd"}, + {file = "marisa_trie-1.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:76d7fd725dd7d7621f4202306ddb3f7a90ff3d1c511de9ea2c7ffa540169a7ca"}, + {file = "marisa_trie-1.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4241322c9022ad0f01e6049994c4eb95f35d8f64d2d7ab55f653d9e8bf51ba0f"}, + {file = "marisa_trie-1.1.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8780b5a43a0cc861cafd78b9b2a9849648bb86d3cabe5e95d80350986ad7e801"}, + {file = "marisa_trie-1.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4261285399b27c36a7ff0eb13e4eebaab8dd814a9512b3cd1191552c0af799f8"}, + {file = "marisa_trie-1.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f451948bfbdc9627318e3210683f7b8d4533d3174d7706ee94b6008c39e80753"}, + {file = "marisa_trie-1.1.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:53d4ef171c77d4f0fd6278a0f1dab58562faa12cac3c5c9cc4cac4ba7e378f17"}, + {file = "marisa_trie-1.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:aacb972faffbc208ed7f52ed50dd6710f38175d3673861405e0e82fa12d57269"}, + {file = "marisa_trie-1.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:e5603cb20eeded143c5ff035978591b71bc0bc2c6cd9c2e6dfdaacdaab76907c"}, + {file = "marisa_trie-1.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:405ece63330b113040ed5b2371ff6e026d53c9c706ca9c58baf57f322e192895"}, + {file = "marisa_trie-1.1.1-cp39-cp39-win32.whl", hash = "sha256:b7a853063785e382d86eadea57363a0e2f04520d6ef948be88181df9e9ee5c0d"}, + {file = "marisa_trie-1.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:b44bd2bfc4bf080421a9ebac5f12434b36494effaa0ca8593a3df4e77cc6620e"}, + {file = "marisa_trie-1.1.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5dba7a60d6d340fd498f2a967c0a4c3aa7c4cab6ca7655cde0289cdc7bf3f747"}, + {file = "marisa_trie-1.1.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:ad624e95f46d8fc6f82af2d372ad55ef218babc323aa14338df843d907d040cc"}, + {file = "marisa_trie-1.1.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ccf3ae61a63dec06f3cfb8521fd9c8e6391761d47a4df0164954690b7cc3fab"}, + {file = "marisa_trie-1.1.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:493956e76e2c6276d1e804ee723b23eaba30beca43fc0ddf3a093abc178af3f4"}, + {file = "marisa_trie-1.1.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5207026332ed08957a3bc1391eb9c8861a1882e1517887ef423cfd3afc30e947"}, + {file = "marisa_trie-1.1.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:bae9ff4146b84ef0d51e0940e310d034d1e6a6ce1879a03a891c541dce8b26f9"}, + {file = "marisa_trie-1.1.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:059a7b7cc0c7796c068e6ab07e522791c7addf3697616b2bcb73ed1d42a761aa"}, + {file = "marisa_trie-1.1.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e69ba62cbb74d2824cd49be9c2f592b306e5107d5005f0bb3b4d62c9b6ae7246"}, + {file = "marisa_trie-1.1.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26232fe4442f89643b4206ded1be486a12fcf731d55c5e42ff86e2f2ba5e949a"}, + {file = "marisa_trie-1.1.1-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3fa3bd1d32faf6afdb877a1e1f65e33873d88d158a16f9e00830901519d428ca"}, + {file = "marisa_trie-1.1.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:a7e48ba7748c2090b58f911ea995b94ff590781e81d0a2e0fc8b583af4d26710"}, + {file = "marisa_trie-1.1.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:52f0d96d738831c81127377920e86fc8cb14638df1ea8f37ea392b545f9f984c"}, + {file = "marisa_trie-1.1.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:511e5d23070c166427de24742771a6040eb5c787c51145dddcc7af4106ec8b08"}, + {file = "marisa_trie-1.1.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec39c09c0bf850f01b15bbd18214a89b9730001fd1483de873f6b7dc73fb2316"}, + {file = "marisa_trie-1.1.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cfe6454eb6d2a9b2bb5583b433048670f85f264e613d1f885251ce68070adad8"}, + {file = "marisa_trie-1.1.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5661d8974b4128a847deb282dbe040e5eed5b91c56ed9d207623ea4db24abc5"}, + {file = "marisa_trie-1.1.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:08aed31f8164c7ec8ba6a449e6a18f4052bafe9dcaa2dcfd0e25fee9ddd94e36"}, + {file = "marisa_trie-1.1.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:18a1440b01d87566a5c2bddd6a575180a3526ec9da5f7aa55769213153737d19"}, + {file = "marisa_trie-1.1.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:7cc903512d5d7cf3a30624dde8adc5ba4312732c931746f18641e0a5762646b3"}, + {file = "marisa_trie-1.1.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c7785c04373d8d2844f6636d73c08384a587c098093a04166177fa45494d912"}, + {file = "marisa_trie-1.1.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0196e3a9ed3bfce20e32ff7d9ff1c929d0ceb8c380ae0f227e11ab819e70dc2c"}, + {file = "marisa_trie-1.1.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2601b320268a87a4a7accaf7c2e8fc99c568e13316903d2010eb09e0ff16b6a9"}, + {file = "marisa_trie-1.1.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:cd285b97204046e5c5018fa03752d243c6423df023963b52de39d4e90bb3024a"}, + {file = "marisa_trie-1.1.1.tar.gz", hash = "sha256:363f1be2314b1f9e26b5a3de45b59fd9a0a3289bf157be61bbed770643a46f1a"}, +] + +[package.dependencies] +setuptools = "*" + +[package.extras] +test = ["hypothesis", "pytest", "readme-renderer"] + [[package]] name = "markdown" version = "3.6" @@ -1855,39 +2053,40 @@ files = [ [[package]] name = "matplotlib" -version = "3.8.4" +version = "3.9.0" description = "Python plotting package" optional = false python-versions = ">=3.9" files = [ - {file = "matplotlib-3.8.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:abc9d838f93583650c35eca41cfcec65b2e7cb50fd486da6f0c49b5e1ed23014"}, - {file = "matplotlib-3.8.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f65c9f002d281a6e904976007b2d46a1ee2bcea3a68a8c12dda24709ddc9106"}, - {file = "matplotlib-3.8.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce1edd9f5383b504dbc26eeea404ed0a00656c526638129028b758fd43fc5f10"}, - {file = "matplotlib-3.8.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ecd79298550cba13a43c340581a3ec9c707bd895a6a061a78fa2524660482fc0"}, - {file = "matplotlib-3.8.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:90df07db7b599fe7035d2f74ab7e438b656528c68ba6bb59b7dc46af39ee48ef"}, - {file = "matplotlib-3.8.4-cp310-cp310-win_amd64.whl", hash = "sha256:ac24233e8f2939ac4fd2919eed1e9c0871eac8057666070e94cbf0b33dd9c338"}, - {file = "matplotlib-3.8.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:72f9322712e4562e792b2961971891b9fbbb0e525011e09ea0d1f416c4645661"}, - {file = "matplotlib-3.8.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:232ce322bfd020a434caaffbd9a95333f7c2491e59cfc014041d95e38ab90d1c"}, - {file = "matplotlib-3.8.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6addbd5b488aedb7f9bc19f91cd87ea476206f45d7116fcfe3d31416702a82fa"}, - {file = "matplotlib-3.8.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc4ccdc64e3039fc303defd119658148f2349239871db72cd74e2eeaa9b80b71"}, - {file = "matplotlib-3.8.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b7a2a253d3b36d90c8993b4620183b55665a429da8357a4f621e78cd48b2b30b"}, - {file = "matplotlib-3.8.4-cp311-cp311-win_amd64.whl", hash = "sha256:8080d5081a86e690d7688ffa542532e87f224c38a6ed71f8fbed34dd1d9fedae"}, - {file = "matplotlib-3.8.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:6485ac1f2e84676cff22e693eaa4fbed50ef5dc37173ce1f023daef4687df616"}, - {file = "matplotlib-3.8.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c89ee9314ef48c72fe92ce55c4e95f2f39d70208f9f1d9db4e64079420d8d732"}, - {file = "matplotlib-3.8.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50bac6e4d77e4262c4340d7a985c30912054745ec99756ce213bfbc3cb3808eb"}, - {file = "matplotlib-3.8.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f51c4c869d4b60d769f7b4406eec39596648d9d70246428745a681c327a8ad30"}, - {file = "matplotlib-3.8.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b12ba985837e4899b762b81f5b2845bd1a28f4fdd1a126d9ace64e9c4eb2fb25"}, - {file = "matplotlib-3.8.4-cp312-cp312-win_amd64.whl", hash = "sha256:7a6769f58ce51791b4cb8b4d7642489df347697cd3e23d88266aaaee93b41d9a"}, - {file = "matplotlib-3.8.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:843cbde2f0946dadd8c5c11c6d91847abd18ec76859dc319362a0964493f0ba6"}, - {file = "matplotlib-3.8.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1c13f041a7178f9780fb61cc3a2b10423d5e125480e4be51beaf62b172413b67"}, - {file = "matplotlib-3.8.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb44f53af0a62dc80bba4443d9b27f2fde6acfdac281d95bc872dc148a6509cc"}, - {file = "matplotlib-3.8.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:606e3b90897554c989b1e38a258c626d46c873523de432b1462f295db13de6f9"}, - {file = "matplotlib-3.8.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9bb0189011785ea794ee827b68777db3ca3f93f3e339ea4d920315a0e5a78d54"}, - {file = "matplotlib-3.8.4-cp39-cp39-win_amd64.whl", hash = "sha256:6209e5c9aaccc056e63b547a8152661324404dd92340a6e479b3a7f24b42a5d0"}, - {file = "matplotlib-3.8.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c7064120a59ce6f64103c9cefba8ffe6fba87f2c61d67c401186423c9a20fd35"}, - {file = "matplotlib-3.8.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0e47eda4eb2614300fc7bb4657fced3e83d6334d03da2173b09e447418d499f"}, - {file = "matplotlib-3.8.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:493e9f6aa5819156b58fce42b296ea31969f2aab71c5b680b4ea7a3cb5c07d94"}, - {file = "matplotlib-3.8.4.tar.gz", hash = "sha256:8aac397d5e9ec158960e31c381c5ffc52ddd52bd9a47717e2a694038167dffea"}, + {file = "matplotlib-3.9.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2bcee1dffaf60fe7656183ac2190bd630842ff87b3153afb3e384d966b57fe56"}, + {file = "matplotlib-3.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3f988bafb0fa39d1074ddd5bacd958c853e11def40800c5824556eb630f94d3b"}, + {file = "matplotlib-3.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe428e191ea016bb278758c8ee82a8129c51d81d8c4bc0846c09e7e8e9057241"}, + {file = "matplotlib-3.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eaf3978060a106fab40c328778b148f590e27f6fa3cd15a19d6892575bce387d"}, + {file = "matplotlib-3.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2e7f03e5cbbfacdd48c8ea394d365d91ee8f3cae7e6ec611409927b5ed997ee4"}, + {file = "matplotlib-3.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:13beb4840317d45ffd4183a778685e215939be7b08616f431c7795276e067463"}, + {file = "matplotlib-3.9.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:063af8587fceeac13b0936c42a2b6c732c2ab1c98d38abc3337e430e1ff75e38"}, + {file = "matplotlib-3.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9a2fa6d899e17ddca6d6526cf6e7ba677738bf2a6a9590d702c277204a7c6152"}, + {file = "matplotlib-3.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:550cdda3adbd596078cca7d13ed50b77879104e2e46392dcd7c75259d8f00e85"}, + {file = "matplotlib-3.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76cce0f31b351e3551d1f3779420cf8f6ec0d4a8cf9c0237a3b549fd28eb4abb"}, + {file = "matplotlib-3.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c53aeb514ccbbcbab55a27f912d79ea30ab21ee0531ee2c09f13800efb272674"}, + {file = "matplotlib-3.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:a5be985db2596d761cdf0c2eaf52396f26e6a64ab46bd8cd810c48972349d1be"}, + {file = "matplotlib-3.9.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:c79f3a585f1368da6049318bdf1f85568d8d04b2e89fc24b7e02cc9b62017382"}, + {file = "matplotlib-3.9.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bdd1ecbe268eb3e7653e04f451635f0fb0f77f07fd070242b44c076c9106da84"}, + {file = "matplotlib-3.9.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d38e85a1a6d732f645f1403ce5e6727fd9418cd4574521d5803d3d94911038e5"}, + {file = "matplotlib-3.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0a490715b3b9984fa609116481b22178348c1a220a4499cda79132000a79b4db"}, + {file = "matplotlib-3.9.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8146ce83cbc5dc71c223a74a1996d446cd35cfb6a04b683e1446b7e6c73603b7"}, + {file = "matplotlib-3.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:d91a4ffc587bacf5c4ce4ecfe4bcd23a4b675e76315f2866e588686cc97fccdf"}, + {file = "matplotlib-3.9.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:616fabf4981a3b3c5a15cd95eba359c8489c4e20e03717aea42866d8d0465956"}, + {file = "matplotlib-3.9.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cd53c79fd02f1c1808d2cfc87dd3cf4dbc63c5244a58ee7944497107469c8d8a"}, + {file = "matplotlib-3.9.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06a478f0d67636554fa78558cfbcd7b9dba85b51f5c3b5a0c9be49010cf5f321"}, + {file = "matplotlib-3.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81c40af649d19c85f8073e25e5806926986806fa6d54be506fbf02aef47d5a89"}, + {file = "matplotlib-3.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:52146fc3bd7813cc784562cb93a15788be0b2875c4655e2cc6ea646bfa30344b"}, + {file = "matplotlib-3.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:0fc51eaa5262553868461c083d9adadb11a6017315f3a757fc45ec6ec5f02888"}, + {file = "matplotlib-3.9.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:bd4f2831168afac55b881db82a7730992aa41c4f007f1913465fb182d6fb20c0"}, + {file = "matplotlib-3.9.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:290d304e59be2b33ef5c2d768d0237f5bd132986bdcc66f80bc9bcc300066a03"}, + {file = "matplotlib-3.9.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ff2e239c26be4f24bfa45860c20ffccd118d270c5b5d081fa4ea409b5469fcd"}, + {file = "matplotlib-3.9.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:af4001b7cae70f7eaacfb063db605280058246de590fa7874f00f62259f2df7e"}, + {file = "matplotlib-3.9.0.tar.gz", hash = "sha256:e6d29ea6c19e34b30fb7d88b7081f869a03014f66fe06d62cc77d5a6ea88ed7a"}, ] [package.dependencies] @@ -1896,12 +2095,15 @@ cycler = ">=0.10" fonttools = ">=4.22.0" importlib-resources = {version = ">=3.2.0", markers = "python_version < \"3.10\""} kiwisolver = ">=1.3.1" -numpy = ">=1.21" +numpy = ">=1.23" packaging = ">=20.0" pillow = ">=8" pyparsing = ">=2.3.1" python-dateutil = ">=2.7" +[package.extras] +dev = ["meson-python (>=0.13.1)", "numpy (>=1.25)", "pybind11 (>=2.6)", "setuptools (>=64)", "setuptools_scm (>=7)"] + [[package]] name = "matplotlib-inline" version = "0.1.7" @@ -1951,34 +2153,34 @@ files = [ [[package]] name = "mkdocs" -version = "1.5.3" +version = "1.6.0" description = "Project documentation with Markdown." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "mkdocs-1.5.3-py3-none-any.whl", hash = "sha256:3b3a78e736b31158d64dbb2f8ba29bd46a379d0c6e324c2246c3bc3d2189cfc1"}, - {file = "mkdocs-1.5.3.tar.gz", hash = "sha256:eb7c99214dcb945313ba30426c2451b735992c73c2e10838f76d09e39ff4d0e2"}, + {file = "mkdocs-1.6.0-py3-none-any.whl", hash = "sha256:1eb5cb7676b7d89323e62b56235010216319217d4af5ddc543a91beb8d125ea7"}, + {file = "mkdocs-1.6.0.tar.gz", hash = "sha256:a73f735824ef83a4f3bcb7a231dcab23f5a838f88b7efc54a0eef5fbdbc3c512"}, ] [package.dependencies] click = ">=7.0" colorama = {version = ">=0.4", markers = "platform_system == \"Windows\""} ghp-import = ">=1.0" -importlib-metadata = {version = ">=4.3", markers = "python_version < \"3.10\""} +importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} jinja2 = ">=2.11.1" -markdown = ">=3.2.1" +markdown = ">=3.3.6" markupsafe = ">=2.0.1" mergedeep = ">=1.3.4" +mkdocs-get-deps = ">=0.2.0" packaging = ">=20.5" pathspec = ">=0.11.1" -platformdirs = ">=2.2.0" pyyaml = ">=5.1" pyyaml-env-tag = ">=0.1" watchdog = ">=2.0" [package.extras] i18n = ["babel (>=2.9.0)"] -min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-import (==1.0)", "importlib-metadata (==4.3)", "jinja2 (==2.11.1)", "markdown (==3.2.1)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "packaging (==20.5)", "pathspec (==0.11.1)", "platformdirs (==2.2.0)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "typing-extensions (==3.10)", "watchdog (==2.0)"] +min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-import (==1.0)", "importlib-metadata (==4.4)", "jinja2 (==2.11.1)", "markdown (==3.3.6)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "mkdocs-get-deps (==0.2.0)", "packaging (==20.5)", "pathspec (==0.11.1)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "watchdog (==2.0)"] [[package]] name = "mkdocs-autorefs" @@ -2011,15 +2213,32 @@ files = [ click = ">=8.1" markdown = ">=3.3" +[[package]] +name = "mkdocs-get-deps" +version = "0.2.0" +description = "MkDocs extension that lists all dependencies according to a mkdocs.yml file" +optional = false +python-versions = ">=3.8" +files = [ + {file = "mkdocs_get_deps-0.2.0-py3-none-any.whl", hash = "sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134"}, + {file = "mkdocs_get_deps-0.2.0.tar.gz", hash = "sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=4.3", markers = "python_version < \"3.10\""} +mergedeep = ">=1.3.4" +platformdirs = ">=2.2.0" +pyyaml = ">=5.1" + [[package]] name = "mkdocs-material" -version = "9.5.18" +version = "9.5.25" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.18-py3-none-any.whl", hash = "sha256:1e0e27fc9fe239f9064318acf548771a4629d5fd5dfd45444fd80a953fe21eb4"}, - {file = "mkdocs_material-9.5.18.tar.gz", hash = "sha256:a43f470947053fa2405c33995f282d24992c752a50114f23f30da9d8d0c57e62"}, + {file = "mkdocs_material-9.5.25-py3-none-any.whl", hash = "sha256:68fdab047a0b9bfbefe79ce267e8a7daaf5128bcf7867065fcd201ee335fece1"}, + {file = "mkdocs_material-9.5.25.tar.gz", hash = "sha256:d0662561efb725b712207e0ee01f035ca15633f29a64628e24f01ec99d7078f4"}, ] [package.dependencies] @@ -2027,7 +2246,7 @@ babel = ">=2.10,<3.0" colorama = ">=0.4,<1.0" jinja2 = ">=3.0,<4.0" markdown = ">=3.2,<4.0" -mkdocs = ">=1.5.3,<1.6.0" +mkdocs = ">=1.6,<2.0" mkdocs-material-extensions = ">=1.3,<2.0" paginate = ">=0.5,<1.0" pygments = ">=2.16,<3.0" @@ -2053,13 +2272,13 @@ files = [ [[package]] name = "mkdocs-section-index" -version = "0.3.8" +version = "0.3.9" description = "MkDocs plugin to allow clickable sections that lead to an index page" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "mkdocs_section_index-0.3.8-py3-none-any.whl", hash = "sha256:823d298d78bc1e73e23678ff60889f3c369c2167b03dba73fea88bd0e268a60d"}, - {file = "mkdocs_section_index-0.3.8.tar.gz", hash = "sha256:bbd209f0da79441baf136ef3a9c40665bb9681d1fb62c73ca2f116fd1388a404"}, + {file = "mkdocs_section_index-0.3.9-py3-none-any.whl", hash = "sha256:5e5eb288e8d7984d36c11ead5533f376fdf23498f44e903929d72845b24dfe34"}, + {file = "mkdocs_section_index-0.3.9.tar.gz", hash = "sha256:b66128d19108beceb08b226ee1ba0981840d14baf8a652b6c59e650f3f92e4f8"}, ] [package.dependencies] @@ -2096,19 +2315,37 @@ python-legacy = ["mkdocstrings-python-legacy (>=0.2.1)"] [[package]] name = "mkdocstrings-python" -version = "1.9.2" +version = "1.10.0" description = "A Python handler for mkdocstrings." optional = false python-versions = ">=3.8" files = [ - {file = "mkdocstrings_python-1.9.2-py3-none-any.whl", hash = "sha256:96d82f6424e08db6245e4a15ca95619f4ecd0ddd254c0aa590d4181814e16ee5"}, - {file = "mkdocstrings_python-1.9.2.tar.gz", hash = "sha256:8546a103c9b22e1778c72c887696acc39a6635fedde3c912ce00f967518a8847"}, + {file = "mkdocstrings_python-1.10.0-py3-none-any.whl", hash = "sha256:ba833fbd9d178a4b9d5cb2553a4df06e51dc1f51e41559a4d2398c16a6f69ecc"}, + {file = "mkdocstrings_python-1.10.0.tar.gz", hash = "sha256:71678fac657d4d2bb301eed4e4d2d91499c095fd1f8a90fa76422a87a5693828"}, ] [package.dependencies] -griffe = ">=0.37" +griffe = ">=0.44" mkdocstrings = ">=0.24.2" +[[package]] +name = "mkl" +version = "2021.4.0" +description = "Intel® oneAPI Math Kernel Library" +optional = false +python-versions = "*" +files = [ + {file = "mkl-2021.4.0-py2.py3-none-macosx_10_15_x86_64.macosx_11_0_x86_64.whl", hash = "sha256:67460f5cd7e30e405b54d70d1ed3ca78118370b65f7327d495e9c8847705e2fb"}, + {file = "mkl-2021.4.0-py2.py3-none-manylinux1_i686.whl", hash = "sha256:636d07d90e68ccc9630c654d47ce9fdeb036bb46e2b193b3a9ac8cfea683cce5"}, + {file = "mkl-2021.4.0-py2.py3-none-manylinux1_x86_64.whl", hash = "sha256:398dbf2b0d12acaf54117a5210e8f191827f373d362d796091d161f610c1ebfb"}, + {file = "mkl-2021.4.0-py2.py3-none-win32.whl", hash = "sha256:439c640b269a5668134e3dcbcea4350459c4a8bc46469669b2d67e07e3d330e8"}, + {file = "mkl-2021.4.0-py2.py3-none-win_amd64.whl", hash = "sha256:ceef3cafce4c009dd25f65d7ad0d833a0fbadc3d8903991ec92351fe5de1e718"}, +] + +[package.dependencies] +intel-openmp = "==2021.*" +tbb = "==2021.*" + [[package]] name = "ml-dtypes" version = "0.3.2" @@ -2148,23 +2385,26 @@ dev = ["absl-py", "pyink", "pylint (>=2.6.0)", "pytest", "pytest-xdist"] [[package]] name = "mlflow-skinny" -version = "2.12.1" +version = "2.13.1" description = "MLflow is an open source platform for the complete machine learning lifecycle" optional = true python-versions = ">=3.8" files = [ - {file = "mlflow_skinny-2.12.1-py3-none-any.whl", hash = "sha256:51539de93a7f8b74b2d6b4307f204235469f6fadd19078599abd12a4bcf6b5b0"}, - {file = "mlflow_skinny-2.12.1.tar.gz", hash = "sha256:a5c3bb2f111867db988d4cdd782b6224fca4fc3d86706e9e587c379973ce7353"}, + {file = "mlflow_skinny-2.13.1-py3-none-any.whl", hash = "sha256:0c792050a64f2e6b774b83b5093a78b9f4c1e6b1d3ae004b563fcf43f9344699"}, + {file = "mlflow_skinny-2.13.1.tar.gz", hash = "sha256:c08a734d92e27092a2b407e808db7a817d8f0b0b13883fcefb3460903bdb8de5"}, ] [package.dependencies] +cachetools = ">=5.0.0,<6" click = ">=7.0,<9" cloudpickle = "<4" entrypoints = "<1" gitpython = ">=3.1.9,<4" importlib-metadata = ">=3.7.0,<4.7.0 || >4.7.0,<8" +opentelemetry-api = ">=1.0.0,<3" +opentelemetry-sdk = ">=1.0.0,<3" packaging = "<25" -protobuf = ">=3.12.0,<6" +protobuf = ">=3.12.0,<5" pytz = "<2025" pyyaml = ">=5.1,<7" requests = ">=2.17.3,<3" @@ -2176,6 +2416,8 @@ databricks = ["azure-storage-file-datalake (>12)", "boto3 (>1)", "botocore", "go extras = ["azureml-core (>=1.2.0)", "boto3", "botocore", "google-cloud-storage (>=1.30.0)", "kubernetes", "mlserver (>=1.2.0,!=1.3.1,<1.4.0)", "mlserver-mlflow (>=1.2.0,!=1.3.1,<1.4.0)", "prometheus-flask-exporter", "pyarrow", "pysftp", "requests-auth-aws-sigv4", "virtualenv"] gateway = ["aiohttp (<4)", "boto3 (>=1.28.56,<2)", "fastapi (<1)", "pydantic (>=1.0,<3)", "slowapi (>=0.1.9,<1)", "tiktoken (<1)", "uvicorn[standard] (<1)", "watchfiles (<1)"] genai = ["aiohttp (<4)", "boto3 (>=1.28.56,<2)", "fastapi (<1)", "pydantic (>=1.0,<3)", "slowapi (>=0.1.9,<1)", "tiktoken (<1)", "uvicorn[standard] (<1)", "watchfiles (<1)"] +jfrog = ["mlflow-jfrog-plugin"] +langchain = ["langchain (>=0.1.4,<=0.2.1)"] sqlserver = ["mlflow-dbstore"] xethub = ["mlflow-xethub"] @@ -2190,6 +2432,23 @@ files = [ {file = "monotonic-1.6.tar.gz", hash = "sha256:3a55207bcfed53ddd5c5bae174524062935efed17792e9de2ad0205ce9ad63f7"}, ] +[[package]] +name = "mpmath" +version = "1.3.0" +description = "Python library for arbitrary-precision floating-point arithmetic" +optional = false +python-versions = "*" +files = [ + {file = "mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c"}, + {file = "mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f"}, +] + +[package.extras] +develop = ["codecov", "pycodestyle", "pytest (>=4.6)", "pytest-cov", "wheel"] +docs = ["sphinx"] +gmpy = ["gmpy2 (>=2.1.0a4)"] +tests = ["pytest (>=4.6)"] + [[package]] name = "murmurhash" version = "1.0.10" @@ -2234,38 +2493,38 @@ files = [ [[package]] name = "mypy" -version = "1.9.0" +version = "1.10.0" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f8a67616990062232ee4c3952f41c779afac41405806042a8126fe96e098419f"}, - {file = "mypy-1.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d357423fa57a489e8c47b7c85dfb96698caba13d66e086b412298a1a0ea3b0ed"}, - {file = "mypy-1.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49c87c15aed320de9b438ae7b00c1ac91cd393c1b854c2ce538e2a72d55df150"}, - {file = "mypy-1.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:48533cdd345c3c2e5ef48ba3b0d3880b257b423e7995dada04248725c6f77374"}, - {file = "mypy-1.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:4d3dbd346cfec7cb98e6cbb6e0f3c23618af826316188d587d1c1bc34f0ede03"}, - {file = "mypy-1.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:653265f9a2784db65bfca694d1edd23093ce49740b2244cde583aeb134c008f3"}, - {file = "mypy-1.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3a3c007ff3ee90f69cf0a15cbcdf0995749569b86b6d2f327af01fd1b8aee9dc"}, - {file = "mypy-1.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2418488264eb41f69cc64a69a745fad4a8f86649af4b1041a4c64ee61fc61129"}, - {file = "mypy-1.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:68edad3dc7d70f2f17ae4c6c1b9471a56138ca22722487eebacfd1eb5321d612"}, - {file = "mypy-1.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:85ca5fcc24f0b4aeedc1d02f93707bccc04733f21d41c88334c5482219b1ccb3"}, - {file = "mypy-1.9.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aceb1db093b04db5cd390821464504111b8ec3e351eb85afd1433490163d60cd"}, - {file = "mypy-1.9.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0235391f1c6f6ce487b23b9dbd1327b4ec33bb93934aa986efe8a9563d9349e6"}, - {file = "mypy-1.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4d5ddc13421ba3e2e082a6c2d74c2ddb3979c39b582dacd53dd5d9431237185"}, - {file = "mypy-1.9.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:190da1ee69b427d7efa8aa0d5e5ccd67a4fb04038c380237a0d96829cb157913"}, - {file = "mypy-1.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:fe28657de3bfec596bbeef01cb219833ad9d38dd5393fc649f4b366840baefe6"}, - {file = "mypy-1.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e54396d70be04b34f31d2edf3362c1edd023246c82f1730bbf8768c28db5361b"}, - {file = "mypy-1.9.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5e6061f44f2313b94f920e91b204ec600982961e07a17e0f6cd83371cb23f5c2"}, - {file = "mypy-1.9.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81a10926e5473c5fc3da8abb04119a1f5811a236dc3a38d92015cb1e6ba4cb9e"}, - {file = "mypy-1.9.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b685154e22e4e9199fc95f298661deea28aaede5ae16ccc8cbb1045e716b3e04"}, - {file = "mypy-1.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:5d741d3fc7c4da608764073089e5f58ef6352bedc223ff58f2f038c2c4698a89"}, - {file = "mypy-1.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:587ce887f75dd9700252a3abbc9c97bbe165a4a630597845c61279cf32dfbf02"}, - {file = "mypy-1.9.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f88566144752999351725ac623471661c9d1cd8caa0134ff98cceeea181789f4"}, - {file = "mypy-1.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61758fabd58ce4b0720ae1e2fea5cfd4431591d6d590b197775329264f86311d"}, - {file = "mypy-1.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e49499be624dead83927e70c756970a0bc8240e9f769389cdf5714b0784ca6bf"}, - {file = "mypy-1.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:571741dc4194b4f82d344b15e8837e8c5fcc462d66d076748142327626a1b6e9"}, - {file = "mypy-1.9.0-py3-none-any.whl", hash = "sha256:a260627a570559181a9ea5de61ac6297aa5af202f06fd7ab093ce74e7181e43e"}, - {file = "mypy-1.9.0.tar.gz", hash = "sha256:3cc5da0127e6a478cddd906068496a97a7618a21ce9b54bde5bf7e539c7af974"}, + {file = "mypy-1.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:da1cbf08fb3b851ab3b9523a884c232774008267b1f83371ace57f412fe308c2"}, + {file = "mypy-1.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:12b6bfc1b1a66095ab413160a6e520e1dc076a28f3e22f7fb25ba3b000b4ef99"}, + {file = "mypy-1.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e36fb078cce9904c7989b9693e41cb9711e0600139ce3970c6ef814b6ebc2b2"}, + {file = "mypy-1.10.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2b0695d605ddcd3eb2f736cd8b4e388288c21e7de85001e9f85df9187f2b50f9"}, + {file = "mypy-1.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:cd777b780312ddb135bceb9bc8722a73ec95e042f911cc279e2ec3c667076051"}, + {file = "mypy-1.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3be66771aa5c97602f382230165b856c231d1277c511c9a8dd058be4784472e1"}, + {file = "mypy-1.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8b2cbaca148d0754a54d44121b5825ae71868c7592a53b7292eeb0f3fdae95ee"}, + {file = "mypy-1.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ec404a7cbe9fc0e92cb0e67f55ce0c025014e26d33e54d9e506a0f2d07fe5de"}, + {file = "mypy-1.10.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e22e1527dc3d4aa94311d246b59e47f6455b8729f4968765ac1eacf9a4760bc7"}, + {file = "mypy-1.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:a87dbfa85971e8d59c9cc1fcf534efe664d8949e4c0b6b44e8ca548e746a8d53"}, + {file = "mypy-1.10.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a781f6ad4bab20eef8b65174a57e5203f4be627b46291f4589879bf4e257b97b"}, + {file = "mypy-1.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b808e12113505b97d9023b0b5e0c0705a90571c6feefc6f215c1df9381256e30"}, + {file = "mypy-1.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f55583b12156c399dce2df7d16f8a5095291354f1e839c252ec6c0611e86e2e"}, + {file = "mypy-1.10.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4cf18f9d0efa1b16478c4c129eabec36148032575391095f73cae2e722fcf9d5"}, + {file = "mypy-1.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:bc6ac273b23c6b82da3bb25f4136c4fd42665f17f2cd850771cb600bdd2ebeda"}, + {file = "mypy-1.10.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9fd50226364cd2737351c79807775136b0abe084433b55b2e29181a4c3c878c0"}, + {file = "mypy-1.10.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f90cff89eea89273727d8783fef5d4a934be2fdca11b47def50cf5d311aff727"}, + {file = "mypy-1.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fcfc70599efde5c67862a07a1aaf50e55bce629ace26bb19dc17cece5dd31ca4"}, + {file = "mypy-1.10.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:075cbf81f3e134eadaf247de187bd604748171d6b79736fa9b6c9685b4083061"}, + {file = "mypy-1.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:3f298531bca95ff615b6e9f2fc0333aae27fa48052903a0ac90215021cdcfa4f"}, + {file = "mypy-1.10.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fa7ef5244615a2523b56c034becde4e9e3f9b034854c93639adb667ec9ec2976"}, + {file = "mypy-1.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3236a4c8f535a0631f85f5fcdffba71c7feeef76a6002fcba7c1a8e57c8be1ec"}, + {file = "mypy-1.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a2b5cdbb5dd35aa08ea9114436e0d79aceb2f38e32c21684dcf8e24e1e92821"}, + {file = "mypy-1.10.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:92f93b21c0fe73dc00abf91022234c79d793318b8a96faac147cd579c1671746"}, + {file = "mypy-1.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:28d0e038361b45f099cc086d9dd99c15ff14d0188f44ac883010e172ce86c38a"}, + {file = "mypy-1.10.0-py3-none-any.whl", hash = "sha256:f8c083976eb530019175aabadb60921e73b4f45736760826aa1689dda8208aee"}, + {file = "mypy-1.10.0.tar.gz", hash = "sha256:3d087fcbec056c4ee34974da493a826ce316947485cef3901f511848e687c131"}, ] [package.dependencies] @@ -2325,13 +2584,13 @@ test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>= [[package]] name = "nbconvert" -version = "7.16.3" +version = "7.16.4" description = "Converting Jupyter Notebooks (.ipynb files) to other formats. Output formats include asciidoc, html, latex, markdown, pdf, py, rst, script. nbconvert can be used both as a Python library (`import nbconvert`) or as a command line tool (invoked as `jupyter nbconvert ...`)." optional = false python-versions = ">=3.8" files = [ - {file = "nbconvert-7.16.3-py3-none-any.whl", hash = "sha256:ddeff14beeeedf3dd0bc506623e41e4507e551736de59df69a91f86700292b3b"}, - {file = "nbconvert-7.16.3.tar.gz", hash = "sha256:a6733b78ce3d47c3f85e504998495b07e6ea9cf9bf6ec1c98dda63ec6ad19142"}, + {file = "nbconvert-7.16.4-py3-none-any.whl", hash = "sha256:05873c620fe520b6322bf8a5ad562692343fe3452abda5765c7a34b7d1aa3eb3"}, + {file = "nbconvert-7.16.4.tar.gz", hash = "sha256:86ca91ba266b0a448dc96fa6c5b9d98affabde2867b363258703536807f9f7f4"}, ] [package.dependencies] @@ -2353,9 +2612,9 @@ tinycss2 = "*" traitlets = ">=5.1" [package.extras] -all = ["nbconvert[docs,qtpdf,serve,test,webpdf]"] +all = ["flaky", "ipykernel", "ipython", "ipywidgets (>=7.5)", "myst-parser", "nbsphinx (>=0.2.12)", "playwright", "pydata-sphinx-theme", "pyqtwebengine (>=5.15)", "pytest (>=7)", "sphinx (==5.0.2)", "sphinxcontrib-spelling", "tornado (>=6.1)"] docs = ["ipykernel", "ipython", "myst-parser", "nbsphinx (>=0.2.12)", "pydata-sphinx-theme", "sphinx (==5.0.2)", "sphinxcontrib-spelling"] -qtpdf = ["nbconvert[qtpng]"] +qtpdf = ["pyqtwebengine (>=5.15)"] qtpng = ["pyqtwebengine (>=5.15)"] serve = ["tornado (>=6.1)"] test = ["flaky", "ipykernel", "ipywidgets (>=7.5)", "pytest (>=7)"] @@ -2382,20 +2641,35 @@ traitlets = ">=5.1" docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] test = ["pep440", "pre-commit", "pytest", "testpath"] +[[package]] +name = "networkx" +version = "3.2.1" +description = "Python package for creating and manipulating graphs and networks" +optional = false +python-versions = ">=3.9" +files = [ + {file = "networkx-3.2.1-py3-none-any.whl", hash = "sha256:f18c69adc97877c42332c170849c96cefa91881c99a7cb3e95b7c659ebdc1ec2"}, + {file = "networkx-3.2.1.tar.gz", hash = "sha256:9f1bb5cf3409bf324e0a722c20bdb4c20ee39bf1c30ce8ae499c8502b0b5e0c6"}, +] + +[package.extras] +default = ["matplotlib (>=3.5)", "numpy (>=1.22)", "pandas (>=1.4)", "scipy (>=1.9,!=1.11.0,!=1.11.1)"] +developer = ["changelist (==0.4)", "mypy (>=1.1)", "pre-commit (>=3.2)", "rtoml"] +doc = ["nb2plots (>=0.7)", "nbconvert (<7.9)", "numpydoc (>=1.6)", "pillow (>=9.4)", "pydata-sphinx-theme (>=0.14)", "sphinx (>=7)", "sphinx-gallery (>=0.14)", "texext (>=0.6.7)"] +extra = ["lxml (>=4.6)", "pydot (>=1.4.2)", "pygraphviz (>=1.11)", "sympy (>=1.10)"] +test = ["pytest (>=7.2)", "pytest-cov (>=4.0)"] + [[package]] name = "nodeenv" -version = "1.8.0" +version = "1.9.0" description = "Node.js virtual environment builder" optional = false -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ - {file = "nodeenv-1.8.0-py2.py3-none-any.whl", hash = "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec"}, - {file = "nodeenv-1.8.0.tar.gz", hash = "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2"}, + {file = "nodeenv-1.9.0-py2.py3-none-any.whl", hash = "sha256:508ecec98f9f3330b636d4448c0f1a56fc68017c68f1e7857ebc52acf0eb879a"}, + {file = "nodeenv-1.9.0.tar.gz", hash = "sha256:07f144e90dae547bf0d4ee8da0ee42664a42a04e02ed68e06324348dafe4bdb1"}, ] -[package.dependencies] -setuptools = "*" - [[package]] name = "numpy" version = "1.26.4" @@ -2441,6 +2715,193 @@ files = [ {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, ] +[[package]] +name = "nvidia-cublas-cu12" +version = "12.1.3.1" +description = "CUBLAS native runtime libraries" +optional = false +python-versions = ">=3" +files = [ + {file = "nvidia_cublas_cu12-12.1.3.1-py3-none-manylinux1_x86_64.whl", hash = "sha256:ee53ccca76a6fc08fb9701aa95b6ceb242cdaab118c3bb152af4e579af792728"}, + {file = "nvidia_cublas_cu12-12.1.3.1-py3-none-win_amd64.whl", hash = "sha256:2b964d60e8cf11b5e1073d179d85fa340c120e99b3067558f3cf98dd69d02906"}, +] + +[[package]] +name = "nvidia-cuda-cupti-cu12" +version = "12.1.105" +description = "CUDA profiling tools runtime libs." +optional = false +python-versions = ">=3" +files = [ + {file = "nvidia_cuda_cupti_cu12-12.1.105-py3-none-manylinux1_x86_64.whl", hash = "sha256:e54fde3983165c624cb79254ae9818a456eb6e87a7fd4d56a2352c24ee542d7e"}, + {file = "nvidia_cuda_cupti_cu12-12.1.105-py3-none-win_amd64.whl", hash = "sha256:bea8236d13a0ac7190bd2919c3e8e6ce1e402104276e6f9694479e48bb0eb2a4"}, +] + +[[package]] +name = "nvidia-cuda-nvrtc-cu12" +version = "12.1.105" +description = "NVRTC native runtime libraries" +optional = false +python-versions = ">=3" +files = [ + {file = "nvidia_cuda_nvrtc_cu12-12.1.105-py3-none-manylinux1_x86_64.whl", hash = "sha256:339b385f50c309763ca65456ec75e17bbefcbbf2893f462cb8b90584cd27a1c2"}, + {file = "nvidia_cuda_nvrtc_cu12-12.1.105-py3-none-win_amd64.whl", hash = "sha256:0a98a522d9ff138b96c010a65e145dc1b4850e9ecb75a0172371793752fd46ed"}, +] + +[[package]] +name = "nvidia-cuda-runtime-cu12" +version = "12.1.105" +description = "CUDA Runtime native Libraries" +optional = false +python-versions = ">=3" +files = [ + {file = "nvidia_cuda_runtime_cu12-12.1.105-py3-none-manylinux1_x86_64.whl", hash = "sha256:6e258468ddf5796e25f1dc591a31029fa317d97a0a94ed93468fc86301d61e40"}, + {file = "nvidia_cuda_runtime_cu12-12.1.105-py3-none-win_amd64.whl", hash = "sha256:dfb46ef84d73fababab44cf03e3b83f80700d27ca300e537f85f636fac474344"}, +] + +[[package]] +name = "nvidia-cudnn-cu12" +version = "8.9.2.26" +description = "cuDNN runtime libraries" +optional = false +python-versions = ">=3" +files = [ + {file = "nvidia_cudnn_cu12-8.9.2.26-py3-none-manylinux1_x86_64.whl", hash = "sha256:5ccb288774fdfb07a7e7025ffec286971c06d8d7b4fb162525334616d7629ff9"}, +] + +[package.dependencies] +nvidia-cublas-cu12 = "*" + +[[package]] +name = "nvidia-cufft-cu12" +version = "11.0.2.54" +description = "CUFFT native runtime libraries" +optional = false +python-versions = ">=3" +files = [ + {file = "nvidia_cufft_cu12-11.0.2.54-py3-none-manylinux1_x86_64.whl", hash = "sha256:794e3948a1aa71fd817c3775866943936774d1c14e7628c74f6f7417224cdf56"}, + {file = "nvidia_cufft_cu12-11.0.2.54-py3-none-win_amd64.whl", hash = "sha256:d9ac353f78ff89951da4af698f80870b1534ed69993f10a4cf1d96f21357e253"}, +] + +[[package]] +name = "nvidia-curand-cu12" +version = "10.3.2.106" +description = "CURAND native runtime libraries" +optional = false +python-versions = ">=3" +files = [ + {file = "nvidia_curand_cu12-10.3.2.106-py3-none-manylinux1_x86_64.whl", hash = "sha256:9d264c5036dde4e64f1de8c50ae753237c12e0b1348738169cd0f8a536c0e1e0"}, + {file = "nvidia_curand_cu12-10.3.2.106-py3-none-win_amd64.whl", hash = "sha256:75b6b0c574c0037839121317e17fd01f8a69fd2ef8e25853d826fec30bdba74a"}, +] + +[[package]] +name = "nvidia-cusolver-cu12" +version = "11.4.5.107" +description = "CUDA solver native runtime libraries" +optional = false +python-versions = ">=3" +files = [ + {file = "nvidia_cusolver_cu12-11.4.5.107-py3-none-manylinux1_x86_64.whl", hash = "sha256:8a7ec542f0412294b15072fa7dab71d31334014a69f953004ea7a118206fe0dd"}, + {file = "nvidia_cusolver_cu12-11.4.5.107-py3-none-win_amd64.whl", hash = "sha256:74e0c3a24c78612192a74fcd90dd117f1cf21dea4822e66d89e8ea80e3cd2da5"}, +] + +[package.dependencies] +nvidia-cublas-cu12 = "*" +nvidia-cusparse-cu12 = "*" +nvidia-nvjitlink-cu12 = "*" + +[[package]] +name = "nvidia-cusparse-cu12" +version = "12.1.0.106" +description = "CUSPARSE native runtime libraries" +optional = false +python-versions = ">=3" +files = [ + {file = "nvidia_cusparse_cu12-12.1.0.106-py3-none-manylinux1_x86_64.whl", hash = "sha256:f3b50f42cf363f86ab21f720998517a659a48131e8d538dc02f8768237bd884c"}, + {file = "nvidia_cusparse_cu12-12.1.0.106-py3-none-win_amd64.whl", hash = "sha256:b798237e81b9719373e8fae8d4f091b70a0cf09d9d85c95a557e11df2d8e9a5a"}, +] + +[package.dependencies] +nvidia-nvjitlink-cu12 = "*" + +[[package]] +name = "nvidia-nccl-cu12" +version = "2.20.5" +description = "NVIDIA Collective Communication Library (NCCL) Runtime" +optional = false +python-versions = ">=3" +files = [ + {file = "nvidia_nccl_cu12-2.20.5-py3-none-manylinux2014_aarch64.whl", hash = "sha256:1fc150d5c3250b170b29410ba682384b14581db722b2531b0d8d33c595f33d01"}, + {file = "nvidia_nccl_cu12-2.20.5-py3-none-manylinux2014_x86_64.whl", hash = "sha256:057f6bf9685f75215d0c53bf3ac4a10b3e6578351de307abad9e18a99182af56"}, +] + +[[package]] +name = "nvidia-nvjitlink-cu12" +version = "12.5.40" +description = "Nvidia JIT LTO Library" +optional = false +python-versions = ">=3" +files = [ + {file = "nvidia_nvjitlink_cu12-12.5.40-py3-none-manylinux2014_x86_64.whl", hash = "sha256:d9714f27c1d0f0895cd8915c07a87a1d0029a0aa36acaf9156952ec2a8a12189"}, + {file = "nvidia_nvjitlink_cu12-12.5.40-py3-none-win_amd64.whl", hash = "sha256:c3401dc8543b52d3a8158007a0c1ab4e9c768fcbd24153a48c86972102197ddd"}, +] + +[[package]] +name = "nvidia-nvtx-cu12" +version = "12.1.105" +description = "NVIDIA Tools Extension" +optional = false +python-versions = ">=3" +files = [ + {file = "nvidia_nvtx_cu12-12.1.105-py3-none-manylinux1_x86_64.whl", hash = "sha256:dc21cf308ca5691e7c04d962e213f8a4aa9bbfa23d95412f452254c2caeb09e5"}, + {file = "nvidia_nvtx_cu12-12.1.105-py3-none-win_amd64.whl", hash = "sha256:65f4d98982b31b60026e0e6de73fbdfc09d08a96f4656dd3665ca616a11e1e82"}, +] + +[[package]] +name = "opentelemetry-api" +version = "1.25.0" +description = "OpenTelemetry Python API" +optional = true +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_api-1.25.0-py3-none-any.whl", hash = "sha256:757fa1aa020a0f8fa139f8959e53dec2051cc26b832e76fa839a6d76ecefd737"}, + {file = "opentelemetry_api-1.25.0.tar.gz", hash = "sha256:77c4985f62f2614e42ce77ee4c9da5fa5f0bc1e1821085e9a47533a9323ae869"}, +] + +[package.dependencies] +deprecated = ">=1.2.6" +importlib-metadata = ">=6.0,<=7.1" + +[[package]] +name = "opentelemetry-sdk" +version = "1.25.0" +description = "OpenTelemetry Python SDK" +optional = true +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_sdk-1.25.0-py3-none-any.whl", hash = "sha256:d97ff7ec4b351692e9d5a15af570c693b8715ad78b8aafbec5c7100fe966b4c9"}, + {file = "opentelemetry_sdk-1.25.0.tar.gz", hash = "sha256:ce7fc319c57707ef5bf8b74fb9f8ebdb8bfafbe11898410e0d2a761d08a98ec7"}, +] + +[package.dependencies] +opentelemetry-api = "1.25.0" +opentelemetry-semantic-conventions = "0.46b0" +typing-extensions = ">=3.7.4" + +[[package]] +name = "opentelemetry-semantic-conventions" +version = "0.46b0" +description = "OpenTelemetry Semantic Conventions" +optional = true +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_semantic_conventions-0.46b0-py3-none-any.whl", hash = "sha256:6daef4ef9fa51d51855d9f8e0ccd3a1bd59e0e545abe99ac6203804e36ab3e07"}, + {file = "opentelemetry_semantic_conventions-0.46b0.tar.gz", hash = "sha256:fbc982ecbb6a6e90869b15c1673be90bd18c8a56ff1cffc0864e38e2edffaefa"}, +] + +[package.dependencies] +opentelemetry-api = "1.25.0" + [[package]] name = "opt-einsum" version = "3.3.0" @@ -2772,18 +3233,19 @@ xmp = ["defusedxml"] [[package]] name = "platformdirs" -version = "4.2.0" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +version = "4.2.2" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false python-versions = ">=3.8" files = [ - {file = "platformdirs-4.2.0-py3-none-any.whl", hash = "sha256:0614df2a2f37e1a662acbd8e2b25b92ccf8632929bc6d43467e17fe89c75e068"}, - {file = "platformdirs-4.2.0.tar.gz", hash = "sha256:ef0cc731df711022c174543cb70a9b5bd22e5a9337c8624ef2c2ceb8ddad8768"}, + {file = "platformdirs-4.2.2-py3-none-any.whl", hash = "sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee"}, + {file = "platformdirs-4.2.2.tar.gz", hash = "sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3"}, ] [package.extras] docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] +type = ["mypy (>=1.8)"] [[package]] name = "ploomber-core" @@ -2829,13 +3291,13 @@ dev = ["flake8", "invoke", "jupytext", "matplotlib", "numpy", "pandas", "pkgmt", [[package]] name = "pluggy" -version = "1.4.0" +version = "1.5.0" description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" files = [ - {file = "pluggy-1.4.0-py3-none-any.whl", hash = "sha256:7db9f7b503d67d1c5b95f59773ebb58a8c1c288129a88665838012cfb07b8981"}, - {file = "pluggy-1.4.0.tar.gz", hash = "sha256:8c85c2876142a764e5b7548e7d9a0e0ddb46f5185161049a79b7e974454223be"}, + {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, + {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, ] [package.extras] @@ -2867,13 +3329,13 @@ test = ["coverage", "flake8", "freezegun (==0.3.15)", "mock (>=2.0.0)", "pylint" [[package]] name = "pre-commit" -version = "3.7.0" +version = "3.7.1" description = "A framework for managing and maintaining multi-language pre-commit hooks." optional = false python-versions = ">=3.9" files = [ - {file = "pre_commit-3.7.0-py2.py3-none-any.whl", hash = "sha256:5eae9e10c2b5ac51577c3452ec0a490455c45a0533f7960f993a0d01e59decab"}, - {file = "pre_commit-3.7.0.tar.gz", hash = "sha256:e209d61b8acdcf742404408531f0c37d49d2c734fd7cff2d6076083d191cb060"}, + {file = "pre_commit-3.7.1-py2.py3-none-any.whl", hash = "sha256:fae36fd1d7ad7d6a5a1c0b0d5adb2ed1a3bda5a21bf6c3e5372073d7a11cd4c5"}, + {file = "pre_commit-3.7.1.tar.gz", hash = "sha256:8ca3ad567bc78a4972a3f1a477e94a79d4597e8140a6e0b651c5e33899c3654a"}, ] [package.dependencies] @@ -2931,13 +3393,13 @@ murmurhash = ">=0.28.0,<1.1.0" [[package]] name = "prompt-toolkit" -version = "3.0.43" +version = "3.0.45" description = "Library for building powerful interactive command lines in Python" optional = false python-versions = ">=3.7.0" files = [ - {file = "prompt_toolkit-3.0.43-py3-none-any.whl", hash = "sha256:a11a29cb3bf0a28a387fe5122cdb649816a957cd9261dcedf8c9f1fef33eacf6"}, - {file = "prompt_toolkit-3.0.43.tar.gz", hash = "sha256:3527b7af26106cbc65a040bcc84839a3566ec1b051bb0bfe953631e704b0ff7d"}, + {file = "prompt_toolkit-3.0.45-py3-none-any.whl", hash = "sha256:a29b89160e494e3ea8622b09fa5897610b437884dcdcd054fdc1308883326c2a"}, + {file = "prompt_toolkit-3.0.45.tar.gz", hash = "sha256:07c60ee4ab7b7e90824b61afa840c8f5aad2d46b3e2e10acc33d8ecc94a49089"}, ] [package.dependencies] @@ -3012,18 +3474,18 @@ files = [ [[package]] name = "pydantic" -version = "2.7.0" +version = "2.7.2" description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic-2.7.0-py3-none-any.whl", hash = "sha256:9dee74a271705f14f9a1567671d144a851c675b072736f0a7b2608fd9e495352"}, - {file = "pydantic-2.7.0.tar.gz", hash = "sha256:b5ecdd42262ca2462e2624793551e80911a1e989f462910bb81aef974b4bb383"}, + {file = "pydantic-2.7.2-py3-none-any.whl", hash = "sha256:834ab954175f94e6e68258537dc49402c4a5e9d0409b9f1b86b7e934a8372de7"}, + {file = "pydantic-2.7.2.tar.gz", hash = "sha256:71b2945998f9c9b7919a45bde9a50397b289937d215ae141c1d0903ba7149fd7"}, ] [package.dependencies] annotated-types = ">=0.4.0" -pydantic-core = "2.18.1" +pydantic-core = "2.18.3" typing-extensions = ">=4.6.1" [package.extras] @@ -3031,90 +3493,90 @@ email = ["email-validator (>=2.0.0)"] [[package]] name = "pydantic-core" -version = "2.18.1" +version = "2.18.3" description = "Core functionality for Pydantic validation and serialization" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic_core-2.18.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:ee9cf33e7fe14243f5ca6977658eb7d1042caaa66847daacbd2117adb258b226"}, - {file = "pydantic_core-2.18.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6b7bbb97d82659ac8b37450c60ff2e9f97e4eb0f8a8a3645a5568b9334b08b50"}, - {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df4249b579e75094f7e9bb4bd28231acf55e308bf686b952f43100a5a0be394c"}, - {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d0491006a6ad20507aec2be72e7831a42efc93193d2402018007ff827dc62926"}, - {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ae80f72bb7a3e397ab37b53a2b49c62cc5496412e71bc4f1277620a7ce3f52b"}, - {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:58aca931bef83217fca7a390e0486ae327c4af9c3e941adb75f8772f8eeb03a1"}, - {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1be91ad664fc9245404a789d60cba1e91c26b1454ba136d2a1bf0c2ac0c0505a"}, - {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:667880321e916a8920ef49f5d50e7983792cf59f3b6079f3c9dac2b88a311d17"}, - {file = "pydantic_core-2.18.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f7054fdc556f5421f01e39cbb767d5ec5c1139ea98c3e5b350e02e62201740c7"}, - {file = "pydantic_core-2.18.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:030e4f9516f9947f38179249778709a460a3adb516bf39b5eb9066fcfe43d0e6"}, - {file = "pydantic_core-2.18.1-cp310-none-win32.whl", hash = "sha256:2e91711e36e229978d92642bfc3546333a9127ecebb3f2761372e096395fc649"}, - {file = "pydantic_core-2.18.1-cp310-none-win_amd64.whl", hash = "sha256:9a29726f91c6cb390b3c2338f0df5cd3e216ad7a938762d11c994bb37552edb0"}, - {file = "pydantic_core-2.18.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:9ece8a49696669d483d206b4474c367852c44815fca23ac4e48b72b339807f80"}, - {file = "pydantic_core-2.18.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7a5d83efc109ceddb99abd2c1316298ced2adb4570410defe766851a804fcd5b"}, - {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f7973c381283783cd1043a8c8f61ea5ce7a3a58b0369f0ee0ee975eaf2f2a1b"}, - {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:54c7375c62190a7845091f521add19b0f026bcf6ae674bdb89f296972272e86d"}, - {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dd63cec4e26e790b70544ae5cc48d11b515b09e05fdd5eff12e3195f54b8a586"}, - {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:561cf62c8a3498406495cfc49eee086ed2bb186d08bcc65812b75fda42c38294"}, - {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68717c38a68e37af87c4da20e08f3e27d7e4212e99e96c3d875fbf3f4812abfc"}, - {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2d5728e93d28a3c63ee513d9ffbac9c5989de8c76e049dbcb5bfe4b923a9739d"}, - {file = "pydantic_core-2.18.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f0f17814c505f07806e22b28856c59ac80cee7dd0fbb152aed273e116378f519"}, - {file = "pydantic_core-2.18.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d816f44a51ba5175394bc6c7879ca0bd2be560b2c9e9f3411ef3a4cbe644c2e9"}, - {file = "pydantic_core-2.18.1-cp311-none-win32.whl", hash = "sha256:09f03dfc0ef8c22622eaa8608caa4a1e189cfb83ce847045eca34f690895eccb"}, - {file = "pydantic_core-2.18.1-cp311-none-win_amd64.whl", hash = "sha256:27f1009dc292f3b7ca77feb3571c537276b9aad5dd4efb471ac88a8bd09024e9"}, - {file = "pydantic_core-2.18.1-cp311-none-win_arm64.whl", hash = "sha256:48dd883db92e92519201f2b01cafa881e5f7125666141a49ffba8b9facc072b0"}, - {file = "pydantic_core-2.18.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:b6b0e4912030c6f28bcb72b9ebe4989d6dc2eebcd2a9cdc35fefc38052dd4fe8"}, - {file = "pydantic_core-2.18.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f3202a429fe825b699c57892d4371c74cc3456d8d71b7f35d6028c96dfecad31"}, - {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3982b0a32d0a88b3907e4b0dc36809fda477f0757c59a505d4e9b455f384b8b"}, - {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:25595ac311f20e5324d1941909b0d12933f1fd2171075fcff763e90f43e92a0d"}, - {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:14fe73881cf8e4cbdaded8ca0aa671635b597e42447fec7060d0868b52d074e6"}, - {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ca976884ce34070799e4dfc6fbd68cb1d181db1eefe4a3a94798ddfb34b8867f"}, - {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:684d840d2c9ec5de9cb397fcb3f36d5ebb6fa0d94734f9886032dd796c1ead06"}, - {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:54764c083bbe0264f0f746cefcded6cb08fbbaaf1ad1d78fb8a4c30cff999a90"}, - {file = "pydantic_core-2.18.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:201713f2f462e5c015b343e86e68bd8a530a4f76609b33d8f0ec65d2b921712a"}, - {file = "pydantic_core-2.18.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fd1a9edb9dd9d79fbeac1ea1f9a8dd527a6113b18d2e9bcc0d541d308dae639b"}, - {file = "pydantic_core-2.18.1-cp312-none-win32.whl", hash = "sha256:d5e6b7155b8197b329dc787356cfd2684c9d6a6b1a197f6bbf45f5555a98d411"}, - {file = "pydantic_core-2.18.1-cp312-none-win_amd64.whl", hash = "sha256:9376d83d686ec62e8b19c0ac3bf8d28d8a5981d0df290196fb6ef24d8a26f0d6"}, - {file = "pydantic_core-2.18.1-cp312-none-win_arm64.whl", hash = "sha256:c562b49c96906b4029b5685075fe1ebd3b5cc2601dfa0b9e16c2c09d6cbce048"}, - {file = "pydantic_core-2.18.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:3e352f0191d99fe617371096845070dee295444979efb8f27ad941227de6ad09"}, - {file = "pydantic_core-2.18.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c0295d52b012cbe0d3059b1dba99159c3be55e632aae1999ab74ae2bd86a33d7"}, - {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56823a92075780582d1ffd4489a2e61d56fd3ebb4b40b713d63f96dd92d28144"}, - {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dd3f79e17b56741b5177bcc36307750d50ea0698df6aa82f69c7db32d968c1c2"}, - {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:38a5024de321d672a132b1834a66eeb7931959c59964b777e8f32dbe9523f6b1"}, - {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d2ce426ee691319d4767748c8e0895cfc56593d725594e415f274059bcf3cb76"}, - {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2adaeea59849ec0939af5c5d476935f2bab4b7f0335b0110f0f069a41024278e"}, - {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9b6431559676a1079eac0f52d6d0721fb8e3c5ba43c37bc537c8c83724031feb"}, - {file = "pydantic_core-2.18.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:85233abb44bc18d16e72dc05bf13848a36f363f83757541f1a97db2f8d58cfd9"}, - {file = "pydantic_core-2.18.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:641a018af4fe48be57a2b3d7a1f0f5dbca07c1d00951d3d7463f0ac9dac66622"}, - {file = "pydantic_core-2.18.1-cp38-none-win32.whl", hash = "sha256:63d7523cd95d2fde0d28dc42968ac731b5bb1e516cc56b93a50ab293f4daeaad"}, - {file = "pydantic_core-2.18.1-cp38-none-win_amd64.whl", hash = "sha256:907a4d7720abfcb1c81619863efd47c8a85d26a257a2dbebdb87c3b847df0278"}, - {file = "pydantic_core-2.18.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:aad17e462f42ddbef5984d70c40bfc4146c322a2da79715932cd8976317054de"}, - {file = "pydantic_core-2.18.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:94b9769ba435b598b547c762184bcfc4783d0d4c7771b04a3b45775c3589ca44"}, - {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:80e0e57cc704a52fb1b48f16d5b2c8818da087dbee6f98d9bf19546930dc64b5"}, - {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:76b86e24039c35280ceee6dce7e62945eb93a5175d43689ba98360ab31eebc4a"}, - {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12a05db5013ec0ca4a32cc6433f53faa2a014ec364031408540ba858c2172bb0"}, - {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:250ae39445cb5475e483a36b1061af1bc233de3e9ad0f4f76a71b66231b07f88"}, - {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a32204489259786a923e02990249c65b0f17235073149d0033efcebe80095570"}, - {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6395a4435fa26519fd96fdccb77e9d00ddae9dd6c742309bd0b5610609ad7fb2"}, - {file = "pydantic_core-2.18.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2533ad2883f001efa72f3d0e733fb846710c3af6dcdd544fe5bf14fa5fe2d7db"}, - {file = "pydantic_core-2.18.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b560b72ed4816aee52783c66854d96157fd8175631f01ef58e894cc57c84f0f6"}, - {file = "pydantic_core-2.18.1-cp39-none-win32.whl", hash = "sha256:582cf2cead97c9e382a7f4d3b744cf0ef1a6e815e44d3aa81af3ad98762f5a9b"}, - {file = "pydantic_core-2.18.1-cp39-none-win_amd64.whl", hash = "sha256:ca71d501629d1fa50ea7fa3b08ba884fe10cefc559f5c6c8dfe9036c16e8ae89"}, - {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e178e5b66a06ec5bf51668ec0d4ac8cfb2bdcb553b2c207d58148340efd00143"}, - {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:72722ce529a76a4637a60be18bd789d8fb871e84472490ed7ddff62d5fed620d"}, - {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2fe0c1ce5b129455e43f941f7a46f61f3d3861e571f2905d55cdbb8b5c6f5e2c"}, - {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4284c621f06a72ce2cb55f74ea3150113d926a6eb78ab38340c08f770eb9b4d"}, - {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a0c3e718f4e064efde68092d9d974e39572c14e56726ecfaeebbe6544521f47"}, - {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:2027493cc44c23b598cfaf200936110433d9caa84e2c6cf487a83999638a96ac"}, - {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:76909849d1a6bffa5a07742294f3fa1d357dc917cb1fe7b470afbc3a7579d539"}, - {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ee7ccc7fb7e921d767f853b47814c3048c7de536663e82fbc37f5eb0d532224b"}, - {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ee2794111c188548a4547eccc73a6a8527fe2af6cf25e1a4ebda2fd01cdd2e60"}, - {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:a139fe9f298dc097349fb4f28c8b81cc7a202dbfba66af0e14be5cfca4ef7ce5"}, - {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d074b07a10c391fc5bbdcb37b2f16f20fcd9e51e10d01652ab298c0d07908ee2"}, - {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c69567ddbac186e8c0aadc1f324a60a564cfe25e43ef2ce81bcc4b8c3abffbae"}, - {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:baf1c7b78cddb5af00971ad5294a4583188bda1495b13760d9f03c9483bb6203"}, - {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:2684a94fdfd1b146ff10689c6e4e815f6a01141781c493b97342cdc5b06f4d5d"}, - {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:73c1bc8a86a5c9e8721a088df234265317692d0b5cd9e86e975ce3bc3db62a59"}, - {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:e60defc3c15defb70bb38dd605ff7e0fae5f6c9c7cbfe0ad7868582cb7e844a6"}, - {file = "pydantic_core-2.18.1.tar.gz", hash = "sha256:de9d3e8717560eb05e28739d1b35e4eac2e458553a52a301e51352a7ffc86a35"}, + {file = "pydantic_core-2.18.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:744697428fcdec6be5670460b578161d1ffe34743a5c15656be7ea82b008197c"}, + {file = "pydantic_core-2.18.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:37b40c05ced1ba4218b14986fe6f283d22e1ae2ff4c8e28881a70fb81fbfcda7"}, + {file = "pydantic_core-2.18.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:544a9a75622357076efb6b311983ff190fbfb3c12fc3a853122b34d3d358126c"}, + {file = "pydantic_core-2.18.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e2e253af04ceaebde8eb201eb3f3e3e7e390f2d275a88300d6a1959d710539e2"}, + {file = "pydantic_core-2.18.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:855ec66589c68aa367d989da5c4755bb74ee92ccad4fdb6af942c3612c067e34"}, + {file = "pydantic_core-2.18.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d3e42bb54e7e9d72c13ce112e02eb1b3b55681ee948d748842171201a03a98a"}, + {file = "pydantic_core-2.18.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c6ac9ffccc9d2e69d9fba841441d4259cb668ac180e51b30d3632cd7abca2b9b"}, + {file = "pydantic_core-2.18.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c56eca1686539fa0c9bda992e7bd6a37583f20083c37590413381acfc5f192d6"}, + {file = "pydantic_core-2.18.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:17954d784bf8abfc0ec2a633108207ebc4fa2df1a0e4c0c3ccbaa9bb01d2c426"}, + {file = "pydantic_core-2.18.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:98ed737567d8f2ecd54f7c8d4f8572ca7c7921ede93a2e52939416170d357812"}, + {file = "pydantic_core-2.18.3-cp310-none-win32.whl", hash = "sha256:9f9e04afebd3ed8c15d67a564ed0a34b54e52136c6d40d14c5547b238390e779"}, + {file = "pydantic_core-2.18.3-cp310-none-win_amd64.whl", hash = "sha256:45e4ffbae34f7ae30d0047697e724e534a7ec0a82ef9994b7913a412c21462a0"}, + {file = "pydantic_core-2.18.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:b9ebe8231726c49518b16b237b9fe0d7d361dd221302af511a83d4ada01183ab"}, + {file = "pydantic_core-2.18.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b8e20e15d18bf7dbb453be78a2d858f946f5cdf06c5072453dace00ab652e2b2"}, + {file = "pydantic_core-2.18.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c0d9ff283cd3459fa0bf9b0256a2b6f01ac1ff9ffb034e24457b9035f75587cb"}, + {file = "pydantic_core-2.18.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2f7ef5f0ebb77ba24c9970da18b771711edc5feaf00c10b18461e0f5f5949231"}, + {file = "pydantic_core-2.18.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:73038d66614d2e5cde30435b5afdced2b473b4c77d4ca3a8624dd3e41a9c19be"}, + {file = "pydantic_core-2.18.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6afd5c867a74c4d314c557b5ea9520183fadfbd1df4c2d6e09fd0d990ce412cd"}, + {file = "pydantic_core-2.18.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd7df92f28d351bb9f12470f4c533cf03d1b52ec5a6e5c58c65b183055a60106"}, + {file = "pydantic_core-2.18.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:80aea0ffeb1049336043d07799eace1c9602519fb3192916ff525b0287b2b1e4"}, + {file = "pydantic_core-2.18.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:aaee40f25bba38132e655ffa3d1998a6d576ba7cf81deff8bfa189fb43fd2bbe"}, + {file = "pydantic_core-2.18.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9128089da8f4fe73f7a91973895ebf2502539d627891a14034e45fb9e707e26d"}, + {file = "pydantic_core-2.18.3-cp311-none-win32.whl", hash = "sha256:fec02527e1e03257aa25b1a4dcbe697b40a22f1229f5d026503e8b7ff6d2eda7"}, + {file = "pydantic_core-2.18.3-cp311-none-win_amd64.whl", hash = "sha256:58ff8631dbab6c7c982e6425da8347108449321f61fe427c52ddfadd66642af7"}, + {file = "pydantic_core-2.18.3-cp311-none-win_arm64.whl", hash = "sha256:3fc1c7f67f34c6c2ef9c213e0f2a351797cda98249d9ca56a70ce4ebcaba45f4"}, + {file = "pydantic_core-2.18.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:f0928cde2ae416a2d1ebe6dee324709c6f73e93494d8c7aea92df99aab1fc40f"}, + {file = "pydantic_core-2.18.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0bee9bb305a562f8b9271855afb6ce00223f545de3d68560b3c1649c7c5295e9"}, + {file = "pydantic_core-2.18.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e862823be114387257dacbfa7d78547165a85d7add33b446ca4f4fae92c7ff5c"}, + {file = "pydantic_core-2.18.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6a36f78674cbddc165abab0df961b5f96b14461d05feec5e1f78da58808b97e7"}, + {file = "pydantic_core-2.18.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ba905d184f62e7ddbb7a5a751d8a5c805463511c7b08d1aca4a3e8c11f2e5048"}, + {file = "pydantic_core-2.18.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7fdd362f6a586e681ff86550b2379e532fee63c52def1c666887956748eaa326"}, + {file = "pydantic_core-2.18.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24b214b7ee3bd3b865e963dbed0f8bc5375f49449d70e8d407b567af3222aae4"}, + {file = "pydantic_core-2.18.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:691018785779766127f531674fa82bb368df5b36b461622b12e176c18e119022"}, + {file = "pydantic_core-2.18.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:60e4c625e6f7155d7d0dcac151edf5858102bc61bf959d04469ca6ee4e8381bd"}, + {file = "pydantic_core-2.18.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a4e651e47d981c1b701dcc74ab8fec5a60a5b004650416b4abbef13db23bc7be"}, + {file = "pydantic_core-2.18.3-cp312-none-win32.whl", hash = "sha256:ffecbb5edb7f5ffae13599aec33b735e9e4c7676ca1633c60f2c606beb17efc5"}, + {file = "pydantic_core-2.18.3-cp312-none-win_amd64.whl", hash = "sha256:2c8333f6e934733483c7eddffdb094c143b9463d2af7e6bd85ebcb2d4a1b82c6"}, + {file = "pydantic_core-2.18.3-cp312-none-win_arm64.whl", hash = "sha256:7a20dded653e516a4655f4c98e97ccafb13753987434fe7cf044aa25f5b7d417"}, + {file = "pydantic_core-2.18.3-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:eecf63195be644b0396f972c82598cd15693550f0ff236dcf7ab92e2eb6d3522"}, + {file = "pydantic_core-2.18.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2c44efdd3b6125419c28821590d7ec891c9cb0dff33a7a78d9d5c8b6f66b9702"}, + {file = "pydantic_core-2.18.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e59fca51ffbdd1638b3856779342ed69bcecb8484c1d4b8bdb237d0eb5a45e2"}, + {file = "pydantic_core-2.18.3-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:70cf099197d6b98953468461d753563b28e73cf1eade2ffe069675d2657ed1d5"}, + {file = "pydantic_core-2.18.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:63081a49dddc6124754b32a3774331467bfc3d2bd5ff8f10df36a95602560361"}, + {file = "pydantic_core-2.18.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:370059b7883485c9edb9655355ff46d912f4b03b009d929220d9294c7fd9fd60"}, + {file = "pydantic_core-2.18.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a64faeedfd8254f05f5cf6fc755023a7e1606af3959cfc1a9285744cc711044"}, + {file = "pydantic_core-2.18.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:19d2e725de0f90d8671f89e420d36c3dd97639b98145e42fcc0e1f6d492a46dc"}, + {file = "pydantic_core-2.18.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:67bc078025d70ec5aefe6200ef094576c9d86bd36982df1301c758a9fff7d7f4"}, + {file = "pydantic_core-2.18.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:adf952c3f4100e203cbaf8e0c907c835d3e28f9041474e52b651761dc248a3c0"}, + {file = "pydantic_core-2.18.3-cp38-none-win32.whl", hash = "sha256:9a46795b1f3beb167eaee91736d5d17ac3a994bf2215a996aed825a45f897558"}, + {file = "pydantic_core-2.18.3-cp38-none-win_amd64.whl", hash = "sha256:200ad4e3133cb99ed82342a101a5abf3d924722e71cd581cc113fe828f727fbc"}, + {file = "pydantic_core-2.18.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:304378b7bf92206036c8ddd83a2ba7b7d1a5b425acafff637172a3aa72ad7083"}, + {file = "pydantic_core-2.18.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c826870b277143e701c9ccf34ebc33ddb4d072612683a044e7cce2d52f6c3fef"}, + {file = "pydantic_core-2.18.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e201935d282707394f3668380e41ccf25b5794d1b131cdd96b07f615a33ca4b1"}, + {file = "pydantic_core-2.18.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5560dda746c44b48bf82b3d191d74fe8efc5686a9ef18e69bdabccbbb9ad9442"}, + {file = "pydantic_core-2.18.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6b32c2a1f8032570842257e4c19288eba9a2bba4712af542327de9a1204faff8"}, + {file = "pydantic_core-2.18.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:929c24e9dea3990bc8bcd27c5f2d3916c0c86f5511d2caa69e0d5290115344a9"}, + {file = "pydantic_core-2.18.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1a8376fef60790152564b0eab376b3e23dd6e54f29d84aad46f7b264ecca943"}, + {file = "pydantic_core-2.18.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dccf3ef1400390ddd1fb55bf0632209d39140552d068ee5ac45553b556780e06"}, + {file = "pydantic_core-2.18.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:41dbdcb0c7252b58fa931fec47937edb422c9cb22528f41cb8963665c372caf6"}, + {file = "pydantic_core-2.18.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:666e45cf071669fde468886654742fa10b0e74cd0fa0430a46ba6056b24fb0af"}, + {file = "pydantic_core-2.18.3-cp39-none-win32.whl", hash = "sha256:f9c08cabff68704a1b4667d33f534d544b8a07b8e5d039c37067fceb18789e78"}, + {file = "pydantic_core-2.18.3-cp39-none-win_amd64.whl", hash = "sha256:4afa5f5973e8572b5c0dcb4e2d4fda7890e7cd63329bd5cc3263a25c92ef0026"}, + {file = "pydantic_core-2.18.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:77319771a026f7c7d29c6ebc623de889e9563b7087911b46fd06c044a12aa5e9"}, + {file = "pydantic_core-2.18.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:df11fa992e9f576473038510d66dd305bcd51d7dd508c163a8c8fe148454e059"}, + {file = "pydantic_core-2.18.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d531076bdfb65af593326ffd567e6ab3da145020dafb9187a1d131064a55f97c"}, + {file = "pydantic_core-2.18.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d33ce258e4e6e6038f2b9e8b8a631d17d017567db43483314993b3ca345dcbbb"}, + {file = "pydantic_core-2.18.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1f9cd7f5635b719939019be9bda47ecb56e165e51dd26c9a217a433e3d0d59a9"}, + {file = "pydantic_core-2.18.3-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:cd4a032bb65cc132cae1fe3e52877daecc2097965cd3914e44fbd12b00dae7c5"}, + {file = "pydantic_core-2.18.3-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:82f2718430098bcdf60402136c845e4126a189959d103900ebabb6774a5d9fdb"}, + {file = "pydantic_core-2.18.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:c0037a92cf0c580ed14e10953cdd26528e8796307bb8bb312dc65f71547df04d"}, + {file = "pydantic_core-2.18.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:b95a0972fac2b1ff3c94629fc9081b16371dad870959f1408cc33b2f78ad347a"}, + {file = "pydantic_core-2.18.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:a62e437d687cc148381bdd5f51e3e81f5b20a735c55f690c5be94e05da2b0d5c"}, + {file = "pydantic_core-2.18.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b367a73a414bbb08507da102dc2cde0fa7afe57d09b3240ce82a16d608a7679c"}, + {file = "pydantic_core-2.18.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ecce4b2360aa3f008da3327d652e74a0e743908eac306198b47e1c58b03dd2b"}, + {file = "pydantic_core-2.18.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bd4435b8d83f0c9561a2a9585b1de78f1abb17cb0cef5f39bf6a4b47d19bafe3"}, + {file = "pydantic_core-2.18.3-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:616221a6d473c5b9aa83fa8982745441f6a4a62a66436be9445c65f241b86c94"}, + {file = "pydantic_core-2.18.3-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:7e6382ce89a92bc1d0c0c5edd51e931432202b9080dc921d8d003e616402efd1"}, + {file = "pydantic_core-2.18.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ff58f379345603d940e461eae474b6bbb6dab66ed9a851ecd3cb3709bf4dcf6a"}, + {file = "pydantic_core-2.18.3.tar.gz", hash = "sha256:432e999088d85c8f36b9a3f769a8e2b57aabd817bbb729a90d1fe7f18f6f1f39"}, ] [package.dependencies] @@ -3137,17 +3599,16 @@ jupyter = ["ipython", "traitlets (>=5)"] [[package]] name = "pygments" -version = "2.17.2" +version = "2.18.0" description = "Pygments is a syntax highlighting package written in Python." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"}, - {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"}, + {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"}, + {file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"}, ] [package.extras] -plugins = ["importlib-metadata"] windows-terminal = ["colorama (>=0.4.6)"] [[package]] @@ -3185,13 +3646,13 @@ hook-testing = ["execnet (>=1.5.0)", "psutil", "pytest (>=2.7.3)"] [[package]] name = "pyinstaller-hooks-contrib" -version = "2024.4" +version = "2024.6" description = "Community maintained hooks for PyInstaller" optional = false python-versions = ">=3.7" files = [ - {file = "pyinstaller_hooks_contrib-2024.4-py2.py3-none-any.whl", hash = "sha256:3c521e3c710de74a4d6eeebf5b7b76c3e5b332fea8fa0baafa42c94b73908c0e"}, - {file = "pyinstaller_hooks_contrib-2024.4.tar.gz", hash = "sha256:3aad23ec9298ce675432397cda539e11a8bf77341a314e48b4da4c787ed67e8a"}, + {file = "pyinstaller_hooks_contrib-2024.6-py2.py3-none-any.whl", hash = "sha256:6cc88dad75261d9e1a7e0c6385139f35dcdbb16640c911a27f6078fe924a38cf"}, + {file = "pyinstaller_hooks_contrib-2024.6.tar.gz", hash = "sha256:3c188b3a79f5cd46d96520df3934642556a1b6ce8988ec5bbce820ada424bc2b"}, ] [package.dependencies] @@ -3201,17 +3662,17 @@ setuptools = ">=42.0.0" [[package]] name = "pymdown-extensions" -version = "10.7.1" +version = "10.8.1" description = "Extension pack for Python Markdown." optional = false python-versions = ">=3.8" files = [ - {file = "pymdown_extensions-10.7.1-py3-none-any.whl", hash = "sha256:f5cc7000d7ff0d1ce9395d216017fa4df3dde800afb1fb72d1c7d3fd35e710f4"}, - {file = "pymdown_extensions-10.7.1.tar.gz", hash = "sha256:c70e146bdd83c744ffc766b4671999796aba18842b268510a329f7f64700d584"}, + {file = "pymdown_extensions-10.8.1-py3-none-any.whl", hash = "sha256:f938326115884f48c6059c67377c46cf631c733ef3629b6eed1349989d1b30cb"}, + {file = "pymdown_extensions-10.8.1.tar.gz", hash = "sha256:3ab1db5c9e21728dabf75192d71471f8e50f216627e9a1fa9535ecb0231b9940"}, ] [package.dependencies] -markdown = ">=3.5" +markdown = ">=3.6" pyyaml = "*" [package.extras] @@ -3233,13 +3694,13 @@ diagrams = ["jinja2", "railroad-diagrams"] [[package]] name = "pytest" -version = "8.1.1" +version = "8.2.1" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.8" files = [ - {file = "pytest-8.1.1-py3-none-any.whl", hash = "sha256:2a8386cfc11fa9d2c50ee7b2a57e7d898ef90470a7a34c4b949ff59662bb78b7"}, - {file = "pytest-8.1.1.tar.gz", hash = "sha256:ac978141a75948948817d360297b7aae0fcb9d6ff6bc9ec6d514b85d5a65c044"}, + {file = "pytest-8.2.1-py3-none-any.whl", hash = "sha256:faccc5d332b8c3719f40283d0d44aa5cf101cec36f88cde9ed8f2bc0538612b1"}, + {file = "pytest-8.2.1.tar.gz", hash = "sha256:5046e5b46d8e4cac199c373041f26be56fdb81eb4e67dc11d4e10811fc3408fd"}, ] [package.dependencies] @@ -3247,11 +3708,11 @@ colorama = {version = "*", markers = "sys_platform == \"win32\""} exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} iniconfig = "*" packaging = "*" -pluggy = ">=1.4,<2.0" +pluggy = ">=1.5,<2.0" tomli = {version = ">=1", markers = "python_version < \"3.11\""} [package.extras] -testing = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] +dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] [[package]] name = "pytest-cov" @@ -3304,18 +3765,18 @@ six = ">=1.5" [[package]] name = "python-gitlab" -version = "4.4.0" +version = "4.6.0" description = "A python wrapper for the GitLab API" optional = false python-versions = ">=3.8.0" files = [ - {file = "python-gitlab-4.4.0.tar.gz", hash = "sha256:1d117bf7b433ae8255e5d74e72c660978f50ee85eb62248c9fb52ef43c3e3814"}, - {file = "python_gitlab-4.4.0-py3-none-any.whl", hash = "sha256:cdad39d016f59664cdaad0f878f194c79cb4357630776caa9a92c1da25c8d986"}, + {file = "python_gitlab-4.6.0-py3-none-any.whl", hash = "sha256:b22e54344706851815ae5395f5f8f6503f9d3ef180e99ac9fc2ea66f59912a56"}, + {file = "python_gitlab-4.6.0.tar.gz", hash = "sha256:b56ae363890374caede853ef552e92c41551d605800de1c64ba61bcf25f237b0"}, ] [package.dependencies] -requests = ">=2.25.0" -requests-toolbelt = ">=0.10.1" +requests = ">=2.32.0" +requests-toolbelt = ">=1.0.0" [package.extras] autocompletion = ["argcomplete (>=1.10.0,<3)"] @@ -3323,13 +3784,13 @@ yaml = ["PyYaml (>=6.0.1)"] [[package]] name = "python-semantic-release" -version = "9.4.2" +version = "9.8.0" description = "Automatic Semantic Versioning for Python projects" optional = false python-versions = ">=3.8" files = [ - {file = "python_semantic_release-9.4.2-py3-none-any.whl", hash = "sha256:db5cc2b81e6310b9bdb966e1060d501e8a888be612206abeb52442f1583319f3"}, - {file = "python_semantic_release-9.4.2.tar.gz", hash = "sha256:bdbbdb2e7c2177458fdfcd344dc675b47eb890dca8e2cd9875cb8428e4bc9e74"}, + {file = "python_semantic_release-9.8.0-py3-none-any.whl", hash = "sha256:0a85ad479a77e46a62b4b7c7ad732e4cafc43c15313f8da69cb3d0dc09843a3e"}, + {file = "python_semantic_release-9.8.0.tar.gz", hash = "sha256:13feed13a74f9411271eef798f1738e0525224b6fab560854b9172e6ea6afe67"}, ] [package.dependencies] @@ -3347,9 +3808,10 @@ shellingham = ">=1.5,<2.0" tomlkit = ">=0.11,<1.0" [package.extras] -dev = ["pre-commit (>=3.5,<4.0)", "ruff (==0.3.5)", "tox (>=4.11,<5.0)"] +build = ["build (>=1.2,<2.0)"] +dev = ["pre-commit (>=3.5,<4.0)", "ruff (==0.4.4)", "tox (>=4.11,<5.0)"] docs = ["Sphinx (>=6.0,<7.0)", "furo (>=2024.1,<2025.0)", "sphinx-autobuild (==2024.2.4)", "sphinxcontrib-apidoc (==0.5.0)"] -mypy = ["mypy (==1.9.0)", "types-requests (>=2.31.0,<2.32.0)"] +mypy = ["mypy (==1.10.0)", "types-requests (>=2.31.0,<2.32.0)"] test = ["coverage[toml] (>=7.0,<8.0)", "pytest (>=7.0,<8.0)", "pytest-clarity (>=1.0,<2.0)", "pytest-cov (>=5.0,<6.0)", "pytest-env (>=1.0,<2.0)", "pytest-lazy-fixture (>=0.6.3,<0.7.0)", "pytest-mock (>=3.0,<4.0)", "pytest-pretty (>=1.2,<2.0)", "pytest-xdist (>=3.0,<4.0)", "requests-mock (>=1.10,<2.0)", "responses (>=0.25.0,<0.26.0)", "types-pytest-lazy-fixture (>=0.6.3,<0.7.0)"] [[package]] @@ -3462,99 +3924,99 @@ pyyaml = "*" [[package]] name = "pyzmq" -version = "26.0.0" +version = "26.0.3" description = "Python bindings for 0MQ" optional = false python-versions = ">=3.7" files = [ - {file = "pyzmq-26.0.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:a86409f3f8eae7af5a47babd831a119bdf552e831f04d2225a313305e8e35e7c"}, - {file = "pyzmq-26.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d36a46975925b8bf14b69fe6d4097bc96c91f94ceb954d56853a2211a5cc3433"}, - {file = "pyzmq-26.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcac700269d081ded42ed3833f9d0effe734148376204af9c0ef0fd25a3fea55"}, - {file = "pyzmq-26.0.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49efc420e36d2e8adc5dae41c2c1e8bb37a069e40a880cbe414a032136b194b0"}, - {file = "pyzmq-26.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02773b96ef6a17a57680c3609645785c390198be31a4505c01ce0c846f9e7d0e"}, - {file = "pyzmq-26.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:ce2c53f4963a358ba91b58ccecb84fab6d5f0622230d105c2589f7556ec53cc9"}, - {file = "pyzmq-26.0.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:06525d996afdb0da3e8b7df0b654261455f6e86c2c3574c3f00d2bd335be78eb"}, - {file = "pyzmq-26.0.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bd3537f049dc0488adb3df29a77635eaff2a8d1d3d29a09714db6e2d10caba1a"}, - {file = "pyzmq-26.0.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9ce158ab54994c60fdde83300dc1e447446baacbe4ec9e4e80096f9b9a125c13"}, - {file = "pyzmq-26.0.0-cp310-cp310-win32.whl", hash = "sha256:271c9178a94b009651f8ad3ff9bb9ca45778aaf66c9e325a44d81a7498fcaa59"}, - {file = "pyzmq-26.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:4216eee101d104a017042f0e4af0a45875400ff3794f1a59476e210b1a9760e2"}, - {file = "pyzmq-26.0.0-cp310-cp310-win_arm64.whl", hash = "sha256:44271793067025a07d38ad4be11f08187cce850fafd1890b42046abbcdca2fc0"}, - {file = "pyzmq-26.0.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:1e87178437460b6df18e761650ef080d3ad5a41813cc3df7f9fd78714fca04c0"}, - {file = "pyzmq-26.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0397c7431f3fc2bac497992d7447b036bc0d8bb3e15b158b2013201857ff2354"}, - {file = "pyzmq-26.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a5b4dc4d7a3f859026083906724ad1ae743261548b61d0d5abcf2d994122c2b"}, - {file = "pyzmq-26.0.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:952e85c5e86f9ba100b78b60719b76e1ff3e13bb403cb6de687bb92e7b2179e7"}, - {file = "pyzmq-26.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07fdeac8612a9dca6fcad6cb43c7efb75f53ba75da981fbafa949ddcde1d5662"}, - {file = "pyzmq-26.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:39b8ed8d2e5da8b8351c6aa627601b3b52e8eb5e25cf6bcd26b6f012dec7870b"}, - {file = "pyzmq-26.0.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f6f618d7d7c9c37053a36e6dc5435c53e9e0c7a67e6fd00b69c209d07a8db4dc"}, - {file = "pyzmq-26.0.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:72ae3078b1c47552e0e39fd81fc0472e880316897a733dbb3570819be19da48a"}, - {file = "pyzmq-26.0.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5d7fcc648445dbfd6ce9973ec7b4a33ee9307b7e88cf4816f4403ccbaf8de9ca"}, - {file = "pyzmq-26.0.0-cp311-cp311-win32.whl", hash = "sha256:9982799d7d7807beb1b26f1aa9a192baccb1a14c5d00eca881a42a0ae562671b"}, - {file = "pyzmq-26.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:60f91afc76a3fc5d65dfba4f6b6020c462674b5eab6cbf00dec133d79656072d"}, - {file = "pyzmq-26.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:120887d773e878136e9b33bbba656df0d4c6e2861694d07d058ec60ce1108b24"}, - {file = "pyzmq-26.0.0-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:469f4febd63c26b20132e54cc40048d5698123794b103758ccd21b8a45890dc3"}, - {file = "pyzmq-26.0.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c919895132cae5a458d5a17047fd33c9eb271f15bb3485add34429cfd7b76a71"}, - {file = "pyzmq-26.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e0e94ca9a8f23000d54e11ecd727b69fb1994baf3b6b1eedb881cdd3196ecec"}, - {file = "pyzmq-26.0.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a824b3301ddd003cdceb9b537804e751ac5922a845b19d4e50b4789d1cd28b24"}, - {file = "pyzmq-26.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af9f5b1b76753584c871c1c96db8a18650886b3adf9fc8c7d4019343eb329c28"}, - {file = "pyzmq-26.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9691a6ab55d011e83d7438f6711b93b7f8aa21ee8cf3e7ad6d6d9ea26a8f3a1f"}, - {file = "pyzmq-26.0.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:58176e2437462568b5099acf17401be64205e175e72767a8250eef84ee9ec4f5"}, - {file = "pyzmq-26.0.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:d492921b398d640a1f796306531bc6911a94ce5528b798ed14e0620abd9b948d"}, - {file = "pyzmq-26.0.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f85bb2c47b5fd70e3cbb280e380ab97bdf9f02e1a363cb472fe0a297ac24029d"}, - {file = "pyzmq-26.0.0-cp312-cp312-win32.whl", hash = "sha256:c2e36399f0433b14a91f956bd7ecf94799c57a6f992889d45440cb05b3de8025"}, - {file = "pyzmq-26.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:12ca1afb065e5b21a32b1e35bfcbc8762efc0f7555c166acaec36c93b52d7ccf"}, - {file = "pyzmq-26.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:f66c925f62ce28946525c32a094e346dd8da6c828d568d7ecda97f5ae36089c3"}, - {file = "pyzmq-26.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e495ff09514fc657c5fb2cba0aac082ce0494c6217230783297da9008333a8db"}, - {file = "pyzmq-26.0.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5736c9a54c27319a65ffc72dbf684538f2773237e94ba50b7f1f74f4e3cb9115"}, - {file = "pyzmq-26.0.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cd62830100b9b1adb51da4094142bd680d51daf9a0f6f3f39e1f80474eddc011"}, - {file = "pyzmq-26.0.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:544a7ee271fac41ddc0ba11f4b128ddd5f2bf0a3186d25be331ed8bfbb253536"}, - {file = "pyzmq-26.0.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:694625c2c22be57149e9439757ee02ee4fb6432f7054dc5008bbbc33ef388d1c"}, - {file = "pyzmq-26.0.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:90ba8f7c6f34c2c11179b293050417c14661035969ef3f8867200ea6901f9000"}, - {file = "pyzmq-26.0.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ab2e55046263c8b24e64116e80b63cf701df747b44aadcf317aa47c8af2dfe67"}, - {file = "pyzmq-26.0.0-cp37-cp37m-win32.whl", hash = "sha256:7353d231686bbc96c458b934f134ff9165a1e9dd0a2ea8f724469e44bcc2c07a"}, - {file = "pyzmq-26.0.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1df2b992eabc59f078ca916e9ac8b5bd463536bf7828c13940b35b8555ed7861"}, - {file = "pyzmq-26.0.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:2397364289334840c81ff1ef95a5a5ee326de01c1437cc38f7e16785a7b653d9"}, - {file = "pyzmq-26.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c952cf06edbbd2d67f627037e2c8e3187ca834d6b9a222e3a3037f80d393a345"}, - {file = "pyzmq-26.0.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:55f390adb763196d75a2e8c18277b4344f8a7f94f223b5d096324c5b47c2471e"}, - {file = "pyzmq-26.0.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1da5e11862a994360319df4f425e89662563683334e1079684eb77b9a6478ae2"}, - {file = "pyzmq-26.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:72340614ea23904cff824109eb025648bdf32775d87f5814d3ba6f2335a853f3"}, - {file = "pyzmq-26.0.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:aa7431d12ebb5433a92e99dc326d45eaf52a90046032bac4c558b4bdeee5dc7a"}, - {file = "pyzmq-26.0.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a2b13008a693c0ffccaeeebcc5ab5f2398cced3b5bf482ba89a38fe56b00eb10"}, - {file = "pyzmq-26.0.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:9d68284ce48617c97e675ed8a89db12a098eaa871a026999c9a10351f547f1fe"}, - {file = "pyzmq-26.0.0-cp38-cp38-win32.whl", hash = "sha256:8783857a8c8df648a70c81ea3ff53ee71e5bf18468ca5ac3414f419fe8f3bd93"}, - {file = "pyzmq-26.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:36d0f2fcbdba1fda8ff213bd17db7ddcba848aa70480ade3fe70401dce606511"}, - {file = "pyzmq-26.0.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:dd87df01bc8eca392f0d505924087ccafdc4885a498e68df9f09eca9fdc736f1"}, - {file = "pyzmq-26.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:abc08b2e688714216870a6ab974733d4a1fcf0437d250ac8feed59c4c5c3f395"}, - {file = "pyzmq-26.0.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:dd13a30454adcf2f361155ea563ec99036678131a17c6b1a3f74426212c14ddc"}, - {file = "pyzmq-26.0.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a0562054930471b386a44b0887504687c4e7adf4ba89bddc2e5959d16c371764"}, - {file = "pyzmq-26.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc7badded4b025dbc25f34b95503b71c952235e6e40de40995c0c120efb4ff6d"}, - {file = "pyzmq-26.0.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f971e77358384b8bcf3e9a7577cf84f97adbd6359f943e30cbff66087afcb279"}, - {file = "pyzmq-26.0.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ca4ebbef3f5fbd271eafc7c22ebbb88b74232f08b0e51759113f30a8d01f6843"}, - {file = "pyzmq-26.0.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:cc98fbd4ce4ef8a0fbe97ab6d495aaa7764461e5a45f24c04f1d234e7bb80293"}, - {file = "pyzmq-26.0.0-cp39-cp39-win32.whl", hash = "sha256:a5207bc2a923118e9afb57fee679be016ea138c27d1be5747118966e2d5d9450"}, - {file = "pyzmq-26.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:e0c08a6070358a2984900a4518e2dacbfaf24aac018ab086d7ac2f6069b13340"}, - {file = "pyzmq-26.0.0-cp39-cp39-win_arm64.whl", hash = "sha256:eae3dcc185c405cf645480745c45346a1f42afce240f69a589095e41bd2b9e3d"}, - {file = "pyzmq-26.0.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:71a8f010e23dfd61c531084a2b72a81885017da28352540f0b7799ca8423c044"}, - {file = "pyzmq-26.0.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b48b7e417c56486932fb0c01fecd24916fe6bc359c03a654aa8c63fa33e3d76"}, - {file = "pyzmq-26.0.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2806942185b40a3477d9b300c6f71354dd2be37e3f61a43193c96caa51e284d1"}, - {file = "pyzmq-26.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ed127aff75a3df142ae7a883c49a85b0b2f863b59fa1b8e4280335f5ebab5fd0"}, - {file = "pyzmq-26.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:903b77dd2f17286496fa3ec902bc523f4502b0c64a2892df4b021222a2ba95fe"}, - {file = "pyzmq-26.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:321a6872a9371709a62b3a4a14c1e9b5b47549371197c0c2164d2288510cd6d6"}, - {file = "pyzmq-26.0.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cac954dc83c84e9d9d65f2359d402d7e79ae094d7808d578c9e9cc2c350c5a64"}, - {file = "pyzmq-26.0.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ac6f54c399638858e0b2a3153f23934604f3a8c9bb5a9cf865060cc658b1e096"}, - {file = "pyzmq-26.0.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40af30c4cd0a046029d7b5272d02a649f9b1f89fb1361bbc90ba08d55ac88273"}, - {file = "pyzmq-26.0.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:814245422f1c7707634397621dbcbeea7671fdc5c43d1ae592f4e0e45179e7fb"}, - {file = "pyzmq-26.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6d3d7ef786e778351e6c51b45906e16506ad98bb78b99304032cb1876dfc81d2"}, - {file = "pyzmq-26.0.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:36a85da0eab4c5337d0de7f975cca011208a59e9d0637e0c1b571764f1dd4a8f"}, - {file = "pyzmq-26.0.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1d64889bfe4109f4a59a72b1d21416550465020642d6f556efd044951386bd38"}, - {file = "pyzmq-26.0.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:80fdea3e9e34c480bfccbb910f75380196ae9d1c12880c21743c845ebe6b13aa"}, - {file = "pyzmq-26.0.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:7129efc54dc48f566eed5422bc555ba4e472e40a1f9de328577c90ade47ccf5d"}, - {file = "pyzmq-26.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0ec5147095d6065b0e3a38a1a34f7859ab46496f3d5ce71134165893e9f83674"}, - {file = "pyzmq-26.0.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7a1cc0445038a394479ad36b7e3cf55a19ee40099c031f65de872b8ee7025e79"}, - {file = "pyzmq-26.0.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b377b520e618c30c827966c274dd62ce7e15c72ce8767fae6193b6bdd1deb502"}, - {file = "pyzmq-26.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc907b26d287e6981d1e531c8fc21a0f94fe46a17493a8322eb3c75f8b561334"}, - {file = "pyzmq-26.0.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:580dd4b1c2edd51f284df0209bf439899f425ed00cb803a85ddc6cf10c866688"}, - {file = "pyzmq-26.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:08db8071020181173c70cf2dad239e5e21e5b2e95f95b0ece0da39a70f5a483c"}, - {file = "pyzmq-26.0.0.tar.gz", hash = "sha256:10ff405db5cee3bbd7aa143d78b25d90356097aed7864e50f0ae644e08759fe9"}, + {file = "pyzmq-26.0.3-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:44dd6fc3034f1eaa72ece33588867df9e006a7303725a12d64c3dff92330f625"}, + {file = "pyzmq-26.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:acb704195a71ac5ea5ecf2811c9ee19ecdc62b91878528302dd0be1b9451cc90"}, + {file = "pyzmq-26.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5dbb9c997932473a27afa93954bb77a9f9b786b4ccf718d903f35da3232317de"}, + {file = "pyzmq-26.0.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6bcb34f869d431799c3ee7d516554797f7760cb2198ecaa89c3f176f72d062be"}, + {file = "pyzmq-26.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38ece17ec5f20d7d9b442e5174ae9f020365d01ba7c112205a4d59cf19dc38ee"}, + {file = "pyzmq-26.0.3-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:ba6e5e6588e49139a0979d03a7deb9c734bde647b9a8808f26acf9c547cab1bf"}, + {file = "pyzmq-26.0.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3bf8b000a4e2967e6dfdd8656cd0757d18c7e5ce3d16339e550bd462f4857e59"}, + {file = "pyzmq-26.0.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:2136f64fbb86451dbbf70223635a468272dd20075f988a102bf8a3f194a411dc"}, + {file = "pyzmq-26.0.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e8918973fbd34e7814f59143c5f600ecd38b8038161239fd1a3d33d5817a38b8"}, + {file = "pyzmq-26.0.3-cp310-cp310-win32.whl", hash = "sha256:0aaf982e68a7ac284377d051c742610220fd06d330dcd4c4dbb4cdd77c22a537"}, + {file = "pyzmq-26.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:f1a9b7d00fdf60b4039f4455afd031fe85ee8305b019334b72dcf73c567edc47"}, + {file = "pyzmq-26.0.3-cp310-cp310-win_arm64.whl", hash = "sha256:80b12f25d805a919d53efc0a5ad7c0c0326f13b4eae981a5d7b7cc343318ebb7"}, + {file = "pyzmq-26.0.3-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:a72a84570f84c374b4c287183debc776dc319d3e8ce6b6a0041ce2e400de3f32"}, + {file = "pyzmq-26.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7ca684ee649b55fd8f378127ac8462fb6c85f251c2fb027eb3c887e8ee347bcd"}, + {file = "pyzmq-26.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e222562dc0f38571c8b1ffdae9d7adb866363134299264a1958d077800b193b7"}, + {file = "pyzmq-26.0.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f17cde1db0754c35a91ac00b22b25c11da6eec5746431d6e5092f0cd31a3fea9"}, + {file = "pyzmq-26.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b7c0c0b3244bb2275abe255d4a30c050d541c6cb18b870975553f1fb6f37527"}, + {file = "pyzmq-26.0.3-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:ac97a21de3712afe6a6c071abfad40a6224fd14fa6ff0ff8d0c6e6cd4e2f807a"}, + {file = "pyzmq-26.0.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:88b88282e55fa39dd556d7fc04160bcf39dea015f78e0cecec8ff4f06c1fc2b5"}, + {file = "pyzmq-26.0.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:72b67f966b57dbd18dcc7efbc1c7fc9f5f983e572db1877081f075004614fcdd"}, + {file = "pyzmq-26.0.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f4b6cecbbf3b7380f3b61de3a7b93cb721125dc125c854c14ddc91225ba52f83"}, + {file = "pyzmq-26.0.3-cp311-cp311-win32.whl", hash = "sha256:eed56b6a39216d31ff8cd2f1d048b5bf1700e4b32a01b14379c3b6dde9ce3aa3"}, + {file = "pyzmq-26.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:3191d312c73e3cfd0f0afdf51df8405aafeb0bad71e7ed8f68b24b63c4f36500"}, + {file = "pyzmq-26.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:b6907da3017ef55139cf0e417c5123a84c7332520e73a6902ff1f79046cd3b94"}, + {file = "pyzmq-26.0.3-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:068ca17214038ae986d68f4a7021f97e187ed278ab6dccb79f837d765a54d753"}, + {file = "pyzmq-26.0.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:7821d44fe07335bea256b9f1f41474a642ca55fa671dfd9f00af8d68a920c2d4"}, + {file = "pyzmq-26.0.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eeb438a26d87c123bb318e5f2b3d86a36060b01f22fbdffd8cf247d52f7c9a2b"}, + {file = "pyzmq-26.0.3-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:69ea9d6d9baa25a4dc9cef5e2b77b8537827b122214f210dd925132e34ae9b12"}, + {file = "pyzmq-26.0.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7daa3e1369355766dea11f1d8ef829905c3b9da886ea3152788dc25ee6079e02"}, + {file = "pyzmq-26.0.3-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:6ca7a9a06b52d0e38ccf6bca1aeff7be178917893f3883f37b75589d42c4ac20"}, + {file = "pyzmq-26.0.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1b7d0e124948daa4d9686d421ef5087c0516bc6179fdcf8828b8444f8e461a77"}, + {file = "pyzmq-26.0.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:e746524418b70f38550f2190eeee834db8850088c834d4c8406fbb9bc1ae10b2"}, + {file = "pyzmq-26.0.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:6b3146f9ae6af82c47a5282ac8803523d381b3b21caeae0327ed2f7ecb718798"}, + {file = "pyzmq-26.0.3-cp312-cp312-win32.whl", hash = "sha256:2b291d1230845871c00c8462c50565a9cd6026fe1228e77ca934470bb7d70ea0"}, + {file = "pyzmq-26.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:926838a535c2c1ea21c903f909a9a54e675c2126728c21381a94ddf37c3cbddf"}, + {file = "pyzmq-26.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:5bf6c237f8c681dfb91b17f8435b2735951f0d1fad10cc5dfd96db110243370b"}, + {file = "pyzmq-26.0.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0c0991f5a96a8e620f7691e61178cd8f457b49e17b7d9cfa2067e2a0a89fc1d5"}, + {file = "pyzmq-26.0.3-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:dbf012d8fcb9f2cf0643b65df3b355fdd74fc0035d70bb5c845e9e30a3a4654b"}, + {file = "pyzmq-26.0.3-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:01fbfbeb8249a68d257f601deb50c70c929dc2dfe683b754659569e502fbd3aa"}, + {file = "pyzmq-26.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c8eb19abe87029c18f226d42b8a2c9efdd139d08f8bf6e085dd9075446db450"}, + {file = "pyzmq-26.0.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:5344b896e79800af86ad643408ca9aa303a017f6ebff8cee5a3163c1e9aec987"}, + {file = "pyzmq-26.0.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:204e0f176fd1d067671157d049466869b3ae1fc51e354708b0dc41cf94e23a3a"}, + {file = "pyzmq-26.0.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:a42db008d58530efa3b881eeee4991146de0b790e095f7ae43ba5cc612decbc5"}, + {file = "pyzmq-26.0.3-cp37-cp37m-win32.whl", hash = "sha256:8d7a498671ca87e32b54cb47c82a92b40130a26c5197d392720a1bce1b3c77cf"}, + {file = "pyzmq-26.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:3b4032a96410bdc760061b14ed6a33613ffb7f702181ba999df5d16fb96ba16a"}, + {file = "pyzmq-26.0.3-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:2cc4e280098c1b192c42a849de8de2c8e0f3a84086a76ec5b07bfee29bda7d18"}, + {file = "pyzmq-26.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5bde86a2ed3ce587fa2b207424ce15b9a83a9fa14422dcc1c5356a13aed3df9d"}, + {file = "pyzmq-26.0.3-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:34106f68e20e6ff253c9f596ea50397dbd8699828d55e8fa18bd4323d8d966e6"}, + {file = "pyzmq-26.0.3-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ebbbd0e728af5db9b04e56389e2299a57ea8b9dd15c9759153ee2455b32be6ad"}, + {file = "pyzmq-26.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6b1d1c631e5940cac5a0b22c5379c86e8df6a4ec277c7a856b714021ab6cfad"}, + {file = "pyzmq-26.0.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e891ce81edd463b3b4c3b885c5603c00141151dd9c6936d98a680c8c72fe5c67"}, + {file = "pyzmq-26.0.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:9b273ecfbc590a1b98f014ae41e5cf723932f3b53ba9367cfb676f838038b32c"}, + {file = "pyzmq-26.0.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b32bff85fb02a75ea0b68f21e2412255b5731f3f389ed9aecc13a6752f58ac97"}, + {file = "pyzmq-26.0.3-cp38-cp38-win32.whl", hash = "sha256:f6c21c00478a7bea93caaaef9e7629145d4153b15a8653e8bb4609d4bc70dbfc"}, + {file = "pyzmq-26.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:3401613148d93ef0fd9aabdbddb212de3db7a4475367f49f590c837355343972"}, + {file = "pyzmq-26.0.3-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:2ed8357f4c6e0daa4f3baf31832df8a33334e0fe5b020a61bc8b345a3db7a606"}, + {file = "pyzmq-26.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c1c8f2a2ca45292084c75bb6d3a25545cff0ed931ed228d3a1810ae3758f975f"}, + {file = "pyzmq-26.0.3-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:b63731993cdddcc8e087c64e9cf003f909262b359110070183d7f3025d1c56b5"}, + {file = "pyzmq-26.0.3-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b3cd31f859b662ac5d7f4226ec7d8bd60384fa037fc02aee6ff0b53ba29a3ba8"}, + {file = "pyzmq-26.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:115f8359402fa527cf47708d6f8a0f8234f0e9ca0cab7c18c9c189c194dbf620"}, + {file = "pyzmq-26.0.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:715bdf952b9533ba13dfcf1f431a8f49e63cecc31d91d007bc1deb914f47d0e4"}, + {file = "pyzmq-26.0.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:e1258c639e00bf5e8a522fec6c3eaa3e30cf1c23a2f21a586be7e04d50c9acab"}, + {file = "pyzmq-26.0.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:15c59e780be8f30a60816a9adab900c12a58d79c1ac742b4a8df044ab2a6d920"}, + {file = "pyzmq-26.0.3-cp39-cp39-win32.whl", hash = "sha256:d0cdde3c78d8ab5b46595054e5def32a755fc028685add5ddc7403e9f6de9879"}, + {file = "pyzmq-26.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:ce828058d482ef860746bf532822842e0ff484e27f540ef5c813d516dd8896d2"}, + {file = "pyzmq-26.0.3-cp39-cp39-win_arm64.whl", hash = "sha256:788f15721c64109cf720791714dc14afd0f449d63f3a5487724f024345067381"}, + {file = "pyzmq-26.0.3-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2c18645ef6294d99b256806e34653e86236eb266278c8ec8112622b61db255de"}, + {file = "pyzmq-26.0.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7e6bc96ebe49604df3ec2c6389cc3876cabe475e6bfc84ced1bf4e630662cb35"}, + {file = "pyzmq-26.0.3-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:971e8990c5cc4ddcff26e149398fc7b0f6a042306e82500f5e8db3b10ce69f84"}, + {file = "pyzmq-26.0.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8416c23161abd94cc7da80c734ad7c9f5dbebdadfdaa77dad78244457448223"}, + {file = "pyzmq-26.0.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:082a2988364b60bb5de809373098361cf1dbb239623e39e46cb18bc035ed9c0c"}, + {file = "pyzmq-26.0.3-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d57dfbf9737763b3a60d26e6800e02e04284926329aee8fb01049635e957fe81"}, + {file = "pyzmq-26.0.3-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:77a85dca4c2430ac04dc2a2185c2deb3858a34fe7f403d0a946fa56970cf60a1"}, + {file = "pyzmq-26.0.3-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4c82a6d952a1d555bf4be42b6532927d2a5686dd3c3e280e5f63225ab47ac1f5"}, + {file = "pyzmq-26.0.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4496b1282c70c442809fc1b151977c3d967bfb33e4e17cedbf226d97de18f709"}, + {file = "pyzmq-26.0.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:e4946d6bdb7ba972dfda282f9127e5756d4f299028b1566d1245fa0d438847e6"}, + {file = "pyzmq-26.0.3-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:03c0ae165e700364b266876d712acb1ac02693acd920afa67da2ebb91a0b3c09"}, + {file = "pyzmq-26.0.3-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:3e3070e680f79887d60feeda051a58d0ac36622e1759f305a41059eff62c6da7"}, + {file = "pyzmq-26.0.3-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6ca08b840fe95d1c2bd9ab92dac5685f949fc6f9ae820ec16193e5ddf603c3b2"}, + {file = "pyzmq-26.0.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e76654e9dbfb835b3518f9938e565c7806976c07b37c33526b574cc1a1050480"}, + {file = "pyzmq-26.0.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:871587bdadd1075b112e697173e946a07d722459d20716ceb3d1bd6c64bd08ce"}, + {file = "pyzmq-26.0.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d0a2d1bd63a4ad79483049b26514e70fa618ce6115220da9efdff63688808b17"}, + {file = "pyzmq-26.0.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0270b49b6847f0d106d64b5086e9ad5dc8a902413b5dbbb15d12b60f9c1747a4"}, + {file = "pyzmq-26.0.3-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:703c60b9910488d3d0954ca585c34f541e506a091a41930e663a098d3b794c67"}, + {file = "pyzmq-26.0.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:74423631b6be371edfbf7eabb02ab995c2563fee60a80a30829176842e71722a"}, + {file = "pyzmq-26.0.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:4adfbb5451196842a88fda3612e2c0414134874bffb1c2ce83ab4242ec9e027d"}, + {file = "pyzmq-26.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:3516119f4f9b8671083a70b6afaa0a070f5683e431ab3dc26e9215620d7ca1ad"}, + {file = "pyzmq-26.0.3.tar.gz", hash = "sha256:dba7d9f2e047dfa2bca3b01f4f84aa5246725203d6284e3790f2ca15fba6b40a"}, ] [package.dependencies] @@ -3562,13 +4024,13 @@ cffi = {version = "*", markers = "implementation_name == \"pypy\""} [[package]] name = "referencing" -version = "0.34.0" +version = "0.35.1" description = "JSON Referencing + Python" optional = false python-versions = ">=3.8" files = [ - {file = "referencing-0.34.0-py3-none-any.whl", hash = "sha256:d53ae300ceddd3169f1ffa9caf2cb7b769e92657e4fafb23d34b93679116dfd4"}, - {file = "referencing-0.34.0.tar.gz", hash = "sha256:5773bd84ef41799a5a8ca72dc34590c041eb01bf9aa02632b4a973fb0181a844"}, + {file = "referencing-0.35.1-py3-none-any.whl", hash = "sha256:eda6d3234d62814d1c64e305c1331c9a3a6132da475ab6382eaa997b21ee75de"}, + {file = "referencing-0.35.1.tar.gz", hash = "sha256:25b42124a6c8b632a425174f24087783efb348a6f1e0008e63cd4466fedf703c"}, ] [package.dependencies] @@ -3577,115 +4039,101 @@ rpds-py = ">=0.7.0" [[package]] name = "regex" -version = "2024.4.16" +version = "2024.5.15" description = "Alternative regular expression module, to replace re." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "regex-2024.4.16-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:fb83cc090eac63c006871fd24db5e30a1f282faa46328572661c0a24a2323a08"}, - {file = "regex-2024.4.16-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8c91e1763696c0eb66340c4df98623c2d4e77d0746b8f8f2bee2c6883fd1fe18"}, - {file = "regex-2024.4.16-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:10188fe732dec829c7acca7422cdd1bf57d853c7199d5a9e96bb4d40db239c73"}, - {file = "regex-2024.4.16-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:956b58d692f235cfbf5b4f3abd6d99bf102f161ccfe20d2fd0904f51c72c4c66"}, - {file = "regex-2024.4.16-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a70b51f55fd954d1f194271695821dd62054d949efd6368d8be64edd37f55c86"}, - {file = "regex-2024.4.16-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c02fcd2bf45162280613d2e4a1ca3ac558ff921ae4e308ecb307650d3a6ee51"}, - {file = "regex-2024.4.16-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c4ed75ea6892a56896d78f11006161eea52c45a14994794bcfa1654430984b22"}, - {file = "regex-2024.4.16-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd727ad276bb91928879f3aa6396c9a1d34e5e180dce40578421a691eeb77f47"}, - {file = "regex-2024.4.16-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7cbc5d9e8a1781e7be17da67b92580d6ce4dcef5819c1b1b89f49d9678cc278c"}, - {file = "regex-2024.4.16-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:78fddb22b9ef810b63ef341c9fcf6455232d97cfe03938cbc29e2672c436670e"}, - {file = "regex-2024.4.16-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:445ca8d3c5a01309633a0c9db57150312a181146315693273e35d936472df912"}, - {file = "regex-2024.4.16-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:95399831a206211d6bc40224af1c635cb8790ddd5c7493e0bd03b85711076a53"}, - {file = "regex-2024.4.16-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:7731728b6568fc286d86745f27f07266de49603a6fdc4d19c87e8c247be452af"}, - {file = "regex-2024.4.16-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4facc913e10bdba42ec0aee76d029aedda628161a7ce4116b16680a0413f658a"}, - {file = "regex-2024.4.16-cp310-cp310-win32.whl", hash = "sha256:911742856ce98d879acbea33fcc03c1d8dc1106234c5e7d068932c945db209c0"}, - {file = "regex-2024.4.16-cp310-cp310-win_amd64.whl", hash = "sha256:e0a2df336d1135a0b3a67f3bbf78a75f69562c1199ed9935372b82215cddd6e2"}, - {file = "regex-2024.4.16-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:1210365faba7c2150451eb78ec5687871c796b0f1fa701bfd2a4a25420482d26"}, - {file = "regex-2024.4.16-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9ab40412f8cd6f615bfedea40c8bf0407d41bf83b96f6fc9ff34976d6b7037fd"}, - {file = "regex-2024.4.16-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fd80d1280d473500d8086d104962a82d77bfbf2b118053824b7be28cd5a79ea5"}, - {file = "regex-2024.4.16-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bb966fdd9217e53abf824f437a5a2d643a38d4fd5fd0ca711b9da683d452969"}, - {file = "regex-2024.4.16-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:20b7a68444f536365af42a75ccecb7ab41a896a04acf58432db9e206f4e525d6"}, - {file = "regex-2024.4.16-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b74586dd0b039c62416034f811d7ee62810174bb70dffcca6439f5236249eb09"}, - {file = "regex-2024.4.16-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c8290b44d8b0af4e77048646c10c6e3aa583c1ca67f3b5ffb6e06cf0c6f0f89"}, - {file = "regex-2024.4.16-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2d80a6749724b37853ece57988b39c4e79d2b5fe2869a86e8aeae3bbeef9eb0"}, - {file = "regex-2024.4.16-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3a1018e97aeb24e4f939afcd88211ace472ba566efc5bdf53fd8fd7f41fa7170"}, - {file = "regex-2024.4.16-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:8d015604ee6204e76569d2f44e5a210728fa917115bef0d102f4107e622b08d5"}, - {file = "regex-2024.4.16-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:3d5ac5234fb5053850d79dd8eb1015cb0d7d9ed951fa37aa9e6249a19aa4f336"}, - {file = "regex-2024.4.16-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:0a38d151e2cdd66d16dab550c22f9521ba79761423b87c01dae0a6e9add79c0d"}, - {file = "regex-2024.4.16-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:159dc4e59a159cb8e4e8f8961eb1fa5d58f93cb1acd1701d8aff38d45e1a84a6"}, - {file = "regex-2024.4.16-cp311-cp311-win32.whl", hash = "sha256:ba2336d6548dee3117520545cfe44dc28a250aa091f8281d28804aa8d707d93d"}, - {file = "regex-2024.4.16-cp311-cp311-win_amd64.whl", hash = "sha256:8f83b6fd3dc3ba94d2b22717f9c8b8512354fd95221ac661784df2769ea9bba9"}, - {file = "regex-2024.4.16-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:80b696e8972b81edf0af2a259e1b2a4a661f818fae22e5fa4fa1a995fb4a40fd"}, - {file = "regex-2024.4.16-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d61ae114d2a2311f61d90c2ef1358518e8f05eafda76eaf9c772a077e0b465ec"}, - {file = "regex-2024.4.16-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8ba6745440b9a27336443b0c285d705ce73adb9ec90e2f2004c64d95ab5a7598"}, - {file = "regex-2024.4.16-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6295004b2dd37b0835ea5c14a33e00e8cfa3c4add4d587b77287825f3418d310"}, - {file = "regex-2024.4.16-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4aba818dcc7263852aabb172ec27b71d2abca02a593b95fa79351b2774eb1d2b"}, - {file = "regex-2024.4.16-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d0800631e565c47520aaa04ae38b96abc5196fe8b4aa9bd864445bd2b5848a7a"}, - {file = "regex-2024.4.16-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:08dea89f859c3df48a440dbdcd7b7155bc675f2fa2ec8c521d02dc69e877db70"}, - {file = "regex-2024.4.16-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eeaa0b5328b785abc344acc6241cffde50dc394a0644a968add75fcefe15b9d4"}, - {file = "regex-2024.4.16-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4e819a806420bc010489f4e741b3036071aba209f2e0989d4750b08b12a9343f"}, - {file = "regex-2024.4.16-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:c2d0e7cbb6341e830adcbfa2479fdeebbfbb328f11edd6b5675674e7a1e37730"}, - {file = "regex-2024.4.16-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:91797b98f5e34b6a49f54be33f72e2fb658018ae532be2f79f7c63b4ae225145"}, - {file = "regex-2024.4.16-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:d2da13568eff02b30fd54fccd1e042a70fe920d816616fda4bf54ec705668d81"}, - {file = "regex-2024.4.16-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:370c68dc5570b394cbaadff50e64d705f64debed30573e5c313c360689b6aadc"}, - {file = "regex-2024.4.16-cp312-cp312-win32.whl", hash = "sha256:904c883cf10a975b02ab3478bce652f0f5346a2c28d0a8521d97bb23c323cc8b"}, - {file = "regex-2024.4.16-cp312-cp312-win_amd64.whl", hash = "sha256:785c071c982dce54d44ea0b79cd6dfafddeccdd98cfa5f7b86ef69b381b457d9"}, - {file = "regex-2024.4.16-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e2f142b45c6fed48166faeb4303b4b58c9fcd827da63f4cf0a123c3480ae11fb"}, - {file = "regex-2024.4.16-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e87ab229332ceb127a165612d839ab87795972102cb9830e5f12b8c9a5c1b508"}, - {file = "regex-2024.4.16-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:81500ed5af2090b4a9157a59dbc89873a25c33db1bb9a8cf123837dcc9765047"}, - {file = "regex-2024.4.16-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b340cccad138ecb363324aa26893963dcabb02bb25e440ebdf42e30963f1a4e0"}, - {file = "regex-2024.4.16-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c72608e70f053643437bd2be0608f7f1c46d4022e4104d76826f0839199347a"}, - {file = "regex-2024.4.16-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a01fe2305e6232ef3e8f40bfc0f0f3a04def9aab514910fa4203bafbc0bb4682"}, - {file = "regex-2024.4.16-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:03576e3a423d19dda13e55598f0fd507b5d660d42c51b02df4e0d97824fdcae3"}, - {file = "regex-2024.4.16-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:549c3584993772e25f02d0656ac48abdda73169fe347263948cf2b1cead622f3"}, - {file = "regex-2024.4.16-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:34422d5a69a60b7e9a07a690094e824b66f5ddc662a5fc600d65b7c174a05f04"}, - {file = "regex-2024.4.16-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:5f580c651a72b75c39e311343fe6875d6f58cf51c471a97f15a938d9fe4e0d37"}, - {file = "regex-2024.4.16-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:3399dd8a7495bbb2bacd59b84840eef9057826c664472e86c91d675d007137f5"}, - {file = "regex-2024.4.16-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8d1f86f3f4e2388aa3310b50694ac44daefbd1681def26b4519bd050a398dc5a"}, - {file = "regex-2024.4.16-cp37-cp37m-win32.whl", hash = "sha256:dd5acc0a7d38fdc7a3a6fd3ad14c880819008ecb3379626e56b163165162cc46"}, - {file = "regex-2024.4.16-cp37-cp37m-win_amd64.whl", hash = "sha256:ba8122e3bb94ecda29a8de4cf889f600171424ea586847aa92c334772d200331"}, - {file = "regex-2024.4.16-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:743deffdf3b3481da32e8a96887e2aa945ec6685af1cfe2bcc292638c9ba2f48"}, - {file = "regex-2024.4.16-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7571f19f4a3fd00af9341c7801d1ad1967fc9c3f5e62402683047e7166b9f2b4"}, - {file = "regex-2024.4.16-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:df79012ebf6f4efb8d307b1328226aef24ca446b3ff8d0e30202d7ebcb977a8c"}, - {file = "regex-2024.4.16-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e757d475953269fbf4b441207bb7dbdd1c43180711b6208e129b637792ac0b93"}, - {file = "regex-2024.4.16-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4313ab9bf6a81206c8ac28fdfcddc0435299dc88cad12cc6305fd0e78b81f9e4"}, - {file = "regex-2024.4.16-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d83c2bc678453646f1a18f8db1e927a2d3f4935031b9ad8a76e56760461105dd"}, - {file = "regex-2024.4.16-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9df1bfef97db938469ef0a7354b2d591a2d438bc497b2c489471bec0e6baf7c4"}, - {file = "regex-2024.4.16-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62120ed0de69b3649cc68e2965376048793f466c5a6c4370fb27c16c1beac22d"}, - {file = "regex-2024.4.16-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c2ef6f7990b6e8758fe48ad08f7e2f66c8f11dc66e24093304b87cae9037bb4a"}, - {file = "regex-2024.4.16-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8fc6976a3395fe4d1fbeb984adaa8ec652a1e12f36b56ec8c236e5117b585427"}, - {file = "regex-2024.4.16-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:03e68f44340528111067cecf12721c3df4811c67268b897fbe695c95f860ac42"}, - {file = "regex-2024.4.16-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ec7e0043b91115f427998febaa2beb82c82df708168b35ece3accb610b91fac1"}, - {file = "regex-2024.4.16-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:c21fc21a4c7480479d12fd8e679b699f744f76bb05f53a1d14182b31f55aac76"}, - {file = "regex-2024.4.16-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:12f6a3f2f58bb7344751919a1876ee1b976fe08b9ffccb4bbea66f26af6017b9"}, - {file = "regex-2024.4.16-cp38-cp38-win32.whl", hash = "sha256:479595a4fbe9ed8f8f72c59717e8cf222da2e4c07b6ae5b65411e6302af9708e"}, - {file = "regex-2024.4.16-cp38-cp38-win_amd64.whl", hash = "sha256:0534b034fba6101611968fae8e856c1698da97ce2efb5c2b895fc8b9e23a5834"}, - {file = "regex-2024.4.16-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a7ccdd1c4a3472a7533b0a7aa9ee34c9a2bef859ba86deec07aff2ad7e0c3b94"}, - {file = "regex-2024.4.16-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6f2f017c5be19984fbbf55f8af6caba25e62c71293213f044da3ada7091a4455"}, - {file = "regex-2024.4.16-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:803b8905b52de78b173d3c1e83df0efb929621e7b7c5766c0843704d5332682f"}, - {file = "regex-2024.4.16-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:684008ec44ad275832a5a152f6e764bbe1914bea10968017b6feaecdad5736e0"}, - {file = "regex-2024.4.16-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:65436dce9fdc0aeeb0a0effe0839cb3d6a05f45aa45a4d9f9c60989beca78b9c"}, - {file = "regex-2024.4.16-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea355eb43b11764cf799dda62c658c4d2fdb16af41f59bb1ccfec517b60bcb07"}, - {file = "regex-2024.4.16-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98c1165f3809ce7774f05cb74e5408cd3aa93ee8573ae959a97a53db3ca3180d"}, - {file = "regex-2024.4.16-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cccc79a9be9b64c881f18305a7c715ba199e471a3973faeb7ba84172abb3f317"}, - {file = "regex-2024.4.16-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:00169caa125f35d1bca6045d65a662af0202704489fada95346cfa092ec23f39"}, - {file = "regex-2024.4.16-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:6cc38067209354e16c5609b66285af17a2863a47585bcf75285cab33d4c3b8df"}, - {file = "regex-2024.4.16-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:23cff1b267038501b179ccbbd74a821ac4a7192a1852d1d558e562b507d46013"}, - {file = "regex-2024.4.16-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:b9d320b3bf82a39f248769fc7f188e00f93526cc0fe739cfa197868633d44701"}, - {file = "regex-2024.4.16-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:89ec7f2c08937421bbbb8b48c54096fa4f88347946d4747021ad85f1b3021b3c"}, - {file = "regex-2024.4.16-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4918fd5f8b43aa7ec031e0fef1ee02deb80b6afd49c85f0790be1dc4ce34cb50"}, - {file = "regex-2024.4.16-cp39-cp39-win32.whl", hash = "sha256:684e52023aec43bdf0250e843e1fdd6febbe831bd9d52da72333fa201aaa2335"}, - {file = "regex-2024.4.16-cp39-cp39-win_amd64.whl", hash = "sha256:e697e1c0238133589e00c244a8b676bc2cfc3ab4961318d902040d099fec7483"}, - {file = "regex-2024.4.16.tar.gz", hash = "sha256:fa454d26f2e87ad661c4f0c5a5fe4cf6aab1e307d1b94f16ffdfcb089ba685c0"}, + {file = "regex-2024.5.15-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a81e3cfbae20378d75185171587cbf756015ccb14840702944f014e0d93ea09f"}, + {file = "regex-2024.5.15-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7b59138b219ffa8979013be7bc85bb60c6f7b7575df3d56dc1e403a438c7a3f6"}, + {file = "regex-2024.5.15-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a0bd000c6e266927cb7a1bc39d55be95c4b4f65c5be53e659537537e019232b1"}, + {file = "regex-2024.5.15-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5eaa7ddaf517aa095fa8da0b5015c44d03da83f5bd49c87961e3c997daed0de7"}, + {file = "regex-2024.5.15-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ba68168daedb2c0bab7fd7e00ced5ba90aebf91024dea3c88ad5063c2a562cca"}, + {file = "regex-2024.5.15-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6e8d717bca3a6e2064fc3a08df5cbe366369f4b052dcd21b7416e6d71620dca1"}, + {file = "regex-2024.5.15-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1337b7dbef9b2f71121cdbf1e97e40de33ff114801263b275aafd75303bd62b5"}, + {file = "regex-2024.5.15-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f9ebd0a36102fcad2f03696e8af4ae682793a5d30b46c647eaf280d6cfb32796"}, + {file = "regex-2024.5.15-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9efa1a32ad3a3ea112224897cdaeb6aa00381627f567179c0314f7b65d354c62"}, + {file = "regex-2024.5.15-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:1595f2d10dff3d805e054ebdc41c124753631b6a471b976963c7b28543cf13b0"}, + {file = "regex-2024.5.15-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:b802512f3e1f480f41ab5f2cfc0e2f761f08a1f41092d6718868082fc0d27143"}, + {file = "regex-2024.5.15-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:a0981022dccabca811e8171f913de05720590c915b033b7e601f35ce4ea7019f"}, + {file = "regex-2024.5.15-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:19068a6a79cf99a19ccefa44610491e9ca02c2be3305c7760d3831d38a467a6f"}, + {file = "regex-2024.5.15-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1b5269484f6126eee5e687785e83c6b60aad7663dafe842b34691157e5083e53"}, + {file = "regex-2024.5.15-cp310-cp310-win32.whl", hash = "sha256:ada150c5adfa8fbcbf321c30c751dc67d2f12f15bd183ffe4ec7cde351d945b3"}, + {file = "regex-2024.5.15-cp310-cp310-win_amd64.whl", hash = "sha256:ac394ff680fc46b97487941f5e6ae49a9f30ea41c6c6804832063f14b2a5a145"}, + {file = "regex-2024.5.15-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f5b1dff3ad008dccf18e652283f5e5339d70bf8ba7c98bf848ac33db10f7bc7a"}, + {file = "regex-2024.5.15-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c6a2b494a76983df8e3d3feea9b9ffdd558b247e60b92f877f93a1ff43d26656"}, + {file = "regex-2024.5.15-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a32b96f15c8ab2e7d27655969a23895eb799de3665fa94349f3b2fbfd547236f"}, + {file = "regex-2024.5.15-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:10002e86e6068d9e1c91eae8295ef690f02f913c57db120b58fdd35a6bb1af35"}, + {file = "regex-2024.5.15-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ec54d5afa89c19c6dd8541a133be51ee1017a38b412b1321ccb8d6ddbeb4cf7d"}, + {file = "regex-2024.5.15-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:10e4ce0dca9ae7a66e6089bb29355d4432caed736acae36fef0fdd7879f0b0cb"}, + {file = "regex-2024.5.15-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e507ff1e74373c4d3038195fdd2af30d297b4f0950eeda6f515ae3d84a1770f"}, + {file = "regex-2024.5.15-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d1f059a4d795e646e1c37665b9d06062c62d0e8cc3c511fe01315973a6542e40"}, + {file = "regex-2024.5.15-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0721931ad5fe0dda45d07f9820b90b2148ccdd8e45bb9e9b42a146cb4f695649"}, + {file = "regex-2024.5.15-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:833616ddc75ad595dee848ad984d067f2f31be645d603e4d158bba656bbf516c"}, + {file = "regex-2024.5.15-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:287eb7f54fc81546346207c533ad3c2c51a8d61075127d7f6d79aaf96cdee890"}, + {file = "regex-2024.5.15-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:19dfb1c504781a136a80ecd1fff9f16dddf5bb43cec6871778c8a907a085bb3d"}, + {file = "regex-2024.5.15-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:119af6e56dce35e8dfb5222573b50c89e5508d94d55713c75126b753f834de68"}, + {file = "regex-2024.5.15-cp311-cp311-win32.whl", hash = "sha256:1c1c174d6ec38d6c8a7504087358ce9213d4332f6293a94fbf5249992ba54efa"}, + {file = "regex-2024.5.15-cp311-cp311-win_amd64.whl", hash = "sha256:9e717956dcfd656f5055cc70996ee2cc82ac5149517fc8e1b60261b907740201"}, + {file = "regex-2024.5.15-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:632b01153e5248c134007209b5c6348a544ce96c46005d8456de1d552455b014"}, + {file = "regex-2024.5.15-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e64198f6b856d48192bf921421fdd8ad8eb35e179086e99e99f711957ffedd6e"}, + {file = "regex-2024.5.15-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:68811ab14087b2f6e0fc0c2bae9ad689ea3584cad6917fc57be6a48bbd012c49"}, + {file = "regex-2024.5.15-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8ec0c2fea1e886a19c3bee0cd19d862b3aa75dcdfb42ebe8ed30708df64687a"}, + {file = "regex-2024.5.15-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d0c0c0003c10f54a591d220997dd27d953cd9ccc1a7294b40a4be5312be8797b"}, + {file = "regex-2024.5.15-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2431b9e263af1953c55abbd3e2efca67ca80a3de8a0437cb58e2421f8184717a"}, + {file = "regex-2024.5.15-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a605586358893b483976cffc1723fb0f83e526e8f14c6e6614e75919d9862cf"}, + {file = "regex-2024.5.15-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:391d7f7f1e409d192dba8bcd42d3e4cf9e598f3979cdaed6ab11288da88cb9f2"}, + {file = "regex-2024.5.15-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9ff11639a8d98969c863d4617595eb5425fd12f7c5ef6621a4b74b71ed8726d5"}, + {file = "regex-2024.5.15-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:4eee78a04e6c67e8391edd4dad3279828dd66ac4b79570ec998e2155d2e59fd5"}, + {file = "regex-2024.5.15-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:8fe45aa3f4aa57faabbc9cb46a93363edd6197cbc43523daea044e9ff2fea83e"}, + {file = "regex-2024.5.15-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:d0a3d8d6acf0c78a1fff0e210d224b821081330b8524e3e2bc5a68ef6ab5803d"}, + {file = "regex-2024.5.15-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c486b4106066d502495b3025a0a7251bf37ea9540433940a23419461ab9f2a80"}, + {file = "regex-2024.5.15-cp312-cp312-win32.whl", hash = "sha256:c49e15eac7c149f3670b3e27f1f28a2c1ddeccd3a2812cba953e01be2ab9b5fe"}, + {file = "regex-2024.5.15-cp312-cp312-win_amd64.whl", hash = "sha256:673b5a6da4557b975c6c90198588181029c60793835ce02f497ea817ff647cb2"}, + {file = "regex-2024.5.15-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:87e2a9c29e672fc65523fb47a90d429b70ef72b901b4e4b1bd42387caf0d6835"}, + {file = "regex-2024.5.15-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c3bea0ba8b73b71b37ac833a7f3fd53825924165da6a924aec78c13032f20850"}, + {file = "regex-2024.5.15-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:bfc4f82cabe54f1e7f206fd3d30fda143f84a63fe7d64a81558d6e5f2e5aaba9"}, + {file = "regex-2024.5.15-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5bb9425fe881d578aeca0b2b4b3d314ec88738706f66f219c194d67179337cb"}, + {file = "regex-2024.5.15-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:64c65783e96e563103d641760664125e91bd85d8e49566ee560ded4da0d3e704"}, + {file = "regex-2024.5.15-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cf2430df4148b08fb4324b848672514b1385ae3807651f3567871f130a728cc3"}, + {file = "regex-2024.5.15-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5397de3219a8b08ae9540c48f602996aa6b0b65d5a61683e233af8605c42b0f2"}, + {file = "regex-2024.5.15-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:455705d34b4154a80ead722f4f185b04c4237e8e8e33f265cd0798d0e44825fa"}, + {file = "regex-2024.5.15-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b2b6f1b3bb6f640c1a92be3bbfbcb18657b125b99ecf141fb3310b5282c7d4ed"}, + {file = "regex-2024.5.15-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:3ad070b823ca5890cab606c940522d05d3d22395d432f4aaaf9d5b1653e47ced"}, + {file = "regex-2024.5.15-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:5b5467acbfc153847d5adb21e21e29847bcb5870e65c94c9206d20eb4e99a384"}, + {file = "regex-2024.5.15-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:e6662686aeb633ad65be2a42b4cb00178b3fbf7b91878f9446075c404ada552f"}, + {file = "regex-2024.5.15-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:2b4c884767504c0e2401babe8b5b7aea9148680d2e157fa28f01529d1f7fcf67"}, + {file = "regex-2024.5.15-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:3cd7874d57f13bf70078f1ff02b8b0aa48d5b9ed25fc48547516c6aba36f5741"}, + {file = "regex-2024.5.15-cp38-cp38-win32.whl", hash = "sha256:e4682f5ba31f475d58884045c1a97a860a007d44938c4c0895f41d64481edbc9"}, + {file = "regex-2024.5.15-cp38-cp38-win_amd64.whl", hash = "sha256:d99ceffa25ac45d150e30bd9ed14ec6039f2aad0ffa6bb87a5936f5782fc1569"}, + {file = "regex-2024.5.15-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:13cdaf31bed30a1e1c2453ef6015aa0983e1366fad2667657dbcac7b02f67133"}, + {file = "regex-2024.5.15-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cac27dcaa821ca271855a32188aa61d12decb6fe45ffe3e722401fe61e323cd1"}, + {file = "regex-2024.5.15-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7dbe2467273b875ea2de38ded4eba86cbcbc9a1a6d0aa11dcf7bd2e67859c435"}, + {file = "regex-2024.5.15-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64f18a9a3513a99c4bef0e3efd4c4a5b11228b48aa80743be822b71e132ae4f5"}, + {file = "regex-2024.5.15-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d347a741ea871c2e278fde6c48f85136c96b8659b632fb57a7d1ce1872547600"}, + {file = "regex-2024.5.15-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1878b8301ed011704aea4c806a3cadbd76f84dece1ec09cc9e4dc934cfa5d4da"}, + {file = "regex-2024.5.15-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4babf07ad476aaf7830d77000874d7611704a7fcf68c9c2ad151f5d94ae4bfc4"}, + {file = "regex-2024.5.15-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:35cb514e137cb3488bce23352af3e12fb0dbedd1ee6e60da053c69fb1b29cc6c"}, + {file = "regex-2024.5.15-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cdd09d47c0b2efee9378679f8510ee6955d329424c659ab3c5e3a6edea696294"}, + {file = "regex-2024.5.15-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:72d7a99cd6b8f958e85fc6ca5b37c4303294954eac1376535b03c2a43eb72629"}, + {file = "regex-2024.5.15-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:a094801d379ab20c2135529948cb84d417a2169b9bdceda2a36f5f10977ebc16"}, + {file = "regex-2024.5.15-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:c0c18345010870e58238790a6779a1219b4d97bd2e77e1140e8ee5d14df071aa"}, + {file = "regex-2024.5.15-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:16093f563098448ff6b1fa68170e4acbef94e6b6a4e25e10eae8598bb1694b5d"}, + {file = "regex-2024.5.15-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:e38a7d4e8f633a33b4c7350fbd8bad3b70bf81439ac67ac38916c4a86b465456"}, + {file = "regex-2024.5.15-cp39-cp39-win32.whl", hash = "sha256:71a455a3c584a88f654b64feccc1e25876066c4f5ef26cd6dd711308aa538694"}, + {file = "regex-2024.5.15-cp39-cp39-win_amd64.whl", hash = "sha256:cab12877a9bdafde5500206d1020a584355a97884dfd388af3699e9137bf7388"}, + {file = "regex-2024.5.15.tar.gz", hash = "sha256:d3ee02d9e5f482cc8309134a91eeaacbdd2261ba111b0fef3748eeb4913e6a2c"}, ] [[package]] name = "requests" -version = "2.31.0" +version = "2.32.3" description = "Python HTTP for Humans." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, - {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, + {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, + {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, ] [package.dependencies] @@ -3732,110 +4180,110 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "rpds-py" -version = "0.18.0" +version = "0.18.1" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false python-versions = ">=3.8" files = [ - {file = "rpds_py-0.18.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:5b4e7d8d6c9b2e8ee2d55c90b59c707ca59bc30058269b3db7b1f8df5763557e"}, - {file = "rpds_py-0.18.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c463ed05f9dfb9baebef68048aed8dcdc94411e4bf3d33a39ba97e271624f8f7"}, - {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01e36a39af54a30f28b73096dd39b6802eddd04c90dbe161c1b8dbe22353189f"}, - {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d62dec4976954a23d7f91f2f4530852b0c7608116c257833922a896101336c51"}, - {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dd18772815d5f008fa03d2b9a681ae38d5ae9f0e599f7dda233c439fcaa00d40"}, - {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:923d39efa3cfb7279a0327e337a7958bff00cc447fd07a25cddb0a1cc9a6d2da"}, - {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39514da80f971362f9267c600b6d459bfbbc549cffc2cef8e47474fddc9b45b1"}, - {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a34d557a42aa28bd5c48a023c570219ba2593bcbbb8dc1b98d8cf5d529ab1434"}, - {file = "rpds_py-0.18.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:93df1de2f7f7239dc9cc5a4a12408ee1598725036bd2dedadc14d94525192fc3"}, - {file = "rpds_py-0.18.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:34b18ba135c687f4dac449aa5157d36e2cbb7c03cbea4ddbd88604e076aa836e"}, - {file = "rpds_py-0.18.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c0b5dcf9193625afd8ecc92312d6ed78781c46ecbf39af9ad4681fc9f464af88"}, - {file = "rpds_py-0.18.0-cp310-none-win32.whl", hash = "sha256:c4325ff0442a12113a6379af66978c3fe562f846763287ef66bdc1d57925d337"}, - {file = "rpds_py-0.18.0-cp310-none-win_amd64.whl", hash = "sha256:7223a2a5fe0d217e60a60cdae28d6949140dde9c3bcc714063c5b463065e3d66"}, - {file = "rpds_py-0.18.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:3a96e0c6a41dcdba3a0a581bbf6c44bb863f27c541547fb4b9711fd8cf0ffad4"}, - {file = "rpds_py-0.18.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30f43887bbae0d49113cbaab729a112251a940e9b274536613097ab8b4899cf6"}, - {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fcb25daa9219b4cf3a0ab24b0eb9a5cc8949ed4dc72acb8fa16b7e1681aa3c58"}, - {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d68c93e381010662ab873fea609bf6c0f428b6d0bb00f2c6939782e0818d37bf"}, - {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b34b7aa8b261c1dbf7720b5d6f01f38243e9b9daf7e6b8bc1fd4657000062f2c"}, - {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2e6d75ab12b0bbab7215e5d40f1e5b738aa539598db27ef83b2ec46747df90e1"}, - {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b8612cd233543a3781bc659c731b9d607de65890085098986dfd573fc2befe5"}, - {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:aec493917dd45e3c69d00a8874e7cbed844efd935595ef78a0f25f14312e33c6"}, - {file = "rpds_py-0.18.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:661d25cbffaf8cc42e971dd570d87cb29a665f49f4abe1f9e76be9a5182c4688"}, - {file = "rpds_py-0.18.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1df3659d26f539ac74fb3b0c481cdf9d725386e3552c6fa2974f4d33d78e544b"}, - {file = "rpds_py-0.18.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a1ce3ba137ed54f83e56fb983a5859a27d43a40188ba798993812fed73c70836"}, - {file = "rpds_py-0.18.0-cp311-none-win32.whl", hash = "sha256:69e64831e22a6b377772e7fb337533c365085b31619005802a79242fee620bc1"}, - {file = "rpds_py-0.18.0-cp311-none-win_amd64.whl", hash = "sha256:998e33ad22dc7ec7e030b3df701c43630b5bc0d8fbc2267653577e3fec279afa"}, - {file = "rpds_py-0.18.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:7f2facbd386dd60cbbf1a794181e6aa0bd429bd78bfdf775436020172e2a23f0"}, - {file = "rpds_py-0.18.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1d9a5be316c15ffb2b3c405c4ff14448c36b4435be062a7f578ccd8b01f0c4d8"}, - {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd5bf1af8efe569654bbef5a3e0a56eca45f87cfcffab31dd8dde70da5982475"}, - {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5417558f6887e9b6b65b4527232553c139b57ec42c64570569b155262ac0754f"}, - {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:56a737287efecafc16f6d067c2ea0117abadcd078d58721f967952db329a3e5c"}, - {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8f03bccbd8586e9dd37219bce4d4e0d3ab492e6b3b533e973fa08a112cb2ffc9"}, - {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4457a94da0d5c53dc4b3e4de1158bdab077db23c53232f37a3cb7afdb053a4e3"}, - {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0ab39c1ba9023914297dd88ec3b3b3c3f33671baeb6acf82ad7ce883f6e8e157"}, - {file = "rpds_py-0.18.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9d54553c1136b50fd12cc17e5b11ad07374c316df307e4cfd6441bea5fb68496"}, - {file = "rpds_py-0.18.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0af039631b6de0397ab2ba16eaf2872e9f8fca391b44d3d8cac317860a700a3f"}, - {file = "rpds_py-0.18.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:84ffab12db93b5f6bad84c712c92060a2d321b35c3c9960b43d08d0f639d60d7"}, - {file = "rpds_py-0.18.0-cp312-none-win32.whl", hash = "sha256:685537e07897f173abcf67258bee3c05c374fa6fff89d4c7e42fb391b0605e98"}, - {file = "rpds_py-0.18.0-cp312-none-win_amd64.whl", hash = "sha256:e003b002ec72c8d5a3e3da2989c7d6065b47d9eaa70cd8808b5384fbb970f4ec"}, - {file = "rpds_py-0.18.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:08f9ad53c3f31dfb4baa00da22f1e862900f45908383c062c27628754af2e88e"}, - {file = "rpds_py-0.18.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c0013fe6b46aa496a6749c77e00a3eb07952832ad6166bd481c74bda0dcb6d58"}, - {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e32a92116d4f2a80b629778280103d2a510a5b3f6314ceccd6e38006b5e92dcb"}, - {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e541ec6f2ec456934fd279a3120f856cd0aedd209fc3852eca563f81738f6861"}, - {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bed88b9a458e354014d662d47e7a5baafd7ff81c780fd91584a10d6ec842cb73"}, - {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2644e47de560eb7bd55c20fc59f6daa04682655c58d08185a9b95c1970fa1e07"}, - {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e8916ae4c720529e18afa0b879473049e95949bf97042e938530e072fde061d"}, - {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:465a3eb5659338cf2a9243e50ad9b2296fa15061736d6e26240e713522b6235c"}, - {file = "rpds_py-0.18.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:ea7d4a99f3b38c37eac212dbd6ec42b7a5ec51e2c74b5d3223e43c811609e65f"}, - {file = "rpds_py-0.18.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:67071a6171e92b6da534b8ae326505f7c18022c6f19072a81dcf40db2638767c"}, - {file = "rpds_py-0.18.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:41ef53e7c58aa4ef281da975f62c258950f54b76ec8e45941e93a3d1d8580594"}, - {file = "rpds_py-0.18.0-cp38-none-win32.whl", hash = "sha256:fdea4952db2793c4ad0bdccd27c1d8fdd1423a92f04598bc39425bcc2b8ee46e"}, - {file = "rpds_py-0.18.0-cp38-none-win_amd64.whl", hash = "sha256:7cd863afe7336c62ec78d7d1349a2f34c007a3cc6c2369d667c65aeec412a5b1"}, - {file = "rpds_py-0.18.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:5307def11a35f5ae4581a0b658b0af8178c65c530e94893345bebf41cc139d33"}, - {file = "rpds_py-0.18.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:77f195baa60a54ef9d2de16fbbfd3ff8b04edc0c0140a761b56c267ac11aa467"}, - {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39f5441553f1c2aed4de4377178ad8ff8f9d733723d6c66d983d75341de265ab"}, - {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9a00312dea9310d4cb7dbd7787e722d2e86a95c2db92fbd7d0155f97127bcb40"}, - {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8f2fc11e8fe034ee3c34d316d0ad8808f45bc3b9ce5857ff29d513f3ff2923a1"}, - {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:586f8204935b9ec884500498ccc91aa869fc652c40c093bd9e1471fbcc25c022"}, - {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ddc2f4dfd396c7bfa18e6ce371cba60e4cf9d2e5cdb71376aa2da264605b60b9"}, - {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5ddcba87675b6d509139d1b521e0c8250e967e63b5909a7e8f8944d0f90ff36f"}, - {file = "rpds_py-0.18.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7bd339195d84439cbe5771546fe8a4e8a7a045417d8f9de9a368c434e42a721e"}, - {file = "rpds_py-0.18.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:d7c36232a90d4755b720fbd76739d8891732b18cf240a9c645d75f00639a9024"}, - {file = "rpds_py-0.18.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6b0817e34942b2ca527b0e9298373e7cc75f429e8da2055607f4931fded23e20"}, - {file = "rpds_py-0.18.0-cp39-none-win32.whl", hash = "sha256:99f70b740dc04d09e6b2699b675874367885217a2e9f782bdf5395632ac663b7"}, - {file = "rpds_py-0.18.0-cp39-none-win_amd64.whl", hash = "sha256:6ef687afab047554a2d366e112dd187b62d261d49eb79b77e386f94644363294"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ad36cfb355e24f1bd37cac88c112cd7730873f20fb0bdaf8ba59eedf8216079f"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:36b3ee798c58ace201289024b52788161e1ea133e4ac93fba7d49da5fec0ef9e"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8a2f084546cc59ea99fda8e070be2fd140c3092dc11524a71aa8f0f3d5a55ca"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e4461d0f003a0aa9be2bdd1b798a041f177189c1a0f7619fe8c95ad08d9a45d7"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8db715ebe3bb7d86d77ac1826f7d67ec11a70dbd2376b7cc214199360517b641"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:793968759cd0d96cac1e367afd70c235867831983f876a53389ad869b043c948"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66e6a3af5a75363d2c9a48b07cb27c4ea542938b1a2e93b15a503cdfa8490795"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6ef0befbb5d79cf32d0266f5cff01545602344eda89480e1dd88aca964260b18"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:1d4acf42190d449d5e89654d5c1ed3a4f17925eec71f05e2a41414689cda02d1"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:a5f446dd5055667aabaee78487f2b5ab72e244f9bc0b2ffebfeec79051679984"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:9dbbeb27f4e70bfd9eec1be5477517365afe05a9b2c441a0b21929ee61048124"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:22806714311a69fd0af9b35b7be97c18a0fc2826e6827dbb3a8c94eac6cf7eeb"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:b34ae4636dfc4e76a438ab826a0d1eed2589ca7d9a1b2d5bb546978ac6485461"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c8370641f1a7f0e0669ddccca22f1da893cef7628396431eb445d46d893e5cd"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c8362467a0fdeccd47935f22c256bec5e6abe543bf0d66e3d3d57a8fb5731863"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:11a8c85ef4a07a7638180bf04fe189d12757c696eb41f310d2426895356dcf05"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b316144e85316da2723f9d8dc75bada12fa58489a527091fa1d5a612643d1a0e"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf1ea2e34868f6fbf070e1af291c8180480310173de0b0c43fc38a02929fc0e3"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e546e768d08ad55b20b11dbb78a745151acbd938f8f00d0cfbabe8b0199b9880"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:4901165d170a5fde6f589acb90a6b33629ad1ec976d4529e769c6f3d885e3e80"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:618a3d6cae6ef8ec88bb76dd80b83cfe415ad4f1d942ca2a903bf6b6ff97a2da"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:ed4eb745efbff0a8e9587d22a84be94a5eb7d2d99c02dacf7bd0911713ed14dd"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6c81e5f372cd0dc5dc4809553d34f832f60a46034a5f187756d9b90586c2c307"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:43fbac5f22e25bee1d482c97474f930a353542855f05c1161fd804c9dc74a09d"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d7faa6f14017c0b1e69f5e2c357b998731ea75a442ab3841c0dbbbfe902d2c4"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:08231ac30a842bd04daabc4d71fddd7e6d26189406d5a69535638e4dcb88fe76"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:044a3e61a7c2dafacae99d1e722cc2d4c05280790ec5a05031b3876809d89a5c"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3f26b5bd1079acdb0c7a5645e350fe54d16b17bfc5e71f371c449383d3342e17"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:482103aed1dfe2f3b71a58eff35ba105289b8d862551ea576bd15479aba01f66"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1374f4129f9bcca53a1bba0bb86bf78325a0374577cf7e9e4cd046b1e6f20e24"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:635dc434ff724b178cb192c70016cc0ad25a275228f749ee0daf0eddbc8183b1"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:bc362ee4e314870a70f4ae88772d72d877246537d9f8cb8f7eacf10884862432"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:4832d7d380477521a8c1644bbab6588dfedea5e30a7d967b5fb75977c45fd77f"}, - {file = "rpds_py-0.18.0.tar.gz", hash = "sha256:42821446ee7a76f5d9f71f9e33a4fb2ffd724bb3e7f93386150b61a43115788d"}, + {file = "rpds_py-0.18.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:d31dea506d718693b6b2cffc0648a8929bdc51c70a311b2770f09611caa10d53"}, + {file = "rpds_py-0.18.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:732672fbc449bab754e0b15356c077cc31566df874964d4801ab14f71951ea80"}, + {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a98a1f0552b5f227a3d6422dbd61bc6f30db170939bd87ed14f3c339aa6c7c9"}, + {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7f1944ce16401aad1e3f7d312247b3d5de7981f634dc9dfe90da72b87d37887d"}, + {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:38e14fb4e370885c4ecd734f093a2225ee52dc384b86fa55fe3f74638b2cfb09"}, + {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08d74b184f9ab6289b87b19fe6a6d1a97fbfea84b8a3e745e87a5de3029bf944"}, + {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d70129cef4a8d979caa37e7fe957202e7eee8ea02c5e16455bc9808a59c6b2f0"}, + {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ce0bb20e3a11bd04461324a6a798af34d503f8d6f1aa3d2aa8901ceaf039176d"}, + {file = "rpds_py-0.18.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:81c5196a790032e0fc2464c0b4ab95f8610f96f1f2fa3d4deacce6a79852da60"}, + {file = "rpds_py-0.18.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:f3027be483868c99b4985fda802a57a67fdf30c5d9a50338d9db646d590198da"}, + {file = "rpds_py-0.18.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d44607f98caa2961bab4fa3c4309724b185b464cdc3ba6f3d7340bac3ec97cc1"}, + {file = "rpds_py-0.18.1-cp310-none-win32.whl", hash = "sha256:c273e795e7a0f1fddd46e1e3cb8be15634c29ae8ff31c196debb620e1edb9333"}, + {file = "rpds_py-0.18.1-cp310-none-win_amd64.whl", hash = "sha256:8352f48d511de5f973e4f2f9412736d7dea76c69faa6d36bcf885b50c758ab9a"}, + {file = "rpds_py-0.18.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:6b5ff7e1d63a8281654b5e2896d7f08799378e594f09cf3674e832ecaf396ce8"}, + {file = "rpds_py-0.18.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8927638a4d4137a289e41d0fd631551e89fa346d6dbcfc31ad627557d03ceb6d"}, + {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:154bf5c93d79558b44e5b50cc354aa0459e518e83677791e6adb0b039b7aa6a7"}, + {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:07f2139741e5deb2c5154a7b9629bc5aa48c766b643c1a6750d16f865a82c5fc"}, + {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8c7672e9fba7425f79019db9945b16e308ed8bc89348c23d955c8c0540da0a07"}, + {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:489bdfe1abd0406eba6b3bb4fdc87c7fa40f1031de073d0cfb744634cc8fa261"}, + {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c20f05e8e3d4fc76875fc9cb8cf24b90a63f5a1b4c5b9273f0e8225e169b100"}, + {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:967342e045564cef76dfcf1edb700b1e20838d83b1aa02ab313e6a497cf923b8"}, + {file = "rpds_py-0.18.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2cc7c1a47f3a63282ab0f422d90ddac4aa3034e39fc66a559ab93041e6505da7"}, + {file = "rpds_py-0.18.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f7afbfee1157e0f9376c00bb232e80a60e59ed716e3211a80cb8506550671e6e"}, + {file = "rpds_py-0.18.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9e6934d70dc50f9f8ea47081ceafdec09245fd9f6032669c3b45705dea096b88"}, + {file = "rpds_py-0.18.1-cp311-none-win32.whl", hash = "sha256:c69882964516dc143083d3795cb508e806b09fc3800fd0d4cddc1df6c36e76bb"}, + {file = "rpds_py-0.18.1-cp311-none-win_amd64.whl", hash = "sha256:70a838f7754483bcdc830444952fd89645569e7452e3226de4a613a4c1793fb2"}, + {file = "rpds_py-0.18.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3dd3cd86e1db5aadd334e011eba4e29d37a104b403e8ca24dcd6703c68ca55b3"}, + {file = "rpds_py-0.18.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:05f3d615099bd9b13ecf2fc9cf2d839ad3f20239c678f461c753e93755d629ee"}, + {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35b2b771b13eee8729a5049c976197ff58a27a3829c018a04341bcf1ae409b2b"}, + {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ee17cd26b97d537af8f33635ef38be873073d516fd425e80559f4585a7b90c43"}, + {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b646bf655b135ccf4522ed43d6902af37d3f5dbcf0da66c769a2b3938b9d8184"}, + {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:19ba472b9606c36716062c023afa2484d1e4220548751bda14f725a7de17b4f6"}, + {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e30ac5e329098903262dc5bdd7e2086e0256aa762cc8b744f9e7bf2a427d3f8"}, + {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d58ad6317d188c43750cb76e9deacf6051d0f884d87dc6518e0280438648a9ac"}, + {file = "rpds_py-0.18.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e1735502458621921cee039c47318cb90b51d532c2766593be6207eec53e5c4c"}, + {file = "rpds_py-0.18.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:f5bab211605d91db0e2995a17b5c6ee5edec1270e46223e513eaa20da20076ac"}, + {file = "rpds_py-0.18.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2fc24a329a717f9e2448f8cd1f960f9dac4e45b6224d60734edeb67499bab03a"}, + {file = "rpds_py-0.18.1-cp312-none-win32.whl", hash = "sha256:1805d5901779662d599d0e2e4159d8a82c0b05faa86ef9222bf974572286b2b6"}, + {file = "rpds_py-0.18.1-cp312-none-win_amd64.whl", hash = "sha256:720edcb916df872d80f80a1cc5ea9058300b97721efda8651efcd938a9c70a72"}, + {file = "rpds_py-0.18.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:c827576e2fa017a081346dce87d532a5310241648eb3700af9a571a6e9fc7e74"}, + {file = "rpds_py-0.18.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:aa3679e751408d75a0b4d8d26d6647b6d9326f5e35c00a7ccd82b78ef64f65f8"}, + {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0abeee75434e2ee2d142d650d1e54ac1f8b01e6e6abdde8ffd6eeac6e9c38e20"}, + {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed402d6153c5d519a0faf1bb69898e97fb31613b49da27a84a13935ea9164dfc"}, + {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:338dee44b0cef8b70fd2ef54b4e09bb1b97fc6c3a58fea5db6cc083fd9fc2724"}, + {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7750569d9526199c5b97e5a9f8d96a13300950d910cf04a861d96f4273d5b104"}, + {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:607345bd5912aacc0c5a63d45a1f73fef29e697884f7e861094e443187c02be5"}, + {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:207c82978115baa1fd8d706d720b4a4d2b0913df1c78c85ba73fe6c5804505f0"}, + {file = "rpds_py-0.18.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:6d1e42d2735d437e7e80bab4d78eb2e459af48c0a46e686ea35f690b93db792d"}, + {file = "rpds_py-0.18.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:5463c47c08630007dc0fe99fb480ea4f34a89712410592380425a9b4e1611d8e"}, + {file = "rpds_py-0.18.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:06d218939e1bf2ca50e6b0ec700ffe755e5216a8230ab3e87c059ebb4ea06afc"}, + {file = "rpds_py-0.18.1-cp38-none-win32.whl", hash = "sha256:312fe69b4fe1ffbe76520a7676b1e5ac06ddf7826d764cc10265c3b53f96dbe9"}, + {file = "rpds_py-0.18.1-cp38-none-win_amd64.whl", hash = "sha256:9437ca26784120a279f3137ee080b0e717012c42921eb07861b412340f85bae2"}, + {file = "rpds_py-0.18.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:19e515b78c3fc1039dd7da0a33c28c3154458f947f4dc198d3c72db2b6b5dc93"}, + {file = "rpds_py-0.18.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a7b28c5b066bca9a4eb4e2f2663012debe680f097979d880657f00e1c30875a0"}, + {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:673fdbbf668dd958eff750e500495ef3f611e2ecc209464f661bc82e9838991e"}, + {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d960de62227635d2e61068f42a6cb6aae91a7fe00fca0e3aeed17667c8a34611"}, + {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:352a88dc7892f1da66b6027af06a2e7e5d53fe05924cc2cfc56495b586a10b72"}, + {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4e0ee01ad8260184db21468a6e1c37afa0529acc12c3a697ee498d3c2c4dcaf3"}, + {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4c39ad2f512b4041343ea3c7894339e4ca7839ac38ca83d68a832fc8b3748ab"}, + {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:aaa71ee43a703c321906813bb252f69524f02aa05bf4eec85f0c41d5d62d0f4c"}, + {file = "rpds_py-0.18.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:6cd8098517c64a85e790657e7b1e509b9fe07487fd358e19431cb120f7d96338"}, + {file = "rpds_py-0.18.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:4adec039b8e2928983f885c53b7cc4cda8965b62b6596501a0308d2703f8af1b"}, + {file = "rpds_py-0.18.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:32b7daaa3e9389db3695964ce8e566e3413b0c43e3394c05e4b243a4cd7bef26"}, + {file = "rpds_py-0.18.1-cp39-none-win32.whl", hash = "sha256:2625f03b105328729f9450c8badda34d5243231eef6535f80064d57035738360"}, + {file = "rpds_py-0.18.1-cp39-none-win_amd64.whl", hash = "sha256:bf18932d0003c8c4d51a39f244231986ab23ee057d235a12b2684ea26a353590"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:cbfbea39ba64f5e53ae2915de36f130588bba71245b418060ec3330ebf85678e"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:a3d456ff2a6a4d2adcdf3c1c960a36f4fd2fec6e3b4902a42a384d17cf4e7a65"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7700936ef9d006b7ef605dc53aa364da2de5a3aa65516a1f3ce73bf82ecfc7ae"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:51584acc5916212e1bf45edd17f3a6b05fe0cbb40482d25e619f824dccb679de"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:942695a206a58d2575033ff1e42b12b2aece98d6003c6bc739fbf33d1773b12f"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b906b5f58892813e5ba5c6056d6a5ad08f358ba49f046d910ad992196ea61397"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6f8e3fecca256fefc91bb6765a693d96692459d7d4c644660a9fff32e517843"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7732770412bab81c5a9f6d20aeb60ae943a9b36dcd990d876a773526468e7163"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:bd1105b50ede37461c1d51b9698c4f4be6e13e69a908ab7751e3807985fc0346"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:618916f5535784960f3ecf8111581f4ad31d347c3de66d02e728de460a46303c"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:17c6d2155e2423f7e79e3bb18151c686d40db42d8645e7977442170c360194d4"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6c4c4c3f878df21faf5fac86eda32671c27889e13570645a9eea0a1abdd50922"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:fab6ce90574645a0d6c58890e9bcaac8d94dff54fb51c69e5522a7358b80ab64"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:531796fb842b53f2695e94dc338929e9f9dbf473b64710c28af5a160b2a8927d"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:740884bc62a5e2bbb31e584f5d23b32320fd75d79f916f15a788d527a5e83644"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:998125738de0158f088aef3cb264a34251908dd2e5d9966774fdab7402edfab7"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e2be6e9dd4111d5b31ba3b74d17da54a8319d8168890fbaea4b9e5c3de630ae5"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d0cee71bc618cd93716f3c1bf56653740d2d13ddbd47673efa8bf41435a60daa"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2c3caec4ec5cd1d18e5dd6ae5194d24ed12785212a90b37f5f7f06b8bedd7139"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:27bba383e8c5231cd559affe169ca0b96ec78d39909ffd817f28b166d7ddd4d8"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:a888e8bdb45916234b99da2d859566f1e8a1d2275a801bb8e4a9644e3c7e7909"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:6031b25fb1b06327b43d841f33842b383beba399884f8228a6bb3df3088485ff"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:48c2faaa8adfacefcbfdb5f2e2e7bdad081e5ace8d182e5f4ade971f128e6bb3"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:d85164315bd68c0806768dc6bb0429c6f95c354f87485ee3593c4f6b14def2bd"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6afd80f6c79893cfc0574956f78a0add8c76e3696f2d6a15bca2c66c415cf2d4"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fa242ac1ff583e4ec7771141606aafc92b361cd90a05c30d93e343a0c2d82a89"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d21be4770ff4e08698e1e8e0bce06edb6ea0626e7c8f560bc08222880aca6a6f"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c45a639e93a0c5d4b788b2613bd637468edd62f8f95ebc6fcc303d58ab3f0a8"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:910e71711d1055b2768181efa0a17537b2622afeb0424116619817007f8a2b10"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b9bb1f182a97880f6078283b3505a707057c42bf55d8fca604f70dedfdc0772a"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:1d54f74f40b1f7aaa595a02ff42ef38ca654b1469bef7d52867da474243cc633"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:8d2e182c9ee01135e11e9676e9a62dfad791a7a467738f06726872374a83db49"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:636a15acc588f70fda1661234761f9ed9ad79ebed3f2125d44be0862708b666e"}, + {file = "rpds_py-0.18.1.tar.gz", hash = "sha256:dc48b479d540770c811fbd1eb9ba2bb66951863e448efec2e2c102625328e92f"}, ] [[package]] @@ -3943,78 +4391,81 @@ files = [ [[package]] name = "scikit-learn" -version = "1.4.2" +version = "1.5.0" description = "A set of python modules for machine learning and data mining" optional = false python-versions = ">=3.9" files = [ - {file = "scikit-learn-1.4.2.tar.gz", hash = "sha256:daa1c471d95bad080c6e44b4946c9390a4842adc3082572c20e4f8884e39e959"}, - {file = "scikit_learn-1.4.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8539a41b3d6d1af82eb629f9c57f37428ff1481c1e34dddb3b9d7af8ede67ac5"}, - {file = "scikit_learn-1.4.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:68b8404841f944a4a1459b07198fa2edd41a82f189b44f3e1d55c104dbc2e40c"}, - {file = "scikit_learn-1.4.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81bf5d8bbe87643103334032dd82f7419bc8c8d02a763643a6b9a5c7288c5054"}, - {file = "scikit_learn-1.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36f0ea5d0f693cb247a073d21a4123bdf4172e470e6d163c12b74cbb1536cf38"}, - {file = "scikit_learn-1.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:87440e2e188c87db80ea4023440923dccbd56fbc2d557b18ced00fef79da0727"}, - {file = "scikit_learn-1.4.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:45dee87ac5309bb82e3ea633955030df9bbcb8d2cdb30383c6cd483691c546cc"}, - {file = "scikit_learn-1.4.2-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:1d0b25d9c651fd050555aadd57431b53d4cf664e749069da77f3d52c5ad14b3b"}, - {file = "scikit_learn-1.4.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b0203c368058ab92efc6168a1507d388d41469c873e96ec220ca8e74079bf62e"}, - {file = "scikit_learn-1.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44c62f2b124848a28fd695db5bc4da019287abf390bfce602ddc8aa1ec186aae"}, - {file = "scikit_learn-1.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:5cd7b524115499b18b63f0c96f4224eb885564937a0b3477531b2b63ce331904"}, - {file = "scikit_learn-1.4.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:90378e1747949f90c8f385898fff35d73193dfcaec3dd75d6b542f90c4e89755"}, - {file = "scikit_learn-1.4.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:ff4effe5a1d4e8fed260a83a163f7dbf4f6087b54528d8880bab1d1377bd78be"}, - {file = "scikit_learn-1.4.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:671e2f0c3f2c15409dae4f282a3a619601fa824d2c820e5b608d9d775f91780c"}, - {file = "scikit_learn-1.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d36d0bc983336bbc1be22f9b686b50c964f593c8a9a913a792442af9bf4f5e68"}, - {file = "scikit_learn-1.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:d762070980c17ba3e9a4a1e043ba0518ce4c55152032f1af0ca6f39b376b5928"}, - {file = "scikit_learn-1.4.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d9993d5e78a8148b1d0fdf5b15ed92452af5581734129998c26f481c46586d68"}, - {file = "scikit_learn-1.4.2-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:426d258fddac674fdf33f3cb2d54d26f49406e2599dbf9a32b4d1696091d4256"}, - {file = "scikit_learn-1.4.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5460a1a5b043ae5ae4596b3126a4ec33ccba1b51e7ca2c5d36dac2169f62ab1d"}, - {file = "scikit_learn-1.4.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49d64ef6cb8c093d883e5a36c4766548d974898d378e395ba41a806d0e824db8"}, - {file = "scikit_learn-1.4.2-cp39-cp39-win_amd64.whl", hash = "sha256:c97a50b05c194be9146d61fe87dbf8eac62b203d9e87a3ccc6ae9aed2dfaf361"}, + {file = "scikit_learn-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:12e40ac48555e6b551f0a0a5743cc94cc5a765c9513fe708e01f0aa001da2801"}, + {file = "scikit_learn-1.5.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:f405c4dae288f5f6553b10c4ac9ea7754d5180ec11e296464adb5d6ac68b6ef5"}, + {file = "scikit_learn-1.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df8ccabbf583315f13160a4bb06037bde99ea7d8211a69787a6b7c5d4ebb6fc3"}, + {file = "scikit_learn-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c75ea812cd83b1385bbfa94ae971f0d80adb338a9523f6bbcb5e0b0381151d4"}, + {file = "scikit_learn-1.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:a90c5da84829a0b9b4bf00daf62754b2be741e66b5946911f5bdfaa869fcedd6"}, + {file = "scikit_learn-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2a65af2d8a6cce4e163a7951a4cfbfa7fceb2d5c013a4b593686c7f16445cf9d"}, + {file = "scikit_learn-1.5.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:4c0c56c3005f2ec1db3787aeaabefa96256580678cec783986836fc64f8ff622"}, + {file = "scikit_learn-1.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f77547165c00625551e5c250cefa3f03f2fc92c5e18668abd90bfc4be2e0bff"}, + {file = "scikit_learn-1.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:118a8d229a41158c9f90093e46b3737120a165181a1b58c03461447aa4657415"}, + {file = "scikit_learn-1.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:a03b09f9f7f09ffe8c5efffe2e9de1196c696d811be6798ad5eddf323c6f4d40"}, + {file = "scikit_learn-1.5.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:460806030c666addee1f074788b3978329a5bfdc9b7d63e7aad3f6d45c67a210"}, + {file = "scikit_learn-1.5.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:1b94d6440603752b27842eda97f6395f570941857456c606eb1d638efdb38184"}, + {file = "scikit_learn-1.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d82c2e573f0f2f2f0be897e7a31fcf4e73869247738ab8c3ce7245549af58ab8"}, + {file = "scikit_learn-1.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3a10e1d9e834e84d05e468ec501a356226338778769317ee0b84043c0d8fb06"}, + {file = "scikit_learn-1.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:855fc5fa8ed9e4f08291203af3d3e5fbdc4737bd617a371559aaa2088166046e"}, + {file = "scikit_learn-1.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:40fb7d4a9a2db07e6e0cae4dc7bdbb8fada17043bac24104d8165e10e4cff1a2"}, + {file = "scikit_learn-1.5.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:47132440050b1c5beb95f8ba0b2402bbd9057ce96ec0ba86f2f445dd4f34df67"}, + {file = "scikit_learn-1.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:174beb56e3e881c90424e21f576fa69c4ffcf5174632a79ab4461c4c960315ac"}, + {file = "scikit_learn-1.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:261fe334ca48f09ed64b8fae13f9b46cc43ac5f580c4a605cbb0a517456c8f71"}, + {file = "scikit_learn-1.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:057b991ac64b3e75c9c04b5f9395eaf19a6179244c089afdebaad98264bff37c"}, + {file = "scikit_learn-1.5.0.tar.gz", hash = "sha256:789e3db01c750ed6d496fa2db7d50637857b451e57bcae863bff707c1247bef7"}, ] [package.dependencies] joblib = ">=1.2.0" numpy = ">=1.19.5" scipy = ">=1.6.0" -threadpoolctl = ">=2.0.0" +threadpoolctl = ">=3.1.0" [package.extras] -benchmark = ["matplotlib (>=3.3.4)", "memory-profiler (>=0.57.0)", "pandas (>=1.1.5)"] -docs = ["Pillow (>=7.1.2)", "matplotlib (>=3.3.4)", "memory-profiler (>=0.57.0)", "numpydoc (>=1.2.0)", "pandas (>=1.1.5)", "plotly (>=5.14.0)", "pooch (>=1.6.0)", "scikit-image (>=0.17.2)", "seaborn (>=0.9.0)", "sphinx (>=6.0.0)", "sphinx-copybutton (>=0.5.2)", "sphinx-gallery (>=0.15.0)", "sphinx-prompt (>=1.3.0)", "sphinxext-opengraph (>=0.4.2)"] +benchmark = ["matplotlib (>=3.3.4)", "memory_profiler (>=0.57.0)", "pandas (>=1.1.5)"] +build = ["cython (>=3.0.10)", "meson-python (>=0.15.0)", "numpy (>=1.19.5)", "scipy (>=1.6.0)"] +docs = ["Pillow (>=7.1.2)", "matplotlib (>=3.3.4)", "memory_profiler (>=0.57.0)", "numpydoc (>=1.2.0)", "pandas (>=1.1.5)", "plotly (>=5.14.0)", "polars (>=0.20.23)", "pooch (>=1.6.0)", "scikit-image (>=0.17.2)", "seaborn (>=0.9.0)", "sphinx (>=6.0.0)", "sphinx-copybutton (>=0.5.2)", "sphinx-gallery (>=0.15.0)", "sphinx-prompt (>=1.3.0)", "sphinxext-opengraph (>=0.4.2)"] examples = ["matplotlib (>=3.3.4)", "pandas (>=1.1.5)", "plotly (>=5.14.0)", "pooch (>=1.6.0)", "scikit-image (>=0.17.2)", "seaborn (>=0.9.0)"] -tests = ["black (>=23.3.0)", "matplotlib (>=3.3.4)", "mypy (>=1.3)", "numpydoc (>=1.2.0)", "pandas (>=1.1.5)", "polars (>=0.19.12)", "pooch (>=1.6.0)", "pyamg (>=4.0.0)", "pyarrow (>=12.0.0)", "pytest (>=7.1.2)", "pytest-cov (>=2.9.0)", "ruff (>=0.0.272)", "scikit-image (>=0.17.2)"] +install = ["joblib (>=1.2.0)", "numpy (>=1.19.5)", "scipy (>=1.6.0)", "threadpoolctl (>=3.1.0)"] +maintenance = ["conda-lock (==2.5.6)"] +tests = ["black (>=24.3.0)", "matplotlib (>=3.3.4)", "mypy (>=1.9)", "numpydoc (>=1.2.0)", "pandas (>=1.1.5)", "polars (>=0.20.23)", "pooch (>=1.6.0)", "pyamg (>=4.0.0)", "pyarrow (>=12.0.0)", "pytest (>=7.1.2)", "pytest-cov (>=2.9.0)", "ruff (>=0.2.1)", "scikit-image (>=0.17.2)"] [[package]] name = "scipy" -version = "1.13.0" +version = "1.13.1" description = "Fundamental algorithms for scientific computing in Python" optional = false python-versions = ">=3.9" files = [ - {file = "scipy-1.13.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ba419578ab343a4e0a77c0ef82f088238a93eef141b2b8017e46149776dfad4d"}, - {file = "scipy-1.13.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:22789b56a999265431c417d462e5b7f2b487e831ca7bef5edeb56efe4c93f86e"}, - {file = "scipy-1.13.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:05f1432ba070e90d42d7fd836462c50bf98bd08bed0aa616c359eed8a04e3922"}, - {file = "scipy-1.13.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8434f6f3fa49f631fae84afee424e2483289dfc30a47755b4b4e6b07b2633a4"}, - {file = "scipy-1.13.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:dcbb9ea49b0167de4167c40eeee6e167caeef11effb0670b554d10b1e693a8b9"}, - {file = "scipy-1.13.0-cp310-cp310-win_amd64.whl", hash = "sha256:1d2f7bb14c178f8b13ebae93f67e42b0a6b0fc50eba1cd8021c9b6e08e8fb1cd"}, - {file = "scipy-1.13.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0fbcf8abaf5aa2dc8d6400566c1a727aed338b5fe880cde64907596a89d576fa"}, - {file = "scipy-1.13.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:5e4a756355522eb60fcd61f8372ac2549073c8788f6114449b37e9e8104f15a5"}, - {file = "scipy-1.13.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5acd8e1dbd8dbe38d0004b1497019b2dbbc3d70691e65d69615f8a7292865d7"}, - {file = "scipy-1.13.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ff7dad5d24a8045d836671e082a490848e8639cabb3dbdacb29f943a678683d"}, - {file = "scipy-1.13.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4dca18c3ffee287ddd3bc8f1dabaf45f5305c5afc9f8ab9cbfab855e70b2df5c"}, - {file = "scipy-1.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:a2f471de4d01200718b2b8927f7d76b5d9bde18047ea0fa8bd15c5ba3f26a1d6"}, - {file = "scipy-1.13.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d0de696f589681c2802f9090fff730c218f7c51ff49bf252b6a97ec4a5d19e8b"}, - {file = "scipy-1.13.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:b2a3ff461ec4756b7e8e42e1c681077349a038f0686132d623fa404c0bee2551"}, - {file = "scipy-1.13.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bf9fe63e7a4bf01d3645b13ff2aa6dea023d38993f42aaac81a18b1bda7a82a"}, - {file = "scipy-1.13.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e7626dfd91cdea5714f343ce1176b6c4745155d234f1033584154f60ef1ff42"}, - {file = "scipy-1.13.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:109d391d720fcebf2fbe008621952b08e52907cf4c8c7efc7376822151820820"}, - {file = "scipy-1.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:8930ae3ea371d6b91c203b1032b9600d69c568e537b7988a3073dfe4d4774f21"}, - {file = "scipy-1.13.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5407708195cb38d70fd2d6bb04b1b9dd5c92297d86e9f9daae1576bd9e06f602"}, - {file = "scipy-1.13.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:ac38c4c92951ac0f729c4c48c9e13eb3675d9986cc0c83943784d7390d540c78"}, - {file = "scipy-1.13.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09c74543c4fbeb67af6ce457f6a6a28e5d3739a87f62412e4a16e46f164f0ae5"}, - {file = "scipy-1.13.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28e286bf9ac422d6beb559bc61312c348ca9b0f0dae0d7c5afde7f722d6ea13d"}, - {file = "scipy-1.13.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:33fde20efc380bd23a78a4d26d59fc8704e9b5fd9b08841693eb46716ba13d86"}, - {file = "scipy-1.13.0-cp39-cp39-win_amd64.whl", hash = "sha256:45c08bec71d3546d606989ba6e7daa6f0992918171e2a6f7fbedfa7361c2de1e"}, - {file = "scipy-1.13.0.tar.gz", hash = "sha256:58569af537ea29d3f78e5abd18398459f195546bb3be23d16677fb26616cc11e"}, + {file = "scipy-1.13.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:20335853b85e9a49ff7572ab453794298bcf0354d8068c5f6775a0eabf350aca"}, + {file = "scipy-1.13.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:d605e9c23906d1994f55ace80e0125c587f96c020037ea6aa98d01b4bd2e222f"}, + {file = "scipy-1.13.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cfa31f1def5c819b19ecc3a8b52d28ffdcc7ed52bb20c9a7589669dd3c250989"}, + {file = "scipy-1.13.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26264b282b9da0952a024ae34710c2aff7d27480ee91a2e82b7b7073c24722f"}, + {file = "scipy-1.13.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:eccfa1906eacc02de42d70ef4aecea45415f5be17e72b61bafcfd329bdc52e94"}, + {file = "scipy-1.13.1-cp310-cp310-win_amd64.whl", hash = "sha256:2831f0dc9c5ea9edd6e51e6e769b655f08ec6db6e2e10f86ef39bd32eb11da54"}, + {file = "scipy-1.13.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:27e52b09c0d3a1d5b63e1105f24177e544a222b43611aaf5bc44d4a0979e32f9"}, + {file = "scipy-1.13.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:54f430b00f0133e2224c3ba42b805bfd0086fe488835effa33fa291561932326"}, + {file = "scipy-1.13.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e89369d27f9e7b0884ae559a3a956e77c02114cc60a6058b4e5011572eea9299"}, + {file = "scipy-1.13.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a78b4b3345f1b6f68a763c6e25c0c9a23a9fd0f39f5f3d200efe8feda560a5fa"}, + {file = "scipy-1.13.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:45484bee6d65633752c490404513b9ef02475b4284c4cfab0ef946def50b3f59"}, + {file = "scipy-1.13.1-cp311-cp311-win_amd64.whl", hash = "sha256:5713f62f781eebd8d597eb3f88b8bf9274e79eeabf63afb4a737abc6c84ad37b"}, + {file = "scipy-1.13.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5d72782f39716b2b3509cd7c33cdc08c96f2f4d2b06d51e52fb45a19ca0c86a1"}, + {file = "scipy-1.13.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:017367484ce5498445aade74b1d5ab377acdc65e27095155e448c88497755a5d"}, + {file = "scipy-1.13.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:949ae67db5fa78a86e8fa644b9a6b07252f449dcf74247108c50e1d20d2b4627"}, + {file = "scipy-1.13.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de3ade0e53bc1f21358aa74ff4830235d716211d7d077e340c7349bc3542e884"}, + {file = "scipy-1.13.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2ac65fb503dad64218c228e2dc2d0a0193f7904747db43014645ae139c8fad16"}, + {file = "scipy-1.13.1-cp312-cp312-win_amd64.whl", hash = "sha256:cdd7dacfb95fea358916410ec61bbc20440f7860333aee6d882bb8046264e949"}, + {file = "scipy-1.13.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:436bbb42a94a8aeef855d755ce5a465479c721e9d684de76bf61a62e7c2b81d5"}, + {file = "scipy-1.13.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:8335549ebbca860c52bf3d02f80784e91a004b71b059e3eea9678ba994796a24"}, + {file = "scipy-1.13.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d533654b7d221a6a97304ab63c41c96473ff04459e404b83275b60aa8f4b7004"}, + {file = "scipy-1.13.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:637e98dcf185ba7f8e663e122ebf908c4702420477ae52a04f9908707456ba4d"}, + {file = "scipy-1.13.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a014c2b3697bde71724244f63de2476925596c24285c7a637364761f8710891c"}, + {file = "scipy-1.13.1-cp39-cp39-win_amd64.whl", hash = "sha256:392e4ec766654852c25ebad4f64e4e584cf19820b980bc04960bca0b0cd6eaa2"}, + {file = "scipy-1.13.1.tar.gz", hash = "sha256:095a87a0312b08dfd6a6155cbbd310a8c51800fc931b8c0b84003014b874ed3c"}, ] [package.dependencies] @@ -4027,19 +4478,18 @@ test = ["array-api-strict", "asv", "gmpy2", "hypothesis (>=6.30)", "mpmath", "po [[package]] name = "setuptools" -version = "69.5.1" +version = "70.0.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-69.5.1-py3-none-any.whl", hash = "sha256:c636ac361bc47580504644275c9ad802c50415c7522212252c033bd15f301f32"}, - {file = "setuptools-69.5.1.tar.gz", hash = "sha256:6c1fccdac05a97e598fb0ae3bbed5904ccb317337a51139dcd51453611bbb987"}, + {file = "setuptools-70.0.0-py3-none-any.whl", hash = "sha256:54faa7f2e8d2d11bcd2c07bed282eef1046b5c080d1c32add737d7b5817b1ad4"}, + {file = "setuptools-70.0.0.tar.gz", hash = "sha256:f211a66637b8fa059bb28183da127d4e86396c991a942b028c6650d4319c3fd0"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6,!=8.1.1)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.2)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.1)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] [[package]] name = "sh" @@ -4239,60 +4689,60 @@ files = [ [[package]] name = "sqlalchemy" -version = "2.0.29" +version = "2.0.30" description = "Database Abstraction Library" optional = true python-versions = ">=3.7" files = [ - {file = "SQLAlchemy-2.0.29-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4c142852ae192e9fe5aad5c350ea6befe9db14370b34047e1f0f7cf99e63c63b"}, - {file = "SQLAlchemy-2.0.29-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:99a1e69d4e26f71e750e9ad6fdc8614fbddb67cfe2173a3628a2566034e223c7"}, - {file = "SQLAlchemy-2.0.29-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ef3fbccb4058355053c51b82fd3501a6e13dd808c8d8cd2561e610c5456013c"}, - {file = "SQLAlchemy-2.0.29-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d6753305936eddc8ed190e006b7bb33a8f50b9854823485eed3a886857ab8d1"}, - {file = "SQLAlchemy-2.0.29-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0f3ca96af060a5250a8ad5a63699180bc780c2edf8abf96c58af175921df847a"}, - {file = "SQLAlchemy-2.0.29-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c4520047006b1d3f0d89e0532978c0688219857eb2fee7c48052560ae76aca1e"}, - {file = "SQLAlchemy-2.0.29-cp310-cp310-win32.whl", hash = "sha256:b2a0e3cf0caac2085ff172c3faacd1e00c376e6884b5bc4dd5b6b84623e29e4f"}, - {file = "SQLAlchemy-2.0.29-cp310-cp310-win_amd64.whl", hash = "sha256:01d10638a37460616708062a40c7b55f73e4d35eaa146781c683e0fa7f6c43fb"}, - {file = "SQLAlchemy-2.0.29-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:308ef9cb41d099099fffc9d35781638986870b29f744382904bf9c7dadd08513"}, - {file = "SQLAlchemy-2.0.29-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:296195df68326a48385e7a96e877bc19aa210e485fa381c5246bc0234c36c78e"}, - {file = "SQLAlchemy-2.0.29-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a13b917b4ffe5a0a31b83d051d60477819ddf18276852ea68037a144a506efb9"}, - {file = "SQLAlchemy-2.0.29-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f6d971255d9ddbd3189e2e79d743ff4845c07f0633adfd1de3f63d930dbe673"}, - {file = "SQLAlchemy-2.0.29-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:61405ea2d563407d316c63a7b5271ae5d274a2a9fbcd01b0aa5503635699fa1e"}, - {file = "SQLAlchemy-2.0.29-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:de7202ffe4d4a8c1e3cde1c03e01c1a3772c92858837e8f3879b497158e4cb44"}, - {file = "SQLAlchemy-2.0.29-cp311-cp311-win32.whl", hash = "sha256:b5d7ed79df55a731749ce65ec20d666d82b185fa4898430b17cb90c892741520"}, - {file = "SQLAlchemy-2.0.29-cp311-cp311-win_amd64.whl", hash = "sha256:205f5a2b39d7c380cbc3b5dcc8f2762fb5bcb716838e2d26ccbc54330775b003"}, - {file = "SQLAlchemy-2.0.29-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d96710d834a6fb31e21381c6d7b76ec729bd08c75a25a5184b1089141356171f"}, - {file = "SQLAlchemy-2.0.29-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:52de4736404e53c5c6a91ef2698c01e52333988ebdc218f14c833237a0804f1b"}, - {file = "SQLAlchemy-2.0.29-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c7b02525ede2a164c5fa5014915ba3591730f2cc831f5be9ff3b7fd3e30958e"}, - {file = "SQLAlchemy-2.0.29-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0dfefdb3e54cd15f5d56fd5ae32f1da2d95d78319c1f6dfb9bcd0eb15d603d5d"}, - {file = "SQLAlchemy-2.0.29-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a88913000da9205b13f6f195f0813b6ffd8a0c0c2bd58d499e00a30eb508870c"}, - {file = "SQLAlchemy-2.0.29-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fecd5089c4be1bcc37c35e9aa678938d2888845a134dd016de457b942cf5a758"}, - {file = "SQLAlchemy-2.0.29-cp312-cp312-win32.whl", hash = "sha256:8197d6f7a3d2b468861ebb4c9f998b9df9e358d6e1cf9c2a01061cb9b6cf4e41"}, - {file = "SQLAlchemy-2.0.29-cp312-cp312-win_amd64.whl", hash = "sha256:9b19836ccca0d321e237560e475fd99c3d8655d03da80c845c4da20dda31b6e1"}, - {file = "SQLAlchemy-2.0.29-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:87a1d53a5382cdbbf4b7619f107cc862c1b0a4feb29000922db72e5a66a5ffc0"}, - {file = "SQLAlchemy-2.0.29-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2a0732dffe32333211801b28339d2a0babc1971bc90a983e3035e7b0d6f06b93"}, - {file = "SQLAlchemy-2.0.29-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90453597a753322d6aa770c5935887ab1fc49cc4c4fdd436901308383d698b4b"}, - {file = "SQLAlchemy-2.0.29-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ea311d4ee9a8fa67f139c088ae9f905fcf0277d6cd75c310a21a88bf85e130f5"}, - {file = "SQLAlchemy-2.0.29-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:5f20cb0a63a3e0ec4e169aa8890e32b949c8145983afa13a708bc4b0a1f30e03"}, - {file = "SQLAlchemy-2.0.29-cp37-cp37m-win32.whl", hash = "sha256:e5bbe55e8552019c6463709b39634a5fc55e080d0827e2a3a11e18eb73f5cdbd"}, - {file = "SQLAlchemy-2.0.29-cp37-cp37m-win_amd64.whl", hash = "sha256:c2f9c762a2735600654c654bf48dad388b888f8ce387b095806480e6e4ff6907"}, - {file = "SQLAlchemy-2.0.29-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7e614d7a25a43a9f54fcce4675c12761b248547f3d41b195e8010ca7297c369c"}, - {file = "SQLAlchemy-2.0.29-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:471fcb39c6adf37f820350c28aac4a7df9d3940c6548b624a642852e727ea586"}, - {file = "SQLAlchemy-2.0.29-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:988569c8732f54ad3234cf9c561364221a9e943b78dc7a4aaf35ccc2265f1930"}, - {file = "SQLAlchemy-2.0.29-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dddaae9b81c88083e6437de95c41e86823d150f4ee94bf24e158a4526cbead01"}, - {file = "SQLAlchemy-2.0.29-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:334184d1ab8f4c87f9652b048af3f7abea1c809dfe526fb0435348a6fef3d380"}, - {file = "SQLAlchemy-2.0.29-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:38b624e5cf02a69b113c8047cf7f66b5dfe4a2ca07ff8b8716da4f1b3ae81567"}, - {file = "SQLAlchemy-2.0.29-cp38-cp38-win32.whl", hash = "sha256:bab41acf151cd68bc2b466deae5deeb9e8ae9c50ad113444151ad965d5bf685b"}, - {file = "SQLAlchemy-2.0.29-cp38-cp38-win_amd64.whl", hash = "sha256:52c8011088305476691b8750c60e03b87910a123cfd9ad48576d6414b6ec2a1d"}, - {file = "SQLAlchemy-2.0.29-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3071ad498896907a5ef756206b9dc750f8e57352113c19272bdfdc429c7bd7de"}, - {file = "SQLAlchemy-2.0.29-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:dba622396a3170974f81bad49aacebd243455ec3cc70615aeaef9e9613b5bca5"}, - {file = "SQLAlchemy-2.0.29-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b184e3de58009cc0bf32e20f137f1ec75a32470f5fede06c58f6c355ed42a72"}, - {file = "SQLAlchemy-2.0.29-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c37f1050feb91f3d6c32f864d8e114ff5545a4a7afe56778d76a9aec62638ba"}, - {file = "SQLAlchemy-2.0.29-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bda7ce59b06d0f09afe22c56714c65c957b1068dee3d5e74d743edec7daba552"}, - {file = "SQLAlchemy-2.0.29-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:25664e18bef6dc45015b08f99c63952a53a0a61f61f2e48a9e70cec27e55f699"}, - {file = "SQLAlchemy-2.0.29-cp39-cp39-win32.whl", hash = "sha256:77d29cb6c34b14af8a484e831ab530c0f7188f8efed1c6a833a2c674bf3c26ec"}, - {file = "SQLAlchemy-2.0.29-cp39-cp39-win_amd64.whl", hash = "sha256:04c487305ab035a9548f573763915189fc0fe0824d9ba28433196f8436f1449c"}, - {file = "SQLAlchemy-2.0.29-py3-none-any.whl", hash = "sha256:dc4ee2d4ee43251905f88637d5281a8d52e916a021384ec10758826f5cbae305"}, - {file = "SQLAlchemy-2.0.29.tar.gz", hash = "sha256:bd9566b8e58cabd700bc367b60e90d9349cd16f0984973f98a9a09f9c64e86f0"}, + {file = "SQLAlchemy-2.0.30-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3b48154678e76445c7ded1896715ce05319f74b1e73cf82d4f8b59b46e9c0ddc"}, + {file = "SQLAlchemy-2.0.30-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2753743c2afd061bb95a61a51bbb6a1a11ac1c44292fad898f10c9839a7f75b2"}, + {file = "SQLAlchemy-2.0.30-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a7bfc726d167f425d4c16269a9a10fe8630ff6d14b683d588044dcef2d0f6be7"}, + {file = "SQLAlchemy-2.0.30-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c4f61ada6979223013d9ab83a3ed003ded6959eae37d0d685db2c147e9143797"}, + {file = "SQLAlchemy-2.0.30-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3a365eda439b7a00732638f11072907c1bc8e351c7665e7e5da91b169af794af"}, + {file = "SQLAlchemy-2.0.30-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bba002a9447b291548e8d66fd8c96a6a7ed4f2def0bb155f4f0a1309fd2735d5"}, + {file = "SQLAlchemy-2.0.30-cp310-cp310-win32.whl", hash = "sha256:0138c5c16be3600923fa2169532205d18891b28afa817cb49b50e08f62198bb8"}, + {file = "SQLAlchemy-2.0.30-cp310-cp310-win_amd64.whl", hash = "sha256:99650e9f4cf3ad0d409fed3eec4f071fadd032e9a5edc7270cd646a26446feeb"}, + {file = "SQLAlchemy-2.0.30-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:955991a09f0992c68a499791a753523f50f71a6885531568404fa0f231832aa0"}, + {file = "SQLAlchemy-2.0.30-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f69e4c756ee2686767eb80f94c0125c8b0a0b87ede03eacc5c8ae3b54b99dc46"}, + {file = "SQLAlchemy-2.0.30-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69c9db1ce00e59e8dd09d7bae852a9add716efdc070a3e2068377e6ff0d6fdaa"}, + {file = "SQLAlchemy-2.0.30-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a1429a4b0f709f19ff3b0cf13675b2b9bfa8a7e79990003207a011c0db880a13"}, + {file = "SQLAlchemy-2.0.30-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:efedba7e13aa9a6c8407c48facfdfa108a5a4128e35f4c68f20c3407e4376aa9"}, + {file = "SQLAlchemy-2.0.30-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:16863e2b132b761891d6c49f0a0f70030e0bcac4fd208117f6b7e053e68668d0"}, + {file = "SQLAlchemy-2.0.30-cp311-cp311-win32.whl", hash = "sha256:2ecabd9ccaa6e914e3dbb2aa46b76dede7eadc8cbf1b8083c94d936bcd5ffb49"}, + {file = "SQLAlchemy-2.0.30-cp311-cp311-win_amd64.whl", hash = "sha256:0b3f4c438e37d22b83e640f825ef0f37b95db9aa2d68203f2c9549375d0b2260"}, + {file = "SQLAlchemy-2.0.30-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5a79d65395ac5e6b0c2890935bad892eabb911c4aa8e8015067ddb37eea3d56c"}, + {file = "SQLAlchemy-2.0.30-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9a5baf9267b752390252889f0c802ea13b52dfee5e369527da229189b8bd592e"}, + {file = "SQLAlchemy-2.0.30-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cb5a646930c5123f8461f6468901573f334c2c63c795b9af350063a736d0134"}, + {file = "SQLAlchemy-2.0.30-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:296230899df0b77dec4eb799bcea6fbe39a43707ce7bb166519c97b583cfcab3"}, + {file = "SQLAlchemy-2.0.30-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c62d401223f468eb4da32627bffc0c78ed516b03bb8a34a58be54d618b74d472"}, + {file = "SQLAlchemy-2.0.30-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3b69e934f0f2b677ec111b4d83f92dc1a3210a779f69bf905273192cf4ed433e"}, + {file = "SQLAlchemy-2.0.30-cp312-cp312-win32.whl", hash = "sha256:77d2edb1f54aff37e3318f611637171e8ec71472f1fdc7348b41dcb226f93d90"}, + {file = "SQLAlchemy-2.0.30-cp312-cp312-win_amd64.whl", hash = "sha256:b6c7ec2b1f4969fc19b65b7059ed00497e25f54069407a8701091beb69e591a5"}, + {file = "SQLAlchemy-2.0.30-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5a8e3b0a7e09e94be7510d1661339d6b52daf202ed2f5b1f9f48ea34ee6f2d57"}, + {file = "SQLAlchemy-2.0.30-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b60203c63e8f984df92035610c5fb76d941254cf5d19751faab7d33b21e5ddc0"}, + {file = "SQLAlchemy-2.0.30-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f1dc3eabd8c0232ee8387fbe03e0a62220a6f089e278b1f0aaf5e2d6210741ad"}, + {file = "SQLAlchemy-2.0.30-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:40ad017c672c00b9b663fcfcd5f0864a0a97828e2ee7ab0c140dc84058d194cf"}, + {file = "SQLAlchemy-2.0.30-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e42203d8d20dc704604862977b1470a122e4892791fe3ed165f041e4bf447a1b"}, + {file = "SQLAlchemy-2.0.30-cp37-cp37m-win32.whl", hash = "sha256:2a4f4da89c74435f2bc61878cd08f3646b699e7d2eba97144030d1be44e27584"}, + {file = "SQLAlchemy-2.0.30-cp37-cp37m-win_amd64.whl", hash = "sha256:b6bf767d14b77f6a18b6982cbbf29d71bede087edae495d11ab358280f304d8e"}, + {file = "SQLAlchemy-2.0.30-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bc0c53579650a891f9b83fa3cecd4e00218e071d0ba00c4890f5be0c34887ed3"}, + {file = "SQLAlchemy-2.0.30-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:311710f9a2ee235f1403537b10c7687214bb1f2b9ebb52702c5aa4a77f0b3af7"}, + {file = "SQLAlchemy-2.0.30-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:408f8b0e2c04677e9c93f40eef3ab22f550fecb3011b187f66a096395ff3d9fd"}, + {file = "SQLAlchemy-2.0.30-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37a4b4fb0dd4d2669070fb05b8b8824afd0af57587393015baee1cf9890242d9"}, + {file = "SQLAlchemy-2.0.30-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a943d297126c9230719c27fcbbeab57ecd5d15b0bd6bfd26e91bfcfe64220621"}, + {file = "SQLAlchemy-2.0.30-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0a089e218654e740a41388893e090d2e2c22c29028c9d1353feb38638820bbeb"}, + {file = "SQLAlchemy-2.0.30-cp38-cp38-win32.whl", hash = "sha256:fa561138a64f949f3e889eb9ab8c58e1504ab351d6cf55259dc4c248eaa19da6"}, + {file = "SQLAlchemy-2.0.30-cp38-cp38-win_amd64.whl", hash = "sha256:7d74336c65705b986d12a7e337ba27ab2b9d819993851b140efdf029248e818e"}, + {file = "SQLAlchemy-2.0.30-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ae8c62fe2480dd61c532ccafdbce9b29dacc126fe8be0d9a927ca3e699b9491a"}, + {file = "SQLAlchemy-2.0.30-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2383146973a15435e4717f94c7509982770e3e54974c71f76500a0136f22810b"}, + {file = "SQLAlchemy-2.0.30-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8409de825f2c3b62ab15788635ccaec0c881c3f12a8af2b12ae4910a0a9aeef6"}, + {file = "SQLAlchemy-2.0.30-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0094c5dc698a5f78d3d1539853e8ecec02516b62b8223c970c86d44e7a80f6c7"}, + {file = "SQLAlchemy-2.0.30-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:edc16a50f5e1b7a06a2dcc1f2205b0b961074c123ed17ebda726f376a5ab0953"}, + {file = "SQLAlchemy-2.0.30-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f7703c2010355dd28f53deb644a05fc30f796bd8598b43f0ba678878780b6e4c"}, + {file = "SQLAlchemy-2.0.30-cp39-cp39-win32.whl", hash = "sha256:1f9a727312ff6ad5248a4367358e2cf7e625e98b1028b1d7ab7b806b7d757513"}, + {file = "SQLAlchemy-2.0.30-cp39-cp39-win_amd64.whl", hash = "sha256:a0ef36b28534f2a5771191be6edb44cc2673c7b2edf6deac6562400288664221"}, + {file = "SQLAlchemy-2.0.30-py3-none-any.whl", hash = "sha256:7108d569d3990c71e26a42f60474b4c02c8586c4681af5fd67e51a044fdea86a"}, + {file = "SQLAlchemy-2.0.30.tar.gz", hash = "sha256:2b1708916730f4830bc69d6f49d37f7698b5bd7530aca7f04f785f8849e95255"}, ] [package.dependencies] @@ -4418,6 +4868,33 @@ files = [ [package.dependencies] pbr = ">=2.0.0,<2.1.0 || >2.1.0" +[[package]] +name = "sympy" +version = "1.12.1" +description = "Computer algebra system (CAS) in Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "sympy-1.12.1-py3-none-any.whl", hash = "sha256:9b2cbc7f1a640289430e13d2a56f02f867a1da0190f2f99d8968c2f74da0e515"}, + {file = "sympy-1.12.1.tar.gz", hash = "sha256:2877b03f998cd8c08f07cd0de5b767119cd3ef40d09f41c30d722f6686b0fb88"}, +] + +[package.dependencies] +mpmath = ">=1.1.0,<1.4.0" + +[[package]] +name = "tbb" +version = "2021.12.0" +description = "Intel® oneAPI Threading Building Blocks (oneTBB)" +optional = false +python-versions = "*" +files = [ + {file = "tbb-2021.12.0-py2.py3-none-manylinux1_i686.whl", hash = "sha256:f2cc9a7f8ababaa506cbff796ce97c3bf91062ba521e15054394f773375d81d8"}, + {file = "tbb-2021.12.0-py2.py3-none-manylinux1_x86_64.whl", hash = "sha256:a925e9a7c77d3a46ae31c34b0bb7f801c4118e857d137b68f68a8e458fcf2bd7"}, + {file = "tbb-2021.12.0-py3-none-win32.whl", hash = "sha256:b1725b30c174048edc8be70bd43bb95473f396ce895d91151a474d0fa9f450a8"}, + {file = "tbb-2021.12.0-py3-none-win_amd64.whl", hash = "sha256:fc2772d850229f2f3df85f1109c4844c495a2db7433d38200959ee9265b34789"}, +] + [[package]] name = "tensorboard" version = "2.16.2" @@ -4512,32 +4989,35 @@ and-cuda = ["nvidia-cublas-cu12 (==12.3.4.1)", "nvidia-cuda-cupti-cu12 (==12.3.1 [[package]] name = "tensorflow-io-gcs-filesystem" -version = "0.36.0" +version = "0.37.0" description = "TensorFlow IO" optional = false -python-versions = ">=3.7, <3.12" -files = [ - {file = "tensorflow_io_gcs_filesystem-0.36.0-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:702c6df62b38095ff613c433546d9424d4f33902a5ab26b00fd26457e27a99fa"}, - {file = "tensorflow_io_gcs_filesystem-0.36.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:e9b8aaca2789af356c42afda0f52380f82e5abb2f3c0b85087833fcfe03875d8"}, - {file = "tensorflow_io_gcs_filesystem-0.36.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c477aed96864ceae77d7051c3b687f28813aba7320fc5dd552164fad6ec8d1a1"}, - {file = "tensorflow_io_gcs_filesystem-0.36.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be1ff92559dfa23048b01179a1827081947583f5c6f9986ccac471df8a29322a"}, - {file = "tensorflow_io_gcs_filesystem-0.36.0-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:72c3ca4b8c0d8dbdd970699d05a100107cf200317ad8e6a8373e2c37225cd552"}, - {file = "tensorflow_io_gcs_filesystem-0.36.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:848e8e89a0f49258c7782189c938d8d1162d989da1a80c79f95c7af3ef6006c8"}, - {file = "tensorflow_io_gcs_filesystem-0.36.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d72db1ab03edb65fa1e98d06e504ccbc64282d38ab3589afb6db66dc448d1c1"}, - {file = "tensorflow_io_gcs_filesystem-0.36.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bd4d946b5fa23220daa473a80e511a5fb27493d7e49d17dff0bb43bb0a31f32"}, - {file = "tensorflow_io_gcs_filesystem-0.36.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa346fd1dd9f57848b73874007440504f060fadd689fa1cc29cc49817d0eeaf3"}, - {file = "tensorflow_io_gcs_filesystem-0.36.0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:0a4437824424a4423cf86162cb8b21b1bec24698194332748b50bb952e62ab9f"}, - {file = "tensorflow_io_gcs_filesystem-0.36.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:31806bd7ac2db789161bc720747de22947063265561a4c17be54698fd9780b03"}, - {file = "tensorflow_io_gcs_filesystem-0.36.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc0e57976c1aa035af6281f0330cfb8dd50eee2f63412ecc84d60ff5075d29b7"}, - {file = "tensorflow_io_gcs_filesystem-0.36.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e97ff5c280eb10f699098ae21057be2b146d39e8a906cd5db91f2ea6c34e47d0"}, +python-versions = "<3.12,>=3.7" +files = [ + {file = "tensorflow_io_gcs_filesystem-0.37.0-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:82cc4d8e26fb143fc814ac8ab95fede83363a315f5b62f8ae68312f1aca1cc6e"}, + {file = "tensorflow_io_gcs_filesystem-0.37.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:677d6d7c84a94a3b27ea5d16633ea09adadef09c2630480e8e94209558828b02"}, + {file = "tensorflow_io_gcs_filesystem-0.37.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e5d1ac4d2010e8cdf259918ba1500c942b51b7ed2e549f55b404c1fb52f695d"}, + {file = "tensorflow_io_gcs_filesystem-0.37.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2901bc4a91158fa0a10d37594c8a5efb1445dd5a041b1b5b90f782a5d1b15e"}, + {file = "tensorflow_io_gcs_filesystem-0.37.0-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:eab6e4c1daf7ddbfef608cd8e2102861021678dfb3f6a7fb3f613db9d6992919"}, + {file = "tensorflow_io_gcs_filesystem-0.37.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:4ec3c0d0a9d3676a2e74198e3dff66d74c7c34f974257f2176236d0703b31a0e"}, + {file = "tensorflow_io_gcs_filesystem-0.37.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:af0f79400656bb88bf326d2b8e63aef49c07a0ce8c14c3e2589a62e765d8c21f"}, + {file = "tensorflow_io_gcs_filesystem-0.37.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13bc337f2c2db63a39c81c8fd0ececc0c3d5fcf4ce229dfed0b0085a23dd60e9"}, + {file = "tensorflow_io_gcs_filesystem-0.37.0-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:57e7af9c81e79bf8fb552985dc8972ac90437d34bd4c1c9019a92a07eb12bc98"}, + {file = "tensorflow_io_gcs_filesystem-0.37.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:48a8e7aec651bea8db410f6426c6446a56d16a5ab32201a70d8d684c113137b7"}, + {file = "tensorflow_io_gcs_filesystem-0.37.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71ccf64a137efcb2be2627225b4e48110cbf34da39b23c5cc688fe803f2510f1"}, + {file = "tensorflow_io_gcs_filesystem-0.37.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03d5598b8007551f4e1391bf85a83a1865e3fa0789beef15a200efaa06a23fb5"}, + {file = "tensorflow_io_gcs_filesystem-0.37.0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:8d3ad5f30b6dbe09baefdb80e9aa7ff3869c772928b865f8ffc8402be7675a43"}, + {file = "tensorflow_io_gcs_filesystem-0.37.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:95bb229e968fca943806c6ac04e81dc4966fc4a36ab83efaa061a4ecb3ea5e85"}, + {file = "tensorflow_io_gcs_filesystem-0.37.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8385f4fe447812bd8e2e11ef523cf02765319100e5d9e4a9b5a876d4440c900c"}, + {file = "tensorflow_io_gcs_filesystem-0.37.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:500ec871a8d59cf78992b7fd4750d86ea3d35e231fb0bea7a7eabcf73abfceeb"}, ] [package.extras] -tensorflow = ["tensorflow (>=2.15.0,<2.16.0)"] -tensorflow-aarch64 = ["tensorflow-aarch64 (>=2.15.0,<2.16.0)"] -tensorflow-cpu = ["tensorflow-cpu (>=2.15.0,<2.16.0)"] -tensorflow-gpu = ["tensorflow-gpu (>=2.15.0,<2.16.0)"] -tensorflow-rocm = ["tensorflow-rocm (>=2.15.0,<2.16.0)"] +tensorflow = ["tensorflow (>=2.16.0,<2.17.0)"] +tensorflow-aarch64 = ["tensorflow-aarch64 (>=2.16.0,<2.17.0)"] +tensorflow-cpu = ["tensorflow-cpu (>=2.16.0,<2.17.0)"] +tensorflow-gpu = ["tensorflow-gpu (>=2.16.0,<2.17.0)"] +tensorflow-rocm = ["tensorflow-rocm (>=2.16.0,<2.17.0)"] [[package]] name = "termcolor" @@ -4637,24 +5117,24 @@ torch = ["torch (>=1.6.0)"] [[package]] name = "threadpoolctl" -version = "3.4.0" +version = "3.5.0" description = "threadpoolctl" optional = false python-versions = ">=3.8" files = [ - {file = "threadpoolctl-3.4.0-py3-none-any.whl", hash = "sha256:8f4c689a65b23e5ed825c8436a92b818aac005e0f3715f6a1664d7c7ee29d262"}, - {file = "threadpoolctl-3.4.0.tar.gz", hash = "sha256:f11b491a03661d6dd7ef692dd422ab34185d982466c49c8f98c8f716b5c93196"}, + {file = "threadpoolctl-3.5.0-py3-none-any.whl", hash = "sha256:56c1e26c150397e58c4926da8eeee87533b1e32bef131bd4bf6a2f45f3185467"}, + {file = "threadpoolctl-3.5.0.tar.gz", hash = "sha256:082433502dd922bf738de0d8bcc4fdcbf0979ff44c42bd40f5af8a282f6fa107"}, ] [[package]] name = "tinycss2" -version = "1.2.1" +version = "1.3.0" description = "A tiny CSS parser" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "tinycss2-1.2.1-py3-none-any.whl", hash = "sha256:2b80a96d41e7c3914b8cda8bc7f705a4d9c49275616e886103dd839dfc847847"}, - {file = "tinycss2-1.2.1.tar.gz", hash = "sha256:8cff3a8f066c2ec677c06dbc7b45619804a6938478d9d73c284b29d14ecb0627"}, + {file = "tinycss2-1.3.0-py3-none-any.whl", hash = "sha256:54a8dbdffb334d536851be0226030e9505965bb2f30f21a4a82c55fb2a80fae7"}, + {file = "tinycss2-1.3.0.tar.gz", hash = "sha256:152f9acabd296a8375fbca5b84c961ff95971fcfc32e79550c8df8e29118c54d"}, ] [package.dependencies] @@ -4662,7 +5142,7 @@ webencodings = ">=0.4" [package.extras] doc = ["sphinx", "sphinx_rtd_theme"] -test = ["flake8", "isort", "pytest"] +test = ["pytest", "ruff"] [[package]] name = "tomli" @@ -4677,15 +5157,106 @@ files = [ [[package]] name = "tomlkit" -version = "0.12.4" +version = "0.12.5" description = "Style preserving TOML library" optional = false python-versions = ">=3.7" files = [ - {file = "tomlkit-0.12.4-py3-none-any.whl", hash = "sha256:5cd82d48a3dd89dee1f9d64420aa20ae65cfbd00668d6f094d7578a78efbb77b"}, - {file = "tomlkit-0.12.4.tar.gz", hash = "sha256:7ca1cfc12232806517a8515047ba66a19369e71edf2439d0f5824f91032b6cc3"}, + {file = "tomlkit-0.12.5-py3-none-any.whl", hash = "sha256:af914f5a9c59ed9d0762c7b64d3b5d5df007448eb9cd2edc8a46b1eafead172f"}, + {file = "tomlkit-0.12.5.tar.gz", hash = "sha256:eef34fba39834d4d6b73c9ba7f3e4d1c417a4e56f89a7e96e090dd0d24b8fb3c"}, +] + +[[package]] +name = "torch" +version = "2.3.0" +description = "Tensors and Dynamic neural networks in Python with strong GPU acceleration" +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "torch-2.3.0-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:d8ea5a465dbfd8501f33c937d1f693176c9aef9d1c1b0ca1d44ed7b0a18c52ac"}, + {file = "torch-2.3.0-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:09c81c5859a5b819956c6925a405ef1cdda393c9d8a01ce3851453f699d3358c"}, + {file = "torch-2.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:1bf023aa20902586f614f7682fedfa463e773e26c58820b74158a72470259459"}, + {file = "torch-2.3.0-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:758ef938de87a2653bba74b91f703458c15569f1562bf4b6c63c62d9c5a0c1f5"}, + {file = "torch-2.3.0-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:493d54ee2f9df100b5ce1d18c96dbb8d14908721f76351e908c9d2622773a788"}, + {file = "torch-2.3.0-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:bce43af735c3da16cc14c7de2be7ad038e2fbf75654c2e274e575c6c05772ace"}, + {file = "torch-2.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:729804e97b7cf19ae9ab4181f91f5e612af07956f35c8b2c8e9d9f3596a8e877"}, + {file = "torch-2.3.0-cp311-none-macosx_11_0_arm64.whl", hash = "sha256:d24e328226d8e2af7cf80fcb1d2f1d108e0de32777fab4aaa2b37b9765d8be73"}, + {file = "torch-2.3.0-cp312-cp312-manylinux1_x86_64.whl", hash = "sha256:b0de2bdc0486ea7b14fc47ff805172df44e421a7318b7c4d92ef589a75d27410"}, + {file = "torch-2.3.0-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:a306c87a3eead1ed47457822c01dfbd459fe2920f2d38cbdf90de18f23f72542"}, + {file = "torch-2.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:f9b98bf1a3c8af2d4c41f0bf1433920900896c446d1ddc128290ff146d1eb4bd"}, + {file = "torch-2.3.0-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:dca986214267b34065a79000cee54232e62b41dff1ec2cab9abc3fc8b3dee0ad"}, + {file = "torch-2.3.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:20572f426965dd8a04e92a473d7e445fa579e09943cc0354f3e6fef6130ce061"}, + {file = "torch-2.3.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:e65ba85ae292909cde0dde6369826d51165a3fc8823dc1854cd9432d7f79b932"}, + {file = "torch-2.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:5515503a193781fd1b3f5c474e89c9dfa2faaa782b2795cc4a7ab7e67de923f6"}, + {file = "torch-2.3.0-cp38-none-macosx_11_0_arm64.whl", hash = "sha256:6ae9f64b09516baa4ef890af0672dc981c20b1f0d829ce115d4420a247e88fba"}, + {file = "torch-2.3.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:cd0dc498b961ab19cb3f8dbf0c6c50e244f2f37dbfa05754ab44ea057c944ef9"}, + {file = "torch-2.3.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:e05f836559251e4096f3786ee99f4a8cbe67bc7fbedba8ad5e799681e47c5e80"}, + {file = "torch-2.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:4fb27b35dbb32303c2927da86e27b54a92209ddfb7234afb1949ea2b3effffea"}, + {file = "torch-2.3.0-cp39-none-macosx_11_0_arm64.whl", hash = "sha256:760f8bedff506ce9e6e103498f9b1e9e15809e008368594c3a66bf74a8a51380"}, ] +[package.dependencies] +filelock = "*" +fsspec = "*" +jinja2 = "*" +mkl = {version = ">=2021.1.1,<=2021.4.0", markers = "platform_system == \"Windows\""} +networkx = "*" +nvidia-cublas-cu12 = {version = "12.1.3.1", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-cuda-cupti-cu12 = {version = "12.1.105", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-cuda-nvrtc-cu12 = {version = "12.1.105", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-cuda-runtime-cu12 = {version = "12.1.105", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-cudnn-cu12 = {version = "8.9.2.26", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-cufft-cu12 = {version = "11.0.2.54", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-curand-cu12 = {version = "10.3.2.106", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-cusolver-cu12 = {version = "11.4.5.107", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-cusparse-cu12 = {version = "12.1.0.106", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-nccl-cu12 = {version = "2.20.5", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-nvtx-cu12 = {version = "12.1.105", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +sympy = "*" +triton = {version = "2.3.0", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and python_version < \"3.12\""} +typing-extensions = ">=4.8.0" + +[package.extras] +opt-einsum = ["opt-einsum (>=3.3)"] +optree = ["optree (>=0.9.1)"] + +[[package]] +name = "torchvision" +version = "0.18.0" +description = "image and video datasets and models for torch deep learning" +optional = false +python-versions = ">=3.8" +files = [ + {file = "torchvision-0.18.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:dd61628a3d189c6852a12dc5ed4cd2eece66d2d67f35a866cb16f1dcb06c8c62"}, + {file = "torchvision-0.18.0-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:493c45f9937dad37aa1b64b14da17c7a589c72b91adc4837d431009cfe29bd53"}, + {file = "torchvision-0.18.0-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:5337f6acfa1fe959d5cb340d01a00614d6b31ce7a4824ccb95435a85c5273b95"}, + {file = "torchvision-0.18.0-cp310-cp310-win_amd64.whl", hash = "sha256:bd8e6f3b5beb49965f15c461302488edfa3d8c2d01d3bb79b150d6fb62711e3a"}, + {file = "torchvision-0.18.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6896a52168befe1105fb3c9335287390ed227e71d1e4ec4d68b62e8a3099fc09"}, + {file = "torchvision-0.18.0-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:3d7955398d4ceaad77c487c2c44f6f7813112402c9bab8cd906d346005891048"}, + {file = "torchvision-0.18.0-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:e5a24d620cea14a4bb89f24aa2b506230c0a16a3ada57fc53ad80cfd256a2128"}, + {file = "torchvision-0.18.0-cp311-cp311-win_amd64.whl", hash = "sha256:6ad70ddfa879bda5ed886b2518fe562640e0059787cbd65cb2bffa7674541410"}, + {file = "torchvision-0.18.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:eb9d83c0e1dbb54ecb0fb04c87f786333e3a6fb8b9c400aca7c31081f9aa5707"}, + {file = "torchvision-0.18.0-cp312-cp312-manylinux1_x86_64.whl", hash = "sha256:b657d052d146f24cb3b2a78219bfc82ae70a9706671c50f632528907d10cccec"}, + {file = "torchvision-0.18.0-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:a964afbc7ddf50a46b941477f6c35729b416deedd139756befd488245e2e226d"}, + {file = "torchvision-0.18.0-cp312-cp312-win_amd64.whl", hash = "sha256:7c770f0f748e0b17f57c0297508d7254f686cdf03fc2e2949f422b20574f4c0f"}, + {file = "torchvision-0.18.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2115a1906c015f5da9ceedc40a983313b0fd6e2c8a17108a92991706f51f6987"}, + {file = "torchvision-0.18.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:6323f7e5423ff2594d5891863b919deb9d0de95f01c36bf26fbd879036b6ed08"}, + {file = "torchvision-0.18.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:925d0a82cccf6f986c18b29b4392a942db65cbdb73c13a129c8493822eb9e36f"}, + {file = "torchvision-0.18.0-cp38-cp38-win_amd64.whl", hash = "sha256:95b42d0dc599b47a01530c7439a5751e67e45b85e3a67113989cf7c7c70f2039"}, + {file = "torchvision-0.18.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:75e22ecf44a13b8f95b8ad421c0261282d859c61816badaca1959e073ccdd691"}, + {file = "torchvision-0.18.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:4c334b3e719ba0a9ba6e15d4aff1178f5e6d029174f346163fed525f0ccfffd3"}, + {file = "torchvision-0.18.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:36efd87001c6bee2383e043e46a025affb03179747c8f4777b9918527ffce756"}, + {file = "torchvision-0.18.0-cp39-cp39-win_amd64.whl", hash = "sha256:ccc292e093771d5baacf5535ac4416306b6b5f15676341cd4d010d8542eace25"}, +] + +[package.dependencies] +numpy = "*" +pillow = ">=5.3.0,<8.3.dev0 || >=8.4.dev0" +torch = "2.3.0" + +[package.extras] +scipy = ["scipy"] + [[package]] name = "tornado" version = "6.4" @@ -4733,13 +5304,13 @@ testing = ["flaky (>=3.4.0)", "freezegun (>=0.3.11)", "pathlib2 (>=2.3.3)", "psu [[package]] name = "tqdm" -version = "4.66.2" +version = "4.66.4" description = "Fast, Extensible Progress Meter" optional = false python-versions = ">=3.7" files = [ - {file = "tqdm-4.66.2-py3-none-any.whl", hash = "sha256:1ee4f8a893eb9bef51c6e35730cebf234d5d0b6bd112b0271e10ed7c24a02bd9"}, - {file = "tqdm-4.66.2.tar.gz", hash = "sha256:6cd52cdf0fef0e0f543299cfc96fec90d7b8a7e88745f411ec33eb44d5ed3531"}, + {file = "tqdm-4.66.4-py3-none-any.whl", hash = "sha256:b75ca56b413b030bc3f00af51fd2c1a1a5eac6a0c1cca83cbb37a5c52abce644"}, + {file = "tqdm-4.66.4.tar.gz", hash = "sha256:e4d936c9de8727928f3be6079590e97d9abfe8d39a590be678eb5919ffc186bb"}, ] [package.dependencies] @@ -4753,18 +5324,41 @@ telegram = ["requests"] [[package]] name = "traitlets" -version = "5.14.2" +version = "5.14.3" description = "Traitlets Python configuration system" optional = false python-versions = ">=3.8" files = [ - {file = "traitlets-5.14.2-py3-none-any.whl", hash = "sha256:fcdf85684a772ddeba87db2f398ce00b40ff550d1528c03c14dbf6a02003cd80"}, - {file = "traitlets-5.14.2.tar.gz", hash = "sha256:8cdd83c040dab7d1dee822678e5f5d100b514f7b72b01615b26fc5718916fdf9"}, + {file = "traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f"}, + {file = "traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7"}, ] [package.extras] docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] -test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<8.1)", "pytest-mock", "pytest-mypy-testing"] +test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<8.2)", "pytest-mock", "pytest-mypy-testing"] + +[[package]] +name = "triton" +version = "2.3.0" +description = "A language and compiler for custom Deep Learning operations" +optional = false +python-versions = "*" +files = [ + {file = "triton-2.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ce4b8ff70c48e47274c66f269cce8861cf1dc347ceeb7a67414ca151b1822d8"}, + {file = "triton-2.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c3d9607f85103afdb279938fc1dd2a66e4f5999a58eb48a346bd42738f986dd"}, + {file = "triton-2.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:218d742e67480d9581bafb73ed598416cc8a56f6316152e5562ee65e33de01c0"}, + {file = "triton-2.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:381ec6b3dac06922d3e4099cfc943ef032893b25415de295e82b1a82b0359d2c"}, + {file = "triton-2.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:038e06a09c06a164fef9c48de3af1e13a63dc1ba3c792871e61a8e79720ea440"}, + {file = "triton-2.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d8f636e0341ac348899a47a057c3daea99ea7db31528a225a3ba4ded28ccc65"}, +] + +[package.dependencies] +filelock = "*" + +[package.extras] +build = ["cmake (>=3.20)", "lit"] +tests = ["autopep8", "flake8", "isort", "numpy", "pytest", "scipy (>=1.7.1)", "torch"] +tutorials = ["matplotlib", "pandas", "tabulate", "torch"] [[package]] name = "typer" @@ -4789,13 +5383,13 @@ test = ["black (>=22.3.0,<23.0.0)", "coverage (>=6.2,<7.0)", "isort (>=5.0.6,<6. [[package]] name = "typing-extensions" -version = "4.11.0" +version = "4.12.0" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.11.0-py3-none-any.whl", hash = "sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a"}, - {file = "typing_extensions-4.11.0.tar.gz", hash = "sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0"}, + {file = "typing_extensions-4.12.0-py3-none-any.whl", hash = "sha256:b349c66bea9016ac22978d800cfff206d5f9816951f12a7d0ec5578b0a819594"}, + {file = "typing_extensions-4.12.0.tar.gz", hash = "sha256:8cbcdc8606ebcb0d95453ad7dc5065e6237b6aa230a31e81d0f440c30fed5fd8"}, ] [[package]] @@ -4828,13 +5422,13 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "virtualenv" -version = "20.25.3" +version = "20.26.2" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.7" files = [ - {file = "virtualenv-20.25.3-py3-none-any.whl", hash = "sha256:8aac4332f2ea6ef519c648d0bc48a5b1d324994753519919bddbb1aff25a104e"}, - {file = "virtualenv-20.25.3.tar.gz", hash = "sha256:7bb554bbdfeaacc3349fa614ea5bff6ac300fc7c335e9facf3a3bcfc703f45be"}, + {file = "virtualenv-20.26.2-py3-none-any.whl", hash = "sha256:a624db5e94f01ad993d476b9ee5346fdf7b9de43ccaee0e0197012dc838a0e9b"}, + {file = "virtualenv-20.26.2.tar.gz", hash = "sha256:82bf0f4eebbb78d36ddaee0283d43fe5736b53880b8a8cdcd37390a07ac3741c"}, ] [package.dependencies] @@ -4848,13 +5442,13 @@ test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess [[package]] name = "wasabi" -version = "1.1.2" +version = "1.1.3" description = "A lightweight console printing and formatting toolkit" optional = false python-versions = ">=3.6" files = [ - {file = "wasabi-1.1.2-py3-none-any.whl", hash = "sha256:0a3f933c4bf0ed3f93071132c1b87549733256d6c8de6473c5f7ed2e171b5cf9"}, - {file = "wasabi-1.1.2.tar.gz", hash = "sha256:1aaef3aceaa32edb9c91330d29d3936c0c39fdb965743549c173cb54b16c30b5"}, + {file = "wasabi-1.1.3-py3-none-any.whl", hash = "sha256:f76e16e8f7e79f8c4c8be49b4024ac725713ab10cd7f19350ad18a8e3f71728c"}, + {file = "wasabi-1.1.3.tar.gz", hash = "sha256:4bb3008f003809db0c3e28b4daf20906ea871a2bb43f9914197d540f4f2e0878"}, ] [package.dependencies] @@ -4862,40 +5456,43 @@ colorama = {version = ">=0.4.6", markers = "sys_platform == \"win32\" and python [[package]] name = "watchdog" -version = "4.0.0" +version = "4.0.1" description = "Filesystem events monitoring" optional = false python-versions = ">=3.8" files = [ - {file = "watchdog-4.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:39cb34b1f1afbf23e9562501673e7146777efe95da24fab5707b88f7fb11649b"}, - {file = "watchdog-4.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c522392acc5e962bcac3b22b9592493ffd06d1fc5d755954e6be9f4990de932b"}, - {file = "watchdog-4.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6c47bdd680009b11c9ac382163e05ca43baf4127954c5f6d0250e7d772d2b80c"}, - {file = "watchdog-4.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8350d4055505412a426b6ad8c521bc7d367d1637a762c70fdd93a3a0d595990b"}, - {file = "watchdog-4.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c17d98799f32e3f55f181f19dd2021d762eb38fdd381b4a748b9f5a36738e935"}, - {file = "watchdog-4.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4986db5e8880b0e6b7cd52ba36255d4793bf5cdc95bd6264806c233173b1ec0b"}, - {file = "watchdog-4.0.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:11e12fafb13372e18ca1bbf12d50f593e7280646687463dd47730fd4f4d5d257"}, - {file = "watchdog-4.0.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5369136a6474678e02426bd984466343924d1df8e2fd94a9b443cb7e3aa20d19"}, - {file = "watchdog-4.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:76ad8484379695f3fe46228962017a7e1337e9acadafed67eb20aabb175df98b"}, - {file = "watchdog-4.0.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:45cc09cc4c3b43fb10b59ef4d07318d9a3ecdbff03abd2e36e77b6dd9f9a5c85"}, - {file = "watchdog-4.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eed82cdf79cd7f0232e2fdc1ad05b06a5e102a43e331f7d041e5f0e0a34a51c4"}, - {file = "watchdog-4.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ba30a896166f0fee83183cec913298151b73164160d965af2e93a20bbd2ab605"}, - {file = "watchdog-4.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d18d7f18a47de6863cd480734613502904611730f8def45fc52a5d97503e5101"}, - {file = "watchdog-4.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2895bf0518361a9728773083908801a376743bcc37dfa252b801af8fd281b1ca"}, - {file = "watchdog-4.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:87e9df830022488e235dd601478c15ad73a0389628588ba0b028cb74eb72fed8"}, - {file = "watchdog-4.0.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6e949a8a94186bced05b6508faa61b7adacc911115664ccb1923b9ad1f1ccf7b"}, - {file = "watchdog-4.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6a4db54edea37d1058b08947c789a2354ee02972ed5d1e0dca9b0b820f4c7f92"}, - {file = "watchdog-4.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d31481ccf4694a8416b681544c23bd271f5a123162ab603c7d7d2dd7dd901a07"}, - {file = "watchdog-4.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:8fec441f5adcf81dd240a5fe78e3d83767999771630b5ddfc5867827a34fa3d3"}, - {file = "watchdog-4.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:6a9c71a0b02985b4b0b6d14b875a6c86ddea2fdbebd0c9a720a806a8bbffc69f"}, - {file = "watchdog-4.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:557ba04c816d23ce98a06e70af6abaa0485f6d94994ec78a42b05d1c03dcbd50"}, - {file = "watchdog-4.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:d0f9bd1fd919134d459d8abf954f63886745f4660ef66480b9d753a7c9d40927"}, - {file = "watchdog-4.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:f9b2fdca47dc855516b2d66eef3c39f2672cbf7e7a42e7e67ad2cbfcd6ba107d"}, - {file = "watchdog-4.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:73c7a935e62033bd5e8f0da33a4dcb763da2361921a69a5a95aaf6c93aa03a87"}, - {file = "watchdog-4.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:6a80d5cae8c265842c7419c560b9961561556c4361b297b4c431903f8c33b269"}, - {file = "watchdog-4.0.0-py3-none-win32.whl", hash = "sha256:8f9a542c979df62098ae9c58b19e03ad3df1c9d8c6895d96c0d51da17b243b1c"}, - {file = "watchdog-4.0.0-py3-none-win_amd64.whl", hash = "sha256:f970663fa4f7e80401a7b0cbeec00fa801bf0287d93d48368fc3e6fa32716245"}, - {file = "watchdog-4.0.0-py3-none-win_ia64.whl", hash = "sha256:9a03e16e55465177d416699331b0f3564138f1807ecc5f2de9d55d8f188d08c7"}, - {file = "watchdog-4.0.0.tar.gz", hash = "sha256:e3e7065cbdabe6183ab82199d7a4f6b3ba0a438c5a512a68559846ccb76a78ec"}, + {file = "watchdog-4.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:da2dfdaa8006eb6a71051795856bedd97e5b03e57da96f98e375682c48850645"}, + {file = "watchdog-4.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e93f451f2dfa433d97765ca2634628b789b49ba8b504fdde5837cdcf25fdb53b"}, + {file = "watchdog-4.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ef0107bbb6a55f5be727cfc2ef945d5676b97bffb8425650dadbb184be9f9a2b"}, + {file = "watchdog-4.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:17e32f147d8bf9657e0922c0940bcde863b894cd871dbb694beb6704cfbd2fb5"}, + {file = "watchdog-4.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:03e70d2df2258fb6cb0e95bbdbe06c16e608af94a3ffbd2b90c3f1e83eb10767"}, + {file = "watchdog-4.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:123587af84260c991dc5f62a6e7ef3d1c57dfddc99faacee508c71d287248459"}, + {file = "watchdog-4.0.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:093b23e6906a8b97051191a4a0c73a77ecc958121d42346274c6af6520dec175"}, + {file = "watchdog-4.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:611be3904f9843f0529c35a3ff3fd617449463cb4b73b1633950b3d97fa4bfb7"}, + {file = "watchdog-4.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:62c613ad689ddcb11707f030e722fa929f322ef7e4f18f5335d2b73c61a85c28"}, + {file = "watchdog-4.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:d4925e4bf7b9bddd1c3de13c9b8a2cdb89a468f640e66fbfabaf735bd85b3e35"}, + {file = "watchdog-4.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cad0bbd66cd59fc474b4a4376bc5ac3fc698723510cbb64091c2a793b18654db"}, + {file = "watchdog-4.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a3c2c317a8fb53e5b3d25790553796105501a235343f5d2bf23bb8649c2c8709"}, + {file = "watchdog-4.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c9904904b6564d4ee8a1ed820db76185a3c96e05560c776c79a6ce5ab71888ba"}, + {file = "watchdog-4.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:667f3c579e813fcbad1b784db7a1aaa96524bed53437e119f6a2f5de4db04235"}, + {file = "watchdog-4.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d10a681c9a1d5a77e75c48a3b8e1a9f2ae2928eda463e8d33660437705659682"}, + {file = "watchdog-4.0.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0144c0ea9997b92615af1d94afc0c217e07ce2c14912c7b1a5731776329fcfc7"}, + {file = "watchdog-4.0.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:998d2be6976a0ee3a81fb8e2777900c28641fb5bfbd0c84717d89bca0addcdc5"}, + {file = "watchdog-4.0.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e7921319fe4430b11278d924ef66d4daa469fafb1da679a2e48c935fa27af193"}, + {file = "watchdog-4.0.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:f0de0f284248ab40188f23380b03b59126d1479cd59940f2a34f8852db710625"}, + {file = "watchdog-4.0.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:bca36be5707e81b9e6ce3208d92d95540d4ca244c006b61511753583c81c70dd"}, + {file = "watchdog-4.0.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:ab998f567ebdf6b1da7dc1e5accfaa7c6992244629c0fdaef062f43249bd8dee"}, + {file = "watchdog-4.0.1-py3-none-manylinux2014_aarch64.whl", hash = "sha256:dddba7ca1c807045323b6af4ff80f5ddc4d654c8bce8317dde1bd96b128ed253"}, + {file = "watchdog-4.0.1-py3-none-manylinux2014_armv7l.whl", hash = "sha256:4513ec234c68b14d4161440e07f995f231be21a09329051e67a2118a7a612d2d"}, + {file = "watchdog-4.0.1-py3-none-manylinux2014_i686.whl", hash = "sha256:4107ac5ab936a63952dea2a46a734a23230aa2f6f9db1291bf171dac3ebd53c6"}, + {file = "watchdog-4.0.1-py3-none-manylinux2014_ppc64.whl", hash = "sha256:6e8c70d2cd745daec2a08734d9f63092b793ad97612470a0ee4cbb8f5f705c57"}, + {file = "watchdog-4.0.1-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:f27279d060e2ab24c0aa98363ff906d2386aa6c4dc2f1a374655d4e02a6c5e5e"}, + {file = "watchdog-4.0.1-py3-none-manylinux2014_s390x.whl", hash = "sha256:f8affdf3c0f0466e69f5b3917cdd042f89c8c63aebdb9f7c078996f607cdb0f5"}, + {file = "watchdog-4.0.1-py3-none-manylinux2014_x86_64.whl", hash = "sha256:ac7041b385f04c047fcc2951dc001671dee1b7e0615cde772e84b01fbf68ee84"}, + {file = "watchdog-4.0.1-py3-none-win32.whl", hash = "sha256:206afc3d964f9a233e6ad34618ec60b9837d0582b500b63687e34011e15bb429"}, + {file = "watchdog-4.0.1-py3-none-win_amd64.whl", hash = "sha256:7577b3c43e5909623149f76b099ac49a1a01ca4e167d1785c76eb52fa585745a"}, + {file = "watchdog-4.0.1-py3-none-win_ia64.whl", hash = "sha256:d7b9f5f3299e8dd230880b6c55504a1f69cf1e4316275d1b215ebdd8187ec88d"}, + {file = "watchdog-4.0.1.tar.gz", hash = "sha256:eebaacf674fa25511e8867028d281e602ee6500045b57f43b08778082f7f8b44"}, ] [package.extras] @@ -4947,13 +5544,13 @@ files = [ [[package]] name = "werkzeug" -version = "3.0.2" +version = "3.0.3" description = "The comprehensive WSGI web application library." optional = false python-versions = ">=3.8" files = [ - {file = "werkzeug-3.0.2-py3-none-any.whl", hash = "sha256:3aac3f5da756f93030740bc235d3e09449efcf65f2f55e3602e1d851b8f48795"}, - {file = "werkzeug-3.0.2.tar.gz", hash = "sha256:e39b645a6ac92822588e7b39a692e7828724ceae0b0d702ef96701f90e70128d"}, + {file = "werkzeug-3.0.3-py3-none-any.whl", hash = "sha256:fc9645dc43e03e4d630d23143a04a7f947a9a3b5727cd535fdfe155a17cc48c8"}, + {file = "werkzeug-3.0.3.tar.gz", hash = "sha256:097e5bfda9f0aba8da6b8545146def481d06aa7d3266e7448e2cccf67dd8bd18"}, ] [package.dependencies] @@ -5057,18 +5654,18 @@ files = [ [[package]] name = "zipp" -version = "3.18.1" +version = "3.19.1" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.8" files = [ - {file = "zipp-3.18.1-py3-none-any.whl", hash = "sha256:206f5a15f2af3dbaee80769fb7dc6f249695e940acca08dfb2a4769fe61e538b"}, - {file = "zipp-3.18.1.tar.gz", hash = "sha256:2884ed22e7d8961de1c9a05142eb69a247f120291bc0206a00a7642f09b5b715"}, + {file = "zipp-3.19.1-py3-none-any.whl", hash = "sha256:2828e64edb5386ea6a52e7ba7cdb17bb30a73a858f5eb6eb93d8d36f5ea26091"}, + {file = "zipp-3.19.1.tar.gz", hash = "sha256:35427f6d5594f4acf82d25541438348c26736fa9b3afa2754bcd63cdb99d8e8f"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +test = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] [extras] database = ["sqlalchemy"] @@ -5078,4 +5675,4 @@ notebook = ["ploomber-engine"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<3.13" -content-hash = "50d8d656d7a7eb1ceb2939b83a60934f55c6d1b8aaa3b1517e8813ff2306e469" +content-hash = "9c91eef8afc884316f34e94f7722de173f438406b20b89f4670ac6e580fffa1a" diff --git a/pyproject.toml b/pyproject.toml index 8e28360d..a068cdb8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -25,43 +25,12 @@ mlflow-skinny = { version = "*", optional = true } ploomber-engine = "^0.0.31" dill = "^0.3.8" -[tool.poetry.group.docs.dependencies] -mkdocs = "*" -mkdocs-material = "*" -mkdocs-section-index = "^0.3.5" -mkdocstrings = { extras = ["python"], version = "^0.24.0" } -nbconvert = "^7.13.1" -mkdocs-click = "^0.8.1" -tensorflow = "^2.16.1" - -[tool.poetry.group.binary.dependencies] -pyinstaller = "^5.13.2" - -[tool.poetry.group.perf.dependencies] -# Run the performace tests poetry run python -m pyflame -p ./flamegraph.pl runnable/entrypoints.py -pyflame = "^0.3.1" - - -[tool.poetry.group.tutorial.dependencies] -pandas = "^2.2.1" -numpy = "^1.26.4" -scikit-learn = "^1.4.1.post1" -en-core-web-sm = { url = "https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.7.1/en_core_web_sm-3.7.1.tar.gz" } -matplotlib = "^3.8.3" - - -[tool.poetry.group.release.dependencies] -python-semantic-release = "^9.4.2" - - -[tool.poetry.group.examples.dependencies] -pandas = "^2.2.2" - [tool.poetry.extras] docker = ['docker'] notebook = ['ploomber-engine'] database = ["sqlalchemy"] + [tool.poetry.group.dev.dependencies] pytest = "*" pytest-cov = "*" @@ -73,13 +42,44 @@ ruff = "^0.0.259" commit-linter = "^1.0.2" black = "^23.3.0" gitlint = "^0.19.1" -pandas = "^2.2.2" +pandas = "^2.2.2" # for testing examples +[tool.poetry.group.release.dependencies] +python-semantic-release = "^9.4.2" + +[tool.poetry.group.docs.dependencies] +mkdocs = "*" +mkdocs-material = "*" +mkdocs-section-index = "^0.3.5" +mkdocstrings = { extras = ["python"], version = "^0.24.0" } +nbconvert = "^7.13.1" +mkdocs-click = "^0.8.1" + +[tool.poetry.group.tutorial.dependencies] +pandas = "^2.2.1" +numpy = "^1.26.4" +scikit-learn = "^1.4.1.post1" +en-core-web-sm = { url = "https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.7.1/en_core_web_sm-3.7.1.tar.gz" } +matplotlib = "^3.8.3" + + +[tool.poetry.group.compare.dependencies] +torch = "^2.3.0" +torchvision = "^0.18.0" +tensorflow = "^2.16.1" [tool.poetry.scripts] runnable = 'runnable.cli:cli' +[tool.poetry.group.binary.dependencies] +pyinstaller = "^5.13.2" + +[tool.poetry.group.perf.dependencies] +# Run the performace tests poetry run python -m pyflame -p ./flamegraph.pl runnable/entrypoints.py +pyflame = "^0.3.1" + + # Plugins for Executors [tool.poetry.plugins."executor"] "local" = "runnable.extensions.executor.local.implementation:LocalExecutor" From 65bff88a092cee30149831dfd6b2ee89bc70f7fd Mon Sep 17 00:00:00 2001 From: Vijay Vammi Date: Tue, 11 Jun 2024 09:31:55 +0100 Subject: [PATCH 3/4] docs: updating docs --- docs/assets/work_dark.png | Bin 0 -> 161688 bytes docs/assets/work_light.png | Bin 0 -> 160515 bytes docs/index.md | 32 ++++++++- examples/comparisons/README.md | 121 +++++++++++++++++++++++++++------ 4 files changed, 133 insertions(+), 20 deletions(-) create mode 100644 docs/assets/work_dark.png create mode 100644 docs/assets/work_light.png diff --git a/docs/assets/work_dark.png b/docs/assets/work_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..b5baa306ccbad34bab19e9446ec06b0537d4e39e GIT binary patch literal 161688 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 z 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¨7(vP7^A+ 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

(B(_u!|KoAL?rA;`%5Yh~^<*!fDK2aNN<7ta z(`?9Qv%X~G$-n-*l&my#x^#yLr)0WH(#o@*-n&?GqcxT0(Splc6zgLqYCDFZM2zp^pMh~Eb2DG#s^Loa|g)QP`wenF-% z?+G}tveMMc&)>aeT1_$JdjtC&rKA}21f50Z%nk%pQwdZJmdN645F zM`znjXp)ZsD6jvXUM||3<7p}>;h-Al1-nos0772^>^TH|ddMVS`9IXY;9U&rC;Pj? zEt~pzh=*^R+MmKc9p{-0uUAIyq8I|0e)bmqqsl)uo52v=aLy5ZPlWh1fLg2*UQ}?u z5Jf?;-v%|u_b^14LBZM9ww}wk*}J$2u+4U7$eDX7p7Dto52CP|5b~(At%ZwFI@)C zLFkE-7Mf)(X=>;nz=aS{JC%CMKRvuXI@FH%T zHUO8BbPiA^Ngy%Cqezi6jU^-Z=BxkZ1%bq4pPscp>0@<;D4NcJQ2Kdo_0Xhxpa=qY zKMpcK@tXD0zd<1|(13x3t0)hs5f2lftcX2iGn)Dt+%!@GrX3eAQ$i{Kjnr863J>L{ zPn`ia+5$wg1X6oN6B<9(jF>0!|6}8uy~v_R{G|`lblFSkz=Ad4YWuv4j5S+0fQ3UN z{{;yqhp&%gQfMPR7Qsy!!L_uciFHU zDU0V--b~yNE<|y-FLf;Z%M6YYU4IQEA0)hx>OA_ULEg@vT4ZuSHxE$tod=&K6CNyH zU{!B+wt08D6VN69m)bv(zYyec($h>-<le+ zS7cqGaP-%Ik)So_H0iiSN2z8>Ap=dt-DhCWVxM^2DSPx1%FW%@*Zl8RxSEh2MF)HoOmx43J zdgt96h*E+te+t`+Rp;^7xcW=NLa9WXjOO?3WM7Dl4R3{B5c53ko&zmGU04sax@>-V z$*=CH;p4eo)G~J@0BlGDV(`2GS@L(HtBIg7NHFI(LB271vTd;BgtHt` zy&ZM^>Q0yn@;$lF;t_LM? z;Kxp^Bi_^X4f-ANgfE7C=Qe2NC78qvht4-K#537sIIH#pY)F$~4z09?h-vEF$H&aI z;dlOC!{@ozN0eC#EIBwXW7CedGO~Yi028z>hodhlIY7=R9|3X z{kyI-f1xs!ZvkWa25hdeSA6+%pZl#hu)I3@Y3868zPClajV%4@EBWn( za)yY+XxCEU`*aySqnZi@Th4YyZ6woRVrxrBv!icXZ%?TF-15n6wgN_qN>Y2M8rJSES%o=*c?wlXD{tT zFB6?9ZUACKiD~+MT4(#~J&}Qb&0Q(3iKr7otc5S1pCDNmeEGEZ zf1$91*MQdxv!1v?Kp7yI*uR@jKI#6K@qkc!SzY|co(KaKZj(2o`Ezd#0$^XBr-^>s zo$~-6#`oM`qW|Tq04zC%e{A_TGQO@Jf$I@WNB* zH@HpEV}co(z03W_2%E(Ta4^q}bALM{(GS4e&2E$Z^QxauZ6$Q^e|>zD;urK!&|ko? z$9yjn{5|NOCRWH8Tx~0AvH{#te@_5cANRU3SKJTdp=|!TKSh|$(M`$zdjc|)!m!kqTL10H6LJ zVqtIripf6p{sz^r%l+V;>5=U4e`e_C?Xv)3#h=M1N%XfWn1S0~p5^{8H;@rrH6Iwd z0qA3XzT*uLrDj%JvCT<7#YjVR{-+(pCh|Nco=~9`i%lrOaJ}6 zS5qN~&By%d*#UH)Z}xIqp3e~$1JVT663Z~Tt%-hkUQ9q;~*@&Ddro2v=>l#rgA z_WNM~qRy91*5fDW!#_&ZN?-(k;4T*NTc3=<$aZ(*>?=cpFDbbPO zKKJJb+kg*dpKQ4Cv+xl-y&ojI)8qe||5I7A0hX};_CX@uZ)G6^bE7SvbLKyVCvU0- zR$tUl=kf0`-zA_>C9(Sc8NbgGj8LjiO6Bi|^@4}_=9(-2`LGqj!;BIJOn+VeuK3oF z&$u8~lGD~C8>cwn=0?8*75G^h^B-RxPQX0-g3*Tk-k$u=TQhozElhx#iK2by2e1Cr zp7RX1fdKA&wbA*llfwXB=3p$vP2tbcJODzbvg_4y`gQq%Hn`8Oqx=0IvlEmFP@-f9 zCza=axlBL(nv%F1ZGRfNP!sTy_1&xdzmz5DCSZeaJl)Pj^ylnQ6K1FX^^M;F+CG3i zYiMeWjr_xb3n%QZTFdHVgybP%;`|8?rWlOuPkmGZbsh)p?%Wi=6(`_K1$jL^(^hoZ7~J%<#`08t8UrPtI>M z-zNv2c2o|3^yi!n5;O=F)z9+l^7k+xr^Zq!*PjOc4Z+U5Gq53G_7YZL4u2oVdcgfm z9Z9j(S*@SIQvWaR=5@llnrh7c?Xs7Kg4;*Vr`-9|^4}rkdE2F;mw)Mg^BAxhCX7}; z6TJVwxWb z@Iu>=E$(wL6p*h0(AlG0y^Jk@3%>kzFv8~({j_0(Q`}B`Ub@fn+*E^auO39Etxoqe z)doMnE{@(2R?e*Vlf?_0cX>k!WMG&CKz`e)lxdVb80se**dV-c&qkXgW{-kHARLPA zrvr7q|E#1d1e{Up9Q71Y=0=y8+n zQLxpoDNc=hi+9kavSQ7ZtMt5ZSw`_LQl>U<)eNeXe6R6J*1T9r1+vjRuL9chq4P=`+okd4-Ry9uOpr_Zcz zinO^@dX^pBb4u=A3~NoKfm6p@7y;V1&W0P-4823fV-nT}?KG#sC{18VNQhGQ03|YFFb%c zzbz0@9}F5}S^|!!8D2LZH2ZVD7&i$1;m_eX`TU_2uu*-ggTFWRVFGu^V|oSRDT`q& zHNT{No`rrCe?n&!()amJ0TC#yd)_lLTUc6ww94xnS-yXmnS4AfNit%ug!m4J+;to>6>fafs? z%f~gGys8b$|v2c@!nb>aB*CL4;r9`7m0~Zvli*_G|8RuhcKVN z%O>=5Xf$3<*P_j)Wj@<{Y?L_zID~@syLQC9>x=<$OpFhgWxj`s$hxc!1?xb^1uqkH zB_}FOoB!aFdH9cK+3h-YT zj>t619_)p}5S8Wk3*-3>Dw$9~Tf$@Oz@HduWv17oRZi$p+-SdV;m~p*FWmN>Izrbs zbuJm;jn?Mtf~BHtgTUwqS9GyVSm_V<0=Y1KR{CNizUW%h4Z|pC>l=pwgil5XEn_vEl>AtDNNe3RqOo*w&*Tpnux_V<<(x zT(@2+0w5ok*`daQjYec{+xdS4ijJDOct=}Xn~}eBAEgV{O?XOHo9Z>^!r|KKT1R(R z*G*2b$;Sh0x)!_3YY3~pyZo~ajo7?o;Z|wDpKbmlG2UVlDv+>?DpajNI`alu(BN@svo8b$usG|1F97y0D!*KHx1fQ9P5!Kmd&jv5Lih_$8`qZ&;b)TIDEqA}8Q zX4QVY@>HNNz#k1-x7L@!5Xj{^@%c}a92B6-$hY5Z$PO_3_|~c$ z1TKk38ghORyu{kQWigPeKBSw`Fy(Fl{n}o1-<#(%PR7v$HKsxLZL-{|_Y^2eD3rTe zCI*nlM;7*z%N(Rw1v*_)Noox5N>vQMQ~G3SuBK?`??C?1lG=3=Fit$uAO4KQ)S_Sx zYk+FvHO6<2muI~ZtP69nwAkx=Q!@Aj1d#jT5j=bafFjTU(5v(?uxDttF__OuAB6}n zXdrM|_y&OxEO9|~=VGHDUHf7_rj`_7qnFUp(LG9o$B!gjTyA`I97N?eP3?*H-z`W| zvn=wX2ka`fx^_%(T+QYDPd>(IsdOaql+=Z?f8dV+81n9St@CO(X%aVBro>}<7cDaH zpN;*Dp#l3QPxWg)CZOd2W6&zp6S-J&^g?(+9qih>r_r7Bt|eb!c*G&%_~Um#t+Goz zmEbpn)rB1CO*`rF!qXWJ-*d@n0Bmo@I8S5ff*(NH-xUxL*blppybX}t>HystN?iGP z+$B}HQZn%A`->y)n!p&ZLJAT>D$)8>-y5r;1+n`sEIZ$iEB2$-ONcSEyZ!Ug>4S(qAYVvL{J?EqFVtNE3a0_PNq8!ti56=0yH?+xCA@&aY0nTLa8dQM@WyIe*^IzE zVI{|$5EHj|;%i_TqAOu-S1(HY1r6_qKnn7nw`l?E;8^75=;I^VR9}C18i7+CEW zxg{d5pCQ3}@&*57s$AskjX+LdAU@5?EV(N!Hv)us3Q|fYFKzO`(K*-7cLIC~opRBE zYU=7~*81^tC!>z8w;JjqbTeotu10{J=5H;(`2cU+s%Brx!002fVKMW4TD`6{-NkKn zacj@+a0?jR7r@}k2~$pPai~oCGGkSG@8hNQVK7_o^76*+5Zu;5mQZA>iK?n<6)BRJ zpZ-au!vQ%ig)<_=K0+9O51|_<_Q3cJ#U}+bn!CvQ4@v+#>U6aM{f8k_AxfGPl6@r{6JMN z=xw2O0kQo0mSL+q7Je3HX5a239E&+!b{&Np%VhPZ6@##aT9X?tfO>Nasrj;zCTAW@ z6!M&`{^k4%zvug%`(__pW4v2z25Myp};ftTdH8Er_MaFR~Y=cxCe0m zEmDKd_5)*lx9N04%XIA90iEv+dQy>YFY#hYX$|%DhBji=sNs@g9iEKvF%Cp?9dy|N z!u{EW1vh4{AJ3frGI{%%+H@n&d2aVIK8)drdx^bP39Z=GH>UxVz=V@EVqV#z2uGZA z*>&qtt4pfUd&v+><2DcM{Bywe7{%PS*V(t>i}cOBC*I<2bhfz4cDF4KTCx$D0H|Us zSDUmUh-w?UWo%kZOpMi}*K9-+SyXWJK_0u~brMf+0_mvW57MNg#BNIq;m_i?wv{C# z*)<#5iw6czVJ9PZb4D(CziWM0%qvCw?6M(_QBV`9!()OaP}}SShOu#v5&)3W2ocZp0^JHp5&LaV59gW4Zm&*S6cYp0>~_r2zhb+6}?(Ifdp z{??P(E5ZN&ID6};D7)_uRFPDa6cH2=5u`hm78F5B5RgXc?i|7a6_irCLFpJkI)*X` zNlB?0l#(2380mXP8NV;@`@8F|b^Sw^vu2*>oPGA$y+3T9p&DfE{-}DWeXj$2*hI;T^50TpSjF=LY_rCt+ z+An@83DGhI^X|5#f}jpkbkiH;f@pZ=eM|UlkWvGX0MXux5?j+f=21G;jZ*}Y45;O; zldVpsZz@_AGow^)tu%oKBW*>yUR_ZB-k$M!{S=d@K8bk>UGn>7R2l#=g+pQmhtI=57|c&6DupClM_(Q5n9cHXIBOd~CVp{;n1Pg*QiD zAUfwP<2&T3U}HzL565Vb!NJK|;P;u?f)a$EXxUYHOwQ%jH!jwnIX)P4kA#HrnRS#- zI~_=!?L3W`7wrxV43QtLeT z$8Q!p^d;YIghZ^1SftRI7*dE@m=aFs>%5L+Fm`fUqnC+#HfP;4e6bkSaEU^0$@352 zXF8>v^_^9CQy0ePukFutV^Lz>Dc?W2m(%^_SJMDDfXFQ=wtsP>aV3l9v^|qmpSqr9 z#js7L(Obh-tTiFlApUp`>0`UsPP?H8?b&R*h$>C78(V)iirI5tLN*?*I?};_e@Jc8 zsaJ4T*-+rOhj{d3{j+@&?7+ys2LdX1q|9zV(p3ZBI;aswwUZ)gx!+A>Bjs zRW>e?B5n4VVZ!dg^K30}n`H5?H;^6EwMZYj(uUsEkwNQ<5mo1#s_Q9?f_!rM>UQdb-)<#GkfCy8F?AWgX%AKxs{@+eca7Ma1rfbm`9k>($8I@jj!fjjv7q_!a*dfVsVte>HUf}RFYPbC`uUIJFr zYYTVjs7P1R99mpSss85Ti|r zF(zO#-xKiRlJ!MacZ%^2~sH$rV z(<PQuf>$o>O|H;q#h=fVZ!)&afcNpmvk#0{i{nqQ`#HfcsaG!aJVnjaAN& zRNq~FWV62ntdp5ZC$J4m`V?$1?|&_jctAhIJkgleDLK=HQR^KNY6*kgX` z=)L=D_yQPlSFqRAXnRFb$OWCPoWwv;{r0Lrp96_cWqr5PrG)gap4Z*TDipf!BzRKT z>_0b7Lj(TreUUn@7j_ZVPBz~P)I?jCt-^Pz?S-rr3Xu!Q8PRb6)NPUa83jClrDqQD zzxFSvjL-s09vIbi651qi4~~{CoEsVo+|Z1=`jDo&JyC1PbD*x;u|l_ASWs_PulXXM zvt0WH-GV`TbOb~4McUJFqaUK(1)y32jAxCx!!r|vzI zBHE_jMC8=9WtFF3T&_8yw~35TDxSsPdN(6)EQFIY&E7Z{2dIuqtFB?0sc|8X_mVhfC+U+!q-gv-RK=E2yht7$!l zGQNDGQjG7lpdN>Ox70z_ch)w@i)IYhzQEjHKztYA zADXl7OEP`ilLwUYb}AE8cEnG!$$zZUjtXnP_3S5n0wV@zit{E78oe7DSeNTSv@65x zv1em)ZpDe)CuiHDxxP0+K7}pDS;1yp3=Gp?InI!m!&{Sc9tAH?ds|yCECFX>GEDAp zzkTW zEgrwjHFFM@2kT{PoHg`WS_I7-uK4}>PVc@lUPE1>8iBOX8n>(k7OV(Szswh>+s$iL zzzCXad!=2RRlsR=pY+pb^}Jp9FclPVQK8v^A@9glNQVdjk;JXt$>+MY% z_`~@6Ln=JDg-^ZIT^w1(8~LvPy`!UJ3&aA|fgnu%Mw0z7@<-zQS5v2T?-QjLjnNAp zdY)V_4Hr{h)cG%gkbv%-_0O{F?voQq7ZLiz*j^FdL-W|UkK;zIa`u8_hIElF-y`*r zQJZl~i#qqc>svUgrCpmI_C?%##qD*+Px2XF6UWfhn-o(PGzbsV=i!k_Z1!IFAF8z* z>q2>ar>ArprAb}`2HM5%1eHJ(dV%1fi_hn?8<{I_doDNDK4DYM^64opJbYEwqQZkD z0ZEeNHHNVXq>*|6u&0CC=Sqik`>w1Av~WI(MQa_taQnqp)_b!LtsK}JcF>l?51v`K zFh7QvzicxoM}*QH>BqF8;SH@9`uLQutMxc}gr zdF`tvGD?NFlRVz%^}j6$MY0Zz73Ew+Ap-O%(|sQXK`(dSM>_W#o>zTV^61sLl z)8LJythuW-%|BpHH*ELFnTHPee`gLf3bJgCC>;6M3lZofB<0_9}iHt>!vcp z#c0r%j#GOEvdFmGx$j$^!cDoJSy!;<@oT{Yn!k9zF0Ns8{N&!1{_PfL(I{Gozuglv zmb$5bmX0uuF7L43AU~nSzS8dgIn-UcbYn%Hu}ZUjN~zZES3Tz)8YeLcqOum67oFT+ zjRKQY0(j&O>!AP9|1FA|GTA}gjH1+<@M*@-y_dJ#J>RGeyXDYaxUete`$UM1)-&Rk z5$KAK@+tC;iAwmszCFr)_WN}ZQ~&Y&If23*>g|OYF&SgH$1?Y>x9amRwHLaQ24D-r zE2CfUPXx}F>t;ETqQ~-cQsEofIjA>_ZoUyh>9X_`o~S!vzDHRqV{EEY-otCWsSYEn zPqPyl*GV1qJZ_q3#oeFc>!j`0qJ1tq9q_$!2%xSlIl)7kU`^#8j;w%R=*tx zjM`4?iqT)+ksSpgO%Q<_lpCVo?|224Io6$HC-A%BAtB32+dE&m0)pZWd(Rut_IY{HvvRFil%r_ z*METHqiPP*HqxI)cUlW?xl0=aKzOD&t5q$(4!0#0QI!2Kdy718RS+P6m@2ZP+GDuk zwjkW~YAK3$HT9<$6m{cFxH*5qFrA6%J9)=9-&iUZYv<&$zO0S*qCEndJjnTx4DHCp}3XeHF(ia-~kzZ*?WC0U#2_fviVF^P%1ZsA+`;|7YD31Vge>@FPrPA&& zMSVfjnO8ykvChyo2!pEEwUP4LSX*0zX{;iiF&8Vq0bcQ_T6rri>zJ+X_;|din8E-b zk>oXXJtcIpHm*u6eiIDf(OIoh;E2DVU&a{K-U+<_UjkivTCJ7Ksf+ewmD3dt)AED5 zM*4XV5e$-Qjd%d<;VlS9_xI9XYktWCVw%DMA+1;Z_a1||1q$Op%1jJz{7Tz@FY8I@ zwi>V&Ws@3WTsDV65Hw?4;Dr~{4T^r=&KtG%tffTsHjy*KPtEfR+%UAq1g+Do&`u(&A*Prs7)kLNcfJG(2cH7K8xQvZ6EnY{qG=Vl<@M(e=YlG{5wB(K}B{q_z$X zjGlUFs!7l$I|y+|(t45=mwhb?Z|0*j{3WI`MoEZ(9O&C=R?W}P`@poKSg(Sh>BW!( z8%?_Srg*y|6KV{&tw{4pi6RJyqrDy4*)Y6VS24sR<~Z5pu{UrJ5k-vLWUX=q64?L* zEmnnP(6hBfF!Rrt^_tOl$f2bj1`8#ks;jFA80{D?H~Z*!JYq{!00G8Nq=K08@IGb0 zJf-be!y}s14TK&#@UA%{K>(666mk!QnmdzK={(7}JE>!K`K#3cB+CFO$E*v&qgw>% zON8myjbKxvjTbAvnHHSU)CFpGb?qiLiH6`RlTvq!TNUnZ_`*93wbtvzX{pikbE=mFiC6ic(p zJ^7gzPi?=k5chUEjkB)~tVo0U;7CIYVBjuhBo~Ki*PXBnsx^9O^y`~Z;g-Xt*0l>% zOP2JAbRc8iEh+(xTtL`zQNUozQ|y_!RB?Ks7kLzO?!zaId+y`GBQRg;MxBy_D(HG1*eTO`s&1yFNBLS( zSSWlgTgZN4L9U;}GK9V5s8NY{zi!$xYlHJB0k<^&&~s2s(IUfvJqQWI=RwH7=GtV! zd%LhrrDKmBu=QVXj|i zT(d8Fk`dvV5u$)K#eHV)^`*Qf2qmVMYz<)*4br}nEk>3_ni7!%5^)_VnH8~3u2Y(66Tg55_an#5YOkwu`99tmfvxMSD+GnA zB;4$@iY~owlM@hAL-jd$iwz=GiN$68!-oL;OJWU`V0Nbym}%OvLmugO7tbWESgU~N zG>TR@8eSbfJnF&bl*>7qKCv~AlEAG=68LcTg`=Z>E z2{0hNp}nJe&{nv&5Ab7F!1!ysLLqWpDcPbo#lW{epu5@igtF5!E{AA_?e-yhEsS2I zA#c!|{`(dS2^=#fk=7%U_9@a^EZl@Z>Ts`e6Zn@U4)2=kIK}ny9{NcMG9Z?boRN(l zpih`dXM$QQbQc3M%k$6Mij~MZ_`1F?+ zUiUiv`OFqkPmF=?;+2}BT?46VD(A!Up&dwMU%T6c24_d)#jGwD33f)1ifAaV=%zKX z&&^S+k+rEGro9$&Ds|F8YVZBEL7$W!8x#n3`&dzhVU=!$?xi>{_k5=%mubxRD&RJ0&|1?Nj-rd4Y_SbNw#Q_IUKh zVlz5tXPQL(5DjWh5|IYZHTv&*G<(FtQ1}X}b&qzbJR?4Tx{Hg|tYBj`^3rmX^@D2L zv5U3E2KxH8-QUn6o8}w}B@)hj91eBG*hp=SU+?H{-##6zLds;3ven7(vJ#obp%dm6 zaEaM~BQUgY)FIh?DXPD}-(tYJVq4f`7lOWYfF$XrjkMeUTwy!rXCx6^%9J}gFRo)~ zDB0Q5n4oo{x}Q(49$5gfylYbMqY(_X-^f5LJ?X^v@CW5Nl!Xp(xP0zRd+;n-4bA!O zSKy;*>jrh#VPImvQnO!k6mq{6?xMRIp|G%$Wf<9{$lEr~i8zxf*}p4m4fR0z?B;l% zn5h~It;!j6s8;ZPVeDI!uT?PTy-ReV!cN4N$MuqY-#dJx(vt75?wrs&&!{@c$;BnH zQaNTHayqd+N^lM+m9j9shJ~^_X&{_4eK!(+y@-rpA!EztCISfLY2zeeyIVd}En)lu zVD4Yz1Q0xV*nDe7B}vbR@KJM+?(_72JSqrEyNU%UOtQzGzt*4^Na@t8zoN@2>RhH} zV~a1sklh5Ko0@O{vElrs;g5JZhX!P~6&>9MIjXq>4$U9Z!6w6hYwfb$NAsKYaskaf zKvRRvFTsTsdySxQ)%}@`Z6a{_g<77Z6-XuleG*j-Y-~*ucu zLC@&^nXKqe8nSM3{Q=#^M)f=&&OJ+q@r$Up1nH9MFsYD+>O+Xv)rh-NrKYJUFZP z=|w22tYT>0L*Z1(!c3O%EskGzftNC1fcGwl!TYCP7#}}`ho9Dvj7k1r7KAnX!l_h5 zANNmBXO6oP6F#0H+S1-aArBMJ(hD!4N0S!f-&8U^OL>HE25NgL*hfW_Lhc2oW|kk|I892@F*&T}%q z&526iM{wR#)jNeGY{H_grgz~b(@5pVcYfGh^Gh=we)B+8T0t_ZaVgmEocG+&h7kWU zU;iTJQq7uL!Qg?gPoPQ*K+uZ-#elqny3>z`1Xd9pz)7F8rcFkf#A+tujD!pFL_`%ZwkqlT)4 zn==YgUtBD;jb3m+`MA|7oOI;^DICRO^a%Q&*LpYDhpJTfF@}&nERV@j=kE>M%aJytW%EzRc*g zm4ysM25woxr0N`y4IQ|Y$ z4KIb8&bMJ&Nx3~t_3}2p8@gdvtmNOS-MFWA_h78FP*);%tHUJx=IrdG1|8Svn9W4l z^V^RX*Vmo9=*z;=J%Cmb0;M}M&N_Ijc@diJDc-G@J=*%&FiG+8)$=X%4$-aa^u-|L zN)-qGoCA@sEN^mO{~CS6)0`!767!i+;YEYi^7JOc-t(SYHn0n~2)@++a06LyKM-gW z9T|2plmrgaWl-CA0cKuZMQ_5d2e3JAJI|>OZ8!m_{dUf6y&WNYb$GYw`Zj#Ic7?A` z(xmeMs4@sR%H&^M4vvIe(}dl?;>})=NwSq7p90P~002Z4@2E~^dfF3)=q@fQEts%C z?@#%-8EE%$aQ(80VZPxo>7ncdFQ|~z*7&rH-bt-K9m&la)o%M{@#Bvl?=su(?{B0V zT(5WYp8gf28$0s_bEBiw{-syF>gYkyczse}B!kKj%@^>lQ$>r2n08Y?Lr|jh3Sw|p z>sGTzK+zbtuLQ_F+sG?j^50vNT5I%Z3wtdA*}BA$)*1vN#Of?jBaJR|DheLowp`u~ z*J2g)x0f$pg2IZiiG}upBKl$PAeq{RDmxm`N&!iEhYRVrf`a7;dt@K~v65m&Y}1cb zh&rw)I5ZPmm%F4zcf2cd6FY9+=n)&PY2vPO`kl%B{M&g0k3?TzI97cO>U;sbs7K5H zS7(eRC?B?9{98Eue>d5H#r>n~wFs=OTKzYe&EMY4%dO zmcCyBi1u@*4r8%nWCNx&IcU`J+!O#PmA^wT&}YCnpu#IX-dN6i7kt{9TV}<6M59em zMP2V9wspK{zXgjfP>mK{#x+)?g7_QeQ;W)xx(VymU+J*V`FiwmFLsLUKhmRr zj+)j8P;F`qQ~rBG23TD!s6j^%&?FrdD;&|v1Y6JDNpzy?Xzn%C6D)P==KJ%h_9aErxE4)9E2b03-T~+`XgeIT6#lIV;_^|LpcTp(09Pl^AdJ+iT)h*N&IN0)$SXA z+hU#&%Ml>XWKklso_u>x^6yRTJ-SrIkW-I)ZxncM>bGyl+vRERW8XWnEJ$~>t6Jj*e^!G)wsU?54&Zg?Xee020+TJ<&MEo5r2ko4$P_{m)cAfM}-*F0VLi<#EE1 z8#`(Kvm-zM|;_NZXK-Z`yTfwNP zn_Rfl;3m+;M-;P1E6%y=P$wO4n;{N`0%Gv}G)=@61h)gWXWcNtwWR!^u<SDiVNGQ54}5M}#%@!R}tws9zob>Xt7AR}1h@vNN6q++%e^ z9gJT4Ly2;*{5LCxbiaEt|5E8+-DUuP16)IE2}Q_1p9LCdvF|VD$-;#aiGiHH0#(WU zSH~C~_?nTd?ceVCk6@Izujp==?(y9$VgVHEr*GnL3`nu0eLK(ouikaiXW(P#PeOKF z%UmEQ`9)ll6JZTv0N1vGqlzz}N^yjkJWgO<#mW@9lslTon|@AW+iy;!NT0|3t_0h* z<9?`iT$~&Cg2$2RMyOpmVisCaK+;pg*B|2Gb^iRG))M>igv3K!a~UD9=yw@6@!b9j zgWq5LAKK87a&QC7YfxFegyX2A$EkzI$&NZbq(9=QAr(gU-<_8X748O2Z;lpy^o+NZ zlSET$ZWm&3dq!hhtQZz99p^JzL-5d#V;%!I@jnE5`F81KTxgG71Y_0t=fNLc*RZbtr1h|XsF>CYSJB!nXnLsi{oi3F+{;>aanqnIO zhy>k__mZ`MX4YL=4@u?!X(j+#Q~*YN)U0ipa~#{o38)j6jqN2=AUJJe1NLta_5RfH zR}W#eN$swc_|eCoC?3V9)T`0E$QbLH!&{*yf91sFVVMW3V`MbCx%E&L-N}i0SHijE zu8rmlVf?YOS?CEj454e@#hdbN^-O>HvZ@%*TCnBXOIo3|V8X7eYp;lS3=4^5u8K*d z+v9PI8EBSqa6W(%(70zWdhP1e0*KZ8g@shf{5pU1_A1|q-$LHpwq(!4p1sAq!{0r% zzZ(7Tg_+Y|EB>Yb=Q-Mt@QT&TETHuJQ-rdo`F|`8t z(zTmQt~f38hrcYb7yx6g$v7dL!PHCZIjm?PcvHaTd+uhM-*LNvxE%CA)(i0{{uK~d z)!HnR({XHpO{cLp^h5+s$%6sViqAisXDY3jh*`i#5Sb)fT|ah0uW7*QtS*v_;zWP} z#UmQQ;hn?I6!QRdq7<{HGRHM(+{TXdL<#m14|#soJ=(A3gLEqT z40ong!?U$XF&HAUiI!7OY3fv*{zWE9EMx$ccpUCtA&3PD;a!>=pP$@sJmtm=VuHSJ z`*s3kp&r7P%U$@B?8i1LeFa~4C!>sPdFt;8HNC?BfQNz=2^(2WN|c|)M`#NcC5IlJ z+n*n20$3GDqI^*0QInmtJRnbieXgZm!y|DHs~L`SaFIfHkzqTxLEpYgb)398k_hRC zfSY%v2+MH>NiC-uJGGKM8itOuG8=?UZP$JtTnK|6YW1M_$p(*$WMWrrvv`n99`2!i ztmLK5`BtVsG*KKR@F0UE0NFH4%yrxpxCP{UeN^HA&M(NLChmA|PnRe-(V>Wkx@u)l zX(SR8FL=CjTRJ@t2$gI(>Lc+8mAMcMGHl8s{q~b7gDZiOE|$k7L@&14b!%Mo%#lDO zRAS`pf%LfwEE6I=YSl%Vn>VqX>pD89qwkDj&09jcoFkW@X_5r=L0xap$GGF6D7RwaROq#e zqnAj3!2(1p^mUcf0g$WZRA%Ee=evo=^)2ITX+UQ@=2y6dITAmE-4>CsiM7ujY=R89 zt$$`}gq&@C`0m1ShAKSazsDzoTbe2UyLGsT9vY!IDPdg!DYFUfWbDNvjNr~5V2$8o zWqA{0|DB_ctF;+fZZOo%TX8@!ZJOvmcloLb?q(gmj&~1mQILP={MDn2_>kbqI=nSI zNrBGOL8PST#PJ4DV$wKpIN#}1y>Y$&%J}cJGF!6(u;0(ICp_MWEp7Y@dmoYUeb}?Guvo@oVNo?`#A07j$I?aWLV0wUf3`)-hLu!8yRK!_K>#NAyDW0N>yS|}~Fx(V{AHh~%Hp;ad^^RKTj04qS?%F%}a z!%G){f-$c$RE?$x3S1MZ|H*qyGBE;4i!*|Go$+9qNmc;DUvJsocmtfEL)bWJ#>ao2 zAnyX+-c`{Bfu{$5m=56S{P~SV#V)Z5W9@NCAPB$=x~Y#eAoLA&u!2Y#ml0>GrtHfz z@Ul@~=A3gW$J?G0fxvZ8l*3UB0JT+%qjdjJG{LWx0HL!i87dGcdHnb|fEsCVmbJ!R z#go+c675-RHS0(^L(J?nb&bde-GntSHz~+O9k-#*VZ|dk^B|6mCrOwUM5xYtYAYI0 z44Z(Tz_+DCj{igj`;%y9H0~!&B%fg3#aT%&+otUMdTqlNcncf1O$cs+n3940O9!grG|!Rw z#Eo4OCFdZ{S~n&Zyf4ykOEuVHNa=Yc)F~(CpJ(_~S_JDyYQ)tZ?aY`FE1=KW+0B9Z&<6FG(cLv_9AS6EN18e^E^?(MAYvIga6<~T0g+& zAEjD0$&U^*kyvodR8y{!MaHxOLV5km5dn`>$44w^!LQbMhNC@5<3Zy!Q6$|ok1HTd zET@m3_ch>?`!c^sP{Dm!0LoH;NJ`-@bpHqQ9H~xItN`g$>&M9zOBV8qcI&c@N6QGM z;6L+uamzkJ51vwXIHC;W-Si1pfkJl+-Qx=&9soktLh|nxG@D6Vo$UX5=QEO$A1PjcA0|l5Y=G{z z_Q*bW>_$HY0jk-*`uH`Nz2?1hI}1(VbVp}7^+Y7oF-~X-K3(#|SB@yv{z!*N!=>}o zdY!I6TJ9!2t|ZBWft}wyj$1MQZTug}d-nZAn7o2JX=iAOCJNZ!yAO^tD6J-7w~Slsn>c@i zl4PLRoAqaEaOmyhTW-UGi)^!|Y)c?Meshv)>7MNLot^4)ESI*#J()@t< z?a55{2OIDM8NcO6dzZ82Rv0=N`#$fYTj-Bb7kB;HL<}0zzd@~YpEMD0cKn#LYHEEw z3s5?55p<$n%-dds-ImVW@;F12ajglNn;|fivS783oCxz5OKiMK+~=W~=nbrlct8Qx zOB1?J4QzZ*Hlv?eQXh8$v1ERGp7-R=PLsII_S?(Ww_cpUvjc`xgiHZhW!dfYu#wNl zSrrj7+yY4;J^I$K)0)K%#Ql=*Es@5jH>XZ2spt7gJj|RrjlmE%to>-m6G( z69+eyNV3V^G+KDMOA>YWY2}E}NARzjh?Ur{B$2!U$2b9hv7!AicSj!h`AZkx(EAa1 zCj*_Acb;~n2_kmVBVZ{nrBx7XW&O;RPP}s4tvo}b$d>#{IyyeM<0@|--aaYwIVSPu z9+^u*qoGZXXTDYX^2XKaJRRu%aapUG46~Q+K^*$7sf_@kceZ+%Xl#4No!VdSr@+5t zBOY-%yV{vgA@{^Me(*4zRWA4uEq?-9P7?ZXvfjI2)%ByuNslPW7sim$Y|iE5t~-_m zWGF4KGxYcJ;H?G<_LiSNi62WGsx&#_l+2M>zaUqVl6LNx*8hD?(#7!XiUL@FAyU4l zYk~chHuVxAqB3KzP9kP>?xO#DWu#N2=?f-Fngjv?W2WQ300^B+EGkXD>9g!ObfW)V zQ0P@EOPV^XpWMxutMvZ0fla(;NbM#iR$7#seB*NjegDhG*ggERe{!p6F;(c^eg+J% zX(FENMbC)Z$5f72x)fB3|ILxojQe;n{7HbM2r5tQ?)w*80;@VSzp0l1ksjPQC;OuFY`hLG@c9pFk)}%b4Wd5z5jxmf@!@4K@=`-R0#-73HRrGW z=g>nFr6VWB=AX;kY4sZ66UrJ-oF7VdA^wW-CZu$mGrP=A@K2#AF>yi@d^tUtR4j+?f>h3j4UbRFzh zGXyUD1kksPysx1cAIU}`;sB1@Pj%)ciOa%;k5t`1WhmF_PoDzM4a%+7-+A~7$hKj8 zLjF|-^t1jAICM#M_-@>*|6?0hDeskzu(Mgbuxy$?jdzNZ*AZ&1-buP@n=$_nG9F3a zrqcxXZkFAaRsq)`m6-I&q=CqnRk{bNv!^fo=Ng>E-{F4EJVRQ5*p*ZgJOO=kfi@R7 zebyfK+1I2ZPX0$vKq)9KW1U~zNxUX_@h3YT+j-jZrrpxP6{Zg_^4U`K1#uqnKh)39 zSn0B80nUM?SaCF9A4(_`AYDteo5~I{e^k2o-%Dm(jh~p6{CIHJF-)Xh2E;rGK^o&l zexNYS5|?B7pPFIp^@W-jAaqJb_W34HgCqhsZ!grtK2^!)|9G$~K_bkXb)xfU_gU|7 zFz1Bu`l^aO#;=FE=>Oo!Of^RPL9uyrbx~tM5-0`5J>N+Q_AXLYPI=Q8eaioRI^$hN zmOE?BWo_|In=&V$e#DuQs|;%c>r6cx+)G5X!^cx;f9P{B4j{)o9-%xZ9QiqEo{mE| zuqpTV@0_MUJcnH%`rknZ_o){2ynYRGvP1aEg zI>tk2|5`EiG{Jgkl~jyj1mUpk3FrVJLP6l;^ly^<#L{5yWn0|sqDB$ofZd*+p2JEb zyQx~@%sT)CsP$DFhHeau7mi2m7T>=wW<_))5kkXH%$wh}D4fUMz1O3l2Wn9U#6+Iy z+@S{-2--~31{xp5C~n?*M}K8iyr=NloV0N!0l*RhL#vYj@RT=Quh*YbRA(gzfYsut zJbHGzXHC6lGKE*cbb{@PAitfjGTSc{z#!F~r{S~McX~vqSm#nGPpwj4x!_-CH#k8G2Eyg*)T*-2|L}yR|oDuy}vBwc~73Wj#f}uvMaK0Gva7)(+sKn@%eoR z?8dmy$eBJM7k;$NFAm~)O}{UD2=Vqr0vx=*>GkPMuIlfi-P^j0As?$-TUwF@&`-ebq|$JMGeR-pQ7^ROD^b~q&BOvM$A7$vJ)ovt$55VnX=61k!7NM$WfCNR z=dON+N}mp-|KgMkI^dA3Oso$f+a@ryjSuqhj)k`}7cpri@OKZwu0Sz}Z#k=Vc_NqR zu%Xc=a%{#ZKqm7HF)37<{S@kPG5*>^XJT`D1MCfA!tc8@&YQHDV2=9se(J<25O!|F zLWDJr03wKNSsmCfgq_gF%2PrR#p)3op(gZrWOWno6e}+;h`=_{R@dAK#4;k-mk6cC z19Ip9Ha3S;1Am1{AeHN#X0fY~uEPI7<5uc#TveV2&fo*S`UOui2zz_joAwZ(HAt&Y zG>3g>F!B~j2IScl0Z=CplO7KZhvXXUjDlV+Xo;)9r?}cIWste$C5K`WzNp`vp`+_4 zknS`BM`{g4FAif-vohXC1zmRkrs}aW?xl)Gwt|b0Kja-1EXq`BD7Vt5Yh=Oy))MB? z32qoU7lC>M)r!;^9!SONdqQTD7In2d)&kUH4}9nJyp8?F!+?{ zbLSc#rKxSjJd+r8qca8I8p9NdMI4X{&e zhp8{bG7|eGfQl3~_Lzg581H`F%3D3k{#V$UST#2=5jHS~QqIL$M&iz%J`W!xvj54I zLU0w^%;#=ot*rYVChj=X3)?=bFDY4-%Np31`xLskrn`8PVmoVSrx9QgCCqs>+Gu%< z&sEwvkiQ8EX*+etG%Wa1PKBf{8=9VCgo~+BOL4*xGvQ(62VfkM(lB!JA3&maMelLg zH~=Qg2epDh1Tw2X7bMp4VQA~D0XwErZMj*_j@ow*+4tju<97{m&h_^Y5z08`tAF7; zB#<#Kf@B6?%C0cXiXPS8AK9@Z$8R~9^wngm7~6oS2?~F5N^WzrzD-m_Xu7TyFJ>9olhV!s9|K@4PV6DYivNs8G4~ z>h>@%C6O5JtFfVZ!0@u^D&2Np(3L~Nop8dqD!e{*4rZt21xo7xSP4&J%$Z%E!-IW! zq;m(C2eZU*_9-IME%L!aV%bJONx43(&a(k(<6wQoM00YamH~Sb0<6@z%-esc>)U&eWys-batL-NmethF zYB@Hv!m!(6*$7D&7;fI+Fj&y!FCS$CSb<;xRhsO_L9tuBQmZ+Ot3ygCJgEN ztIKtV+T^M)_zb&AA(s4}jBPE-O=pmZ*)f><$+Nk=T&&d=DyVyWkolu7uR%G(9SItq zS*>A*_iXl)7i8O>eQYR?AKIC3K>63hqHcn^j~6P83w6;CTVzEBT#2Crr%B}|Q^GVg z#QZJ6xCqyKj4V&lxr$E*3fuPm&cyK-u&2#=Aw;55soeJQ=aOvdTQU_D|w! z0p`C3Hq|k2-|@Z<#VC^hY=9LO77|`Llpvi0=pn4*uKmg{wQ`2K0Vft5g#$y{ zN&9{<;pN_&CTTFwiY?o+rI#AGpRc5qCdUfz*;g_Nmt!%kwo)Y^d(3A62vP)lvGbv9 zWa(qG@*yLG3hP0a#l9bM1P^NK^LgE%7=YGvnNL{Q+z?_^NvCDA&yU0$^5sFy&~Sx2 z>m4QQPAAK)y=FwagDQp`?s?Y-J4EqAm%XNT!61I6x05cHPsPi8dTrL!c93vAWy!U5^{u$Vz8u>Ydgz`H3pP@4dQ7 zPZvmFAF7;@{BC2FzD2?MqYG|yUr<1vkf|gdFoSl}du$cVX1%A2{ol`d6+0A~sNsS9 z!SJt!!#qXrgtV7!t{gPFi#gj3hgTlVVG$p-`WPjOV{XxZY52SW&nBbmr}jjB>RCN8 zQKi(ozrpkb(LLV=ng*{%c!JnzgXg>4P zB1WCZrfeeap>uHKjrN*KyQF%dP6m38n+?-msU)xC#|z%d>ju!*>#x}}+KwGSDEOMk zt_Kb60Ai-aQ-ijEvi1JL69&%ld*i@Ar_+wG8&l20|IBnsUt!Gn3tN`q_u3T;-J3bX zW?iqq>c{iOH+zaQ*ItsYR8o3gpb$8xO8G{+;xT32oU)Kxn1bEF`;Ub_;L2Zqe7;4T zSCGwH_jJ?HVA`(+ATfp#_I_SoSh^tIV?(#6S7zSz02E_ zc}v%L^K1`{%C?3jhjn?tG4GkrfaY%(a1QqBD@(yWdWu3O3vDyb5&5=Hc0QKu0DP0R zIuDdEJ(sWqd$Wr`?BkPNRghH7LHy~?mI(8*?hY?ytlp>Hht)wiQ^Syj;M>Eo>o-hvXcc!-`5%5$21kC~0# zc1*Z=+uvH)petT$C8%g<=Umpnvbl)?3>{xnWetnqlQM}BIo0{1g%$A7kJ=)In6ha= zl%BkCRN6%+Sc&g7rLPVT=UmHJ820pS_Jxt4O_f7`LiI=ai=J46Vfb2RG{1xPVDTuj zpyI&LZG2eBtDnUgUH~zTujlCel>l1R2Di#LC#d5(5Cd_ssO$%I4!{(1`5pLNm; zc&IRuJ9sGHv}=OEVD@Hw&HOYg+I#p77!nBG=~C)4H>*BtI1Fm^&W(i-C zi#4n(Fj6W+6ouEbftc9(wD994iSU_&eqhR}E{~MW6+%7+u_Tcxi@OINbSjrYo1R1X=%i@7F9*OdrNM7* zJ}V)6&Sm1lvn*bKMFaqRpJ#jUlM(wMr8w+EK`SD};+X`qpv+R5mMu@O?%^;P=6FqsIXd76Uvl#kYK4=2q>HkLUmY>(%aVkgcd;=ff!&o+O#?lh%lz~`W4aOL!DqI7w%cw^)gqA=XZU9iqU zsACuys|voR>Zo!bayPpnct5Xo;Gv31Wd)0u_#mumJa<^jl5n_20f6fQ=* zP=k$1SCkT+yew>XC4GX(mXER(h zMyaXAHPG?Nn*EDd*s= zcA@M{%GzH6Q*-1yToUwdo#pACarV!R-Wh)F$EtFH>O5nZqD zrC*sqW!tZpZJvgqb3S~rgr%+Q9t=m7ivfi1RaY3gz!!OF`p}@#u2EGEL9@Q?l{&W% z*>426H|qyUdxst2C4;RGhC9v67P&h33)&)vbQ@bSz8iOCO&MzxCijcQd(PNtEbjnB zthYdP1ic88U-B&&?cNSPP^l}j=^OpT0Q$+!D&|Ezqu$Zz**Fk3*T1cum=w($Q{~by zx>TF8Bc27teAAo(V6m3~T&0a5FBvsp3$}PIpF)GWtv1a9tpp-gix&^K9`yVh{N?B!DUmsC2IdU9+es+R&f#-{B2-Yn5}CA%Tdll}64f)a)qV%~7MDUWg0t zMm^TsS<^~NN{pSqbBh7&)Vzo6cN&VoIdv}XpzHtu?mj6J(-`~d6Tk_=-@ap_6NR|S zDdHA+t4@<8t;gYP0HfRqieFRKO6 zGT%xlvs(9B_%oskm@U^hIQrx2+0@$6d&5PGceC#5I$w-ZWFy8CnO1%s0qhLc2P)xH z`UMpT>h7vfr^J^;&&cxFd9^5x5TbyM9)XsJ&6SEox+>=rt&d5Hst2Xk`rR+`BZC1q{) z^^us52={v*ddrm>SM(mxC+o(dOVsmB*9%#1eGo1k&^4OfZ5Y`T+6-2RF!^GX5xrvy z=70JCr^n;n-Ey59&!HG!o1wy++}w6CBT;fTzFsDA9Bj#wbGrvdRSNHy%5%eB^zR7| zW*%ui{m^D^-F@$pFsE(BP~L?T+}-+a6?J*=3w?Od}I(gruv zG5@@Ijh>Ks?PI{G*EMQSDFvI$i9BN5hmJ}mJnmWWwFtd9v&=W=z?d9dNGef|7^_r`>&PVBZJ|6vur z%%rxk^p-$E=(Zm}y<1TI$*r3p4m$b;4M9%`T4T5b2nVY|I#VwwoZDz>fwyl`b^Jf9 zy=PccS=2VH2#P3zBB0U~r8kk@ML?uO=%Isz8miO)5s+d5M0&RndH{idbWkZuQ(EXj z=>&*^0V#oZXXc&vnR#Zuf8QT2C5MxJ_St*wweEGVdsWo}6r?dJTa}#Bc*(85dpJtG zQWogs0gk>3GOV{0Jy!Z^NftC^;to$gHVS-ogx!l;f54gr$GRRwGb7HB2L+5}){e)mu38pO&@woCs4ZL9VX1ly*&9@v;uRO>1a-tU2hZ!J;MhFAw*EhQVo>tf0#LTdKeA+Ng}3z*Zjys?qpjU`g)` zaQAODtlir?sbM**kn|~AT1tvJv%1wd4G4UQqm0bT4?ohKhBm{{Az%-R%B)YWe}1tA zAUeHbBbv}LM;a5u`{{jUY3nDRS00C{ZR5yNm*0Wv#X|g}B|*N_+BSsLHlk>z_0Uqa z7r73_Hlid!mBJ3XLD`@djx9$h3B=`lAfkY*)w*l0)_i*B>N+ z+)jg6I^efH6eJqk%g#V87z?$TQhoqRm(pRx#S-JvJCSe(28L3A*}C`;Ib?ygWln(% zxRpWNNa7%5zwR+*FWI&}?8T!SHC%i~vb6BU(SB#;se78mJfLP14O_|@z*gAgfsp!D zDQ{AfqwQ+!nI<0E86Fq6-n%b8um;kx&E2rp_-vNy7g%k?1X^0ig@uG1aH5Ht5TOj? z9|IKw<9Yd^1=a$q@lDA_q*aJD)6MSDP+7Oai z3SCuYJ+ja4&NiQR9*!>L+;j(tGjxtMt>QEzWLmMOO4pf*Rh~F(m@w0dJbH0EjHjz1 zC3`8S$-@%35lAILvqDT*F=0PXYcL*E_xCOM1WA^;4`#m<1@}qcTM{0&0Ccz~ckp zvK7F$dIF)&o4)Ss{E8?;qA^~>cQ!PC!{Yp$t4XWUl)UpOR7p!!*V*qN1;PPBbqqRJ z9VD49d4P=22Zfej=fZ2w`zb2#X~)M+>4S=eXyMyS4sog6CC^;-l=L?a1@hKMTh>fL6pvRhbe{ z`PCfcMicdbzm#Pp!p&zRaT7r)Xu$^X)&yKLV#o8v=#XoD(Zi$Pzkg4#cs6|v(JTAy z1=xC( z+kVq5Px)mzS&QT6?4ejgmpuZ7{Ekq3Wt?p5TF^|r#>8N$&SjwA$p@AY{V15Xae#gB zXdou}h7$HuT?*loi+xedQnmG)w(}VP^}hf5!5ssV!oiOZeua|x627(}AyZ|u3RMfd~tyfT;o9u!vJ3hNQ7W2Jt(W;WYA z^hfNbDLa7w948ZBt>H%EO@g66O>*h%D7nn-{ekcZ+D>jqrL2bu7ZL6Vc-GN+VO?Ya z3P$FI)0_ZSZ!qA~-0D%qcI z(9yi^RhDK*guXWM@-AebxcCBFn$BxiYe^DskYe`;@LeCtacxAA> zYeyGVf`z_-m5dYLK=}Dk?D&TA@!uE$^#lrnZ2nJjh|Q-V$rZ1`IN~$gY>Lyl9*Bc} zJ?LHVaRM&aN@blUf3d5Fm(|WNqt!#eCblgiGr>o^1}{^d)V*p9Xaun*q>#>lW&PmZ zOOE4Zu@7ju``)j9E_q(r*7ahhGyk2l%nuL#_z6p0)qZfs<{K}sd|fBoGT=vyV&ZZj znxs;E!$2RbI-yojz}C4NQ)R;Y$K&z=ru39f{R0D8F+3{1;u_6^4)>R1hHAYmk6hBO=P)K$$&LLdKk^Xk~Tl=kW7CC>o>9mR-B}-ptX2g2O{8kU~wc4Bz=P@$-yhuzVmW*J+UW zk-ac4Z0{pmz?9v#eEK=QF^^eN7UyPu=br5DwD^-9G|XXqZ40dDz$Cm<87ok)4GxKK za|Y}P->7jUss)>$c^NHp+w=T#Avoy5R(;`QpOF7c!m(8NB=^o%7432|q!1j@IPb_g z>3%uPs6naNBu!Hn<))5d?sot$hy7YxRwIwPS(%TR*s05h%0*!gRUK^KPMa=gx!(

a2ymt9${wRg#|j!P8HdU3yx4A>syKnn6G*ICQ8?F>rK2!6 zV>t#uzw2b*!DT-w8Q&FJIw}khP=FJ@iuK|V_ zfLDa_3Es0-C`7j*$RXT%%gE;@H$jW(?y-ZW^i#!g>bUJ_bB#P{-~l#}=>>?|VZh4j z1Gt5h)N4v|fbAC^MpxfLLjW>4RUK zKXUtEK)FYPV^DwSkT&k991|8p*eAGQ9K2o5y85}GMZ}bsJ}*WodHzr^`}nNc(VRsm zcR{n>!3s+|8B#M+;Dm-g#D1Sl@+`lC?<%hMBBkOv|xh+U}OubvpMQq3jCw&@Irk_uS za4+;HEG;b|nT(y3HY_l;MusoaX`dv-uWX$=zk8cIY4=+w0fAGvmQ|36P;Zefl;TCT znDM80#EAhzM*zJWVy{vImWrFM+d9Zf<1ud74Yx8}y0D;N*$`9-y!c0-BdeD>dMi%t zw;*)}IjFn5H!3iaq^Gj}yr>zFv)TSYr*wdo^It21OO}jQ*dT3uD|+wW0u9Fqny5j& zBZ%lCd*F0j^9;U`Y{r}Zr0WP`Fqu1vxz61gM;5D{^1CK9Fi#?aX_>? zE%R#a=pNH~b2LWLn2%T$y~*t?e?D>ZRm<`jg@H4D9Z&%yD|BFJFUL@v&NPd^)gPHd ztJH{B!Byjx;;z>}$M@D+!)~x@kBpp`>4rxDD&;2fVwk^DIvbgRiE1KvFcq(=N zt0f*YE)nzG82!Ny`HrIM&Oe}TBx~Fb?y|8tc!)gy1 zHh?KRPuBLG$l+R&uoM{;e+@@4Gc)tdnfS)!fO%}W#N6vC-Svy~!%KC$yjbti~uBDpkyvy1?&I*ssl< zln2NrlQMP8OYUQpc0{0ZVm^MQj#Jja@cZT}5DNbgarI{VD@G0|ehKiYD%MSs`(S#a z0@-q3orX?UzaQHnEvaJ)Id;&UwPOH={F&8sAfO1$3vdvg8Za84sEnDpVD^)$l+nnf zueEoFgmlL!c6sZT^j>BV_dvv}qbjQYL^(_*FG3EJa+jju6fEW#a#DD{)x-zBRh^&g zn%Mw=h}*aw6fBF?ZGrAuVn|Tk4m`y7%+hJu<=XBF$KBv*0?b z%#5M5J|H1p19A(B`6smMz&Tt=xyRTBRDXL!ZsrEx%xf(eCuW9%h5>&#y460U zgQ@&mAU|72H*ro|(jqDsXju`Ly2=8jTr%uAqPbYp#$psm4W1IUfGuqbB!5yW^}IXm zrKHh{WA9#_z{(h@5tYB?acguj`cH!cgddeWPWO6!HJS?Z7Z>2eR@2)~{EpZU4_P33 z=N6}vm9wWzPr20LUS&zh-evN<3>44rOVp28oYu`WZR1!Cnu))0Jkx}N z0PtR~o~oG}oXi-R_l*FJmH9q33>?nmIR(e5laj{$rfuq6s^-NfYX>CiD@-qB8*4UC z`AxqQKc3^f`UIbzoh^?6IVCBY%z_-}cVkVXdkZauES=cv2{lwRIx3}})lD|4z1&p- zGTTA90oq1Xq$V&?#aGJ2v(Sn#Dz=vVDy5H4U-#F+_uq1EHZu;}AXgOuqY?xwziIG> z0QsUzfgrQ4E|@N(BCd9mJ;adRnD`qz#7FBMK^+K;wc})M#)rkY=#Md<=E6RnSC>Bo z=Y{#bO>WIWMnb`Ht3wayV3)x=Pd~5t%Z)vN&%#l-D^&I|DLn$5rsN*QY&@ttl=RMI zm9H~q7s*ws4P5k$ZMU-KK(>D71{MRCb61gNkQS?d=Ejm3ZDKrK^aI1Wxy^k%kiqNd zO!es!K#>wl0nnl+2ux)G$EngG0C$I!G@r8TEXmIwLe$t247{!hWm9 zYbA0;=0e5GGUIGOaH&XckYBv>hkvg{>tZdP1d#2M4@68f70T5Zs>3((z(`gW(=^mh z16!kD!RKhQr&Oi!w6`Gn$V@ox$RjLFQG@34*3G3lp}iUw2@=jDAHKR)99R=S1ZB74qnpI;jkH*g@9hq><{&m8nkdacEc*6IIu2lT;>{= zo*VknT}jH^fDCN)5|miU*|8!}>%|SEF@72T8F`ShX)MY0Ptv?MYwbQn`vH1Kt+})S zXX^M^Sygd~sc>3ALR{Q5;J~H2-vHfbNWh?GG0unqdYv9Uly`4~lAK8!3iMUvBQ3m|>92DqXLMP+To zXW;;NUiSetN>|l{O8MriWTneJ_YXjWIu*els5njoCJ2T@mmcKVk_9x&2;%EykdF&9kS!k z^%{K30|W3#%-+TS6oL5j;a)0%N7|q32P!JFWEqiO%6~sLNc)f#Hy)^H#?W8l1s9!= zuoVBRPW$hZboDXtRc>e|gY(vdTzi`;2&xqR*JFbJ{sK>mz%ADUG~l^w^nX_1-Fyay z72|ER!axyuz3s_P`(**>KZ}9?oWJM#R|U!adHy(V-}Cc=Iuq&|GKm{5tNWi-0;OPt zHSuTH@7Riy3t&5?hqV6vz_$71&xXB*%>N*2EBLA00Yyjuvkw0HmkC+V2NjVGN*)A2 zO?S%$h5mmE75w=}_fX(Vjn18ky94MP5Qac-Ufnrg|I%P)t7*8#`#w0y{^PGsTDF1u zshUv>d}I4!$qB_GagOlg7w+lkX90w+?@H!>%tk)QRwF*2ie0>RbDlhXArDvn5_$XE zYWuS%z4!2n7{v-0bZ+k3mt6l?i2wJ6v4O(YnQQk-z{{)!(^1#asqtTzxd4YDck$~h zIQ7|9@R;8?9D@In75Urc&$7X1i7Y;{&u*7cLf8P`4-SB||EW>)=gfwa>xlJ8 z^j~jNMg!%ieSJESoPSkpfz53QK68$jYrcC`2t4o5tqV1OH5vc=+j{9hQ46=>)J6_qi%q zf5M#10O~M#?@RvFimc;hY|Z~4MIrRdG2m8VMZTcqr3l>LN%()?j=WjU=75V{u|Q-W zwcREUqUhV}xBvQHaG?fxDLe+RK>_gtvXWQbeKP6&@6Y|mT)yWp8W0d8gdtRE17-}AL^3H_>VaK z{_A1#HNibfq9Z%WsTq*4@#tRpr_#b7=HYL$6#uiF{^NFVFmBJMaY?{ntAM-7QEEv1 zZAky`5B_IaKYLBKzjjh8s9{O0-@uiQ@K*!>^%v`8aS&X*7;t(Qz>Q5k?$Q3&WqcPw zk2fiCJh=`@+s@GC0(e^);B8%F(Qo))_1=FxmsbT?Uoaqx_>268TIcKk(!~0ILj~V* z+mz}GD7%x`;Fn4PHEiJR2Ne8M$>@)JJ#5n_tL}WZLm5*4shxF+`wA$5{nt3ZkTnTR zI(UIm${}xIK8@A?C{?4smjW&`qCFL-{5Na&ujOO=fNTl-&4vsq2Z0EX0{r@&e~O3w z-z6u@36{h4XGVbJNG|{NJP~L3uX};@I4CkJ-OmWcqcN%csM`8+gvp+T?in!aU%+8S zw?{n~_U{#ZELc1{3Cs%v(i;$-fG@1`6_^Y<*?^FH%(-ejq zQNJ4+0tB&E9o4X#cIKYub)oxK#m<-FZokwCA6)FCf}0~nIHihxcJ(%~R#I4)advcD zH+j?5Un~4TolkZ#T%#kR|30?cJd~P-hEh);EG2%;JT`(Yr3^&KDGJgBuQO44&WWbR z6-PrMZ+};YVWRMyH=V&MJq7;=s`x%!f1cUacnvf#!Vdj8r=vf-hW;VI23%rmmDk(YY#Y2vi<$NaZZpzdYcd9i?d|{gqhp(yYPp^}U_)Uaw*7@P>R<|c{e9*k>oIK8nGF+QEjf4igr(WaXUZ_ATg~T6Ia<-vu z>enwVHGG;lsJL=qLPEddjY?0smiWCKj zT!?fe`jQIlBT%pAe13tECe0N1DlT4n3bBb@&|jVF7wtMYU0RneP9E^`>EA;`EIrVp5{-chRu&En?~&hM)olWJ7YqUy5M0##pKK8Dx8s=Ul@;VL zlw+dQ_N}FL01p)Ud7dZ}Q=a`t8TKG8W(EfW2yY@dN zuAjKAu5LZsTI+sUNs+quL?QIpjX~ANA)!-Mxpf}<+l_bG&m9As*7gy3ji<#zMDBfA zV9B>sq}WNlPpj)p(KK*}a6@ zbYN-k9LvypR@*i;JbVfe0?SP+RY!S3(cCQuOr;9Z87TiarTNkCNrzUjw@x`(0px+!?Ysc%&gpvJ zpmJB#_DIAMEq11~vy*+%(zma?NHT?n%4+Ab%uJ(1;4llHerE1rfio%Jk?QplkzuRj zyJMnnutQk1yrj9DPcgTBfPwsk<^`ug4%z!K*K<{|&1kcH<%PK*o|Du*3Bf^_D0Izi|WFb8*G4!04U7QKVk3;9x zG>e_2Qh|basE_|P$!=+Yk!HYv^9ZtE=5F5qX|fK{?0)pprc_*kboT3>0FhLg9GpCE za9zHo8Idi02cho6lv8GMW8f=!23F`#HB3Ri_wpFrg z_ny*Ys>%_=NI6iQ%%31YjM6=@e(O6_z|eW?a?+K>otRNif0&cfyuy$0uGP11=^l6Y zT$vEFsV$3959Pt0n!$8SaX;-Sy!D#;7v!Z8?*T+rSLuNcN;pSSI(>q!S83R7*w8)BiFtG_R3BUrHNxobV)BSZ-$&tS==h4Z&x8j=lIExa+z z@yU-py~5~>;5{z-y_o!uZ{!CFP->z06NJHtr%~ zF#W3s`+-(RsreSN=_iOqZxovaJ03!CpUa?r>;ky7{%7?<7P^MYKX87?Zlr*c*w(yV zj?ynsDL%+`Q%ZrxhD%;}ICNB2q1G{yru2Vv%0JeOGvc zZ_)3X%vrD*wC~j4`KGQpKSL#=x!yC-%Q|GA#2eq%O?FVmUlq<#|FR+@FOp5m`ynrn zvoU!U7TUbTSf`$R&&MR>cXPpchc3W%^&7M}Pu!C4C&x>e-+KD!z*lINe9Dg2pnX!| zBp*{=ZoYeAPkKtAgYpk?p-ss7@ywdTqPG1P$38TtgmQxelGCL*nIS{q;vwX5)53E# zdTl8W&H}Zv!QtV3mZ4jGi9KCH_>3Gg0~tYwZyqxT$Kd9zMfib`7PDT=kkXc9cY7JrjMls z26_11ULQY5h{)A+kDs0pz0SF>HvbJq6`$Or*JFb~?_PiH6k|SJ&diJx=3G3kT847O1OpeZ0y zxu$coXW|8}W%_{q%l6kmf+;E{(0p`mQUSt z1euU#`*o04wk`Wo#z#kNU|No!P`dfxSU5ZRxIHhP1_E10;0I(}q<)~$Hd(Xs>}t|( z&^=;Ln1OXIr`fz_p;<`sh0`VzO<=LhEvAfcwRU%v9q_|vET3yHD!j^47V_+MGNupt zSicQT`T+4~r0KUy_0tkDh`m(hrrg>zom>(W+9LcUa;@nn9wh&-_s(|>+$uDxM> z5_!}W^x<@mHQe+`4ZD!;=T4bGv-%LDsYuk|uV1^biGwNe&{i2Gxyj$hiaS!zs{f2s zdXtK|(LLgti>*wih0fO}b$o9<7jvN*uyQ?s52T}@!{_I0a~eJD%k2a^gmYoD1TN0F zw&c0_0qD(t%39QSXowDozKwYG^=x*0XXtC~%L!V1?CSj!iy08`G;T&znKjvR!RM#i znU;w=)-JBAN3jso(c)$)u-U{kf0{X_1fBHP|OrZs45ugb9x+i%M02^3I2G3MQ@j)x8=q&0-~g80@e;+bA=$!611;KL?*C*YREE z|8xB-U$y5NZANN832~@03vpeqni(F>2!|}Dt#PUI0Ikm~Xr^0;q>UiEW|xnb0}mQG zoUDwuvNz}811ELLq7OV6{Z2`8GE%riznrPN;!_W|}2)T79AudNes82$Q z_L{+WVYc2VC56!3!3JW=iXWW_u!-K#`Nkfkfc`#r@&x@3)4lJV5TK|R4S6XV6@6j1 z$xyK6K37hTz(wJbrpMdm4TLX4TVi6ZI91u#n~+yOmN+3Cz4BmPht*$c6C4={2n&NP z5=;i~_OrQ@r&q#S&xNGvEt4M1A#Nk^aUPnsnRs#8MMRwfSGMy4Ej%g)-VNvj`8U4oXJg(O9XIMPka&`>YV_ zuNb$_2QA|dO^ovx(5<$fQ}2XmWooC3iX3f_@bD@)wk0*%?L@>(c@OSAmam!^a73`G5^+KoXN*s` zf$tA_Up4wn^Y)m0;E#gByo=5`)vBYh-5SvO@ECU68X1@DkfAct8%)?9*}c=slGM@U_FWD^6Sa7poRqL-ii#W_;nraUiGCffP0m8Iru>W_Q={mZ z;zfqdrjul5v>o#=j%k`fIeZ{*+SEOn*EtMVG5xBEsx#xor9x#~GB=PLm#~}FK zC-Oaev3T9HJ0X}ifI$ECk$;DK?b>wUTp?yu0ICc%-L)3-L7$7DlUUR)x5l4_x^4MK zkLRyHG+Cuh5))HmJL!~^>iTV?kpKiF`e-7CK2~i)?%+h5w#7qmnu{$2Hig;1vPfXoe#h@ zZ#-g?+i;$8a!O|B%@mJp|NXnzej|u;$5fNeiAf9Sz}=FOYecUrUwOfRAU4;n#X(RP zTK&E;(H!YL&4zd5hlEoK3Oy?(jX=w#(QB9a8^Uj^1H&DVob(w$ZB!t-5VAG67!IR| ztFVblAsEkwY6K^^su!;)*fN)# zM_Su1SfVuuw^5kC)}=k=J1`#JUGI&!?VL!b&Ggih?R9xYk$@C@;=z1aPjEKmb5oAb z3tq=@ z^lbKn3c5j0wX-e!{7JwP7>0gZvBt^=tGpePr_GIBli%vKgn9ow552E0WX9pc5o+IJ zb`aXKu6jMOD)sA&VV0%3$lC8S$=e}0$RT)Mn3Ssv?0WZfBRpGP( zHvp^k@B*dYAlN6G=n*K0BS$p*o{pNzR9Bluk#bpYox)|9DFnFw#RUNNNx||7{^wD4 z@aoqXHt&yf7)XF_e{XunHEv^6Nz>&E!~KSw$d!vvW46`qRoI5~yk7kEay!Pq&=f#Y z!Cld**KV!>pC~5u(TdFgrS^v7&P+;k>rv#=%*X&z2x=3u%)AiINEopxPowI5?bDQX z@s@Ah^!7v1M2j_hZ#}b9Du=w19jWfCP&pCTj?i^qA)mOxJx*XrCtax9_UQuKLVFk( zOeG4sihOUDB19}5>%?=vg24?RlELbcPg&p1GN2Q}CQ0b{%el92_XExREEqof8Y; z(V(AtowA2=CZ!l>^rpS|h4L42$mii^Kc60F6KU&dUR*la=bKkUA}*XOkZB-oKUKvW zs(qYamI!~iKl1thIaX=mogN$E$zOFjZp6)OAT92|l_X;zB+TC8wUi_GLh-&RQgGkU z5T-J`^aL`X^v)$SNJRxNBjhsSas-7EQeOI{I$aFJ_gC-XJu`MT4R!@M4Qt=Zndok_TdD(4bY>cE<%%Fz< zkPMO1qMsW6tWazc&^QNVrKg*WB@2iG$&Srv4^+9!dq97yOxGFIp&zQ!EyfM0@DYu` zBe1MPB^R-^AgU*WX*Y;|tB0@+Qk9=ufuZNj(xKVMtTv|pT7|{rQaLa@j_4El|MT*lk>TkMu2)q zqd{3sKRVp5pwW=fiqqyY;y2dd%6Y)E0vZ*P1a(cDi7mJ~h(_*CXx@&Qkp19ldU7Ca zAlcImOKRdJ-s0N)A`N$F6OA8a>w2_y?Th8Z-Exsl8nKslCaW%qru;(rOK5AMTDJv9p^8j_05E!1Z@mG+ z{|l%MQV`_NBEG!2_|~4H!+qQD^)MAJBLIj#SH%xQafw5sH>S0|)&jVLNUNuF*&sXs zsk>b?E^N2rQPVxd!^-nOrPK8bwyK5Yw*hNS6T~evoYkk>R5rt4CgGf@SR>Pg(_-BQ zbc>Q!PDtCWh$zj4Bs9hRE54v@X30|30wyUZ1xwY#ucn9Yo!*^@k@AdBpY}~^!s?V} z=^@+hckn}=_Gj4YopUmcFY$n6xT&pJZWH9eqR#x#(NZlc`K^bJ?_U zYl}{PbEox4tJJ6O1yY0i=uPc?`R`-qb&#O$L^*#;$3w-OK3KBjx^uA7Mr$FmTwC^1 zV%L5TbP9WQh|ta`_7XCK!Cx-#HrJeg^rhCh+0cBH2d%k)BOx>%vALbRRfA_&^iFHE zWI3y?176J=ORW1LbW&Bf2Er4CYWqoXojYpu(AMYxt50f^a`EN&_1%F$Ilet%b* zz`5~j9kCs{ir!kyM|bEAHDrHH$r^YV?ZLGcQ*R z)sn7i&5yM2gptg)LcFF2Vn>-fH0o=U!#tS-D-;DlK~rM+sEFACYp8n~H$mD9*RrKE zk?zqivgo6C0o`h#g!S`9TL$ljlokYoDRlI{{Y~3o^_cfG_C5{OmO=&Ibj0!oZV>_9 z-;}!-FxXOg$YHlJ6y=AHueA)AVysV!oyx8(%c=?5FgJOdq;WcDv^Kp@(I(lo@vLe1E${A%O@w;JmK2`OwQw69mP$9}thgtq8)~n&yyTvc%hKbgCy*FW z$W|zmbH6aB>nHUiYI?WtwIGyCxd3Dx8Q3=+Jt)GfioLf14?Bd|1vJic|XS(CR$N{V+gXe%7tDEyy-_|fb9 zsl>U|$n*Ppy>5wEZRvhJd#k#qk(m_iUmY#^pi9jeq@zMX{OYcS$N0D_caUhBn6mT{ zT_5~%myCq2MCr~mykghjUgxlZdgxHAxtHzGOmxU5*z#Xr5AT5HzIq99B$Z+J&edka zV#_HHCU1--%D+@|As@}@XW6l2b*s=}=CRxvu{&`$oa=YBY=-=++C0^jM-1`9XU@QkwH&Tm6;GFs?hxs2 zUaTH>dIGU|V!%@^yRh?`C~UAwSUhq|q|>`d({X93eEHhQ!~K@fBSC1^RnPg^h_oyv zpShLFy9XXVK7CeJJDc6%$xK36XseVj=+^kS;Yf!jN#XIw)JNT~V0Zmj`vY3|H+pTV zBVJ|qD11N&2i$tO`SZliIzpwcec~P4IvUK?2ZVm{bVf*+%G9lhE-I-LXwvlH-p421 zcqmGTrhf6<`5*@)*A&$D{>1%F->sC-93fbAIs3TFq>I)^cXm(MZY{o!&y!)x|2{_f z2OD>aHqn`%W{$q#&qJ`17zT)wy-cK7IJM*qM zJspx~V`nsp^u!^-3Q_2X?-dh0+zLP{n+hblVC8pIJtRx7F9s08oTf&g)593kCG9+~ z2y-hKET&bmN_%VC1mCqix34{3%dzw%r10r>`e`aRXl`BWOe+L>WS!h_$9&W{C3OFA zO!z9ttyyBzv$+uAH7HhBx1daOA;MZgDixnwtID3|lTGmd*3U;>Lq>^HV^0A0SdZca zT?t2FNXt!y%odfKy1%8I2(&p4lmc@+K z>4jTxJFy`P6HUB`BTZC6$bmImAKl*G+H7r{;i^VPNQ?K@bS+PZoNXao>C1%`#mZLX z_Ok!mGLA-HUz?qyOYkd37ZS&^FcaJRt4iNf_RP5RkmhJLU=t0w?0qauZJvrbC)_N~ z<{Xrq_Lg%dm4H0WtCzh%5W}dWs$gO|2|Oe-XesKZGV&Upg?PvQ$c53!73;>$v$xlb zpgV`)K!|PQP-?x;=K5`5x0Q?4QH2Fz8%i>PM_5V4vc+(4d|)|!EXO*My8{N}w;oO4 zp47r43=SFj4u@bE2tm)8gej`A%#m^q8n`)7x4XNmWlz=F*Y?O<=56S{=l9X7^qywz zn!|fTKdo)MFO1JUVIAX)1Hp;=n#Q5B6+?&)ub=L{&v}4~AG8v3Xoy~QQjBCW{2VfI z6!vVAo$!wBG&a;oNhz&FAjJ|(S;u1iNy6>iIyYU52FkE$F|+5+gu6*k6rugXDK2|| zU%I_%c^t=suE@%UD_z<&(r9B$ayJS_Wy_WLd;B=3lw^Ki>`-o}gNHt6yuhZL)_kc; zmuRuuYK1L}+rY2rr7wq!8Vbl3D#^AoYahPj9k1c7R;q^*+=-``t)=TcrcvuBdF)f` z)?$oXySOhXJ>J@NG1=l$&Hb_>)-tk`ds%!c>s~tHnq8zi>{!wL$M2x?)}q{UA9p5O zOZwzZS%o(9GK4I`HuA1k4%OB{IisNAb}T0m0#erYCsXHaq`mHU`#NN7tPB7LV%G|r z#c zuG{rZWoKZ9e?T;wyE(dfVb#o3PH3JQ#RjX)7q<1Vlf($eX3NJ1T8;e>&78#krMX^N zxTz5qS#hYZ$(<(v&FZ^gaq^{3{7}?%<3PL^zBJR~ccvTD0VDpt@0ZGxYVc)O2=@(D zZLiq<`A?Xh2F~$F;MV&OH28714ZEh=4bf1062mnx z4E`LMvtRU*yE`kB&)0#j<{LAn)-u?B_(UyonJ(J@MeCSNZQaD1Od5gT*IP1=#{K#d z4wf@YXHI_5IVViCPj7F#IeUUc^KGuwN;m!V35UTQ?o9>3CXuC zW@6H{{$wn(zE?Sob3hH#h|B|Pls^7b$Yy4LIA6$l8P}1b=!9$V#32rL?EEnIP@DRw zoMsM&caI$1*%`YG8>iko>o^a z>JoQ<(9VE zFtw!KTsJZDA-_^1L+ji7q(UI!QC|Y|E7|LWd z2y@ZRTk@>%MD6&AtHHk0!obaWptr<;$L6_n3;KQg$VdGV@L|}WJ_cOAmvkV?-G8W= zSgLM2QHvY;HZUq>x?25b3?<2sJTR$hkXTzj5qPYE1E~MrNXZ&jM&%FX9MpWHTDS> z&reNV|30rKJhA;f3?0zakTc?}$vaV7JcOjeGp2ICKQo*8P>sac>$~3fy8_3fvp%il zOH_Nx_dr{Jxb>4MQJ>3)Fst3}K}eYm;x?_%SSS?2H?dQi%zS$i(s{w<9_?#Y#YF$? zw3<@iG0o?sHQaih|-ojyTq*_dSdp#4K3O08M zSV<1rM&^k2S4IAe)#IK|AbMq_=E?Eo@Y?|&uHG5b%#KDF%pdfQjaiUZRC=|M*s2-U zx9u*W<{=WZ-1aBsTr04yiH#knt)0;W*}NAOJ$0W^KOg?w1XZ2M_Rf~ul&@}mS<(!%H#qfAC;-}qt z8dNr12f?pGM1J}R4?UB(Sh4o4sEE@L>S?!gNQ&U!Rlxva1Utvw@mmAu3?DXhPo@&n6=3a7l z(65Kc3?9whxId(K;_1nC! z1v=bHhx-QzNuvbQ)dk=mWtLxe6_YH5)O(tR9ojz0dKW3%-gdjLlsSS$Zr^E&Fx5b` zOLerm0(-5NEBZ}3;FrtnRS_@uK_`hdiNvuw5r-K$5VlZ3i&Od3wPz4t_q5N82K5jE zw_QkRa3Zt5KF*xpF-c`lnT6z!{nL$7+`v28{a|``ji7$?Y_Z}#>(Yw#xupQ- z#N-RRuJ)uo5!3B;M5!}d?b{jJ^6n4u53<({TFxUxKhB(ZofNiZay>m`@erGGxvM^4 zougc4<6R?{ApS;A)j7QzNjPdPWkVsJ3~_|j?@$jffs|9w$B&d^f=RNPc)EgfGV?@( z-ObV+aCGKTFJ7vkS_%G2z;YlDzJ{|BbV9h%x$ibk@z6wN&5fDtWSE=ro{A@#qKv*y z6C5_XINqpf+bXy+_ICl024dLxKoZe%i*LEf^d^_NQl2M>!6s%k&jy4YZeVI$U{s%) z@VWC(SkcK7sh^fe``t!vYYX3w@@5~tz&FrI?T50iHrQNDEL0oMRCY1NZ^hVgoFP;X z&5wJYbtmAkbE1c{KImrPzD^eyvqM`I4SCazBZX|xiaSjW;=l4PJkB{;J{pi@Xn1CE z*K7h)`b{oxH@7UgB-O+VGzapHes9#n0#-Yd$huzg? z(DU092BeuiC1V9()r9S%-wfyg{zMUeRJM1QXthnL*qO-c61Dsm!JvuSfjCfl2rs{~ z_XZPr`F74j1WQq?BU&3w!d^}bGyuL9SV$x-iHzW?}(W&I5IJM=338jIM6E#9tO zw?blW|AKXXjUU6YZG;j;vj0pBUSKeI}-BvA|PKH+T`gFOR&Ev&x+lzol8hn$&Y} zNK14{)N5@Jt%fW%-?wJo-RiG%HN3g}WqrTgd6HI)Bm@`)nVGjtHq|E;-Q!}%lWTr1 zu&lWmcjfHV4}3GZwR;A6tVGhH8TkBaHDT)WyWD0L#q!;~6K799mq6|Ogk428^gY9K zJjJ(MuMTZAf1*@b0pgN}P!(%}$qBah_AKa!iROx@<7-)J#Q~!U%)5lsT|s6%H<5s( zWVJaPiDb%*v@T9C*R*op;1PRn*0Pw1XyCM9;8YUbP0ylmg0=#X$$*b>3i179vC*Mu zzxzE;hS})Z9Hg2i58Q3{@XQ9u?%X!oUtnU}O?95sa!XiGuKxrna-L@%i76(c;aQdcpV~YE-j!J7+!TiBygOB(to>%Sdg`8Pyzs8B{ zme%!)4kl)Z*q;pEp<_><-JF^-XpfV)Zh{=<@h~zx=~z8L-?JB(#psx);~W}RxN>rm zXex4KO^P=uKJfIaykjxi%w15BdGaOaiC)e1T$^f`VdK;`*iCnw0uY2x9ut-|>(K;C z19*eKk5BL5o^>idzA+V}QSSjUAI)P*-m?}`gLqNF$8NjefZOJ!7ckc&L;ZkEDrOLh zS34GNO=kC^xE;|n$CI!mUHm9X`jX`kCrr{?!zJ{&$!hNF>9{jd;3XblVkg?YYSQW;$Ax>wXL5I(DgU- z3^Dqaktli6)itwUPdwTI@2Ni>ex1c+A+(cq5mL<^)q#Tdl$1!;JQ$JbWT!1)&Xi99 z(UIRmth<8FKFhHu+>tNSnKKi&-r1Oc+Y{Q5j^{honx>gM@JIx2WZ@#_%`Y_K^iI?B z&b6fKPDUeJzJ{}pME!DS$qQsT6a_08W1JaS4b z>(M7FrG@9u7iwQ(HwmFrReZTsfm1mzOH_nJ97b5R*b7!-3~7&l>*y&R;-4rp3WV zmXz{sK_N^{{&RZz4)SVWd}eulSei=7-ecaiH#<@TmTropB|8z+D)XAuSqkv|wYjt{ zz3b;vU+9Vuu0!f*qT5`rN{NUJEfh7IHoThnv3Ngxb=73UdyuO-&D;Q5t=E46j~IRB z{HDHgp4C;IGY&6m+6*9+_bfIyw=G93Ext0_#DR=ShGtg2&#`%ZdLI;9RL6kToW{sj zNQ`p56|8qIBkun9u-{6PBHP+{>Y0I(g>XP9@ zA?#~?3$6tcW>uD9L-=p(w*$Cwws^ZAnBjssMdx$adH)J=M5{6t87Vfz zRKFddDa?iHT(kjqG>)a$${ra9x8FGPF(R$<;3_7_ulg@4a3OO^dWIISRPTOMsmYg- z@m8L|POVpZpuC7~z#=`eyszz;F0!z&^!{C%^4c~YuB8fuUQ1P5?uTFthqBw#!|p{d z-k)cD{qFrd#q#U7RV3NvW--H__!KFjlc!GS(Dpyg_kH>_7e?Igj&5M=b!2NQk!$A!0Xc^G#T{Sl?gr-LGt}*bl;&a}d6kDX}Xr9iHU!Vpy*LKjCuIqZ9k~#_v2D?bC znppePdEa!aqK>ohR@K#o7FHf=8r5x*b?0HtVuzx-{JR%4VSRcO#i~p6C#`8_i=Fzg zePOal-|X%k-8{?MBp3@1yj^8x{VXlSD|bTnd7#m27DjI)okC$x*6W+ML(<$DTX$@a z#*6JiB{|BPoHkj4KiIeq=KAtKA4+}d@3GI(=)BNhT%M+-(LTM7)V=H+Z0)UT@UXgM zC&OlHLUP=&Z)joMD){!f-grfx!W}LKSs{cW$J+Mb;it(Zd$J(&dED4rS3h{;9a_!* zLe9qdvFKsrJGP^!w>FZ4W(g`ojaA<&p^aw7si{tNwfH@??3}`C#j3eUrz=cz^6O|2 zn{1d#6fLA&#|+41^;sFaoqp0NujANU5LVN6Wpf%VJyfF>8zBGz(aL25wNxEP6y|Q)sj4IXK{-_W>S|?g?X24Wsh&prrT=lb|^*Zm1JkO0; zQyE))HA=lrRy@cgh*?bpLj$-&Q9wq{m8Axte#Ri;dnW^TZjOD~teMo~nqw+AZ_q`$ zCOtjEuFppvrdn7_md|d=v0~yprcY+cmpEnE?oMmZBa(xZwtJ`fLp{^MW+#%t^^8mA z0HS>{SLZ0wEb}hiE6!8x*z0EQOVbayzExb_-+UiS=*M%sD$wP0^N~n(fwg)^jE>Tbndb`C5`O-g*8*g=wR39?^)}{gBsC+m1&QgWz+oe#- zVc~R~0Id4)da{+3)qvjCa`i>sPXt+aeW9+AgtGu*XQ6;%`IE?;umu_J5M}!)_sG_i zQREJO+`cB({f$z*>qQdn5290>mPe9&3n-KU(g9>{J@x40aowavjgcu)YY1YxqFl`X zqR{uK!rZtWD_IJMoWnmJtl8WPu+goz-|~ebGPxqoGlC8UX@3CLsr%%Svr6jtlIop{eUbcO#4YLk90oc`ehTT_ar%e5oFlv(;qnTU*>5TQzlr=sK`5Q zvB~Zo?D56D^35bybB}RsR21&SKy^*sko`Mby`<~XX)?)8bEXWL?c?hU zXZCGlvTiPm&8S%wnd(CNL{~SlrXP-VhzjLYN#DCwz6?9_x@kxr{+c#J8-e_CY?LWu zvmQXlQ5QSu@nAle3zBL z;kI+0L|xDon}*xZV5K>;)de~=)7XJP@3%Dx4+qhPu;u5lj_(h!ArqUyLyHRF#L0G_ zMOc{ylX5(ryBC@&ap!9MBi&7XR0?CAG_>7YBAljy?SvAjdtka84r)PtiPzX(a#@6@ z%Lug{9~EdnOMzBydRR=Z2G{*XWH9fV)1s@ zi}~2I?ME_gq9O)R*WNf?%!*h1aGZPA#VV+u!wSR9pNFz2Ump1+l6Q=|SEa?ww^t;W z&02VBESlbk%U(p3dW6yzq!Fh&+-{)Um*Sg*&x_cNr>b~c@p-&)8M8`cOS@>x0@zj882#0Gm8w`F4uQU z#vcw3*1`?l5bi7FOub!Hn6?=w=c<9#NLV8#=`UzI4w{7ye2xGc#hJG_EwhW}LhJTE z4dL8pNI%o$TvXlT$-q%ih8D(h&0T*i!Lfx0}oyPDF^ zZCH=qFhY31MeW5T)q~$mSmpUWDefU~frR94dChj#WtV3|hG}~0z~P4#1sIE733_%L zu44*6)txenbqQ&Celpf=^ha;+zWXp?!6VLS`Fh@_cpVKCX0fD6O`S!$uEP_05?KO4C6wQ9aLZ zO?@r6#(3^y<}Il&4_et5ULMi6=gQmXG`@O$(Ypr(FWT7&rz#sl$W;b{?cEe+ z&-UlLL6=B73(PC?Bo%|OT!kHTEc`v8YU(yOQUOX_(bcy=t4eW zp>_Gs_Q7S^MjokG;R=Y&{C*0~JnXw@i96hGPy?2k!gFHPWeyp@8+VEp`6QWGe$Cdh zO*(UpQ(?;hs&5o2+)wbqGe&FSx}Y+b*xA-fLZ^DQ?>&n_M++Gs22`ilSyxy`dOKnp78z9RA3XFHeB0d9T?th}X4dQ&Z(9YCB~a^mpB{IhnYu#Q)L>jL7;Snv`E) zWnp7*@a!a6>g0x;_VUK7>w@F6VY82Q{7lI7Jv`?l&v$cNHuC8Cv9&ai;6>)zghd%A zS`GDK3-*NWsa2fZ|N45|A>*%%Dz-0&vuvD;x1)7>8pfS(H>~9?+}gb<66YK2GNxiU zBd|4|$$>`QZaU#JW)?I^m@rb7UaTP>PZE(4L4+6kYT35Lw&YhYWLI+VV0MiS_>!#~S&kpGHd6x_M4>$}c=m*mvTku9 z$v@$lJ!#dUS<5-^Hs_O$KDP@QvWG-_rJsE4+UQX>^!&k^uie=*t$`lv!EJ%j!eC3= zYWCdPcx*0xs~aNaz@EBqJL=uxHwt!I&tA~Hua>%3!I=ZfGPI+2wDyePCMivGGL!r{ z5glO`<(ZYvHXiD3ntGpiXT=94OXiDe^b}Fy4*E)j8X|UdTtfojXp;rdTOP|t$%ZLa zN46O2EzcyLE6UgMqk}v4ySl39+?}keg5Q(LU>8x!>vI$-w^ZvVTLYee1X>W3U9#<; zH1u&MePZ$J#41P?CO|M9n;YccdlX-1go8Ye$vfn2R8Pym%>0KB+QUcW+&0*?{NDJEzD zYINGsQmmCnlN zh`2}K6)dz}Bdc7d{qnIjBh%v!)X4<|he;IAN}5U^Pi#g-y=*UEHYII<@lAW9OFh>R@EqWJu3ZY7 zmnmr5qlZ!Du|{#8;>(xj{;L{6tw<<`G&*+k2edhOqE*>7pM_B}t!L<4ozBr@2{K&# z)mazp={!@kW;@|-p6ObOxi=`eLn=c#ExK)<)5_y6lvbkDdA9}v)jGLiIyb1Uj2iRu zJad?YmFq1qLNFh-77poS)F23>UfG?=;4%k_!%uYg6kPkJ*VMkrKSxfIT!s*rNPNUi&a|;0Iptfd+r#d+}BqH^dzi_Qnm6dJz)@%6l?ill?FN*egj^ZD7cwyCiEWi6hw3iuIs;KyGTT#V@Hf^^U|HkcgsNcfX1}gGxjIRA~ zuZBEvpC8>>Ol8kXaTc=|+2&isnSARMfpAJZqQf3NUU&^=MjIj7KF(SzePv0Em1lUX z;3?us#n7=qd#*QclJLGEkIwKqG3WJOyt1~<+IxIWk20Z;Cb^vjZTigSJx2PIz2(r7 z6ysbKNQ71P5tuAxwS$ZpVtORopIB)_5Mrm-na!o?9mgth3WPNC#>M;d>1es9QG!-@0iJWB6qEy$r|8_SJKP3elo3pBsfO4Xn-NBe}|8I+APc|MhI zDqRWpt8yX}1U$;VA&oZsx2xfO;XJE}8oF6|+!FHMO>EMz42Vf{)+*F^WZ zUOAGB<=}MJrA0+Yt?wp1MOWfiM-9TgD;Ux4bILX~ZKWXIUL3?^hUy?sp1tRh0J0@M zhRCmzMdtv3?EYxyU0=MF#SO_NF`BwrEj}E1-sZO2z*ZZVgFc`eQi+PXf`QB^5ZY2F zQ!vbNX9r-uZ^DjC@`!G%tW8f_4!D_ev0D~pm&tVRT8yO?OLNDcEz%up9$KWz*Fpsu z`tiCDo=yE&w|&VgCHf^f&iPI07hX|MBkc*}Unea6D8t8E6p-cl{`imT6H7x&bB>jY?a6 zKAkG=wNcTmW)asHCcD@zLv{|FZ6?loJpJ*x0CBeJ|GlseeY08a?ZdM>|E*ZOnn{1=IT5s5QZy6QK z`DNJQC}V2~78Tl*#3C|a$#NY$~#SMG7u3yBNAEUf` zl_&Y`hFZRdZOe{d|L*QtsKfGb4qr$jvrV^-F6sVAspOp;+US0M)w4%a9re%BGw_XU z%|RWGGu`>BA8i44MmmW!$FKU>UBi?SlG`iuZ$}LLIQOoE(q7RUg7JUo zw)5lk_vT!1<-f0q*9ON&A(O=y7vr_eG~&&gOUq{T@ILh~P$FcjaxO!-sqzm@xJO1W z)x$%MRwYHJool$3Ba12UWgfW=6E8s#3o9@xfJ^%Xz+p|kEACL?Y~z;PrXt5h>E# zMDG)1RS-(?w^KtH*AiT4=_5&D3X5IrmGaXav05@7F*~Ig5{ozTH{~^Uy;zev5#U+sebvUda`iGh-sjZN9pk7MAyu23~6~dDhkR!~~ub6Xd3C zwfCd9M;Y*7@bf;thAVq!xi0+D_0^SAr@Hqw`Q@}QrKge zH8n5VD8G^m3PIvS(?;WVcMDFzEAGDY4PaqZDTUzaMi23S`~=0STJP0D$G0Y&`wqoe z>_yDs{z}>}?&-D9u)vLRh>8hYj%;_$k@#% zQ0Vg%czd^(RfXo@eaqdKZCBllajfB^HBwt_Mk7gAC!ZulsY{sM!;Tl#lMMCw3_(%c z+E;xt$AS}V)y=>`5nHF;7&`KYqrJeew8>@6Ij^_O8fNt& zSH=+9VGVDsISlHf(RcXu5g|g`yXK$r&B^1oY+x@=KF$riAs|SJ@-v(1nFsZ1gM0=< zHr`NXKy0|@ZdTtq^sGNKf##XrT&z9bfOqZAHGd7b?^^(f?wooJDOhEeHWXKT?2K?a z)oNc?t2@Et@>+r(cllG&S7RIaVh6v{VSY>6r=WT_>&DKPJ#XoFwJt`zd*wgtCC<-E zg4IXa2GBuIU(OX+P3f4e9N2^5Jmny#(I~@e-Mhz5sgeD&m8}K9 zc-|G(z0Sf5l^TnIPPQy@lzR7C*+Rm+Sw#sCege70hPwg63H#e?~A1?-NOp8 zEPI}gI@p0%uq$3L4G$O8XK|4-Alx=^Mfp_wW?WZ+`BZO|c`Qh9;n&1mPXm-nfYjA) z>@WN5iJvPcy=u&ZwdeGxy`|L3!`$Rr6!LIf7C9Q}yFB@NFo`<|lnS=p$R%fSDxdMx z&J6M)=#TY=xlU4@x^l&JvO=3TT;wpiG?V%{ztWNVTP|M)f=AvWeJy5R$@#JztJRM) zD=@~h4auQrp^lWswJLz*tR>U zq&G&c@%<5WQmF~>$;kv>@y;Y54PX}N?6;$ji7_dyGc|d*-da}vUd=XhJ|}z9v+S*FE zt$labjwcG-sUE5Z*Q&nxqA0Qh80`kauS7%ixMJkBFjB7UqV_`{>RVmHHy0F8rmmyT z9)^RZ*e$W8&3s(JyWUXiJts@2Ful`x$B&mS8{6f?+!yAWPP4TIJM7A*n~QXi?ZPnl6q+j4Q!;JiyGrsQO~ zI``&VG4#Io&lrn7M6BUOo{0!*ers{WqeA9L9A}Pc!&k(W2A&960V4Jv;>&&Kku{@a zuy?Mt1vXxj=$%?pdMYa;vM{&jiyJDL@09e2qvgGvPpT7bY8-8gpDE(c-H*jcm+79T zs<0F|0vTG=-W6)CzR`WwCNe~Dd$(X@>>`Jz7rw%6AECf9{_eTu*A?}yowTerP1szb zTJHk)Nu9=HDRt3C)yQnV!{~}llY9$it01OKg_7W*D{10mwNb#6iH_XXb!E46aCwUU z@bMrajP!bC5^~VeMe^#@14kJ6dAPLpn_cOm<3wRqOKiP&1+X z?t6vrN!^DH=GktFl9mm$wsXXuJQi$sr`RE?rY+q$r^X0g!jb@RZI`QJ@0y9@VF^hk z3w&1OH^Ed;Dc0hkG2Pv;gjDCe>-84ZP)mpj?bGinQS*AY!*!VI?%Q(c6E(A%vF5zK z``22Rt|O=hxHcaa(IKzuHcqd{DZ) U)aMImliR-_@-w+&A)@cH{6tzxXuX-+q; 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

u-SL}isL_x&%mtGdABrW=P=_qcD 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 + ![Image title](assets/work_light.png#only-light){ width="600" height="300"} + ![Image title](assets/work_dark.png#only-dark){ width="600" height="300"} + + + +### __native orchestrators__ + +- Focus on resource management, job scheduling, robustness and scalability. +- Have less features on domain (data engineering, data science) activities. +- Difficult to run locally. +- Not ideal for quick experimentation or research activities. + +### __meta orchestrators__ + +- An abstraction over native orchestrators. +- Oriented towards domain (data engineering, data science) features. +- Easy to get started and run locally. +- Ideal for quick experimentation or research activities. + +```runnable``` is a _meta_ orchestrator with simple API, geared towards data engineering, data science activities. +It works in conjunction with _native_ orchestrators and an alternative to [kedro](https://docs.kedro.org/en/stable/index.html) +or [metaflow](https://metaflow.org/). + + + + + ```runnable``` stands out based on these design principles.

diff --git a/examples/comparisons/README.md b/examples/comparisons/README.md index d0295f48..2c39671d 100644 --- a/examples/comparisons/README.md +++ b/examples/comparisons/README.md @@ -1,22 +1,20 @@ -In this section, we take the familiar MNIST problem and implement it in different orchestration frameworks. - -The [original source code](https://github.com/pytorch/examples/blob/main/mnist/main.py) is shown in [source.py](source.py) - -The individual directories are orchestration specific implementations. - -## Notes - For the purpose of comparisons, consider the following function: ```python def func(x: int, y:pd.DataFrame): + # Access some data, input.csv # do something with the inputs. - # Write a file called data.csv for downstream steps. + # Write a file called output.csv for downstream steps. # return an output. return z ``` -It takes *inputs* x (integer) and y (a pandas dataframe or any other object), does some processing and writes a file to local disk and returns z (a simple datatype or object) +It takes + +- *inputs* x (integer) and y (a pandas dataframe or any other object), +- processes input data, input.csv expected on local file system +- writes a file, output.csv to local filesystem +- returns z (a simple datatype or object) The function in wrapped in runnable as: @@ -24,14 +22,19 @@ The function in wrapped in runnable as: from somewhere import func from runnable import PythonTask, pickled, Catalog -# instruction to move the file data.csv from local disk to a blob store -catalog = Catalog(put=["data.csv"]) +# instruction to get input.csv from catalog at the start of the step. +# and move output.csv to the catalog at the end of the step +catalog = Catalog(get=["input.csv"], put=["output.csv"]) + # Call the function, func and expect it to return "z" while moving the files # It is expected that "x" and "y" are parameters set by some upstream step. # If the return parameter is an object, use pickled("z") func_task = PythonTask(name="function", function=func, returns=["z"], catalog=catalog) ``` +Below are the implementations in alternative frameworks. Note that +the below are the best of our understanding of the frameworks, please let us +know if there are alternate implementations. ### metaflow @@ -55,12 +58,92 @@ class Flow(FlowSpec) - The API between ```runnable``` and ```metaflow``` are comparable. - There is a mechanism for functions to accept/return parameters. +- Both support parallel branches, arbitrary nesting of pipelines. + +The differences: + + + +##### dependency management: + +```runnable``` depends on the activated virtualenv for dependencies which is natural to python. +Use custom docker images to provide the same environment in cloud based executions. + +```metaflow``` uses decorators (conda, pypi) to specify dependencies. This has an advantage +of abstraction from docker ecosystem for the user. + +##### dataflow: + +In ```runnable```, data flow between steps is by an instruction in runnable to ```glob``` files in +local disk and present them in the same structure to downstream steps. + +```metaflow``` needs a code based instruction to do so. + +##### notebooks: + +```runnable``` allows notebook as tasks. Notebooks can take JSON style inputs and can return +pythonic objects for downstream steps. + +```metaflow``` does not support notebooks as tasks. + +##### infrastructure: + +```runnable```, in many ways, is just a transpiler to your chosen infrastructure. + +```metaflow``` is a platform with its own specified infrastructure. + +##### modular pipelines + +In ```runnable``` the individual pipelines of parallel and map states are +pipelines themselves and can run in isolation. This is not true in ```metaflow```. + +##### unit testing pipelines + +```runnable``` pipelines are testable using ```mocked``` executor where the executables can be mocked/patched. In ```metaflow```, it depends on how the +python function is wrapped in the pipeline. + + +### kedro + +The function in ```kedro``` implementation would roughly be: + +Note that any movement of files should happen via data catalog. + +```python +from kedro.pipeline import Pipeline, node, pipeline +from somewhere import func + +def create_pipeline(**kwargs) -> Pipeline: + return pipeline( + [ + node( + func=func, + inputs=["params:x", "y"], + outputs=["z"], + name="my_function", + ), + ... + ] + ) + +``` + +##### Structure + +Kedro needs a structure and configuration to set up a new project and provides +a CLI to get started. + +To use ```runnable``` as part of the project requires +adding a pipeline definition file (in python or yaml) and an optional configuration file. + +##### dataflow + +Kedro needs the data flowing through the pipeline via catalog.yaml which +provides a central place to understand the data. + +In ```runnable```, the data is presented to the individual tasks as +requested by the ```catalog``` instruction. -The differences between both: +##### notebooks -- dependency management in ```runnable``` is expected to be user driven and "pythonic" (venv, poetry etc) while metaflow packages provides a per-step (or flow level) libraries. -- data flow between steps is by an instruction in runnable to ```glob``` files in -local disk and present them in the same structure to downstream steps. ```metaflow``` needs this to be via code. -- runnable allows ```notebooks``` to be a task, allowing simple data types to be -parameters while collecting objects from the notebook execution. -- metaflow has a *platform* side to it and comes up with prescribed infrastructure while runnable is, in many ways, a transpiler to your chosen infrastructure. +Kedro supports notebooks for exploration but not as tasks of the pipeline. From d13394d066795867b0038b4fa2e93ce51f724448 Mon Sep 17 00:00:00 2001 From: Vijay Vammi Date: Tue, 11 Jun 2024 09:38:10 +0100 Subject: [PATCH 4/4] docs: updating docs --- README.md | 461 ++++++++++++++++-------------------------------------- 1 file changed, 139 insertions(+), 322 deletions(-) diff --git a/README.md b/README.md index 707c0377..f768c278 100644 --- a/README.md +++ b/README.md @@ -2,25 +2,6 @@ -

- - ,////, - /// 6| - // _| - _/_,-' - _.-/'/ \ ,/;, - ,-' /' \_ \ / _/ - `\ / _/\ ` / - | /, `\_/ - | \' - /\_ /` /\ - /' /_``--.__/\ `,. / \ - |_/` `-._ `\/ `\ `. - `-.__/' `\ | - `\ \ - `\ \ - \_\__ - \___)


@@ -32,364 +13,200 @@ Code style: black MyPy Checked Tests: -Docs:


-runnable is a simplified workflow definition language that helps in: - -- **Streamlined Design Process:** runnable enables users to efficiently plan their pipelines with -[stubbed nodes](https://astrazeneca.github.io/runnable-core/concepts/stub), along with offering support for various structures such as -[tasks](https://astrazeneca.github.io/runnable-core/concepts/task), [parallel branches](https://astrazeneca.github.io/runnable-core/concepts/parallel), and [loops or map branches](https://astrazeneca.github.io/runnable-core/concepts/map) -in both [yaml](https://astrazeneca.github.io/runnable-core/concepts/pipeline) or a [python SDK](https://astrazeneca.github.io/runnable-core/sdk) for maximum flexibility. - -- **Incremental Development:** Build your pipeline piece by piece with runnable, which allows for the -implementation of tasks as [python functions](https://astrazeneca.github.io/runnable-core/concepts/task/#python_functions), -[notebooks](https://astrazeneca.github.io/runnable-core/concepts/task/#notebooks), or [shell scripts](https://astrazeneca.github.io/runnable-core/concepts/task/#shell), -adapting to the developer's preferred tools and methods. -- **Robust Testing:** Ensure your pipeline performs as expected with the ability to test using sampled data. runnable -also provides the capability to [mock and patch tasks](https://astrazeneca.github.io/runnable-core/configurations/executors/mocked) -for thorough evaluation before full-scale deployment. +[Please check here for complete documentation](https://astrazeneca.github.io/runnable/) -- **Seamless Deployment:** Transition from the development stage to production with ease. -runnable simplifies the process by requiring [only configuration changes](https://astrazeneca.github.io/runnable-core/configurations/overview) -to adapt to different environments, including support for [argo workflows](https://astrazeneca.github.io/runnable-core/configurations/executors/argo). - -- **Efficient Debugging:** Quickly identify and resolve issues in pipeline execution with runnable's local -debugging features. Retrieve data from failed tasks and [retry failures](https://astrazeneca.github.io/runnable-core/concepts/run-log/#retrying_failures) -using your chosen debugging tools to maintain a smooth development experience. - -Along with the developer friendly features, runnable also acts as an interface to production grade concepts -such as [data catalog](https://astrazeneca.github.io/runnable-core/concepts/catalog), [reproducibility](https://astrazeneca.github.io/runnable-core/concepts/run-log), -[experiment tracking](https://astrazeneca.github.io/runnable-core/concepts/experiment-tracking) -and secure [access to secrets](https://astrazeneca.github.io/runnable-core/concepts/secrets). - -
- -## What does it do? +## Example +The below data science flavored code is a well-known +[iris example from scikit-learn](https://scikit-learn.org/stable/auto_examples/linear_model/plot_iris_logistic.html). -![works](assets/work.png) -
+```python +""" +Example of Logistic regression using scikit-learn +https://scikit-learn.org/stable/auto_examples/linear_model/plot_iris_logistic.html +""" + +import matplotlib.pyplot as plt +import numpy as np +from sklearn import datasets +from sklearn.inspection import DecisionBoundaryDisplay +from sklearn.linear_model import LogisticRegression + + +def load_data(): + # import some data to play with + iris = datasets.load_iris() + X = iris.data[:, :2] # we only take the first two features. + Y = iris.target + + return X, Y + + +def model_fit(X: np.ndarray, Y: np.ndarray, C: float = 1e5): + logreg = LogisticRegression(C=C) + logreg.fit(X, Y) + + return logreg + + +def generate_plots(X: np.ndarray, Y: np.ndarray, logreg: LogisticRegression): + _, ax = plt.subplots(figsize=(4, 3)) + DecisionBoundaryDisplay.from_estimator( + logreg, + X, + cmap=plt.cm.Paired, + ax=ax, + response_method="predict", + plot_method="pcolormesh", + shading="auto", + xlabel="Sepal length", + ylabel="Sepal width", + eps=0.5, + ) -## Documentation + # Plot also the training points + plt.scatter(X[:, 0], X[:, 1], c=Y, edgecolors="k", cmap=plt.cm.Paired) -[More details about the project and how to use it available here](https://astrazeneca.github.io/runnable-core/). + plt.xticks(()) + plt.yticks(()) -
+ plt.savefig("iris_logistic.png") -## Installation + # TODO: What is the right value? + return 0.6 -The minimum python version that runnable supports is 3.8 -```shell -pip install runnable -``` +## Without any orchestration +def main(): + X, Y = load_data() + logreg = model_fit(X, Y, C=1.0) + generate_plots(X, Y, logreg) -Please look at the [installation guide](https://astrazeneca.github.io/runnable-core/usage) -for more information. -
+## With runnable orchestration +def runnable_pipeline(): + # The below code can be anywhere + from runnable import Catalog, Pipeline, PythonTask, metric, pickled -## Example + # X, Y = load_data() + load_data_task = PythonTask( + function=load_data, + name="load_data", + returns=[pickled("X"), pickled("Y")], # (1) + ) -Your application code. Use pydantic models as DTO. + # logreg = model_fit(X, Y, C=1.0) + model_fit_task = PythonTask( + function=model_fit, + name="model_fit", + returns=[pickled("logreg")], + ) -Assumed to be present at ```functions.py``` -```python -from pydantic import BaseModel + # generate_plots(X, Y, logreg) + generate_plots_task = PythonTask( + function=generate_plots, + name="generate_plots", + terminate_with_success=True, + catalog=Catalog(put=["iris_logistic.png"]), # (2) + returns=[metric("score")], + ) -class InnerModel(BaseModel): - """ - A pydantic model representing a group of related parameters. - """ + pipeline = Pipeline( + steps=[load_data_task, model_fit_task, generate_plots_task], + ) # (4) - foo: int - bar: str + pipeline.execute() + return pipeline -class Parameter(BaseModel): - """ - A pydantic model representing the parameters of the whole pipeline. - """ - x: int - y: InnerModel +if __name__ == "__main__": + # main() + runnable_pipeline() +``` -def return_parameter() -> Parameter: - """ - The annotation of the return type of the function is not mandatory - but it is a good practice. - Returns: - Parameter: The parameters that should be used in downstream steps. - """ - # Return type of a function should be a pydantic model - return Parameter(x=1, y=InnerModel(foo=10, bar="hello world")) +1. Return two serialized objects X and Y. +2. Store the file `iris_logistic.png` for future reference. +3. Define the sequence of tasks. +4. Define a pipeline with the tasks +The difference between native driver and runnable orchestration: -def display_parameter(x: int, y: InnerModel): - """ - Annotating the arguments of the function is important for - runnable to understand the type of parameters you want. +!!! tip inline end "Notebooks and Shell scripts" - Input args can be a pydantic model or the individual attributes. - """ - print(x) - # >>> prints 1 - print(y) - # >>> prints InnerModel(foo=10, bar="hello world") -``` + You can execute notebooks and shell scripts too!! -### Application code using driver functions. + They can be written just as you would want them, *plain old notebooks and scripts*. -The code is runnable without any orchestration framework. -```python -from functions import return_parameter, display_parameter -my_param = return_parameter() -display_parameter(my_param.x, my_param.y) -``` -### Orchestration using runnable +
- - - - - - - - - +## Documentation - -
python SDKyaml

+```diff -Example present at: ```examples/python-tasks.py``` +- X, Y = load_data() ++load_data_task = PythonTask( ++ function=load_data, ++ name="load_data", ++ returns=[pickled("X"), pickled("Y")], (1) ++ ) -Run it as: ```python examples/python-tasks.py``` +-logreg = model_fit(X, Y, C=1.0) ++model_fit_task = PythonTask( ++ function=model_fit, ++ name="model_fit", ++ returns=[pickled("logreg")], ++ ) -```python -from runnable import Pipeline, Task +-generate_plots(X, Y, logreg) ++generate_plots_task = PythonTask( ++ function=generate_plots, ++ name="generate_plots", ++ terminate_with_success=True, ++ catalog=Catalog(put=["iris_logistic.png"]), (2) ++ ) -def main(): - step1 = Task( - name="step1", - command="examples.functions.return_parameter", - ) - step2 = Task( - name="step2", - command="examples.functions.display_parameter", - terminate_with_success=True, - ) - step1 >> step2 ++pipeline = Pipeline( ++ steps=[load_data_task, model_fit_task, generate_plots_task], (3) - pipeline = Pipeline( - start_at=step1, - steps=[step1, step2], - add_terminal_nodes=True, - ) +``` + - pipeline.execute() +--- -if __name__ == "__main__": - main() -``` +- [x] ```Domain``` code remains completely independent of ```driver``` code. +- [x] The ```driver``` function has an equivalent and intuitive runnable expression +- [x] Reproducible by default, runnable stores metadata about code/data/config for every execution. +- [x] The pipeline is `runnable` in any environment. -

- -Example present at: ```examples/python-tasks.yaml``` - - -Execute via the cli: ```runnable execute -f examples/python-tasks.yaml``` - -```yaml -dag: - description: | - This is a simple pipeline that does 3 steps in sequence. - In this example: - 1. First step: returns a "parameter" x as a Pydantic model - 2. Second step: Consumes that parameter and prints it - - This pipeline demonstrates one way to pass small data from one step to another. - - start_at: step 1 - steps: - step 1: - type: task - command_type: python # (2) - command: examples.functions.return_parameter # (1) - next: step 2 - step 2: - type: task - command_type: python - command: examples.functions.display_parameter - next: success - success: - type: success - fail: - type: fail -``` -

+[More details about the project and how to use it available here](https://astrazeneca.github.io/runnable/). -### Transpile to argo workflows +
-No code change, just change the configuration. +## Installation -```yaml -executor: - type: "argo" - config: - image: runnable:demo - persistent_volumes: - - name: runnable-volume - mount_path: /mnt +The minimum python version that runnable supports is 3.8 -run_log_store: - type: file-system - config: - log_folder: /mnt/run_log_store +```shell +pip install runnable ``` -More details can be found in [argo configuration](https://astrazeneca.github.io/runnable-core/configurations/executors/argo). - -Execute the code as ```runnable execute -f examples/python-tasks.yaml -c examples/configs/argo-config.yam``` - -
- Expand - -```yaml -apiVersion: argoproj.io/v1alpha1 -kind: Workflow -metadata: - generateName: runnable-dag- - annotations: {} - labels: {} -spec: - activeDeadlineSeconds: 172800 - entrypoint: runnable-dag - podGC: - strategy: OnPodCompletion - retryStrategy: - limit: '0' - retryPolicy: Always - backoff: - duration: '120' - factor: 2 - maxDuration: '3600' - serviceAccountName: default-editor - templates: - - name: runnable-dag - failFast: true - dag: - tasks: - - name: step-1-task-uvdp7h - template: step-1-task-uvdp7h - depends: '' - - name: step-2-task-772vg3 - template: step-2-task-772vg3 - depends: step-1-task-uvdp7h.Succeeded - - name: success-success-igzq2e - template: success-success-igzq2e - depends: step-2-task-772vg3.Succeeded - - name: step-1-task-uvdp7h - container: - image: runnable:demo - command: - - runnable - - execute_single_node - - '{{workflow.parameters.run_id}}' - - step%1 - - --log-level - - WARNING - - --file - - examples/python-tasks.yaml - - --config-file - - examples/configs/argo-config.yaml - volumeMounts: - - name: executor-0 - mountPath: /mnt - imagePullPolicy: '' - resources: - limits: - memory: 1Gi - cpu: 250m - requests: - memory: 1Gi - cpu: 250m - - name: step-2-task-772vg3 - container: - image: runnable:demo - command: - - runnable - - execute_single_node - - '{{workflow.parameters.run_id}}' - - step%2 - - --log-level - - WARNING - - --file - - examples/python-tasks.yaml - - --config-file - - examples/configs/argo-config.yaml - volumeMounts: - - name: executor-0 - mountPath: /mnt - imagePullPolicy: '' - resources: - limits: - memory: 1Gi - cpu: 250m - requests: - memory: 1Gi - cpu: 250m - - name: success-success-igzq2e - container: - image: runnable:demo - command: - - runnable - - execute_single_node - - '{{workflow.parameters.run_id}}' - - success - - --log-level - - WARNING - - --file - - examples/python-tasks.yaml - - --config-file - - examples/configs/argo-config.yaml - volumeMounts: - - name: executor-0 - mountPath: /mnt - imagePullPolicy: '' - resources: - limits: - memory: 1Gi - cpu: 250m - requests: - memory: 1Gi - cpu: 250m - templateDefaults: - activeDeadlineSeconds: 7200 - timeout: 10800s - arguments: - parameters: - - name: run_id - value: '{{workflow.uid}}' - volumes: - - name: executor-0 - persistentVolumeClaim: - claimName: runnable-volume - -``` +Please look at the [installation guide](https://astrazeneca.github.io/runnable-core/usage) +for more information. -
## Pipelines can be: