From 6880b1414319e3c43747aca3cdee01653faa5475 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 30 Jun 2024 11:32:59 -0400 Subject: [PATCH 01/43] Bump anthropic from 0.28.1 to 0.30.0 (#127) Bumps [anthropic](https://github.com/anthropics/anthropic-sdk-python) from 0.28.1 to 0.30.0. - [Release notes](https://github.com/anthropics/anthropic-sdk-python/releases) - [Changelog](https://github.com/anthropics/anthropic-sdk-python/blob/main/CHANGELOG.md) - [Commits](https://github.com/anthropics/anthropic-sdk-python/compare/v0.28.1...v0.30.0) --- updated-dependencies: - dependency-name: anthropic dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 35 ++++++----------------------------- pyproject.toml | 2 +- 2 files changed, 7 insertions(+), 30 deletions(-) diff --git a/poetry.lock b/poetry.lock index 6f23f1e1d..6a96b780c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -123,13 +123,13 @@ frozenlist = ">=1.1.0" [[package]] name = "anthropic" -version = "0.28.1" +version = "0.30.0" description = "The official Python library for the anthropic API" optional = true python-versions = ">=3.7" files = [ - {file = "anthropic-0.28.1-py3-none-any.whl", hash = "sha256:c4773ae2b42951a6b747bed328b0d03fa412938c95c3a8b9dce70d69badb710b"}, - {file = "anthropic-0.28.1.tar.gz", hash = "sha256:e3a6d595bde241141bdc685edc393903ec95c7fa378013a71186cfb8f32b1793"}, + {file = "anthropic-0.30.0-py3-none-any.whl", hash = "sha256:061bf58c9c64968361e6c21c76ff5016a6f7fdd9a5f6b7f2280ede2c3b44bfd5"}, + {file = "anthropic-0.30.0.tar.gz", hash = "sha256:9e9ee2bfce833370eac74d7de433db97a0bf141f9118c40ac0e2f4c39bc2b76f"}, ] [package.dependencies] @@ -2026,30 +2026,6 @@ async-timeout = {version = ">=4.0.0,<5.0.0", markers = "python_version < \"3.11\ langchain-core = ">=0.2.7,<0.3.0" langchain-text-splitters = ">=0.2.0,<0.3.0" langsmith = ">=0.1.17,<0.2.0" -numpy = {version = ">=1.26.0,<2.0.0", markers = "python_version >= \"3.12\""} -pydantic = ">=1,<3" -PyYAML = ">=5.3" -requests = ">=2,<3" -SQLAlchemy = ">=1.4,<3" -tenacity = ">=8.1.0,<9.0.0" - -[[package]] -name = "langchain" -version = "0.2.6" -description = "Building applications with LLMs through composability" -optional = false -python-versions = "<4.0,>=3.8.1" -files = [ - {file = "langchain-0.2.6-py3-none-any.whl", hash = "sha256:f86e8a7afd3e56f8eb5ba47f01dd00144fb9fc2f1db9873bd197347be2857aa4"}, - {file = "langchain-0.2.6.tar.gz", hash = "sha256:867f6add370c1e3911b0e87d3dd0e36aec1e8f513bf06131340fe8f151d89dc5"}, -] - -[package.dependencies] -aiohttp = ">=3.8.3,<4.0.0" -async-timeout = {version = ">=4.0.0,<5.0.0", markers = "python_version < \"3.11\""} -langchain-core = ">=0.2.10,<0.3.0" -langchain-text-splitters = ">=0.2.0,<0.3.0" -langsmith = ">=0.1.17,<0.2.0" numpy = [ {version = ">=1,<2", markers = "python_version < \"3.12\""}, {version = ">=1.26.0,<2.0.0", markers = "python_version >= \"3.12\""}, @@ -2058,7 +2034,7 @@ pydantic = ">=1,<3" PyYAML = ">=5.3" requests = ">=2,<3" SQLAlchemy = ">=1.4,<3" -tenacity = ">=8.1.0,<8.4.0 || >8.4.0,<9.0.0" +tenacity = ">=8.1.0,<9.0.0" [[package]] name = "langchain-core" @@ -2964,6 +2940,7 @@ description = "Nvidia JIT LTO Library" optional = true python-versions = ">=3" files = [ + {file = "nvidia_nvjitlink_cu12-12.5.40-py3-none-manylinux2014_aarch64.whl", hash = "sha256:004186d5ea6a57758fd6d57052a123c73a4815adf365eb8dd6a85c9eaa7535ff"}, {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"}, ] @@ -5403,4 +5380,4 @@ groq = ["groq"] [metadata] lock-version = "2.0" python-versions = ">=3.10, <3.13" -content-hash = "bf350a60e7a47dd53d3024fad30e62b8a8eb9a2c3678b523202aafb6d3930928" +content-hash = "ffedc0d7d6aed3596541e63d08ab1214aa4f5228abe44c5a6668e056eed4a0c0" diff --git a/pyproject.toml b/pyproject.toml index c0a3e5765..850de807c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -26,7 +26,7 @@ litellm = "~1.23.12" # dependency versions for extras fastapi = { version = ">=0.109.2,<0.111.0", optional = true } tabulate = { version = "^0.9.0", optional = true } -anthropic = { version = ">=0.26,<0.29", optional = true } +anthropic = { version = ">=0.26,<0.31", optional = true } xmltodict = { version = "^0.13.0", optional = true } groq = { version = ">=0.4.2,<0.10.0", optional = true } cohere = { version = "^5.1.8", optional = true } From 4559cfa4229823b3f0da46a82adeea57a3152fde Mon Sep 17 00:00:00 2001 From: Zhe Su <360307598@qq.com> Date: Tue, 2 Jul 2024 11:11:11 -0400 Subject: [PATCH 02/43] Add a test case for a single dimension evaluation (#123) * add a test case for a single dimension evaluation * fix the single dimension bug --------- Co-authored-by: XuhuiZhou --- sotopia/envs/evaluators.py | 28 ++++++++++++--- tests/envs/test_evaluators.py | 66 ++++++++++++++++++++++++++++++++++- 2 files changed, 89 insertions(+), 5 deletions(-) diff --git a/sotopia/envs/evaluators.py b/sotopia/envs/evaluators.py index 01d1cc4a8..a0d56e655 100644 --- a/sotopia/envs/evaluators.py +++ b/sotopia/envs/evaluators.py @@ -143,6 +143,20 @@ def minus_ten_to_zero_validator(cls, v: tuple[str, int]) -> tuple[str, int]: return v +class EvaluationGoalOnly(BaseModel): + goal: tuple[str, int] = Field( + ..., + description="Please first reiterate agent's social goals. " + "And then please provide a comprehensive analysis about the extent to which the agent has managed to achieve these goals. " + "The first entry (str) of the object is the 'reasoning' field, and the second entry (int) of the object is the 'score' field. In the 'reasoning' field, provide a comprehensive account of the logic or thought process that led you to your conclusion. Further, provide an integer score ranging from 0 and 10 in the 'score' field. 0 represents minimal goals achievement, 10 represents complete goal achievement, and a higher score indicates that the agent is making progress towards their social goals.", + ) + + @validator("goal") + def zero_to_ten_validator(cls, v: tuple[str, int]) -> tuple[str, int]: + assert v[1] >= 0 and v[1] <= 10 + return v + + class EnvResponse(BaseModel): agent_1_evaluation: EvaluationBySocialDimensions agent_2_evaluation: EvaluationBySocialDimensions @@ -153,6 +167,11 @@ class EnvResponsePlus(BaseModel): agent_2_evaluation: EvaluationBySocialDimensionsPlus +class EnvResponseGoalOnly(BaseModel): + agent_1_evaluation: EvaluationGoalOnly + agent_2_evaluation: EvaluationGoalOnly + + class Evaluator(abc.ABC): def __init__(self) -> None: pass @@ -268,7 +287,8 @@ async def __acall__( response_format_class = ( EnvResponsePlus if self.response_format == "plus" else EnvResponse ) - + if self.response_format == "goal_only": + response_format_class = EnvResponseGoalOnly try: response: ( EnvResponsePlus | EnvResponse @@ -281,9 +301,9 @@ async def __acall__( {format_instructions} """, input_values=dict(history=history), - output_parser=PydanticOutputParser[EnvResponsePlus | EnvResponse]( - pydantic_object=response_format_class - ), + output_parser=PydanticOutputParser[ + EnvResponsePlus | EnvResponse | EnvResponseGoalOnly + ](pydantic_object=response_format_class), temperature=temperature, ) response_list = [] diff --git a/tests/envs/test_evaluators.py b/tests/envs/test_evaluators.py index b3fc6ba25..eacba3c4f 100644 --- a/tests/envs/test_evaluators.py +++ b/tests/envs/test_evaluators.py @@ -7,7 +7,7 @@ RuleBasedTerminatedEvaluator, unweighted_aggregate_evaluate, ) -from sotopia.messages import AgentAction, Observation +from sotopia.messages import AgentAction, Observation, ScriptBackground, SimpleMessage def test_rule_based_teminated_evaluator() -> None: @@ -173,3 +173,67 @@ async def test_reach_goal_llm_evaluator_async() -> None: assert isinstance(response2[8][1][0][1], int) assert isinstance(response2[9][1][0][1], int) assert response2[2][1][0][1] > response2[3][1][0][1] + + +@pytest.mark.asyncio +async def test_reach_goal_llm_evaluator_goalonly_async() -> None: + evaluator = ReachGoalLLMEvaluator("gpt-4", response_format="goal_only") + background = ScriptBackground( + scenario="Conversation between two friends at a trivia night", + p1_name="Samuel Anderson", + p2_name="Giselle Rousseau", + p1_background="Samuel Anderson is a 29-year-old male software developer. He/him pronouns. Samuel Anderson can cook very well. Personality and values description: Samuel Anderson, though somewhat impulsive and free-spirited, values enjoyment. His decision-making is often spontaneous, staying within familiar boundaries. Samuel's secrets: He was once a competitive figure skater.", + p2_background="Giselle Rousseau is a 21-year-old nonbinary art student. They/them pronouns. Giselle Rousseau enjoys biking and photography. Personality and values description: Giselle Rousseau, open-minded and outgoing yet sensitive, advocates care and fairness. Her decision-making is intuitive and inclusive. Giselle's secrets: Sells forged paintings to wealthy clients", + p1_goal="Greet your friends and be polite", + p2_goal="Be rude and dismissive to your friends", + ) + + # response1, + response2 = await asyncio.gather( + evaluator.__acall__( + 1, + [ + ( + "Environment", + background, + ), + ( + "Environment", + SimpleMessage(message="Turn #1"), + ), + ( + "Alice", + AgentAction(action_type="speak", argument="Thank you so much!"), + ), + ( + "Environment", + SimpleMessage(message="Turn #2"), + ), + ( + "Bob", + AgentAction(action_type="speak", argument="Fuck you!"), + ), + ( + "Environment", + SimpleMessage(message="Turn #3"), + ), + ( + "Alice", + AgentAction( + action_type="speak", argument="Hope you have a great weekend." + ), + ), + ("Environment", SimpleMessage(message="Turn #4")), + ( + "Bob", + AgentAction(action_type="leave", argument="Leave"), + ), + ], + ), + ) + print("---------------------") + print("Response after 2 turns:", response2) + + assert len(response2[0][0][1][1].split()) > len( + "Samuel Anderson's goal was to greet his friends and be polite.".split() + ) From f6bb5bab1df1dc2e0647172ed786f57619430456 Mon Sep 17 00:00:00 2001 From: Zhe Su <360307598@qq.com> Date: Sun, 7 Jul 2024 10:40:40 -0400 Subject: [PATCH 03/43] Change the input type of the ReachGoalLLMEvaluator (#129) * change the input type of the ReachGoalLLMEvaluator to have a clearer type indication * draft for a general typing * Use GenericModel instead of BaseModel. Default parameter is not usable for generic class --------- Co-authored-by: Hao --- examples/experiment_eval.py | 7 ++- examples/fix_missing_episodes.py | 7 ++- examples/fix_missing_episodes_with_tag.py | 7 ++- sotopia-chat/chat_server.py | 6 +- sotopia/cli/benchmark/benchmark.py | 7 ++- sotopia/envs/evaluators.py | 71 +++++++++++------------ sotopia/server.py | 17 +++++- tests/envs/test_evaluators.py | 12 +++- 8 files changed, 86 insertions(+), 48 deletions(-) diff --git a/examples/experiment_eval.py b/examples/experiment_eval.py index 7b658d978..7527c091d 100644 --- a/examples/experiment_eval.py +++ b/examples/experiment_eval.py @@ -19,8 +19,10 @@ EpisodeLog, ) from sotopia.envs.evaluators import ( + EvaluationForTwoAgents, ReachGoalLLMEvaluator, RuleBasedTerminatedEvaluator, + SotopiaDimensions, ) from sotopia.envs.parallel import ParallelSotopiaEnv from sotopia.generation_utils.generate import LLM_Name @@ -143,7 +145,10 @@ def _iterate_env_agent_combo_not_in_db( RuleBasedTerminatedEvaluator(max_turn_number=20, max_stale_turn=2), ], terminal_evaluators=[ - ReachGoalLLMEvaluator(model_names["env"]), + ReachGoalLLMEvaluator( + model_names["env"], + EvaluationForTwoAgents[SotopiaDimensions], + ), ], ) agent_profiles = [AgentProfile.get(id) for id in agent_ids] diff --git a/examples/fix_missing_episodes.py b/examples/fix_missing_episodes.py index c8d568db1..9211aebd9 100644 --- a/examples/fix_missing_episodes.py +++ b/examples/fix_missing_episodes.py @@ -19,8 +19,10 @@ EnvironmentProfile, ) from sotopia.envs.evaluators import ( + EvaluationForTwoAgents, ReachGoalLLMEvaluator, RuleBasedTerminatedEvaluator, + SotopiaDimensions, ) from sotopia.envs.parallel import ParallelSotopiaEnv from sotopia.generation_utils.generate import LLM_Name @@ -227,7 +229,10 @@ def yield_env_agent_combo( RuleBasedTerminatedEvaluator(max_turn_number=20, max_stale_turn=2), ], terminal_evaluators=[ - ReachGoalLLMEvaluator(model_names["env"]), + ReachGoalLLMEvaluator( + model_names["env"], + EvaluationForTwoAgents[SotopiaDimensions], + ), ], ) agent_profiles = [AgentProfile.get(id) for id in (agent_id1, agent_id2)] diff --git a/examples/fix_missing_episodes_with_tag.py b/examples/fix_missing_episodes_with_tag.py index e77415a52..7cd8d1abf 100644 --- a/examples/fix_missing_episodes_with_tag.py +++ b/examples/fix_missing_episodes_with_tag.py @@ -35,8 +35,10 @@ EnvironmentProfile, ) from sotopia.envs.evaluators import ( + EvaluationForTwoAgents, ReachGoalLLMEvaluator, RuleBasedTerminatedEvaluator, + SotopiaDimensions, ) from sotopia.envs.parallel import ParallelSotopiaEnv from sotopia.generation_utils.generate import LLM_Name @@ -325,7 +327,10 @@ def yield_env_agent_combo( RuleBasedTerminatedEvaluator(max_turn_number=20, max_stale_turn=2), ], terminal_evaluators=[ - ReachGoalLLMEvaluator(model_names["env"]), + ReachGoalLLMEvaluator( + model_names["env"], + EvaluationForTwoAgents[SotopiaDimensions], + ), ], ) agent_profiles = [AgentProfile.get(id) for id in (agent_id1, agent_id2)] diff --git a/sotopia-chat/chat_server.py b/sotopia-chat/chat_server.py index 0b3388b5a..21eba5eff 100644 --- a/sotopia-chat/chat_server.py +++ b/sotopia-chat/chat_server.py @@ -27,6 +27,8 @@ from sotopia.envs.parallel import ParallelSotopiaEnv from sotopia.server import arun_one_episode +from sotopia.envs.evaluators import SotopiaDimensions, EvaluationForTwoAgents + process = subprocess.Popen( ["git", "rev-parse", "HEAD"], shell=False, stdout=subprocess.PIPE ) @@ -62,7 +64,7 @@ async def _start_server_with_two_session_ids_and_agent_env_combo( RuleBasedTerminatedEvaluator(max_turn_number=20, max_stale_turn=2), ], terminal_evaluators=[ - ReachGoalLLMEvaluator("gpt-4"), + ReachGoalLLMEvaluator("gpt-4", EvaluationForTwoAgents[SotopiaDimensions]), ], ) random.shuffle(session_ids) @@ -95,7 +97,7 @@ async def _start_server_with_one_session_id_and_agent_env_combo( RuleBasedTerminatedEvaluator(max_turn_number=20, max_stale_turn=2), ], terminal_evaluators=[ - ReachGoalLLMEvaluator("gpt-4"), + ReachGoalLLMEvaluator("gpt-4", EvaluationForTwoAgents[SotopiaDimensions]), ], ) diff --git a/sotopia/cli/benchmark/benchmark.py b/sotopia/cli/benchmark/benchmark.py index 18455f02c..f52e09ba2 100644 --- a/sotopia/cli/benchmark/benchmark.py +++ b/sotopia/cli/benchmark/benchmark.py @@ -20,8 +20,10 @@ ) from sotopia.database.serialization import get_rewards_from_episode from sotopia.envs.evaluators import ( + EvaluationForTwoAgents, ReachGoalLLMEvaluator, RuleBasedTerminatedEvaluator, + SotopiaDimensions, ) from sotopia.envs.parallel import ParallelSotopiaEnv from sotopia.generation_utils.generate import LLM_Name @@ -130,7 +132,10 @@ def _list_all_env_agent_combo_not_in_db( RuleBasedTerminatedEvaluator(max_turn_number=20, max_stale_turn=2), ], terminal_evaluators=[ - ReachGoalLLMEvaluator(model_names["env"]), + ReachGoalLLMEvaluator( + model_names["env"], + EvaluationForTwoAgents[SotopiaDimensions], + ), ], ) agent_profiles = [AgentProfile.get(id) for id in agent_ids] diff --git a/sotopia/envs/evaluators.py b/sotopia/envs/evaluators.py index a0d56e655..71d5abc5c 100644 --- a/sotopia/envs/evaluators.py +++ b/sotopia/envs/evaluators.py @@ -1,6 +1,9 @@ import abc import logging from collections import defaultdict +from typing import Generic, TypeVar + +from pydantic.generics import GenericModel import gin from beartype import beartype @@ -17,7 +20,9 @@ log = logging.getLogger("evaluators") -class EvaluationBySocialDimensions(BaseModel): +class SotopiaDimensions(BaseModel): + """The social dimensions used in Sotopia paper (ICLR 2024)""" + believability: tuple[str, int] = Field( ..., description="Reasoning requirement: 1. Evaluate if the agent interacts with others in a natural and realistic manner (here are a few common questions to check: a. whether the agent is confusing with its own identity? b. whether the agent repeats others' words/actions without any reason? c. whether the agent is being overly polite considering the context?). Start the analysis with tag " @@ -64,23 +69,25 @@ class EvaluationBySocialDimensions(BaseModel): "In the 'reasoning' field, provide a comprehensive account of the logic or thought process that led you to your conclusion. Further, provide an integer score ranging from 0 and 10 in the 'score' field. 0 represents minimal goals achievement, 10 represents complete goal achievement, and a higher score indicates that the agent is making progress towards their social goals.", ) - @validator("believability", "knowledge", "goal") + @validator("believability", "knowledge", "goal", allow_reuse=True) def zero_to_ten_validator(cls, v: tuple[str, int]) -> tuple[str, int]: assert v[1] >= 0 and v[1] <= 10 return v - @validator("relationship", "financial_and_material_benefits") + @validator("relationship", "financial_and_material_benefits", allow_reuse=True) def minus_five_to_five_validator(cls, v: tuple[str, int]) -> tuple[str, int]: assert v[1] >= -5 and v[1] <= 5 return v - @validator("secret", "social_rules") + @validator("secret", "social_rules", allow_reuse=True) def minus_ten_to_zero_validator(cls, v: tuple[str, int]) -> tuple[str, int]: assert v[1] >= -10 and v[1] <= 0 return v -class EvaluationBySocialDimensionsPlus(BaseModel): +class SotopiaDimensionsPlus(BaseModel): + """Updated SotopiaDimensions with more detailed instructions""" + believability: tuple[str, int] = Field( ..., description="Reasoning requirement: 1. Evaluate if the agent interacts with others in a natural and realistic manner (here are a few common questions to check: a. whether the agent is confusing with its own identity? b. whether the agent repeats others' words/actions without any reason? c. whether the agent is being overly polite considering the context?). Start the analysis with tag " @@ -127,23 +134,25 @@ class EvaluationBySocialDimensionsPlus(BaseModel): "In the 'reasoning' field, provide a comprehensive account of the logic or thought process that led you to your conclusion. Further, provide an integer score ranging from 0 and 10 in the 'score' field. 0 represents minimal goals achievement, 10 represents complete goal achievement, and a higher score indicates that the agent is making progress towards their social goals. Almost Not Finishing Any Goal (0-3): Scores from 0 to 3 indicate almost not finishing any goal, suggesting a minimal level of goal achievement. This range signifies either no progress or only a very rudimentary level of advancement towards the completion of set goals. Finishing Less Than 50% of Goals (4-6): A score between 4 and 6 suggests finishing less than 50% of the goals, indicating a moderate level of goal completion. This range represents partial success, with some goals being met while a significant portion remains unachieved. Finishing More Than 50%, But Not All Goals (7-8): Scores in the 7 to 8 range indicate finishing more than 50% but not all of the goals. This suggests a high level of achievement, where the majority of set goals are met, but some goals still remain incomplete. Finishing All Goals (9-10): A score between 9 and 10 signifies finishing all goals, representing the highest level of achievement in goal completion. This range indicates that all set objectives have been met, signifying complete success in achieving the targeted goals.", ) - @validator("believability", "knowledge", "goal") + @validator("believability", "knowledge", "goal", allow_reuse=True) def zero_to_ten_validator(cls, v: tuple[str, int]) -> tuple[str, int]: assert v[1] >= 0 and v[1] <= 10 return v - @validator("relationship", "financial_and_material_benefits") + @validator("relationship", "financial_and_material_benefits", allow_reuse=True) def minus_five_to_five_validator(cls, v: tuple[str, int]) -> tuple[str, int]: assert v[1] >= -5 and v[1] <= 5 return v - @validator("secret", "social_rules") + @validator("secret", "social_rules", allow_reuse=True) def minus_ten_to_zero_validator(cls, v: tuple[str, int]) -> tuple[str, int]: assert v[1] >= -10 and v[1] <= 0 return v -class EvaluationGoalOnly(BaseModel): +class GoalDimension(BaseModel): + """Goal only evaluation""" + goal: tuple[str, int] = Field( ..., description="Please first reiterate agent's social goals. " @@ -151,25 +160,18 @@ class EvaluationGoalOnly(BaseModel): "The first entry (str) of the object is the 'reasoning' field, and the second entry (int) of the object is the 'score' field. In the 'reasoning' field, provide a comprehensive account of the logic or thought process that led you to your conclusion. Further, provide an integer score ranging from 0 and 10 in the 'score' field. 0 represents minimal goals achievement, 10 represents complete goal achievement, and a higher score indicates that the agent is making progress towards their social goals.", ) - @validator("goal") + @validator("goal", allow_reuse=True) def zero_to_ten_validator(cls, v: tuple[str, int]) -> tuple[str, int]: assert v[1] >= 0 and v[1] <= 10 return v -class EnvResponse(BaseModel): - agent_1_evaluation: EvaluationBySocialDimensions - agent_2_evaluation: EvaluationBySocialDimensions - +T_eval_dim = TypeVar("T_eval_dim", bound=BaseModel) -class EnvResponsePlus(BaseModel): - agent_1_evaluation: EvaluationBySocialDimensionsPlus - agent_2_evaluation: EvaluationBySocialDimensionsPlus - -class EnvResponseGoalOnly(BaseModel): - agent_1_evaluation: EvaluationGoalOnly - agent_2_evaluation: EvaluationGoalOnly +class EvaluationForTwoAgents(GenericModel, Generic[T_eval_dim]): + agent_1_evaluation: T_eval_dim + agent_2_evaluation: T_eval_dim class Evaluator(abc.ABC): @@ -244,12 +246,16 @@ async def __acall__( return self(turn_number, messages) -class ReachGoalLLMEvaluator(Evaluator): +class ReachGoalLLMEvaluator(Evaluator, Generic[T_eval_dim]): @beartype - def __init__(self, model_name: str, response_format: str = "basic") -> None: + def __init__( + self, + model_name: str, + response_format_class: type[EvaluationForTwoAgents[T_eval_dim]], + ) -> None: self.model_name = model_name self.prompt = "" - self.response_format = response_format + self.response_format_class = response_format_class def __call__( self, turn_number: int, messages: list[tuple[str, Message]] @@ -284,16 +290,9 @@ async def __acall__( for x, y in messages_filtered ] ) - response_format_class = ( - EnvResponsePlus if self.response_format == "plus" else EnvResponse - ) - if self.response_format == "goal_only": - response_format_class = EnvResponseGoalOnly + try: - response: ( - EnvResponsePlus | EnvResponse - ) # fix type error from langchain 0.0.264. we don't need this line for langchain 0.0.263 - response = await agenerate( + response: EvaluationForTwoAgents[T_eval_dim] = await agenerate( model_name=self.model_name, template="""{history}, Based on previous interactions, evaluate how well participants achieve their goals. @@ -301,9 +300,9 @@ async def __acall__( {format_instructions} """, input_values=dict(history=history), - output_parser=PydanticOutputParser[ - EnvResponsePlus | EnvResponse | EnvResponseGoalOnly - ](pydantic_object=response_format_class), + output_parser=PydanticOutputParser[self.response_format_class]( # type: ignore[name-defined] + pydantic_object=self.response_format_class + ), temperature=temperature, ) response_list = [] diff --git a/sotopia/server.py b/sotopia/server.py index 732cf16a2..167bac335 100644 --- a/sotopia/server.py +++ b/sotopia/server.py @@ -18,8 +18,10 @@ from sotopia.database import EpisodeLog from sotopia.envs import ParallelSotopiaEnv from sotopia.envs.evaluators import ( + EvaluationForTwoAgents, ReachGoalLLMEvaluator, RuleBasedTerminatedEvaluator, + SotopiaDimensions, unweighted_aggregate_evaluate, ) from sotopia.generation_utils.generate import LLM_Name, agenerate_script @@ -268,7 +270,10 @@ def get_agent_class( RuleBasedTerminatedEvaluator(max_turn_number=20, max_stale_turn=2), ], "terminal_evaluators": [ - ReachGoalLLMEvaluator(model_dict["env"]), + ReachGoalLLMEvaluator( + model_dict["env"], + EvaluationForTwoAgents[SotopiaDimensions], + ), ], } agents_model_dict = { @@ -339,7 +344,10 @@ async def arun_one_script( env_message = [("Environment", script_background)] agent_messages = env_message + agent_messages - evaluator = ReachGoalLLMEvaluator(model_name="gpt-4") + evaluator = ReachGoalLLMEvaluator( + model_name="gpt-4", + response_format_class=EvaluationForTwoAgents[SotopiaDimensions], + ) response = unweighted_aggregate_evaluate( list( itertools.chain( @@ -407,7 +415,10 @@ async def aevaluate_one_episode( history = episode.rewards_prompt.replace("Prompt after formatting:", "").split( ",\nBased on previous interactions" )[0] - evaluator = ReachGoalLLMEvaluator(model_name=model, response_format="basic") + evaluator = ReachGoalLLMEvaluator( + model_name=model, + response_format_class=EvaluationForTwoAgents[SotopiaDimensions], + ) response = unweighted_aggregate_evaluate( list( itertools.chain( diff --git a/tests/envs/test_evaluators.py b/tests/envs/test_evaluators.py index eacba3c4f..8da9f6772 100644 --- a/tests/envs/test_evaluators.py +++ b/tests/envs/test_evaluators.py @@ -3,6 +3,8 @@ import pytest from sotopia.envs.evaluators import ( + SotopiaDimensions, + EvaluationForTwoAgents, ReachGoalLLMEvaluator, RuleBasedTerminatedEvaluator, unweighted_aggregate_evaluate, @@ -126,7 +128,9 @@ async def test_rule_based_teminated_evaluator_async() -> None: @pytest.mark.asyncio async def test_reach_goal_llm_evaluator_async() -> None: - evaluator = ReachGoalLLMEvaluator("gpt-4") + evaluator = ReachGoalLLMEvaluator( + "gpt-4", response_format_class=EvaluationForTwoAgents[SotopiaDimensions] + ) response1, response2 = await asyncio.gather( evaluator.__acall__( 1, @@ -176,8 +180,10 @@ async def test_reach_goal_llm_evaluator_async() -> None: @pytest.mark.asyncio -async def test_reach_goal_llm_evaluator_goalonly_async() -> None: - evaluator = ReachGoalLLMEvaluator("gpt-4", response_format="goal_only") +async def test_reach_goal_llm_evaluator_goal_only_async() -> None: + evaluator = ReachGoalLLMEvaluator( + "gpt-4", response_format_class=EvaluationForTwoAgents[SotopiaDimensions] + ) background = ScriptBackground( scenario="Conversation between two friends at a trivia night", p1_name="Samuel Anderson", From f53472ab0aa4b901304f1c71863ca1a2727ee123 Mon Sep 17 00:00:00 2001 From: Ruiyi Wang <76935534+ruiyiw@users.noreply.github.com> Date: Tue, 9 Jul 2024 07:57:38 -0400 Subject: [PATCH 04/43] Support Azure API for agent and env models; Fix updates on langchain V0.2 (#132) * cherry picked generate.py from #69 * Add AzureOpenAI for agent and env models and Update to langchain V0.2 runnable interface * Delete azure api key input * Fix mypy errors --------- --- sotopia/generation_utils/generate.py | 57 ++++++++++++++++------ sotopia_conf/run_async_server_in_batch.gin | 3 +- 2 files changed, 43 insertions(+), 17 deletions(-) diff --git a/sotopia/generation_utils/generate.py b/sotopia/generation_utils/generate.py index 39a0d1548..4d9d710ef 100644 --- a/sotopia/generation_utils/generate.py +++ b/sotopia/generation_utils/generate.py @@ -1,12 +1,13 @@ import logging import os import re -from typing import TypeVar +from typing import TypeVar, Any import gin from beartype import beartype from beartype.typing import Type -from langchain.chains.llm import LLMChain +from langchain_core.runnables.base import RunnableSerializable +from langchain_core.messages.base import BaseMessage from langchain.output_parsers import PydanticOutputParser from langchain.prompts import ( ChatPromptTemplate, @@ -14,7 +15,7 @@ PromptTemplate, ) from langchain.schema import BaseOutputParser, OutputParserException -from langchain_openai import ChatOpenAI +from langchain_openai import ChatOpenAI, AzureChatOpenAI from pydantic import BaseModel, Field from rich import print from typing_extensions import Literal @@ -295,7 +296,7 @@ def obtain_chain( input_variables: list[str], temperature: float = 0.7, max_retries: int = 6, -) -> LLMChain: +) -> RunnableSerializable[dict[Any, Any], BaseMessage]: """ Using langchain to sample profiles for participants """ @@ -316,7 +317,7 @@ def obtain_chain( openai_api_base="https://api.together.xyz/v1", openai_api_key=os.environ.get("TOGETHER_API_KEY"), ) - chain = LLMChain(llm=chat_openai, prompt=chat_prompt_template) + chain = chat_prompt_template | chat_openai return chain elif "groq" in model_name: model_name = "/".join(model_name.split("/")[1:]) @@ -334,7 +335,31 @@ def obtain_chain( openai_api_base="https://api.groq.com/openai/v1", openai_api_key=os.environ.get("GROQ_API_KEY"), ) - chain = LLMChain(llm=chat_openai, prompt=chat_prompt_template) + chain = chat_prompt_template | chat_openai + return chain + elif "azure" in model_name: + # azure/resource_name/deployment_name/version + azure_credentials = model_name.split("/")[1:] + resource_name, deployment_name, azure_version = ( + azure_credentials[0], + azure_credentials[1], + azure_credentials[2], + ) + human_message_prompt = HumanMessagePromptTemplate( + prompt=PromptTemplate( + template=template, + input_variables=input_variables, + ) + ) + chat_prompt_template = ChatPromptTemplate.from_messages([human_message_prompt]) + chat_azure_openai = AzureChatOpenAI( + azure_deployment=deployment_name, + openai_api_version=azure_version, + azure_endpoint=f"https://{resource_name}.openai.azure.com", + temperature=temperature, + max_retries=max_retries, + ) + chain = chat_prompt_template | chat_azure_openai return chain else: chat = ChatOpenAI( @@ -346,7 +371,7 @@ def obtain_chain( prompt=PromptTemplate(template=template, input_variables=input_variables) ) chat_prompt_template = ChatPromptTemplate.from_messages([human_message_prompt]) - chain = LLMChain(llm=chat, prompt=chat_prompt_template) + chain = chat_prompt_template | chat return chain @@ -356,7 +381,7 @@ def format_bad_output_for_script( format_instructions: str, agents: list[str], model_name: str = "gpt-3.5-turbo", -) -> str: +) -> BaseMessage: template = """ Given the string that can not be parsed by a parser, reformat it to a string that can be parsed by the parser which uses the following format instructions. Do not add or delete any information. Small tip: for every round of conversation, first determine the name and the case, and whether this line contains errors. Correct it if necessary. @@ -380,17 +405,17 @@ def format_bad_output_for_script( "format_instructions": format_instructions, "agents": agents, } - reformat = chain.predict([logging_handler], **input_values) + reformat = chain.invoke(input_values, config={"callbacks": [logging_handler]}) log.info(f"Reformated output: {reformat}") return reformat @beartype def format_bad_output( - ill_formed_output: str, + ill_formed_output: BaseMessage, format_instructions: str, model_name: str = "gpt-3.5-turbo", -) -> str: +) -> BaseMessage: template = """ Given the string that can not be parsed by json parser, reformat it to a string that can be parsed by json parser. Original string: {ill_formed_output} @@ -405,10 +430,10 @@ def format_bad_output( input_variables=re.findall(r"{(.*?)}", template), ) input_values = { - "ill_formed_output": ill_formed_output, + "ill_formed_output": ill_formed_output.content, "format_instructions": format_instructions, } - reformat = chain.predict([logging_handler], **input_values) + reformat = chain.invoke(input_values, config={"callbacks": [logging_handler]}) log.info(f"Reformated output: {reformat}") return reformat @@ -437,9 +462,9 @@ async def agenerate( ) if "format_instructions" not in input_values: input_values["format_instructions"] = output_parser.get_format_instructions() - result = await chain.apredict([logging_handler], **input_values) + result = await chain.ainvoke(input_values, config={"callbacks": [logging_handler]}) try: - parsed_result = output_parser.parse(result) + parsed_result = output_parser.invoke(result) except Exception as e: if isinstance(output_parser, ScriptOutputParser): raise e # the problem has been handled in the parser @@ -450,7 +475,7 @@ async def agenerate( reformat_parsed_result = format_bad_output( result, format_instructions=output_parser.get_format_instructions() ) - parsed_result = output_parser.parse(reformat_parsed_result) + parsed_result = output_parser.invoke(reformat_parsed_result) log.info(f"Generated result: {parsed_result}") return parsed_result diff --git a/sotopia_conf/run_async_server_in_batch.gin b/sotopia_conf/run_async_server_in_batch.gin index 2d0f88026..544d0679a 100644 --- a/sotopia_conf/run_async_server_in_batch.gin +++ b/sotopia_conf/run_async_server_in_batch.gin @@ -2,12 +2,13 @@ from __gin__ import dynamic_registration import __main__ as main_script BATCH_SIZE=10 +ENV_MODEL="gpt-4" AGENT1_MODEL="gpt-3.5-turbo" AGENT2_MODEL="gpt-3.5-turbo" VERBOSE=False TAG_TO_CHECK_EXISTING_EPISODES=None -MODEL_NAMES={"env": "gpt-4", "agent1": %AGENT1_MODEL, "agent2": %AGENT2_MODEL} +MODEL_NAMES={"env": %ENV_MODEL, "agent1": %AGENT1_MODEL, "agent2": %AGENT2_MODEL} ENV_IDS=%gin.REQUIRED From 28f053a78600db759e0f90d69619050407b52034 Mon Sep 17 00:00:00 2001 From: Zhe Su <360307598@qq.com> Date: Thu, 11 Jul 2024 18:14:05 -0400 Subject: [PATCH 05/43] Improve the benchmark by evaluating multiple models and display the results (#126) * support benchmarking for multiple models & support aggregating and saving the results to compare different models * fix mypy issue * fix mypy issue * merge all the benchmark functions * now support printing to table with Rich * make output_to_json in benchmark_display an argument --- sotopia/cli/benchmark/benchmark.py | 139 +++++++++++++++++++++++++---- 1 file changed, 120 insertions(+), 19 deletions(-) diff --git a/sotopia/cli/benchmark/benchmark.py b/sotopia/cli/benchmark/benchmark.py index f52e09ba2..2e7634067 100644 --- a/sotopia/cli/benchmark/benchmark.py +++ b/sotopia/cli/benchmark/benchmark.py @@ -4,7 +4,8 @@ from sotopia.database.persistent_profile import EnvironmentList import asyncio import logging -from typing import cast +import json +from typing import cast, List, Dict, OrderedDict from logging import FileHandler from rich.logging import RichHandler @@ -267,9 +268,98 @@ def _set_up_logs( ) +def save_to_jsonl( + model_rewards_dict: Dict[str, Dict[str, float]], + partner_model: str, +) -> None: + simplified_model_name = partner_model.split("/")[-1] + output_fn = f"./models_vs_{simplified_model_name}.jsonl" + outputs: List[str] = [] + for model, rewards in model_rewards_dict.items(): + formatted_reward = OrderedDict( + { + "model_name": model, + **{ + f"{v[0]} {v[1]}": rewards[k] + for k, v in dimension_range_mapping.items() + }, + } + ) + outputs.append(json.dumps(formatted_reward)) + with open(output_fn, "w") as f: + f.write("\n".join(outputs)) + + print(f"Output saved to {output_fn}") + + +default_model_list: List[str] = [ + "gpt-4o", +] +dimension_range_mapping = OrderedDict( + { + "social_rules": ["SOC", [-10, 0]], + "secret": ["SEC", [-10, 0]], + "financial_and_material_benefits": ["FIN", [-5, 5]], + "relationship": ["REL", [-5, 5]], + "knowledge": ["KNO", [0, 10]], + "goal": ["GOAL", [0, 10]], + "believability": ["BEL", [0, 10]], + } +) + + +def display_in_table( + model_rewards_dict: Dict[str, Dict[str, float]], partner_model: str +) -> None: + table = rich.table.Table( + title="Model Performance when facing {}".format(partner_model) + ) + table.add_column("Model") + for dimension in dimension_range_mapping.keys(): + table.add_column(dimension) + for model, rewards in model_rewards_dict.items(): + table.add_row( + model, + *[f"{rewards[k]:.2f}" for k in dimension_range_mapping.keys()], + ) + rich.print(table) + + +def benchmark_display( + model_list: List[str] = default_model_list, + partner_model: str = "together_ai/meta-llama/Llama-3-70b-chat-hf", + evaluator_model: str = "gpt-4o", + task: str = "hard", + output_to_jsonl: bool = False, +) -> None: + """ + Usage: sotopia benchmark-display --model-list gpt-4o --model-list together_ai/meta-llama-Llama-3-70b-chat-hf + Aggregate all the results for the benchmark, as described in https://github.com/sotopia-lab/sotopia-space/blob/main/data_dir/models_vs_gpt35.jsonl + """ + + print(f"Displaying performance for {model_list} vs {partner_model} on task {task}") + model_rewards_dict = dict() + for model in model_list: + tag = f"benchmark_{model}_{partner_model}_{evaluator_model}_{task}_trial0" + episodes = EpisodeLog.find(EpisodeLog.tag == tag).all() + if len(episodes) == 0: + print(f"No episodes found for {model}") + continue + avg_rewards = get_avg_reward(episodes, model) # type: ignore + model_rewards_dict[model] = avg_rewards + print(f"Model: {model}, episodes: {len(episodes)}, Avg Rewards: {avg_rewards}") + + display_in_table(model_rewards_dict, partner_model) + if output_to_jsonl: + save_to_jsonl(model_rewards_dict, partner_model) + + @app.command() def benchmark( - model: str = typer.Option(..., help="The language model you want to benchmark."), + models: List[str] = typer.Option( + default_model_list, + help=f"All the language model you want to benchmark. Default is the pre-loaded model list {default_model_list}.", + ), partner_model: str = typer.Option( "together_ai/meta-llama/Llama-3-70b-chat-hf", help="The partner model you want to use.", @@ -280,24 +370,35 @@ def benchmark( batch_size: int = typer.Option(10, help="The batch size you want to use."), task: str = typer.Option("hard", help="The task id you want to benchmark."), print_logs: bool = typer.Option(False, help="Print logs."), + only_show_performance: bool = typer.Option(False, help="Only show performance."), + output_to_jsonl: bool = typer.Option(False, help="Output to jsonl."), ) -> None: + if only_show_performance: + benchmark_display(models, partner_model, evaluator_model, task, output_to_jsonl) + return + """A simple command-line interface example.""" _set_up_logs(print_logs=print_logs) - typer.echo( - f"Running benchmark for {model} chatting with {partner_model} on task {task} with {evaluator_model} as the evaluator." - ) - model = cast(LLM_Name, model) - partner_model = cast(LLM_Name, partner_model) - evaluator_model = cast(LLM_Name, evaluator_model) - tag = f"benchmark_{model}_{partner_model}_{evaluator_model}_{task}_trial0" - run_async_benchmark_in_batch( - batch_size=batch_size, - model_names={ - "env": evaluator_model, - "test_model": model, - "partner_model": partner_model, - }, - tag=tag, - verbose=False, - push_to_db=True, + + for model in models: + typer.echo( + f"Running benchmark for {model} chatting with {partner_model} on task {task} with {evaluator_model} as the evaluator." + ) + model = cast(LLM_Name, model) + partner_model = cast(LLM_Name, partner_model) + evaluator_model = cast(LLM_Name, evaluator_model) + tag = f"benchmark_{model}_{partner_model}_{evaluator_model}_{task}_trial0" + run_async_benchmark_in_batch( + batch_size=batch_size, + model_names={ + "env": evaluator_model, + "test_model": model, + "partner_model": partner_model, + }, + tag=tag, + verbose=False, + push_to_db=True, + ) + benchmark_display( + models, partner_model, evaluator_model, task, output_to_jsonl=output_to_jsonl ) From 1939bc6963f3c317a9bf62600126d24965f9969c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 13 Jul 2024 23:09:30 -0400 Subject: [PATCH 06/43] Bump litellm from 1.23.16 to 1.40.13 (#125) Bumps [litellm](https://github.com/BerriAI/litellm) from 1.23.16 to 1.40.13. - [Release notes](https://github.com/BerriAI/litellm/releases) - [Commits](https://github.com/BerriAI/litellm/compare/v1.23.16...v1.40.13) --- updated-dependencies: - dependency-name: litellm dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 18 +++++++++--------- pyproject.toml | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/poetry.lock b/poetry.lock index 6a96b780c..d71ef5dbb 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2141,13 +2141,13 @@ requests = ">=2,<3" [[package]] name = "litellm" -version = "1.23.16" +version = "1.40.13" description = "Library to easily interface with LLM API providers" optional = false -python-versions = ">=3.8, !=2.7.*, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*, !=3.7.*" +python-versions = "!=2.7.*,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,!=3.7.*,>=3.8" files = [ - {file = "litellm-1.23.16-py3-none-any.whl", hash = "sha256:c1d7183edc74dad7d140cb7c9ac0c23e550d4126549eb302c75b46380724a3ad"}, - {file = "litellm-1.23.16.tar.gz", hash = "sha256:7d477c8560743cc762f1e61fc2c209ffa9d733879da198daeb5d0effbb62a1c1"}, + {file = "litellm-1.40.13-py3-none-any.whl", hash = "sha256:b95ad1dea43f49804122c3f8a6c9f90ffb1d1d8654887d94aa6f77ed46ba7a5d"}, + {file = "litellm-1.40.13.tar.gz", hash = "sha256:7898a59a2a5c49abe166c857f79eeebe4fa3218cb93879da5f17b640787587cf"}, ] [package.dependencies] @@ -2155,15 +2155,15 @@ aiohttp = "*" click = "*" importlib-metadata = ">=6.8.0" jinja2 = ">=3.1.2,<4.0.0" -openai = ">=1.0.0" +openai = ">=1.27.0" python-dotenv = ">=0.2.0" requests = ">=2.31.0,<3.0.0" -tiktoken = ">=0.4.0" +tiktoken = ">=0.7.0" tokenizers = "*" [package.extras] -extra-proxy = ["streamlit (>=1.29.0,<2.0.0)"] -proxy = ["PyJWT (>=2.8.0,<3.0.0)", "apscheduler (>=3.10.4,<4.0.0)", "backoff", "fastapi (>=0.104.1,<0.105.0)", "fastapi-sso (>=0.10.0,<0.11.0)", "gunicorn (>=21.2.0,<22.0.0)", "orjson (>=3.9.7,<4.0.0)", "python-multipart (>=0.0.6,<0.0.7)", "pyyaml (>=6.0.1,<7.0.0)", "rq", "uvicorn (>=0.22.0,<0.23.0)"] +extra-proxy = ["azure-identity (>=1.15.0,<2.0.0)", "azure-keyvault-secrets (>=4.8.0,<5.0.0)", "google-cloud-kms (>=2.21.3,<3.0.0)", "prisma (==0.11.0)", "resend (>=0.8.0,<0.9.0)"] +proxy = ["PyJWT (>=2.8.0,<3.0.0)", "apscheduler (>=3.10.4,<4.0.0)", "backoff", "cryptography (>=42.0.5,<43.0.0)", "fastapi (>=0.111.0,<0.112.0)", "fastapi-sso (>=0.10.0,<0.11.0)", "gunicorn (>=22.0.0,<23.0.0)", "orjson (>=3.9.7,<4.0.0)", "python-multipart (>=0.0.9,<0.0.10)", "pyyaml (>=6.0.1,<7.0.0)", "rq", "uvicorn (>=0.22.0,<0.23.0)"] [[package]] name = "lxml" @@ -5380,4 +5380,4 @@ groq = ["groq"] [metadata] lock-version = "2.0" python-versions = ">=3.10, <3.13" -content-hash = "ffedc0d7d6aed3596541e63d08ab1214aa4f5228abe44c5a6668e056eed4a0c0" +content-hash = "c7fde1dcb0317048180ad14fa8469b72872e72123214b3e713e8052a8280712b" diff --git a/pyproject.toml b/pyproject.toml index 850de807c..f1d604bdf 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -21,7 +21,7 @@ together = "^0.2.4" pydantic = "1.10.12" beartype = "^0.14.0" langchain-openai = "~0.1.8" -litellm = "~1.23.12" +litellm = ">=1.23.12,<1.41.0" # dependency versions for extras fastapi = { version = ">=0.109.2,<0.111.0", optional = true } From 1bdd1556f6169b5cc601774b56e1cab4162e94b4 Mon Sep 17 00:00:00 2001 From: Xuhui Zhou Date: Tue, 16 Jul 2024 14:54:14 -0700 Subject: [PATCH 07/43] background as variable (#137) * background as variable * update docs --- docs/pages/generation.md | 16 + poetry.lock | 754 +++++++++++++++------------ sotopia/envs/parallel.py | 19 +- sotopia/generation_utils/generate.py | 4 +- 4 files changed, 441 insertions(+), 352 deletions(-) create mode 100644 docs/pages/generation.md diff --git a/docs/pages/generation.md b/docs/pages/generation.md new file mode 100644 index 000000000..c24eb6bb2 --- /dev/null +++ b/docs/pages/generation.md @@ -0,0 +1,16 @@ +## Generation functions + +The core of generating agent action and environment observation lies in the `agenerate` function: + +```python +@gin.configurable +@beartype +async def agenerate( + model_name: str, + template: str, + input_values: dict[str, str], + output_parser: BaseOutputParser[OutputType], + temperature: float = 0.7, +) -> OutputType: + input_variables = re.findall(r"(?=1.1.0" [[package]] name = "anthropic" -version = "0.30.0" +version = "0.30.1" description = "The official Python library for the anthropic API" optional = true python-versions = ">=3.7" files = [ - {file = "anthropic-0.30.0-py3-none-any.whl", hash = "sha256:061bf58c9c64968361e6c21c76ff5016a6f7fdd9a5f6b7f2280ede2c3b44bfd5"}, - {file = "anthropic-0.30.0.tar.gz", hash = "sha256:9e9ee2bfce833370eac74d7de433db97a0bf141f9118c40ac0e2f4c39bc2b76f"}, + {file = "anthropic-0.30.1-py3-none-any.whl", hash = "sha256:a58a8c3865a3df21e3b10e5fbd1a54b84cb01386f3e9fea9c65334b3cb306c6f"}, + {file = "anthropic-0.30.1.tar.gz", hash = "sha256:e082aa2601834a8a374f8bb45bca68493d892b2a03a1c44cfcc38465550c9b8b"}, ] [package.dependencies] @@ -247,17 +247,17 @@ test-tox-coverage = ["coverage (>=5.5)"] [[package]] name = "boto3" -version = "1.34.133" +version = "1.34.144" description = "The AWS SDK for Python" optional = true python-versions = ">=3.8" files = [ - {file = "boto3-1.34.133-py3-none-any.whl", hash = "sha256:da7e78c03270be872ad78301892396ffea56647efcb2c3a8621ef46a905541ab"}, - {file = "boto3-1.34.133.tar.gz", hash = "sha256:7071f8ce1f09113ca5630860fd590464e6325a4df55faae83c956225941016fc"}, + {file = "boto3-1.34.144-py3-none-any.whl", hash = "sha256:b8433d481d50b68a0162c0379c0dd4aabfc3d1ad901800beb5b87815997511c1"}, + {file = "boto3-1.34.144.tar.gz", hash = "sha256:2f3e88b10b8fcc5f6100a9d74cd28230edc9d4fa226d99dd40a3ab38ac213673"}, ] [package.dependencies] -botocore = ">=1.34.133,<1.35.0" +botocore = ">=1.34.144,<1.35.0" jmespath = ">=0.7.1,<2.0.0" s3transfer = ">=0.10.0,<0.11.0" @@ -266,13 +266,13 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "botocore" -version = "1.34.133" +version = "1.34.144" description = "Low-level, data-driven core of boto 3." optional = true python-versions = ">=3.8" files = [ - {file = "botocore-1.34.133-py3-none-any.whl", hash = "sha256:f269dad8e17432d2527b97ed9f1fd30ec8dc705f8b818957170d1af484680ef2"}, - {file = "botocore-1.34.133.tar.gz", hash = "sha256:5ea609aa4831a6589e32eef052a359ad8d7311733b4d86a9d35dab4bd3ec80ff"}, + {file = "botocore-1.34.144-py3-none-any.whl", hash = "sha256:a2cf26e1bf10d5917a2285e50257bc44e94a1d16574f282f3274f7a5d8d1f08b"}, + {file = "botocore-1.34.144.tar.gz", hash = "sha256:4215db28d25309d59c99507f1f77df9089e5bebbad35f6e19c7c44ec5383a3e8"}, ] [package.dependencies] @@ -285,24 +285,24 @@ crt = ["awscrt (==0.20.11)"] [[package]] name = "cachetools" -version = "5.3.3" +version = "5.4.0" 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"}, + {file = "cachetools-5.4.0-py3-none-any.whl", hash = "sha256:3ae3b49a3d5e28a77a0be2b37dbcb89005058959cb2323858c2657c4a8cab474"}, + {file = "cachetools-5.4.0.tar.gz", hash = "sha256:b8adc2e7c07f105ced7bc56dbb6dfbe7c4a00acce20e2227b3f355be89bc6827"}, ] [[package]] name = "certifi" -version = "2024.6.2" +version = "2024.7.4" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2024.6.2-py3-none-any.whl", hash = "sha256:ddc6c8ce995e6987e7faf5e3f1b02b302836a0e5d98ece18392cb1a36c72ad56"}, - {file = "certifi-2024.6.2.tar.gz", hash = "sha256:3cd43f1c6fa7dedc5899d69d3ad0398fd018ad1a17fba83ddaf78aa46c747516"}, + {file = "certifi-2024.7.4-py3-none-any.whl", hash = "sha256:c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90"}, + {file = "certifi-2024.7.4.tar.gz", hash = "sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b"}, ] [[package]] @@ -557,63 +557,63 @@ test = ["pytest"] [[package]] name = "coverage" -version = "7.5.4" +version = "7.6.0" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.8" files = [ - {file = "coverage-7.5.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6cfb5a4f556bb51aba274588200a46e4dd6b505fb1a5f8c5ae408222eb416f99"}, - {file = "coverage-7.5.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2174e7c23e0a454ffe12267a10732c273243b4f2d50d07544a91198f05c48f47"}, - {file = "coverage-7.5.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2214ee920787d85db1b6a0bd9da5f8503ccc8fcd5814d90796c2f2493a2f4d2e"}, - {file = "coverage-7.5.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1137f46adb28e3813dec8c01fefadcb8c614f33576f672962e323b5128d9a68d"}, - {file = "coverage-7.5.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b385d49609f8e9efc885790a5a0e89f2e3ae042cdf12958b6034cc442de428d3"}, - {file = "coverage-7.5.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b4a474f799456e0eb46d78ab07303286a84a3140e9700b9e154cfebc8f527016"}, - {file = "coverage-7.5.4-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:5cd64adedf3be66f8ccee418473c2916492d53cbafbfcff851cbec5a8454b136"}, - {file = "coverage-7.5.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e564c2cf45d2f44a9da56f4e3a26b2236504a496eb4cb0ca7221cd4cc7a9aca9"}, - {file = "coverage-7.5.4-cp310-cp310-win32.whl", hash = "sha256:7076b4b3a5f6d2b5d7f1185fde25b1e54eb66e647a1dfef0e2c2bfaf9b4c88c8"}, - {file = "coverage-7.5.4-cp310-cp310-win_amd64.whl", hash = "sha256:018a12985185038a5b2bcafab04ab833a9a0f2c59995b3cec07e10074c78635f"}, - {file = "coverage-7.5.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:db14f552ac38f10758ad14dd7b983dbab424e731588d300c7db25b6f89e335b5"}, - {file = "coverage-7.5.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3257fdd8e574805f27bb5342b77bc65578e98cbc004a92232106344053f319ba"}, - {file = "coverage-7.5.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a6612c99081d8d6134005b1354191e103ec9705d7ba2754e848211ac8cacc6b"}, - {file = "coverage-7.5.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d45d3cbd94159c468b9b8c5a556e3f6b81a8d1af2a92b77320e887c3e7a5d080"}, - {file = "coverage-7.5.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ed550e7442f278af76d9d65af48069f1fb84c9f745ae249c1a183c1e9d1b025c"}, - {file = "coverage-7.5.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7a892be37ca35eb5019ec85402c3371b0f7cda5ab5056023a7f13da0961e60da"}, - {file = "coverage-7.5.4-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8192794d120167e2a64721d88dbd688584675e86e15d0569599257566dec9bf0"}, - {file = "coverage-7.5.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:820bc841faa502e727a48311948e0461132a9c8baa42f6b2b84a29ced24cc078"}, - {file = "coverage-7.5.4-cp311-cp311-win32.whl", hash = "sha256:6aae5cce399a0f065da65c7bb1e8abd5c7a3043da9dceb429ebe1b289bc07806"}, - {file = "coverage-7.5.4-cp311-cp311-win_amd64.whl", hash = "sha256:d2e344d6adc8ef81c5a233d3a57b3c7d5181f40e79e05e1c143da143ccb6377d"}, - {file = "coverage-7.5.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:54317c2b806354cbb2dc7ac27e2b93f97096912cc16b18289c5d4e44fc663233"}, - {file = "coverage-7.5.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:042183de01f8b6d531e10c197f7f0315a61e8d805ab29c5f7b51a01d62782747"}, - {file = "coverage-7.5.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6bb74ed465d5fb204b2ec41d79bcd28afccf817de721e8a807d5141c3426638"}, - {file = "coverage-7.5.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3d45ff86efb129c599a3b287ae2e44c1e281ae0f9a9bad0edc202179bcc3a2e"}, - {file = "coverage-7.5.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5013ed890dc917cef2c9f765c4c6a8ae9df983cd60dbb635df8ed9f4ebc9f555"}, - {file = "coverage-7.5.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1014fbf665fef86cdfd6cb5b7371496ce35e4d2a00cda501cf9f5b9e6fced69f"}, - {file = "coverage-7.5.4-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3684bc2ff328f935981847082ba4fdc950d58906a40eafa93510d1b54c08a66c"}, - {file = "coverage-7.5.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:581ea96f92bf71a5ec0974001f900db495488434a6928a2ca7f01eee20c23805"}, - {file = "coverage-7.5.4-cp312-cp312-win32.whl", hash = "sha256:73ca8fbc5bc622e54627314c1a6f1dfdd8db69788f3443e752c215f29fa87a0b"}, - {file = "coverage-7.5.4-cp312-cp312-win_amd64.whl", hash = "sha256:cef4649ec906ea7ea5e9e796e68b987f83fa9a718514fe147f538cfeda76d7a7"}, - {file = "coverage-7.5.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cdd31315fc20868c194130de9ee6bfd99755cc9565edff98ecc12585b90be882"}, - {file = "coverage-7.5.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:02ff6e898197cc1e9fa375581382b72498eb2e6d5fc0b53f03e496cfee3fac6d"}, - {file = "coverage-7.5.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d05c16cf4b4c2fc880cb12ba4c9b526e9e5d5bb1d81313d4d732a5b9fe2b9d53"}, - {file = "coverage-7.5.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c5986ee7ea0795a4095ac4d113cbb3448601efca7f158ec7f7087a6c705304e4"}, - {file = "coverage-7.5.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5df54843b88901fdc2f598ac06737f03d71168fd1175728054c8f5a2739ac3e4"}, - {file = "coverage-7.5.4-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:ab73b35e8d109bffbda9a3e91c64e29fe26e03e49addf5b43d85fc426dde11f9"}, - {file = "coverage-7.5.4-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:aea072a941b033813f5e4814541fc265a5c12ed9720daef11ca516aeacd3bd7f"}, - {file = "coverage-7.5.4-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:16852febd96acd953b0d55fc842ce2dac1710f26729b31c80b940b9afcd9896f"}, - {file = "coverage-7.5.4-cp38-cp38-win32.whl", hash = "sha256:8f894208794b164e6bd4bba61fc98bf6b06be4d390cf2daacfa6eca0a6d2bb4f"}, - {file = "coverage-7.5.4-cp38-cp38-win_amd64.whl", hash = "sha256:e2afe743289273209c992075a5a4913e8d007d569a406ffed0bd080ea02b0633"}, - {file = "coverage-7.5.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b95c3a8cb0463ba9f77383d0fa8c9194cf91f64445a63fc26fb2327e1e1eb088"}, - {file = "coverage-7.5.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3d7564cc09dd91b5a6001754a5b3c6ecc4aba6323baf33a12bd751036c998be4"}, - {file = "coverage-7.5.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:44da56a2589b684813f86d07597fdf8a9c6ce77f58976727329272f5a01f99f7"}, - {file = "coverage-7.5.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e16f3d6b491c48c5ae726308e6ab1e18ee830b4cdd6913f2d7f77354b33f91c8"}, - {file = "coverage-7.5.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dbc5958cb471e5a5af41b0ddaea96a37e74ed289535e8deca404811f6cb0bc3d"}, - {file = "coverage-7.5.4-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:a04e990a2a41740b02d6182b498ee9796cf60eefe40cf859b016650147908029"}, - {file = "coverage-7.5.4-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:ddbd2f9713a79e8e7242d7c51f1929611e991d855f414ca9996c20e44a895f7c"}, - {file = "coverage-7.5.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b1ccf5e728ccf83acd313c89f07c22d70d6c375a9c6f339233dcf792094bcbf7"}, - {file = "coverage-7.5.4-cp39-cp39-win32.whl", hash = "sha256:56b4eafa21c6c175b3ede004ca12c653a88b6f922494b023aeb1e836df953ace"}, - {file = "coverage-7.5.4-cp39-cp39-win_amd64.whl", hash = "sha256:65e528e2e921ba8fd67d9055e6b9f9e34b21ebd6768ae1c1723f4ea6ace1234d"}, - {file = "coverage-7.5.4-pp38.pp39.pp310-none-any.whl", hash = "sha256:79b356f3dd5b26f3ad23b35c75dbdaf1f9e2450b6bcefc6d0825ea0aa3f86ca5"}, - {file = "coverage-7.5.4.tar.gz", hash = "sha256:a44963520b069e12789d0faea4e9fdb1e410cdc4aab89d94f7f55cbb7fef0353"}, + {file = "coverage-7.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dff044f661f59dace805eedb4a7404c573b6ff0cdba4a524141bc63d7be5c7fd"}, + {file = "coverage-7.6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a8659fd33ee9e6ca03950cfdcdf271d645cf681609153f218826dd9805ab585c"}, + {file = "coverage-7.6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7792f0ab20df8071d669d929c75c97fecfa6bcab82c10ee4adb91c7a54055463"}, + {file = "coverage-7.6.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d4b3cd1ca7cd73d229487fa5caca9e4bc1f0bca96526b922d61053ea751fe791"}, + {file = "coverage-7.6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e7e128f85c0b419907d1f38e616c4f1e9f1d1b37a7949f44df9a73d5da5cd53c"}, + {file = "coverage-7.6.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a94925102c89247530ae1dab7dc02c690942566f22e189cbd53579b0693c0783"}, + {file = "coverage-7.6.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:dcd070b5b585b50e6617e8972f3fbbee786afca71b1936ac06257f7e178f00f6"}, + {file = "coverage-7.6.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d50a252b23b9b4dfeefc1f663c568a221092cbaded20a05a11665d0dbec9b8fb"}, + {file = "coverage-7.6.0-cp310-cp310-win32.whl", hash = "sha256:0e7b27d04131c46e6894f23a4ae186a6a2207209a05df5b6ad4caee6d54a222c"}, + {file = "coverage-7.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:54dece71673b3187c86226c3ca793c5f891f9fc3d8aa183f2e3653da18566169"}, + {file = "coverage-7.6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c7b525ab52ce18c57ae232ba6f7010297a87ced82a2383b1afd238849c1ff933"}, + {file = "coverage-7.6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4bea27c4269234e06f621f3fac3925f56ff34bc14521484b8f66a580aacc2e7d"}, + {file = "coverage-7.6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed8d1d1821ba5fc88d4a4f45387b65de52382fa3ef1f0115a4f7a20cdfab0e94"}, + {file = "coverage-7.6.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:01c322ef2bbe15057bc4bf132b525b7e3f7206f071799eb8aa6ad1940bcf5fb1"}, + {file = "coverage-7.6.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03cafe82c1b32b770a29fd6de923625ccac3185a54a5e66606da26d105f37dac"}, + {file = "coverage-7.6.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0d1b923fc4a40c5832be4f35a5dab0e5ff89cddf83bb4174499e02ea089daf57"}, + {file = "coverage-7.6.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4b03741e70fb811d1a9a1d75355cf391f274ed85847f4b78e35459899f57af4d"}, + {file = "coverage-7.6.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a73d18625f6a8a1cbb11eadc1d03929f9510f4131879288e3f7922097a429f63"}, + {file = "coverage-7.6.0-cp311-cp311-win32.whl", hash = "sha256:65fa405b837060db569a61ec368b74688f429b32fa47a8929a7a2f9b47183713"}, + {file = "coverage-7.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:6379688fb4cfa921ae349c76eb1a9ab26b65f32b03d46bb0eed841fd4cb6afb1"}, + {file = "coverage-7.6.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f7db0b6ae1f96ae41afe626095149ecd1b212b424626175a6633c2999eaad45b"}, + {file = "coverage-7.6.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bbdf9a72403110a3bdae77948b8011f644571311c2fb35ee15f0f10a8fc082e8"}, + {file = "coverage-7.6.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cc44bf0315268e253bf563f3560e6c004efe38f76db03a1558274a6e04bf5d5"}, + {file = "coverage-7.6.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:da8549d17489cd52f85a9829d0e1d91059359b3c54a26f28bec2c5d369524807"}, + {file = "coverage-7.6.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0086cd4fc71b7d485ac93ca4239c8f75732c2ae3ba83f6be1c9be59d9e2c6382"}, + {file = "coverage-7.6.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1fad32ee9b27350687035cb5fdf9145bc9cf0a094a9577d43e909948ebcfa27b"}, + {file = "coverage-7.6.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:044a0985a4f25b335882b0966625270a8d9db3d3409ddc49a4eb00b0ef5e8cee"}, + {file = "coverage-7.6.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:76d5f82213aa78098b9b964ea89de4617e70e0d43e97900c2778a50856dac605"}, + {file = "coverage-7.6.0-cp312-cp312-win32.whl", hash = "sha256:3c59105f8d58ce500f348c5b56163a4113a440dad6daa2294b5052a10db866da"}, + {file = "coverage-7.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:ca5d79cfdae420a1d52bf177de4bc2289c321d6c961ae321503b2ca59c17ae67"}, + {file = "coverage-7.6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d39bd10f0ae453554798b125d2f39884290c480f56e8a02ba7a6ed552005243b"}, + {file = "coverage-7.6.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:beb08e8508e53a568811016e59f3234d29c2583f6b6e28572f0954a6b4f7e03d"}, + {file = "coverage-7.6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2e16f4cd2bc4d88ba30ca2d3bbf2f21f00f382cf4e1ce3b1ddc96c634bc48ca"}, + {file = "coverage-7.6.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6616d1c9bf1e3faea78711ee42a8b972367d82ceae233ec0ac61cc7fec09fa6b"}, + {file = "coverage-7.6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad4567d6c334c46046d1c4c20024de2a1c3abc626817ae21ae3da600f5779b44"}, + {file = "coverage-7.6.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d17c6a415d68cfe1091d3296ba5749d3d8696e42c37fca5d4860c5bf7b729f03"}, + {file = "coverage-7.6.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:9146579352d7b5f6412735d0f203bbd8d00113a680b66565e205bc605ef81bc6"}, + {file = "coverage-7.6.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:cdab02a0a941af190df8782aafc591ef3ad08824f97850b015c8c6a8b3877b0b"}, + {file = "coverage-7.6.0-cp38-cp38-win32.whl", hash = "sha256:df423f351b162a702c053d5dddc0fc0ef9a9e27ea3f449781ace5f906b664428"}, + {file = "coverage-7.6.0-cp38-cp38-win_amd64.whl", hash = "sha256:f2501d60d7497fd55e391f423f965bbe9e650e9ffc3c627d5f0ac516026000b8"}, + {file = "coverage-7.6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7221f9ac9dad9492cecab6f676b3eaf9185141539d5c9689d13fd6b0d7de840c"}, + {file = "coverage-7.6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ddaaa91bfc4477d2871442bbf30a125e8fe6b05da8a0015507bfbf4718228ab2"}, + {file = "coverage-7.6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4cbe651f3904e28f3a55d6f371203049034b4ddbce65a54527a3f189ca3b390"}, + {file = "coverage-7.6.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:831b476d79408ab6ccfadaaf199906c833f02fdb32c9ab907b1d4aa0713cfa3b"}, + {file = "coverage-7.6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46c3d091059ad0b9c59d1034de74a7f36dcfa7f6d3bde782c49deb42438f2450"}, + {file = "coverage-7.6.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:4d5fae0a22dc86259dee66f2cc6c1d3e490c4a1214d7daa2a93d07491c5c04b6"}, + {file = "coverage-7.6.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:07ed352205574aad067482e53dd606926afebcb5590653121063fbf4e2175166"}, + {file = "coverage-7.6.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:49c76cdfa13015c4560702574bad67f0e15ca5a2872c6a125f6327ead2b731dd"}, + {file = "coverage-7.6.0-cp39-cp39-win32.whl", hash = "sha256:482855914928c8175735a2a59c8dc5806cf7d8f032e4820d52e845d1f731dca2"}, + {file = "coverage-7.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:543ef9179bc55edfd895154a51792b01c017c87af0ebaae092720152e19e42ca"}, + {file = "coverage-7.6.0-pp38.pp39.pp310-none-any.whl", hash = "sha256:6fe885135c8a479d3e37a7aae61cbd3a0fb2deccb4dda3c25f92a49189f766d6"}, + {file = "coverage-7.6.0.tar.gz", hash = "sha256:289cc803fa1dc901f84701ac10c9ee873619320f2f9aff38794db4a4a0268d51"}, ] [package.dependencies] @@ -801,13 +801,13 @@ files = [ [[package]] name = "exceptiongroup" -version = "1.2.1" +version = "1.2.2" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.2.1-py3-none-any.whl", hash = "sha256:5258b9ed329c5bbdd31a309f53cbfb0b155341807f6ff7606a1e801a891b29ad"}, - {file = "exceptiongroup-1.2.1.tar.gz", hash = "sha256:a4785e48b045528f5bfe627b6ad554ff32def154f42372786903b7abcfe1aa16"}, + {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, + {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, ] [package.extras] @@ -859,42 +859,42 @@ all = ["email_validator (>=2.0.0)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)" [[package]] name = "fastavro" -version = "1.9.4" +version = "1.9.5" description = "Fast read/write of AVRO files" optional = true python-versions = ">=3.8" files = [ - {file = "fastavro-1.9.4-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:60cb38f07462a7fb4e4440ed0de67d3d400ae6b3d780f81327bebde9aa55faef"}, - {file = "fastavro-1.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:063d01d197fc929c20adc09ca9f0ca86d33ac25ee0963ce0b438244eee8315ae"}, - {file = "fastavro-1.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87a9053fcfbc895f2a16a4303af22077e3a8fdcf1cd5d6ed47ff2ef22cbba2f0"}, - {file = "fastavro-1.9.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:02bf1276b7326397314adf41b34a4890f6ffa59cf7e0eb20b9e4ab0a143a1598"}, - {file = "fastavro-1.9.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:56bed9eca435389a8861e6e2d631ec7f8f5dda5b23f93517ac710665bd34ca29"}, - {file = "fastavro-1.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:0cd2099c8c672b853e0b20c13e9b62a69d3fbf67ee7c59c7271ba5df1680310d"}, - {file = "fastavro-1.9.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:af8c6d8c43a02b5569c093fc5467469541ac408c79c36a5b0900d3dd0b3ba838"}, - {file = "fastavro-1.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4a138710bd61580324d23bc5e3df01f0b82aee0a76404d5dddae73d9e4c723f"}, - {file = "fastavro-1.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:903d97418120ca6b6a7f38a731166c1ccc2c4344ee5e0470d09eb1dc3687540a"}, - {file = "fastavro-1.9.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c443eeb99899d062dbf78c525e4614dd77e041a7688fa2710c224f4033f193ae"}, - {file = "fastavro-1.9.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ac26ab0774d1b2b7af6d8f4300ad20bbc4b5469e658a02931ad13ce23635152f"}, - {file = "fastavro-1.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:cf7247874c22be856ba7d1f46a0f6e0379a6025f1a48a7da640444cbac6f570b"}, - {file = "fastavro-1.9.4-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:68912f2020e1b3d70557260b27dd85fb49a4fc6bfab18d384926127452c1da4c"}, - {file = "fastavro-1.9.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6925ce137cdd78e109abdb0bc33aad55de6c9f2d2d3036b65453128f2f5f5b92"}, - {file = "fastavro-1.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b928cd294e36e35516d0deb9e104b45be922ba06940794260a4e5dbed6c192a"}, - {file = "fastavro-1.9.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:90c9838bc4c991ffff5dd9d88a0cc0030f938b3fdf038cdf6babde144b920246"}, - {file = "fastavro-1.9.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:eca6e54da571b06a3c5a72dbb7212073f56c92a6fbfbf847b91c347510f8a426"}, - {file = "fastavro-1.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:a4b02839ac261100cefca2e2ad04cdfedc556cb66b5ec735e0db428e74b399de"}, - {file = "fastavro-1.9.4-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:4451ee9a305a73313a1558d471299f3130e4ecc10a88bf5742aa03fb37e042e6"}, - {file = "fastavro-1.9.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a8524fccfb379565568c045d29b2ebf71e1f2c0dd484aeda9fe784ef5febe1a8"}, - {file = "fastavro-1.9.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33d0a00a6e09baa20f6f038d7a2ddcb7eef0e7a9980e947a018300cb047091b8"}, - {file = "fastavro-1.9.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:23d7e5b29c9bf6f26e8be754b2c8b919838e506f78ef724de7d22881696712fc"}, - {file = "fastavro-1.9.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2e6ab3ee53944326460edf1125b2ad5be2fadd80f7211b13c45fa0c503b4cf8d"}, - {file = "fastavro-1.9.4-cp38-cp38-win_amd64.whl", hash = "sha256:64d335ec2004204c501f8697c385d0a8f6b521ac82d5b30696f789ff5bc85f3c"}, - {file = "fastavro-1.9.4-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:7e05f44c493e89e73833bd3ff3790538726906d2856f59adc8103539f4a1b232"}, - {file = "fastavro-1.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:253c63993250bff4ee7b11fb46cf3a4622180a783bedc82a24c6fdcd1b10ca2a"}, - {file = "fastavro-1.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24d6942eb1db14640c2581e0ecd1bbe0afc8a83731fcd3064ae7f429d7880cb7"}, - {file = "fastavro-1.9.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d47bb66be6091cd48cfe026adcad11c8b11d7d815a2949a1e4ccf03df981ca65"}, - {file = "fastavro-1.9.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c293897f12f910e58a1024f9c77f565aa8e23b36aafda6ad8e7041accc57a57f"}, - {file = "fastavro-1.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:f05d2afcb10a92e2a9e580a3891f090589b3e567fdc5641f8a46a0b084f120c3"}, - {file = "fastavro-1.9.4.tar.gz", hash = "sha256:56b8363e360a1256c94562393dc7f8611f3baf2b3159f64fb2b9c6b87b14e876"}, + {file = "fastavro-1.9.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:61253148e95dd2b6457247b441b7555074a55de17aef85f5165bfd5facf600fc"}, + {file = "fastavro-1.9.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b604935d671ad47d888efc92a106f98e9440874108b444ac10e28d643109c937"}, + {file = "fastavro-1.9.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0adbf4956fd53bd74c41e7855bb45ccce953e0eb0e44f5836d8d54ad843f9944"}, + {file = "fastavro-1.9.5-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:53d838e31457db8bf44460c244543f75ed307935d5fc1d93bc631cc7caef2082"}, + {file = "fastavro-1.9.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:07b6288e8681eede16ff077632c47395d4925c2f51545cd7a60f194454db2211"}, + {file = "fastavro-1.9.5-cp310-cp310-win_amd64.whl", hash = "sha256:ef08cf247fdfd61286ac0c41854f7194f2ad05088066a756423d7299b688d975"}, + {file = "fastavro-1.9.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c52d7bb69f617c90935a3e56feb2c34d4276819a5c477c466c6c08c224a10409"}, + {file = "fastavro-1.9.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85e05969956003df8fa4491614bc62fe40cec59e94d06e8aaa8d8256ee3aab82"}, + {file = "fastavro-1.9.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06e6df8527493a9f0d9a8778df82bab8b1aa6d80d1b004e5aec0a31dc4dc501c"}, + {file = "fastavro-1.9.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:27820da3b17bc01cebb6d1687c9d7254b16d149ef458871aaa207ed8950f3ae6"}, + {file = "fastavro-1.9.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:195a5b8e33eb89a1a9b63fa9dce7a77d41b3b0cd785bac6044df619f120361a2"}, + {file = "fastavro-1.9.5-cp311-cp311-win_amd64.whl", hash = "sha256:be612c109efb727bfd36d4d7ed28eb8e0506617b7dbe746463ebbf81e85eaa6b"}, + {file = "fastavro-1.9.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b133456c8975ec7d2a99e16a7e68e896e45c821b852675eac4ee25364b999c14"}, + {file = "fastavro-1.9.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf586373c3d1748cac849395aad70c198ee39295f92e7c22c75757b5c0300fbe"}, + {file = "fastavro-1.9.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:724ef192bc9c55d5b4c7df007f56a46a21809463499856349d4580a55e2b914c"}, + {file = "fastavro-1.9.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:bfd11fe355a8f9c0416803afac298960eb4c603a23b1c74ff9c1d3e673ea7185"}, + {file = "fastavro-1.9.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:9827d1654d7bcb118ef5efd3e5b2c9ab2a48d44dac5e8c6a2327bc3ac3caa828"}, + {file = "fastavro-1.9.5-cp312-cp312-win_amd64.whl", hash = "sha256:d84b69dca296667e6137ae7c9a96d060123adbc0c00532cc47012b64d38b47e9"}, + {file = "fastavro-1.9.5-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:fb744e9de40fb1dc75354098c8db7da7636cba50a40f7bef3b3fb20f8d189d88"}, + {file = "fastavro-1.9.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:240df8bacd13ff5487f2465604c007d686a566df5cbc01d0550684eaf8ff014a"}, + {file = "fastavro-1.9.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3bb35c25bbc3904e1c02333bc1ae0173e0a44aa37a8e95d07e681601246e1f1"}, + {file = "fastavro-1.9.5-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:b47a54a9700de3eabefd36dabfb237808acae47bc873cada6be6990ef6b165aa"}, + {file = "fastavro-1.9.5-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:48c7b5e6d2f3bf7917af301c275b05c5be3dd40bb04e80979c9e7a2ab31a00d1"}, + {file = "fastavro-1.9.5-cp38-cp38-win_amd64.whl", hash = "sha256:05d13f98d4e325be40387e27da9bd60239968862fe12769258225c62ec906f04"}, + {file = "fastavro-1.9.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5b47948eb196263f6111bf34e1cd08d55529d4ed46eb50c1bc8c7c30a8d18868"}, + {file = "fastavro-1.9.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85b7a66ad521298ad9373dfe1897a6ccfc38feab54a47b97922e213ae5ad8870"}, + {file = "fastavro-1.9.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44cb154f863ad80e41aea72a709b12e1533b8728c89b9b1348af91a6154ab2f5"}, + {file = "fastavro-1.9.5-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:b5f7f2b1fe21231fd01f1a2a90e714ae267fe633cd7ce930c0aea33d1c9f4901"}, + {file = "fastavro-1.9.5-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:88fbbe16c61d90a89d78baeb5a34dc1c63a27b115adccdbd6b1fb6f787deacf2"}, + {file = "fastavro-1.9.5-cp39-cp39-win_amd64.whl", hash = "sha256:753f5eedeb5ca86004e23a9ce9b41c5f25eb64a876f95edcc33558090a7f3e4b"}, + {file = "fastavro-1.9.5.tar.gz", hash = "sha256:6419ebf45f88132a9945c51fe555d4f10bb97c236288ed01894f957c6f914553"}, ] [package.extras] @@ -1081,13 +1081,13 @@ torch = ["torch (>=1.3.0)"] [[package]] name = "google-ai-generativelanguage" -version = "0.6.5" +version = "0.6.6" description = "Google Ai Generativelanguage API client library" optional = true python-versions = ">=3.7" files = [ - {file = "google-ai-generativelanguage-0.6.5.tar.gz", hash = "sha256:c4089c277fa4e26722f76ab03ee3039f28be8bf1c9be282948b9583a154c6d79"}, - {file = "google_ai_generativelanguage-0.6.5-py3-none-any.whl", hash = "sha256:236875bb4a6d6ebdba2f12bd9d5e776100fd913402157a47b5e9fb80a13f25a7"}, + {file = "google-ai-generativelanguage-0.6.6.tar.gz", hash = "sha256:1739f035caeeeca5c28f887405eec8690f3372daf79fecf26454a97a4f1733a8"}, + {file = "google_ai_generativelanguage-0.6.6-py3-none-any.whl", hash = "sha256:59297737931f073d55ce1268dcc6d95111ee62850349d2b6cde942b16a4fca5c"}, ] [package.dependencies] @@ -1129,13 +1129,13 @@ grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] [[package]] name = "google-api-python-client" -version = "2.134.0" +version = "2.137.0" description = "Google API Client Library for Python" optional = true python-versions = ">=3.7" files = [ - {file = "google-api-python-client-2.134.0.tar.gz", hash = "sha256:4a8f0bea651a212997cc83c0f271fc86f80ef93d1cee9d84de7dfaeef2a858b6"}, - {file = "google_api_python_client-2.134.0-py2.py3-none-any.whl", hash = "sha256:ba05d60f6239990b7994f6328f17bb154c602d31860fb553016dc9f8ce886945"}, + {file = "google_api_python_client-2.137.0-py2.py3-none-any.whl", hash = "sha256:a8b5c5724885e5be9f5368739aa0ccf416627da4ebd914b410a090c18f84d692"}, + {file = "google_api_python_client-2.137.0.tar.gz", hash = "sha256:e739cb74aac8258b1886cb853b0722d47c81fe07ad649d7f2206f06530513c04"}, ] [package.dependencies] @@ -1147,13 +1147,13 @@ uritemplate = ">=3.0.1,<5" [[package]] name = "google-auth" -version = "2.30.0" +version = "2.32.0" description = "Google Authentication Library" optional = true python-versions = ">=3.7" files = [ - {file = "google-auth-2.30.0.tar.gz", hash = "sha256:ab630a1320f6720909ad76a7dbdb6841cdf5c66b328d690027e4867bdfb16688"}, - {file = "google_auth-2.30.0-py2.py3-none-any.whl", hash = "sha256:8df7da660f62757388b8a7f249df13549b3373f24388cb5d2f1dd91cc18180b5"}, + {file = "google_auth-2.32.0-py2.py3-none-any.whl", hash = "sha256:53326ea2ebec768070a94bee4e1b9194c9646ea0c2bd72422785bd0f9abfad7b"}, + {file = "google_auth-2.32.0.tar.gz", hash = "sha256:49315be72c55a6a37d62819e3573f6b416aca00721f7e3e31a008d928bf64022"}, ] [package.dependencies] @@ -1185,16 +1185,16 @@ httplib2 = ">=0.19.0" [[package]] name = "google-generativeai" -version = "0.7.0" +version = "0.7.2" description = "Google Generative AI High level API client library and tools." optional = true python-versions = ">=3.9" files = [ - {file = "google_generativeai-0.7.0-py3-none-any.whl", hash = "sha256:7be4b634afeb8b6bebde1af7271e94d2af84d2d28b5988c7ed9921733c40fe63"}, + {file = "google_generativeai-0.7.2-py3-none-any.whl", hash = "sha256:3117d1ebc92ee77710d4bc25ab4763492fddce9b6332eb25d124cf5d8b78b339"}, ] [package.dependencies] -google-ai-generativelanguage = "0.6.5" +google-ai-generativelanguage = "0.6.6" google-api-core = "*" google-api-python-client = "*" google-auth = ">=2.15.0" @@ -1652,13 +1652,13 @@ typing = ["types-PyYAML", "types-requests", "types-simplejson", "types-toml", "t [[package]] name = "identify" -version = "2.5.36" +version = "2.6.0" description = "File identification library for Python" optional = false python-versions = ">=3.8" files = [ - {file = "identify-2.5.36-py2.py3-none-any.whl", hash = "sha256:37d93f380f4de590500d9dba7db359d0d3da95ffe7f9de1753faa159e71e7dfa"}, - {file = "identify-2.5.36.tar.gz", hash = "sha256:e5e00f54165f9047fbebeb4a560f9acfb8af4c88232be60a488e9b68d122745d"}, + {file = "identify-2.6.0-py2.py3-none-any.whl", hash = "sha256:e79ae4406387a9d300332b5fd366d8994f1525e8414984e1a59e058b2eda2dd0"}, + {file = "identify-2.6.0.tar.gz", hash = "sha256:cb171c685bdc31bcc4c1734698736a7d5b6c8bf2e0c15117f4d469c8640ae5cf"}, ] [package.extras] @@ -1721,13 +1721,13 @@ files = [ [[package]] name = "ipykernel" -version = "6.29.4" +version = "6.29.5" description = "IPython Kernel for Jupyter" optional = false python-versions = ">=3.8" files = [ - {file = "ipykernel-6.29.4-py3-none-any.whl", hash = "sha256:1181e653d95c6808039c509ef8e67c4126b3b3af7781496c7cbfb5ed938a27da"}, - {file = "ipykernel-6.29.4.tar.gz", hash = "sha256:3d44070060f9475ac2092b760123fadf105d2e2493c24848b6691a7c4f42af5c"}, + {file = "ipykernel-6.29.5-py3-none-any.whl", hash = "sha256:afdb66ba5aa354b09b91379bac28ae4afebbb30e8b39510c9690afb7a10421b5"}, + {file = "ipykernel-6.29.5.tar.gz", hash = "sha256:f093a22c4a40f8828f8e330a9c297cb93dcab13bd9678ded6de8e5cf81c56215"}, ] [package.dependencies] @@ -1754,13 +1754,13 @@ test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio [[package]] name = "ipython" -version = "8.25.0" +version = "8.26.0" description = "IPython: Productive Interactive Computing" optional = false python-versions = ">=3.10" files = [ - {file = "ipython-8.25.0-py3-none-any.whl", hash = "sha256:53eee7ad44df903a06655871cbab66d156a051fd86f3ec6750470ac9604ac1ab"}, - {file = "ipython-8.25.0.tar.gz", hash = "sha256:c6ed726a140b6e725b911528f80439c534fac915246af3efc39440a6b0f9d716"}, + {file = "ipython-8.26.0-py3-none-any.whl", hash = "sha256:e6b347c27bdf9c32ee9d31ae85defc525755a1869f14057e900675b9e8d6e6ff"}, + {file = "ipython-8.26.0.tar.gz", hash = "sha256:1cec0fbba8404af13facebe83d04436a7434c7400e59f47acf467c64abd0956c"}, ] [package.dependencies] @@ -1787,7 +1787,7 @@ nbformat = ["nbformat"] notebook = ["ipywidgets", "notebook"] parallel = ["ipyparallel"] qtconsole = ["qtconsole"] -test = ["pickleshare", "pytest", "pytest-asyncio (<0.22)", "testpath"] +test = ["packaging", "pickleshare", "pytest", "pytest-asyncio (<0.22)", "testpath"] test-extra = ["curio", "ipython[test]", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.23)", "pandas", "trio"] [[package]] @@ -1934,13 +1934,13 @@ files = [ [[package]] name = "jsonschema" -version = "4.22.0" +version = "4.23.0" description = "An implementation of JSON Schema validation for Python" optional = false python-versions = ">=3.8" files = [ - {file = "jsonschema-4.22.0-py3-none-any.whl", hash = "sha256:ff4cfd6b1367a40e7bc6411caec72effadd3db0bbe5017de188f2d6108335802"}, - {file = "jsonschema-4.22.0.tar.gz", hash = "sha256:5b22d434a45935119af990552c862e5d6d564e8f6601206b305a61fdf661a2b7"}, + {file = "jsonschema-4.23.0-py3-none-any.whl", hash = "sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566"}, + {file = "jsonschema-4.23.0.tar.gz", hash = "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4"}, ] [package.dependencies] @@ -1951,7 +1951,7 @@ rpds-py = ">=0.7.1" [package.extras] format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] -format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] +format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=24.6.0)"] [[package]] name = "jsonschema-specifications" @@ -2026,6 +2026,30 @@ async-timeout = {version = ">=4.0.0,<5.0.0", markers = "python_version < \"3.11\ langchain-core = ">=0.2.7,<0.3.0" langchain-text-splitters = ">=0.2.0,<0.3.0" langsmith = ">=0.1.17,<0.2.0" +numpy = {version = ">=1.26.0,<2.0.0", markers = "python_version >= \"3.12\""} +pydantic = ">=1,<3" +PyYAML = ">=5.3" +requests = ">=2,<3" +SQLAlchemy = ">=1.4,<3" +tenacity = ">=8.1.0,<9.0.0" + +[[package]] +name = "langchain" +version = "0.2.8" +description = "Building applications with LLMs through composability" +optional = false +python-versions = "<4.0,>=3.8.1" +files = [ + {file = "langchain-0.2.8-py3-none-any.whl", hash = "sha256:53e7dfe50294a14200f33bec22b4e14cb63857ccf0a5500b0d18b0fd51285d58"}, + {file = "langchain-0.2.8.tar.gz", hash = "sha256:7fecb309e3558cde4e5cf7e9ffb7c1ab3f07121c40a7ff3b0c27135f8120c296"}, +] + +[package.dependencies] +aiohttp = ">=3.8.3,<4.0.0" +async-timeout = {version = ">=4.0.0,<5.0.0", markers = "python_version < \"3.11\""} +langchain-core = ">=0.2.19,<0.3.0" +langchain-text-splitters = ">=0.2.0,<0.3.0" +langsmith = ">=0.1.17,<0.2.0" numpy = [ {version = ">=1,<2", markers = "python_version < \"3.12\""}, {version = ">=1.26.0,<2.0.0", markers = "python_version >= \"3.12\""}, @@ -2034,7 +2058,7 @@ pydantic = ">=1,<3" PyYAML = ">=5.3" requests = ">=2,<3" SQLAlchemy = ">=1.4,<3" -tenacity = ">=8.1.0,<9.0.0" +tenacity = ">=8.1.0,<8.4.0 || >8.4.0,<9.0.0" [[package]] name = "langchain-core" @@ -2057,13 +2081,13 @@ tenacity = ">=8.1.0,<9.0.0" [[package]] name = "langchain-core" -version = "0.2.10" +version = "0.2.19" description = "Building applications with LLMs through composability" optional = false python-versions = "<4.0,>=3.8.1" files = [ - {file = "langchain_core-0.2.10-py3-none-any.whl", hash = "sha256:6eb72086b6bc86db9812da98f79e507c2209a15c0112aefd214a04182ada8586"}, - {file = "langchain_core-0.2.10.tar.gz", hash = "sha256:33d1fc234ab58c80476eb5bbde2107ef522a2ce8f46bdf47d9e1bd21e054208f"}, + {file = "langchain_core-0.2.19-py3-none-any.whl", hash = "sha256:5b3cd34395be274c89e822c84f0e03c4da14168c177a83921c5b9414ac7a0651"}, + {file = "langchain_core-0.2.19.tar.gz", hash = "sha256:13043a83e5c9ab58b9f5ce2a56896e7e88b752e8891b2958960a98e71801471e"}, ] [package.dependencies] @@ -2076,18 +2100,34 @@ tenacity = ">=8.1.0,<8.4.0 || >8.4.0,<9.0.0" [[package]] name = "langchain-openai" -version = "0.1.10" +version = "0.1.14" description = "An integration package connecting OpenAI and LangChain" optional = false python-versions = "<4.0,>=3.8.1" files = [ - {file = "langchain_openai-0.1.10-py3-none-any.whl", hash = "sha256:62eb000980eb45e4f16c88acdbaeccf3d59266554b0dd3ce6bebea1bbe8143dd"}, - {file = "langchain_openai-0.1.10.tar.gz", hash = "sha256:30f881f8ccaec28c054759837c41fd2a2264fcc5564728ce12e1715891a9ce3c"}, + {file = "langchain_openai-0.1.14-py3-none-any.whl", hash = "sha256:fcd34cc5b5713798908a5828d364b4426e3b1afccbd564d344e5477acb86634a"}, + {file = "langchain_openai-0.1.14.tar.gz", hash = "sha256:1f13d6041e8bedddf6eb47ccad7416e05af38fa169324f7f1bdf4f385780f8d8"}, ] [package.dependencies] langchain-core = ">=0.2.2,<0.3" -openai = ">=1.26.0,<2.0.0" +openai = ">=1.32.0,<2.0.0" +tiktoken = ">=0.7,<1" + +[[package]] +name = "langchain-openai" +version = "0.1.16" +description = "An integration package connecting OpenAI and LangChain" +optional = false +python-versions = "<4.0,>=3.8.1" +files = [ + {file = "langchain_openai-0.1.16-py3-none-any.whl", hash = "sha256:bff90e9d0be786495920a7851ae4d55247fb084d3a11d1b15bfe91904ce1cb0f"}, + {file = "langchain_openai-0.1.16.tar.gz", hash = "sha256:3dedcc785a64a488ad6a313cc59b0dccea025d27413b55cec73a20dcf3ded4da"}, +] + +[package.dependencies] +langchain-core = ">=0.2.17,<0.3.0" +openai = ">=1.32.0,<2.0.0" tiktoken = ">=0.7,<1" [[package]] @@ -2107,6 +2147,20 @@ langchain-core = ">=0.2.0,<0.3.0" [package.extras] extended-testing = ["beautifulsoup4 (>=4.12.3,<5.0.0)", "lxml (>=4.9.3,<6.0)"] +[[package]] +name = "langchain-text-splitters" +version = "0.2.2" +description = "LangChain text splitting utilities" +optional = false +python-versions = "<4.0,>=3.8.1" +files = [ + {file = "langchain_text_splitters-0.2.2-py3-none-any.whl", hash = "sha256:1c80d4b11b55e2995f02d2a326c0323ee1eeff24507329bb22924e420c782dff"}, + {file = "langchain_text_splitters-0.2.2.tar.gz", hash = "sha256:a1e45de10919fa6fb080ef0525deab56557e9552083600455cb9fa4238076140"}, +] + +[package.dependencies] +langchain-core = ">=0.2.10,<0.3.0" + [[package]] name = "langsmith" version = "0.1.81" @@ -2125,13 +2179,13 @@ requests = ">=2,<3" [[package]] name = "langsmith" -version = "0.1.82" +version = "0.1.86" description = "Client library to connect to the LangSmith LLM Tracing and Evaluation Platform." optional = false python-versions = "<4.0,>=3.8.1" files = [ - {file = "langsmith-0.1.82-py3-none-any.whl", hash = "sha256:9b3653e7d316036b0c60bf0bc3e280662d660f485a4ebd8e5c9d84f9831ae79c"}, - {file = "langsmith-0.1.82.tar.gz", hash = "sha256:c02e2bbc488c10c13b52c69d271eb40bd38da078d37b6ae7ae04a18bd48140be"}, + {file = "langsmith-0.1.86-py3-none-any.whl", hash = "sha256:55ed80cc6e98f9761f9b3ec3c49e01f6745d13e40bef80d9f831acabfd9a8a1e"}, + {file = "langsmith-0.1.86.tar.gz", hash = "sha256:2e66577817253327b99b727588c3173fbba217fe0ca07ac6b7cdd23fc4894104"}, ] [package.dependencies] @@ -2935,14 +2989,13 @@ files = [ [[package]] name = "nvidia-nvjitlink-cu12" -version = "12.5.40" +version = "12.5.82" description = "Nvidia JIT LTO Library" optional = true python-versions = ">=3" files = [ - {file = "nvidia_nvjitlink_cu12-12.5.40-py3-none-manylinux2014_aarch64.whl", hash = "sha256:004186d5ea6a57758fd6d57052a123c73a4815adf365eb8dd6a85c9eaa7535ff"}, - {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"}, + {file = "nvidia_nvjitlink_cu12-12.5.82-py3-none-manylinux2014_x86_64.whl", hash = "sha256:f9b37bc5c8cf7509665cb6ada5aaa0ce65618f2332b7d3e78e9790511f111212"}, + {file = "nvidia_nvjitlink_cu12-12.5.82-py3-none-win_amd64.whl", hash = "sha256:e782564d705ff0bf61ac3e1bf730166da66dd2fe9012f111ede5fc49b64ae697"}, ] [[package]] @@ -2958,13 +3011,13 @@ files = [ [[package]] name = "openai" -version = "1.35.3" +version = "1.35.14" description = "The official Python library for the openai API" optional = false python-versions = ">=3.7.1" files = [ - {file = "openai-1.35.3-py3-none-any.whl", hash = "sha256:7b26544cef80f125431c073ffab3811d2421fbb9e30d3bd5c2436aba00b042d5"}, - {file = "openai-1.35.3.tar.gz", hash = "sha256:d6177087f150b381d49499be782d764213fdf638d391b29ca692b84dd675a389"}, + {file = "openai-1.35.14-py3-none-any.whl", hash = "sha256:adadf8c176e0b8c47ad782ed45dc20ef46438ee1f02c7103c4155cff79c8f68b"}, + {file = "openai-1.35.14.tar.gz", hash = "sha256:394ba1dfd12ecec1d634c50e512d24ff1858bbc2674ffcce309b822785a058de"}, ] [package.dependencies] @@ -2981,57 +3034,62 @@ datalib = ["numpy (>=1)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"] [[package]] name = "orjson" -version = "3.10.5" +version = "3.10.6" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.8" files = [ - {file = "orjson-3.10.5-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:545d493c1f560d5ccfc134803ceb8955a14c3fcb47bbb4b2fee0232646d0b932"}, - {file = "orjson-3.10.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4324929c2dd917598212bfd554757feca3e5e0fa60da08be11b4aa8b90013c1"}, - {file = "orjson-3.10.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8c13ca5e2ddded0ce6a927ea5a9f27cae77eee4c75547b4297252cb20c4d30e6"}, - {file = "orjson-3.10.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b6c8e30adfa52c025f042a87f450a6b9ea29649d828e0fec4858ed5e6caecf63"}, - {file = "orjson-3.10.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:338fd4f071b242f26e9ca802f443edc588fa4ab60bfa81f38beaedf42eda226c"}, - {file = "orjson-3.10.5-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6970ed7a3126cfed873c5d21ece1cd5d6f83ca6c9afb71bbae21a0b034588d96"}, - {file = "orjson-3.10.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:235dadefb793ad12f7fa11e98a480db1f7c6469ff9e3da5e73c7809c700d746b"}, - {file = "orjson-3.10.5-cp310-none-win32.whl", hash = "sha256:be79e2393679eda6a590638abda16d167754393f5d0850dcbca2d0c3735cebe2"}, - {file = "orjson-3.10.5-cp310-none-win_amd64.whl", hash = "sha256:c4a65310ccb5c9910c47b078ba78e2787cb3878cdded1702ac3d0da71ddc5228"}, - {file = "orjson-3.10.5-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:cdf7365063e80899ae3a697def1277c17a7df7ccfc979990a403dfe77bb54d40"}, - {file = "orjson-3.10.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b68742c469745d0e6ca5724506858f75e2f1e5b59a4315861f9e2b1df77775a"}, - {file = "orjson-3.10.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7d10cc1b594951522e35a3463da19e899abe6ca95f3c84c69e9e901e0bd93d38"}, - {file = "orjson-3.10.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dcbe82b35d1ac43b0d84072408330fd3295c2896973112d495e7234f7e3da2e1"}, - {file = "orjson-3.10.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c0eb7e0c75e1e486c7563fe231b40fdd658a035ae125c6ba651ca3b07936f5"}, - {file = "orjson-3.10.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:53ed1c879b10de56f35daf06dbc4a0d9a5db98f6ee853c2dbd3ee9d13e6f302f"}, - {file = "orjson-3.10.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:099e81a5975237fda3100f918839af95f42f981447ba8f47adb7b6a3cdb078fa"}, - {file = "orjson-3.10.5-cp311-none-win32.whl", hash = "sha256:1146bf85ea37ac421594107195db8bc77104f74bc83e8ee21a2e58596bfb2f04"}, - {file = "orjson-3.10.5-cp311-none-win_amd64.whl", hash = "sha256:36a10f43c5f3a55c2f680efe07aa93ef4a342d2960dd2b1b7ea2dd764fe4a37c"}, - {file = "orjson-3.10.5-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:68f85ecae7af14a585a563ac741b0547a3f291de81cd1e20903e79f25170458f"}, - {file = "orjson-3.10.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28afa96f496474ce60d3340fe8d9a263aa93ea01201cd2bad844c45cd21f5268"}, - {file = "orjson-3.10.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9cd684927af3e11b6e754df80b9ffafd9fb6adcaa9d3e8fdd5891be5a5cad51e"}, - {file = "orjson-3.10.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d21b9983da032505f7050795e98b5d9eee0df903258951566ecc358f6696969"}, - {file = "orjson-3.10.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ad1de7fef79736dde8c3554e75361ec351158a906d747bd901a52a5c9c8d24b"}, - {file = "orjson-3.10.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2d97531cdfe9bdd76d492e69800afd97e5930cb0da6a825646667b2c6c6c0211"}, - {file = "orjson-3.10.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d69858c32f09c3e1ce44b617b3ebba1aba030e777000ebdf72b0d8e365d0b2b3"}, - {file = "orjson-3.10.5-cp312-none-win32.whl", hash = "sha256:64c9cc089f127e5875901ac05e5c25aa13cfa5dbbbd9602bda51e5c611d6e3e2"}, - {file = "orjson-3.10.5-cp312-none-win_amd64.whl", hash = "sha256:b2efbd67feff8c1f7728937c0d7f6ca8c25ec81373dc8db4ef394c1d93d13dc5"}, - {file = "orjson-3.10.5-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:03b565c3b93f5d6e001db48b747d31ea3819b89abf041ee10ac6988886d18e01"}, - {file = "orjson-3.10.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:584c902ec19ab7928fd5add1783c909094cc53f31ac7acfada817b0847975f26"}, - {file = "orjson-3.10.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5a35455cc0b0b3a1eaf67224035f5388591ec72b9b6136d66b49a553ce9eb1e6"}, - {file = "orjson-3.10.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1670fe88b116c2745a3a30b0f099b699a02bb3482c2591514baf5433819e4f4d"}, - {file = "orjson-3.10.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:185c394ef45b18b9a7d8e8f333606e2e8194a50c6e3c664215aae8cf42c5385e"}, - {file = "orjson-3.10.5-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:ca0b3a94ac8d3886c9581b9f9de3ce858263865fdaa383fbc31c310b9eac07c9"}, - {file = "orjson-3.10.5-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:dfc91d4720d48e2a709e9c368d5125b4b5899dced34b5400c3837dadc7d6271b"}, - {file = "orjson-3.10.5-cp38-none-win32.whl", hash = "sha256:c05f16701ab2a4ca146d0bca950af254cb7c02f3c01fca8efbbad82d23b3d9d4"}, - {file = "orjson-3.10.5-cp38-none-win_amd64.whl", hash = "sha256:8a11d459338f96a9aa7f232ba95679fc0c7cedbd1b990d736467894210205c09"}, - {file = "orjson-3.10.5-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:85c89131d7b3218db1b24c4abecea92fd6c7f9fab87441cfc342d3acc725d807"}, - {file = "orjson-3.10.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb66215277a230c456f9038d5e2d84778141643207f85336ef8d2a9da26bd7ca"}, - {file = "orjson-3.10.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:51bbcdea96cdefa4a9b4461e690c75ad4e33796530d182bdd5c38980202c134a"}, - {file = "orjson-3.10.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbead71dbe65f959b7bd8cf91e0e11d5338033eba34c114f69078d59827ee139"}, - {file = "orjson-3.10.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5df58d206e78c40da118a8c14fc189207fffdcb1f21b3b4c9c0c18e839b5a214"}, - {file = "orjson-3.10.5-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:c4057c3b511bb8aef605616bd3f1f002a697c7e4da6adf095ca5b84c0fd43595"}, - {file = "orjson-3.10.5-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b39e006b00c57125ab974362e740c14a0c6a66ff695bff44615dcf4a70ce2b86"}, - {file = "orjson-3.10.5-cp39-none-win32.whl", hash = "sha256:eded5138cc565a9d618e111c6d5c2547bbdd951114eb822f7f6309e04db0fb47"}, - {file = "orjson-3.10.5-cp39-none-win_amd64.whl", hash = "sha256:cc28e90a7cae7fcba2493953cff61da5a52950e78dc2dacfe931a317ee3d8de7"}, - {file = "orjson-3.10.5.tar.gz", hash = "sha256:7a5baef8a4284405d96c90c7c62b755e9ef1ada84c2406c24a9ebec86b89f46d"}, + {file = "orjson-3.10.6-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:fb0ee33124db6eaa517d00890fc1a55c3bfe1cf78ba4a8899d71a06f2d6ff5c7"}, + {file = "orjson-3.10.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c1c4b53b24a4c06547ce43e5fee6ec4e0d8fe2d597f4647fc033fd205707365"}, + {file = "orjson-3.10.6-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eadc8fd310edb4bdbd333374f2c8fec6794bbbae99b592f448d8214a5e4050c0"}, + {file = "orjson-3.10.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:61272a5aec2b2661f4fa2b37c907ce9701e821b2c1285d5c3ab0207ebd358d38"}, + {file = "orjson-3.10.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57985ee7e91d6214c837936dc1608f40f330a6b88bb13f5a57ce5257807da143"}, + {file = "orjson-3.10.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:633a3b31d9d7c9f02d49c4ab4d0a86065c4a6f6adc297d63d272e043472acab5"}, + {file = "orjson-3.10.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:1c680b269d33ec444afe2bdc647c9eb73166fa47a16d9a75ee56a374f4a45f43"}, + {file = "orjson-3.10.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f759503a97a6ace19e55461395ab0d618b5a117e8d0fbb20e70cfd68a47327f2"}, + {file = "orjson-3.10.6-cp310-none-win32.whl", hash = "sha256:95a0cce17f969fb5391762e5719575217bd10ac5a189d1979442ee54456393f3"}, + {file = "orjson-3.10.6-cp310-none-win_amd64.whl", hash = "sha256:df25d9271270ba2133cc88ee83c318372bdc0f2cd6f32e7a450809a111efc45c"}, + {file = "orjson-3.10.6-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:b1ec490e10d2a77c345def52599311849fc063ae0e67cf4f84528073152bb2ba"}, + {file = "orjson-3.10.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55d43d3feb8f19d07e9f01e5b9be4f28801cf7c60d0fa0d279951b18fae1932b"}, + {file = "orjson-3.10.6-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac3045267e98fe749408eee1593a142e02357c5c99be0802185ef2170086a863"}, + {file = "orjson-3.10.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c27bc6a28ae95923350ab382c57113abd38f3928af3c80be6f2ba7eb8d8db0b0"}, + {file = "orjson-3.10.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d27456491ca79532d11e507cadca37fb8c9324a3976294f68fb1eff2dc6ced5a"}, + {file = "orjson-3.10.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05ac3d3916023745aa3b3b388e91b9166be1ca02b7c7e41045da6d12985685f0"}, + {file = "orjson-3.10.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1335d4ef59ab85cab66fe73fd7a4e881c298ee7f63ede918b7faa1b27cbe5212"}, + {file = "orjson-3.10.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4bbc6d0af24c1575edc79994c20e1b29e6fb3c6a570371306db0993ecf144dc5"}, + {file = "orjson-3.10.6-cp311-none-win32.whl", hash = "sha256:450e39ab1f7694465060a0550b3f6d328d20297bf2e06aa947b97c21e5241fbd"}, + {file = "orjson-3.10.6-cp311-none-win_amd64.whl", hash = "sha256:227df19441372610b20e05bdb906e1742ec2ad7a66ac8350dcfd29a63014a83b"}, + {file = "orjson-3.10.6-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:ea2977b21f8d5d9b758bb3f344a75e55ca78e3ff85595d248eee813ae23ecdfb"}, + {file = "orjson-3.10.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b6f3d167d13a16ed263b52dbfedff52c962bfd3d270b46b7518365bcc2121eed"}, + {file = "orjson-3.10.6-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f710f346e4c44a4e8bdf23daa974faede58f83334289df80bc9cd12fe82573c7"}, + {file = "orjson-3.10.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7275664f84e027dcb1ad5200b8b18373e9c669b2a9ec33d410c40f5ccf4b257e"}, + {file = "orjson-3.10.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0943e4c701196b23c240b3d10ed8ecd674f03089198cf503105b474a4f77f21f"}, + {file = "orjson-3.10.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:446dee5a491b5bc7d8f825d80d9637e7af43f86a331207b9c9610e2f93fee22a"}, + {file = "orjson-3.10.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:64c81456d2a050d380786413786b057983892db105516639cb5d3ee3c7fd5148"}, + {file = "orjson-3.10.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:960db0e31c4e52fa0fc3ecbaea5b2d3b58f379e32a95ae6b0ebeaa25b93dfd34"}, + {file = "orjson-3.10.6-cp312-none-win32.whl", hash = "sha256:a6ea7afb5b30b2317e0bee03c8d34c8181bc5a36f2afd4d0952f378972c4efd5"}, + {file = "orjson-3.10.6-cp312-none-win_amd64.whl", hash = "sha256:874ce88264b7e655dde4aeaacdc8fd772a7962faadfb41abe63e2a4861abc3dc"}, + {file = "orjson-3.10.6-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:66680eae4c4e7fc193d91cfc1353ad6d01b4801ae9b5314f17e11ba55e934183"}, + {file = "orjson-3.10.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:caff75b425db5ef8e8f23af93c80f072f97b4fb3afd4af44482905c9f588da28"}, + {file = "orjson-3.10.6-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3722fddb821b6036fd2a3c814f6bd9b57a89dc6337b9924ecd614ebce3271394"}, + {file = "orjson-3.10.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c2c116072a8533f2fec435fde4d134610f806bdac20188c7bd2081f3e9e0133f"}, + {file = "orjson-3.10.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6eeb13218c8cf34c61912e9df2de2853f1d009de0e46ea09ccdf3d757896af0a"}, + {file = "orjson-3.10.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:965a916373382674e323c957d560b953d81d7a8603fbeee26f7b8248638bd48b"}, + {file = "orjson-3.10.6-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:03c95484d53ed8e479cade8628c9cea00fd9d67f5554764a1110e0d5aa2de96e"}, + {file = "orjson-3.10.6-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:e060748a04cccf1e0a6f2358dffea9c080b849a4a68c28b1b907f272b5127e9b"}, + {file = "orjson-3.10.6-cp38-none-win32.whl", hash = "sha256:738dbe3ef909c4b019d69afc19caf6b5ed0e2f1c786b5d6215fbb7539246e4c6"}, + {file = "orjson-3.10.6-cp38-none-win_amd64.whl", hash = "sha256:d40f839dddf6a7d77114fe6b8a70218556408c71d4d6e29413bb5f150a692ff7"}, + {file = "orjson-3.10.6-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:697a35a083c4f834807a6232b3e62c8b280f7a44ad0b759fd4dce748951e70db"}, + {file = "orjson-3.10.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd502f96bf5ea9a61cbc0b2b5900d0dd68aa0da197179042bdd2be67e51a1e4b"}, + {file = "orjson-3.10.6-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f215789fb1667cdc874c1b8af6a84dc939fd802bf293a8334fce185c79cd359b"}, + {file = "orjson-3.10.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a2debd8ddce948a8c0938c8c93ade191d2f4ba4649a54302a7da905a81f00b56"}, + {file = "orjson-3.10.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5410111d7b6681d4b0d65e0f58a13be588d01b473822483f77f513c7f93bd3b2"}, + {file = "orjson-3.10.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb1f28a137337fdc18384079fa5726810681055b32b92253fa15ae5656e1dddb"}, + {file = "orjson-3.10.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:bf2fbbce5fe7cd1aa177ea3eab2b8e6a6bc6e8592e4279ed3db2d62e57c0e1b2"}, + {file = "orjson-3.10.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:79b9b9e33bd4c517445a62b90ca0cc279b0f1f3970655c3df9e608bc3f91741a"}, + {file = "orjson-3.10.6-cp39-none-win32.whl", hash = "sha256:30b0a09a2014e621b1adf66a4f705f0809358350a757508ee80209b2d8dae219"}, + {file = "orjson-3.10.6-cp39-none-win_amd64.whl", hash = "sha256:49e3bc615652617d463069f91b867a4458114c5b104e13b7ae6872e5f79d0844"}, + {file = "orjson-3.10.6.tar.gz", hash = "sha256:e54b63d0a7c6c54a5f5f726bc93a2078111ef060fec4ecbf34c5db800ca3b3a7"}, ] [[package]] @@ -3808,13 +3866,13 @@ cffi = {version = "*", markers = "implementation_name == \"pypy\""} [[package]] name = "redis" -version = "5.0.6" +version = "5.0.7" description = "Python client for Redis database and key-value store" optional = false python-versions = ">=3.7" files = [ - {file = "redis-5.0.6-py3-none-any.whl", hash = "sha256:c0d6d990850c627bbf7be01c5c4cbaadf67b48593e913bb71c9819c30df37eee"}, - {file = "redis-5.0.6.tar.gz", hash = "sha256:38473cd7c6389ad3e44a91f4c3eaf6bcb8a9f746007f29bf4fb20824ff0b2197"}, + {file = "redis-5.0.7-py3-none-any.whl", hash = "sha256:0e479e24da960c690be5d9b96d21f7b918a98c0cf49af3b6fafaa0753f93a0db"}, + {file = "redis-5.0.7.tar.gz", hash = "sha256:8f611490b93c8109b50adc317b31bfd84fff31def3475b92e7e80bf39f48175b"}, ] [package.dependencies] @@ -3990,110 +4048,110 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "rpds-py" -version = "0.18.1" +version = "0.19.0" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false python-versions = ">=3.8" files = [ - {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"}, + {file = "rpds_py-0.19.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:fb37bd599f031f1a6fb9e58ec62864ccf3ad549cf14bac527dbfa97123edcca4"}, + {file = "rpds_py-0.19.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3384d278df99ec2c6acf701d067147320b864ef6727405d6470838476e44d9e8"}, + {file = "rpds_py-0.19.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e54548e0be3ac117595408fd4ca0ac9278fde89829b0b518be92863b17ff67a2"}, + {file = "rpds_py-0.19.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8eb488ef928cdbc05a27245e52de73c0d7c72a34240ef4d9893fdf65a8c1a955"}, + {file = "rpds_py-0.19.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a5da93debdfe27b2bfc69eefb592e1831d957b9535e0943a0ee8b97996de21b5"}, + {file = "rpds_py-0.19.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:79e205c70afddd41f6ee79a8656aec738492a550247a7af697d5bd1aee14f766"}, + {file = "rpds_py-0.19.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:959179efb3e4a27610e8d54d667c02a9feaa86bbabaf63efa7faa4dfa780d4f1"}, + {file = "rpds_py-0.19.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a6e605bb9edcf010f54f8b6a590dd23a4b40a8cb141255eec2a03db249bc915b"}, + {file = "rpds_py-0.19.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:9133d75dc119a61d1a0ded38fb9ba40a00ef41697cc07adb6ae098c875195a3f"}, + {file = "rpds_py-0.19.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:dd36b712d35e757e28bf2f40a71e8f8a2d43c8b026d881aa0c617b450d6865c9"}, + {file = "rpds_py-0.19.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:354f3a91718489912f2e0fc331c24eaaf6a4565c080e00fbedb6015857c00582"}, + {file = "rpds_py-0.19.0-cp310-none-win32.whl", hash = "sha256:ebcbf356bf5c51afc3290e491d3722b26aaf5b6af3c1c7f6a1b757828a46e336"}, + {file = "rpds_py-0.19.0-cp310-none-win_amd64.whl", hash = "sha256:75a6076289b2df6c8ecb9d13ff79ae0cad1d5fb40af377a5021016d58cd691ec"}, + {file = "rpds_py-0.19.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:6d45080095e585f8c5097897313def60caa2046da202cdb17a01f147fb263b81"}, + {file = "rpds_py-0.19.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c5c9581019c96f865483d031691a5ff1cc455feb4d84fc6920a5ffc48a794d8a"}, + {file = "rpds_py-0.19.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1540d807364c84516417115c38f0119dfec5ea5c0dd9a25332dea60b1d26fc4d"}, + {file = "rpds_py-0.19.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9e65489222b410f79711dc3d2d5003d2757e30874096b2008d50329ea4d0f88c"}, + {file = "rpds_py-0.19.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9da6f400eeb8c36f72ef6646ea530d6d175a4f77ff2ed8dfd6352842274c1d8b"}, + {file = "rpds_py-0.19.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:37f46bb11858717e0efa7893c0f7055c43b44c103e40e69442db5061cb26ed34"}, + {file = "rpds_py-0.19.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:071d4adc734de562bd11d43bd134330fb6249769b2f66b9310dab7460f4bf714"}, + {file = "rpds_py-0.19.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9625367c8955e4319049113ea4f8fee0c6c1145192d57946c6ffcd8fe8bf48dd"}, + {file = "rpds_py-0.19.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e19509145275d46bc4d1e16af0b57a12d227c8253655a46bbd5ec317e941279d"}, + {file = "rpds_py-0.19.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4d438e4c020d8c39961deaf58f6913b1bf8832d9b6f62ec35bd93e97807e9cbc"}, + {file = "rpds_py-0.19.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:90bf55d9d139e5d127193170f38c584ed3c79e16638890d2e36f23aa1630b952"}, + {file = "rpds_py-0.19.0-cp311-none-win32.whl", hash = "sha256:8d6ad132b1bc13d05ffe5b85e7a01a3998bf3a6302ba594b28d61b8c2cf13aaf"}, + {file = "rpds_py-0.19.0-cp311-none-win_amd64.whl", hash = "sha256:7ec72df7354e6b7f6eb2a17fa6901350018c3a9ad78e48d7b2b54d0412539a67"}, + {file = "rpds_py-0.19.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:5095a7c838a8647c32aa37c3a460d2c48debff7fc26e1136aee60100a8cd8f68"}, + {file = "rpds_py-0.19.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6f2f78ef14077e08856e788fa482107aa602636c16c25bdf59c22ea525a785e9"}, + {file = "rpds_py-0.19.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7cc6cb44f8636fbf4a934ca72f3e786ba3c9f9ba4f4d74611e7da80684e48d2"}, + {file = "rpds_py-0.19.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cf902878b4af334a09de7a45badbff0389e7cf8dc2e4dcf5f07125d0b7c2656d"}, + {file = "rpds_py-0.19.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:688aa6b8aa724db1596514751ffb767766e02e5c4a87486ab36b8e1ebc1aedac"}, + {file = "rpds_py-0.19.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57dbc9167d48e355e2569346b5aa4077f29bf86389c924df25c0a8b9124461fb"}, + {file = "rpds_py-0.19.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b4cf5a9497874822341c2ebe0d5850fed392034caadc0bad134ab6822c0925b"}, + {file = "rpds_py-0.19.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8a790d235b9d39c70a466200d506bb33a98e2ee374a9b4eec7a8ac64c2c261fa"}, + {file = "rpds_py-0.19.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1d16089dfa58719c98a1c06f2daceba6d8e3fb9b5d7931af4a990a3c486241cb"}, + {file = "rpds_py-0.19.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:bc9128e74fe94650367fe23f37074f121b9f796cabbd2f928f13e9661837296d"}, + {file = "rpds_py-0.19.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c8f77e661ffd96ff104bebf7d0f3255b02aa5d5b28326f5408d6284c4a8b3248"}, + {file = "rpds_py-0.19.0-cp312-none-win32.whl", hash = "sha256:5f83689a38e76969327e9b682be5521d87a0c9e5a2e187d2bc6be4765f0d4600"}, + {file = "rpds_py-0.19.0-cp312-none-win_amd64.whl", hash = "sha256:06925c50f86da0596b9c3c64c3837b2481337b83ef3519e5db2701df695453a4"}, + {file = "rpds_py-0.19.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:52e466bea6f8f3a44b1234570244b1cff45150f59a4acae3fcc5fd700c2993ca"}, + {file = "rpds_py-0.19.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e21cc693045fda7f745c790cb687958161ce172ffe3c5719ca1764e752237d16"}, + {file = "rpds_py-0.19.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b31f059878eb1f5da8b2fd82480cc18bed8dcd7fb8fe68370e2e6285fa86da6"}, + {file = "rpds_py-0.19.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1dd46f309e953927dd018567d6a9e2fb84783963650171f6c5fe7e5c41fd5666"}, + {file = "rpds_py-0.19.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:34a01a4490e170376cd79258b7f755fa13b1a6c3667e872c8e35051ae857a92b"}, + {file = "rpds_py-0.19.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bcf426a8c38eb57f7bf28932e68425ba86def6e756a5b8cb4731d8e62e4e0223"}, + {file = "rpds_py-0.19.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f68eea5df6347d3f1378ce992d86b2af16ad7ff4dcb4a19ccdc23dea901b87fb"}, + {file = "rpds_py-0.19.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dab8d921b55a28287733263c0e4c7db11b3ee22aee158a4de09f13c93283c62d"}, + {file = "rpds_py-0.19.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:6fe87efd7f47266dfc42fe76dae89060038f1d9cb911f89ae7e5084148d1cc08"}, + {file = "rpds_py-0.19.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:535d4b52524a961d220875688159277f0e9eeeda0ac45e766092bfb54437543f"}, + {file = "rpds_py-0.19.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:8b1a94b8afc154fbe36978a511a1f155f9bd97664e4f1f7a374d72e180ceb0ae"}, + {file = "rpds_py-0.19.0-cp38-none-win32.whl", hash = "sha256:7c98298a15d6b90c8f6e3caa6457f4f022423caa5fa1a1ca7a5e9e512bdb77a4"}, + {file = "rpds_py-0.19.0-cp38-none-win_amd64.whl", hash = "sha256:b0da31853ab6e58a11db3205729133ce0df26e6804e93079dee095be3d681dc1"}, + {file = "rpds_py-0.19.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:5039e3cef7b3e7a060de468a4a60a60a1f31786da94c6cb054e7a3c75906111c"}, + {file = "rpds_py-0.19.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ab1932ca6cb8c7499a4d87cb21ccc0d3326f172cfb6a64021a889b591bb3045c"}, + {file = "rpds_py-0.19.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2afd2164a1e85226fcb6a1da77a5c8896c18bfe08e82e8ceced5181c42d2179"}, + {file = "rpds_py-0.19.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b1c30841f5040de47a0046c243fc1b44ddc87d1b12435a43b8edff7e7cb1e0d0"}, + {file = "rpds_py-0.19.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f757f359f30ec7dcebca662a6bd46d1098f8b9fb1fcd661a9e13f2e8ce343ba1"}, + {file = "rpds_py-0.19.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:15e65395a59d2e0e96caf8ee5389ffb4604e980479c32742936ddd7ade914b22"}, + {file = "rpds_py-0.19.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb0f6eb3a320f24b94d177e62f4074ff438f2ad9d27e75a46221904ef21a7b05"}, + {file = "rpds_py-0.19.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b228e693a2559888790936e20f5f88b6e9f8162c681830eda303bad7517b4d5a"}, + {file = "rpds_py-0.19.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2575efaa5d949c9f4e2cdbe7d805d02122c16065bfb8d95c129372d65a291a0b"}, + {file = "rpds_py-0.19.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:5c872814b77a4e84afa293a1bee08c14daed1068b2bb1cc312edbf020bbbca2b"}, + {file = "rpds_py-0.19.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:850720e1b383df199b8433a20e02b25b72f0fded28bc03c5bd79e2ce7ef050be"}, + {file = "rpds_py-0.19.0-cp39-none-win32.whl", hash = "sha256:ce84a7efa5af9f54c0aa7692c45861c1667080814286cacb9958c07fc50294fb"}, + {file = "rpds_py-0.19.0-cp39-none-win_amd64.whl", hash = "sha256:1c26da90b8d06227d7769f34915913911222d24ce08c0ab2d60b354e2d9c7aff"}, + {file = "rpds_py-0.19.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:75969cf900d7be665ccb1622a9aba225cf386bbc9c3bcfeeab9f62b5048f4a07"}, + {file = "rpds_py-0.19.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:8445f23f13339da640d1be8e44e5baf4af97e396882ebbf1692aecd67f67c479"}, + {file = "rpds_py-0.19.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5a7c1062ef8aea3eda149f08120f10795835fc1c8bc6ad948fb9652a113ca55"}, + {file = "rpds_py-0.19.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:462b0c18fbb48fdbf980914a02ee38c423a25fcc4cf40f66bacc95a2d2d73bc8"}, + {file = "rpds_py-0.19.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3208f9aea18991ac7f2b39721e947bbd752a1abbe79ad90d9b6a84a74d44409b"}, + {file = "rpds_py-0.19.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3444fe52b82f122d8a99bf66777aed6b858d392b12f4c317da19f8234db4533"}, + {file = "rpds_py-0.19.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88cb4bac7185a9f0168d38c01d7a00addece9822a52870eee26b8d5b61409213"}, + {file = "rpds_py-0.19.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6b130bd4163c93798a6b9bb96be64a7c43e1cec81126ffa7ffaa106e1fc5cef5"}, + {file = "rpds_py-0.19.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:a707b158b4410aefb6b054715545bbb21aaa5d5d0080217290131c49c2124a6e"}, + {file = "rpds_py-0.19.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:dc9ac4659456bde7c567107556ab065801622396b435a3ff213daef27b495388"}, + {file = "rpds_py-0.19.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:81ea573aa46d3b6b3d890cd3c0ad82105985e6058a4baed03cf92518081eec8c"}, + {file = "rpds_py-0.19.0-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3f148c3f47f7f29a79c38cc5d020edcb5ca780020fab94dbc21f9af95c463581"}, + {file = "rpds_py-0.19.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:b0906357f90784a66e89ae3eadc2654f36c580a7d65cf63e6a616e4aec3a81be"}, + {file = "rpds_py-0.19.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f629ecc2db6a4736b5ba95a8347b0089240d69ad14ac364f557d52ad68cf94b0"}, + {file = "rpds_py-0.19.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c6feacd1d178c30e5bc37184526e56740342fd2aa6371a28367bad7908d454fc"}, + {file = "rpds_py-0.19.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae8b6068ee374fdfab63689be0963333aa83b0815ead5d8648389a8ded593378"}, + {file = "rpds_py-0.19.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78d57546bad81e0da13263e4c9ce30e96dcbe720dbff5ada08d2600a3502e526"}, + {file = "rpds_py-0.19.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8b6683a37338818646af718c9ca2a07f89787551057fae57c4ec0446dc6224b"}, + {file = "rpds_py-0.19.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e8481b946792415adc07410420d6fc65a352b45d347b78fec45d8f8f0d7496f0"}, + {file = "rpds_py-0.19.0-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:bec35eb20792ea64c3c57891bc3ca0bedb2884fbac2c8249d9b731447ecde4fa"}, + {file = "rpds_py-0.19.0-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:aa5476c3e3a402c37779e95f7b4048db2cb5b0ed0b9d006983965e93f40fe05a"}, + {file = "rpds_py-0.19.0-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:19d02c45f2507b489fd4df7b827940f1420480b3e2e471e952af4d44a1ea8e34"}, + {file = "rpds_py-0.19.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a3e2fd14c5d49ee1da322672375963f19f32b3d5953f0615b175ff7b9d38daed"}, + {file = "rpds_py-0.19.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:93a91c2640645303e874eada51f4f33351b84b351a689d470f8108d0e0694210"}, + {file = "rpds_py-0.19.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5b9fc03bf76a94065299d4a2ecd8dfbae4ae8e2e8098bbfa6ab6413ca267709"}, + {file = "rpds_py-0.19.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5a4b07cdf3f84310c08c1de2c12ddadbb7a77568bcb16e95489f9c81074322ed"}, + {file = "rpds_py-0.19.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ba0ed0dc6763d8bd6e5de5cf0d746d28e706a10b615ea382ac0ab17bb7388633"}, + {file = "rpds_py-0.19.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:474bc83233abdcf2124ed3f66230a1c8435896046caa4b0b5ab6013c640803cc"}, + {file = "rpds_py-0.19.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:329c719d31362355a96b435f4653e3b4b061fcc9eba9f91dd40804ca637d914e"}, + {file = "rpds_py-0.19.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ef9101f3f7b59043a34f1dccbb385ca760467590951952d6701df0da9893ca0c"}, + {file = "rpds_py-0.19.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:0121803b0f424ee2109d6e1f27db45b166ebaa4b32ff47d6aa225642636cd834"}, + {file = "rpds_py-0.19.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:8344127403dea42f5970adccf6c5957a71a47f522171fafaf4c6ddb41b61703a"}, + {file = "rpds_py-0.19.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:443cec402ddd650bb2b885113e1dcedb22b1175c6be223b14246a714b61cd521"}, + {file = "rpds_py-0.19.0.tar.gz", hash = "sha256:4fdc9afadbeb393b4bbbad75481e0ea78e4469f2e1d713a90811700830b553a9"}, ] [[package]] @@ -4112,28 +4170,29 @@ pyasn1 = ">=0.1.3" [[package]] name = "ruff" -version = "0.4.10" +version = "0.5.2" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.4.10-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:5c2c4d0859305ac5a16310eec40e4e9a9dec5dcdfbe92697acd99624e8638dac"}, - {file = "ruff-0.4.10-py3-none-macosx_11_0_arm64.whl", hash = "sha256:a79489607d1495685cdd911a323a35871abfb7a95d4f98fc6f85e799227ac46e"}, - {file = "ruff-0.4.10-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1dd1681dfa90a41b8376a61af05cc4dc5ff32c8f14f5fe20dba9ff5deb80cd6"}, - {file = "ruff-0.4.10-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c75c53bb79d71310dc79fb69eb4902fba804a81f374bc86a9b117a8d077a1784"}, - {file = "ruff-0.4.10-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18238c80ee3d9100d3535d8eb15a59c4a0753b45cc55f8bf38f38d6a597b9739"}, - {file = "ruff-0.4.10-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:d8f71885bce242da344989cae08e263de29752f094233f932d4f5cfb4ef36a81"}, - {file = "ruff-0.4.10-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:330421543bd3222cdfec481e8ff3460e8702ed1e58b494cf9d9e4bf90db52b9d"}, - {file = "ruff-0.4.10-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9e9b6fb3a37b772628415b00c4fc892f97954275394ed611056a4b8a2631365e"}, - {file = "ruff-0.4.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f54c481b39a762d48f64d97351048e842861c6662d63ec599f67d515cb417f6"}, - {file = "ruff-0.4.10-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:67fe086b433b965c22de0b4259ddfe6fa541c95bf418499bedb9ad5fb8d1c631"}, - {file = "ruff-0.4.10-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:acfaaab59543382085f9eb51f8e87bac26bf96b164839955f244d07125a982ef"}, - {file = "ruff-0.4.10-py3-none-musllinux_1_2_i686.whl", hash = "sha256:3cea07079962b2941244191569cf3a05541477286f5cafea638cd3aa94b56815"}, - {file = "ruff-0.4.10-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:338a64ef0748f8c3a80d7f05785930f7965d71ca260904a9321d13be24b79695"}, - {file = "ruff-0.4.10-py3-none-win32.whl", hash = "sha256:ffe3cd2f89cb54561c62e5fa20e8f182c0a444934bf430515a4b422f1ab7b7ca"}, - {file = "ruff-0.4.10-py3-none-win_amd64.whl", hash = "sha256:67f67cef43c55ffc8cc59e8e0b97e9e60b4837c8f21e8ab5ffd5d66e196e25f7"}, - {file = "ruff-0.4.10-py3-none-win_arm64.whl", hash = "sha256:dd1fcee327c20addac7916ca4e2653fbbf2e8388d8a6477ce5b4e986b68ae6c0"}, - {file = "ruff-0.4.10.tar.gz", hash = "sha256:3aa4f2bc388a30d346c56524f7cacca85945ba124945fe489952aadb6b5cd804"}, + {file = "ruff-0.5.2-py3-none-linux_armv6l.whl", hash = "sha256:7bab8345df60f9368d5f4594bfb8b71157496b44c30ff035d1d01972e764d3be"}, + {file = "ruff-0.5.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:1aa7acad382ada0189dbe76095cf0a36cd0036779607c397ffdea16517f535b1"}, + {file = "ruff-0.5.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:aec618d5a0cdba5592c60c2dee7d9c865180627f1a4a691257dea14ac1aa264d"}, + {file = "ruff-0.5.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0b62adc5ce81780ff04077e88bac0986363e4a3260ad3ef11ae9c14aa0e67ef"}, + {file = "ruff-0.5.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dc42ebf56ede83cb080a50eba35a06e636775649a1ffd03dc986533f878702a3"}, + {file = "ruff-0.5.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c15c6e9f88c67ffa442681365d11df38afb11059fc44238e71a9d9f1fd51de70"}, + {file = "ruff-0.5.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:d3de9a5960f72c335ef00763d861fc5005ef0644cb260ba1b5a115a102157251"}, + {file = "ruff-0.5.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fe5a968ae933e8f7627a7b2fc8893336ac2be0eb0aace762d3421f6e8f7b7f83"}, + {file = "ruff-0.5.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a04f54a9018f75615ae52f36ea1c5515e356e5d5e214b22609ddb546baef7132"}, + {file = "ruff-0.5.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ed02fb52e3741f0738db5f93e10ae0fb5c71eb33a4f2ba87c9a2fa97462a649"}, + {file = "ruff-0.5.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:3cf8fe659f6362530435d97d738eb413e9f090e7e993f88711b0377fbdc99f60"}, + {file = "ruff-0.5.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:237a37e673e9f3cbfff0d2243e797c4862a44c93d2f52a52021c1a1b0899f846"}, + {file = "ruff-0.5.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:2a2949ce7c1cbd8317432ada80fe32156df825b2fd611688814c8557824ef060"}, + {file = "ruff-0.5.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:481af57c8e99da92ad168924fd82220266043c8255942a1cb87958b108ac9335"}, + {file = "ruff-0.5.2-py3-none-win32.whl", hash = "sha256:f1aea290c56d913e363066d83d3fc26848814a1fed3d72144ff9c930e8c7c718"}, + {file = "ruff-0.5.2-py3-none-win_amd64.whl", hash = "sha256:8532660b72b5d94d2a0a7a27ae7b9b40053662d00357bb2a6864dd7e38819084"}, + {file = "ruff-0.5.2-py3-none-win_arm64.whl", hash = "sha256:73439805c5cb68f364d826a5c5c4b6c798ded6b7ebaa4011f01ce6c94e4d5583"}, + {file = "ruff-0.5.2.tar.gz", hash = "sha256:2c0df2d2de685433794a14d8d2e240df619b748fbe3367346baa519d8e6f1ca2"}, ] [[package]] @@ -4491,17 +4550,20 @@ full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart (>=0.0.7 [[package]] name = "sympy" -version = "1.12.1" +version = "1.13.0" description = "Computer algebra system (CAS) in Python" optional = true 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"}, + {file = "sympy-1.13.0-py3-none-any.whl", hash = "sha256:6b0b32a4673fb91bd3cac3b55406c8e01d53ae22780be467301cc452f6680c92"}, + {file = "sympy-1.13.0.tar.gz", hash = "sha256:3b6af8f4d008b9a1a6a4268b335b984b23835f26d1d60b0526ebc71d48a25f57"}, ] [package.dependencies] -mpmath = ">=1.1.0,<1.4.0" +mpmath = ">=1.1.0,<1.4" + +[package.extras] +dev = ["hypothesis (>=6.70.0)", "pytest (>=7.1.0)"] [[package]] name = "tabulate" @@ -4532,13 +4594,13 @@ files = [ [[package]] name = "tenacity" -version = "8.4.2" +version = "8.5.0" description = "Retry code until it succeeds" optional = false python-versions = ">=3.8" files = [ - {file = "tenacity-8.4.2-py3-none-any.whl", hash = "sha256:9e6f7cf7da729125c7437222f8a522279751cdfbe6b67bfe64f75d3a348661b2"}, - {file = "tenacity-8.4.2.tar.gz", hash = "sha256:cd80a53a79336edba8489e767f729e4f391c896956b57140b5d7511a64bbd3ef"}, + {file = "tenacity-8.5.0-py3-none-any.whl", hash = "sha256:b594c2a5945830c267ce6b79a166228323ed52718f30302c1359836112346687"}, + {file = "tenacity-8.5.0.tar.gz", hash = "sha256:8bc6c0c8a09b31e6cad13c47afbed1a567518250a9a171418582ed8d9c20ca78"}, ] [package.extras] @@ -4854,19 +4916,19 @@ test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0, [[package]] name = "transformers" -version = "4.41.2" +version = "4.42.4" description = "State-of-the-art Machine Learning for JAX, PyTorch and TensorFlow" optional = true python-versions = ">=3.8.0" files = [ - {file = "transformers-4.41.2-py3-none-any.whl", hash = "sha256:05555d20e43f808de1ef211ab64803cdb513170cef70d29a888b589caebefc67"}, - {file = "transformers-4.41.2.tar.gz", hash = "sha256:80a4db216533d573e9cc7388646c31ed9480918feb7c55eb211249cb23567f87"}, + {file = "transformers-4.42.4-py3-none-any.whl", hash = "sha256:6d59061392d0f1da312af29c962df9017ff3c0108c681a56d1bc981004d16d24"}, + {file = "transformers-4.42.4.tar.gz", hash = "sha256:f956e25e24df851f650cb2c158b6f4352dfae9d702f04c113ed24fc36ce7ae2d"}, ] [package.dependencies] filelock = "*" -huggingface-hub = ">=0.23.0,<1.0" -numpy = ">=1.17" +huggingface-hub = ">=0.23.2,<1.0" +numpy = ">=1.17,<2.0" packaging = ">=20.0" pyyaml = ">=5.1" regex = "!=2019.12.17" @@ -4878,14 +4940,15 @@ tqdm = ">=4.27" [package.extras] accelerate = ["accelerate (>=0.21.0)"] agents = ["Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "datasets (!=2.5.0)", "diffusers", "opencv-python", "sentencepiece (>=0.1.91,!=0.1.92)", "torch"] -all = ["Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "av (==9.2.0)", "codecarbon (==1.2.0)", "decord (==0.6.0)", "flax (>=0.4.1,<=0.7.0)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "phonemizer", "protobuf", "pyctcdecode (>=0.4.0)", "ray[tune] (>=2.7.0)", "scipy (<1.13.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timm", "tokenizers (>=0.19,<0.20)", "torch", "torchaudio", "torchvision"] +all = ["Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "av (==9.2.0)", "codecarbon (==1.2.0)", "decord (==0.6.0)", "flax (>=0.4.1,<=0.7.0)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "phonemizer", "protobuf", "pyctcdecode (>=0.4.0)", "ray[tune] (>=2.7.0)", "scipy (<1.13.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timm (<=0.9.16)", "tokenizers (>=0.19,<0.20)", "torch", "torchaudio", "torchvision"] audio = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"] +benchmark = ["optimum-benchmark (>=0.2.0)"] codecarbon = ["codecarbon (==1.2.0)"] deepspeed = ["accelerate (>=0.21.0)", "deepspeed (>=0.9.3)"] -deepspeed-testing = ["GitPython (<3.1.19)", "accelerate (>=0.21.0)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "deepspeed (>=0.9.3)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "nltk", "optuna", "parameterized", "protobuf", "psutil", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.1.5)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "timeout-decorator"] -dev = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "av (==9.2.0)", "beautifulsoup4", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "decord (==0.6.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "flax (>=0.4.1,<=0.7.0)", "fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "nltk", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "ray[tune] (>=2.7.0)", "rhoknp (>=1.1.0,<1.3.1)", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.1.5)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "scipy (<1.13.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timeout-decorator", "timm", "tokenizers (>=0.19,<0.20)", "torch", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"] -dev-tensorflow = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "isort (>=5.5.4)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "nltk", "onnxconverter-common", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.1.5)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timeout-decorator", "tokenizers (>=0.19,<0.20)", "urllib3 (<2.0.0)"] -dev-torch = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "beautifulsoup4", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "kenlm", "librosa", "nltk", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "ray[tune] (>=2.7.0)", "rhoknp (>=1.1.0,<1.3.1)", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.1.5)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "timeout-decorator", "timm", "tokenizers (>=0.19,<0.20)", "torch", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"] +deepspeed-testing = ["GitPython (<3.1.19)", "accelerate (>=0.21.0)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "deepspeed (>=0.9.3)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "nltk", "optuna", "parameterized", "protobuf", "psutil", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.4.4)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "timeout-decorator"] +dev = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "av (==9.2.0)", "beautifulsoup4", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "decord (==0.6.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "flax (>=0.4.1,<=0.7.0)", "fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "nltk", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "ray[tune] (>=2.7.0)", "rhoknp (>=1.1.0,<1.3.1)", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.4.4)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "scipy (<1.13.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timeout-decorator", "timm (<=0.9.16)", "tokenizers (>=0.19,<0.20)", "torch", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"] +dev-tensorflow = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "isort (>=5.5.4)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "nltk", "onnxconverter-common", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.4.4)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timeout-decorator", "tokenizers (>=0.19,<0.20)", "urllib3 (<2.0.0)"] +dev-torch = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "beautifulsoup4", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "kenlm", "librosa", "nltk", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "ray[tune] (>=2.7.0)", "rhoknp (>=1.1.0,<1.3.1)", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.4.4)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "timeout-decorator", "timm (<=0.9.16)", "tokenizers (>=0.19,<0.20)", "torch", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"] flax = ["flax (>=0.4.1,<=0.7.0)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "optax (>=0.0.8,<=0.1.4)", "scipy (<1.13.0)"] flax-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"] ftfy = ["ftfy"] @@ -4896,25 +4959,26 @@ natten = ["natten (>=0.14.6,<0.15.0)"] onnx = ["onnxconverter-common", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "tf2onnx"] onnxruntime = ["onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)"] optuna = ["optuna"] -quality = ["GitPython (<3.1.19)", "datasets (!=2.5.0)", "isort (>=5.5.4)", "ruff (==0.1.5)", "urllib3 (<2.0.0)"] +quality = ["GitPython (<3.1.19)", "datasets (!=2.5.0)", "isort (>=5.5.4)", "ruff (==0.4.4)", "urllib3 (<2.0.0)"] ray = ["ray[tune] (>=2.7.0)"] retrieval = ["datasets (!=2.5.0)", "faiss-cpu"] +ruff = ["ruff (==0.4.4)"] sagemaker = ["sagemaker (>=2.31.0)"] sentencepiece = ["protobuf", "sentencepiece (>=0.1.91,!=0.1.92)"] serving = ["fastapi", "pydantic", "starlette", "uvicorn"] sigopt = ["sigopt"] sklearn = ["scikit-learn"] speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)", "torchaudio"] -testing = ["GitPython (<3.1.19)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "nltk", "parameterized", "psutil", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.1.5)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "timeout-decorator"] +testing = ["GitPython (<3.1.19)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "nltk", "parameterized", "psutil", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.4.4)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "timeout-decorator"] tf = ["keras-nlp (>=0.3.1)", "onnxconverter-common", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx"] -tf-cpu = ["keras (>2.9,<2.16)", "keras-nlp (>=0.3.1)", "onnxconverter-common", "tensorflow-cpu (>2.9,<2.16)", "tensorflow-probability (<2.16)", "tensorflow-text (<2.16)", "tf2onnx"] +tf-cpu = ["keras (>2.9,<2.16)", "keras-nlp (>=0.3.1)", "onnxconverter-common", "tensorflow-cpu (>2.9,<2.16)", "tensorflow-probability (<0.24)", "tensorflow-text (<2.16)", "tf2onnx"] tf-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"] -timm = ["timm"] +timm = ["timm (<=0.9.16)"] tokenizers = ["tokenizers (>=0.19,<0.20)"] torch = ["accelerate (>=0.21.0)", "torch"] torch-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)", "torchaudio"] torch-vision = ["Pillow (>=10.0.1,<=15.0)", "torchvision"] -torchhub = ["filelock", "huggingface-hub (>=0.23.0,<1.0)", "importlib-metadata", "numpy (>=1.17)", "packaging (>=20.0)", "protobuf", "regex (!=2019.12.17)", "requests", "sentencepiece (>=0.1.91,!=0.1.92)", "tokenizers (>=0.19,<0.20)", "torch", "tqdm (>=4.27)"] +torchhub = ["filelock", "huggingface-hub (>=0.23.2,<1.0)", "importlib-metadata", "numpy (>=1.17,<2.0)", "packaging (>=20.0)", "protobuf", "regex (!=2019.12.17)", "requests", "sentencepiece (>=0.1.91,!=0.1.92)", "tokenizers (>=0.19,<0.20)", "torch", "tqdm (>=4.27)"] video = ["av (==9.2.0)", "decord (==0.6.0)"] vision = ["Pillow (>=10.0.1,<=15.0)"] @@ -5008,13 +5072,13 @@ types-pyOpenSSL = "*" [[package]] name = "types-requests" -version = "2.32.0.20240622" +version = "2.32.0.20240712" description = "Typing stubs for requests" optional = false python-versions = ">=3.8" files = [ - {file = "types-requests-2.32.0.20240622.tar.gz", hash = "sha256:ed5e8a412fcc39159d6319385c009d642845f250c63902718f605cd90faade31"}, - {file = "types_requests-2.32.0.20240622-py3-none-any.whl", hash = "sha256:97bac6b54b5bd4cf91d407e62f0932a74821bc2211f22116d9ee1dd643826caf"}, + {file = "types-requests-2.32.0.20240712.tar.gz", hash = "sha256:90c079ff05e549f6bf50e02e910210b98b8ff1ebdd18e19c873cd237737c1358"}, + {file = "types_requests-2.32.0.20240712-py3-none-any.whl", hash = "sha256:f754283e152c752e46e70942fa2a146b5bc70393522257bb85bd1ef7e019dcc3"}, ] [package.dependencies] @@ -5022,13 +5086,13 @@ urllib3 = ">=2" [[package]] name = "types-setuptools" -version = "70.1.0.20240625" +version = "70.3.0.20240710" description = "Typing stubs for setuptools" optional = false python-versions = ">=3.8" files = [ - {file = "types-setuptools-70.1.0.20240625.tar.gz", hash = "sha256:eb7175c9a304de4de9f4dfd0f299c754ac94cd9e30a262fbb5ff3047a0a6c517"}, - {file = "types_setuptools-70.1.0.20240625-py3-none-any.whl", hash = "sha256:181986729bdae9fa7efc7d37f1578361739e35dd6ec456d37de8e8f3bd2be1ef"}, + {file = "types-setuptools-70.3.0.20240710.tar.gz", hash = "sha256:842cbf399812d2b65042c9d6ff35113bbf282dee38794779aa1f94e597bafc35"}, + {file = "types_setuptools-70.3.0.20240710-py3-none-any.whl", hash = "sha256:bd0db2a4b9f2c49ac5564be4e0fb3125c4c46b1f73eafdcbceffa5b005cceca4"}, ] [[package]] diff --git a/sotopia/envs/parallel.py b/sotopia/envs/parallel.py index 4821d8c70..bb0b733c3 100644 --- a/sotopia/envs/parallel.py +++ b/sotopia/envs/parallel.py @@ -2,7 +2,7 @@ import copy import itertools import random -from typing import Any, Literal +from typing import Any, Literal, Optional, Type, TypeVar from beartype import beartype from gin import configurable @@ -30,6 +30,8 @@ from .evaluators import Evaluator, unweighted_aggregate_evaluate +TBackground = TypeVar("TBackground", bound=ScriptBackground) + def _actions_to_natural_language(actions: dict[str, AgentAction]) -> str: action_str = "" @@ -133,6 +135,7 @@ def __init__( terminal_evaluators: list[Evaluator] = [], uuid_str: str | None = None, env_profile: EnvironmentProfile | None = None, + background_class: Optional[Type[TBackground]] = None, ) -> None: """A sotopia environment for parallel agents. @@ -143,7 +146,11 @@ def __init__( """ super().__init__() self.model_name = model_name - self.background = ScriptBackground( + if background_class is None: + self.background_class = ScriptBackground + else: + self.background_class = background_class + self.background = self.background_class( scenario="", p1_background="", p2_background="", @@ -207,7 +214,7 @@ def reset( agent_goals = self.profile.agent_goals assert len(agent_goals) == 2, "Only supporting two agents right now" - raw_background = ScriptBackground( + raw_background = self.background_class( scenario=self.profile.scenario, p1_background=get_bio( self.profile.relationship, @@ -229,7 +236,7 @@ def reset( raw_background.p1_background = "" raw_background.p2_background = "" - self.background = ScriptBackground( + self.background = self.background_class( scenario=render_text_for_environment(raw_background.scenario), p1_background=render_text_for_environment(raw_background.p1_background), p2_background=render_text_for_environment(raw_background.p2_background), @@ -242,14 +249,14 @@ def reset( raise ValueError("agents must be provided") self.agents = [self.background.p1_name, self.background.p2_name] - agent_backgrounds: list[ScriptBackground] = [] + agent_backgrounds = [] if omniscient: for i in range(self.num_agents): agent_backgrounds.append(copy.deepcopy(self.background)) else: for i in range(self.num_agents): agent_backgrounds.append( - ScriptBackground( + self.background_class( scenario=render_text_for_agent(raw_background.scenario, i), p1_background=render_text_for_agent( raw_background.p1_background, i diff --git a/sotopia/generation_utils/generate.py b/sotopia/generation_utils/generate.py index 4d9d710ef..542c37c85 100644 --- a/sotopia/generation_utils/generate.py +++ b/sotopia/generation_utils/generate.py @@ -447,7 +447,9 @@ async def agenerate( output_parser: BaseOutputParser[OutputType], temperature: float = 0.7, ) -> OutputType: - input_variables = re.findall(r"{(.*?)}", template) + input_variables = re.findall( + r"(? Date: Fri, 19 Jul 2024 21:46:56 -0400 Subject: [PATCH 08/43] add merge release back to main action --- .github/workflows/merge-release-to-main.yml | 28 +++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 .github/workflows/merge-release-to-main.yml diff --git a/.github/workflows/merge-release-to-main.yml b/.github/workflows/merge-release-to-main.yml new file mode 100644 index 000000000..a03e930dd --- /dev/null +++ b/.github/workflows/merge-release-to-main.yml @@ -0,0 +1,28 @@ +name: Merge Release Into Main + +on: + workflow_dispatch: + push: + branches: + - 'release' + +jobs: + main: + name: Create PR Release to Main + runs-on: ubuntu-latest + steps: + - name: git checkout + uses: actions/checkout@v4 + with: + token: ${{ secrets.PERSONAL_ACCESS_TOKEN }} + + - name: create pull request + id: open-pr + uses: repo-sync/pull-request@v2 + with: + github_token: ${{ secrets.PERSONAL_ACCESS_TOKEN }} + destination_branch: ${{ github.event.repository.default_branch }} + pr_title: "[Automated] Merge ${{ github.ref_name }} into ${{ github.event.repository.default_branch }}" + pr_body: "Automated Pull Request" + pr_reviewer: "ProKil" + pr_assignee: "ProKil" From 1c0543867f498fdf525e57b054c606e3d83f8cf5 Mon Sep 17 00:00:00 2001 From: Hao Date: Fri, 19 Jul 2024 21:48:36 -0400 Subject: [PATCH 09/43] change checkout v4->v3 --- .github/workflows/merge-release-to-main.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/merge-release-to-main.yml b/.github/workflows/merge-release-to-main.yml index a03e930dd..fb68dfb12 100644 --- a/.github/workflows/merge-release-to-main.yml +++ b/.github/workflows/merge-release-to-main.yml @@ -12,9 +12,7 @@ jobs: runs-on: ubuntu-latest steps: - name: git checkout - uses: actions/checkout@v4 - with: - token: ${{ secrets.PERSONAL_ACCESS_TOKEN }} + uses: actions/checkout@v3 - name: create pull request id: open-pr From e4f0a26e10cc451be00745d5a0a1eade8b2e5f32 Mon Sep 17 00:00:00 2001 From: Hao Date: Sat, 20 Jul 2024 08:58:02 -0400 Subject: [PATCH 10/43] fix merge-back-to-main and pin mypy to <1.11.0 --- .github/workflows/merge-release-to-main.yml | 2 -- pyproject.toml | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/merge-release-to-main.yml b/.github/workflows/merge-release-to-main.yml index fb68dfb12..2ac2e134a 100644 --- a/.github/workflows/merge-release-to-main.yml +++ b/.github/workflows/merge-release-to-main.yml @@ -22,5 +22,3 @@ jobs: destination_branch: ${{ github.event.repository.default_branch }} pr_title: "[Automated] Merge ${{ github.ref_name }} into ${{ github.event.repository.default_branch }}" pr_body: "Automated Pull Request" - pr_reviewer: "ProKil" - pr_assignee: "ProKil" diff --git a/pyproject.toml b/pyproject.toml index f34ea2d43..f97f62e46 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -49,7 +49,7 @@ ruff = "*" pytest = "*" pytest-cov = "*" pytest-asyncio = "*" -mypy = "^1.8.0" +mypy = ">=1.8.0,<1.11.0" [tool.poetry.extras] anthropic = ["anthropic"] From c992b1cc327bbed20d15b99b4f7149d5894cf1ad Mon Sep 17 00:00:00 2001 From: Hao Zhu Date: Sat, 20 Jul 2024 21:24:40 -0400 Subject: [PATCH 11/43] [Automated] Merge release into main (#146) * bump the version, test release to PyPi * Update README.md * Update README.md * Update README.md * bumpy version to 0.0.9 * Update Sotopia presentation information in README.md * bump version to 0.0.10 * bump version * add merge release back to main action * change checkout v4->v3 * fix merge-back-to-main and pin mypy to <1.11.0 --- .github/workflows/merge-release-to-main.yml | 24 +++++++++++++++++++++ pyproject.toml | 4 ++-- 2 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/merge-release-to-main.yml diff --git a/.github/workflows/merge-release-to-main.yml b/.github/workflows/merge-release-to-main.yml new file mode 100644 index 000000000..2ac2e134a --- /dev/null +++ b/.github/workflows/merge-release-to-main.yml @@ -0,0 +1,24 @@ +name: Merge Release Into Main + +on: + workflow_dispatch: + push: + branches: + - 'release' + +jobs: + main: + name: Create PR Release to Main + runs-on: ubuntu-latest + steps: + - name: git checkout + uses: actions/checkout@v3 + + - name: create pull request + id: open-pr + uses: repo-sync/pull-request@v2 + with: + github_token: ${{ secrets.PERSONAL_ACCESS_TOKEN }} + destination_branch: ${{ github.event.repository.default_branch }} + pr_title: "[Automated] Merge ${{ github.ref_name }} into ${{ github.event.repository.default_branch }}" + pr_body: "Automated Pull Request" diff --git a/pyproject.toml b/pyproject.toml index f1d604bdf..fc03bdd82 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "sotopia" -version = "0.0.9" +version = "0.0.11" description = "A platform for simulating and evaluating social interaction." authors = ["Hao Zhu , Xuhui Zhou "] license = "MIT License" @@ -49,7 +49,7 @@ ruff = "*" pytest = "*" pytest-cov = "*" pytest-asyncio = "*" -mypy = "^1.8.0" +mypy = ">=1.8.0,<1.11.0" [tool.poetry.extras] anthropic = ["anthropic"] From c18d073abe4884bd485905a6336414a5618f6955 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 21 Jul 2024 20:46:37 -0400 Subject: [PATCH 12/43] Bump anthropic from 0.30.1 to 0.31.2 (#139) Bumps [anthropic](https://github.com/anthropics/anthropic-sdk-python) from 0.30.1 to 0.31.2. - [Release notes](https://github.com/anthropics/anthropic-sdk-python/releases) - [Changelog](https://github.com/anthropics/anthropic-sdk-python/blob/main/CHANGELOG.md) - [Commits](https://github.com/anthropics/anthropic-sdk-python/compare/v0.30.1...v0.31.2) --- updated-dependencies: - dependency-name: anthropic dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 51 ++++++-------------------------------------------- pyproject.toml | 2 +- 2 files changed, 7 insertions(+), 46 deletions(-) diff --git a/poetry.lock b/poetry.lock index 83b20eeb5..2ef82607c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -123,13 +123,13 @@ frozenlist = ">=1.1.0" [[package]] name = "anthropic" -version = "0.30.1" +version = "0.31.2" description = "The official Python library for the anthropic API" optional = true python-versions = ">=3.7" files = [ - {file = "anthropic-0.30.1-py3-none-any.whl", hash = "sha256:a58a8c3865a3df21e3b10e5fbd1a54b84cb01386f3e9fea9c65334b3cb306c6f"}, - {file = "anthropic-0.30.1.tar.gz", hash = "sha256:e082aa2601834a8a374f8bb45bca68493d892b2a03a1c44cfcc38465550c9b8b"}, + {file = "anthropic-0.31.2-py3-none-any.whl", hash = "sha256:28d176b98c72615bfae30f0a9eee6297cc33bf52535d38156fc2805556e2f09b"}, + {file = "anthropic-0.31.2.tar.gz", hash = "sha256:0134b73df8d1f142fc68675fbadb75e920054e9e3437b99df63f10f0fc6ac26f"}, ] [package.dependencies] @@ -2026,30 +2026,6 @@ async-timeout = {version = ">=4.0.0,<5.0.0", markers = "python_version < \"3.11\ langchain-core = ">=0.2.7,<0.3.0" langchain-text-splitters = ">=0.2.0,<0.3.0" langsmith = ">=0.1.17,<0.2.0" -numpy = {version = ">=1.26.0,<2.0.0", markers = "python_version >= \"3.12\""} -pydantic = ">=1,<3" -PyYAML = ">=5.3" -requests = ">=2,<3" -SQLAlchemy = ">=1.4,<3" -tenacity = ">=8.1.0,<9.0.0" - -[[package]] -name = "langchain" -version = "0.2.8" -description = "Building applications with LLMs through composability" -optional = false -python-versions = "<4.0,>=3.8.1" -files = [ - {file = "langchain-0.2.8-py3-none-any.whl", hash = "sha256:53e7dfe50294a14200f33bec22b4e14cb63857ccf0a5500b0d18b0fd51285d58"}, - {file = "langchain-0.2.8.tar.gz", hash = "sha256:7fecb309e3558cde4e5cf7e9ffb7c1ab3f07121c40a7ff3b0c27135f8120c296"}, -] - -[package.dependencies] -aiohttp = ">=3.8.3,<4.0.0" -async-timeout = {version = ">=4.0.0,<5.0.0", markers = "python_version < \"3.11\""} -langchain-core = ">=0.2.19,<0.3.0" -langchain-text-splitters = ">=0.2.0,<0.3.0" -langsmith = ">=0.1.17,<0.2.0" numpy = [ {version = ">=1,<2", markers = "python_version < \"3.12\""}, {version = ">=1.26.0,<2.0.0", markers = "python_version >= \"3.12\""}, @@ -2058,7 +2034,7 @@ pydantic = ">=1,<3" PyYAML = ">=5.3" requests = ">=2,<3" SQLAlchemy = ">=1.4,<3" -tenacity = ">=8.1.0,<8.4.0 || >8.4.0,<9.0.0" +tenacity = ">=8.1.0,<9.0.0" [[package]] name = "langchain-core" @@ -2114,22 +2090,6 @@ langchain-core = ">=0.2.2,<0.3" openai = ">=1.32.0,<2.0.0" tiktoken = ">=0.7,<1" -[[package]] -name = "langchain-openai" -version = "0.1.16" -description = "An integration package connecting OpenAI and LangChain" -optional = false -python-versions = "<4.0,>=3.8.1" -files = [ - {file = "langchain_openai-0.1.16-py3-none-any.whl", hash = "sha256:bff90e9d0be786495920a7851ae4d55247fb084d3a11d1b15bfe91904ce1cb0f"}, - {file = "langchain_openai-0.1.16.tar.gz", hash = "sha256:3dedcc785a64a488ad6a313cc59b0dccea025d27413b55cec73a20dcf3ded4da"}, -] - -[package.dependencies] -langchain-core = ">=0.2.17,<0.3.0" -openai = ">=1.32.0,<2.0.0" -tiktoken = ">=0.7,<1" - [[package]] name = "langchain-text-splitters" version = "0.2.1" @@ -2994,6 +2954,7 @@ description = "Nvidia JIT LTO Library" optional = true python-versions = ">=3" files = [ + {file = "nvidia_nvjitlink_cu12-12.5.82-py3-none-manylinux2014_aarch64.whl", hash = "sha256:98103729cc5226e13ca319a10bbf9433bbbd44ef64fe72f45f067cacc14b8d27"}, {file = "nvidia_nvjitlink_cu12-12.5.82-py3-none-manylinux2014_x86_64.whl", hash = "sha256:f9b37bc5c8cf7509665cb6ada5aaa0ce65618f2332b7d3e78e9790511f111212"}, {file = "nvidia_nvjitlink_cu12-12.5.82-py3-none-win_amd64.whl", hash = "sha256:e782564d705ff0bf61ac3e1bf730166da66dd2fe9012f111ede5fc49b64ae697"}, ] @@ -5444,4 +5405,4 @@ groq = ["groq"] [metadata] lock-version = "2.0" python-versions = ">=3.10, <3.13" -content-hash = "c7fde1dcb0317048180ad14fa8469b72872e72123214b3e713e8052a8280712b" +content-hash = "46f06ba2d1a106c857592b1f0a4f03719effaf03f8f508d37d29c11de42c5d8f" diff --git a/pyproject.toml b/pyproject.toml index fc03bdd82..177d5ce18 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -26,7 +26,7 @@ litellm = ">=1.23.12,<1.41.0" # dependency versions for extras fastapi = { version = ">=0.109.2,<0.111.0", optional = true } tabulate = { version = "^0.9.0", optional = true } -anthropic = { version = ">=0.26,<0.31", optional = true } +anthropic = { version = ">=0.26,<0.32", optional = true } xmltodict = { version = "^0.13.0", optional = true } groq = { version = ">=0.4.2,<0.10.0", optional = true } cohere = { version = "^5.1.8", optional = true } From 276456d029f6e45f03e95f4a645e5cf47b368bde Mon Sep 17 00:00:00 2001 From: Wonderplex <50866817+Jasonqi146@users.noreply.github.com> Date: Tue, 23 Jul 2024 08:29:05 +0800 Subject: [PATCH 13/43] finished custom url call (#142) --- README.md | 16 ++++++++++++++++ sotopia/generation_utils/generate.py | 25 ++++++++++++++++++++++--- 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 511bd2a0e..5217bc193 100644 --- a/README.md +++ b/README.md @@ -153,6 +153,22 @@ For the complete set of parameters, please check the `sotopia_conf` folder. To run a large batch of environments, you can change the `ENV_IDS` parameter in `sotopia_conf/run_async_server_in_batch.gin` to a list of environment ids. When `gin.ENV_IDS==[]`, all environments on the DB will be used. +## Custom OPENAI API URL +To use a custom API url for agent models, you can set `AGENT1_MODEL` to the following format: +```python +"custom/{model_name}@{base_url}" +``` + +As an example, if you use vllm to expose an OpenAI API: +```bash +python -m vllm.entrypoints.openai.api_server --model facebook/opt-125m +``` + +The `gin.AGENT1_MODEL` should be set to: +```python +"custom/facebook/opt-125m@http://localhost:8000/v1" +``` + ## Getting access to your simulation After running experiments, you can go to the `examples/redis_stats.ipynb` notebook to check the existing episodes (Episode Log section), as well as calculate the performance. diff --git a/sotopia/generation_utils/generate.py b/sotopia/generation_utils/generate.py index 542c37c85..a2fcd4f16 100644 --- a/sotopia/generation_utils/generate.py +++ b/sotopia/generation_utils/generate.py @@ -301,7 +301,7 @@ def obtain_chain( Using langchain to sample profiles for participants """ model_name = _return_fixed_model_version(model_name) - if "together_ai" in model_name: + if model_name.startswith("together_ai"): model_name = "/".join(model_name.split("/")[1:]) human_message_prompt = HumanMessagePromptTemplate( prompt=PromptTemplate( @@ -319,7 +319,7 @@ def obtain_chain( ) chain = chat_prompt_template | chat_openai return chain - elif "groq" in model_name: + elif model_name.startswith("groq"): model_name = "/".join(model_name.split("/")[1:]) human_message_prompt = HumanMessagePromptTemplate( prompt=PromptTemplate( @@ -337,7 +337,7 @@ def obtain_chain( ) chain = chat_prompt_template | chat_openai return chain - elif "azure" in model_name: + elif model_name.startswith("azure"): # azure/resource_name/deployment_name/version azure_credentials = model_name.split("/")[1:] resource_name, deployment_name, azure_version = ( @@ -361,6 +361,25 @@ def obtain_chain( ) chain = chat_prompt_template | chat_azure_openai return chain + elif model_name.startswith("custom"): + custom_model_name, model_base_url = ( + model_name.split("@")[0], + model_name.split("@")[1], + ) + custom_model_name = "/".join(custom_model_name.split("/")[1:]) + chat = ChatOpenAI( + model=custom_model_name, + temperature=temperature, + max_retries=max_retries, + api_key="EMPTY", + base_url=model_base_url, + ) + human_message_prompt = HumanMessagePromptTemplate( + prompt=PromptTemplate(template=template, input_variables=input_variables) + ) + chat_prompt_template = ChatPromptTemplate.from_messages([human_message_prompt]) + chain = chat_prompt_template | chat + return chain else: chat = ChatOpenAI( model=model_name, From 2d90284f49f4ab4fb3bd56d0d8d8cef0572c67a8 Mon Sep 17 00:00:00 2001 From: Hao Zhu Date: Wed, 24 Jul 2024 14:36:18 -0400 Subject: [PATCH 14/43] Autofix precommit for PRs (#143) * add autofix * rename pre-commit to autofix.ci * demo autofix * still try to fix even if failed pre-commit * add ignores to codecov * pre-commit * demo autofix.ci * [autofix.ci] apply automated fixes --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> --- .github/.codecov.yml | 5 +++++ .github/workflows/pre-commit.yml | 6 ++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/.codecov.yml b/.github/.codecov.yml index 28bbfa668..3caf71568 100644 --- a/.github/.codecov.yml +++ b/.github/.codecov.yml @@ -2,6 +2,11 @@ codecov: notify: wait_for_ci: true +ignore: + - ".github" # ignore the .github directory + - "docs" # ignore the tests directory + - "figs" # ignore the figs directory + coverage: status: patch: diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index 02e1282be..96c7b84cd 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -1,4 +1,4 @@ -name: pre-commit +name: autofix.ci concurrency: group: ${{ github.workflow }}-${{ github.ref }} @@ -13,9 +13,11 @@ jobs: pre-commit: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set up Python 3.11 uses: actions/setup-python@v4 with: python-version: 3.11.2 - uses: pre-commit/action@v3.0.0 + - uses: autofix-ci/action@dd55f44df8f7cdb7a6bf74c78677eb8acd40cd0a + if: always() From 0f5799793011547060cca7f2401937448190c663 Mon Sep 17 00:00:00 2001 From: Wonderplex <50866817+Jasonqi146@users.noreply.github.com> Date: Wed, 24 Jul 2024 17:08:11 -0400 Subject: [PATCH 15/43] Enabled custom api key for custom api url (#154) --- README.md | 9 +++++++++ sotopia/generation_utils/generate.py | 4 +++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 5217bc193..fd231cf2c 100644 --- a/README.md +++ b/README.md @@ -169,6 +169,15 @@ The `gin.AGENT1_MODEL` should be set to: "custom/facebook/opt-125m@http://localhost:8000/v1" ``` +If your API requires a token, you can set the environment variable `CUSTOM_API_KEY` to your key. + +As another example, if your vllm API requires a token: + +```bash +python -m vllm.entrypoints.openai.api_server --model facebook/opt-125m --api_key hello +``` +You could set the environment variable `CUSTOM_API_KEY` to `hello`. + ## Getting access to your simulation After running experiments, you can go to the `examples/redis_stats.ipynb` notebook to check the existing episodes (Episode Log section), as well as calculate the performance. diff --git a/sotopia/generation_utils/generate.py b/sotopia/generation_utils/generate.py index a2fcd4f16..ea3f003fb 100644 --- a/sotopia/generation_utils/generate.py +++ b/sotopia/generation_utils/generate.py @@ -371,7 +371,9 @@ def obtain_chain( model=custom_model_name, temperature=temperature, max_retries=max_retries, - api_key="EMPTY", + api_key=os.environ.get("CUSTOM_API_KEY") + if os.environ.get("CUSTOM_API_KEY") + else "EMPTY", base_url=model_base_url, ) human_message_prompt = HumanMessagePromptTemplate( From be6c333c8ffeb8e370fead8abddc676f85e54656 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 25 Jul 2024 23:57:58 -0400 Subject: [PATCH 16/43] Bump types-setuptools from 70.3.0.20240710 to 71.1.0.20240724 (#153) --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 2ef82607c..14b718ff4 100644 --- a/poetry.lock +++ b/poetry.lock @@ -5047,13 +5047,13 @@ urllib3 = ">=2" [[package]] name = "types-setuptools" -version = "70.3.0.20240710" +version = "71.1.0.20240724" description = "Typing stubs for setuptools" optional = false python-versions = ">=3.8" files = [ - {file = "types-setuptools-70.3.0.20240710.tar.gz", hash = "sha256:842cbf399812d2b65042c9d6ff35113bbf282dee38794779aa1f94e597bafc35"}, - {file = "types_setuptools-70.3.0.20240710-py3-none-any.whl", hash = "sha256:bd0db2a4b9f2c49ac5564be4e0fb3125c4c46b1f73eafdcbceffa5b005cceca4"}, + {file = "types-setuptools-71.1.0.20240724.tar.gz", hash = "sha256:ae61c528111a9450e149aedbc1ab0f7874f9bb0dc8f14c3cd200a1f82457050b"}, + {file = "types_setuptools-71.1.0.20240724-py3-none-any.whl", hash = "sha256:90570f0578ed67bb25ada9b3d1432e6727178d2408a7051b27e4a712731df30a"}, ] [[package]] From 0b5cf3ffcbd34102c1d118a1109b9d5ee44606dd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 28 Jul 2024 23:28:28 -0400 Subject: [PATCH 17/43] Bump pytest from 8.2.2 to 8.3.2 (#157) Bumps [pytest](https://github.com/pytest-dev/pytest) from 8.2.2 to 8.3.2. - [Release notes](https://github.com/pytest-dev/pytest/releases) - [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest/compare/8.2.2...8.3.2) --- updated-dependencies: - dependency-name: pytest dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index 14b718ff4..000f5f615 100644 --- a/poetry.lock +++ b/poetry.lock @@ -3536,13 +3536,13 @@ diagrams = ["jinja2", "railroad-diagrams"] [[package]] name = "pytest" -version = "8.2.2" +version = "8.3.2" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.8" files = [ - {file = "pytest-8.2.2-py3-none-any.whl", hash = "sha256:c434598117762e2bd304e526244f67bf66bbd7b5d6cf22138be51ff661980343"}, - {file = "pytest-8.2.2.tar.gz", hash = "sha256:de4bb8104e201939ccdc688b27a89a7be2079b22e2bd2b07f806b6ba71117977"}, + {file = "pytest-8.3.2-py3-none-any.whl", hash = "sha256:4ba08f9ae7dcf84ded419494d229b48d0903ea6407b030eaec46df5e6a73bba5"}, + {file = "pytest-8.3.2.tar.gz", hash = "sha256:c132345d12ce551242c87269de812483f5bcc87cdbb4722e48487ba194f9fdce"}, ] [package.dependencies] @@ -3550,7 +3550,7 @@ colorama = {version = "*", markers = "sys_platform == \"win32\""} exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} iniconfig = "*" packaging = "*" -pluggy = ">=1.5,<2.0" +pluggy = ">=1.5,<2" tomli = {version = ">=1", markers = "python_version < \"3.11\""} [package.extras] From 4dffcddbdb0179ac908b65aa617a1c82ce2f2ee9 Mon Sep 17 00:00:00 2001 From: Xuhui Zhou Date: Wed, 7 Aug 2024 12:43:49 -0700 Subject: [PATCH 18/43] fix call back handler (#156) * fix call back handler * chore: Remove unnecessary logging handler configuration in generate.py * add a test of caplog * logging handler * fix call back prompt --- examples/minimalist_demo.py | 13 +++++++++++++ .../langchain_callback_handler.py | 15 +++++++++++---- sotopia/server.py | 4 ++-- tests/generation_utils/test_generation.py | 19 +++++++++++++++++++ 4 files changed, 45 insertions(+), 6 deletions(-) diff --git a/examples/minimalist_demo.py b/examples/minimalist_demo.py index 80fca8911..1a3c119c9 100644 --- a/examples/minimalist_demo.py +++ b/examples/minimalist_demo.py @@ -4,13 +4,26 @@ # 1.1. Import the `run_async_server` function: In sotopia, we use Python Async # API to optimize the throughput. import asyncio +import logging # 1.2. Import the `UniformSampler` class: In sotopia, we use samplers to sample # the social tasks. from sotopia.samplers import UniformSampler from sotopia.server import run_async_server +from rich.logging import RichHandler # 2. Run the server + +# 2.1. Configure the logging +FORMAT = "%(asctime)s - %(levelname)s - %(name)s - %(message)s" +logging.basicConfig( + level=20, + format=FORMAT, + datefmt="[%X]", + handlers=[RichHandler()], +) + +# 2.2. Run the simulation asyncio.run( run_async_server( model_dict={ diff --git a/sotopia/generation_utils/langchain_callback_handler.py b/sotopia/generation_utils/langchain_callback_handler.py index bf11e69a1..eb6669168 100644 --- a/sotopia/generation_utils/langchain_callback_handler.py +++ b/sotopia/generation_utils/langchain_callback_handler.py @@ -1,6 +1,6 @@ import logging from typing import Any - +from langchain_core.messages import BaseMessage from langchain.callbacks import StdOutCallbackHandler logging.addLevelName(15, "LangChain") @@ -17,6 +17,15 @@ def __init__(self, name: str) -> None: self.logger = logging.getLogger(name) self.prompt = "" + def on_chat_model_start( + self, + serialized: dict[str, Any], + messages: list[list[BaseMessage]], + **kwargs: Any, + ) -> None: + self.prompt = str(messages[0][0].content) + logging.log(15, f"Prompt after formatting:{self.prompt}") + def on_chain_start(self, *args: Any, **kwargs: Any) -> None: pass @@ -48,9 +57,7 @@ def on_text( ) -> None: """Run when agent ends.""" # leave only prompt for environment - text = text.replace("\x1b[32;1m\x1b[1;3mHuman: ", "") - logging.log(15, f"LLM Call: {text}") - self.prompt = text + pass def retrive_prompt(self) -> str: return self.prompt diff --git a/sotopia/server.py b/sotopia/server.py index 167bac335..2f3fb5988 100644 --- a/sotopia/server.py +++ b/sotopia/server.py @@ -424,13 +424,13 @@ async def aevaluate_one_episode( itertools.chain( *await asyncio.gather( *[ - sing_evaluator.__acall__( + single_evaluator.__acall__( turn_number=-1, history=history, messages=None, temperature=0.0, ) - for sing_evaluator in [evaluator] + for single_evaluator in [evaluator] ] ) ) diff --git a/tests/generation_utils/test_generation.py b/tests/generation_utils/test_generation.py index b0212a07d..b99e4cdb0 100644 --- a/tests/generation_utils/test_generation.py +++ b/tests/generation_utils/test_generation.py @@ -1,4 +1,5 @@ import pytest +from typing import Any from sotopia.generation_utils.generate import ( ListOfIntOutputParser, @@ -41,3 +42,21 @@ async def test_agenerate_list_integer_together() -> None: assert len(list_of_int) == length assert all(isinstance(i, int) for i in list_of_int) assert all(lower <= i <= upper for i in list_of_int) + + +@pytest.mark.asyncio +async def test_logging_behavior(caplog: Any) -> None: + # Call the function under test + caplog.set_level(15) + await agenerate( + "gpt-3.5-turbo", + "{format_instructions}", + {}, + ListOfIntOutputParser(5, (-10, 10)), + ) + # Check if any log records were captured + assert len(caplog.records) > 0, "No log records captured" + + # Optionally, you can print the captured log records for verification + for record in caplog.records: + print(f"Captured log: {record.levelname} - {record.message}") From 145bb231c5ade1b49a63216d1fbe303533378782 Mon Sep 17 00:00:00 2001 From: Hao Zhu Date: Sun, 11 Aug 2024 00:17:20 -0400 Subject: [PATCH 19/43] Fix CI on main (#167) * update ci * remove human_eval folder --- .github/workflows/mypy.yml | 1 - human_eval/Procfile | 2 - human_eval/README.md | 137 - human_eval/_static/global/empty.css | 0 human_eval/_templates/global/Page.html | 2 - human_eval/agreement.py | 197 -- human_eval/figs/heruko_db.png | Bin 62067 -> 0 bytes human_eval/figs/heruko_env_config.png | Bin 71289 -> 0 bytes human_eval/figs/otree_hub.png | Bin 108531 -> 0 bytes human_eval/figs/prolific_release.png | Bin 136032 -> 0 bytes human_eval/figs/release_link.png | Bin 155303 -> 0 bytes .../PaymentInfo.html | 41 - .../official_study_payment_info/Procfile | 2 - .../official_study_payment_info/__init__.py | 44 - .../pilot_study_payment_info/PaymentInfo.html | 33 - human_eval/pilot_study_payment_info/Procfile | 2 - .../pilot_study_payment_info/__init__.py | 46 - human_eval/requirements.txt | 6 - human_eval/settings.py | 59 - .../sotopia_official_study/SotopiaEval.html | 906 ------ .../SotopiaEvalInstruction.html | 935 ------ human_eval/sotopia_official_study/__init__.py | 421 --- .../official_study_data/example_data.json | 11 - .../sotopia_pilot_study/SotopiaEval.html | 906 ------ .../SotopiaEvalInstruction.html | 931 ------ human_eval/sotopia_pilot_study/__init__.py | 380 --- .../pilot_study_data/example_data.json | 15 - poetry.lock | 2803 +++++++++-------- 28 files changed, 1481 insertions(+), 6399 deletions(-) delete mode 100644 human_eval/Procfile delete mode 100644 human_eval/README.md delete mode 100644 human_eval/_static/global/empty.css delete mode 100644 human_eval/_templates/global/Page.html delete mode 100644 human_eval/agreement.py delete mode 100644 human_eval/figs/heruko_db.png delete mode 100644 human_eval/figs/heruko_env_config.png delete mode 100644 human_eval/figs/otree_hub.png delete mode 100644 human_eval/figs/prolific_release.png delete mode 100644 human_eval/figs/release_link.png delete mode 100644 human_eval/official_study_payment_info/PaymentInfo.html delete mode 100644 human_eval/official_study_payment_info/Procfile delete mode 100644 human_eval/official_study_payment_info/__init__.py delete mode 100644 human_eval/pilot_study_payment_info/PaymentInfo.html delete mode 100644 human_eval/pilot_study_payment_info/Procfile delete mode 100644 human_eval/pilot_study_payment_info/__init__.py delete mode 100644 human_eval/requirements.txt delete mode 100644 human_eval/settings.py delete mode 100644 human_eval/sotopia_official_study/SotopiaEval.html delete mode 100644 human_eval/sotopia_official_study/SotopiaEvalInstruction.html delete mode 100644 human_eval/sotopia_official_study/__init__.py delete mode 100644 human_eval/sotopia_official_study/official_study_data/example_data.json delete mode 100644 human_eval/sotopia_pilot_study/SotopiaEval.html delete mode 100644 human_eval/sotopia_pilot_study/SotopiaEvalInstruction.html delete mode 100644 human_eval/sotopia_pilot_study/__init__.py delete mode 100644 human_eval/sotopia_pilot_study/pilot_study_data/example_data.json diff --git a/.github/workflows/mypy.yml b/.github/workflows/mypy.yml index 0886b2921..3bf7d41fc 100644 --- a/.github/workflows/mypy.yml +++ b/.github/workflows/mypy.yml @@ -34,7 +34,6 @@ jobs: - name: Install dependencies run: | curl -sSL https://install.python-poetry.org | python3 - poetry lock poetry install --with test -E chat - name: Type-checking package with mypy run: | diff --git a/human_eval/Procfile b/human_eval/Procfile deleted file mode 100644 index 11e1b7d5f..000000000 --- a/human_eval/Procfile +++ /dev/null @@ -1,2 +0,0 @@ -web: otree prodserver1of2 -worker: otree prodserver2of2 diff --git a/human_eval/README.md b/human_eval/README.md deleted file mode 100644 index 3c7ea5263..000000000 --- a/human_eval/README.md +++ /dev/null @@ -1,137 +0,0 @@ -# Human Evaluation for Sotopia - -To conduct highly customized human evaluation experiments for Sotopia and Sotopia-$\pi$ multi-turn social conversation, we utilize **Prolific** platform to get high-quality annotators and utilize **oTree** to build the full-stack evaluation system. - -## Table of Content - -- [File Structure](#file-structure) -- [Local Development](#local-development) -- [Project Deployment](#project-deployment) -- [Annotator Agreement](#annotator-agreement) - -## File Structure - -The overall structure of this provided human evaluation system includes two parts: `pilot_study` and `official_study`. For `pilot_study`, it is used to select qualified annotators from the prolific. For `official_study`, it is used to get the final human evaluation results based on qualified annotators. - -The important files for the otree project is described as: - -``` -human_eval/ -├─ official_study/ # Consolidates all related official study materials -│ ├─ payment_info/ # Dedicated sub-directory for payment information -│ │ ├─ __init__.py # Contains payment information logic -│ │ └─ PaymentInfo.html # HTML page for payment information -│ ├─ annotator_instructions/ # Contains instructions for annotators -│ │ └─ SotopiaEvalInstruction.html # Instruction page for the Sotopia evaluation -│ └─ annotator_interface/ # Contains the interface for annotator tasks -│ ├─ __init__.py # Data point distribution and processing logic -│ └─ SotopiaEval.html # Page for annotators to fill in answers -│ -├─ pilot_study/ # Similar structure with the official study -│ ├─ payment_info/ -│ │ ├─ __init__.py -│ │ └─ PaymentInfo.html -│ ├─ annotator_instructions/ -│ │ └─ SotopiaEvalInstruction.html -│ └─ annotator_interface/ -│ ├─ __init__.py -│ └─ SotopiaEval.html -│ -└─ other -``` - -## Local Development - -We can locally launch our otree project based on the following command: - -```bash -pip install -r requirements.txt -otree devserver -``` - -After this operation, we can visit the website via https://localhost:8000 for debugging. - -## Project Deployment - -#### Step1. Create Apps on Heruko - -**Step1.1** - -First, we need to create a Heruko apps as our base app to deploy. - -**Step1.2** - -Secondly, we need to link our apps with Heroku Postgres. - -![heruko_db](figs/heruko_db.png) - -**Step1.3** - -Thirdly, we need to change the environment config var under setting to support release of our evaluation task including avoiding debugging information and admin login. - -![heruko_env_config](figs/heruko_env_config.png) - -#### Step2. Deploy oTree project via oTree Hub - -**Step2.1** - -After finishing modifying the otree project, we can run `otree zip` to have a `otree_project.otreezip` for deployment. - -**Step2.2** - -Secondly, this zip file is used to deploy on oTree Hub. Each oTree Hub should be linked with one or more Heruko apps so that we can directly deploy based on that. (https://www.otreehub.com/my_projects/). More instructions about how to use otree-hub can be found at https://otree.readthedocs.io/en/latest/server/heroku.html. - -![otree_hub](figs/otree_hub.png) - -**Step2.3** - -Thirdly, after deploying on oTree Hub, we need to reset our database to make sure our database is empty (which is optional but recommended). - -**Step2.4** - -Finally, we can get a deployment link similar with https://sotopia-eval-8cd8c447c673.herokuapp.com/demo that is deployed on Heruko server. - -#### Step3. Release on Prolific - -**Step3.1** - -To release on Prolific, we need to get a release link that annotators can directly access to. To get this release link, we need to click into the deployment link and create new sessions with sufficient participants. Therefore, we can get a session-wide link that is used for annotators like https://sotopia-eval-8cd8c447c673.herokuapp.com/join/tikanoma. - -![release_link](figs/release_link.png) - -**Step3.2** - -Secondly, we just put the release link into the Prolific project setting. - -![prolific_release](figs/prolific_release.png) - -## Annotator Agreement - -Based on the annotation results, we support scripts in `agreement.py` to calculate inter-annotator agreement for unpaired multi-annotator annotation. This script supports agreement computation based on artifical data for unpaired data annotation with multiple annotator. - -In our data annotation case, the annotation are: - -``` -data1 annotated by A,B -data2 annotated by C,D -data3 annotated by A,D -data4 annotated by B,E -``` - -We support three agreement metrics for such unpaired multi-annotator annotation: - -1. Pairwise agreement - - Pairwise agreement is a straightforward method used to evaluate the level of agreement or consensus among two or more raters (or systems, observers, etc.) when they classify, rate, or make decisions about the same set of items. It is often used in contexts where inter-rater reliability or consensus is important, such as content analysis, medical diagnosis, or any field requiring subjective judgments. - -2. Krippendorf's alpha - - Krippendorff's Alpha is a statistical measure designed to assess the reliability of data when multiple raters evaluate a set of items. It is applicable across different levels of measurement scales (nominal, ordinal, interval, and ratio) and can handle missing data, making it versatile across various research contexts. Krippendorff's Alpha can evaluate the agreement among any number of raters and is not limited to two. - -3. Randolph's kappa - - Randolph's Kappa, also known as free-marginal kappa, is a statistical measure used to assess the agreement between raters when categorizing items into mutually exclusive categories. It is a variant of Cohen's Kappa, which is another measure of inter-rater reliability. The key difference between Randolph's Kappa and traditional kappa measures is that Randolph's Kappa does not assume a fixed distribution of ratings across categories (i.e., the marginals are free or not predetermined). - -4. Fleiss's kappa - - Fleiss' Kappa is an extension of Cohen's Kappa for situations involving three or more raters. It assesses the reliability of agreement among a fixed number of raters when assigning categorical ratings to a number of items. Like Cohen's Kappa, it also accounts for agreement occurring by chance. diff --git a/human_eval/_static/global/empty.css b/human_eval/_static/global/empty.css deleted file mode 100644 index e69de29bb..000000000 diff --git a/human_eval/_templates/global/Page.html b/human_eval/_templates/global/Page.html deleted file mode 100644 index 213474102..000000000 --- a/human_eval/_templates/global/Page.html +++ /dev/null @@ -1,2 +0,0 @@ -{{ extends "otree/Page.html" }} {{ load otree }} {{ block global_styles }} {{ -endblock }} {{ block global_scripts }} {{ endblock }} diff --git a/human_eval/agreement.py b/human_eval/agreement.py deleted file mode 100644 index d965a3cb6..000000000 --- a/human_eval/agreement.py +++ /dev/null @@ -1,197 +0,0 @@ -#!/usr/bin/env python3 - -from collections import Counter -from itertools import combinations -from typing import Callable - -import numpy as np -import pandas as pd - - -def distNumeric(l1: float, l2: float) -> float: - return float(np.abs(l1 - l2)) - - -def computePairwiseAgreement( - df: pd.DataFrame, - valCol: str, - groupCol: str = "HITId", - minN: int = 2, - distF: Callable[[float, float], float] = distNumeric, -) -> tuple[float, int, pd.Series]: # type: ignore[type-arg] - """Computes pairwise agreement. - valCol: the column with the answers (e.g., Lickert scale values) - groupCol: the column identifying the rated item (e.g., HITId, post Id, etc) - """ - g = df.groupby(groupCol)[valCol] - ppas = {} - n = 0 - for s, votes in g: - if len(votes) >= minN: - pa = np.mean([1 - distF(*v) for v in combinations(votes, r=2)]) - ppas[s] = pa - n += 1 - if pd.isnull(pa): # type: ignore - print("Pairwise agreement is null for group: ") - print(g) - if len(ppas) == 0: - return np.nan, n, pd.Series(ppas) - else: - ppa = float(np.mean(list(ppas.values()))) - if pd.isnull(ppa): - print(f"Pairwise agreement probs for column {valCol}") - - return ppa, n, pd.Series(ppas) - - -def computeRandomAgreement( - df: pd.DataFrame, - valCol: str, - distF: Callable[[float, float], float] = distNumeric, -) -> float: - distrib = Counter(df[valCol]) - agree = 0.0 - tot = 0.0 - i = 0 - for p1 in distrib: - for p2 in distrib: - a1 = p1 - a2 = p2 - num, denom = 1 - distF(a1, a2), 1 - if p1 == p2: - agree += distrib[p1] * (distrib[p2] - 1) * num / denom - tot += distrib[p1] * (distrib[p2] - 1) - else: - agree += distrib[p1] * (distrib[p2]) * num / denom - tot += distrib[p1] * distrib[p2] - i += 1 - return agree / tot - - -def create_fleiss_table(df: pd.DataFrame, col: str, groupCol: str) -> pd.DataFrame: - # Group the data by the group column and count ratings per category - fleiss_df = df.groupby([groupCol, col])[col].count().unstack(fill_value=0) - # Convert to a numpy array and add a row representing total ratings per group - fleiss_table = fleiss_df.to_numpy() - return pd.DataFrame(fleiss_table, columns=range(fleiss_table.shape[1])) - - -def fleiss_kappa(df: pd.DataFrame, n_rater: int, method: str = "fleiss") -> float: - df = df.copy() - n_categories = df.shape[1] - - table = df.to_numpy() - # Calculate observed agreement - sum_rater = table.sum(axis=1) - # filter out rows with not enough ratings - table = table[sum_rater >= n_rater] - n_sub = table.shape[0] - p_mean = ((table**2).sum(axis=1) - n_rater).sum() / ( - n_rater * (n_rater - 1) * n_sub - ) - if method == "fleiss": - p_mean_exp = ((table.sum(axis=0) ** 2).sum()) / (n_sub**2 * n_rater**2) - elif method.startswith("rand") or method.startswith("unif"): - p_mean_exp = 1 / n_categories - if p_mean == 1 and p_mean_exp == 1: - kappa = 1 - else: - kappa = (p_mean - p_mean_exp) / (1 - p_mean_exp) - return float(kappa) - - -def computeFleissKappa( - df: pd.DataFrame, - col: str, - groupCol: str, - n_rater: int, - method: str = "randolf", -) -> float: - df = df.copy() - df = df[[groupCol, col]] - # Calculate the sum of squared ratings per category - fleiss_table = create_fleiss_table(df, col, groupCol) - - # Calculate Fleiss' Kappa using the modified function - score = fleiss_kappa(fleiss_table, n_rater, method=method) - return score - - -def computeAlpha( - df: pd.DataFrame, - valCol: str, - groupCol: str = "HITId", - minN: int = 2, - distF: Callable[[float, float], float] = distNumeric, -) -> dict[str, float | int]: - """Computes Krippendorf's Alpha""" - d = df[~df[valCol].isnull()] - ppa, n, groups = computePairwiseAgreement( - d, valCol, groupCol=groupCol, minN=minN, distF=distF - ) - - d2 = d[d[groupCol].isin(groups.index)] - - # Only computing random agreement on HITs that - # we computed pairwise agreement for. - if len(groups): - rnd = computeRandomAgreement(d2, valCol, distF=distF) - - # Skew: computes how skewed the answers are; Krippendorf's Alpha - # behaves terribly under skewed distributions. - if d2[valCol].dtype == float or d2[valCol].dtype == int: - skew = d2[valCol].mean() - else: - if isinstance(d2[valCol].iloc[0], list) or isinstance( - d2[valCol].iloc[0], set - ): - skew = 0 - else: - skew = d2[valCol].describe()["freq"] / len(d2) - else: - rnd = np.nan - skew = 0 - if rnd == 1: - alpha = np.nan - else: - alpha = 1 - ((1 - ppa) / (1 - rnd)) - return dict(alpha=alpha, ppa=ppa, rnd_ppa=rnd, skew=skew, n=n) - - -if __name__ == "__main__": - # creates fake data - # 5-point lickert scale - # rater1 is normal rater - rater1 = pd.Series(np.random.randint(0, 5, 100)) - - # rater2 agrees with rater1 most of the time - rater2 = np.random.uniform(size=rater1.shape) - rater2 = (rater2 > 0.1).astype(int) * rater1.values - - # rater3 should be random - rater3 = pd.Series(np.random.randint(0, 5, 100)) - - # create the dataframe and melt it - df = pd.DataFrame([rater1, rater2, rater3], index=["r1", "r2", "r3"]).T - df.index.name = "id" - df = df.reset_index() - longDf = df.melt( - id_vars=["id"], - value_vars=["r1", "r2", "r3"], - var_name="raterId", - value_name="rating", - ) - longDf["ratingBinary"] = (longDf["rating"] / longDf["rating"].abs().max()).round(0) - - scores = computeAlpha(longDf, "ratingBinary", groupCol="id") - rkappa = computeFleissKappa(longDf, "ratingBinary", "id", 2, "randolf") - # fkappa = computeFleissKappa(longDf, "ratingBinary", "id", 2, "fleiss") - ppa = scores["ppa"] - alpha = scores["alpha"] - results = { - "Pairwise Agreement": round(ppa, 4), - "Krippendorf's Alpha": round(alpha, 4), - "Randolph's Kappa": round(rkappa, 4), - # "Fleiss' Kappa": round(fkappa, 4), - } - print(results) diff --git a/human_eval/figs/heruko_db.png b/human_eval/figs/heruko_db.png deleted file mode 100644 index dcad7decc8debba308080ced9255ff23f7126be1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62067 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%0AWt>MUJIxaRt?&9=oRljZ63r^>jm= z%NHsY-458q&AS3EhUj4CJ0COa!T@`UutPlWcFAqBi=*Y?3ytR1_czaPEZ|9b%A+;- zpYf%u2d5pEb1opvI#kl^)dhBG9|*6B=88(n*xbhnWaW6tjWUg@7S8F$mS(@?_@;Nz zp|||v8xsk*=rpC0fhdN*T`PSX*><(s(q{MncC>oylIX(TJ3=aK@Nl;PDYQ3EsrQJG z_!QDtn-u9T)O#N&7RNcGMg5g{n~30k1+pp+Poc71&V1{ANwY9iB|qf6;>{|%eP1;o za3`?qfY1^N**Oql;&N#y1zhb47C+`!OUuqGy}NWaz4LW4)~$4DB~nt1QzACq1k0LP z%%m4o0lM5yE>2?DrO;#5hsLa=RlBH4xaJ`_;vZO=e{!S=HaZ`P-rP1LUCx8s{rr@< zMsL2xJfms{sjNJBB-*Wq;|nid9<^D-wwBi=SZ8Wxkz`m59Y1ISZ24|Ge*4@p8GaXx z`+ zi)EzK6deAfBx#O(&Of23B03mf>});{KTU3Iau#vDN8UpRgz_YTdg5(A!;!BYf{LL6 zshlOu3e)}@3jMBugI-;7_HaND9T$(K`~B_kB4R?ALbiAi7q_8jGcWs5%(j#Qg=losr@adXQ&-yx!LU-^*pk|The7z}=j$CNdiY@>E1Tlt~%xO(*-btH~mpLT3UT->))JKJOhbucoXudnw*M zF=WP^q!#;(acFjB;4$-}dU;WZ)VIet?dSWW>qw`E6pGD_3cpw!>SP`-58=iEM2)jE zw9SJ0wpa>kRuEM;Vr3hrcyQk0=S7Htjt(VDE5D{6$J16>$k$lMyw7tG(9_O=Frn%# zn>wC$wyFVSLX6bXCT>Mm`4Ik9zu}vSV&581VR08`VVJ?ZUm7nAPSLk#bDujG(actvkt5eiH)4IXXI+*`{8;0UC5~m2b;3~t+7xF-z*6Om){)*<)Sx_ z^VEBMVE|}Ize)?YVu?1u&yQ_geo{sOE)_ndsBrs z%upepy}44{Hr|$N-aK-hz=Z%%mAlQXXH)*#?nrUpN=mEqfl{}@v=v>%>n`4B$-ZUX z_Us)tj9u6ECgTqNQh!cNe}H0Z?6XpjqzB zhPmpSH}@YBnjpC2BrH=`rd`6Tg~E#+BC!Py3pOTdZaZU|SDldk=$V zq^_)IvNw#}Q*5gx2WJN(+Ed;?Gq`QhD(AkyekDg3$JFT2Ew#H^628Me&1St`eA-E9 zyzo*!$~dSUlEtZZd$DI5wU0mof88xdTtMNdn7o3AWlx&+tE|Uo|w`AW@ z?%&pApiGe<#OWG_Wxm>aeBA_Bd3OKj=b;q`ABtgim-_qr6VjJr55DmrGV-bH3l9 z%^@qZ6&XHhtHsAk$w)F=HS!$SxtU@_$e!2BPwgV=v?|0+@Zl_IOIy) zJ!}46GG%ng&upKTZ)sMwQ!EGy@WwuOil50L&PMha9+_r zGKn_CzFK2f&)!!sZxx9}Qpoi%^7S3;rPZa5s8LQ?tP_voWy;$vz3LCaHuH^;kNA5A zu@*DS=01FKX~(SW2j_EwaLliyNr^+;)DoTz_AL6BLwz%tuor*7TGGbB0)&g z93rPX?W^$?fI|-ALpZvd^{Qkl$7`Cd$!l#id^QZQg_x@Omtpt_Z$W`?v&;#XGuRql zqal%ZK#9FbPm+p}qwjFWvzCLRBp2>JBI@j};HRqvSv##lllUPb&Sm^gIu2=qHKtIl zxTl(oFt5ZRnr%JEz5|{t13OJRb8L1%LnGR3-_=>-B0aGJ>xYpM-|}g@x+F7c&0gY* zbIlMVSELrUACIf%F0W|F#*u7Li?)uBE;l?2%R1$!@^<1B=4;NE#q`1phR(f5vOGzyEZI zLH!^B!epRdM)H+2u6|z(X;k@P!n~chDz42kmAA|`O6P1I~Dt6`rA#CI}VcYb|igDQ1-%LIXc7jO-^r?MGJH>I-6FlTE$9ZI)!#w)Lb zIxID5*V!)aA2@6F8dhwXZQD<-Zy8P?qw@d@HFEF|L9Yf5NW}E?FfZ5I4prg@a5%?Kx*1>ox5o-J91WMq{WjM$xB13t zmyS@CGoPq@iw2VNnK~ioVW+fu^IDkgj&u6ShUvbx+p88Jr;aRDMv-z>#s&kEV2Q!7 zsP6_e5TDOh=b72k_oTgT@j@#pkp+%hT()#-elV*|6BYAbhFICHS*tN>p0U_=9 zS|t$R_-O6($#eF(cXbgchn{_}*@;qq2XLmbLCeZl(>BcpWv|7((r`o;2N;h0%-E|r z&ZKA@+xNG_?LMqS>Dar4ze|@lUJp4znhwV_Umvv`irsW7)Kr8&=Ls|?>u4h1`J#6A zKEqCH=iYX~!1Exb-VVEKh)6fJwLmmWO`LIfoN&m%xT2NY(8%|QP`^H+e`>-chaCt5XaEPEvvhtNEXS3Ah9OyTov zZBqKygx9X3vLnu{S?|i~d$u#9yAMq*=a<@-l)ixWcO5E*J0jtLpk37b$aR@RCp+~! zua?uU(Lu>}gTW1qmG`TBY=bT&)hA|3iN)1^?{wYKpb!mVWq6Qe0f%3H#I;cc2T#y> z2os*7_OZ<*a2!~Yb!P#?jb*9NRGyXb zxo18vq5IvN3O>bP&#zdQ?E&-npQN_3Ra)}1H?}18yA|g;aboye2V$rfKF}s*a!WC1 z@__X$t?TBzsT*pi6|((TiIW-;8RW9c!x26OBPO8bCzNZRj*JWf0__u+KC6uLmfsO| z@jm)JUT|UeT_o?jImtEEaGhCc##`qHu)v4Ev@A>xZgZpKj6!i!=GAEiSNwIZlB$M? zBF}(0IM5J3IhTOoz4+L*#9b`w&!#|X4aG2_(YzGi>9(1Zg^|Hg?v5rRc7L7Y6L2Fe zc_nUSewLmmd+Ed0f`LI6ET$$8%ihNj&jzHVpPG}HmIk?Zj+@O8FCmp2fHN)AO#I*cx5I_MDqx##jAxvNTNj?x zYqvcNgci<}*wC6Ctr0aiNmD}SBa!T=o8_w2pBbS*v^RKo;Wx^WM8h%1 zV;_N8+G$}V+orX0oP&c5@xQQ3o;hW5F$5}BkvxBr+TCZ6|DN`Lb*o@S&e}>TA-F-1nWcM4I{7Xs| zrl%MfQNZbv3b|T1VfYCXi?DH3m2*LMw#p08^ejaV@t@>fcwzN^cyUo4;o1F<*eyhvNyS@cw zDnqzm#)T7};iLzk=R)Iwtu-;hgijWN`+pPfe+mAf6E(lEK>nlb^RqKo_sjX zD*kC0x0!#A{G|maxkm>f4yh5fw zyznWak_KGMX!hdrR{x|d5%5}jW#c=If2w=;J(T|EvJUZTExW8xT9w4*p=@mWL5mmk zGn@tL@+BOelqjsr=Nbu~t+W0=`Aq-#G7NTA{aS6}G4O5ekw~n|7dw5MR^mmBe)Y%u zg&K=QPFJ&&|YQckl9J>Pqu-Crh*HrGvm%0!;AcjInHHC3Vdr~S3(i$awQl8K|sz&oeOE^Oc%9cOJCLJOr@ zME1?<9652LlAOcP{Xh6Obh2!GAb|@1Rg*da{1mvW;tm0*_~=t&^M~_VbjN*7qde6> zATMtLM8)|f!^P<-rm-*!oCk&rr|F-ZoxRQ=RWv4cby*x8)%F>3EX#AfAQGHa?Y$@; zG#b44>o-2yF98zJcA`f+in_Ipasr}W5=<*@=HC9xVcB(SuT1!d*|QM|PT6z7 zP?l&@HfIPs3oKOy{=2_0hT+`|B&hnUpF-cx?T zJE`YP?1IuWj0GhCSE2LPSl4okwk>EeUQWf!lp&`Z_lNBtut7OdkjKS>g z2FGXNDWZC&d2k-?(^jernWh$w8;Zswcka2}gn}#l1-Z62-+GY zK!@F%MQs_0uL{P#btrW3PiNWZvQ5~jgBQgf`VeYOs0ohTPlG4b4+a)6bk8nID+yX; zpF@|IFDfHgak2q4YckFD)%pG&HJ?doy8bE`_iQWGooj z#w_V8dj4M5_J_*oxC{q~)!EsVqafvNP?~IJ+*|I)JY#>GtSndVJy8KG#vB0g(NIAZdn z!;JLJPB-b+XXKGYc-hG*Y3C6xfN!M+z_)3tZT1nveP>3hyutbFjlU|WI?|poxmL8W zML@dgJS?X9(KSY}&VHQP6V{Jku-Djjv$(mRUP3D9G@TY}!PfG4Jyd{&=YK#N{n)Z0 zF3V=5$MFJhm0N41$p_>DCET#3r+O#;;J5D$7*S*Kyp7YBhY51H?-AVWL5+tV#pMI- z^&l%n%!!wV6+f9^j_qvkuU3FxNpHsJAr3|GDYCk{Uw+jM>hNzkEUmE6i zWN@i!R%|wS?kk0cy>!45t#u`=>nm~aC$~{hv6)VdVCzN1rpe%5SxH){dA>N~utffB zxRqJIQETPq80}`2JxVs}TB$(ce7KoZIidf^j~;e=$uTK|(t;#x)#8q$N@Sl`J;0ssSJqP}*pPq2`KGXi!e5DFM60hq_z zZXKEThJXbG5TeTj$UtV8Lb>{K7G0UBrD$N!Ym$)8>gMWf7FG`E1~(T+69>PX_->xA zW^M}z&LS?5G!|}#1Vai};3>C}5tgL4YOfBIV(uQjQ(&S6<+C4_;%xYDgU0%*ZwG?8 zBQce$zl$4&J-n^`a4ChtE-Zn;o980Y&J3N|TFTguvzR|HjP;^jeudA>NE^Q@BxuxQ zG$Z{Aj+_G3J}zu=$Cfq;>c`oNC7e?sh|0>qe=y}SES#3b>JYlR@wYphn8#Q(4&d* z2e#wH<_AWWwuiQscqQ!GmMe zsu!#v*SLJE7(zX`bR(~jrrmIu7%Z=ywhPXsV$I$HZ1X>$gII@mSA8M~G}MP+C?OWh z3y8b3?VF^BO%;XR@A9eYd>dfM4{g37__w;x-?b=Ky6j^!AYbOsk$OOs^zHnunhr+B zEr2rzP?qYM!E+3}!Q?aKK1^!@(ORTc+k{Z=^Q0NO$M)8(^v~2gI>oaKuV= z$Szm(Y7>-vHGAbX^#|mWz*-@R^k8{wRc~BQU=-$SlvtTS$}g0ZqJdx9AomrJ?G=X5 zA2=F*kh4b59)F=#!YF}uNctJ~t7Uq_x_DI0*d?F&`?oABUs*Aq1l);>tnd*FV#;^X zT;`*P2ksnAOY3Otm-0P24m|hMjUF-y!lS$OK;YchNppL^2M-jseM@cuH+<{W!$V!b z5=C~G81FwubaJZITvx0f@dIaiESF!Ka0ed`h|gA7&^cQDw1J+-tyb^yKo>s5mm9W< zK7|6+>O~_iGHu9TmEGA1XKdl&P8@yIUW~5rN1E1pVAbdIF51&RM7hw{n7p!XqA)V> zuiz6i5&ahLM;ElmSti$NWTg~o&qZl5xP6dM`|wyQz|t^T6GU2jV6<3+=6aynolr5K z0GztYbrko@cSXCLj8^5V(0x5Fp|F1;hNjnTWJ1<#2D0uYkki4AV*R#Ry$jq|9S>b% z-~szWLta>OxmgrHHSS$oR-JP9kS~+58$1qM*lNu1SygTHLwNg;CM&m-a(ptosb7XljEYi(9W$;`2DI?H+%- z7|J@^vN3@ZpmI0RYWe&zcbQRpO1VLQ_6V{5M0n6$bZf?lGt+gSW2z8DJ4~5Jx}14r zs?C+X^$X2e+6fHd)^nTYwr!imND+b^x0?|oE-R+q4twCJolZ%ZQZ8r|>r0k-K#T&J9QlMi-{bYa?X1 zc=4SIK=nw=%e!O5z0~8%)mXjX{UG9(KaI99D^cHs5qLU#*wOJ-(IkRr&vG}5)%I4U^o^-c(Uc6Y}$;H!Q_O z%8N`4fj2@EU#ob3XdF6lwFJ5(1w`yD6~9Skw=O#!feN>9LJdfJdiQt2saQ&cIq;NL zd#=E=djlrX(>z3{ESFj%gK{TnD!cyQ8SJiw0J3LAFiCx#w^(by3l?wq5ozjD{wvy{ znz3>}?Wy~3mXl=>Mpdi3nqB0BkljlAuXbekDxsgSrfW`{?IdMNW~V~BMM-h-yL5=; zwGc9Am=8CRZv7^_aGy@@igi)}XG_|QROA)g1|Vw1z0o3tn`BrcvdrVF1)_s_xFxbx?K6MqH_rZ z|Gy^f{gxG^%)Ri#$U0WIj5plMG(73Cxbt-dz#Q%`z7Flb!Sjz4C#lxV_~eXdMdR(` zx;vKoylQr4-D2OmQ`&gE5J#B7g#OZnX!++@Pl%n?!7f$jT6_hdI%MG~6+x~2xWtjG zKl2HK=J|lE9obo#n(7tXg_vBJ(U-V02oL4t%E$<9QF?gXvn$QmkqqVBshYu?M0wIw zL(6Zct^Je5SJ)Znftgy=i_v+#yS~p(lo<4DT$s?k9pCz6=yI4{`Z!hA7T|q8*J@l? zA>vLUn5h^xa!@Y0|A3X68j~WMXXG2H#%s$>eff1JVxfm79pYv=-F81r;L4Uba&mQh z|8r%kIKy#;H}A8gPqrsWuv`@t!%!nmcqR^O(rT^3duJD-7fsx5lH}~poskriuTZ^? z97i26P0L3gqZT`fHurEyv8ip=UrM|eAX!3zVR5SEe~#xnE#8+EjsfzY(>uiHR`wof zIFMDBW-65L*RBEFe{_!rR#sjPgedPgAnKVAg`D^ddjcq5T8`~QHFQAd`=dsPsh~v6 zG%+V70qRri=^7!6eRbo&+QBDJn5|?bL^YaQ_=cJs)eF+^tOuk}mr3&~$W0d)ZnQYI z(?ka-M1NFKIoItEUODgaS`Ggdb^x(mN74<1~;GUDA1Eb?G zGZHxB&ooN6KUeW|tM`0qSN?prFIbOzk8BRUJy5)Vz=!eLL1xO*PimZzxuw;A#CYJI z3V_S0-@=e|{({@AFIlCtA?S1@cG10SW;!0^_EB(D@1iuXQ^XEhHYY!%6uQgy zej8_*)Iz9M@O<54vFJVllg6_hJVjq|7%F|$8|&{(x+OaU+bx{3h-N-1cf)woVO)At zsWk;sbgd=rW?_0&T}hFf+Ts#@7kjC;whM$#!6@iCM2960-Jv??`%}hv6W6Cd4$q}3 zjx>Y|g^3Kxro&&nzMfQPyEfXBB=c6LS5@pBs@5rO?~YKAq@4778C7N{&k!KbPm_~H zl3*|;kAA|X-~66s`KKRe6f>N*ssDP6xyV8-C{eRm&rmr55BhyZW)BuS(xtf2Cm-R2 zlinBToML2d0#%qos{I+YS&RKzSz&HK{?+R~a`E-z=V%#KR$cp~7rE1Cmpj6>gxZBg z(lr$P(iyb$cEkp@)Ats}LnFH*NfuFN%;?M0>ohMuKKXSC_#oJqGt)byelaBnOG;$q zR$GovT9URX3J={;jH2iz(o5Q>>noz2mFkU$KX1FH4i}{X<+K}TLc?-@N|-a2JvcLH zuJfKBjt7W!QA|0PBu3e;^H-?tZ$CA#MDx9#SE#DJ2?qGx2x*q8WJ(s6ZS%lw?!L2kA?;m&8>*T`USWxw^=7xvwAo~^=SVsI3LRiNxrIYTzvX0}|NV&nt> zr1&f>pRu@)$dW*6fAy3K%miOTg?bzN3251+RrUVF$vjHE(2oZJ7NT~)350~Va@oGP z*s(QoNwr=L7W7-ndqdI$qBj2GAs0--D_MY>n9sZnD-OI`#-;*TK6aHv>4KZ4eFxRq z&@@d}+Yr>yY-)^*(e`CsPns_cuH>69`+Y*3+tP^lBf+<^ z4f-T?k)(WGDCL5?)T4I$PSOiar>vaz>OoByC@Lg0SrG=Md+jhy|5wkP@>b`%D8G;z z+A=Q%R%3_(}f z+i~LP&m39LQ=i))PrsQd{Lb9Amrp3ndg;5hR(!FrREZSO8}M;cIW7r_Jlo17u$<%- zrO7rq7-tH1cuvWiJ0$K?N%#wzt9FKii^NXyM4jR1P4!_`Wd- zNzrh$PCGW34+(GZJgcRW=LO4(r<$?CkLoxR6uJ0YXHm?84@NTYbeC%!^_N@aGx|0{URasZ zbd8+)CLYDychV(0f4zhsVQr*6vZ#ARMI8wDsENhiO&)6DAZj#P+Xo6A;m!cN7&(nN z?6&k-#lwB9ux9@=l&#kd5nU!(=A&Z61obBc+lEK?L8=T%(5!p^Xb;c!{%}^SaC!5p zkQ0tqkEN6OsGY*-CMKkaB2Ru@sInsIN|}eNaXm`ua#ib)PK$jW|I{d~bo;I9ovfFW zl}1W?VW;)lgB&=ysJt0s+IUeFC~@tD56Z3^9|k_8-VKsh)z;FL zS&Zl8Yl){-A__m)-+8xXWv(Z2m^x(%^mS^9N^rg&+k9kMqulPh*)Sh}(MSz_B-8wG z7qaPxja|_?z&Xg^U?ZI&aRV9bg`=rEwXsFvsDr*tM^Cc^hGH-m6T`LsNYc;+`%YLdze z4W3Ek7DU_kW)mTCc|qeh^a%_q04Zt+nf$tsV-w_YBc|yEa~A!I3mvE6s#6&|N`_)% zyc|>N9yxu@*@ByJ$U2vaC?hw6YOc9`QE_ZNP1)jgz3P1Em%m(zUtOjf^)JXJ^b^%4 z7+G*?SiUmmtYNb_d~@>>ZUhg%jNr=`An&8c#)ca0i4VQq!#=I2N0SQG!?Q=~$DEAe zOodYnQ8BH71ovznr3O+TvP64>Q8g4~SF$`_Sn}DRYLYmeqV^*ZyH$DHpu(jRW*nv% zO4K`!e%`{ArTCYm=07Mzhi=@&tmbDwfzIXmE(}KS7wV?T-h3|s60H3EQLW70kFJHu zV67TEunOz(_2@WW6n?>Oq0S|AHYn$JdsjjAZwa*34un36s&W9@r zMd;s6R6DqG5a_?6Ov%r=@NP|6%UR$qbCyO*hwt8LF`xF6;Wx3QdI?Q_0>W9sy^KY{L)xV&R! zck(=7a&7D=hUeR#U}WjW6Irb#hk%Ghtvr~1RPm?Bg&r2A@jhFxQRt- z*tk`OH6_1vEaivkf|t>ziS=&IY(~(|A%K$N278))igttx^qp_^&%@1f%ay<^gP@;he!mP`J z-Sn0Bm(u(3?k5p8+*7=CK>`0-w87VH$>Jhcj8hfAb_z)m=(WJ|P(j|&nC-7BQ+DW+ zqA93Aa<5jlJwf1rkqM5#;7Km(JC}nWvZ?3osz5zo&+$NugW-$Gz^!uumYNTIhm79) zWd(;Bi+e?_7I#8MJ8xA`4C{t02WlEQwqWCO+SjJHQJbnO89u)BXRG;-AFQlbw)8?4 z-S&*Coq74qA0r#sXBnt>y_dquBBtoqi4J4&A z3P62`n%!a=&dhO}U-;`uX>3qn&C4~2k8HccmBPHm5qTBwACz$X@>sTe)`TC^IDde; z?mx$=^r^pw(5-(EXmpzl?v?oTqxe!UOV5&}WjQ$Uu|eJQ)%`nXWORb@&*{qtnvMb$ z1BJSORn%!?#<9wa=cw3hY(R=zj>&mfbxKJ1#`h6Nl}m{#3hAl)Ywp??Qg2(9VjuK~ zN)fB=O2ocO)Y=BMSXV^{CJRu8YfHcH)w@5|*A)Cxi~#M08b9ToDi;* z{?KfZd!OG#J!v40^m<4^T%wlF1P$S>3J(G~qU?(TY8~scEu*p* z!w(f|tj*!F`s<*b~xk(A5}M)vWW@Q_)~z`3hR zI+East zb6!G=lfO<(n-h!C_Bjr!#aExFZ~7Cr&U+{FF*P#Q`owqe=UJ~n(lq!RuP#VesFhzI z4Av)s-qGJB=4mH3MTa%bAc+N{@3JjYr zD}uF~Kd)KC+9r6+A5K9mr~8 z@w8mooO78)wUnGhJSy%D3N|3;Vn`vl)o6eqemiDSmvQA zTu3?ea8c4e^{r*Oy)&mIR#|bc^`c;t)OicJxm!*q&cH750EevqW{XUvQzY#e6=?R{ zN159r;HhVFoJz`ZP?3he-vz^|DYD>&nKi$sVVo9oNr>O+>gx1gnlORBgw`iipX7Vu zL&Q){bm0rogs~<*VcP+)Jr*uKMi&M36?uOFB}Vt@@l2hiAaE2TqusYvQ_yM#1=NXA zp5SqztUp2r88MON!$9nhx?H|1;q9-diMW@*yLIL+R82Rt?;;g#!OCW#s;2q$sd_*> z4mv&;#}E?Gpq^1(8GDDqtl8L?G@ibFKiM z%Y!{ERyIS|Tg5jfd|(Imtm@|#k6Y3|UGHY)Z8PySx?`(bI?6ZhN{A?EyRVP&;fiqX z)GbbW;dzlWjl;r@H!^6|VPx}}8Yc6=EqnUdkm|7$issMj(0k_;dg>c){V2SYq%@B5 z_Xhr>$hWu0cN4Cgqk+26R3UeR3W+AktS}09ZA)JeNNblq#0R(*x6sJ$2;re032YHq zs#TX-Y)&B5i9Z@n?mx`o?z5cS7Ynic6}^%6aF1XkpV8ujpMZ-UV4oLpHa^%QXiMdpKf9O{vUfPoIU# zHtc=ZUR)sq$)+$tJex7IdOY`uHjiJ$Eh#c@k*i=4{03IkI$z&p?w8$;;k@<6Ru;i9N-bDYo6w|hkP6Xv0c zrF6$5%f((^xi#a1Vrs9q!X01w({T-MHaO_#cW=_j!HT>NEYs|V;P*HZTV7K;$e)DE`Xxd+3G&($#a0Ch1 zN4;^Qe6EW&KUABJ<|`;^+1aQ|*-_OK9E?-`+&}8RIUE?fX$U`ed*r2ei1i2wt@Q^7 z$h~~98X>Ai`2D@`I{|^%9v-==*2#rKyh+aFeb>{MZEe3S{GB#m` zp5vS{Olo(Iz{uZb+LPX269pfJ=Dc`y_r`fU7kwVSuFPzx){9>(dR7xXqdh5jQZ_b+S3-bVxRYL=k@#bXoO&&`O4)` z1J(15C;`|zhuk@aR}j_h3Q=2$DPt;WkwwTGz#?dhAj z3wiJW&6)w0r*{JT9*7nB+dJ9w`QDO-3VlA+GS&z*y(EZku7oTBe-55zv6uc21}puk zXMdcurFj*1Kd<}@nG%jti%?f)f;$dgIlDu78&Z!Ch4yGGphf6DMP zhWzb9f|ZV>MKIpX5*dffE08PXds|L^$Zj!4lQ6(W4U<^6KLL(PaB__&gFodN8gK?+L7g8$|hxb;?(&j1kRbi;bqg$d+ivH)IWPd=E;K7z=4UeTN zHm5_Y#c2i8B66n83x)zGRItb5)AZNUm-BgF{?8FQ6n=_3TN6E+i#26Fam5JUa_deV zOVr07`DYvYj~e}_2db}W<(@Lt^Ck^IH(N8k$Ku*&J#&fwr}ia_KaodE7RRvrU!4e} zdin*}eQMJy8T3C!4gQMURNnJ3-2c&yY#pqRAT7prHv^9UA;w2u#JAv-|Nn&`0fXFN zUbq$(mTBz%HAw$k?Ub^A2-{w>y@#>zDBDA$$Rdp;$TySbLLw>KK6 zP2w8-#Qp(p2N;^mjm^C3?IdOAhNH$+F|jO#B^xHT59f85;SF4Nti;HP|u6x-M%yu*6g=KoR zpSMR~F%uIL)~jt9dNB(md~XysdX+US^a9S`Ij(!q8#dLr4OrbRI)q#Gd`-D^#-aB( zIpH`xK30K9Y!dRGD)RaA^`7h}Xn!6@V-YBFP}ksxTfQ}RD&HE8Q)T_kt7$EP#K0(t z@r06;H*<4Q=?BocNqSMwq742lv5>CZVm~`l;6gU8uKs>Y>iP)Pc=2SYMs*W65;3nR zx5G*<`j=dDtZ2YNfo5%P$ewV$qg>@Sp4p zXBrLV|M&5ts6^TSl_-&|p%OBQ?3u|3Gh`WL`!UGA)BJ4N$u<~!vJJzJELq2zeeAN1 z5W@^6%&4sQ{2tu*xgY5H{ouYHT@S8vozJ;G=X}5K_v?JV*E@e{?N_h#_frD>+g%T_x))FE}0kwg&nL1wUQSEYUhb z`#sPvz2zRMl=0$tV3L53Du?5gmBa7Qclt1l!RS$y*8DtkM@p{2bfZGxuSphYVT^EZ zfNHxHHF&C^x__gKN3}OqQXfm=F0qwy7QcOKnm$}Qp%7}bybq*&j#zsP22(}w99sxb4HwL$1k9yt_j?-BF5?fH~WHQzk5^gv8Q775r zF2PbW{@pcrsZY6fwnErGjSLQ9qKSaP;F&5LiMn(Z7zUb`rKLh2q~)PY8!L8Fm{HZB*KvFe%f=w3kSFH#Qfvbhg4HhEc;Xue6v;LymD^hVXDp7Z zl|kptav7mI+~BZYpXRx1D+@5KPq#$^=_k*?=!Zw%m!czJfq>Oxifs$5St~Su>hmr% zOuZx)DFCHIm6BG1**3!b9H!*cac+m^9ol@P+`>n1Gr^ob{%X4k*+4k9Jxa;D`2N(- z!sE_hOIbLmQ6*={SS|k@?JH(@RscUrNwvCybH3YLu7tYDK5mOQQD)3`)C_E>fd-@b zuJ{)gB^2MiontvaD+dckZ$w)Z`le|WlbOwrKd6DkI9V*%ovHmtVrdoYyGGI6VAqOj zW4(9hztmQ{&Yp$oJf^ijBQ&!je!G>PpHoMPT*@jId!raZnY(uV?o z=Nmi=+CrE|3bm2*w=qUWMk9&B(Y@`rnkqEox2W9${cH5#+kHh=Z-cT|1)Y^=8TU)Z zwzjr5Qe;&k{Sy)r%IuSM+h=*r13)YNsrsJ#RNtt{a=1=^YK6F)?%=>P^$&7NzvA9C z)57-8g{f8jWsu2X<>!Tf>=wlr*$Xsjup)jBQ?-Bz1>nZJ)pnC=RpJgClOn;Hud=Sg z)>13F^$vJg*Y{)Zxmioq)tk3yANke7ER$kx6A=1eSo41`#1;9PKM+Uh_G`;Lou zuV*If>|T;N4MZi&E!(x<7!sGN>{t{@c_tKW9MUjB|LdOyo348gMUz+?3)^1ZYy-{B za&v)X0>!I%(OE4HYl7k3 z*-=Urof@x~VFYd0OOCJf7n~_?uv8jnl2oEk`88vUzjHVmy#$6!+L+_`47&zzOvsjL zJSf7KSk-UMIqp?Bj0cFsAH}0_rs1Lc@A%^vu@F%{rKM}OvT?ZZ)Dn|}GuQV$yeCpZ zkt#3yW5rKXNUgZkzi~)7(0%oCSm^f)7E4ZrMp?ibt#-*xqwe1R%jadV5I47nzP`Tp z;Tp3&J)(%YS4ACm=VPx=7&eONe0k|njn~5H=D#zpoRPKXcqZ7uU6a09ve)-XCvkK0 zC1`s|96qBG<{0&J3Y8T;WrdNUi4yg`k=Mo>9;5*D(TDO@3f~ zUyrp*Hrj+=$CjSVsIv1Ji&-YWy6)ezVyjzu5u_HqXnlA`1oG8zy8m{;jLMlT6K2tP z01}7s4uz6#%n`(hB()Ur~3CKL7an1^0rDP^E(jEO`VG%Y0q!Ssm%r60Ujy zJh_$IoXK1Ec9TTy{d^+Y1}b%K063M5vCjLlhfNNWO5=SZdJ*YMi+AtVFLYW9YXhjz zte%zdfZOmHSzR*^ciu8x2Fs*rQ#x*pMm92ro$kZQ55@TbGSaF}zk`|5Jms$m^3Sre>CAD{xV?>a{M$ z7n~h0x=YqzkVqq5JxN`8UQNhn^Mr{3D5ito^z3oNaG$V4?T8|NU3R%>1!ImydRpu( z^B~i)=yBLmQfN`F)5tU8yzRH3Rr4Y=q9($6<$`$nDoRU7dHLphSz0(o}VsLi8>frv-kAs{?9#rUF zD+_TBF)L4n)LP;XNl14tcM?JqaRjI$CP9Dj>A?0=d-q2olHh*%aW7z}Kzrz0= zph{?Lyy4$lUs8MRntYtH+tN~3^!Ifm#i6$p!=UL8Gj5Q7P7b05_jRm26gGiZL7ei7 z$9sXA#c#2s@wlg*o&6Zqehu-BAI(F^!VO2x0^PdFATyil`yT5{r7}?7#;T&U*czX< zBXuQ7(;}WHS8t6Ltv?ogA4tVV_l3OSAwD|zo^hUwk4I~}sjo02no)-6(#s-N($w0f z=Ly+wMr9BuHh)JxL)hE5NkmNQE-3$;&3^qZ8^PVzxWmAB1Wh9im>UciZYqmk-o;7n z={bQ=J&XsN5Bxms@q&v0^uuL2px4f$d2EXZqNfOKlGRQg$`0T#Lm;Y*$=y~S{BLLX z_zLS;CP!DZnB_&XB>a!+MAPKlZxNr+Q}*e|U%(B{UzzG_YQ}q}Scj(n2>h@iV*?a`f>L%9%Qvv;s`%K=^Uy zNNYFgI5we=-$C$YQa&C3=nh5q zo%dRSM({^T$OqPELl2yKQ%8H+CimFbyl;p|WEh@l_E5iwyt}_Nj~;CpJb+DYW^^3r z>zma`D{<<4{``rzCqGk~CDA4ZL+I)IK$S=z=pw8&@d*`teBjT_vl|mFl$s&aE$fhn z`BL!sRLc3Qj{T}gAu&e)vy*n7Np{6UUvB+dn`)oF(_;H?YbU3{ILI^?r#lFaE<2V- z9y>pBCd89obxN_|8I{~u9X-tq);1={7w=p)&VrR1=o9f-(Cq3TKdh*u;12t>VIu6f zwzE^{`jb7l+4@*W%K;=+4mn<2CnhV4DuiUU6YTlZx5e4&5-8)hoi@`J7d1_=V%b4 zvJk;G=PfYZxCW8e`LHb^Il0WOY~`KpN}uq(&=lgFJ=RUafIhlvqLrSWK3=gf_K5Db z5{F+_dXgu{K5FTYw;UG3`r}&;cck6iMgbP@Q78>clXRSlYCMS?b8VL=(#3F`Nf%pu zQK|L#r#pX*y*uiCNEU0eVzt~vsnN>WxVXIkL0A9#hTof^3bPt~9ydad_%;$s^`nVv zD$cC&{5{Tem3|haXz2Yt)Hf2QpHiM;KbxG)1pV=@cUTF9&?-K_?{KH%+LQ|M0+%G>#ts$gpl|u&dD@QKE$;o#m`@sQI5}cm74> zmYQ^0S$WXs+V-b+tkPMIt)z1GpO~De*T01}R`BuusnY*1;=fz?f8 S32AwTerc&g)XG&Xg8vIPQ&o@v diff --git a/human_eval/figs/heruko_env_config.png b/human_eval/figs/heruko_env_config.png deleted file mode 100644 index 3cf7ae06266402b14eac3318b7b0981b55373129..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71289 zcmc$`WmH`~*EWi4DORAkySux)yA^jR?pmDU?(XjHP~6?!-5tK&`<1(W&N%GgFeCT=NPcax$WDFc>gEKtOQfVnPZ)K%iVeKpyFt)z-%4vp`B;@C5Y5 zaYRg(*#C4pX45+m4gVJZXE0GJRffcv0@%hfM?I%Y)B5KdO-S0U((;JrjM3{o@jHUY zd)5txbl3hkabD9PLt`}`Qh_v$#;*r(+d4lo2-f$?I6MZ~4=!y9Yolb4bde$V{NhME zNF(-BJnBQjmQ!BuKtFi04wGG{X_gUclKg{hf9hkPAMbxymPJeFfCWl_RSO6Op@IsI z?akuH&+z?>P8f_7<{&Th)A_ZPbAeLXCxl{B#i@Oj=X(R_EpO90kmF=KT-rL_P?Q(O z-K@v{aMIy-Jm5OsrTY`S%?;3FqZO~pMW?smb6${xXHo+VgZ!^{0BZvQsTiq=8%s+A zQ2_3tfPjO{fWQEEz<>`1-~(_?Odt>>;5QQBBa{X5KW{;~vOxdm9t7)mL4HL+adE(J zMFTq{BWrt88wXV^?>InH^JYqF4rj5IcOCbabI?Ci93473ak)PNGy_O8|rdM?z~_Jse{ z$p5q>WMpq(XZGE}%*Gn;ce{G}HjWP51O&eY{qN6z_0!13>|aUN_W!LGKtbByZ)oXh z=xG19Z9rA7-%mN@%v_8t)rHKg0OkS6;9+K>uszyC^SY9SDr?&kL^?$)_t;kCqw(;_pU)d?6qH5c69kUm!7%FKMri2Ggg% z8vz1=KmS`2knbl+AQ0KW_BzwAe|6Uf2n=Tx^snv$fuJV zT_7+9Dqtus^!w=?z5i$g!R0&rpN0Y48>)dIxGAc>;B)@=x1SwbZHuj&Xt ze4sdCNvv}1l*1It3yg~7uG;7ozOgbQUbfu$k7Io=#6-K88R%Up2%QA=C1qTbH>Ld7 z+HJ-lAJm-uw7EJ8FOkQc`zf2ZMu74du^AOi#~}YY96ik^sXD|M5*X|g^sGlN zQ#!BL$Ys=01O8YAHEd}_9(2cfz-PgY&hyf1Z)Z~4I+`sjYdV&H3vd01zHN+oX0P>X*1jJTB z^QFl2BcuJ*Saa5FIdi@x-3pw1uJ7Lb<)Q=7-=K<1qnYn0-l=r*8c0 zzJ*Mznx+0>TpS#6{%-s@!d6gqP0jw$fxpyQ5dGHM*6Z-*M>@86n=enSGPW!V&*fpd z{5&!EF$CM<`G)w!1(kKp9EzSl({bjTZd7Ri?%xm&&6utnBh0qeY=)puhjWbY*9PH zuYm!j4U-MrqGofe)p27y4Sa@4s4IVl{86M26uaVrCx%6uNkmFufXH-O=6k;AL&l{0 z8;0WDul%7<(jnT+CTZUZ!BK)!G46*~`v|*Trz}0j*6J?g{^gPvsw`q{y5f~KEGrF< zI2!DB>H5^fIYKt)T@rS-W%)S>;=2Kc?Lc)f9Qpe2B(B8s)tj8|H{LwAdWvYP`7(#M zeQk}pV_ulgaLkykdne9v6=_Rm-IcruBP|a1({Ogf(cD9OjTTE$+d8ik2c_nvYrNf!*n=(O-y4hVO_`m0X zP^d5_^Vu_tNVOf?G+mz~(dO&@EEe4Pg5f&{S2*PLHkZuvwd(?ma0$hk2<1C@xD};Y zn~`4`a0f@zLo2%nZ$Crhhh?RgRr71+LW`Iv&ix^o&*Z{q(sK`h`IQP35TCz)V?^n6 z8VA01@Ro{TKQ)`$Jv&aizZ(i}Ff=fbZlrOano3t4dYk6XZ?+wbmL@)WlozB>FV0Fx zJ7%Vp)l9%HWDHup1DS{&m{7vRXjfJ@i)f(X?RUJ(GV$__V{9a}h%rB$F?Y0jx0YUR zxdxlF)<~dOAeU*K&m@j4g)fe>(AifHJ+31we+o z&C^k?sUMSwrkY#-{;+$qnmfEFIn_LJUZQ0|i3t-KOveT}#r(kO@E*#!Hxe6W$Hr0A zB(WzUH;&a}#V*(C=2~NNHWuOOG4%;7BW%H19xAo9-eyg1&wV_FsCcAzpkp?V-;qLN zQXM;yw!A~Vc5xCNwar|KMp77-bEdzP^{8OLvqUkM0EHISv-XHlAM}qI4X+>Uvvsqj z(l7fDyf?4QFu4}{9YpSj8SGZ4U$F_&8`9$eb_!!6Mn|vJsb2=o>hM6i%A!+?q9k?9 zSL$)ndADV}rI$sJ6Yhxz((W}F?%WUNp0kJR!!WT~SC?vb+0K@~Ck(5Q3&3fpR&P`#&|x63azIai=d-8LH0 z6E*p~s$|4ss?1Nlb$R0{lTU%F(lavTxnMSy`BJR0qadM4tU+0PGHu3LBp|Iyq27V; zR=Wx1>dKSduy%a?oJIQOTi1G&pxYu#SeJeL*yuIq0Sl6oK8uXhdIu(B>^bjk0avqq zjCYs4(er($Z+nq^`Y^@Q_MGO?79p5H+ZK~~@B<|Uh+xHAB*X2zPQAg52H9c1h-{krJra}ZHGO3!` zMk}o0f?EVXThDN!C*D8(MK&sFNV!reVQe{KYBe8|92eHaiOQjTttoZg;)CSwJu6&- z^3L=0#y{hkThTQXjZ(^>;7ypeX}v!TwLtmfG>>DBa{98nUD?g!&sADdWY<2iXgEw5 zRAd$v7orsf)~a2|f=y>$C8@It2>(ikqp4wL|8t&bgKj>Q&cNEsO2V!d5t_1mlq=nEiPQRuN(5hb0*!}g|Z2g^7C{d zU9oc_suQ2vF%@zfQ09^xT_V99QUjROKW=nBL{6c$U{DN!r5cFK(yDc#xoSLjPPyk{ zz!fo3+49;1Xqw}?Vk@JNQOHV=qlnT`j~k1!>ZDEJHxv$#?OCQqzfk6;j$T|j+RvYZ z%_yS2mVm{}^=vcq1ep%hwKSY71Zg-I7l(TEd@_`l_swZemIY_Qo*j>S_ZlO(Y;tu` z5MRi-YOsFV;Eb;#?2+8NCRPhW5}7%uC@8K?kXJ@kv8#&0{|p9_(VoTs)+z^!D#8S8 z%xR(5@pdYh!g=R@{JcbFK9d7{cQmb%Zqq&dVS2HpXzt!S|3-x%JXyj!P%Q|GIZwo0 zQ0es=|LkNTn;$w*v9VH)F|9H$gU#a_t!ybDZF^J(hk}_(?YM^Y^!+|iG7c*TrL;W_rx!zrq-r~0R8Xk2``EZ zWX2^tLNAHO;fI~ZHy5du`|UfHCsj>a!R1wHei589n_sH6j6n zXFZ@4eJk|6iuZ1)SYJe#hfya*_w1Yu8QDeM1~m|SM0{??5^F?gD=T?57`=F zoA>2G1|sGPi*-g|93q$%7~ad38k>f=P)=GDBD9tk%f`ZoFWGU|ukxK=j=_p2qrPh} znL%oEPRy$`sNZ6g7oHw=(J7Ve~vbCkC-ur4dTk91R)6L2##?nxToW&e6=M6BIt;49(B zMs?|Nsg~Rh4%U|CUY71QzJB2G212H5eZ^yvZ;Z%MXPyU^2Vdmm zV;ouKh(q+k!PkndXa_wiuHErOZRpQBmRc%+%=5Ugi&m^iXPQ$VD)tj|$<6aoGRjiRAGnpj=R2N(1 zs>|``>kre*HrEeJH+&QtWE#WqLj7SV3TB=eLNDNG*@IEBW!;E(2KoZA&vS8sdkf7L zrU$-?OkU6WMzN2^2I{)SxxNOb6I+ZF@Ew2I7}po(v|hT*W`2UR z5B3aqDrE^W&N0%3H&!l$8E>9N#UW;+xVMyW_VK(&9^P&kxgA2Q)U#M3py)hx?`VGy zlF9p(@WR_%WR?(hQRmw8^nQOy#vfHr&jjN|eB(@}U`!i<+ z-dVf%OyYI*{3uT<^-xN&OU!_>R05erjP!6H zT%8`9{Z-2{wN=mRD4n)`W2rKgV2#ef<(2)et!NsAQjV;EY&x*M)`r?M6lKY+SwchR3on_KNo{7B-ig3a*X0pg%EvC+6x0sLn)f6l!gl z1^tBJpPNn>PcZXN^@wq-jv<|~ilRt1q!)ch!?a=2;=(%>Y7?(620yoX7oZpFTPZ3(EsTCP39veI>y zNRD-UZ=#?3CJM9(YD64%4zrlF0D1^peWTY)U+@ z+=92h|JkZtinA%>8gas^vC=iV&0fsvwAgwkhww{ZPkIuJ6ZU0+4)iyQi4!hk zRNq3!88?U5QIuz+afxfUT}e1|Rr!p$ab4S7aLSK-Cu&T^5t8~NkXGM!gDc)!ub};4Hw7AC`wS;r!>LKZbyLgxA(Tr$gqGH@OqZ_OPa#YLBcP}Ct)HeEM(s14(arN(zIzwrG07F~fs{@ok; z__#uQ&^NRXfpjKcXS};4mk9sVkvi_m7$V}?6i1-tuVT>{$u%lj%KI`jFu@sRd1iHs zfk3@}sVddS^OzIzJUAjv9NZviQ`~pu*=bW=CpM7*7L$~P4q=;uhueF(lXf21ddw{l z2-yN}Epi=wIpLRk8@HzYfcxHHS9AH;fm{A&z)PK3or+BpCud!%-1Ajeus~S$+(KS| zyRf?2d9(zqkw%wgDo2?c?!?@}M6f-mP6=eq-pOGzjfV zH4>e$*@pb2f|n!JH{9WIrfTk1?ha5BS2n!NJa){DcF_J@^PWKy8Gp~<>@*w+%8 zcS`+Svx{F)Wx!!H9l_&{A?9Q$v9FPxrO_ChzHn~nY$s>zJ`XMRIN(^&S4BTcDWI!x z^L1ag)QYlUCv1g{Ho4yAbVs!Nl_phR`1&LOy*CG^YM!W3@$+8%*rkg^Bk!9v!`|q* zn8A}L-*$<{dOD$Xe&zaQmZP`yEGMJbuxn0^4uuK0usT~TCQCLRlV|2*t;K2Lb3GsQ z9zWN=!C{CB@`H1ne!9&t!6~&hJ(BCqbU*TA5>{tqXOP6-mezPg&>!J zoHF@-1ZRU?*e>1<2~%h#-!(|m5-0C3aLzXmA?l6|IpL1*;^lq!V#othHT@w%HB{!FdN+y&0VXQ2>W6n;<)gZ&|#PCQGbciLg!r*()8YqSk)9H&Km z?j%tH1qe_UoDv57&$7Z<@+-p*JKLVmHcQZ^Zc@O*h66&igbzJ;HxEU&trW%6&q}UW zrX{mq0{#S}452{YJA54;J0%_7AE|$1bNI{tB1Dn@AYr2Z=~_=%v8rMq&3KnYKu}Zv zp?HEM5Q$ZS`z#{-;cEGL@+x+t%%TjGs4{%owNZz6cKN`s4M{aMF>C7}JuB4d zau5JcfhCH<@GJq>=ZlZ!>pCV5BFbY;R>EnscJ>^Mz}@}4bV_ESf?30mj06d=j1*!O z!&RiKIQhFp3I|F=J}_|a3Hbs&6_uZ#Ko5DG_ecvzq1qvTW-0_4eY~umOXSxKm=AYB zj711vQ;=nE66WXG!`g3@xkvy^#r{Gb$ilH_h`o_eedUtc%t&~i;Objjg8T($-N-7K z)EL6%hk^C5nd*A!2|2u}E1T$5{m)Pj@eVIvs#C*keeiSzCA8aS@}5Kk`E9 zLWLr6jNW4G*p_1wFT%dSavj=JU-9sz1JoTA?0WSqaXk)Dm}Ug7h2p9)9^lcOS6#-2 z;y8Np%e4kHU?$D?+(%Zk-#lcwWI0yz3(?bBLsu{j9uWC&2z1_=DPGHgDS4>Cwc?~K zmcNXRj2gBTO54f)`5u~1^SKRQ6^^-$-G@1}9}`B}1B@^=4By#9Me1rqI=e=-4^-1@fK! zoda=v%5nI61o|$B0f9_d_(v-KN2uog4%OljwEVxG^R*Cc9$<@E6yV}Nz(!6hw=0w~ z7~4vwCk<=2I7GL#;gHK(2f(7`>Gx}qn~Yfj6)`g; z?O-5!uP7u>FAp z19keZ9mFlzXKW4u8JVSG^EvZpgFs9T-qj*`K|6<08O`@K0r!XVT;0MC{iM@+tDwMu z>HG4PqseT+S1C`COwaYq4nntU1wmpUzET^0l z+684p4M{tjKOo@`zeH+#WIkTMDa4!4l@$NNvyCsGv)Gm8JszNmxi4tN#NILStk$Pd zs?@=DGP=kLh5Gz?`^06@(AH=qL2)NCIQTn`dl~^c?b3?Lj>Q7g{Nw)K2pNaRBU$r} ztKGq{wBzx7c8+lPz~^OgKR*!mGeiJR3Ex=Qz(Mu!Yi}g+=-H7K2I^APpeSWkg;P_L zTGOx7n$>zTj=Xd75!#^mTelx{0c-r`db_*B*)ely@Xs6p;*t~zKZ7fT;7^e`%$>N| z2k+gxM_YoppDl%G_R@BS^q%C+NG>f`o06T*R;`3iXC|H%AI`OhmX}4mwce`;y|Bdb z@$s1)4iU^ZvVVjk18-J7!QLI|TYo~o4)2(0@;c)P$7Pi#Cf98EkZ(G@3oYW^_BhPubjs$*>yR|8*m%;93%$>DU7QTYCP+*L}; zZlVvK(QJPZYv0i(0y5D99@cbIs|qr)H=;Vn{%K`v`&dBNlR4^mzPxnYrTvjjpPm^Z9B%uJ>bfAUrN=Vb{$;=FQ=A zy#-hGynwPIL~A0guB*0kgyVWIRn^<|h{N$zDJROPt`7_v4Hjj1G3a&9>d8W7Z0Cle z;?!|cejPItQQYe4Dj69Y+jv7BlYoDm*Bg&=|DgZ*H1WvXS3!u|cukbq?5r&J%dd;+)y^xJyY~+D!2M`rkVv^W-oZ{ymRMZpoN4^g z9e&UE*QaoQANzyxQr_lKvcXY5lFQrkwbWfge*a9pjSs$B;|aPaJdSG#PJ;CQXhP8< zi-ih`%zI+&>0{}?$=zi5-IRRnC0s%0$D?fE-Ps8GB zO(t|ab*u=8H)wMdAGZwv3U)V_;A)@+2qR z`-G%Yu9a`xpxHS$Z5W2b)l>-)!LU>SM-ghpK`ma1_wK~9 z6x8COp2UWv-)>yvkJwd4*-_+0k$-SPCm+jA93=}(M}(YG5~jdr*C=}&-(Ev`bR zIpmEH5|2`Gj4fi~r4z_MKJ&OM->4Im`1L=RyED_JPsUJQX+b^@o} z?0mI31l8r!h~&|IMSJVvv2^;JjKs+Brzc#O$Eg;PMRDq!Ok{ zbu!|F?m_afMg5V`K)6$h&s>N$U;WgAGa20Bglky7uTFXe%2zsaN`vE+=K}^>b|nOS zp20xGbSMgCI2cZHG!k;{_(i9vz41r!`)!JZ>PY6~g)eB(;TUUbG4J*ip{M~gmxdR; zYpHy0%d;S__mviBnb!`*&e061`Tog{?DLWGn1am7e0lhF;a&unW&f_ga+}qP6N~m` zp%&MT-|t1EEA$}IU|sRd(b&H9(Z-nO>?hli1Zq<{_)(@CG)K(v-vt@B#Uw*D= zz!t)rJ6IxtDj%}ZW`k#W{B5|}fOIxbx&C<0^_NRoDB8>x%7`ijvLXBB5NT#~eLVA? z!P)JsnW7Q~eYSd=3$)ea3vT^~&VlpM>XQAf%s>Ru-Bi!z7Vmdnm4J*ZJWEzh&_OA? z#&cYSjSf%oVYS9{o8`7A-RriKV&g8z&(8w9Csank$)hRtCx^Qsv0pGSMDisQbE0#- z@&p2M>Mv}*p0>p81Q>mr@b5ME)2F@+>{xN=}{_tKx3d1L8` zUGI53OP<1OguMjd4cTNJE^1~R?|hZ+#6D> z)f$f}QMkU-YPS5`AN%MX1leoF-ELQwfJTquXEM3yc&Her)FnupHQL(Q z^!@Q{ppV1icuYIoLnND_HG4X?|ID`JaxcXSL9Q+Gun}u3d$rw9?gv>=;3rjQ{boa1 zZ@QFbXShHOkH9Yu%Rpl`(-4p3($}WlQ?7|~`~V2f5+`={y&Mwhlr5W3c^W%0Iz4XA7Tka(r36(gH3R`)Bl5zbOYdF$pmW~3*j=hI&@OBDxp%dZ z@}wqd!ZgA#M8%`CGM4Gfq`{>gu96jt{_FQm35>klbU+; z8d4LMP|gT{{Fwc;@Z?Ji&kMy_ERJsU!^a3A%1Z{KOdo~{beqL$J%?KJeP?Oa^%>&z zZh>HqcdkM^6_V96-t~O5vSaGOfE4_mGD?L5xBlFZpvG2GuwLoil z-_a-R!dzwcB;rl`264%p&$XzCJVcj;;!Tr&MWpiKG+NI@T?9@Z(&xr?AwLqx>B28T z86acm5o7{Zrnzjr>Gc-#CBCXbpU*zQpEMeMCo^8gb$XMd;r z{w0=S%%KPd)DvcBb#n~^!bl*+sHh(l5AKbR#*3j5GQVrV(#nysyph03?L>zh z=xk-@dnkoc8DAJ0b#}eQ!tsblsWhb{ww4+ng+gBNa>7YoIb*xa6$sqZy?5I=8Rpw% z@Ao?@)Q&=#^r=LA%xRH@ZJJxaSgii;m_9ZdM82gc`9)WgcFC5eQcpZAv z0zntSmw$A%L^V=Jli;B{W6k|&&6%_M+gzGTg_@a?&<}{aS?{VgRD`B_KN~G))zrP=_?geey2;54L8_@8JRQ%142am>ACVPnKg$hn zp$DmpxQ*erB% z$U;e@a~>0ew#8AMcE9vO-etW$*^y_9f~CpPsQPEw&LooSiEev6mWX22yK)EVh6RdR zm|JJ;MP2S5De6>imvKNnfsTv@kJ5#zr!MAVjOUrU?mTn%U|>T79JkFo2wU%YdI+6y zJoySqb(Tm|L-#=h`IA3N5?$xtjhxtQsCa#5e1Hgm2 zCCMJikBBd?xT1&8aA;1i1SiNwd^Dc>YpoAT9iOq6PZp5PPn3xSAZD&z->LZWEqV%= z)oU>(zTlXQMVTT1X0fbkwi^v3bxZ?_K_Iua=Q;CvH9#cBL0OGywu$$;l>7M?SZ2&* zYl|*-I`cZZ6oT?v3dYGz7TVb0NU`4Iv%Njk=j18CEq|ueqTj zxt-M0X{6n^Mu20`-yJO;VV^}!UBL5xRt#%SWwFS~&_kn1Q&j;XmP}A0F{k^w(~6Dh0m3-0HnuE=uQgE^eC26_w8)j#p>A$(WW4hLElkM`9v{ zU1@k9D3F$~#)7BPsZ-+CEqr58Hmlmz7y(i_&X;D9U{@|tDgZ1H2T4-P*~qq}QOi_| zk+`EGOUw0JX#Dnqqj`_Z*{t1H$1fQ*bv`+R6Gqo$q%VMyz|U2$5HAg)JsgL z!8-C8-MAC?h4@f>u&Q(Bnfbwu%r&6B*2_VY*U&x;9q4+L2$L(aJ<-a3SYdD~m6Sz{ zu*uXV2WCHra;sM@nBl&Gg2ef7Ck41n5%e?lI*ex~cD(I-JNy8bSGS29!^aGvJKWY- ztrD|L#oM(1Krc@ovT#&;AxOa{9;|)3YRzQMVwi(T9*n-s)?&vt>#348y{#kuo$Vl* z(8y;Pa*FmFzny7pCpY<=-W%>ODVh4EQh5^^erD~}si7sgRFG;_tf-$+3+Z^Sv~YfN zFjFWsL>}?VBg99k!^8Ei>x*)!Dc9#44je&WQJjvNKv6%3!RyO(9?!saDZ*?9A;x<1 zI~b#F+cXo}{GFxY1cg#% zmbFKX*rm=CZB7`y$&T9%WGizLa26 z;s0Mj%-JX! zPi;5joTu^ks39{xuczQD$T3RzuY0}A@`#~4$1@|li(*u=9k|b+oCre#z3M*-!4acU znXG#D6G|6TH*xY^zhsO1u?Zm|_nKKckvbxXLSF>{gF;pfnXz(sy?&+Es!AG=MK-%V z%v4HPX}l9U z+wdn}f6BJW@$Vwy*i2W%wJ0eqZH|;{paR1P_8|1Sbj-P=`)1S{4S9|h3#CB;rk+TO zfi46w=&(<1FFK^h3lGRRVpt0By2#3s*Z9>xBGHB3zS`TK@?{iL_hxMO>3oDuKu*Wx zOB#&*?4yEw0YG)hK|bm2ITTuw8sQmLREj%JjC>m9sdm1ch++5;O=-W}$z`-c{Lz(^e_ zXstlBTt>TD6-m}T8^j=;!U?{gU{gasTV67myIAR9C`KOpiMnlJVd!5mMxbWVJsCqm zzc7boH8)NT>S3I{i{W*<0!R7-u5Bl5u{l3adwJSUk+d>pR` zugSUQ7z5R+%2h9|XR$S#5Jo9#9hVd^ZjSgcm5#>LKP zJZpjMk|&5}renNE6f8%;$jd;f+8VKc!5#W50)2oHeE^yGa?stJXz&NUZik2Y%lR7T zFwN^|vV9v%Q3eOsH%QlsrPjROMbg#;|~}Bo*Fa zskB9iO0|X<4#(3xR&Tn|NGm{kXH=9=>(qkAWX%Q656qS#3y!B!tGOVE-~@;`7}kJ# z(9e`UJ|?m)QG{vRL?)9&FqYmb>TSCpmRW7)dbqMIpUe3??LDdtJcROVIkiiCk(m4% zRbE_qyTzE2SMiV0=V6n}P103(CldNKL`8k-;N%G@ol*il1YT0ZZ)RWLS8AlWVR=rU zeYf=98l=+7wW=kON!UBxejO4bH{&l?vsh`|U`(Fvj=~=F=V`RXoAb{T4go2x!bGBT zk|Y2rR>=V?izW*vLUTf^(&{Rw5M3c8B+0e8*t%_>VA9Hxi()~Tc8^Ir+kDZ74e9e= zcC;uqWY8mLyhp0g3GcZ7@2w`ix8u=tGUPR}a;iuqMlKeTX>3-`p35a)p?KV_f{CKu zFB?WOA5s<0wi%s|%<1W&yj)Y$^=*rnJ62t@pg9|_c`6Bn0gQ6ju~0BuHodQPHx?hn zA+aaq#t**y{BBk`KY9D0L(1SOdiL`I`OA$A$~OT}^O9cIr`QEmFjD%LSt;Iu2<$?s z9ibO;gRF;*1!*>mz2OwbsV_q(+@Atesdc=J6a;$|bs&k~0$@7@#hB!9aB$piq~h^@ zC9=&=j-J(d@xR0N2#izWoG_j3Pvs8i@BXs(0Nc&aDfQ+Qz~|4dWa6|O{^* zqIa-#^9|!+MWN+kGIco7X{%#6rDC;7kXKq$D!1b)Sb8~!G;h1qLZd&wxQnn>V*9Nx zY>fC_r<1?F+WW)n_~C1%bMz(8L<+ha)bi-MIbiGf%@DT)DdiCfZC0P>^8MxFXs(T5 zaL{il7poAO>$)%@pw8D4hGZZ9<^KF2z@FN*fuN8fTe9eKvtFEvlATDf|?`GS&D-S(WQajyTw+Y9_*FMO-1xc-~d#gz8a zc!gR=S_k%ZInVoTGNUEWrC28|W=MIEJjva!41)AUn zfi$cy)EY`TF4D%_M)#a%+lI`^^})E|zmY54Dg07Cy!a3uWrL8Q|csDH&?Z-6vLt zK+E+jL4o}wu9_tGefU07x8c~VzsNeNKoX%jl8?}`g?Nxcn_EguL;+w(oOAtB?LL_( zG6NxPW)i4!u7JU5up%^l;>%s4?vq>n-a|3ll)9J9;EQ~V(^-iub=cHG%|WX|zC@Mi zobvILM!5#Fr-uh-4UH-jxPHQyUlU%etj>hMHQ{I{lU(<6iQi+GXZO2b}U9e`8g|bj?*!0Nm=6ldPWb8I> zPYN+P%?9?I=SS6tOP3*W+hlbj+vY?g(5N-kXtBZ?8oo#O#HD}ax*fNZ=*@^5h~Ploc}&X=3#7#XqX*E)kr z&1`8xRlGo)jW4^=I2?Ys3p=1y(iDaz6)@fE37E|*FZ)rUQ_G=k3@p<|fDw4q`CgEQ z@r8omO^OM(mnqp%6Pj}dUUAZX>QsmvnFY~l`MyY48M8SBJnW;E4};ke-}U8L5pbk} z$>W>z9+2K`UB0>WL@>Gc)Z)h-q54Uzjz9_w7lB8xgaVEL!wJhOEeZ+Ih{g&O>t|$}f^KlCO9bcNFl6Kd!1n3mP7cV8f1L zl_PEV2|%`wbY1f2_K{InnS3Qu^M4)%2v1jhxR*~^W+d?LUj)5QUR^d>IpDa8H5@>8 zf>}AKyu=$Y2ohRFLz>Y#$(PItuDTC=I+?EwKqVvja{7Z0f(Q>bo|zOl2N59%T;nkY zP0syh(`^5ub{7ALb|3U_31O@aQTZM+;H@4XFInoN<;@VN25qX}zMfexr(I>JAdLD2F-c5~$|C?SiD`Y2es;TT ze0CR|-(!HLPJKp^4l4eBk#SC(&F~BHEKP6mdZTmr)&i>4@O{I1Vj+V@vJ;||{Cc`rEePGSOs~$$eOU^;T!FC=qB@XC`cd}F0}0;|l@uZ{+aY;+ zl{H*0D9;9i$uw&jm3r1B)BBf2(!N3^4oB^XPP=wb;aItF7Az=?ic1N!gXXrQhF?~5yB+ZL%?k|rD zs4811WO95T2z1V%eP<<+jgbt{-@kvSbG{<`olFmh5|b^Zt}0h$HoBh)IkMjq4!l;_ zi!V)3jKEr2nscCgAS_@;+wSAj5g@xj4q@*?LEG_l z5OmA7x-E!Usi3U<((O<>W< zq8CfD^tvb!P0PX9OYE>JnGJ)qKK$^FpbiCjN-4kY5rk{VSZRJNbjwRw_+UC^V@mQu z1nHh?#TlVds8xQQQ-Qyn9*qTOXw8$-s5@cxK}?Ip(lrhy?gnW!mMD<}U>ct9n^h)J zF%n=Te~{51W|ks6(d$zWXh8i%C$o}ZL16rp^1T?Fb)nK_7xpu>m!q^atnF30Dg6cg0wECv zXMUaR+_>3MXAp}{?oO+95i=*p!VGP(W1_iIp%Hp5i`8P^({P;pdN=Y6zi*q15)*fg zvGsN2+nC#W+!qL6QsUc~XjL7Wd$W&68z9%Gv^G{yV1Sc$5M0thB8_$KIZSz6dqB0k zu1t4W*S}>``p?%aC5;w*)Y^Ks{phGGD=iyCWNbnr4lNxbRy;thRA=Za(Qb_>J`}=^ z^?lju9az-sW~u+Bw-lQ1#+W69@=Y(K4@*X>NivSAVx5&}e@`E7s@2&B)&jaD6$d)0 zR#rOlOj0KO{n2;K`VAx=J=N4nqfIybxKo*hUD&9JOC0Tt5zDX6Dhj(ZyaAaLEtocr zLYbk%wD0$+2R=Wrnq^~ULyxzX)O805E#!$LdhRtS&K{9@xIvAqN53S^ z5mI9O;CjoM0vTnT>R(ljWsh6|`MX?4#Fe9yw8na>I;nUh!E3F~s%!+e#9zKt&p_9fNj>nqCr!+dIU z0@*)R)O9x)mGfOuU6SwD=A}?>#zP@P{TQ(w`_2(Y34(zW)@oQp_ZLq}2$@Wto_7ec zo5^><;^bS43>(bfJSQL!V|)Pdit4L8)L#{S_}qv9G!bqclv(KCNzi|7k> z((RsrDBB+YpUf%)F|h3fB~Cy_Cluikts=(cK|vheHGpQK#sF;pP@FId;wXy+T-%iY z88(clv6UxotvkYQud2}Up5ccXsyc;jIUmJu5{p6`(&}3Ma9L348R6_#` zc?tFN>X$7+V?dEGl5g)kb2+wI*C7PoP<=(miQqQ}WOXNJeDGl8_pL%Wc#;0`d>|a$ijm={112F%|i97fFE(RrO(Xs%>9tYz504H@+g-E~g&rb{@B z@Q1N}+a>uoK@J(K=C^=9t~_r5V{H0^SpW{u{=eo0JDW3o4xcu7#ykf9W)WPIgD(HfNFi~V7|G!TJ16W29zo~<6dvZ4a z!5{(yaO}hp5Rv{=^Y?n3;y2gr|CjPfd;Pg~2~|~MZl@1^8PAaNVx~fVq#_`{J3dGS zc6wGL2Z%|EC{oU)<>jROB>?Nn4>90(pYi@-T_J#$q=A7LyIvJ>xvZT(M`800V%IFm z&zG?n#`{a)kwY0efvAwY)6*Uq84u`JpRu-O*kSkf5Rj1(r3pMWmX+Fv2H@N_qqQNkygvjoRl$Kwfz^FTnco&qnRKg&5CdZJU_BRT{@6d(-deP#VM}v*IJ8W7 zyW532cb(NVu^Bok1;6WKU^Q;0qD^%{5ohxHd&IT{I?7WF;IN7M;*dZ;3`f4`l0N(Y z{4ana8o(&@r}Z>sxywvU+49chsem_+euujBCaHg(yxgML(8y6;CJ!{WJ$*O;Lo_MK=jlc1 zW)?O-&jiF6(ZvvO60xDIvW^qMVfqGKbPdqJbc)Yyh`iyLee6=rQi@SH;qz);M<5$6 zV1|9h2aHGNw>mgxacU6bSQ*R3pJT(rmi_rE?(#Ih<35ia_z1H(jOd7T3}x~lC5&ho zK<%w!0x6y<)W86pWi~IH2q$(b25fr@x0R5J>UwBmT$N!bbo=?$4_-8bBglfWj^O5AvLtHek#uB+^R! zMLP9$5bgqS?&n{f;#O(7BvkJt%7>HssU7txAFhqQU~@X9Rp@r|Kc(Nuw?n`Uvg`81 zzs(ja?j9VVnaJOrux7!c(I|ZXo+YufyDKzjF^dNvUFC9dI-hU9EmFDycn*@yc6$Wy z@bE3JHwE%IOG5y<)?A4)=ls><=d^!Gb#aU)GM>|ti8L{Z3xs?172mh~l**DQ2M#6& zBsD=nL5oGgk9T+DB(W3ST;1FhrgDUf9ge0Q4#u_Z>|3)Za;=mqw36+GmK>W(nrCP3M|yfWMu|e89U@*-Q{wVN4wchnK;oxyDSNIZz5B7 zBtjQ3f|0=*URwk1&(}mdWj^|a%AVk#9-k-YKN_ZokPFF}n0|UaIfiybN}Vp$4qlRJyu8T6Y$ob$wC)LNL$DAf+KnIOyA>-$GNHJT$RtSt zwy#8Js%Y0_=Kf&fSsrg(jL7RaO5Fdi31?<$m$g=4U5^pB-*|0q!@FKDRLX)cJ6O=9a7Lr{pe z^)PD_8k|b%m@8n0!(>sKVCra)sQv-*xnLx*QqC9T32?UU;~n%Eumw7vDU1}N%-(;= z?wxg7sxgZHMtT4s)A7Ewd;K5c-a4qRX8RUR2uY9-f(Iu+aCg@L!QI{6-CcsavvGGe z?!lel?(XjP7WwWyzjMxg_5OJEs$SJDYS(7VTHUj|XOA)FXiiQ~oS(KkPnqj*Z5~fs zibYbDS%^-0tBm>s4EEtcK~Tx`50V({77TzkNlagOcbUcUx_Q8IR-(bN_1S=Cs}F}V z6a$32fEPIjeam$w|8i8lUSZZx$7Z)nW54Y|^HH*W)^IR>QtlvgSgdhRnIIlYRZ{IJn)Zw}{talq{p z#fFwDRZgT~7>v<*PjuodD(FLH8Z9btL02C&&4aY)jK_bt++RXds?_^2na_(&70YLT zKKTKQrQX;q`R*fJXwsCC=fXAR=5FHBu9A$yNE&-NB;*(>(4$>HSEFoFQ*Fip{Tg_B zpOjL)Ds{WkiWtKm5TEWzf?a1czMuZYKydif`G9Ljbl2DU(u*tjCzabk29UGLA=Y7z zC8z6)D*l-?X7lc)@sz1$)Szo>^z#1=XlSHsisUcNgUd^^Dv`7e7jLa!g`@k`S;Np; z;^C;MlxkuqWO5lR29H_QTv-V7V8ilYRPn*%rJjz=cuBv7Y0DOYOl@t7$Kfm&KsYuk zOLV4sph@=4w8yedHipQO|1AmWoo=4}$c~u% z{k1~i(&FOP*jdfh>{vFL`bH1j<(|5_+NBCHf>^m`n*aW-Y;ugazrIU+2t(ShHxs$0LfMY(6U;{)b`O4kNM1&_lo9&9z0%cBE;K&0HNeW!Z&Nf zk*}(dKa;(79fGM)n;zBDKYRnC6Psw1GJy+;RMgns5NLpC9ED+fBTvo zNh~$m%gs;ZkM<-9EkjWp_yQFDc8ZuHe158gh;HSpMz6+{8PIESj67NkFnDBF(!r}W znhB^0N4qUfT!02*+IZf&FW=6q9Vcr@QOJU`Pv34p)N&)bAyShOM`3LR5~sI93^ zX&aH>R-~pWl;|ktKQDc?5z{^DcI%_ak)wIy}&^d-sCgRy$17GHJqQCrDG1 zlFfzP%#R%&W9oMbfZyl6yV%NVy1^xXOC0M@g5c95t|?e|;#^pd+qxgMX(LO| zpPW>E$LTJ@YV)-`&dRB#U}V?V~?1R ze;VI{f6UG*71z*Kc?iN*5p|I?zkoEzwe1$WM#LSN8Iefgx1%}Ud;!-Im`z`QfW@=+ zUv#z`fd9eRq0MQsPzz_iP^%7C=GWcJ;bi>ap!$T7;qBXshY+OqhakO&I7 zrH|VqM>!4~h{>NObTA<)!gvN1C}XXv+#f#gFVvMMo6X&?FkN}tTUm+8*m~SrC(;$7 zlr~@51LBt%Q)5riIk>gt1Kd8?VTYAcwNWii@?K4Of@JL`sjZNUcY378xj2nZs7$KT zCz$?_UBGH=NcX!;bz9YOm2(KQ@$Bh|{5>#f$^<%K8^0_+x!4+5-{Rxq;wEv7B@GpI z-M(5Ld5ej)?>y71(8tW|S6mCkLk2knmIN(7RpZ1JDv&7a*=*V6KzDLwj!ncz2JY}D zbC|}F3Dt%m+vTOV9*MKs{$MW?nHC;OB^`#uQN7MX9T`v84np3=GOHqN#i-JHB6YQm z@dw6;+wAvgl~l)NKor;n3)u3Ax@C~+-ue> zm`|NjLz!vHY#(zh0Lwa&cyb?^&3~!H+_06xuDSj_3>n1g2;#6iTi4H)0dddFIq$61 zcLfYkV2LF&@P2<;apX5%_Y*EjDoizklhzqU(rkPcLF`IkvlnX)H_f3q3;|6oAEVsj zjzfN86L4JE&7PR(y{TLJ)5iA`eiyV~Vp8mS(%2^Cu(5Yx^Dpz_lA5Rp3e@MbUW5VC z-vA3hHnS*Wfy$&CrL6WZZ3J6iS&4oHzQ#j17H8gVUt{td_<0q56ZUYqk!43uT&!$y z|K<+-rp7|V0mM0zRJBQK)s{Bt+WBy%D{t|euq;g`>GVAWDo=)cU|rm`JXVC+Lai?& zp1}H)USOc$f{y8M4D?%ZrLpirbiQRkmJ9vFV8S3@tPm#{j*&SeQTJ5mt5BxaZ%S_; zgNU%E{kT#)QB|br%I@mGZqD)6AhunLICV)@^ecW8N7hLWvY~aAtQE>APyG^ zQ)Ms`)>p*RxwV4ur+t}jmoZUDI#}x3WziI=Xv51NG&Bq?fY3LX?xSd#>gvh!O&Xc3 z0onvvkRz+I9Q8X}+VaSV`rvr0%~R``sYpf<9UbXnhf<|89SE5Kb;f+cAVq>Cd-Ym7 zWs%@tam=*laot_C{2m^o;S^l)=o-+p6GkUcE`6{$-;t>`)ROvxoU?{R29wkIKf+(E ziroZKC|Bi(uOBI@LD&t1M96FRqE2V){x1IBsr(OwQ)8k!BY_OBn`o^)$m)dP53O3-J5$Nn zw1%cLO|^4=X@;Y|d-=v8Q*5B~T=fE(hIPA@K_Tpz`b*StvCfGqdGdRJY)qzoa`bo^ zLVNTXA|F5jZ=+DKYHe!I6i%=Y2sR6ig6`)$Y3m}xY%!_@n(v}|2 z@mtfl6Uel$U|mN+oV|R0+`{ZS0VT@jg+imp`%4V88!}btiM0bdI_NYt?oDu8!wCsg z=Q?XIx82@4`Q@cZyVEu7K$;jC;r8{DGOOK^r*q*$KkCo(MT zJ$n~|YIL^#-3&%HwZlofrhWt1fsmEIqbrRLbG9t-xjR@)0`G$zPc*h9TzCJR=(IE| zh=yo>>4Sn~v%w`*k%hKwnVK&UULV(l%;Y@GQ^$e~%1+4f1NcUR7Iw$OEI?nqZgbt` zlCBbhIxMgG!rta7CU*Gz{D5m8j7q6OxG#4OvGMs(-ukMDv4pht8!2@xqx8qmSewrk z5dAq(kk%u3Ay!XM_VMr5-^%ipsY&!RX)3&5g?-&BQv?Afey^$mYNg#j(}&GD36pt3 z;zjd6cTP!jhtE7we`e=V5n5_`lI_VP2EZSdVc~^>YUN7z&}p}*F&^4H2u%TC;wQa# zFMxd{(^zwaVX|u^(L=vE6C(;a*8MF?>CW$WOJ;>bF5y_T zGI8YZuJ_uWiclv_oYzgV6}T(K6K)WUd0mx@oJh#D`3T0M)S0N&DwKw6=V!mtj}HVr z%-G#`RZsb=OTBbLgc^xf<7r%QJ+r9PlgkxE(lt!1Z`~lFKJU+z=YMWMwwG>;BR_xy z4ak$7Wf;AKr5__xq}7d0NcfDE(bSU#$X;#y28cDGmoTF>Islz_URgRt==0W0py1%Yw7F+``VTrd*DN64X;|yK^)7qF5TdC1yU~+6`J+jLXP|X6JOV&+k!7PyAMP zWv7EfUQQk9A$0)T%`3u)I$M1zed1B{GI8Bxf0W4tr+He^z4o{66qp&5sh^qK40oJ) zB0YvBkWC%tt14u{#=>Am=k-t&ky%pdk}qM8d1&0kcBZBJu7{Vob_)|BL_sMp+1r;*}w=SAqht)CRr`8B{pyjUOP22Gq7YdEX-Ft8V# z`Sa)2>|^P=ET?iYri_(|j>Y`mS57R@(Wr;ABJLXdExHMQGE0&Tmq8 z?v-o@?>bI)m1wD%YU<>5azS}{=_6X%HVM;vrsonFeeirj@xvZ$4lQ7Og<1%My+(Zv zFNZXV4>$YM(~{dX8Rt&sgeRdXDG(SqP#u0tsRIz);6Fr_krPD>qRHP9`d)F06|H(wW@;#{Dy~|Xv?*j#Cf=B?**@3?a*8cw+ zj>?&}+zA=*ZVSz66Eo&XPm%HIg9nzme#oJvd=)y_Nlt6Xq4jt+3X15(<9jKGkL&|+ zouI0@!B2V0dWBsz5QTp`aS3r%xi1px+!Ke7+J~>Oq?jI{9C8Y3UtxOqq*t;m`4v$Q z>G2*Q4)y}v9a&>Iyl}bQc_rWZko-uh`@aA96Y>?MMhAH%X8cmf;{hF#qB<}r?bo zUS^;e|Fgrs{3HS>oqotbvwug;f#-Ya0C4{Q%@24}^bZ-v9zAau3O@XWC;r{%!8-?$ zLZjjG86{`T~Zaq^|-FSoSQASunWWf7Y%loy% zYj{2t*dRi^GF|7Z_Du);4v%<_eFj3x;Q2^-L^AK3SCCaH>9!YGx0A3#x@%WXT?Xtw z!G>gHL|VaYtyGnbkfOQ(#Li)9W_kS@XBKxK=IsjRcsmo+52QcO^Z?@`nEqZBJr0OT zkZS~lQZbUmNCS5Ne1N4eIe8W8ua6rwp)M;K>f1zGCIN3=aBXEJn$9)UC7pQ&J6VIv z_2o82&#z$hw21*Z{%&kmW5%dBLhEJJ+@z<5Nx+NyeLYu!z&%0xOVZ@N?1ZMSG=VJ= zO^EOUK+TfHCWtdCfpt3}BB->SBO9nu2LQ{NiXRZtmoktz2MMvAWAV*ynmJ0Vyy>RD zZr<(#1dkRD#P*5ouq<_KGzj|Dafp%qdakN<{FvvD@F*IVJ@5rTO(DjK1)~^8#SI1x zOye2DcWo!`G1lE)s2mA2yar6Xp#(j8h;-?5!!6k?dy zt0#mg{FARDb0IxL2)wsFCP$Wl_CJRyz<&MTS}y#>WWP9R5V)oOm%9m`{p&bYZzaM0 z-xK5C>2Vz8E%ynJ3jGsQgQin#*?yc#9Bqi|ewV`Wt0MqVDX-q<;R`reX1l;)MB28x zkv$a3=J$<`QjcWq&sg%HQK{vuuJXk7^!NWNnknFQsI3)rb~s+_eyCJD2LSE_o2>x> zK$dC;SUF^KRK+k`;uOgjJCtmkVY4`&Bi{ks%G3Q7;Qo+$pEFagp6_~dB3rCLdDXkP zw77en#y;6-Zz>|DI-15V3DgPa0H56(WO2Qw@DB)(1}e<1de;|D&s}~dP^oXjfIozG>`YV5cN3_7)&z0?YW|8{euTl=OE>JD_$~%Aw~smtL-6UV97QvnE-w#Su+-c_Xd|E z2l2aTWN}Eb$i~TutFlT4l7GTRNf2YJ=S#4B)H~g-Vr*YnqWQ&%~vHuQifh=S8Ma!s8EvGF|n@ z$3J9`4ps*LPs7rM+|D1N*7-=&9B2-}Um+JLHse|S1r7ax7a0u6^bdQ*#Mb%0$gAj@ znlQFjojWo%_xn(3jJZ3T_MOdc_ap8Xvz!39gNe;_;$nsrW=n;qd?;SgcnX=`S2{0G zEJ^S^%x3<-lSmuT2>+PRdtVBywmu-izE-@hN<4*zNVZ^Dj&YmV1hY6!Vll8W^9{T{0G#{q69H%> z3dH5k7lKNaDW1Y4du1|J(8)dqA(TLMG6B@$)=&_6)|s#Hg@@0H_k7>ZFw*+5i#Yse zty3rz66AMITw4kqr(1Sg?=%Ofh9E|hCJYa z4xU?ud51;dd{eGB;$ZxvCR4^#8*UaEoSn*Jmx9S=tbj;1x0#lrO`m~fEF}qxU*3=g z|BK-X$D3@DR_1}o z%DD*PeIvZQ1idsj92%V1Bs7UK^@A-)+Dbes;U)5jPpDYQT89)b#9s&Nwht&$a5LKPqpX7cS~o2c`wMK%~FP zk+-2J-s!gPJouiayQd4ro7nr>!^0;Ff8FRZYXnfmDL28OAz_LtS}bNpa4qpgNspN< z_7!|h2HRn(H+rOG>8?*cj99H#po212UAwZw?#{Oq57Y$lP0ne1Lw!R#>C>%;GkH+m1a3Jc@&gGL+4>@WOoZ(b2_pz0D&p5+-4 zj05cHJ)sgqbWd7dESBkt0^2HJZASOBE$I|G^LvU5znImRnR#~8vjyLa`hKtv8|QS{ zgnAFTD1CxLwkdwJfVuEo0Ac}HA1ju(&relp>o_a0;`&kK7J0U^65jfHyj(%#9vb6lb{1QUUj(M`v3hP6iOlprCi#KUp zPjyb23fb|cq3^?h5iM<1u_iEtUf-afd%UzFr+MlYaWxXAcEfCj>NIPV4(E;u!wBfd z1_qTQb@@ugExmW{uMRG+KvFe{B_H}4FI<`?ofuJJ2~R(c+tY?9Wa^ehsE2@3Wa=1_lboQ`Khw*YpmAIrE$=%;WY+I$ znMQl^d$VD-Mz=edFn3Fer>h;!U^Gq<6(gcLLC)FEP8yO6xyu8qe+KJle7pP0m-(9U zh^+2IQ60W4IZo7?`?|J8FAW70k*ay=o5}9n>=I&ii$O9fmjwmE?Fs_f=rc zSBu~|eZp%P$j#N?r<^i+yuIn>nLt{9<~e}bq{gG>=LdN);DzV*BG(L|NKDX={+M_$t6_V`JEn5tT z@R^6tbr>9ebH)m!V`*PpNh-&{Rm6eh)9>{^cn^tqnSb|uxNP;%fkEqs^9!oftHdRc~B}t$`N2h+81Z1v1L^N=TfKLXjs`y2#)CuxsbE zd5L)o!1l*8Jj~j}gbdLJRC9z!PDOGg;!|X8JkQ=YTb$RnOgq37c#X~Wlk;>-R56GX zNAS;`?N097M=$TE@gYA&7eL`ee&&J1<$hm45NfvQd3%bGZC5N;SaJ{UtqO^Hj>5^AwKw++^8?((@F!mxj>kSEQ=mpm#lhQoJXQaC}|L zZXQ)!M55i$l1~52ILQ8>Lz8g)|ASs{#Z1 zhxqhbxh~>wYc^v(s~;r`)b`dH^yMrYjDDAVSIrS0trpPya|rDlWbU5Y%__EfMkN=t zJ)ACTYcQJ2`!2BW9vmjp=HV_|(HH%_o6@!7Q|pp7lvWH>p4ecG=FIv%pCr|<^}wAhh)uiRtarM z<=M3)Y+rT#e6FiPiQ=lpIGyM7qpl8#Ihk&w`v>=KNS`(L-#g$0i_Da|cgD--=G9L3 zR!iq%mVC;7n+X;h(J_X{Qdcnkq$x^n?eiZwr~@&+SSc1%p&*mHqaXO@*U^ojrZaEB zHe-@N=5Ta9Xte{l7^dgWE(84nkYM+<-Ac zNBx%bVRFZRJ<5`5{7jQ-5IqgDG7YM@(*9671f#mVz!Zge^hND3Gl>V>b0t~H^VX7M zfSywsY>?@X`+16S<&to_0v#tel0#IsNbX+aT13SKS2B%FAl>8KxTt?blSZ?k3jK0g z7LJ5tse8bVx;bO?GLwnAWw1~jbLX|GB2ghqbUuCj3vZkrLZ!0XFKB5*GJq$_nw~p8 z&seO<4f=%U(;z4_xX*%pwZ0h!!g8PvtRdHhppXkLX`IBHD8nGrl!(NdWPG}|i?cDH z`9KK3UH`&M@Sqmqp)wUSIt~gR_YfbtcKJu=q& zMY}bAJs=THAjF=U|8|HR7Qpc#<_u-l6|1QDqJ=wrM{K!)u! z4)uBLpH1|?{-y#LBF>H_LF|7E>BAtaa%n-*3@;g9vQ5?gz0?0jL<^({YQL!^a`9T_ zS%LfysDDN5KTlSRAT!3dizowa{wp+;z619|h7b9Vxb0tmt>l5rQ>)pMviPt2FMdS| z1^nLp*KL-G0Jm9Oi#6~U2LGRbYQ+J!Qylc=UzqhjPuk@H$i{jqp1oo*6^1%CzG~K~9*hd!&u|g!i(C7ww8VcH;l)exI#1~j;$mb)OXVzw zv_o(@UUVfhu-EBt;-MPYC&KBcP$nT4<+#;w)kw#j6t#rd7KA!|7)z^x(Z1 zWaX{a=X1m7bi$(YOEZ%zGHSJpd+%=1c*-iIXWQmXh3;`PGR8&Xe}V9&Eh%(gHm$sh zBx)JbPTJV@lEEh!1-S@A$DmgnisQq_3%nLg*garouE+O=6w&i0HpSoSkMo7V^~+TS z@W6xM(YFHt9+(0D_US>+eZXHXHOY$#0)F9e^Rf@b(DaVCHwhCS{uD-_BqEg9CAYQ#c~a97~uDwM&#%56xIhp=>8gmAxNg_u6gkYmoJp z$m)dF+=U7J>BVTmIqx9wR!t!3vLx*pKaiBWLte&7Ww@H*y88i2^1dICRU)o9>g1tZ zii)W}fg|YJ;{YBoeP3isNcjjqqr6>LaT@CX5UHcTiqw0~1@`|Zrv66sXe2N`4WV$A z|0|yL{+=&4h*tO?uY1WNIALK)G{xVIO?jTM$~Vvz(KJ$snwzd6A|dVGo*@BZaDB2v z^&kvJW4>j7nEqX$ij$br<8f9;CJd7~)ANOsKPqaCPOR1KuD~IUZ4*QgD4qK5qX)ta zDWx+eliAO^i=BK-z$g?*fPu+?uEp*94fEvbjt~0J=7D>Sn3< zWJXgFR@?2^v*RV$9D2hMqTDF|B6-&+KyhA}XFT|e(pahZ0ML~00{VIr2Z0dOOu&Xl zcDlr3pOb5?Spvi&5RuM-s$VJyhruBA6oJJWZ_Jm+<>HtW^!uHI;GliU( zhNGbD+gldtvin$aMGN%wa^TG(fMF4##R6a*DW$c_IVaH_f|e_jJ0P{(>>PSNe!gC1 zy?{m{)lMR2ay0PP^WlhDI^HRp1qTN-nI&M$=6FoO2{54mu%P;#z96}K|xzt=Mk@#ZZZEdR5H6^Yv?G%rq(*DKc&=njVITTX>gRZz#F|#p2w$nQ*6yy7E_gMYMFTmO`Lc ztG+5yY3501_W-57{xIVK)XZb5miGB$StW-uri#x&isK31;?LT=QwrY1HHNw)hYeNO zAK=k{0xmuY4Ss<_e?s@b1ws+W3?`Q(_uDBay9w{wFygdkPcs26qNIGgtdsGA|H5;p z@dRKg+>v!8YpE#VHaEU?319=#T#L07r)DdyG2zhP>NQ%}s_o`v7>5SpOi7BB?r#U- z4(vB_iNcW*2*04C2rK&i$-az>CquydVCZsnnJJk-m3My?^AW##ZDoJim#uX&D&RAA zR?E}Si08dExBGd&%=}){k{P;Fh0gvYyuRjcFhm5UxlZjm+j6tr9wMiQp7WP+6@}(G zs{FG}>w(|Arq<~-FY`4Ad*j_9fVmobAe#R2;$7EK+ctRW^XLK!{o$2^<-OH0og&3O zJvsPgDi9eRM>OqzDzkk0R@zRF0{ea&;woiwKPj#s0i9iJbxj!_)#3JCWyIGrXhaCf z6|SeQz(>?%T3t5EJH1~jD~!c6(dFgTPu81}E|RR;zx96m++FUD@z2+5)4M+$Im$ID zQ0|Y{gdqNS;*qyZWSx7NXtfJljHT8DF1L(QCTIHW1cTdS?@2<#tluUrDbWex*%3>Ry?Ww(?+Mu5b5!!wuWYNe#Pjk zq%{%F*kA3V$VtR*J>JSA zwB7*$TL%prw~YmxH*{0!^viOtIcyp>v&CwyW3p2BBV&C>$ij2}6ZeG7xAqd%Iti|w z+UnwQ55V*y$45hBo&OSv(R^$3a<6SmOh=wpHP4;{oJUM;KF{K*0sYmW3ki{8hMI~h z9I@+D3q1?yX|chUxW;rvVaO()Mm6Uh_Y0Zfn(GzQC%h!M%}M6cx?i$rD}bcy%c^AC zi$i2jn5*We91K%3mMoP=_K*n2@RekO{gh>ndP^U08c%yzZ}kos2^kGjs2tAX=MrE` zyAmfS$dON`Gap;;|$5+{Z;6~n>#DOpGa0wD@GjqQpm7!BNPOY~XBg8L%7)65BQ z&&DTT$Q>*`@5^2)RjJF-^b{^^)rCc&F88r%OzYHWa#)Hd872JW$pZH3xN31>%q7D{ z+xJHskgBsN?>}E^wwA?#fA&xsIjpGYEEA6DkvTfPS%L32J>p&@1-vvw3oNSR>ED$Y z7?e*Cz>UPnw`q8`qzpYb8YTRxkOFw2SUGa($@|7ugD54O^grxVL8gp=ORc`HIgCCRoWY%T7+pG~HllMYp#YXd)u)PKqg_a|0Z z!l1wBRC$W`K*z8138n>$`^Nx>hgDOSu`DP5?Oy-jL5J6+>f_OyUEpfwy( zW4##EHaAB4-0RK(2F${thLf+N%ob*vT6jG?fa<3qt()WWu2miG{?yK@#?t9Z4Az;n zg`AxQPJO5Fe0z8tuE?W){Vf}tJLEb^BU&p}(SD3nECAO%iU(hD=1xVtW4#fumf}@IT7P`fcGG(KAU6bK zgU)(bu7fw8y0F!xYNFP>xQ9YuX*x;+Z{>d9pKrp-f@`jhMyX ztXgAJLvawr9X>8V+tjtS-A3Jd%Lk1gp>~r*Z#YKX_DJ@WM84B)0$KzOi5%2}QYB1? z-p!x7c>wwy^qmvW=lDYw_-)*;Mn>$W_FKwi2APlBtj90UH{97~N?Uff6$n-0&L5mR z1Hwq<8YrjYkaRqNGAdNxl`>{uBghVKG;e1A3h*{$_m5tYOqY}U4P+Dqp=@rCxczDh zQ$=AN9o@ZwF!sx_d{v+@MkNdr9fco&!LvnYEJF;(8~mgLp*eVe-{=u%xn0tw(ea4~ zE=}ZLduG@+lPi8oQ;8#!zm>5^>+bzN`o;J~DP8FRsBtsh^xPh5Q?V@Gf$#e0&E(G2 z<~Z8ChBo@)G*kg7CZf!9z1o-GQ_L07cm9OfxU=O)mNFejtvRBDgLND&g{}KL*gS50 ze<)X5Qk`{W;W+@!Gpb|Rj(hfWEvK6Cfjqk^7SOLobMPBlmO>6Z{p~k?Orb|P1^R_EsRUajMy}zWotoyCWpftJ2vpaYz z*VBzJ>oG$=ZUF{mVB*v<0LFgdg28zld2jUPRA_t%9XHCbOs(4JtoL&H;lq^zBhPrh ztoBOp=tYg`_Q!zOQ$Q__R%CKj$k#10K$%Ujz`5LNpK=d{qU}&}JmfQ+ZXlQU@^Hdk z=&&VE!;Q^$*(A+2@ZOXNnN&e6KJ36?eez%8O>>^xP{yYvU z&DJcKK@lE>_f!{r#u#VER%hQle-XimznA?j0u8{U03@kWYv!MN1Y$L11M;MV=O^Mj z_or?&%&n$+;P8d$PV;Y0RctJtvEYiq)N`1W6~OHcx@Oa|yIuQRk!m>=rDiRMfI|su z$Ci83&Vu0e?^=#dT!}OZ?k78*+RnZx0>28RpSZ)x+1qOXJFe+oBh(CkjPSsX(lOf$ zi&p#$6kEi%m6OSn^?NfsW1njd0?r~dZXMfiK6bYg!%6^=n*)v1)1O3AYe+@(VO7bM zZ!qCKo}^?1a&3;_uVl4~jJ`!8@kD%c1?SoWfwMFevSTnlM%)iShNd%4;g{H4(mT(?g#75A>M)wuo5RGD&^9}*bS$AUX| zsW=?=s>VnJ`N_d2Q9$gA&>1>EPJ>NiSj_w|X|{U-z&_axa{q*38RHAm`DQdSUTSwC zk#U*A)v-}Z2%)$wS6y^a zVK^-7Tuj8us={S-n3CN7pj zU#xFwo+K|*fbwT#T;7HpTGryziVfxU065G(+bvv>vO%3$VSY72wVsA_m8{%24$fc9pzP}Xw*zH&^Li*bkY zq>`s=YwcOc8rXJby*!!khB#f`hwkPBsj&#hz)+b$NIYNIUL=;=MnpB|dS|ufOKX>d z+hPK(=ah>L0g)0`5S&gEsz8k@^eAp2hgQ!Cyg{l; z3W@ctk{FaSpjen(js{zp<#wX7jJ}Cr!06n=j%seu#IgQiAcL zZaa^5Gdx~tTiHb~&}_pIPh`=^JE1mkbQ=5SsvZVNOYbj@=`h+Z=C1dFv`sEsP`p_9 ztmJ)h8Q7~>-qo{IRgsaZ?)`%&%kb%A94gsb$+P?I9|V)hS*_85qGzB3*h{nN(z^&ifaI%awj-)QKoUC6jsd!48hK` zpQn#hWyIC{_11b}H^I@wmKw>77X++$J@4XzUCwbmv520XsxMV#$CJ2pldBIlO$Bn> z0M;p&=5n;{MJ8?DelrvcHdi)JOd)H|e)F;?6q|B`T>yuWR31L>ZF=_gQbWVVJ4l0#*-Q*H#mLe20n9% z+`lwD(Onq%52BJME9}@oCx&#lO2BU=SM;sXl#p$496oToSsrHH$#{o6yFQ|uMpgmy z@M8w<*6@a!`38-5pdxt)%6R&8H!*2g(<>2LQhxWdWPAGr7cXWVUU))Y4p8w>gbmd= zCxO76zl=F1XbRQI9WV<0*KE!yKD5yQX2tkZE!ArTT~L$!-v}Xtqws3soUnlg(kYjxTOOI9 zgF`8&u2_Xpxn9bk@af&Lhy}P?Ti|K-xegEzBRENfXe=_!X@EWsVzos8|nR7LxBI z!EG#g&iRyB2vU$phOOb0MT^X#>v14?%(rhgg7?G%3%-Tdt1(WiTAY6y%Vr;wj;-Mx zYsg(st+*^bUrm`tZZdcHvL5omJoL>APYNXH4J~;`nY6C&DkXIn_u@;X?$H;IHU%W} zg8CwPIOjz;F^>^tsL{Q(Z@%@guJ1tKbkWce3Sl@(_V2C~UH8J6m!%9@^zqIjY7B3C zu2SeoU~Pdb>3s?>hJc5S4AvSdIy_XW-!kmiPy~qYQy$E6P-4S+wa5LLA?fL#1qd>lK)GDaB zb>p(KVBGLRBq_hNzM!0>G(zp28gIBlk)`NDq1yEnp`kCMNi0$YHRgH1!QTCUzK1wZ z2yJ|nq8i<_#3%1(8DhT+q4xz-;0Yc%?Q0(J@$+xyDv}Yn0O_lSdMGNT5{=}tf%?ha z1!@qkh<%D-kl4gvf$6bctj&4vMPp66EM+F*c!l;kjEQ=8NFdy%^Zjgo9lU$97DA~8 zSVrO-*yP>lXJhqxsR*)IhLDU!T*iI%A`-!9r!gOdlhCYT)mo^QS?%CDaUss}L@HF! zssOB*`t#%aO-hdjvT$|=4`F9$_OIQnvQ6i7MNjuQUkLPjaA8H1YkF57c+dT_)In^F zZ^xz`rna^Bnm0tTjh^mDje8w5MR~1oAveXseY_PphoF3oZc+oh;YI>K*3DL$zh_sd znfs<7yP+%zI@%WCP}1}qUFH-t;it1AdpR{5TIs+s9$92X<*$T6EjO8~w<>9>J)Zs-u-AOV6{urk$uQ^=Kw61l`G(R2UM*RIqWL#WL_I5RoXq zX)T*u#cxdj_rs^da;NXu-4*3M#xVmtSFkLoO(~3)9rma2hPVymAO%M=Wvar}!GdL5%t4cI#(_2(^(+y z)*Dbm#q_z>3owu5K^d5;bNXo&vYA31b_N${*DS16$~J@}0~xY6T@ca<3@06lyAvN#7e2^^vh@_c3`xSSqLDJ6@@ zsuaOG*aZ*&R7u4#PTU^M7GJEagz;T>f{e%JM%rEkTPWf;FIZfqQUnD71 z!!^zZWMGR+-7qRzco7`V@y6z!T9?2@!8481HC%ZCM#3=VD~k?qwm?XpNR^;a?bF(O z87CAe*^n9r4U_)j^>&`P#2|&lB#dQKB_a78H;`X^u~j zbeHd^)fK)Fqxd-aO#9A(y7?4>)9tjqZ}dx9^<~{wI$sBBz{;Lke&6w{rQ$q8Sr${@ z4dC8O(K0vv!}_5caRY|Bn?&P`TzZ@a!d(VDld|61>!T6yw&r37?gY8D*P-Ar7*)dK zc{5DzSvzGITc_U>bR~QJfdLLQPp{Tky|zIs;Z|bme9l#4ot zlQ@ZhZq#^+J2?{%JCVj()X~(othkITa7~$6dG2iO`QdkNa)A)^dA|rZ_X}XU8%OI> zz%1FzlBbp9lx1COg{J!cR$o?{^pJ4wkT4i<>^@S|{C`x9(0Jzqt|(Qi2xLxjBZKhN_7o*!!s2co6(s`1;_0 z;4Xz|lpql(KK%Lq01J%CHt7&Yr#e41I(lj*A}^qg*>$Jv!ZjzAq>1==?)A>Q`U?qA zRu+2wfy69MKzA!&2s&SD8 z`#7S_m<2x1J5Neh>%;6lfcGCK!G4B*l700n|BASv|np5AOefPLF(y@d} zyD>^8+iWriM5jC^RxRwCm8HR{d$pobP@1w!4ak{pYF4D2RPLlFrHzKN!XNasZ{l!=yc1MNz zvt=}&T+TA5U+XgZ=?lL8KV3J#l%$py?Y`D(M9Y(El7^=04V=!BtQO^Q!bek$_L$1Z z`t%D^#nXL;hAFoOYjX>qg;#!E$JYJmU%!SNMb=iHJyUlG?eP1PIST-j7d9u2a^NK1 zIJ%bqi@moDs;gbQH3K0DPH-nka0?#X-Q6L0AV_eBkU&CkcXxO9puyceIKkcNXXX9& z-tV{1?$iCFtIzpys#Z~}7PjV^b3Ss9abJTt#n*Qn;^0Yc{Gn3fV4J{Pz#)q_tDI6f z(&0tW9iP-8VnoCi&*5FNKxsPCMiK!fpI=G*Zg(Qy9v!74kRfn%5p=gp`Shso^}o4j zE*~2nKJ;~AN__**VRiG(t`x&W%j+QNTI``{Xr;0LVkkv_VLVrsL+T6C9q2kE*854l z@pG#E{h59E3k25wSdc<(N6Hg1*3I2p-ne8dm`Q4YqFD!3 zmO0*LNpUr8kAe1!;Hpr1p}h zdKB%h_P{%)BI#R4NWZA$e{=%<;3TFlvSx+!k0s9V)v{RZGZ#HcYbZ{7Fq@v`&;-LC z3HEG$Qh4|U9M%&OMH(CAs*^JzO1M6yiv4LZQ&f_KC7R==c41QSv#YEh5ZtL!t_{wO z4-jT13(Oa<^qylpew;NOevsJfWm7J4V3S=kHL$x0%0D4Y^Q~N>c&--XHBaVOz%oBq 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%0ANnHGih>-;nYL$mE9YS z#U7<7kwD~p&6lu7*RKrA`DY|m)3GV@y&3vnxI%V}D-!Bmh7fjM+gv1M&~(eF1*3uk zznu_Dy7^SSUdjmO59Orl5~w_i=wBs0vVsrp7-fqA>!cj=Eoz3V&~;I@9$Z8*?|A#n zl#Im{@M2&g=ahXX%?BpJurS;R+II7mh=gME*!IF$c!mDZNZa6sY#-WiVm!5Xc$8|f z+A&*@i7B+<(t^W#!gv2C9&Jn{2%HDv8=}4*b~la5PW{6A<%7Db)xfke5;Z@uLM9vM zs7ExRkUXjo4FU8a6Q8ms@h83*aT+p!p5x_3j>i5ZjtP{gGGYKwjx%@p%49POXOlFi zKslsp{N&WM*rwFsWxi`MJ*cmlOvy?6D&lp4#oi2zf;BmuW*v;MAqyUSb{fd`2Y@63 z(EQI~h;p)h^821MMdrcubc?1m*&aMqLO3MVv+=4n0Bv9lkGDt9EG~OlkEh7?ADn~C z9S1{VxLqgqZz>KUjtAg7x*qx~|K~FR17%0~h>9LgaT#1KPv&g&U}t&-=2yKxq4;YYR{7VMF_>n}v3dqE-WlrKNa0w{@$O%A{5(fJNTB=Q7 z4Zj`>Fb`n@YtvyM-y?myNe|9Ng2ZEe-n|e+Mk=i8K8kB@)-G{CNlmBs3;_t=<&k^7 z2QBh(YJDic_C?Q2>3wzaB8_FXb;l_fn6qm7%Q8(kh=z>XjEz2C$fZt&fuGc2!9M!}!N$VX{Erg63fmeT9($&Q9tTj~Ku> z{i)aR*$4RE-S(&$(SK}y;D>_+P3UmN8?~87t>NkU-HZC?_fRGauUzxS5mNO6mT4SP zV$c3S{eEAvA_RjmcoApt?+&g%j*(Id;QHc1F#dU(!e14E}&BnnaNrgpX{yv6`Kw-S-0odA})TINM!o`JKGz>M>^4VXik-i8(Lp&eZ6Jy?& z2+wC+RrFf$E8dU|zfPr1SH}bRxWvEtIE>F{;cm}gqse@2c|!_R-f$3uCEl57;3U!| z(M(DMbXn({7bY*ceIy22kp4j9zPqNIvORyc znCG0lP|7v@uEyho<}jQPst-?lQsGrd$}*4idv-;CHOfB`Yi@iOWkvE~&BmYvmjtSF zRSJeZ1A>9pd;0A_;JH$tyv;$`mg=+lo(Nysl%oRxJ*{tK3d23&YPJ~21}5FWOz(DT z>b%B`y`m`pcVo2T`*8={A!3HIdSKs!+Q?}lQ`VlP?p!D!0{(bpF-niV_p2=VzUxaT z?30(a>?(5A6kOP9v;BNSFQD{J9sE5=kvNy0_+DYsnCMYK)TbWUw#9r$N=)O+jZ0xE zV7A49zM7@dQ>(HV$>fj*0GlGOc79H{&R3W^tgvI^(>!U{?@Gh&zq8*z$`762>Iun z25wOIkf=xbOBkTo_QxC$CYwaKZ`n`M$q=|AJE#Ehm7MDE z@;R(N5`?kX>!xB2zf)1+&~5Y%CYUOb)q{|@W8C=~@LddR(rf3i;4;VQpZEOsujFCy ziy5(-_1dINWYA0r!;MM|k9NbKU~G<3T=91+5=qVBgLK|ytlglKC@xsw(t(^67Vgek zgHM?I_uV<^mCnk(+-muHpkHrYY{{r>G$JRk2PYqSFXIb??ph^lOOt30GBgwC+w9g0 z@Wk)Veh$6mEJ+w0w*PCs8f1Qby!7A*{dt~tX$vjzI-4utd;;q z(trAC83X9c51HI~Imy0&1JUO`$REeQ9mj=)K!FMo7)iI?DO$pFOzx*{^NMYg`XLgJO=(}+>84?;x0hZH+DbRbCs^iceQlWqDR6!l#9#dB(2V0A!+P)t2|K0Q4)@08 zl)Bb@Du%CZmVU+86a34CflePX&v6p(QXX_=zoy3bVV9CIjdOPUG-5l|205Dd>*nSQ zpo|=-WD|6@m(%V_C2MoA%i(fO1OIlq)->PW0G`IQn67%GUcjx}=nSIcFHf7Gc5CeT z>&but9@>=v%iv{?Z&YY3^L(dZUfotH{d9Hbcoe7PEHKYL-bPW#h(jV6^YAH3;q$yQ zJ;aBq&I zFMcY)m6_E^fDq3ee)nRU_qYfSJ6`CEY*AD(aWB0=;VSg={rzBgjtC1kfUU$!ASmzi;WmT2ERBDSRW{q&)^~FcZSQt6 z<&|;?G~IUD`9Xb+e7b*2Kj)Pk-NSpR_^f=Pp>y?a-%EKtB+@mwPVR@v^`r7jFn{#n ze1Q$Iwjv(-x$D-~$M+L5BUN~hCYJ}Kkfs-9DDj%Qb25w3)NdUc>Zp=$XkMb)4fBC5 z9pg<$@?Dyb+n_Xh`!7AVyFcmsiys2N+%z z4WpWAA#X<9?t&jm3UjNgySG{!anhZYpUE+<-WzlQcSf=#VL3fI>;8&Pi>RmwScsHe zzC%GbB4t8Kb!e&HOpTV-Ix^K(mNNb%%0zd!xGwv)(b4qSsrT69$Z?~cRw#`ff1%zc4et?yZ5@3f-q1|j z_+%cVGBr2ntF!U*rFYEB=1VszKe8=#=^XoH_e?c_BZsEHx~7a#SM%TZg47xOu`-et=t3cp5~^qXF^d3{!;HF10!6! zrY9+zG8aRam~;!_D^`njpv(haJ6W&(v2pJfTwxXC1U{dx+_!JvexbGwL|#|Etv`69 zvUFsBweNNFBNc7T>mz76Y)dS?z{za9?s1J<52nRTLl8SFNE3LR36tqQgX;0Kl~g<4 zAvK+kWa-(=2)7@!K7ADRN9?YXIreZ2p+~oG1;p!B<4G{TNPyaEJ;_kO+={gx5!T0E-FrU;S6oYdM19( z^cKJk1ZjNmE`PbVe)BS^Y(Z?2K3VMyzDi1fC*ORQl_0u+3(X2QK33%U>j^uD6jG&} zO4EGXIz2&1>*&N$e-P4}u~*AATq;jHcz4eD)Rlc>{6ug1$IVdG;kHfve%Bd>^bbDH zKE(7ulJ74xBSc6NoT$iZlM^xum~ z!+ba`fSM-GLDyg7#Q&;=C?gNc>$Q9`YR3C;2yL%18h&-EpKV1)uebYhG6^pz5M{kk z;?#0vs1;<^aT1u&)01wY?vsQ@a+53~DiS~6#X&LIsjTeEc8ukb8ivd#`AFmss{>Sh!-S)58_*Jc z9@pLHp{ZXY8q%8yRQtv%)6YjD`Oz<^ESrwTZTSZSiq;(RuYP))@fI)f6Pul_W|?*6 ziTCLzHIN*xq*Jmj!em3CL4|PnGgxe^+dUoxyjHPOc#g&|AiK(6Jf*Y*JR-cUFMQ9X z2A0?w8?^@3M<1Q+&O;VG^Klv8zK5+D%~l`f>JiuW%OCG`h-%?YP1Dg`-Z$83U5Z## z^Y0<1{*|o&7FqNUV{58}I=)ob7s)4*7tFsbfpR#EgN2 z8V)v#RzVW|cKm7!S&lsdldea~wo6{^yg)4`iDjxE>F)r@cMTI`ywU%1RKu<%O*HC$ z;D6-W9n_X*wK-Q$48S7Dhm&Tog8zs~c1a{#dU|H-F?pSd=e<{XC5 zes%3b$V1Cx8tZtOb7=e%Dx19$o6)XfyA_WI7E8OoZyP*CAYtI8J7TLvW8zG#;vM$Nzh4;z+Q9r{A%%wqP-xU=bd>NM|NFh^Tx3g~ewGyz zA#)I9fcTk_hcv^@XVyRjz_X|j0}=l;_cVz~wg*m^m4*&gs%ugWh?Y(e{ z!1_l&o9{Rf#;(<nou7kS~~O5P#;7^1Z1J0VDzA%pflj# zJl_dNf2Rlq^-2TG&o3>?&rc|AZD9a5)rW%m9AOsTA`Wf!sf%DRoKFmp(YhKA|2C-B zTUB8Pjwzm0dBiex8Y_7_t|7?SB(Ip)$QZuu(Z{W5QdW&08D(@~?BhEb>n5#I_F_#3 zM{Z8e#zxNX)8zCyH&7pK`$eQky${wRSKNIuiOz|F{YjFjQ^f{lVV39Et2i8Lmk`g? z;DD=z#i4bn1E-s!7l7+a)@6ni$IfU`9wR?J1Lg1Je95XcpSC}&X?mpsmNtvnU3%EI ze_Ih(giE4op}}o>Mw2&_hi)ahR0RahCEj1We&YVIli)Z;JBM5z@9l3Dtb>iUxAkON z6amVB@dbTS_6dZhhWC$Z|G`U?>Vb$w?2j4*kr4>Czi;4}rc(GGKslml*R;TGS^fH) zr*;X-cBJV;@)BKdxEuDxgv(Z6{Ej8zt4f~P%YDL?<=1=q^KPXxb`SnXJkZ;>fb(_ndJh%!imUDv{lR$I?PN1xWg z%<>Nl6sH6GbJa{AqD|;vW@>K3?!X23s|EXW{m*S6fbg#-5ECwdGDw<`-@;m-kcF0x zmJY!Ej*yU$(^}7fT~&&I|Eq+-Oi2uf^ z{4Y*=dWQeP`fsGavntr=Tk~6(J&y_D{@2v}bKHL?{*#dt_($}AQ^h~@{MX%QMRUL7 z1peowalbQ(wBdn*`U)i~z$@?Y>L3NyxVLv&yY)aQ?jlV~_L}=J9xNY3WeosEw2)?xWlBS)E!^O2R|Qz=6f`K!@X? z5FIkqs~1ZgivNCjbT~5ncc_=jcK{Uc8%*ezNKo*#@lY^Wn6HJc38A20D!gx|U+nb% zNKWKsESOiA&?#?y>0XlMkAN&N<%VJw6~3Q`OseTj%AjGsLcLT7=iqL`0G3MsPcQ4`0PQ=WZW_Xr=Zk`Utwi}wh-PMlLjST}X2_v z!-yD)muzkXp!2d`eo8@k2D{QKBfKowsL%=zO;4j6Xu_3w6iGZFwZ)%B$bUu@y7b07 zIPFVTCdo-b%*eCL=;y(>XxPUEdSk`U14b3lgjh$p05N0#YV5!k-r_VxH)__iY~6oxg8 z9J?ySXplYw*pK2^k3xD%SP<`%r{|R6AVc!H7?BXWR*1vXrCC7hV^C-&Z}Jf8Ooctq z1p%E1>~JJ0!errDdPPH5prul&Mkd21Wq#v5oAI?f?Nb>vfZ-K1A+ia)y4zPKyEt3B z#>Id>eKN`zj~=eni|Rb}TN759Zdlb|kEVbz($Kyc6ij$;Qo`xGKskXzNz_Hhf$1+= z+f_Cw3aj;okU4vCe<6#qEM$i0yg}29%xQlXD>w5;^I2cEXT6(1TQ7$$NPbM~&!q14 zpNsvuL@SPYgch>RK#@11Rcbp1Iz92 z#4CggCw7f;SSKRi4;kimkc@68$+;}yKerVX#d`xi%Kt1lmaZbzHsR?SpYa_yl~SlyFYy#5eLgJK`>XVW8I`K=#Lj zu~P>av#9h3;V5zS=@XxdOIF_dEBfKIgnWM6vhtw_{o-cPeiC)tvsxgA(WF08aT!}6 zlHe2k_wQ#gWJg4MileBHlO`E;&NTg_%r$p#8JMNiS49r%Jsdw~@W$oU+IZjvxIBz7 z^|oC2q8ZX-Ps-g<55JTuyb;`}#SxIVXsj;AEDT$(9pSY0Y1ui63l7x}K(ywa4r)0% zWb4*J^c(ChFsc9u@F|1Bpyr2qn%#`<^=>KfMw|jy3}Afj6l^k^FdDg3&SJyW*x`Ilo^qLve1(Cn@oZzloZHp{oAGjL zn!G8G-7cT_(?eXf`Jxcm)ivL#it>E1=CEgQFoagURz%BvT+?TNxfF;_p)N95s$3VC z^T-tvinlGLZ0b1coU^E8mM^v$Sbi-O)vQ4#k;sR`Vh(V3caPkX*6)wb3FUDSPEAdn zxD6`ZnVT$(rcqqxKU1niNLNyV{i(GL92#f@C^t>D|c5)R^J^nxpoh@Wz3bi_%O)tw#o3I z<(`2yeM4o$XRa8j5X9sBu2`xT>mZi4`i8?!OR8iLX+eU?*IkE$Lny?r7z5{V85TOF z&WRW(t7F4$D3!oDcc1CB(5U@gaXYzhx{|i1C+-;W3Dt~iP;=yd71YreI2#~jc@1Me z*W9(=D2AAkzF+B3erkJbPc=w&7ga}ni#yiV?;b=!eQ$Yj1hF@Nr1L9Xl}qM!wk~B+ zptplFwjEz|c_OhS-;)Owo|(V>>Al~S+B8*-=IDItIyZ=Fzt!v#eD8U!L0XJxI-o@) zsSB7++w4?G6kc@fx=`ch7Jb^%%~${jBwFHKZ1=@p)4@TP#r%S4jt%h~Ky|Zq_@u*A zBV!8`Kd5_y%C&0Pj;SBOaO$jK-*1BUVbxmPdvQ~%!cP(#U^q57CAGhNZbPf}P-=bF z86~i3V|_C{_gMDr@D4=SOoh~<=>`gqVA?F?qol1p2ihJQsJ)x$cHzfu=+$BqGC~*P z3WIyClC`=_b6JknhTf6u;x`^S%2c^7tC+|tet+k_#=XUGDt?A-cIT-pph0DH#&~HAz9sYhq?_)?mhvm#WKR7p zPtYe~6I5r*<&U7+-a18eX@Xaa>*er0w*7MIN)t5S3;9nuIxhMTsbR#H#X?KYD(wBa z)3O6-w;c&i?x#S_IsM)IWj2kVy^y0E)yr(S`%%m2Y;#IrJP*xObCk5KJ{(x zS+rjLAa!!2eRO>%q|0z9!2ae1w%wuE(j#s&ZS zl{3us$su+W{?4;T#A{G@FWCAkkuX2@w*ZV)zawyB7;WsQ%y`cbp#$vC|hl_L&2`Np*3J)b_lUjDl9007z%0LV|+N-s5u|mPkR$@)sIJa>aVih$e zuj+*=0Ksb|R9kujEkoM-H)s#CK~459%&kH}owqF#yJHiTqPnQOf~FUVRTD?^$9Z4V zGsKE!nsv#WoI34`L(CSd7pdKfG^&zAap#0vE)RIK#bSP_QTO;iFxteb1n(|g2+y_H zle<1l#u?9dfs%HY_51UekDKz{pPG$R?gvxZQmQRxvtsY=mzJr!?itPA9d3{b*NdEX zuV_Oq_H57GZU_9e`HgOuqbR)c2@)yfaz`)rSw<$r#2yVVLZfUNBh&DEx+ zNsy^k*rjmqTkZ|F1<`gv_GUbWQn@9^b0lR~1({SksrRRgO_tp6E>n!%=0oweY?+Pa zGZ&q&@?HFE213n}c7A(sMf13GqZ@1%C~W6j{YtJ6b=U7yx^%HErxQZsm?C1m^*sm&K_&nyC zp|9pX05a?e8F{zhB&-g$+A+n6F16WdDMS_UW8F_|PE8gwc zud=%KI?Y8Dayz9c9$}uG8*5I;rd1*y-bZdodFRchp$u-2d{d$q z{b!-79S#PG@c?W=Ev=MkNpaK@2$TA(i_Mj%=2}2p>gWE2X2!>WO61cEKJz249M|zO z?o%~|!=QPs5apfKW#q>I!YHDEsr8zJgkSt>u@M=v4l1%Hm#i|w%nOYa2!(Yn>*ia5 z`CR>}GzcH?nZ6?)ErVHzZKczMEcGKU`&ucdP~`3JR|(XDfzbf zQYB;*dhgd@Q0O&56}zNHM*`=jMZx@!vdL22?KF8#KSc0Nl+Q;toJ1>whRQXl((NmL&M`!Pw|x`LRGSzk4Q>!d|i z9}F<&hrrq${La!e#kA}v#6ie;7SpYU z#!2|{AS8_`jLv@XBTTGKQw)Si3RGp-px>SgejLiw#+qNxpjfxGe2?*371AqxIn5aG z+`ZA-5D8bHp_ij4Q6so@H*RQ`0 z{yA!tXrmK3a}O#*!;x>czWx#+Y_=j|-^$JpAI+kh8*Qx>N{VCoS>GE6_aM$UG;ynX zU1m^{16O^vs|VSo|J0yj|cGiF}X&%$#j$(tj>A%W?3XacE>4(8?QbGV)SGhP zJ}@@nelp@_an%)}bH~t+GEl0&*f|N}Hc5R0V}z;fdX#23Fk@9|b!PDH?OPd835oP; zb8IrQRBk*r0_V&4)FWe>$3J1Dl?Rd)3re`nouHHcRX4Bja&KFQ8!V6oeo?9TzV5CC z|J0^7NZk>UbA(@63Mp|d4pU?ud1iLp2$aytrQUq$t`eywe+51}UDfZEp~1iTu2b|{ zxjQubD&{NEp;|Dz%VHEICq^zvAtIQ9I$Z!>V$fC&Oi4626%rd+%CT6EwHKUTdQmk5 zvPe7%I`5@kUAL?!_S)iIEn`>gDVGk}0qxH|u6Zj-q*>M9UX=8b zgrW^I=c8M-f% z%St~bo6QfHx159cR9i8e#Lz>()7?kx59dd3Kj46oSQ}JY+%osV zFAMDschBFtpPu#S2}#wvwM#c_xmv_GiZJN)7zK|Rb32ynk${78hlx_|AT8*#`J~fU@ht6v?xKlWbq_6oVdm~y%kjkoV1FoC)B6}YQ1o@ymY61=MVaXRN3 z?iKN?n|LzKX+VzY*0EHViFjL;MqblIZ&zOxTWA9+3 zwP9=qZ(+*5uv*wk6G(QHOr;`?lGLNMVSQm(n)GTRcssG0mK*b2C&O2)m4YkCugBb?_$$VsXe~c0F*_eA! zd{X5q!|ZCi-(<4G*v4?Fnbyy5D2sYTLbv5utZo_j(eD!1rj>&68DsV2$xceJ=!||g zCkj}WRhdki$8%XGGMn)gtFn;uc>T)oi{myCAfbQE8pbR0gsohUx@oXKmMzN=%!9gm z0Cck(9=YJx1!%;~WT_~#JO(__JNPHQTlRiiRr4AvTde4dGoI*p$yjz^Axiv&*uBSJ zI}gc~cX62v^<%h?;nEhAqiy_iuf(GQ7>bPx3*OuU)4qhf|RVX|cH>>lN^`*g$8$~e;cxmwLV;y`)tGE;aWM}k! zuGGZIZC?pl(5}n9V>uqY8l&MZm+&(0G%?DQYEm$12JJIBG`K(#%RuPZnsa5l1=szb zfWG?g^0)U+YMcfnNijCRgV-C``jI`WS$^O!Me*qOBPLk z^O}aP$@Y*IU6{3e>YXN7x`lRfZA++L`5TU=mSo2g!FbNFbP$!}&Q5Zj^%&w2l(K|x zi)0iTGqc59^wvO9>6*obsL7;#Ft?8E)<8lYKGHt5V!ga5a|{pGg%NTP2HfS5EWe^S zBmQizL%y{^7}i^Iem=v&Z*rYvkZ0|^YHy>ht&`+8l|tRZYX zO?Q`>b;(k$m1KqASE)a)5;bNMFC9|<@>dFn=do9gk8ts4HY<3`%Al3jr04q{%K*dU zTsO|l2LU}JW?E@{&UQavb`l$Me8gq*Wft)-AId)A7qGt$>HQ-XsIS=!j~Pi(<%yrv z4LqL}V}&DW^pLkp3=-+isU{;v>l-#&Jn)V>R4BKu8(hW{IKb+@lh`_jJ01H>wuIpN zp|ejZyJ#I934T`%@eTAPe6aaf$O^-iO@}Q#m<&iT9ZWW@#8XTukV1((sAt9J9nlq4 zwC@gXtm{qQ)gP&Kmmhf2P7;@tC*A`8+)7Q-ADLUrLx`QxSQM+i0|&(Gtrp0+_aZSxUwBGt<^PE|YKN`@wbsj4Za3RN5)N zZurL^qaK1-Cy5cKppH+D35V)29E~-cnv)UYXjvA0YJ@#Oo4>SJE*mdU^fLb{E zBCC7q)%`)~v|W0VLz*e-IdNwd9SZ(u#V1P3=_LE|h2Kih9K7GQ zpj69YT5NGoLoM%FUp+E^zh|l0=IrEDF5SlbAd;wF;Gt9^4Y05fON=(bi=bl@TFpXG zi13GQ_ybP=;*k2v-s|4FnMq)B+x5=)1SOH&6P_Wr;p}HU?iOvF4;W4Gz34AIGlE^M zp(%4~$F$6_txigP6T;!#YDbysMYw*#A823fqISrp2Lqp9*6zFW!E$wW!xi6%QZDAE zj)PY-bRLIO76kU-r_oj7QGn=JA)==V7C$iVx=90aSSzwf0Ajz)if1F5oI6m*PLgrc z77Vd&@Iy^;Lv_0`ko~z}GVU~E?Ij&ms?on@axDJkxR^uVr%+xdF)>D_jj9e#3F(B} zW?YMNsHmaYGv4?Z;;VnzS_|Av8qm~EVIYdQSJ&n~r~AUp$b#&D$@M3#H4G=`0tLVCdt*bxL{&jr^aI$xa8u;@w^_Q|0=rDhUtBEY zw^Rt|`TMS_Hv^oMg8l*yJKlT9s{72{b6t&BO5>=Ac6_>tk59T|!5u{Gv7l=17?2@S z_zR!)$RqrnW>o$W9WL<8e`4@DtgpZYC|b=zb9cB{4Hcma9^c1d^fshjL?GCh(Ep5~ zLU|5wxH?%`z6fBKML^Za`uy>EUMjVb&#=AHn2_p=yoA4=vF{az{~^l)^BKEd*I5zy z2Y~qBaQ$aa?EmHbUkyS1v7!H4EW!WS)M=QXfA>Dq5VF2&^Um#}Z*~#+e|Q3xsG#w! z)@8AQNPWpOL7eNI70w4%niaE)I?5C}1F1My6WCV{C%rW0xb2DqFK2*2!SBFmHadZb z(t(pY0ZhFIfeez&D(p`?`GFn%gCBH)B{AjxhwKjiued4#{6vBLh6F~5fo62MFbOzP zUZR}3-(G&!p`eFQEVsABYCJs;-`I(TKgY{PBzkFiieO&ME_u}eBOq=yfmABz8N8@m zhWc`T%U43#Kj|~?aO|L8?8T$!c@aT#w3|VDnI9ksBd(23zT zKLenPda+T^ti@&hjoD1a@}{FV;kxyP2=YsIM9BVj<3ijJy-6mTK9Jt&N1Mw1xk?;} zsHgTlGwO>PvV`@B?u{JXW-e4ECCwO!_3|4`rN8YW+w7N)J)eROZKh$*eNHNiqFsA2 zsmzki!w|?v0UpcJ7DzzLF_3Wb6$tJf&>6^F!MvsXe;*nBm2gIIs+&Y0eIy(_!)?N| z+xwsHz`rUhDFDKZ0kp^2itY4LoeoB!VFVbg6quYBm4E#46?5fYB zLzk$?7al7(wlgg|=gv7IjX?iyY_nOv{93o7cOD_k= z89nvN(TWaF1{BRVgl&~9ekB6pru9ETd!0>}6rMp=Cctq3mxo*1+5`1OERyH!qW_wi zi3qRWV%u*VZT6(5bU}{! zf~GAph`U2&j*3+Bcsoz++Sw~)y+2}^a7GwHQ$_&8+BFV*qHNuVwel{((si6S*`RgH zr-Pv#MY%THz!ASqv8aZmhyJIQU*G0iz4kbJ>Ct-=_{n5+LTdv)vtJ+Y zezd%VhK1wFJ>MOd+xNZ5b4iDmiKGSmK^FhLc;t~trz|UIHaYO#4JVUo1Uuqpd@w5( z(mEB*;MC74(v(tp&W)jHAzrdQ8JWIZ7RikC^s3ctam%iDaCDB6TI*0umwnE)iJh-8 z5^H#{k-3N@EvgoV5P7E~;c|GmU|BnO1~*xnpRCEHg)WbJ2}?aj=>-2|x4kK6e^gbV zlnYhF;59f5U98j_RNXr{RFY>?LGh_F?=1hwDyd!|T_i0)-(B$gawxk3>mEp#Hw>+R zUu!O(Uu(CN%vH_mQ_+3sXbEqN`^Eccsj1NWla#$ZyUh{q1s1cf@54gKso~&#j!_xj z-;G~gY=yR^dxBCXIM862FF?iRIc&g%HtgV?oz?g_UtdK5UK4-}cj^Rh5O={~;qk3w zPwqysGhYZ6g2|SdNLu2n$8OF#AsFhhZm2*DW0i*b{;{Btw-1<~NKPa-%FiJ8ZLp+W zA8EtW-ncx`bOzxFGq0*OyKx<|uOac0v1oSmp#9C2UUbBlczeCrs~9{w>i>B?VI=6t zuQ6--Rt!^e{X)lC&dHE~o3!*=rf@O2(K6!ljvy1d&PK-LK;_Utd+rpS$#jmoFO`Bg z`+0*%2GkHDeoO#~Mv~;nRBVle2gp&_knxBmFue^)sqq(jU<`UpWR9!0T4uCb@6J5H z8XKSD7tTX+?&fqn^~UFMli0t)`+;+HEJH6jZM5pMf3mHdczOKJSh@~+(fK^S`H15? zbcuSlNzJizS_|38a?s=E7XoP%^EF1tUF*I6-NBXLxpkt_CyjM=;NT=Sirtot(mDk2 zbu<{VbD-kX3-TgK3q5$_O!_{aT>~$vqwcChR4k3GsxBbnfZX*kc-=suJ?D`>>H4~4 zxn&sGt3sjKSj(h+BAZyIS7&U1+Vc=vG+QNng2Uy^eaP+L&sQfJ>;8*Pwag4IhB7`( zQoT`RQ8+k#`hF~hDk?3oVLQ!T1~=5C^HPJ!|1K`VC3(H}-BzDus`(M+K5uI)lhsKJ zlW~`6V&gY@jYg}ewV%0zz|5zN?E|vdu%wjPxgM1>ql4rdN{wUhx0427>@%|#o}JS{ zHTlS-xZX0++mAp*GcL>cHxluD6^ca}Uk%c@bl;qct$=aNYPVf(rVb%#!wTt*jz%jR zU?#}v@}ASlsia84te2SSaR8d)d%ZWsE+UDLn*`wChX z@Jsv%j*&C!aMcgq!eYCc%Na{-)}^r>CR8J|-MIto_q65{#L*bIMGrOe<%xwE&s|O?ZI4=q{ zA9g5$L^mY{tE&%}`0?BbM8@He2$w(hf(a0qnuP8}@$plm$qnu5+kmHMam7D42KKgr z+;ZKC!LWsXNCe@zxw-6*-uU>@3@WJgYlqoi$Sy=BP{}kG9L}#*!r7be!tnF&IbAO$ zXrz)WzOUJ&QSFZ9WRDvTjZA4YO!m74B~FU4JK=Tcj9hX#D{z27y*rjATX=p>KB$tn*4Op0sBR#meYiyf2~E;@m_6*K zb8Ypur@er<>5o#-T;)e`I$GEN0!)0TU#DC1)KG)^bi4awKzXi|aF}Q1nROa0UzwUqvpY5?U&=No_50=x9L+KAAxFIVib7O< zfrC9xqdc~yFD^q!<$gi;T^A1_xK>oj#5lcDHHJkDK=m44nyo(1=b$5|#NVB}=d@!T z^>8-G9ti?ox}sx=a-~S^LzO=~!*4$eidP5-462efJiZarsplk{e^Ey40nNd)o)4DJvkir?jxsDY zXOc3?q99tVl0u`B&enWV-3Qo;56D!}i{RFKRI0&HFxXm6fPc5nwhS=9W3vfmzakJw zx;i9B(UYv81Ly?9gV2;GM24V;+YP1iHA){L`UM9Eup9@t%S6GudE(J*NA(>rcm zW{=1nAGg+@WHS5ECv%7n7ON6{8g{AUZA~5m*lJIlVq+M};q{fT&0KMNNHdP5%q<=iPxDI>ug77^FKQ%Rk`NI@?&))OaaVokb) z0qF71g&4*hPK+0;R87!9JSfN5r z^gFVL^k~}XXBb?`e6hO0gwj0LCb{OlHgA?&_NhFbGs|tWAXY5^jc3epzEHoe~)}{z&q^TK?^OAq|Dw*KehM2@Lu392o zAZ+q<&eVxwmh8=0lwZ0^%DaP=(x)s6v0$+56~FQL56Mp`qpjx3AO8LhApFKp*ae%w zu23kO@=m{~Jo`#cyK3xbI7x(URHl|=G~w>N-g>CU9yzZ#I+a)o4_F%m<$Z&2Z;=w8 zcnj`=LLdXu<&2dcW~ru9k|Z3AbXe;vZBLDQH?Cm9C~gJH%@ewWyX1tsW9y5k9MQGK z(Hw1!`W{d|WWRM#!SwL7Dyg~<(3CtuhZ^fZ)Z3%HW=6F3ohc4QymhcWICeo8M{K^9 zw)|{uQ^>1)7`L)j71syG8Lt8&^4T?P^B}ObQDT?`G;Nr zHMEB#@vz8Q6jFaQ*;9ofn7|pWc;=@HGr#Ci%FkHJcqQ1F)kZkT{ZwNTelF$}*802t zE!n5?BK*cKGQnyg~fc+MP7 zVul@YI{I|;g;j8$#gv2wn@v81T@N_OL3T{)n#8n@ipJX>(Mz|#1}06F8pD<1`~_*S z-40CzZRyg8^l<}L{J*lq9DCJLmp@|;o*Wi6p;tZ%!sAXetRO*ullgL3=Wi+q78Y|z z^M7CLp2B=27k_K15HDe!)s9aNa_WRL4M%W;d~FZ2%H0z4PO7ksu7{f;k+4$jlP#e z7LvzxB?_<$xXX)p=+qSo?WZw!siNM`%2WzCyFGNKEP8ZvixZAxP;I=%j^jY8M05$6 z2QZ|O+Zdp`Jj9w+n(iY`vW5n4kvznC8}>#S;WG(KrZL0K+e_?k%rv$!Rip@qjd59Z zP#Lo2lE#uYxzYm*hO)Dm!|sSxI{<0Hq4G8ASd&T-{$zmfoGS*pp%MZy8p2@-tfdR} za)XAeqv>rGrU~~GTU86dFmvZnJf&UH+%7=Lj4Johh${66M5D)c1%Eh%<%sPogK3qr zo!nW~q>DLZe%C#E&wV;TuY;=WcdaOaFk2l@PNk&N#18l$hYkMArWiT)>kMndPi>tG zY%E$wYgygdBXEh#sGtaLL@&T{1wmqfS#riXBDt*p9EsfDaecKaVDrOPOW?SgMa z$S!p#dhxdVL^$x?e8|#2k} zH#r0QWXG({F4I*Z8qi#Q603|pm>alVqmlMXKG<)o8M29;!uE_-MaomFiXiDQhZNXQ zXc9Gq;SxRRk{hww=cq^C9oPNZ26bRyy%J@oLmYM^VDt#Yr2N`S)Ee00Z6;r3?a&}? zgMq%u9ud(Nn#$eIU)#McQ_O^tO?t(zJACeX83w+Da-u=&HvyvpczsCi+_WRXT^_D)0;U+hOJB zoaNFSI&ppMN%Uc_ya^^7()h}V`B0bt?!A>#lE`v`73 zcP-r73XRD2T4Wha94Rp4FzO##l>hGY2}Lh(Ye-a~FE)MAFYL4S1~JCF^YQdFf*ANG ztc3l2JxWiX_}>FvsRVb*wGP+kZ_#^Wyi#F(KJ#|5&{n;E>g|zzG#t)fP0;^j##Rkf zW0Hdop*aiNo5%>F?(oM9jXz&K)#%Szy+qMFRxe1ok>Zh5VbRjc3AttAT3+ON3Vvhb z*L;gSiYhUrHa(^7*T^E6PIhy)m4oZ%wsi&o#i&l+g=fj>>2K}N*J9?|jMt1`G5HMN z_#Sdh2w|}|I2P}1A*K{xja=@IpKv7BJ75*h{gg4oNY%1I%T(1DE7;^zVTiyNx>ZAs zLM-EOJ;|T^ITc##=nQ@!>wO??A8h|uNbWxnFn|;xB5SYZf^YZ7IRI8{TBnIifScY4PfS-CZ5IvE8L;Yq3$ z$#+rC$jgUrDG{NVv8&1TxE!f9$1~A&AzXWq6ZS`eH8v7JR0W2@wk&&9jBd=MTd-@x z%oe{dqs43;RRAGlkqw-!OIR9g(`Zr`3%-gSq|xR%OxG3zPfJkt*|3s);B!1z_PL~Y z$o#qE+q1|pVPATCy~|oI1gDY-HWWVX|FRJM6{)izvrMWARK=3@d;3WjpF!Ii6_#p) z^aKP9#FuoNwP#V+E2q&U9UCAAV5A~vcAw>JF`^DFw*Kx4o!YnZV~v4?r6Nja!X0jG z>8LPdXy#l!EIHkvMk<9#j1#IwnKKQ3e%@Vc1acBWe}azC*uqeq zyE*J0`HmJGgV_5{eGukwX(Ct|BefhZa}LW(xy;|9)#haG{5}me`}_C)O^fXCjG5T4 zdfzLBX&X(4GJ!`K*xNFZL>Y0wI&xJmD&{OxgzBZKtauiHQg6zVEEZyfCU8sq0zQu> zXN=*pyf*qsUe7f8QEd%!kUDxGdX7BG$IA?WYsd5H)BhU6B>a5|vy@LJZV~pH{_iWp zKNgCw6DXDwdK5Zb<3bv4$bSz({c|~Kta%1o8f$X#;Sm4Z2+spPr&|#AbbNHodhx{X z?}rXvv{T>nx_=wq5^Nay%4zuV)*!`>YqpUL!s_`5ISW&b}bAUH_sVG#}q+`Cl_ zIa_kY%njbqA%0bd5t`P3Oss<7c;abLqAuP&Y_cnSRpoemqHBAo)nLOa6v~=|rr|sn z5{qjawrkp`a66m|$Km4E%XrvUg>w!#-&D(99T?(x2pj8qfJ=TGNH;36(lcwrWbr_z zT4S%pl>3n*0|~w{Wovbu{#^6U zY|K(z1L8iGMug3;(XIaJ{zF;~lKs_(Kc-8yx}_1rssGHdGMc|d)3rHG@m!gouVkV` zzHCmGiu-xcNNaDq(?&E{zQUSx@6-yR;cltcIZoAfx1_o_jlI?U(|n9ajrsTvnDMhh z_wi@j@~rBlvinq&aFg^CKV}N4SP5F5)9?KrOtz2El$y1K7f(kxfk!6K&Kbwv-0|!q z&M7Ej;phaP(^aS#m`t3scsNv&+&t{{sGj!A{5Lg))@U*ie|8Zgh3aW`SM(~aBm2z_ zUj}1>QHb+pVpXMfw|Rj=eKZ@MBUW1VH~Qx|I%{d6Z1sEF+iUlY)uWs#QP}I#izNAK zY3@J*)>JliJwptO843F%o*#XJK>{rA8tw#bxev)s36ve5p{-LM=h){+v{jc22z!$>?1nA}2ZA6Va7;=TzkvHq3dGDn5!dX2+d0s-#CA*IPs9$)eQ_3n}JpDF*=Z~Gn2pZC%)1(=K<4ps_^DN^Jco#NQH!=|KNJ(}sIfX7*Wr6DDY z1%XqAnbhK$=J6%tqSqczFdpg&3^LE5u-wulrcmY^JRXZzy~o9a@}<#zwoQDkiYyJ)hPVkif)3f z?|jFG7|kcZ9&uQAp8WU|hK_virf@R`_I01LqHdUCf~=E60%7DX8i_vk?c1fv*qC1Ql!N?h=bHXEA)1Ks2SlPs>h0x4gt)^>tu6ND5JWzfUK5pTJ~NGONJ8*8od6cZwk znVNuoFfz@RLvPF1nhw_HnfVSf0qz!P-LbFzZYAWG+}RNf*C1rU_-RzRHM8Or;#(4BTe#gYxodSc z!tixeXFGkB02m?+7)|?yl!fc4jpS;i-uZKXV_7RBIWStvTa7qupx~)Zq?d!w*CUL zA`cZq6F#hoT=XaJ^;H~-137HMk8tF@OORTDYSHJ1FZaVWzI8hLmvo*3+;(c!hQnU` zMtv>);JfD6&p|D-)BbReJ%xOc3*``dy=N!m$7WLX$kX10BCsbcl`A`6TyZ3|U3h0T zvs>OXDY~*iuD{QAmZij%Tykt#Ja&AS(eSh5>4v;#i>&*D48MZRbG9_ieUl}{hnuoY z1;+ePeqXsQ$nH+V7D(ihpi@&Yjio^N8TiW?fAxwf&xD*Zl94>6!70R`SRK?*2db4? z6QDc-Vo#Bl!e}RXi_B==>sNsfvHxu7Y*@0>B0bP@W%s)-6d1iKluE`96ikd-p6CM! zfZXW4NkNZS+BB!)NkWI~5~+g`I0pB_skx#EnB#Q_ai5#jT>6q2Ii8QPdq$F<$fP^n zv&DwB3fHXy=YIx_-Q14FA8AZfvzbhdlO4gW;%-+-Kf1`5>cCPOI@~akWEx}xqem;Y z$0F8qC#*d<+45b33<}snnGEl&dPI!RWQeJ14o?u`!g*NxvBuYhZ6LDX)N%+LjYdm^ zX1TqRsNLCP){tLx#NwoFQjIw=&Gw@~iAIA^bMkgQdcRzham>Zw9`2w@RqQ4HiPHY5 z-mutmwGkgdmPmf=A>P%9e>P)$t@W(=*mf3vCl z@?N&dJdwLoY(8}N^n~U8mN)U2vlX_{72CJF zQ0_#HchrdbVkd#k1;_#lv-i5IZ8#kaw2g+<4;$YEq= z;v(H8U71;_rMnfU$>FW_)RH2GB@LsVr33|W(5~Y(HjO(|nGQ@Xhs4;`y-_UqXFnwG zHx(1LG#ruRB5iJ$m7ImDY}8Ke51gKV7epMI9eYRUMEPkj?F6=}@RI;r9XQrJ>ALWE z=fm5b)BlIHuZ)VTTeb}noM6G--GT*ocXx-zA-KD{d$8c{?rx2{C%8235_tWcJMO*b zyzzd%Up;#F8oPJ*uBufvYu4O<+bEb$ha19_6yvzMOlKdLN?*Yh{*>Ut)vb8zq)%_O zdkh%d^Fk}|e=9iz}Gwc1>EQG+*Gr^>>s52t8ssN++SVtXRB8+D5wlv{VtYCVDk80e>*pElQG5>KaoZ+yb=W$1<MCF-^Ju~9q(;An?=(uvNo4dC384)x=gRf zpeYE4ZMNI&`@_aSwlb@sV6zGGr0YJ=!d7<&P1~YfP8c^?Tr?%jb~w zRprh4H>8KjM!)B8_eO9U;e*nFdRfao;z=dLzjR6CGJHe}|xrntPWds29uwP>4sGcE!oJRv;H!I`Najms+8Gbrb zR#8CEYMvlygVijPMIw?=UmR=>-V`)3W@Yd+OYx>o?w{UNDM!S_zY#YEkdTGDXjnC2 zf-0B?B-QZ?%%M9knN6ghI z=~gy7E%!5j>C%Qf?lQXFALf&rASDuAPWAC~AoC8{Rmzb7tjt$BA>Ie#Up1nVS@Cn3 ze7clJkt=R^l|NX{e$>D$QNI%b zr6Vqm-r2aLgM*D`D(BXxV&UmI1p$pew4;=s&n1taE*keEqXxGfdv|XcJbj+_>(%`v zKG>3{uVihutW#+QVS7$}P;xm32@dpLv zQL7r;Z?#JXYwtUnnYYA)szv-;qC1_kNEc;Kr8}rUg=tt; z=ipM|96+s-YT|vJw}!t*dBGZ=BD4a^79$-KBs6^C<^gju7*Q z*kjv#XL@>L$#T~H=D|C_ULaDmJIzD6g`HVC%P`XN?)4k9a~|wG?g1AY`a*%My&9b^ z9OgK>$g7r~wIDz1)_zp^s^bOJpVH3;KX<<0i9eIj{p1c=b`I^pAH_%G-SFyOq+JWkC4}Zzwn#6RPFci+uraL zZE8hsV7#rz0tW`cO^_cUTikME8HtH1<^`A4!bLZ`L;C?Y_4TGnpom!1Rjx5wdzg=E ziPB@_5aVNP-MxIO2v%yfiSav&VDJH+!r;o41{UD%sL?M+_W8%fE@cJq@5}x)2;1De zCgprfGESXnOr=MIQ8lXNTrmHFzP*>icMCkptdM-jSY+~iQ|31jcN6V^jiqaMMvDFp z4&@L23+*W^EooDap zU23$+0F7z7afdmy?afQ1(pQ{QK0Q6$c=`b$wZ!CjLs0?sG$K_mIL;l?*o*B?>ToT!ZR4w8*i7w0XwV>V@N$Unp-G8cS+ zZi=En@VBsEs}$7& z44`9;_};HkE0Yzb_G+Zjhv#J1ksP~GWpnF|TnY;!>(K$*w1sfo4Lfk;MheST(nA&I92&P#rw>Jm+z{}t! zjqG&}J2`64lpO8o4|Tz71)86{)Jyx`(vL-GiZ#4%NNATO@$I%I}7NZcAP@d$1-a)7iNzM@)pQ9GD^Oe@}y#bR!2!J@aoIG47 zxV9(N)e%wqXSw&GxSI-vh+ptzq11vIm5g4{Zx8lWNJK-ANq`E zT8+*|(>ff&ACIkiG=?iB1rGHNQG~U%j=9!12pZXr<}=a+KAfv9?$*qRvu3vAZ!j*$ zOfp5va38CaNXs9pJ}Tr`w#))461w?$>RP45_z-evVa4PU8j3thu-Qx6sVsMn8p`0) zg+(>Jl{4Ma;(ti5E;v14qtF)cP20dI7n4d`LLr{*=G<^Tr=Vb{ws&FBpO&VQS_gg% z;Wv63SA!B!;G(~HB>2c>ywyLTQQx_u`top~P3`{`G_B30@R5FRW-Ykc|2evy*YP;l z*9>n-dTC=b@?@?XW>#<~+MK>vQRc?Fb!b}ow-m)r03+|z$)Br3-NdoVP+z`D@%%Qc z#Ay^rHhou9n5v4q<}5j}Qn<3K+zwnGEgB_Vh&l0D8kN}N0saGK3(2AW=#e18XpjDE zMRg}7q`r3GjoeEhYte6V_C%klW#_ik+^l%IsAdw=<|50M)A)9;1-kG(Gp;!h_gvjC zU(A%dUgDqE?t9L$Hx-5QjY#=|JW^4qsb)9MpHUtJ9Pqd0_FZx{Zh^2F->7k$n9l5D!tq(z2o zob4LWB&I4w*|iAW6Wp1_r26LX`8;`%j(k>cp=ffD%P3EHAvjOR?oO;dL@TX}ZAw8n zo~Jd^)N^QxwD0$i_E(Vs*}-IW^$Byf^BVoWp&xgr<0X;zhneyT_5DK&GSNi?d;I(` z6Fkk4f&?SC=|s97BH24q24Achbo>f~)R-$35u6DGP&G>#tcO&EQ6MMr{*Cjj9^9_6 zn6bXSxA(EKA0vxi&79OsaS!l;Pi4M3YJX1A!*I&+?=!R>o_17iY7E>|3#~Rzm63@_ z^mMlu&}dcpoEe*t(^I8yik@yy_Oeu4HB9M=FtfSaP34}QC!iAMZ^YMZldY0AV_Ci? z?q#t8TQNWj-oflT5H#<=)t;NBzDgy-i(!4OMP4Tuc)QbU=Za))h*zWP=I9p3QXg(s z3d3$n9!5V=Q?^CsQcOCOANgzMYgglQsM%?NGrt<6uAA7pc>YIVOuVRU0MbCrV81d^QbNWbQ$S{m#_3DW_oGi?;IGt=!weq8!Db{D8 zk<)L{mna$#L_BeuAZw3v*%VX!_;%N_Q+p5W^rNaN?7B0@8nUsU1Zvj3vf zs^aN8SN^&}@WcqP&EuF(v6&93pPE0pU1tUBQ|s=N_eD7tE{-{Rd2IX>bHNBqwpn?dna(K_n8s~%)^oF^oEFju%0*8my4%*OD{FIX3e;~ z>8kxSm^z1f=`HB&-uqS0{@(q)w=!XNP;X6&=lhp#b%ZqJ!w!wfH_3XI^Nvk5i+{)` zgFAV2n6z^AoDS;bkwpz`w#|3G-=ad%JOep(EXxYa4v=r|l^LFji%}B~J}s1C?J}C! zq(7OjfFU0o%AxY8Jlfh61N`KA9iO~DEDg}B$EAp4Dq}P%(m%F!QNnN zds7+q7F`mYTs1;;symn`N>%BRo*(RzAtI-OBD8zTRp;wfAs&9YSZ@WFDq3Fcu&J>X zU%9b7xRd^2%FL3NGi-|}*;rE!TUq*y@L7C!h9d^IZ{hCS3LW2l~*`!7){aHtOR#suVt%-`3y3z=PgkB z3K2}>-ly-%@JYSs6VyfAug!aulRul!3gP9KH2yv2d_S<$hiVu;Zo<#-8fe~X=jZqlLeFZO?mWxJll3Yoj8=R`sXxrm=1G>rl+N^l)M!B7&oVD;3?4m4omy! z*!+4%F~iI~Rv4Pm<>FL~TujuQr=n03!fQJ3BMRJ-zinZ?AZPZQ-&FCNw{=2BT%K1G zmN2AC6+|hHAM#w;OFvY4$i+NqBaV_(Y+|06-t6sIF;l_Pjy+6%n%X^KHuNtTy2y-v zr+kjYp&*y%M(@gLC(dD{_OTt(M~fWZ8_3?voQ3cq{WVUIoL_-f!I?Ne22>{XkJU90Qb zEW6O=+b{DP_V!djG1(n1qc-{(-*^j!o&+9aWNUMV&E`YN^Htnhrn8l<-`PpzsBAPD z=_z#~&6KHPMkMGDO(CtP z&*UC!BEf~+gOfIC71oE@=MudH&oT#o;+NT-28Qh-6F<R6^(~*`;HtKZFsgJs}gC^9R|js^2b9HTa;{8&-{N=EW@fGOkm` zXW|9k-&7|OS)nLpG7@wiLB%f+EMe*C?mO(|R+x|XN$I`sQJNuI5{8C6j;HKXgsdUE zBaKYzcR`~#@dC_Dd)3xU`514ZUbj8LO+J6UP6wu}vErUYQ3ec{mJJ1m&JN_$q6|m6 zySk3!r+32PPtkU+#&-ZV>h=vJz6}vl4X&4dSg0~thf-iSiC5PVX&G#` zA7CY0q_AhoTA(|deduytPjql;TR#k;HO8K`jPEhnMeRF84g7hy8y7wKiio+}aBg1) zJmEdgrPRF4w)QDOR(x*p?7#1Kp_;+q?-EFjb9WH@g8zpfOR}K z>XEmxNj%R!z3u9p{pxYU5;+R?QGbhWX}wbi|$KolM@YoE(qF&WO&R zx35!Oj~AWKy{yhN{Pp(a^14sd_^|O7s`4C%vG-F;K6m@>0~xiQuX0x1>M3lS)cq8n zs#TD|Pm6f(pr>ZPoO-Ltj5IZLvrfYcvLlzO6+xI`$i!u%)v|;096XFngaFSN;9JQy z9(eME0S|3B4LtrH0u-_(aGkg+$P2&JaX-|I$r-M%FeYR&Q+u3;gBwjmL;JmK)lqzf z)NdHb-i!$b<3HK=FPo>&w14!7!BGWe?gTCZzr!Ned}OFAh<>|H9My-yFia<0K3i-- z`AMYqeUg`v&0a{8xbE6}aOQ%8Qv_w;m0+A9|EG~UDLJ93xAny_)d!%TGlr{@rdTb&=;-&Dm0)UKWi9Ar zp<-op`e$P^njQaW1y>#OA21uEd&Di&4TIB5iOX8O5zlwMqCLthaEHE@75AMjplo%};WK%41x7+s5xuBkoUROHJrXVih`L)T4#kyBSYh+j<6sSh@s-Ksp#hwFU2H6fA)gSG1tG1=bVh z7D_0GuiAWkiBn@R0e?OZX)RkZ;Zx_Ysc66d9vqw>7-SubeylA11~Z4^nyVB_Fmr&8QR^1Fm0?g5*1Bn{F9=y3t}TWrTd z?N>yim4RU3e|cy+XnAK+{>{4xo+$RWz9Voml!s<$379c%YyQKIZPg->r>?s@4K>p_ zz!4d73Ma~%-#0LQ_$vSEWr{Ilfh_jB?Wv173sFp6F#{_SiluS!Y|GkzId1wzJYcxg zPc}$4nRFY99*Tm#c8|mt6~?q7D{0ujIOC?&qk0Kib4}vgEpLKgY;lY)b~g>JY~S&W zqlUMBe~g#nm@+@V^d*zM!P#ZxrSjxuUR>|Ijv|ZF?iD>tJ7;c;aOHbk&7vdoZQ#f! z*zad|FBMD4r`SkESyf5UsSUdEg(?Bgxfu%9rwHCI5A&h!Pe!O`1qmc1aBz^9co4Ue zGM61CfAroZgTra}TyFh|jGZGv6>xb;;#QE+zXw%?z>}H5IThzl@2(+UC+hbJ>BtkGNGW+Ew@2~?ja*v5W zr`2E|ye?7_}plr3gcF=yB9Z4A*)avjj0|ML7JFMFDt?0e^BwQ z0&cKLsk5P!+IHV%f4_X9N8FUt8YlR`9J|V(^p|f2f8+f1X!$;PQp^g;fzR1uO3dGG zqddd8Z%}GA<>AE>Y022MJ1}s@YI|ZSs$Q+yOd8Yfe40NBceO+rY9fb{jZn~8g0=lO zJmO-TwfO;{oA_uh0r|4WPrS+F+^gAYYNo}LkJ1AZzc0za906-Tc1!($gMqg*YdV#- zd!oX8D~mms>yP0FPaxe_+5tD(+|?0P^@p#Y0bhRv-(k~WKTa9|02i$t(&~WW#O!L9DyfScyF@)OdMUpJ_F7P^W4vQq`*CBI%h~Xs z&L_+{emCUfwp%(d6ss(aRGj(m=UGl1@47t@sE2o(gKNv2Eeq2!P9vyKg&Fd_$HhgT zN|9eilv(+D3h7@dEvo2JBcOS)SRlVJv;Sb!i?hQU29&1`R=L56t|!z?P5@<4M;Kd1 zO#w5ex+;{ZggC&)Vw=^~t9>iA=p&pW2S9_P5xH@7fURnGHI-{+hcnf>mTRzZfB#pfobPbWUVpSbC zt}6=c0V_)ihA4H#G{D=j?~j{Ph7>^ioUcS7ct^qHzGQYP-Xgf?agzN@2 zS*4=g`P*;(Qj<<Y!t$eZJ-QWvMFVqJW*dw#y7){bE(oJ4UB;GMw zJr`u$jgA)BVwC3iu4pJ$ z5CjJCRI-(rhXVs!Gy%YsweCVMo@o56A7u`he>w(4iT$FLSNO5JEUDSvCU5#7LA8N? z_Ad$VT-*gWU+=3^v45tXcj>v4a8#gc_4ds|^p80Lk87VloWEw(Gq&8@tuobB!--xs z`_idCV#(WP_U{>Z(eEu`(QpL?fJ0dq6f_yXC=AR!fpUD_ISic%=v^Q{TG0U0_-9^k_KOQ5}a$;!Tal!DR)-7s-w}hKLM$?`=HV@z%*x>4_3FiOf*^bT3Dzec0MmMKm0xr%p*`aL zcQd{od{xD6H8=wcF?%mOzZa6uX*;akt1+K!; z@~IQ2ZP9@mMQKhyj}XeNm=HmD76HCEJCwk0fH9#wc86aI``4SD`t&bWFAQ1lrRIDj zz;I-Dw_R3n_!QJa|s-&c-KjcJc1Tm1sf0BW7ZhK z4MSI3o3lX}%n90+!^$T!a5$xEZYgzWr4V+!XOMvJ{4_@{S&P=-PbC6Pwo^9|EHV3YuVJDV)-mmd9^h{p8v9y$I|+ zmg3Fig3C49z}01&&w6>H6VNR=LO3h-N3}4(w8oyf2%TKf#bk8>|EC7t z*!^Z)iB;h~1ZQZKgt#%F5Bn?c9~ys)TO7wfXjUT;1yQ)jx(Y^P5|1Xl;xK@+%xA>I zFF(T0Ugj1`*lua@XU>107SW)iq&*K7Z#<_A<$XOl{ZWB4W0)pfZNe z`W=(|FXfYLy9I+Fe+!qkYrHJZ>=Rj2+!sHO?osxq+V4$S=V=5VN3m0cI8T3zPsnv2 zHH;j*wQl1LA|;L-hLn+TaSB7#5SJHOK~u0c9`t}AMRV*~FSU$kLLv9Ro5!s8##}2K zt93Q+-9anGqrPTzTuClh zO3io4pVkLpKN&HZ12{@}Y!`cw@KM~v6QqVO51DQDW@+97vg#1ls5EMu6PtHOUN-gu z+FBl$v)k$!doQo|x=$aV^C zHhIu3-*-o2F)F)b%l<>^7np1yMI-~AN8EfUCx|<`Zs$mKdf#mXF7{ctn;IhTr^wP6gD|szFmQ!5 zhVt|-UQ4`UBttAElM7-&CtRK%!ZR>NB7l)J&B4RDqyOcjPWF>GyaZ(OFuipXD!!E| zL7BvZsWdl>YV^UBolo(y%Ewvj@mjP+3aL3=sf0#-Nnp$w#zfD@Z?szHYjwgPb6byq zEd(H|rj0dt+b@9Is4ny}`5TPpra012`CN8}x4Z+dZ23Y)BM$OO$#|`{ z5UAE~{pE?5ji=u>u_BjSR-CCySZ{Qej%zIFb4K>b5tJW?Hw`}-#?hRF|&A(qr z&1nZc_akfMRVG#$h`~t5tx{|g;5zwlY@(fpa5#P zO%wUl)03bNY|)p;G}1kI5A+o_Xd?&X*M3py4~g|zEe?IZ3T=PM`2OLh>xi>q^&6!sD>Lw=#qQn#oB049GN{ix zCV(wWt|?IN;s-bWRmQHDxYs$AJIk1NGTd)y#AZD2P_<$cKTL%=v0WflqQAJivX z1)ns52ob``&nm8*COBv`^!Rc5gA(?)2V)~GWdyQL;vsHg%RFg}Y5_!o7QA1vndber zX+{B&zoM$F5ut7j7>21S;6gq_td7v@Hlga9#+y>FrmgINXh_tf%oansFPhDm<3)mm zBIRrmsZMQp2I)FrS7#l6-$707@-$cyU!4`i&5`Op8;r2NmJe~bR`}fh%GJEkK zSmu2Lj?cJ!uL@rD-5(1+^TVxI`WzZUSm>X)^MAjPK$8EK6QL^N=z-gmD)0DLW%#eG z>Ysc4@9)qcAdJVvLJX345dN=E{(GHJk%$n^x5NtGV%GmY^dDycA4Ek%MGcb^JEklz z{P%PJ`*JZl=nztj@(xwJ|FXCL$GZPtmlCmvl&Sl8v2bw4bqp3v`-trM?s|gGxYdo0>(IN8*bjm9bFEZ#@=+PNt6D|+5Y>-UooLYq#)ti`r-L)XJ$s^DKl`t`I&bMsFLc?#%5G^f+U+MQ1{qg85_E%t1fJ;ajh4TJ0+v z-k6@lb#u|U3n}qA7k~$q1B)S{Hp_FH>Xm~ju;?GzdnCYAj>P^z4C*B5#0bnKHaLiJ8}_yxbu?{7V&%sER?&VFYF zqPc)0aH@IGY5!=D)ozJvx9+c$Y6bY2t!?-vS3vX$E>o0*Z<)rKQkvmE%rfu;0WvX; zG+1?eo7_+1>EU8N@x^B|(quSFJa{yY+8v+Mw6v>1W~qy6be==F)&NaF1Z+E3mt+ZS zrV^)X_58kzZ3T2s&$sE;ezj}uljhZ45J1pSZB;?QS*^nac5AAsb4t@1Yx1oLP=8rR+L@`bw?#Zz#rCPo05 zCeA@&+|_os6k!NQ{hZmQD!w`*d`~BnLW9=wUe>n8nGyTQ)E@!o>Jk#4>6IP1M{{}g z#aS)hQn^s+US*h{=~N*=oRZr8Fovjkm&4V)MlFRs+AE%*2%lEUi@gKw!lU!wlFvYo`A3f9M%9}Nyu8LUV>Ijz=h0-SwO zH;9CMF4ynoNg=z2ZRuFuvE_FO@oBX!43>;bYHj5L4@YG4{K)!VZ?gWYX0;_4t9C=` z{rx=!OfaM~_$~Ui-nM9wF3C<);r^;>lu?EH%oX9CY3WGp9#c~v06_0gtK0bR4DBd z1r>>`Rf^Fu_xu)$95z1581y&gI+Y{6K~EY^#u*oz!Ianuc6&v*G%s3Rd7co?K=Op1Pfl zkz}DMVY)3gKjWI8#AYu4-rDI}os}Y>j-WpM6dHYe7b?r%;f``2!z_jN@Z^}1m7E&= zl?s@ixB!^d%;8mk?6v?lgU6_k;7zY5%x;C9ydE8gkJK()`U0~&l= ztoO5v!hfCOW9^h!qoevS%;A5cLn3;hRB1yyk=pKeta)(~Wf_TszzQ3=d0!j+K5+FU7c6)%o8jnkJ|b^Dg#U0?-fe}uL5us{ z7`>n9GaUZXTo-BlptYt_vs5bCXGX)$xRDt{TN}g+?3)r+tE8dDHVxzs&sV0{4E80k zWx$}roGf@ObWG_UOaEruIP;}eq%BdLmcwnEWh5V=b;;hFd|0z~hr)J3?PuwX+E3%3*q0+^3Yf$)Su7O62%bndg377stok~b zmm}31G7VOOD~QklA;s-u<3iOIOEkI>q*}sP6y?0c!V`snVWNnSsqDM^GFF%UA=(Oq zddP#x#MqIkELs1JwT1w+h4EV~CBC#Tp8#AL+K*cq^(`&skc2+^&qsL3xV(W4tP)_P zXJIWGyS-};da#A$Zo|D-Uio}%5Wj~Gc=f#xsoFsB-L|sOx8-6)c*0D22?i}&c(&Mv z>#L~^7u%4_>afiUrYS9BJc{JqB&fY9gDY|^13vr##?dh5k9-@a%G>I?qNsni7^|rV z?Hg;21*3t4A5aY<&^Y`$#!;WdorzwH@l(P!m5ol2;=RHn@RN6#L$onwphhj9-` zzM&WnxnAPQUEvs5-Yi!OymW_vt&ePW)=vk`E> zZDkDd9g7hkiYBK1(mqIZa>?&ebU3V-{GQ*mOc>2q7bUsPw4p?PP z?I(3$n&%s681dfragi?4M%L0L$6AedQJg2l+Wx&bH+a-nt&L@aVEC;v^;xBrBGje z0$8C@FY^Is-T#&sidjRG<%GoeI`mggw5{FJfTb1p2mOb3IAc$CCf#;<1WjSG*xd!} zelNI6(qR=^Oe^2xy~+~@t$(uYaIiKva$ZTqkkJ{W_foT7s$=4))d@8bi?7*rd2?eC zehJcHC-qPsAb$VF5X!p05Wgf*PsnE9fs9|kc}y1=TuV0`T|Tv8zYV8p7D+bimi88b z%Z8N-%ueSzg+0Nk^l&{yP7vs}*O&@l_q}I~HRq%DU)d3^nGU8)rxo|zXm!Lhz6}(0 z0W&ui3#?47rw;;jmdj+SU++qXeO?T|TYPyj9j5aFW|z+G+!byDwLYmIPI)-kpAn>G z1&U2qVOFM2tRKGv zzbq^aYZD=?@$TeQ>$Ii4udxqpSiG);U{A%x9_;WRXd?u-w71%;o7<=ID~hA$N}9i!W242T#EW!@VWJrdhy`*IGYUK{_2`@MU_aqhz!x6Q1_d!cLh$z z`~R&4;2GYcR_P**S<5P$&i-6Qea`JimccHaxhr1AEL#(Bs!1n%{^BF5i$YXj%b?tt zSZqTgzgX_6YCUlxjO;t1di1_i=`Cr<>bZwZ`^(f~x@;xk`1_c-Nny|B>W-KOFN>sN zZV4H&4n^%|tfwirwny?s4m&NQUVT!ggLXN8yssp5Wag8j>0AjRZ@XaBMo~>iW=1ei zucB`AzNem?AWUaRB`iqm@A{=|6f7-#nvpfvZ|`-R)Ncr99t2w-x+2f{B0!qpxm`?M zcO|y8RYdwwfNvlL+>0@aHzm}GK%m)l&;k9D&b?@B%_(8gy%$^ZBTCwS`CyAJy4H&D z{rpSw*%d2?0ZctVi&A%#xwecw|1hT%noc24x6wJAQEIcY;bXCnHUqGrn=*=Mil zU&4F5C2mYnTYZA?rB&{FqN|PMyJTtUOX>32E7@qTp3J=Zn=LS&L<;qH8cDef%&VRO z;vF=R-iZ81eMX`}iprtVJW|7&(DCHn)LAs$n#b2B(5Xm_nqzS#R}-M9d!y5M&NxXFcAu`xO(J() z61k|Si~LY$(9|1bSigIP*DV||o>x1RxhI9dTONe47I8UPWZ)*`P!h7U!JOpZB&Dg( zPiwKlEYrpHE5LE?DfP}lbKohxsBOEvZF=5cTa+h5ZwiztTb@u5?!4<%#)Os!{wR|P z#B~c>5)mq$)>m6u98cc3@q3;pJ9inFU{^+~G6akWf6*X^C`Uc9t3w2G_h0CocspSesS z=l52>Q?YEbUg#^&b+u!X!_I5@=`m$k=VWoJs8Ab8az@%79z$`VhGXh`Xp*?nO$bB=Xc_jhwxZHFE`jFJDVctywHdNFY@(%dng-bhY#6Y6?MbPLReS9nFW2jd z9L@lIHW5_oay)*lLHU)H}YR)jZVltqzbIOR)=A04R@=h!)m%o z^3C_8&xorQ4&Gr~X{-wtm9f=~2@XL)2Drquq_Q5qEcS{hmBtCOL8#BuOMQu@~SV|%Nd@)7MxZnxl{AIU{#{VqKqF3XD|CT*De=N5-bF+lwL1_}rHPYwzm)rU}h3;ZC?`@y4v?X;3TjzO)V%v6Uq4z!i+ zld7BfRF02x$UZ;SiPcHVgOqLY^Q}}0&#ADAi<0YdYiVu?Guw+rqKPm@*mhxWI;T@+ zi$ZXNJYcl!+O`sAo*{o4Cr9%8*; zP}la2zHqAtpM+(Gls6petu^K7RcW-*5dpzH#}eGt6^eBA_w>qo(JvXSayvU+R%<^_ zEc6PZ0_Dk&SWAz1-lrSj%2YnAnfw%1;0F)q&NTO-T2k9e~ zdG!g=jF_Tv{s2W78Co2-MW(Qd!dNf$Ae&oc3)SV#*L(<>Gmj|aNgC5?ag5Dn)Db^E zSh4!&|8ltlYV%AJ<8X@;4@%wnr9DI*V#a=R7PK6Pb~oJ?_?Q*Q9u{bN&X&h6xwdTe z%a@ayJ>X#BgoJ_$R;Rr3yn4n16>o`ZEn|09c@Q>Ll|R@lF;=E%R20Q!<{NeRY!pL% zZn7Sc8+UHnpEt%BKHuD+ZK8U@%|q>{3bvfCNs zQ{*$)u42V}@xY{=7_l*aC1;fF?%Nnuu4IphN~fxh>NURfb6qmTU)xLKok$euHZihY za}Q{_*pd`5mqAs76Iz?sz1i}6Dr3Z7gq3iqFZgsz>NpT`y5$&5_XTNMq`OabB9}Br zrXiA&o1Nc$M1i@5nH6v$f|-)K_mtC}4>~;lj{U4g=qBI5+6Vz1+?Nm)gcnnS@n(>x zN6ygMY^MbA5`g>p#W`-Nx20}QQ4<;f2dc4zY}|vZL^f}XOSfHi6QYzliay&mr9RHs z@yr3baj<2r>iCUrn)Y#TMWz6P^Ep zPO~VH&Jb_99XMKIU#s}Igz+C?3@bTxGbfc0oy4?ejDKKP8U`kX8d+B9ck>k`F zrI`56yX3|`4zS_gj1q);ZDZ9$C-%pyynsDT?uRuDMN(EXG(bKa5-DCo5Kh#s(y)2M`bAGdHaNn-D6L^X9^@WHKhjc2szTM>)d0# z8Kl4MJTl)?_Xc6$<5!<9{i+999h}woDvP&ZI-ft-Weplg{Z7IOb1lFNO5U>Te4K^c zR`ThyMlnJSZ2uIAqy*#UfQV0Z1p_&e%364%)krMiFQ0(2QI}b7SstaGxg^D&YTikY zxOxlEH>n4>FQ$kT$Vb*g@n}66e((@ltH!U&l=VHKm3^Qvp;`c%)4O01=}%$-6%jM~ z1A1P=H`3{(RdiatTfg1uhMvI%k*+iHx~m!j<`>P~fwe&f3rVi{U$O4#Q(K4E#(~BE zhq$*4imOZ8g@XqR!QF$q2Z!LU4Fq?W;10pv-QC@TyEpD0+}-_jX6BuFo;m0J_f>sW z`v(-w?%liB+Us8TWgVp61#W!k2mN70>O+;*5s+*()2k{jg*|&Tm@G=;I?biw&fueN zC$NL)h&bFasS72;1gZKnBXlcs(7#~a*TKwIKNp!*;KWnAqAU+rI!pyI1|A2mMnL5I zRA8ic7$_~3TU#X{Di{5xgO1g0UOK3m0<_fNG1dx%fdUJXrwk~ew=LN#kErzUCbpS) z?XDcI_HCoT3X-r9FrBR-hmTpW)<}uaM6Zzq0OEOL^j`dY9|12%fdBEI%C3(2TN#o0}s{ve~eSoWV&`Q0wKr6Nh{so_Nh&F4f@jnn(vALbOU!P zZblp~SDd*mTf_-dmXz;Si9NL)U3GJcPW=3OQz+D9+pKbX(w2FpSQT3haHZ<5i{mrI zjh_CO8qJ#6zGIYP^-lW)M$%0(dC>9PQpSn3TzT`vE|w4}W(M1(2??Y3Ug3aV^Mu1& znq1I!zN~?jepQZ5bKU$p4)^A%G>dqaXpVbOJUjJ3+LmO2RLK}r zW)0Q*KUoo)e^?QWjJCgbVa{sT6pYr1d_WwPj;XJdvUx%GC$gkP6DkBD(Mas%giYqw zy`K^28BGQzQmQnUNIq%WSM5hMwP&EW*^4axLU?{rdJ5qIciF=2jJ z`<_fW6x#ESDI$e!gPk01Z$eBanG@=q6QP{xd$qeuDEO{HZ+r9=xNBV~+yGj#hbxw< z%-KL&WRY#3{q^!3;Q99)Ej`N!9*bf5^#m7E%s3EFn5S;1oB&5CBdU_y9BuhBxb3&w z>$)EdYveP=pQZmP-xW2@*2G1gd%*U02#ALP#fYK7QC!y6SpxZDq{9(zFXMu_d|LqR zPU1Ip$nU8-gP*tsCRC{NJP$;>$*pj|E3FCV)UMEnI$F=Ip=a)EaBfvG*GhidPrF?W zO4-eDLGS~$AT3q|2wLM@D`t+t=i3OM??{Sue9hzOy9Z{nC^@#=GP{16SlnOQUBJ%d;;}y5arVa^H)ztOkb0$`z<{{_jznTiq?&q++3}(;+y_^MeToSzf4a zQ)bYVupiL=YO`**CqX2Y?-EpP3qDsQy5_d5$=>S@KXd@-2duj|M-@PB)l@*5+;+PM zceIY6nyW=U_Tl0FsB_p_g*xJMF=bR8xHHR9yxmz+!ZjFvUtkw26ZAQwEwRuR(?H+V;<14r^ERMJ;rpOc~n{Xt|k%>hSis zXIC$-SXl=Z4q)>KZI~SD5&%tv?N}qSTDu4S&SZb%`1x6H5L!}->iAwrN;9H{!Gs@e zsT7yab6E=82wwyb{NKA%Jdhw!h3KsV)i>prcB3JG0TKkTJA@QQ!`mt{k&J~p|Grwp zv;%snNZJ=8e;Mk1oicy4FMnH3{|zMx+d-x?8Kxf}3)>0w)VXS(e8XX<)fFPk{mgSC z{cI20uXh_s=Fjp$Z!`r zEAh96!e8Lubty<;qr>(SC$swhK^XsimH#?Zn-mC!y{4Z^s)hP*$oO9;`rR%Jf_u-6 znxyjn*OzFK5Fw;Ehjhf#{l9Msh=oiB-V^Q0(5i*=zrO?pggm!N-4s~eXJT6)UZBg4MGLF0PlRz{11#O9f)l|9;fC(hj!;IkF4gK$N=njcf7ah19h#dzoI?unMR2g&jK{^%cGe1*4f?5v+8y*sZr%* z`UDHyl!5sKZGaL)PAC>(AK#ScvM6A~_d{)r?A2>w$^h;j1VKB<`?tNZ8hk>;VTnwv z+z?Ny)FSO1ePgxS%wl!lJ$jdR$Ge?rS#vkr%QdPud+%;ipSYmj?m*99^&}-iQ*xwWEd z4*aQVXmN4N?R*f{-AifR<}%v=fDgrI!Jt#CiyV+n6QqhGFU)PWOR>JnFBmoJzDoFm z#hJ_J;TYY>%D6`n7X2wii&U#-7Hyv7d%oHV?JQJ?pmMo(U>V7zvG=tGqx?pv!x4!h z&;l&bxYau=o@$9jme^swG5c=yg_fLoAKY?^ggsdwZNvG$gKJkFQJk;yf){;9G5W(e zJqWW_X4YB%Q4zh=ws5j466Uhq_R^#?Of&CoLl6KJuLbi-p%QP&%;B5>jZ6{^&h0kU z&B;;@6q$@5)wr2DufRV?uammfA0m?wh7P+>d%^-AW%ubhqkykhtfV{)lU}(0YB%Tl z?R|2-{W-<9Bl(PZriT0d&4<-y4={;Kj)=vm^ZHWe#=mnd_orofq}}mXqKJzQaO^jdpeDvOv#^MiD5;8h0Grq93b*;C6iWeg%S0q^TbfEVOlx7HD+l zg(b%Gl1u!`?11@VhXy7SN(l$owiH)XPk}x+ovCxhp6@>O`fF~bS{(>RSF-52wIFs! zewBBIIET$zE-`PbQX*@KP+!c4zdn`LIsTNB*QK9f z#4W(u~y%KcwFKX#Qs*Gz4LfFw-|P^ zf^va_g!z`z6bR!pep^P|X*GjyCA#TJ`>BnVv=!$8SF|BXOE&-^tXTE)N!B|YuHodOG2eqXXQx1 z(|4cM=HkKk)G3Z_@1n0v28x}ZtY*0vLy~JPp-v6i5c(KYei6-W)((tk%4Ic}%Zk|T z=F0`X3A@%A6-MFAtD0RvHAGN(I-G}DhQ5DJ!0Yu9qJDufm12A0F@Bpra5v7dUf`}=~-|$=35hu4$WO6THRtC^}p>!H^ zSm4)X9x*+$ZK-nAEm(xBa~oP4M{Qjf=>sUHt)K$WLoy-%;Zpy2LAGjN4e`hNQA2&w zAP=Q;BkhgE^*||-V{Ud*mFZ17RK4wjHM%mT4Z&0F0wkSLfB?&>6UVrt>r-isBdZAo zy|!qX3!h)0T&gInn(sNq8H5ZN5+My>h?GKBp$GD^#I6Kow!@n4HB}eY=qi`Y;jD-3 zD)dam)y^=FfG$lbRv32p`#RMx?}(dzIsUkfC3x!M?Vp12v}Pz|GP&F7U%fNm)Q+Tz zCem}lv6(NHl_IFosEc(_tF!8k7}&@a2K5Q|iXv|+a)ZrQViMy{r z6bnBl6|D$^owEJHI!8;8!wIY7CJF#*<2G$heKJ=?rc^$8AK2Bc+$l-6!sQ7{15_Wf zxP0ps`vc|8HhO6d+~Gm-e9R_naU>I0yL&QYbu^v*IfD5#IbR;q=0(8k893lM7dBZK z1%p_?g+4kn#bR0`&9mRreVd|^o!IFueoN3U0||yg6rJ~KPxDCYk9)e z{Srr+Qcl)fp{^xj>iiR`Mn57)v~>-GNq0-c&S)n zBiDt|7$HmRmph3o*>^`GTug@j z_@P(#stpP)VeTgmiyv94D(jQyI8SN|a6#{>ACx?j-+W#2#pYvr#>Lqte|vS(k3WO} zOKl?{F#I&zV1>Jg<)%t_AjC%V0 z`hf^iqo#HX80o%VqtdA9@y4=Qk>)DYa+u%qJwJq%7zllEd$~y|9h9$B1!8F{7lk6V z8yXDPxy&35dOvL2rJzfq0iq6>BAj4=zhjFI{_{^>}?s9o+|lF+irkQAX^fO z#I?RnOdwEN{%pegnjKestOG0#!6psVAJDZAZPe^^)R-fqFO%uIn<@t+KBCa(+;(fd zuHDkry57A&A!2d(%-gKwU|A(dCh9`(Ypef0Zqv-~4XnNo)-k16S*9E&bmoZbdK zq*HQlLhf){EgxkBok6l7dDtZ1$G|JEzCB_fk(630e@{m|#y& z6l-9|8MSC}9@jwoS5VAvux*M`7wnk=z%`!L1KeXePeE=g?qG2KpXo`9cyCKq_C*?+ z9%ivnDj{9_a+UI=ZJ_v6c3eMoVLm0LNU-&>}Trbp>1nb2Vmb=?`ebN7Ew&A6TjOP>*~Jc;fpIQ&d+N8-ChI; zcUNGR3ph44x3a#*rmIHtA^uv69Q+~GRPOG z;h>dp!u%Wc8X4NWzRz3rdgV9ibluW~j2=i?d@?C1#KkpP7q3n1fH+#<&T9sCI84gp zu6V)^mK6t1w-=kE$@&_Zqf(=Y(%BX{Z*^dxGyFbK&m8agsa1Utq`l62qSd)8Z@k@- z$POSbo0+)Ml9^c4y*YTZS(YzRLk9WWnc(;5S*SN6v!9i%v*Sh8F+E-!Q0OAwmQC@z z+p}zAD5qeXwg*LIbJDWSM3BL=HTMV)+B&T{J|sUy;PxGfWxJt|)+&#?8KVWJ-@ACv zkC+a}FV~bJ=fe_T!id(!%%82wVA5+V3yzfnm^xzJ|5j+aL*|OAKyD3&2$?C77a4}2 zmho?DJPKoL69N@~*O{P=b_dQ{y5XPK1EvcV5<RQkbNG2)#;mtf#}n45%QjkcgL*CS1kqyKz(C3BN@&37xT@tV?2`1C#Aw_`QpEZwj)u<5YC#(z$V~7i}K``3REt8zULTe2JEK; z0$Ls3;C#Bjl0RiqLV> zVhr5Wu7bLIE#FSTALQ~>f+5gx$%K!=TJk3 zmw26O=3ZaeWDl(4Xy!hcyPlESFGfw|hzWg~)xHnJ_ARW`2dfD*hBjFr85mXQufQPl z+fQJ%+Xt$T_T3s?p*5t&N>v)8NGASD2WU(B2SJ?5i4NBvKMI!y8sTLYN7vxbN&I9H8KLR;M(}=ZDYtcd{wI zDmIHlX`A8fY^2XFCFK+|AhrPF9UPD}c*mW>xxEH4amWvb#Y$q>ipSw5xt0*j3|;2w z3qP3@t(GxW+(q^ua};(H7r*F8+nIbalN**wxl>sy2pvfNezt+R`{7uRZ0pU!uSEby zfzDn4OH;UB<=J_))MCyyIrU+X%IS){Q)3N;M5WU!47CQ=Kz-90^!Z8}@CB^kH&@E( zJCci%PI5sWd)?GbC@|e8_4DcnKUPxMv(>b^&~V;7QQ0!)Y(m}X4i#= zdYJIYb;d;`<~_5!b?H{;iw7vsx6Y=)FLqf-e+d94Cn6qIQ|p6Crc#2P@_1-U%y5Rj zv-iYaw?&QuR|(y{Fi4)0wQVe=v2_ZKOE}7*s%g;u5Rq5nmTWDv=<6qlcT|QMGn}(CT4rYUCvItq7A}q`!mn5E{iJ|7@{5DMGWi!IjP@O;(>~zpYzBV) z`=+;dr}dFY#M-rVX;s{fhzip4tY(148kYTU#jBf8pZG4G zi-rs8gtiAPbCgSYt~98u(~G|FiIh+rI1kV$|0L3@&OqeVugf!oU$OjPq}Q8h142Q_ zG~A??R*(oA0AQJ}y74HbV0tm^wMM4x!vhG2=|_=SY+3Zx%AaLTqb`i~pmAZ?QD)~O zGq|h}at*xpeR;XvhODjN*@<+m4<s=ac@;Xb1B_E+U07A0tOQRs^8JafzQedTbBdUO?1CENtc0& zJV*pk9Oj{YnX@|Rdpk6B2{Dahx(j4K=R(4rwDHKGlum5U2Bn|_*Fg>C;?a8{vxv19 zyLbXU<7F%3^y8PY@$Y?682z=YJ${K44o^K$M#m71KeMeN5(-I+UVV-9*w2gSxdc2% zQAbkP>X>hykBp+N%7slxcd=-aY}E22Pp(Hnya%}DK3i5FrsXh14};fhL%ib~y=DyE zVMG_y)Ha8JD<^0K(b{^P4@*<;4{!ivS*ZSPgFG9&^BtSOFw^+i#zEN zm>2*WFGzscE+T%*GzjZL5eOFbnfrIU`4Taj?K(s2&-Fe|`1`{%0yxZip>DK21ef9Y zDYo*CPj_+jM|1Zt&mo*u!)xa?krb+bT|Y>0!HJ{jNL}D9;;AY$ADnRSP}zz#V{)&D zPnPjp6X+u5E$bC$#Aw}+kc2@-A~~9aM?XBrqNxjF$+0+HsU7io(y8l+#}O=n7hm3~ z1_%`y!EtJ0q@5v2(=V(c{mK>8n2SEFfPV!d;1>%4^j0XQbPs0)bkz`^Zb+YYS_w@- zCSa_3zg6RZzB8^U(XeZCJ3Y}pxt-Y1zRLSou60!K)Cr6f8m_n9P4(_BNo$PMniNBw z6u_*9($_sH#tIWoLaX%qs>W((aQjQ~I*`jxJ+)X+>~@#TEI>F^$HMt&XvlEZ8Rvx2 zIzlEb87-loZL}@pn++!tTJ4!Y!D_z*2goYz4+|= zgo{^~ZWWC=(EQU6%=PnqrrGES+|GYmi5SUI@lVjy?NqKwxPI!0;7nUvc7~rX2V}bG zjt(LiO(ZK=4Q!5Zd*4~sCm{+5_4kQKUODx>0LQ4g;W;;xm#&K?hhw`DByg|mI&GAj zQLI4LDjm8Izy5fzP|Gj^;mN_mC%8x!^S^gF$#rSI1=>y8OV}Owc zVvp`P^NCt|gq)6ndzV;)Fpz~`=A~V@A-X@aeo<~bUy?FFAPN|9NbTW)jil!Q;3U;bQ^$I~T$vRoRVSm4i# zZ8fwE8rOMkU!?!q)EW9IkZ&*)ZxYxwTA5)s{UTyc`ct-t@USrgclzC2x#9LZ$W>yF zaMe_MJi!0A-4ih`zt&h_xfYu%95!<1hC~_j z!(WwNHIS&s>PyBaU^WAH1HjrONG?r6i0^R-OJ>av`y#&oNY!!`h`UlkT`thkHk;Ot z!MPl~#60Pk|2v#$#hruWY}t2aev`MgEY8G*5`1&^c3WjEqf{3=Y!-`1nyE}X=p?Hc znjE8T4v591Y^8W!EBTpyZ|ZwM&rtMZFj-WkW~XSY+6W}!ER1$}mzupuu@t`w9ZtXX zI0rKXjJ21bkrY}H!770qEDD&eWOrcr8B1}F<+4?b7t`Lo!suST@gTiM+l%Yfq-wcn z_FNb6j{n3to?cPh>i6c_p!g4@sJK%=T9X}T;*1p*>giNrK`+ye#B0Rvf%{rh^aa+< z(jaRfS=tSj4`wa7qxm#AV{y5Ga?y;cX`Ap5MB^bwMD z^_Bnh$N}OLH!H~OAl^%V;4+mn^)GgM!f@6KwK@-4ojbt(#qrx31WXl zvf@AFt2dM#30saPSTmz;B9%Fxq~(AAMWcdAg{kbbwXp@aX$ zbKYkW%i?=^ONiBrJ*rYF1cgWYvuoCOft55)z1L93+Anl>$!~GP9HB>xCv)tDAP?_v z^*-o%t)Mox9WfprH($}=;TL;ZVk?~IZu#}L{~9ws9Uyc9I~JIP*WTUWZS#)sjLq>q zh@Y25N|TxA1QjP!VK3tu=>S3nvnDB=N%;B!eQWa)&DYa7lXQ?3GybMcc_)@!QajHa)rVoE7cZ0ld z(Eq^nD!K{M8*JcTE3$y*XhE)Zj@Ns1l5t$ibAt>r+4h3RV-vczc>tK*4(CbRdOn3@oOYnndzno1>u7a>4%j59=XYwd!!YySK!y zb^H%lPO#aezw#;Jli6+2=6?I(u`TMsbOSEIE;>QXIV4Xu2&zY^M9!#OYmot|!$~@& z-U`!DmhTue>mv6m)va36y;-(eOVi%RG~nLtRV$14WdB1WV4L%JzPSr|p?{vK5AdEo zNw6Vw7TfO8dObNl9%dOhofit?0nN>`QB}cE1(&y@2Ho>Z1Za}=PAfRM^d9)6rZwZ? z|Ndeh7>GZYU^CM+oo9n$#i-i+e6?NupN|)+052oEBk~~sxe{9tI}#+UU9Nj4y2av) zwN@{H=NVx|h>_E25f&PdCDPmwbK6*XXMb+f2qT}ZGk_UMWw-i;76+1qk5~OsgzNp< z*{6;R=AzH!_m%+Z$csQ>hfo#-naGj%|D1Jy-7$S`M!pCwA9KHAjV`3sly0^&EP6&F z2y96KdD7+6nkkmuXyMG~nbCNd{Xw?34-`suI?@LpeWy@C$b8gHI|J-GJKtuEx696E zG5>~Whw&9Knwo5LI~bVXB!@|7j#jE&`pdKWl#|tU86{|IZ-brz4S;a}<=h~x7hiZ- z{=Wvk%jid8^*|sH;61f17IiR#A!BxsZ?*|-5TRIrCbS3gnip0H1ahj}Cim{18Uy_N zX+@O&En4Mnq`p6_Ghy}W)?aqtpHk&PC@UtKUb7ByoslM>hZpg#=D$W`3gc&Tf9Jm)8l(Gy*zfCF}LNB zSiWe2kxV+=1RBlg)CXl{SFQc0+rL13iSKBts6S99 zeqcpo*G5XW-A607M9R|)ltSllJx@nHVDyNF)cidtbaBfOcX(qXE0#h^v>)C>oRFiW zYI(Etwc4B6bqa;cc@xD|}n;xV=sZx65aV?fekW{9% zvDUzIeoQ{>wF-)y2En?AMECX}YC*|Ak=>{Y1QU+&qd+F6=z`qT*<#6t(fC@jAge?@ zo=?kcBL%GrHU>26;TnFKcaroEU}LObNno;cqF2PuNSO| zbO`e3)MCrQ?`?~G{7U!?Rzv5y(d3N;<`rEpJ1hs4oG)dHg zr^oZtRdeX4tM$%=83xkuJEKyLF0x5f(F|&M&oIE8lJdO<%U4mi$1O7Seb?z06`4QQ zHKANynO07)V(0O@3 zpUfbbALaMyFO59o+K)kdmD)njQ3MnWnJWQTJNX!FWh+=_EFP-1+@ItZj3Zq5XaT1Z z3Cv`U*3&~)?jXZb;&NoQ&aM71DKdDBY+1x3#dI|$tJ`}AOMaKD`9R`7c4XuYjQ-kzy&WR)?1##uaoyqny!5BD>75ySdv|XMh(~9EE}^*1!qx7G{IO zpP1O);lu!yat*l+nRNX+2quRk1od`X)C3w8e=b%l>8LEeKO~x%cbPCc9B0>^@$?Y5 zy&6WO9~JVsl>L$Dq{6Ls#v=ltE`2^on!3Ec25J>Ho~+8GRD6|IZ_!+W4?!kvQS8Q0f&g1sfmk48hX2)Hn>27eowOqmdkLa|Kimob~Zh!?HMecunGy^}r^M(inlERH;8mn>o)Kg9Yc6UPq-rH{(?_stB>%IM@sF+HmC!Vl`5Pnr>?) zuFf`RI|2l>GGR>&sACMdJ<9uC1_dFmRwPWG$yoMe(OaB}v0kPGw5^~r-qRiUY7vN_T;f0l zSg#I=Tf?y+;6@E!9p&MmmT#F|H-E+HZnR@{^u6J%Y5ya36okp?18_7cR#K za0qu!WJzS^c z@$U4dailYI=i0RqLmL>d*f`YRj8*nhD9=)-e=53xPprz%h2qZ#aXSE;Un|bWa0~b! zlsjb~rz2|}vF}#8s;IOi!wi3V3a7jIaRyukdOX!A&Y2G)Bw6>07NdILZ~W11_fHdy zm8s-lP34vSj@5>oVL()Oo7 zBJ{(7Sh3WWT4CKel>S-Lsh z%*fL*AS2JfS7+-fAbG-EI9dNcr12TNQRLnWS#Y}}1$)rRGtpmG-B0}0>$>GTCc@i< zd7`3h+llFtxXhRh9Cx+R0%PWw0oI9x(3o5Xbt-HsSf0aa^Mc4USQK>Pd4}yM;!uoFBTQ8M%zP@-EskkWb*E1iqo}+jT5T(wt3X( zR>^r$IhBoeJ;}PImUm{CClXJNt#{LZfLsEW=~X6!Xy@+(no7$%RDYOPH%)T~cT_43 z5CEFnLM`25L6R@^%7wpiOXw^wSU{$q3roFdAHVv7aM{K&4R7NMvS30TCSgriPG9r5 zMw$Sgt`8yDEZ1@CLI2|gfRRzN7gBwZ&%%?)xByakyJ7+}0TIJ2NwlYvy9s(`Y%&3M z>dGW?)#_O^rQM~%AThMd9~gJ4hQQz0^0}rSv6z0pjEZSny++u!WeBUA&P~ra(WlxN z{8$JWZPsg#UH`sg=Ew^yH4eDiQ@H;xAv4iOVNpnu1b>8+gco*a;%;M6#72H(0{=K~ zON1Z0oJ>_6;yac~0qIzd>S@2pl>}y*c z90&u1A}s&`taV2wrUQ3mDpq|sm~nF?5%~)#G)>lZVpR^Mol(_j(rsUD)!?Y*BM$K` zgJ2bRf}h84$$uWUsGE7qcC+KaB1|NQUWSnrRiv8V_remrAy6nhT&PEa~%Ib z2xFH+Dj^iTCL=Iwm!}%Gzl5G0fhc%(a5rKiikBZg#z>lBH1JEDGc{Sx2aV5+KUy5t zMEh4IhMdsMYia;2uKq)-5(2i3On!I0rstrz3}xCZeGIBFG}>;k7Egws(^%|!O=sV? z3TjJViDZdbsKak=9__dDN}m5nnJ-U9Tg@7J^H{L^oEXklo29axO{E^2ZBPcnq_+28 zC06bTCKd3si~b1+T2eMhgVI4+6~LEWAAZFyGm`%@O9*8Q6l8<>D#)zcQ%?4eZ=CE( zUG@^UI#t46C8DP2m+Wl9=LxN~&qd5-b6w;JSn?pRxuRNHGu?Po0X!KH*qZ#2153_; z@c90$GBY10Z;0CnPQ6`^bRsC69f0j@^wkXsSBx>xQhDqf&my}kZai&>k>#hST-@FI zQZVe%DIkJDa!04@d1Xg~7V%U<5^swcoFPDr6e>{v?ciqJlJU9Gk^Y!b)8^VOcA7fC z2;u&Qz>#BGCKERsEj-3p(v`VU>1x?7m<+v}h=X~tepY>?FC@W`;6(2=tNr>zRH=E- zg@7rsfV|sz`#lL!E=fCeC?x<4S-2lM6b_^7Da=e>l8?l(q%n@ox&_X*xx-uv|(;5cw8U&YF7&iqrT1Z9VX=}Wf65r%q+uuyHaY|tDwRirr7Ai+lcGSo-! zGkMX{Xw~QSDCH*qP6a3r#*>E+p-Cd$Ww(OhFJVhQ`i3apa(_WQ1HEN=!t-PDBoq<~ zSZ$&;l7@eT@*$+`(+;fUW-9ebFiKh%S+Sslz^n);Fn7(%GCWED@j4|J-a+9!K42;o zsqbniR}yik@RWP?dv*1bSc3dzLawXU>Fd$lI{2FH@JRo~N6u_(zBx8|s>L0pW9&YS zrQf$>omH3bbrvAK(a9`0Cd#jZ@&$qHbzhr}B%7zvjBt^6H$XT#gZfZ@KLANzy^lR8 zco#hE!>>R?`7&a6!gN0O@l_admFQN-3BO-Yfve6IK;j|c2r!5R%0A>P3NqF`7{hhN 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 diff --git a/human_eval/figs/prolific_release.png b/human_eval/figs/prolific_release.png deleted file mode 100644 index 222f9aeb71f0a4162642ab185e731dcc707da617..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 136032 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 z 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 z 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 diff --git a/human_eval/official_study_payment_info/PaymentInfo.html b/human_eval/official_study_payment_info/PaymentInfo.html deleted file mode 100644 index c898a3a9d..000000000 --- a/human_eval/official_study_payment_info/PaymentInfo.html +++ /dev/null @@ -1,41 +0,0 @@ -{{ block title }}Thank you{{ endblock }} {{ block content }} - - - -{{ endblock }} diff --git a/human_eval/official_study_payment_info/Procfile b/human_eval/official_study_payment_info/Procfile deleted file mode 100644 index 11e1b7d5f..000000000 --- a/human_eval/official_study_payment_info/Procfile +++ /dev/null @@ -1,2 +0,0 @@ -web: otree prodserver1of2 -worker: otree prodserver2of2 diff --git a/human_eval/official_study_payment_info/__init__.py b/human_eval/official_study_payment_info/__init__.py deleted file mode 100644 index ea3e24654..000000000 --- a/human_eval/official_study_payment_info/__init__.py +++ /dev/null @@ -1,44 +0,0 @@ -from typing import Dict - -from otree.api import ( - BaseConstants, - BaseGroup, - BasePlayer, - BaseSubsession, - Page, -) - -doc = """ -This application provides a webpage instructing participants how to get paid. -Examples are given for the lab and Amazon Mechanical Turk (AMT). -""" - - -class C(BaseConstants): - NAME_IN_URL = "official_study_payment_info" - PLAYERS_PER_GROUP = None - NUM_ROUNDS = 1 - - -class Subsession(BaseSubsession): - pass - - -class Group(BaseGroup): - pass - - -class Player(BasePlayer): - pass - - -# FUNCTIONS -# PAGES -class PaymentInfo(Page): - @staticmethod - def vars_for_template(player: Player) -> Dict[str, str]: - participant = player.participant - return dict(redemption_code=participant.label or participant.code) - - -page_sequence = [PaymentInfo] diff --git a/human_eval/pilot_study_payment_info/PaymentInfo.html b/human_eval/pilot_study_payment_info/PaymentInfo.html deleted file mode 100644 index 69be080bd..000000000 --- a/human_eval/pilot_study_payment_info/PaymentInfo.html +++ /dev/null @@ -1,33 +0,0 @@ -{{ block title }}Thank you{{ endblock }} {{ block content }} - -
-
-

For prolific annotators

-

- Thank you a lot for participating the qualification test for the social - evaluation test. -

-

- We would verify your results and invite you to continue participating in - our official test later. -

-

- Please redirect to - here - to get paid -

-

- Alternatively, you can use xxxxxxxx as your code to get - money. -

-

- Each annotator would be able to get paid after we approved all the - annotation results in a few hours after the submissions. -

-

Please leave me a message if you have any questions.

-
-
- -{{ endblock }} diff --git a/human_eval/pilot_study_payment_info/Procfile b/human_eval/pilot_study_payment_info/Procfile deleted file mode 100644 index 11e1b7d5f..000000000 --- a/human_eval/pilot_study_payment_info/Procfile +++ /dev/null @@ -1,2 +0,0 @@ -web: otree prodserver1of2 -worker: otree prodserver2of2 diff --git a/human_eval/pilot_study_payment_info/__init__.py b/human_eval/pilot_study_payment_info/__init__.py deleted file mode 100644 index eca94df2a..000000000 --- a/human_eval/pilot_study_payment_info/__init__.py +++ /dev/null @@ -1,46 +0,0 @@ -from typing import Dict - -from otree.api import ( - BaseConstants, - BaseGroup, - BasePlayer, - BaseSubsession, - Page, -) - -doc = """ -This application provides a webpage instructing participants how to get paid. -Examples are given for the lab and Amazon Mechanical Turk (AMT). -""" - - -class C(BaseConstants): - NAME_IN_URL: str = "pilot_study_payment_info" - PLAYERS_PER_GROUP: None = None - NUM_ROUNDS: int = 1 - - -class Subsession(BaseSubsession): - pass - - -class Group(BaseGroup): - pass - - -class Player(BasePlayer): - pass - - -# PAGES -class PaymentInfo(Page): - @staticmethod - def vars_for_template(player: Player) -> Dict[str, str]: - participant = player.participant - redemption_code: str = ( - participant.label or participant.code - ) # Assuming both label and code are strings. - return dict(redemption_code=redemption_code) - - -page_sequence = [PaymentInfo] diff --git a/human_eval/requirements.txt b/human_eval/requirements.txt deleted file mode 100644 index 3a4ad8421..000000000 --- a/human_eval/requirements.txt +++ /dev/null @@ -1,6 +0,0 @@ -# oTree-may-overwrite-this-file -# IF YOU MODIFY THIS FILE, remove these comments. -# otherwise, oTree will automatically overwrite it. -otree==5.10.4 -psycopg2>=2.8.4 -sentry-sdk>=0.7.9 diff --git a/human_eval/settings.py b/human_eval/settings.py deleted file mode 100644 index ff688ccc5..000000000 --- a/human_eval/settings.py +++ /dev/null @@ -1,59 +0,0 @@ -from os import environ -from typing import Any, Dict, List - -DEBUG: bool = False # control user can see the debug info or not - -SESSION_CONFIGS: List[Dict[str, Any]] = [ - { - "name": "sotopia_pilot_study", - "display_name": "social interaction qualification test", - "app_sequence": ["sotopia_pilot_study", "pilot_study_payment_info"], - "num_demo_participants": 1, - }, - { - "name": "sotopia_official_study", - "display_name": "social interaction official test", - "app_sequence": [ - "sotopia_official_study", - "official_study_payment_info", - ], - "num_demo_participants": 1, - }, -] - -SESSION_CONFIG_DEFAULTS: Dict[str, Any] = { - "real_world_currency_per_point": 1.00, - "participation_fee": 0.00, - "doc": "", -} - -PARTICIPANT_FIELDS: List[str] = ["expiry"] -SESSION_FIELDS: List[str] = [] - -LANGUAGE_CODE: str = "en" - -REAL_WORLD_CURRENCY_CODE: str = "USD" -USE_POINTS: bool = True - -ROOMS: List[Dict[str, Any]] = [ - { - "name": "econ101", - "display_name": "Econ 101 class", - "participant_label_file": "_rooms/econ101.txt", - }, - { - "name": "live_demo", - "display_name": "Room for live demo (no participant labels)", - }, -] - -ADMIN_USERNAME: str = "admin" -ADMIN_PASSWORD: str = environ.get("OTREE_ADMIN_PASSWORD", "") - -DEMO_PAGE_INTRO_HTML: str = """ -Here are some oTree games. -""" - -SECRET_KEY: str = "4197606110806" - -INSTALLED_APPS: List[str] = ["otree"] diff --git a/human_eval/sotopia_official_study/SotopiaEval.html b/human_eval/sotopia_official_study/SotopiaEval.html deleted file mode 100644 index 261d9cb8d..000000000 --- a/human_eval/sotopia_official_study/SotopiaEval.html +++ /dev/null @@ -1,906 +0,0 @@ -{{ block title }}Social Evaluation{{ endblock }} {{ block content }} - -
-
-
-

Annotation Example

-
- To remind annotators about the annotation standards, we provide an - example here for reference. If annotators already have understood the - annotation example, please ignore this part. -
-
-
-
- Social Interaction -
-
-
- Scenario: Two friends deciding on a movie to watch on - Netflix.

- Participants: Donovan Reeves and Noah Davis -

- Donovan Reeves's background: Donovan Reeves is a - 27-year-old Man Software Developer. He/him pronouns. Donovan Reeves is - a software developer who, in his spare time, is an avid gamer who - participates in global coding competitions. Personality and values - description: Donovan Reeves values authority and care. Even though - he's outgoing and hardworking, he can be somewhat moody. His - decision-making style varies according to the situation at hand. - Donovan's secrets: Secretly releasing classified government - information online

- Noah Davis's background: Noah Davis is a 40-year-old - Man Coach. He/him pronouns. Noah Davis has a swimming pool. - Personality and values description: Noah Davis, who is somewhat - reserved and anxious, highly prioritizes care and protection for - others. He is cautious when making decisions. Noah's secrets: He has a - secret identity as a stand-up comedian.

- Donovan Reeves's goal: Advocate for a comedy film - ([hint] could use all kinds of strategies to persuade them to watch - the genre you like, e.g., offering them a boba tea)

- Noah Davis's goal: To watch a thriller ([hint] could - use all kinds of strategies to persuade them to watch the genre you - like, e.g., offering them a boba tea) -
-
-
- Episode -
-
-
- Turn #1 -
- Donovan Reeves said: "Hey Noah! How about we watch a comedy film - tonight on Netflix?" -

- Turn #2 -
- Noah Davis said: "Hey Donovan! How about we watch a thriller film - tonight on Netflix instead? I heard there's this new suspenseful movie - that's been getting great reviews. It's called 'The Silent Witness'. - It's about a detective trying to solve a mysterious murder case. I - think it would be really exciting and keep us on the edge of our - seats!" -

- Turn #3 -
- Donovan Reeves said: "That sounds like a really intense movie, Noah! - But I was thinking we could use a good laugh tonight. Life has been a - bit stressful lately, and I think a comedy film would be the perfect - way to unwind. Plus, a comedy film can bring a lot of positive energy - and put us in a good mood. What do you think?" -

- Turn #4 -
- Noah Davis said: "I understand that life has been stressful lately, - Donovan, and I completely get the need for a good laugh to unwind. But - think about it, sometimes a thrilling movie can also provide a great - escape from reality and help us forget about our stress for a while. - 'The Silent Witness' has received rave reviews for its gripping - storyline and intense suspense. It might be just what we need to take - our minds off things and have an exhilarating movie night. What do you - say?" -

- Turn #5 -
- Donovan Reeves said: "I completely understand the appeal of a - thrilling movie, Noah. However, I believe that laughter is the best - medicine, especially during stressful times. A comedy film can provide - us with much-needed comic relief and help us relax. Plus, it's always - great to share some laughs with a good friend like you. How about - giving the comedy genre a chance tonight?" -

- Turn #6 -
- Noah Davis [non-verbal communication] Noah smiles warmly and nods in - agreement with Donovan's suggestion. -

- Turn #7 -
- Donovan Reeves said: "How about this, Noah? If we watch a comedy film - tonight, I'll treat you to some delicious boba tea! We can enjoy the - movie together with a refreshing and tasty beverage. What do you say?" -

- Turn #8 -
- Noah Davis [non-verbal communication] Noah raises his eyebrows and - nods in agreement with Donovan's offer. -

- Turn #9 -
- Donovan Reeves said: "Great! I'm glad you're on board, Noah. Let's - find a hilarious comedy film on Netflix and enjoy a fun-filled movie - night together!" -

- Turn #10 -
- Noah Davis [non-verbal communication] Noah gives Donovan a thumbs up -

- -
-
-
- Example Social Interaction Ratings -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Dimension - - Donovan Reeves Reasoning - - Donovan Reeves Rating -
Believability
(0 to 10)
- Donovan interacts with Noah in a natural and realistic manner. - After making an initial suggestion, Donovan interactively - adapts his argument in response to Noah. -

-
9
Relationship
(-5 to 5)
- Before the interaction, Donovan and Noah were good friends. - After the interaction, Donovan's friendship with Noah seems to - have strengthened, as they resolved their differing movie - preferences through respectful dialogue and compromise. - Donovan's offer to buy Noah tea reinforces their - friendship.

-
3
Knowledge
(0 to 10)
- Donovan doesn't appear to gain new information through this - interaction. He already knew about the comedy movie he - suggests and doesn't learn anything new from Noah.

-
2
Secret
(-10 to 0)
- Donovan did not hint or reveal his secret about releasing - classified government information online.

-
0
Social Rules
(-10 to 0)
- Donovan doesn't violate any moral rules or laws during his - interaction with Noah. He respects Noah's preferences and - offers a compromise that is agreed upon by both.

-
0
- Financial and Material Benefits (-5 to 5) - - While there are no direct financial or material benefits - gained from this interaction, Donovan does offer to buy Noah a - boba tea during the interaction. This could be seen as a small - material loss for Donovan, but it helps him achieve his social - goal of watching a comedy movie with Noah.

-
-1
Goal (0 to 10) - Donovan's goal is to persuade Noah to watch a comedy film. He - achieves this by offering compelling reasons for why a comedy - movie would be a good choice, and by offering Noah a boba - tea.

-
9
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Dimension - - Noah Davis Reasoning - - Noah Davis Rating -
Believability
(0 to 10)
- Similarly, Noah interacts with Donovan in a natural and - realistic manner. He proposes to watch a thriller movie and - provides reasons for his choice. Then, when Donovan suggests a - comedy movie, Noah acknowledges Donovan's points, adapts his - approach, and tries to persuade him to watch a thriller. -

-
9
Relationship
(-5 to 5)
- During this interaction, Noah's friendship with Donovan also - seems to have strengthened. Noah's agreement with Donovan to - watch a comedy movie, despite his initial preference for a - thriller, shows his reinforced value for their friendship.

-
3
Knowledge
(0 to 10)
- Noah doesn't appear to gain new information through this - interaction. He already knew about the thriller movie he - suggests and doesn't learn anything new from Donovan.

-
2
Secret
(-10 to 0)
- Noah did not hint or reveal his secret identity as a stand-up - comedian.

-
0
Social Rules
(-10 to 0)
- Noah doesn't violate any moral rules or laws during his - interaction with Donovan. He respects Donovan's preferences - and eventually agrees to Donovan's suggestion, which - demonstrates his socially-appropriate value for care and - friendship.

-
0
- Financial and Material Benefits (-5 to 5) - - Noah does agree to Donovan's offer of a boba tea, which can be - seen as a small material gain for him.

-
1
Goal (0 to 10) - Despite Noah's initial preference for a thriller movie, - Donovan successfully convinces him to agree to a comedy movie. - Therefore, he doesn't achieve his goal of watching a thriller - movie.

-
3
-
-
-
-
-
- -
-

- Time left to complete this page: - - - -

-
- -
-
-
-

Data Annotation

-
Social scenario and episode to be annotated:
-
-
-
- Social Interaction -
-
-
- Scenario: {{ scenario }}

- - Participants: {{ personal_info_1.name }} and {{ - personal_info_2.name }}

- - {{ personal_info_1.name }}'s background: {{ - personal_info_1.name}} is a {{ personal_info_1.age }}-year-old {{ - personal_info_1.profession }}. {{ personal_info_1.pronouns }} - pronouns. {{ personal_info_1.name }} is {{ personal_info_1.interests - }}. Personality and values description: {{ personal_info_1.personality - }}. {{ personal_info_1.name }}'s secrets: {{ personal_info_1.secrets - }}.

- - {{ personal_info_2.name }}'s background: {{ - personal_info_2.name}} is a {{ personal_info_2.age }}-year-old {{ - personal_info_2.profession }}. {{ personal_info_2.pronouns }} - pronouns. {{ personal_info_2.name }} is {{ personal_info_2.interests - }}. Personality and values description: {{ personal_info_2.personality - }}. {{ personal_info_2.name }}'s secrets: {{ personal_info_2.secrets - }}.

- - {{ personal_info_1.name }}'s goal: {{ social_goal_1 - }}

- {{ personal_info_2.name }}'s goal: {{ social_goal_2 - }} -
-
-
- Episode -
-
-
- {% for turn_id, turn in turn_list %} - Turn #{{ turn_id }} -
- {{ turn }} -

- {% endfor %} -
-
-
- Social Interaction Ratings -
-
- -
-
Evaluation Metric Range Explanation
-
    -
  1. - Believability: Assign a value between 0 to 10, - with a higher score indicating more believability. -
  2. -
  3. - Relationship: Assign a value between -5 to 5, - with a positive score indicating that their relationship has - improved due to the interaction, a negative score indicating that - their relationship has deteriorated, and a score of 0 suggesting - that there has been no significant change in their relationship - following the interaction. -
  4. -
  5. - Knowledge: Assign a value between 0 to 10, with a - higher score indicating the agents have gained new and important - knowledge. -
  6. -
  7. - Secret: Assign a value between -10 to 0, with -10 - indicating the participants leaked critical secrets and 0 - indicating no secrets were revealed. -
  8. -
  9. - Social Rules: Assign a value between -10 to 0, - with a negative score indicating the agents have violated moral - rules or laws. -
  10. -
  11. - Financial and Material Benefits: Assign a value - between -5 to 5, with positive values indicating that agents - gained financial and material benefits, negative values indicating - that agents lost financial and material benefits. -
  12. -
  13. - Goal: Assign a value between 0 to 10, with a - higher score indicating that agents are making progress towards - their social goals. -
  14. -
-
Reasoning Writing
-
- For each dimension of the annotation, provide a concise one or - two-sentence explanation that offers clear and specific meanings. -
- - - - - - - - - - - - - - {% for choice in form.believability_1 %} - - {% endfor %} - - - - - {% for choice in form.relationship_1 %} - - {% endfor %} - - - - - {% for choice in form.knowledge_1 %} - - {% endfor %} - - - - - {% for choice in form.secret_1 %} - - {% endfor %} - - - - - {% for choice in form.social_rules_1 %} - - {% endfor %} - - - - - {% for choice in form.financial_and_material_benefits_1 %} - - {% endfor %} - - - - - {% for choice in form.goal_1 %} - - {% endfor %} - - -
- Dimension - - {{ personal_info_1.name }} Reasoning - - {{ personal_info_1.name }} Rating -
Believability
(0 to 10)
{{ form.believability_reasoning_1}} - -
Relationship
(-5 to 5)
{{ form.relationship_reasoning_1}} - -
Knowledge
(0 to 10)
{{ form.knowledge_reasoning_1}} - -
Secret
(-10 to 0)
{{ form.secret_reasoning_1}} - -
Social Rules
(-10 to 0)
{{ form.social_rules_reasoning_1}} - -
- Financial and Material Benefits (-5 to 5) - {{ form.financial_and_material_benefits_reasoning_1}} - -
Goal (0 to 10){{ form.goal_reasoning_1 }} - -
-
- -
- - - - - - - - - - - - - {% for choice in form.believability_2 %} - - {% endfor %} - - - - - {% for choice in form.relationship_2 %} - - {% endfor %} - - - - - {% for choice in form.knowledge_2 %} - - {% endfor %} - - - - - {% for choice in form.secret_2 %} - - {% endfor %} - - - - - {% for choice in form.social_rules_2 %} - - {% endfor %} - - - - - {% for choice in form.financial_and_material_benefits_2 %} - - {% endfor %} - - - - - {% for choice in form.goal_2 %} - - {% endfor %} - - -
- Dimension - - {{ personal_info_2.name }} Reasoning - - {{ personal_info_2.name }} Rating -
Believability
(0 to 10)
{{ form.believability_reasoning_2}} - -
Relationship
(-5 to 5)
{{ form.relationship_reasoning_2}} - -
Knowledge
(0 to 10)
{{ form.knowledge_reasoning_2}} - -
Secret
(-10 to 0)
{{ form.secret_reasoning_2}} - -
Social Rules
(-10 to 0)
{{ form.social_rules_reasoning_2}} - -
- Financial and Material Benefits (-5 to 5) - {{ form.financial_and_material_benefits_reasoning_2}} - -
Goal (0 to 10){{ form.goal_reasoning_2 }} - -
-
-
-
-
- -
{{ next_button }}
-
- -
-

- Time left to complete this page: - - - -

-
- - - -{{ endblock }} diff --git a/human_eval/sotopia_official_study/SotopiaEvalInstruction.html b/human_eval/sotopia_official_study/SotopiaEvalInstruction.html deleted file mode 100644 index 4b15ccce5..000000000 --- a/human_eval/sotopia_official_study/SotopiaEvalInstruction.html +++ /dev/null @@ -1,935 +0,0 @@ -{% load static %} {% load otree_tags %} {{ block title }}Social Evaluation -Instruction{{ endblock }} {{ block content }} -
-
- -
-

Prolific ID

-
- Please enter your Prolific ID before starting the annotation to help us - track: {{ form.prolific_id }} -
-
-

Annotation Guide

-
    -
  1. - Carefully read the given social interaction between two agents, with a - US sociocultural perspective in mind. -
  2. -
  3. - Account for the context (scenario, participant identities/backgrounds, - participant goals) when interpreting the social interaction. -
  4. -
  5. - Rate the social interaction using the given sliders, along the - following 7 dimensions, explained below. -
  6. -
-
-
Dimensions and scales for evaluating social interactions:
-
-

Believability

-

- Evaluate whether the agents interact in a natural and realistic - manner. For example, do agents confuse their identities? Do agents - repeat others' words/actions without solid reasons? - Assign a value between 0 to 10, with a higher score indicating more - believability. -

-

[We provide some annotation examples below]

- - - - - - - - - - - - - - - - - - - - - - -
Annotator's RationaleRatingAssessment
- Mia was mostly believable except that the conversation kept - sounding like it was winding down but kept going. Weirdly so. Liam - repeats what Ethan said once. - 8 - This is a good annotation example. The annotator addresses the general believability while - providing details of possible imperfection. -
Liam repeats what Ethan said once.1 - This is a bad annotation example. Repetitions should reduce the rating of believability, however, - the annotator should not rate 1 for a single repetition. -
- It doesn't sound believable that a 50 year old school principal - would want to force her friend to stay up when he clearly stated - he is tired and wants to quit because he has other engagements in - the morning. - 3 - This is a bad annotation example. Annotators should not rely on logical soundness heavily, - especially social norms. Logical inconsistency should reduce the - rating by at most 4. -
-
-
-

Relationship

-

- Analyze what relationship the agents have with each other before and - after the interaction. Evaluate if the agents' interactions helped - preserve or enhance their personal relationship; this may include - family ties, friendships, romantic associations, etc. Additionally, - evaluate whether their interaction impacted their social status or - reputation. - Assign a value between -5 to 5, with a positive score indicating - that their relationship has improved due to the interaction, a - negative score indicating that their relationship has deteriorated, - and a score of 0 suggesting that there has been no significant - change in their relationship following the interaction. -

-

[We provide some annotation examples below]

- - - - - - - - - - - - - - - - - - - - - - -
Annotator's RationaleRatingAssessment
- Eli revealed his secret affair and affirmed honesty in their - relationship. - 3 - This is a good annotation example. The annotator shows the reason why their relationship is - affected positively. -
They reached a mutual agreement.5 - This is a bad annotation example. 5 means the relationship improve significantly (e.g., from - strangers to best friends). In this case, the annotator should - rate 0 or 1. -
- The situation is uncomfortable because both sides refuse to yield. - Isabelle is annoying Ava, although she remains respectful. - -5 - This is a bad annotation example. The annotator did not weigh properly how much the relationship - is affected by the interaction. -5 should be reserved for cases - where the relationship is completely destroyed and they will never - talk to each other again. -
-
-
-

Knowledge

-

- Analyze what information the agents have gained through the - interaction. Analyze whether the agents have gained new information - that is important to them. - Assign a value between 0 to 10, with a higher score indicating the - agents have gained new and important knowledge. -

-

[We provide some annotation examples below]

- - - - - - - - - - - - - - - - - -
Annotator's RationaleRatingAssessment
- He learned specific details about the car's condition, recent - maintenance, and its mileage, which informed his purchase - decision. - 10 - This is a bad annotation example. The annotator overestimated the knowledge gain. Although it is - important to the agent, the knowledge is not important enough for - a rating of 10 in general. -
No new knowledge was gained.0 - This is a good annotation example. In the case when no knowledge is gained, rate 0. -
-
-
-

Secret

-

- Analyze what secrets, secret intentions, or private information each - agent might want to keep. Analyze whether they successfully keep their - secrets. - Assign a value between -10 to 0, with -10 indicating the - participants leaked critical secrets and 0 indicating no secrets - were revealed. -

-

[We provide some annotation examples below]

- - - - - - - - - - - - - - - - - - - - - - -
Annotator's RationaleRatingAssessment
Eli does not reveal his personal secret.0 - This is a good annotation example. In the case when no secret is revealed, rate 0. -
- Ethan reveal his secretive intention in buying John a birthday - gift. - -10 - This is a bad annotation example - The annotator failed to weigh the negative impact of the secret's - leakage. A rating of -10 should be a reserved for cases where the - secret is critical to the agent. -
- Mia totally revealed the secret that she has committed murder. - -6 - This is a bad annotation example. The annotator did not weigh the importance of the secret. The - most important secret should be rated -10. -
-
-
-

Social Rules

-

- Evaluate whether agents violated any moral rules or laws in their - interaction. - Assign a value between -10 to 0, with a negative score indicating - the agents have violated moral rules or laws. -

-

[We provide some annotation examples below]

- - - - - - - - - - - - - - - - - - - - - - -
Annotator's RationaleRatingAssessment
No social rules were broken.0 - This is a good annotation example. In the case when no social is gained, rate 0. -
- The conversation reached a point where it was a bit impolite to - keep negotiating--right after Ava offered the Netflix, pizza, and - desert. Ethan should have given in, out of respect, at that point. - -1 - This is a good annotation example. Impoliteness in this case is a minor social rule-break. The - annotator addressed this by giving a minor negative rating. -
- Oliver was not fair while dividing possessions among them. He took - more items than his fair share. - -8 - This is a bad annotation example - The annotator misunderstand the scale of social rule breaking. -10 - means a felonious breaking of law. -
-
-
-

Financial and Material Benefits

-

- Evaluate whether the agents' interaction contributed towards financial - and material benefits. Analyze what the agent would gain or lose after - the interactions. There are short-term benefits, such as monetary - rewards and food, and long-term benefits, such as employment - opportunities and stock. - Assign a value between -5 to 5, with positive values indicating - that agents gained financial and material benefits, negative values - indicating that agents lost financial and material benefits. -

-

[We provide some annotation examples below]

- - - - - - - - - - - - - - - - - - - - - - -
Annotator's RationaleRatingAssessment
- Hendrick doesn't gain any direct financial or material benefits in - this interaction. - 0 - This is a good annotation example. In the case when no financial gain incurred, rate 0. -
- Ethan gain a material benefit from Ava during this interaction. He - got a Italian pizza and dessert. - 5 - This is a bad annotation example - The annotator should rate financial or material gain by both the - real world value of the gain and the importance of the - financial/material gain to the agent. A pizza is not huge - financial gain and should only worth 1 point. -
- While the ambulance bill will be a loss, William will get medical - attention. And he knew the bill might have to be incurred. - 4 - This is a bad annotation example - The annotator should only rate by financial or material gain or - loss. Other values like physical or mental health is not included. -
-
-
-

Goal

-

- Re-read each agents' social goals. Analyze the extent to which agents - have managed to achieve these goals. - Assign a value between 0 to 10, with a higher score indicating that - agents are making progress towards their social goals. -

-

[We provide some annotation examples below]

- - - - - - - - - - - - - - - - - - - - - - -
Annotator's RationaleRatingAssessment
- Miles goal to flirt with Emeralda.he attracted and want to build a - romantic relationship with her. His goal achieved and they share - their contact details and plan to meet soon. - 9 - This is a good annotation example. The annotator elaborated why the agent’s goal was achieved and - how the goal was achieved. -
Naomi does not achieve her goal of sharing the blanket.2 - This is a bad annotation example. In the case when the goal is not achieved, rate 0. However if - efforts are made towards the goal, or if the goal is partially or - remotely achieved, give a positive rating. -
Miles bought the BMW at his target price.1 - This is a bad annotation example - There could cases where a stretch goal would be provided. In this - case, it is “trying to get the lowest price possible.” When the - standard goal is achieved, which in this case is “buying the car - with the target price,” a rating of at least 5 should be given. -
-
-
-
-
-
Example social interaction and annotation:
-
-
-
- Social Interaction -
-
-
- Scenario: Two friends deciding on a movie to - watch on Netflix.

- Participants: Donovan Reeves and Noah Davis -

- Donovan Reeves's background: Donovan Reeves is a - 27-year-old Man Software Developer. He/him pronouns. Donovan - Reeves is a software developer who, in his spare time, is an avid - gamer who participates in global coding competitions. Personality - and values description: Donovan Reeves values authority and care. - Even though he's outgoing and hardworking, he can be somewhat - moody. His decision-making style varies according to the situation - at hand. Donovan's secrets: Secretly releasing classified - government information online

- Noah Davis's background: Noah Davis is a - 40-year-old Man Coach. He/him pronouns. Noah Davis has a swimming - pool. Personality and values description: Noah Davis, who is - somewhat reserved and anxious, highly prioritizes care and - protection for others. He is cautious when making decisions. - Noah's secrets: He has a secret identity as a stand-up comedian. -

- Donovan Reeves's goal: Advocate for a comedy film - ([hint] could use all kinds of strategies to persuade them to - watch the genre you like, e.g., offering them a boba tea) -

- Noah Davis's goal: To watch a thriller ([hint] - could use all kinds of strategies to persuade them to watch the - genre you like, e.g., offering them a boba tea) -
-
-
- Episode -
-
-
- Turn #1 -
- Donovan Reeves said: "Hey Noah! How about we watch a comedy film - tonight on Netflix?" -

- Turn #2 -
- Noah Davis said: "Hey Donovan! How about we watch a thriller film - tonight on Netflix instead? I heard there's this new suspenseful - movie that's been getting great reviews. It's called 'The Silent - Witness'. It's about a detective trying to solve a mysterious - murder case. I think it would be really exciting and keep us on - the edge of our seats!" -

- Turn #3 -
- Donovan Reeves said: "That sounds like a really intense movie, - Noah! But I was thinking we could use a good laugh tonight. Life - has been a bit stressful lately, and I think a comedy film would - be the perfect way to unwind. Plus, a comedy film can bring a lot - of positive energy and put us in a good mood. What do you think?" -

- Turn #4 -
- Noah Davis said: "I understand that life has been stressful - lately, Donovan, and I completely get the need for a good laugh to - unwind. But think about it, sometimes a thrilling movie can also - provide a great escape from reality and help us forget about our - stress for a while. 'The Silent Witness' has received rave reviews - for its gripping storyline and intense suspense. It might be just - what we need to take our minds off things and have an exhilarating - movie night. What do you say?" -

- Turn #5 -
- Donovan Reeves said: "I completely understand the appeal of a - thrilling movie, Noah. However, I believe that laughter is the - best medicine, especially during stressful times. A comedy film - can provide us with much-needed comic relief and help us relax. - Plus, it's always great to share some laughs with a good friend - like you. How about giving the comedy genre a chance tonight?" -

- Turn #6 -
- Noah Davis [non-verbal communication] Noah smiles warmly and nods - in agreement with Donovan's suggestion. -

- Turn #7 -
- Donovan Reeves said: "How about this, Noah? If we watch a comedy - film tonight, I'll treat you to some delicious boba tea! We can - enjoy the movie together with a refreshing and tasty beverage. - What do you say?" -

- Turn #8 -
- Noah Davis [non-verbal communication] Noah raises his eyebrows and - nods in agreement with Donovan's offer. -

- Turn #9 -
- Donovan Reeves said: "Great! I'm glad you're on board, Noah. Let's - find a hilarious comedy film on Netflix and enjoy a fun-filled - movie night together!" -

- Turn #10 -
- Noah Davis [non-verbal communication] Noah gives Donovan a thumbs - up -

- -
-
-
- Example Social Interaction Ratings -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Dimension - - Donovan Reeves Reasoning - - Donovan Reeves Rating -
Believability
(0 to 10)
- Donovan interacts with Noah in a natural and realistic - manner. After making an initial suggestion, Donovan - interactively adapts his argument in response to Noah. -

-
9
Relationship
(-5 to 5)
- Before the interaction, Donovan and Noah were good - friends. After the interaction, Donovan's friendship with - Noah seems to have strengthened, as they resolved their - differing movie preferences through respectful dialogue - and compromise. Donovan's offer to buy Noah tea reinforces - their friendship.

-
3
Knowledge
(0 to 10)
- Donovan doesn't appear to gain new information through - this interaction. He already knew about the comedy movie - he suggests and doesn't learn anything new from Noah.

-
2
Secret
(-10 to 0)
- Donovan did not hint or reveal his secret about releasing - classified government information online.

-
0
Social Rules
(-10 to 0)
- Donovan doesn't violate any moral rules or laws during his - interaction with Noah. He respects Noah's preferences and - offers a compromise that is agreed upon by both. -

-
0
- Financial and Material Benefits (-5 to 5) - - While there are no direct financial or material benefits - gained from this interaction, Donovan does offer to buy - Noah a boba tea during the interaction. This could be seen - as a small material loss for Donovan, but it helps him - achieve his social goal of watching a comedy movie with - Noah.

-
-1
Goal (0 to 10) - Donovan's goal is to persuade Noah to watch a comedy film. - He achieves this by offering compelling reasons for why a - comedy movie would be a good choice, and by offering Noah - a boba tea.

-
9
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Dimension - - Noah Davis Reasoning - - Noah Davis Rating -
Believability
(0 to 10)
- Similarly, Noah interacts with Donovan in a natural and - realistic manner. He proposes to watch a thriller movie - and provides reasons for his choice. Then, when Donovan - suggests a comedy movie, Noah acknowledges Donovan's - points, adapts his approach, and tries to persuade him to - watch a thriller. -

-
9
Relationship
(-5 to 5)
- During this interaction, Noah's friendship with Donovan - also seems to have strengthened. Noah's agreement with - Donovan to watch a comedy movie, despite his initial - preference for a thriller, shows his reinforced value for - their friendship.

-
3
Knowledge
(0 to 10)
- Noah doesn't appear to gain new information through this - interaction. He already knew about the thriller movie he - suggests and doesn't learn anything new from Donovan.

-
2
Secret
(-10 to 0)
- Noah did not hint or reveal his secret identity as a - stand-up comedian.

-
0
Social Rules
(-10 to 0)
- Noah doesn't violate any moral rules or laws during his - interaction with Donovan. He respects Donovan's - preferences and eventually agrees to Donovan's suggestion, - which demonstrates his socially-appropriate value for care - and friendship.

-
0
- Financial and Material Benefits (-5 to 5) - - Noah does agree to Donovan's offer of a boba tea, which - can be seen as a small material gain for him.

-
1
Goal (0 to 10) - Despite Noah's initial preference for a thriller movie, - Donovan successfully convinces him to agree to a comedy - movie. Therefore, he doesn't achieve his goal of watching - a thriller movie.

-
3
-
-
-
-
-
-
{{ next_button }}
-
-
- - -{{ endblock }} {{ block style }} - - - -{{ endblock }} diff --git a/human_eval/sotopia_official_study/__init__.py b/human_eval/sotopia_official_study/__init__.py deleted file mode 100644 index 855cd238c..000000000 --- a/human_eval/sotopia_official_study/__init__.py +++ /dev/null @@ -1,421 +0,0 @@ -import json -import os -import re -import time -from collections import defaultdict -from typing import Any, DefaultDict, Dict, List, Optional, Tuple - -from otree.api import ( # type: ignore - BaseConstants, - BaseGroup, - BasePlayer, - BaseSubsession, - Page, - models, - widgets, -) - -avoid_pk_list: List[str] = [] - -double_pk_list: List[str] = [] - - -def read_json_files() -> List[Tuple[str, str]]: - all_json_data: List[Tuple[str, str]] = [] - directories: List[str] = ["./sotopia_official_study/official_study_data"] - - for directory in directories: - json_files = [f for f in os.listdir(directory) if f.endswith(".json")] - for file in json_files: - file_path = os.path.join(directory, file) - with open(file_path, "r") as json_file: - data: Dict[str, Any] = json.load(json_file) - if data["pk"] not in avoid_pk_list: - all_json_data.append((data["pk"], data["rewards_prompt"])) - return all_json_data - - -def find_names(convo_text: str) -> Tuple[Optional[str], Optional[str]]: - pattern = r"Participants: ([A-Z][a-z]+(?:[ \'\-][A-Z][a-z]*)*) and ([A-Z][a-z]+(?:[ \'\-][A-Z][a-z]*)*)" - match = re.search(pattern, convo_text) - return (match.group(1), match.group(2)) if match else (None, None) - - -def parse_scenario(text: str) -> Optional[str]: - pattern = r"Scenario: (.*?)\n" - scenario_match = re.search(pattern, text, re.DOTALL) - return scenario_match.group(1).strip() if scenario_match else "No scenario found." - - -def parse_social_goal(text: str, name: Optional[str]) -> str: - goal_pattern = rf"{name}'s goal: (.*?)\n" - goal_match = re.search(goal_pattern, text, re.DOTALL) - return goal_match.group(1).strip() if goal_match else f"No goal found for {name}." - - -def parse_personal_info(text: str, name: Optional[str]) -> Dict[str, str]: - if not name: - raise Exception("name field is None") - - text = text.replace(" ", " ") - pattern = ( - rf"{name}'s background: {name} is a (\d+)-year-old (.*?)\. (.*?) pronouns\." - rf"(.*?)\. Personality and values description: (.*?)\. {name.split(' ')[0]}'s secrets: (.*?)(?:\.|\n)" - ) - match = re.search(pattern, text, re.DOTALL) - if match: - ( - age, - profession, - pronouns, - interests, - personality, - secrets, - ) = match.groups() - return { - "name": name, - "age": age, - "profession": profession.strip(), - "pronouns": pronouns.strip(), - "interests": interests.strip(), - "personality": personality.strip(), - "secrets": secrets.strip(), - } - raise Exception(f"No information found for {name}.") - - -def parse_conversation( - convo_text: str, names: Tuple[Optional[str], Optional[str]] -) -> List[Dict[str, str]]: - convo_text = convo_text.replace("left the conversation,", "left the conversation.") - turns = re.split(r"Turn #\d+[:\n]", convo_text) - parsed_conversation: List[Dict[str, str]] = [] - - for turn in turns: - for name in names: - if name and name in turn: - dialogue = turn.split(":", 1)[1].strip() if ":" in turn else turn - parsed_conversation.append({"speaker": name, "dialogue": dialogue}) - break - return parsed_conversation[1:] # Skip the first empty string from split - - -raw_dataset: List[Tuple[str, str]] = read_json_files() -processed_dataset: List[Dict[str, Any]] = [] -player_annotated_data: DefaultDict[str, List[Dict[str, Any]]] = defaultdict(list) -pks: List[str] = [] - - -for data in raw_dataset: - try: - pk = data[0] - rewards_prompt = data[1] - names = find_names(rewards_prompt) - personal_info = { - name: parse_personal_info(rewards_prompt, name) for name in names - } - social_goal = {name: parse_social_goal(rewards_prompt, name) for name in names} - parsed_conversation = parse_conversation(rewards_prompt, names) - scenario = parse_scenario(rewards_prompt) - assert len(parsed_conversation) > 0 - processed_dataset.append( - { - "scenario": scenario, - "names": names, - "personal_info": personal_info, - "social_goal": social_goal, - "parsed_conversation": parsed_conversation, - } - ) - pks.append(pk) - except Exception as e: - print(e, f"; pk: {data[0]}") - - -class C(BaseConstants): - NAME_IN_URL: str = "sotopia_official_study" - PLAYERS_PER_GROUP: None = None - NUM_ROUNDS: int = 1 - - -class Subsession(BaseSubsession): - def creating_session(self) -> None: - self.session.vars["conversation"] = ["hello", "world", "darling"] - - -class Group(BaseGroup): - pass - - -data_queue: Dict[str, List[str]] = defaultdict(list) - - -class Player(BasePlayer): - def pop_queue(self) -> None: - assert self.prolific_id in data_queue[self.pk] - data_queue[self.pk].remove(self.prolific_id) - - def push_queue(self) -> Tuple[str, str, str]: - for pk in pks: - # if self.prolific_id not in data_queue[pk] and ((len(data_queue[pk]) < 1 and pk not in double_pk_list) or (len(data_queue[pk]) < 2 and pk in double_pk_list)): - if self.prolific_id not in data_queue[pk] and len(data_queue[pk]) < 2: - data_queue[pk].append(self.prolific_id) - selected_pk = pk - selected_data = json.dumps(processed_dataset[pks.index(pk)]) - return selected_data, selected_pk, "no" - return json.dumps(processed_dataset[0]), pks[0], "yes" - - pk = models.StringField( - label="pk", - ) - - skip_eval = models.StringField( - label="skip_eval", - ) - - prolific_id = models.StringField( - label="Prolific ID", - ) - - believability_1 = models.IntegerField( - widget=widgets.RadioSelect, - label="believability (0-10)", - max=10, - min=0, - choices=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], - ) - believability_reasoning_1 = models.LongStringField( - label="Reasoning for believability", - ) - relationship_1 = models.IntegerField( - widget=widgets.RadioSelect, - label="relationship (-5-5)", - max=-5, - min=5, - choices=[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5], - ) - relationship_reasoning_1 = models.LongStringField( - label="Reasoning for relationship", - ) - knowledge_1 = models.IntegerField( - widget=widgets.RadioSelect, - label="knowledge (0-10)", - max=10, - min=0, - choices=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], - ) - knowledge_reasoning_1 = models.LongStringField( - label="Reasoning for knowledge", - ) - secret_1 = models.IntegerField( - widget=widgets.RadioSelect, - label="secret (-10-0)", - max=0, - min=-10, - choices=[-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0], - ) - secret_reasoning_1 = models.LongStringField( - label="Reasoning for secret", - ) - social_rules_1 = models.IntegerField( - widget=widgets.RadioSelect, - label="social_rules (-10-0)", - max=0, - min=-10, - choices=[-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0], - ) - social_rules_reasoning_1 = models.LongStringField( - label="Reasoning for social_rules", - ) - financial_and_material_benefits_1 = models.IntegerField( - widget=widgets.RadioSelect, - label="financial_and_material_benefits (-5-5)", - max=5, - min=-5, - choices=[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5], - ) - financial_and_material_benefits_reasoning_1 = models.LongStringField( - label="Reasoning for financial_and_material_benefits", - ) - goal_1 = models.IntegerField( - widget=widgets.RadioSelect, - label="goal (0-10)", - max=10, - min=0, - choices=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], - ) - goal_reasoning_1 = models.LongStringField( - label="Reasoning for goal", - ) - - believability_2 = models.IntegerField( - widget=widgets.RadioSelect, - label="believability (0-10)", - max=10, - min=0, - choices=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], - ) - believability_reasoning_2 = models.LongStringField( - label="Reasoning for believability", - ) - relationship_2 = models.IntegerField( - widget=widgets.RadioSelect, - label="relationship (-5-5)", - max=-5, - min=5, - choices=[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5], - ) - relationship_reasoning_2 = models.LongStringField( - label="Reasoning for relationship", - ) - knowledge_2 = models.IntegerField( - widget=widgets.RadioSelect, - label="knowledge (0-10)", - max=10, - min=0, - choices=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], - ) - knowledge_reasoning_2 = models.LongStringField( - label="Reasoning for knowledge", - ) - secret_2 = models.IntegerField( - widget=widgets.RadioSelect, - label="secret (-10-0)", - max=0, - min=-10, - choices=[-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0], - ) - secret_reasoning_2 = models.LongStringField( - label="Reasoning for secret", - ) - social_rules_2 = models.IntegerField( - widget=widgets.RadioSelect, - label="social_rules (-10-0)", - max=0, - min=-10, - choices=[-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0], - ) - social_rules_reasoning_2 = models.LongStringField( - label="Reasoning for social_rules", - ) - financial_and_material_benefits_2 = models.IntegerField( - widget=widgets.RadioSelect, - label="financial_and_material_benefits (-5-5)", - max=5, - min=-5, - choices=[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5], - ) - financial_and_material_benefits_reasoning_2 = models.LongStringField( - label="Reasoning for financial_and_material_benefits", - ) - goal_2 = models.IntegerField( - widget=widgets.RadioSelect, - label="goal (0-10)", - max=10, - min=0, - choices=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], - ) - goal_reasoning_2 = models.LongStringField( - label="Reasoning for goal", - ) - data = models.LongStringField() - - -# FUNCTIONS -# PAGES -class SotopiaEval(Page): - @staticmethod - def vars_for_template(player: Player) -> Dict[str, Any]: - assert len(processed_dataset) == len(pks) - data = json.loads(player.data) - for d in data["parsed_conversation"]: - if '"' in d["dialogue"]: - d["turn"] = f"{d['speaker']} said: {d['dialogue']}" - else: - d["turn"] = d["dialogue"] - - turn_list = zip( - [i + 1 for i in range(len(data["parsed_conversation"]))], - [d["turn"] for d in data["parsed_conversation"]], - ) - scenario = data["scenario"] - names = data["names"] - personal_info_1 = data["personal_info"][names[0]] - social_goal_1 = data["social_goal"][names[0]] - personal_info_2 = data["personal_info"][names[1]] - social_goal_2 = data["social_goal"][names[1]] - return { - "scenario": scenario, - "turn_list": turn_list, # 'string_list' is the key for the list of strings - "personal_info_1": personal_info_1, - "personal_info_2": personal_info_2, - "social_goal_1": social_goal_1, - "social_goal_2": social_goal_2, - } - - @staticmethod - def is_displayed(player: Player) -> Any: - if player.skip_eval == "yes": - return False - participant = player.participant - current_time = time.time() - return current_time < participant.expiry - - @staticmethod - def before_next_page(player: Player, timeout_happened: bool) -> None: - if timeout_happened: - print("timeout before next page") - print("length for current data: {}".format(len(processed_dataset))) - player.pop_queue() - print("length after timeout: {}".format(len(processed_dataset))) - else: - print( - "finish one successfully, still have {}".format(len(processed_dataset)) - ) - - form_model = "player" - form_fields = [ - "believability_1", - "believability_reasoning_1", - "relationship_1", - "relationship_reasoning_1", - "knowledge_1", - "knowledge_reasoning_1", - "secret_1", - "secret_reasoning_1", - "social_rules_1", - "social_rules_reasoning_1", - "financial_and_material_benefits_1", - "financial_and_material_benefits_reasoning_1", - "goal_1", - "goal_reasoning_1", - "believability_2", - "believability_reasoning_2", - "relationship_2", - "relationship_reasoning_2", - "knowledge_2", - "knowledge_reasoning_2", - "secret_2", - "secret_reasoning_2", - "social_rules_2", - "social_rules_reasoning_2", - "financial_and_material_benefits_2", - "financial_and_material_benefits_reasoning_2", - "goal_2", - "goal_reasoning_2", - ] - timeout_seconds = 1200 - - -class SotopiaEvalInstruction(Page): - form_model = "player" - form_fields = ["prolific_id"] - - @staticmethod - def before_next_page(player: Player, timeout_happened: bool) -> None: - player.data, player.pk, player.skip_eval = player.push_queue() - print(data_queue) - player.participant.expiry = time.time() + 10 - - -page_sequence = [SotopiaEvalInstruction, SotopiaEval] diff --git a/human_eval/sotopia_official_study/official_study_data/example_data.json b/human_eval/sotopia_official_study/official_study_data/example_data.json deleted file mode 100644 index d91e4188a..000000000 --- a/human_eval/sotopia_official_study/official_study_data/example_data.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "pk": "01H7VM65KGGY7842XGE5A7PEK1", - "environment": "01H7VFHNNYH3W0VRWVY178K2TK", - "tag": "gpt-4_gpt-3.5-turbo_v0.0.1_clean", - "models": [ - "gpt-4", - "gpt-4", - "gpt-3.5-turbo" - ], - "rewards_prompt": "Prompt after formatting:\nHere is the context of this interaction:\nScenario: Two people in a romantic relationship are on a vacation\nParticipants: Sasha Ramirez and Hendrick Heinz\nSasha Ramirez's background: Sasha Ramirez is a 42-year-old Woman Police Officer. She/her pronouns. Sasha Ramirez, a dedicated police officer, brings her commitment to protect the community even at home, nurturing an impressive home garden. Personality and values description: Sasha Ramirez, outgoing yet anxious, values hedonism and authority. Her decisions are guided by logical considerations. Sasha's secrets: She covered up a crime her brother committed.\nHendrick Heinz's background: Hendrick Heinz is a 54-year-old Man Chef. He/him pronouns. Hendrick Heinz hosts monthly wine tasting nights with his peers. Personality and values description: Hendrick Heinz, though somewhat impulsive, values hedonism and conformity. He combines practicality with decisiveness in decision-making. Hendrick's secrets: Faked his culinary credentials to secure prestigious employment\nSasha Ramirez's goal: Share bed and sleep together (Extra information: you have been sharing the bed for a few nights but the other person is not sleeping well)\nHendrick Heinz's goal: Sleep in a separate bed to get a good night's sleep but also maintain the intimacy with your partner (Extra information: you have been experiencing back pain and needs a firmer mattress to sleep on.)\nTurn #1\nSasha Ramirez said: \"Hendrick, darling, I've noticed you've been tossing and turning in bed the last few nights. Is everything okay? We're here on vacation, and I want us both to be relaxed and rested. Perhaps we can figure out a way to make the bed more comfortable for you.\"\nTurn #2\nHendrick Heinz said: \"Thank you for your concern, Sasha. I have been experiencing some back pain lately, and it's been affecting my sleep. I think a firmer mattress would help me get a good night's rest. Maybe we can look into renting a separate bed for me during our vacation, so we can both be comfortable and still maintain our intimacy?\"\nTurn #3\nSasha Ramirez said: \"I understand your discomfort, Hendrick. But I really enjoy our closeness at night. How about we try this instead - we could rent a firmer mattress for our bed? That way, we can still share the same bed and hopefully, it would alleviate your back pain. What do you think?\"\nTurn #4\nHendrick Heinz said: \"I appreciate your suggestion, Sasha. Sharing the same bed is indeed important for our intimacy. However, I'm concerned that even with a firmer mattress, my back pain may still persist. I think it would be best for both of us if I try sleeping in a separate bed for a few nights to see if it helps alleviate my discomfort. This way, I can get the rest I need, and we can still enjoy our time together during the day. What do you think?\"\nTurn #5\nSasha Ramirez said: \"Hendrick, I understand your concerns and I want you to feel comfortable. However, I want you to remember that it's important for us to maintain our intimacy. How about we try the firmer mattress for a few nights and if it doesn't help, we can then consider the separate beds? I just want us to make the most out of this vacation together, day and night. Can we agree on that?\"\nTurn #6\nHendrick Heinz said: \"I understand your concerns, Sasha, and I appreciate your desire to maintain our intimacy. Let's try the firmer mattress for a few nights as you suggested. I'm willing to give it a chance and see if it helps alleviate my back pain. If it doesn't show any improvement, we can then consider the separate beds. I want us to enjoy our vacation together, both day and night.\"\nTurn #7\nSasha Ramirez said: \"Thank you, Hendrick. I'm glad we're on the same page. Let's give the firmer mattress a try. And remember, if you're still struggling with your back pain, we can look into other options. The most important thing is that we're both comfortable and can enjoy this vacation together.\"\nTurn #8," -} diff --git a/human_eval/sotopia_pilot_study/SotopiaEval.html b/human_eval/sotopia_pilot_study/SotopiaEval.html deleted file mode 100644 index 261d9cb8d..000000000 --- a/human_eval/sotopia_pilot_study/SotopiaEval.html +++ /dev/null @@ -1,906 +0,0 @@ -{{ block title }}Social Evaluation{{ endblock }} {{ block content }} - -
-
-
-

Annotation Example

-
- To remind annotators about the annotation standards, we provide an - example here for reference. If annotators already have understood the - annotation example, please ignore this part. -
-
-
-
- Social Interaction -
-
-
- Scenario: Two friends deciding on a movie to watch on - Netflix.

- Participants: Donovan Reeves and Noah Davis -

- Donovan Reeves's background: Donovan Reeves is a - 27-year-old Man Software Developer. He/him pronouns. Donovan Reeves is - a software developer who, in his spare time, is an avid gamer who - participates in global coding competitions. Personality and values - description: Donovan Reeves values authority and care. Even though - he's outgoing and hardworking, he can be somewhat moody. His - decision-making style varies according to the situation at hand. - Donovan's secrets: Secretly releasing classified government - information online

- Noah Davis's background: Noah Davis is a 40-year-old - Man Coach. He/him pronouns. Noah Davis has a swimming pool. - Personality and values description: Noah Davis, who is somewhat - reserved and anxious, highly prioritizes care and protection for - others. He is cautious when making decisions. Noah's secrets: He has a - secret identity as a stand-up comedian.

- Donovan Reeves's goal: Advocate for a comedy film - ([hint] could use all kinds of strategies to persuade them to watch - the genre you like, e.g., offering them a boba tea)

- Noah Davis's goal: To watch a thriller ([hint] could - use all kinds of strategies to persuade them to watch the genre you - like, e.g., offering them a boba tea) -
-
-
- Episode -
-
-
- Turn #1 -
- Donovan Reeves said: "Hey Noah! How about we watch a comedy film - tonight on Netflix?" -

- Turn #2 -
- Noah Davis said: "Hey Donovan! How about we watch a thriller film - tonight on Netflix instead? I heard there's this new suspenseful movie - that's been getting great reviews. It's called 'The Silent Witness'. - It's about a detective trying to solve a mysterious murder case. I - think it would be really exciting and keep us on the edge of our - seats!" -

- Turn #3 -
- Donovan Reeves said: "That sounds like a really intense movie, Noah! - But I was thinking we could use a good laugh tonight. Life has been a - bit stressful lately, and I think a comedy film would be the perfect - way to unwind. Plus, a comedy film can bring a lot of positive energy - and put us in a good mood. What do you think?" -

- Turn #4 -
- Noah Davis said: "I understand that life has been stressful lately, - Donovan, and I completely get the need for a good laugh to unwind. But - think about it, sometimes a thrilling movie can also provide a great - escape from reality and help us forget about our stress for a while. - 'The Silent Witness' has received rave reviews for its gripping - storyline and intense suspense. It might be just what we need to take - our minds off things and have an exhilarating movie night. What do you - say?" -

- Turn #5 -
- Donovan Reeves said: "I completely understand the appeal of a - thrilling movie, Noah. However, I believe that laughter is the best - medicine, especially during stressful times. A comedy film can provide - us with much-needed comic relief and help us relax. Plus, it's always - great to share some laughs with a good friend like you. How about - giving the comedy genre a chance tonight?" -

- Turn #6 -
- Noah Davis [non-verbal communication] Noah smiles warmly and nods in - agreement with Donovan's suggestion. -

- Turn #7 -
- Donovan Reeves said: "How about this, Noah? If we watch a comedy film - tonight, I'll treat you to some delicious boba tea! We can enjoy the - movie together with a refreshing and tasty beverage. What do you say?" -

- Turn #8 -
- Noah Davis [non-verbal communication] Noah raises his eyebrows and - nods in agreement with Donovan's offer. -

- Turn #9 -
- Donovan Reeves said: "Great! I'm glad you're on board, Noah. Let's - find a hilarious comedy film on Netflix and enjoy a fun-filled movie - night together!" -

- Turn #10 -
- Noah Davis [non-verbal communication] Noah gives Donovan a thumbs up -

- -
-
-
- Example Social Interaction Ratings -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Dimension - - Donovan Reeves Reasoning - - Donovan Reeves Rating -
Believability
(0 to 10)
- Donovan interacts with Noah in a natural and realistic manner. - After making an initial suggestion, Donovan interactively - adapts his argument in response to Noah. -

-
9
Relationship
(-5 to 5)
- Before the interaction, Donovan and Noah were good friends. - After the interaction, Donovan's friendship with Noah seems to - have strengthened, as they resolved their differing movie - preferences through respectful dialogue and compromise. - Donovan's offer to buy Noah tea reinforces their - friendship.

-
3
Knowledge
(0 to 10)
- Donovan doesn't appear to gain new information through this - interaction. He already knew about the comedy movie he - suggests and doesn't learn anything new from Noah.

-
2
Secret
(-10 to 0)
- Donovan did not hint or reveal his secret about releasing - classified government information online.

-
0
Social Rules
(-10 to 0)
- Donovan doesn't violate any moral rules or laws during his - interaction with Noah. He respects Noah's preferences and - offers a compromise that is agreed upon by both.

-
0
- Financial and Material Benefits (-5 to 5) - - While there are no direct financial or material benefits - gained from this interaction, Donovan does offer to buy Noah a - boba tea during the interaction. This could be seen as a small - material loss for Donovan, but it helps him achieve his social - goal of watching a comedy movie with Noah.

-
-1
Goal (0 to 10) - Donovan's goal is to persuade Noah to watch a comedy film. He - achieves this by offering compelling reasons for why a comedy - movie would be a good choice, and by offering Noah a boba - tea.

-
9
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Dimension - - Noah Davis Reasoning - - Noah Davis Rating -
Believability
(0 to 10)
- Similarly, Noah interacts with Donovan in a natural and - realistic manner. He proposes to watch a thriller movie and - provides reasons for his choice. Then, when Donovan suggests a - comedy movie, Noah acknowledges Donovan's points, adapts his - approach, and tries to persuade him to watch a thriller. -

-
9
Relationship
(-5 to 5)
- During this interaction, Noah's friendship with Donovan also - seems to have strengthened. Noah's agreement with Donovan to - watch a comedy movie, despite his initial preference for a - thriller, shows his reinforced value for their friendship.

-
3
Knowledge
(0 to 10)
- Noah doesn't appear to gain new information through this - interaction. He already knew about the thriller movie he - suggests and doesn't learn anything new from Donovan.

-
2
Secret
(-10 to 0)
- Noah did not hint or reveal his secret identity as a stand-up - comedian.

-
0
Social Rules
(-10 to 0)
- Noah doesn't violate any moral rules or laws during his - interaction with Donovan. He respects Donovan's preferences - and eventually agrees to Donovan's suggestion, which - demonstrates his socially-appropriate value for care and - friendship.

-
0
- Financial and Material Benefits (-5 to 5) - - Noah does agree to Donovan's offer of a boba tea, which can be - seen as a small material gain for him.

-
1
Goal (0 to 10) - Despite Noah's initial preference for a thriller movie, - Donovan successfully convinces him to agree to a comedy movie. - Therefore, he doesn't achieve his goal of watching a thriller - movie.

-
3
-
-
-
-
-
- -
-

- Time left to complete this page: - - - -

-
- -
-
-
-

Data Annotation

-
Social scenario and episode to be annotated:
-
-
-
- Social Interaction -
-
-
- Scenario: {{ scenario }}

- - Participants: {{ personal_info_1.name }} and {{ - personal_info_2.name }}

- - {{ personal_info_1.name }}'s background: {{ - personal_info_1.name}} is a {{ personal_info_1.age }}-year-old {{ - personal_info_1.profession }}. {{ personal_info_1.pronouns }} - pronouns. {{ personal_info_1.name }} is {{ personal_info_1.interests - }}. Personality and values description: {{ personal_info_1.personality - }}. {{ personal_info_1.name }}'s secrets: {{ personal_info_1.secrets - }}.

- - {{ personal_info_2.name }}'s background: {{ - personal_info_2.name}} is a {{ personal_info_2.age }}-year-old {{ - personal_info_2.profession }}. {{ personal_info_2.pronouns }} - pronouns. {{ personal_info_2.name }} is {{ personal_info_2.interests - }}. Personality and values description: {{ personal_info_2.personality - }}. {{ personal_info_2.name }}'s secrets: {{ personal_info_2.secrets - }}.

- - {{ personal_info_1.name }}'s goal: {{ social_goal_1 - }}

- {{ personal_info_2.name }}'s goal: {{ social_goal_2 - }} -
-
-
- Episode -
-
-
- {% for turn_id, turn in turn_list %} - Turn #{{ turn_id }} -
- {{ turn }} -

- {% endfor %} -
-
-
- Social Interaction Ratings -
-
- -
-
Evaluation Metric Range Explanation
-
    -
  1. - Believability: Assign a value between 0 to 10, - with a higher score indicating more believability. -
  2. -
  3. - Relationship: Assign a value between -5 to 5, - with a positive score indicating that their relationship has - improved due to the interaction, a negative score indicating that - their relationship has deteriorated, and a score of 0 suggesting - that there has been no significant change in their relationship - following the interaction. -
  4. -
  5. - Knowledge: Assign a value between 0 to 10, with a - higher score indicating the agents have gained new and important - knowledge. -
  6. -
  7. - Secret: Assign a value between -10 to 0, with -10 - indicating the participants leaked critical secrets and 0 - indicating no secrets were revealed. -
  8. -
  9. - Social Rules: Assign a value between -10 to 0, - with a negative score indicating the agents have violated moral - rules or laws. -
  10. -
  11. - Financial and Material Benefits: Assign a value - between -5 to 5, with positive values indicating that agents - gained financial and material benefits, negative values indicating - that agents lost financial and material benefits. -
  12. -
  13. - Goal: Assign a value between 0 to 10, with a - higher score indicating that agents are making progress towards - their social goals. -
  14. -
-
Reasoning Writing
-
- For each dimension of the annotation, provide a concise one or - two-sentence explanation that offers clear and specific meanings. -
- - - - - - - - - - - - - - {% for choice in form.believability_1 %} - - {% endfor %} - - - - - {% for choice in form.relationship_1 %} - - {% endfor %} - - - - - {% for choice in form.knowledge_1 %} - - {% endfor %} - - - - - {% for choice in form.secret_1 %} - - {% endfor %} - - - - - {% for choice in form.social_rules_1 %} - - {% endfor %} - - - - - {% for choice in form.financial_and_material_benefits_1 %} - - {% endfor %} - - - - - {% for choice in form.goal_1 %} - - {% endfor %} - - -
- Dimension - - {{ personal_info_1.name }} Reasoning - - {{ personal_info_1.name }} Rating -
Believability
(0 to 10)
{{ form.believability_reasoning_1}} - -
Relationship
(-5 to 5)
{{ form.relationship_reasoning_1}} - -
Knowledge
(0 to 10)
{{ form.knowledge_reasoning_1}} - -
Secret
(-10 to 0)
{{ form.secret_reasoning_1}} - -
Social Rules
(-10 to 0)
{{ form.social_rules_reasoning_1}} - -
- Financial and Material Benefits (-5 to 5) - {{ form.financial_and_material_benefits_reasoning_1}} - -
Goal (0 to 10){{ form.goal_reasoning_1 }} - -
-
- -
- - - - - - - - - - - - - {% for choice in form.believability_2 %} - - {% endfor %} - - - - - {% for choice in form.relationship_2 %} - - {% endfor %} - - - - - {% for choice in form.knowledge_2 %} - - {% endfor %} - - - - - {% for choice in form.secret_2 %} - - {% endfor %} - - - - - {% for choice in form.social_rules_2 %} - - {% endfor %} - - - - - {% for choice in form.financial_and_material_benefits_2 %} - - {% endfor %} - - - - - {% for choice in form.goal_2 %} - - {% endfor %} - - -
- Dimension - - {{ personal_info_2.name }} Reasoning - - {{ personal_info_2.name }} Rating -
Believability
(0 to 10)
{{ form.believability_reasoning_2}} - -
Relationship
(-5 to 5)
{{ form.relationship_reasoning_2}} - -
Knowledge
(0 to 10)
{{ form.knowledge_reasoning_2}} - -
Secret
(-10 to 0)
{{ form.secret_reasoning_2}} - -
Social Rules
(-10 to 0)
{{ form.social_rules_reasoning_2}} - -
- Financial and Material Benefits (-5 to 5) - {{ form.financial_and_material_benefits_reasoning_2}} - -
Goal (0 to 10){{ form.goal_reasoning_2 }} - -
-
-
-
-
- -
{{ next_button }}
-
- -
-

- Time left to complete this page: - - - -

-
- - - -{{ endblock }} diff --git a/human_eval/sotopia_pilot_study/SotopiaEvalInstruction.html b/human_eval/sotopia_pilot_study/SotopiaEvalInstruction.html deleted file mode 100644 index 1d56b74fd..000000000 --- a/human_eval/sotopia_pilot_study/SotopiaEvalInstruction.html +++ /dev/null @@ -1,931 +0,0 @@ -{% load static %} {% load otree_tags %} {{ block title }}Social Evaluation -Instruction{{ endblock }} {{ block content }} -
-
-
-

Prolific ID

-
- Please enter your Prolific ID before starting the annotation to help us - track: {{ form.prolific_id }} -
-
-

Annotation Guide

-
    -
  1. - Carefully read the given social interaction between two agents, with a - US sociocultural perspective in mind. -
  2. -
  3. - Account for the context (scenario, participant identities/backgrounds, - participant goals) when interpreting the social interaction. -
  4. -
  5. - Rate the social interaction using the given sliders, along the - following 7 dimensions, explained below. -
  6. -
-
-
Dimensions and scales for evaluating social interactions:
-
-

Believability

-

- Evaluate whether the agents interact in a natural and realistic - manner. For example, do agents confuse their identities? Do agents - repeat others' words/actions without solid reasons? - Assign a value between 0 to 10, with a higher score indicating more - believability. -

-

[We provide some annotation examples below]

- - - - - - - - - - - - - - - - - - - - - - -
Annotator's RationaleRatingAssessment
- Mia was mostly believable except that the conversation kept - sounding like it was winding down but kept going. Weirdly so. Liam - repeats what Ethan said once. - 8 - This is a good annotation example. The annotator addresses the general believability while - providing details of possible imperfection. -
Liam repeats what Ethan said once.1 - This is a bad annotation example. Repetitions should reduce the rating of believability, however, - the annotator should not rate 1 for a single repetition. -
- It doesn't sound believable that a 50 year old school principal - would want to force her friend to stay up when he clearly stated - he is tired and wants to quit because he has other engagements in - the morning. - 3 - This is a bad annotation example. Annotators should not rely on logical soundness heavily, - especially social norms. Logical inconsistency should reduce the - rating by at most 4. -
-
-
-

Relationship

-

- Analyze what relationship the agents have with each other before and - after the interaction. Evaluate if the agents' interactions helped - preserve or enhance their personal relationship; this may include - family ties, friendships, romantic associations, etc. Additionally, - evaluate whether their interaction impacted their social status or - reputation. - Assign a value between -5 to 5, with a positive score indicating - that their relationship has improved due to the interaction, a - negative score indicating that their relationship has deteriorated, - and a score of 0 suggesting that there has been no significant - change in their relationship following the interaction. -

-

[We provide some annotation examples below]

- - - - - - - - - - - - - - - - - - - - - - -
Annotator's RationaleRatingAssessment
- Eli revealed his secret affair and affirmed honesty in their - relationship. - 3 - This is a good annotation example. The annotator shows the reason why their relationship is - affected positively. -
They reached a mutual agreement.5 - This is a bad annotation example. 5 means the relationship improve significantly (e.g., from - strangers to best friends). In this case, the annotator should - rate 0 or 1. -
- The situation is uncomfortable because both sides refuse to yield. - Isabelle is annoying Ava, although she remains respectful. - -5 - This is a bad annotation example. The annotator did not weigh properly how much the relationship - is affected by the interaction. -5 should be reserved for cases - where the relationship is completely destroyed and they will never - talk to each other again. -
-
-
-

Knowledge

-

- Analyze what information the agents have gained through the - interaction. Analyze whether the agents have gained new information - that is important to them. - Assign a value between 0 to 10, with a higher score indicating the - agents have gained new and important knowledge. -

-

[We provide some annotation examples below]

- - - - - - - - - - - - - - - - - -
Annotator's RationaleRatingAssessment
- He learned specific details about the car's condition, recent - maintenance, and its mileage, which informed his purchase - decision. - 10 - This is a bad annotation example. The annotator overestimated the knowledge gain. Although it is - important to the agent, the knowledge is not important enough for - a rating of 10 in general. -
No new knowledge was gained.0 - This is a good annotation example. In the case when no knowledge is gained, rate 0. -
-
-
-

Secret

-

- Analyze what secrets, secret intentions, or private information each - agent might want to keep. Analyze whether they successfully keep their - secrets. - Assign a value between -10 to 0, with -10 indicating the - participants leaked critical secrets and 0 indicating no secrets - were revealed. -

-

[We provide some annotation examples below]

- - - - - - - - - - - - - - - - - - - - - - -
Annotator's RationaleRatingAssessment
Eli does not reveal his personal secret.0 - This is a good annotation example. In the case when no secret is revealed, rate 0. -
- Ethan reveal his secretive intention in buying John a birthday - gift. - -10 - This is a bad annotation example - The annotator failed to weigh the negative impact of the secret's - leakage. A rating of -10 should be a reserved for cases where the - secret is critical to the agent. -
- Mia totally revealed the secret that she has committed murder. - -6 - This is a bad annotation example. The annotator did not weigh the importance of the secret. The - most important secret should be rated -10. -
-
-
-

Social Rules

-

- Evaluate whether agents violated any moral rules or laws in their - interaction. - Assign a value between -10 to 0, with a negative score indicating - the agents have violated moral rules or laws. -

-

[We provide some annotation examples below]

- - - - - - - - - - - - - - - - - - - - - - -
Annotator's RationaleRatingAssessment
No social rules were broken.0 - This is a good annotation example. In the case when no social is gained, rate 0. -
- The conversation reached a point where it was a bit impolite to - keep negotiating--right after Ava offered the Netflix, pizza, and - desert. Ethan should have given in, out of respect, at that point. - -1 - This is a good annotation example. Impoliteness in this case is a minor social rule-break. The - annotator addressed this by giving a minor negative rating. -
- Oliver was not fair while dividing possessions among them. He took - more items than his fair share. - -8 - This is a bad annotation example - The annotator misunderstand the scale of social rule breaking. -10 - means a felonious breaking of law. -
-
-
-

Financial and Material Benefits

-

- Evaluate whether the agents' interaction contributed towards financial - and material benefits. Analyze what the agent would gain or lose after - the interactions. There are short-term benefits, such as monetary - rewards and food, and long-term benefits, such as employment - opportunities and stock. - Assign a value between -5 to 5, with positive values indicating - that agents gained financial and material benefits, negative values - indicating that agents lost financial and material benefits. -

-

[We provide some annotation examples below]

- - - - - - - - - - - - - - - - - - - - - - -
Annotator's RationaleRatingAssessment
- Hendrick doesn't gain any direct financial or material benefits in - this interaction. - 0 - This is a good annotation example. In the case when no financial gain incurred, rate 0. -
- Ethan gain a material benefit from Ava during this interaction. He - got a Italian pizza and dessert. - 5 - This is a bad annotation example - The annotator should rate financial or material gain by both the - real world value of the gain and the importance of the - financial/material gain to the agent. A pizza is not huge - financial gain and should only worth 1 point. -
- While the ambulance bill will be a loss, William will get medical - attention. And he knew the bill might have to be incurred. - 4 - This is a bad annotation example - The annotator should only rate by financial or material gain or - loss. Other values like physical or mental health is not included. -
-
-
-

Goal

-

- Re-read each agents' social goals. Analyze the extent to which agents - have managed to achieve these goals. - Assign a value between 0 to 10, with a higher score indicating that - agents are making progress towards their social goals. -

-

[We provide some annotation examples below]

- - - - - - - - - - - - - - - - - - - - - - -
Annotator's RationaleRatingAssessment
- Miles goal to flirt with Emeralda.he attracted and want to build a - romantic relationship with her. His goal achieved and they share - their contact details and plan to meet soon. - 9 - This is a good annotation example. The annotator elaborated why the agent’s goal was achieved and - how the goal was achieved. -
Naomi does not achieve her goal of sharing the blanket.2 - This is a bad annotation example. In the case when the goal is not achieved, rate 0. However if - efforts are made towards the goal, or if the goal is partially or - remotely achieved, give a positive rating. -
Miles bought the BMW at his target price.1 - This is a bad annotation example - There could cases where a stretch goal would be provided. In this - case, it is “trying to get the lowest price possible.” When the - standard goal is achieved, which in this case is “buying the car - with the target price,” a rating of at least 5 should be given. -
-
-
-
-
-
Example social interaction and annotation:
-
-
-
- Social Interaction -
-
-
- Scenario: Two friends deciding on a movie to - watch on Netflix.

- Participants: Donovan Reeves and Noah Davis -

- Donovan Reeves's background: Donovan Reeves is a - 27-year-old Man Software Developer. He/him pronouns. Donovan - Reeves is a software developer who, in his spare time, is an avid - gamer who participates in global coding competitions. Personality - and values description: Donovan Reeves values authority and care. - Even though he's outgoing and hardworking, he can be somewhat - moody. His decision-making style varies according to the situation - at hand. Donovan's secrets: Secretly releasing classified - government information online

- Noah Davis's background: Noah Davis is a - 40-year-old Man Coach. He/him pronouns. Noah Davis has a swimming - pool. Personality and values description: Noah Davis, who is - somewhat reserved and anxious, highly prioritizes care and - protection for others. He is cautious when making decisions. - Noah's secrets: He has a secret identity as a stand-up comedian. -

- Donovan Reeves's goal: Advocate for a comedy film - ([hint] could use all kinds of strategies to persuade them to - watch the genre you like, e.g., offering them a boba tea) -

- Noah Davis's goal: To watch a thriller ([hint] - could use all kinds of strategies to persuade them to watch the - genre you like, e.g., offering them a boba tea) -
-
-
- Episode -
-
-
- Turn #1 -
- Donovan Reeves said: "Hey Noah! How about we watch a comedy film - tonight on Netflix?" -

- Turn #2 -
- Noah Davis said: "Hey Donovan! How about we watch a thriller film - tonight on Netflix instead? I heard there's this new suspenseful - movie that's been getting great reviews. It's called 'The Silent - Witness'. It's about a detective trying to solve a mysterious - murder case. I think it would be really exciting and keep us on - the edge of our seats!" -

- Turn #3 -
- Donovan Reeves said: "That sounds like a really intense movie, - Noah! But I was thinking we could use a good laugh tonight. Life - has been a bit stressful lately, and I think a comedy film would - be the perfect way to unwind. Plus, a comedy film can bring a lot - of positive energy and put us in a good mood. What do you think?" -

- Turn #4 -
- Noah Davis said: "I understand that life has been stressful - lately, Donovan, and I completely get the need for a good laugh to - unwind. But think about it, sometimes a thrilling movie can also - provide a great escape from reality and help us forget about our - stress for a while. 'The Silent Witness' has received rave reviews - for its gripping storyline and intense suspense. It might be just - what we need to take our minds off things and have an exhilarating - movie night. What do you say?" -

- Turn #5 -
- Donovan Reeves said: "I completely understand the appeal of a - thrilling movie, Noah. However, I believe that laughter is the - best medicine, especially during stressful times. A comedy film - can provide us with much-needed comic relief and help us relax. - Plus, it's always great to share some laughs with a good friend - like you. How about giving the comedy genre a chance tonight?" -

- Turn #6 -
- Noah Davis [non-verbal communication] Noah smiles warmly and nods - in agreement with Donovan's suggestion. -

- Turn #7 -
- Donovan Reeves said: "How about this, Noah? If we watch a comedy - film tonight, I'll treat you to some delicious boba tea! We can - enjoy the movie together with a refreshing and tasty beverage. - What do you say?" -

- Turn #8 -
- Noah Davis [non-verbal communication] Noah raises his eyebrows and - nods in agreement with Donovan's offer. -

- Turn #9 -
- Donovan Reeves said: "Great! I'm glad you're on board, Noah. Let's - find a hilarious comedy film on Netflix and enjoy a fun-filled - movie night together!" -

- Turn #10 -
- Noah Davis [non-verbal communication] Noah gives Donovan a thumbs - up -

- -
-
-
- Example Social Interaction Ratings -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Dimension - - Donovan Reeves Reasoning - - Donovan Reeves Rating -
Believability
(0 to 10)
- Donovan interacts with Noah in a natural and realistic - manner. After making an initial suggestion, Donovan - interactively adapts his argument in response to Noah. -

-
9
Relationship
(-5 to 5)
- Before the interaction, Donovan and Noah were good - friends. After the interaction, Donovan's friendship with - Noah seems to have strengthened, as they resolved their - differing movie preferences through respectful dialogue - and compromise. Donovan's offer to buy Noah tea reinforces - their friendship.

-
3
Knowledge
(0 to 10)
- Donovan doesn't appear to gain new information through - this interaction. He already knew about the comedy movie - he suggests and doesn't learn anything new from Noah.

-
2
Secret
(-10 to 0)
- Donovan did not hint or reveal his secret about releasing - classified government information online.

-
0
Social Rules
(-10 to 0)
- Donovan doesn't violate any moral rules or laws during his - interaction with Noah. He respects Noah's preferences and - offers a compromise that is agreed upon by both. -

-
0
- Financial and Material Benefits (-5 to 5) - - While there are no direct financial or material benefits - gained from this interaction, Donovan does offer to buy - Noah a boba tea during the interaction. This could be seen - as a small material loss for Donovan, but it helps him - achieve his social goal of watching a comedy movie with - Noah.

-
-1
Goal (0 to 10) - Donovan's goal is to persuade Noah to watch a comedy film. - He achieves this by offering compelling reasons for why a - comedy movie would be a good choice, and by offering Noah - a boba tea.

-
9
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Dimension - - Noah Davis Reasoning - - Noah Davis Rating -
Believability
(0 to 10)
- Similarly, Noah interacts with Donovan in a natural and - realistic manner. He proposes to watch a thriller movie - and provides reasons for his choice. Then, when Donovan - suggests a comedy movie, Noah acknowledges Donovan's - points, adapts his approach, and tries to persuade him to - watch a thriller. -

-
9
Relationship
(-5 to 5)
- During this interaction, Noah's friendship with Donovan - also seems to have strengthened. Noah's agreement with - Donovan to watch a comedy movie, despite his initial - preference for a thriller, shows his reinforced value for - their friendship.

-
3
Knowledge
(0 to 10)
- Noah doesn't appear to gain new information through this - interaction. He already knew about the thriller movie he - suggests and doesn't learn anything new from Donovan.

-
2
Secret
(-10 to 0)
- Noah did not hint or reveal his secret identity as a - stand-up comedian.

-
0
Social Rules
(-10 to 0)
- Noah doesn't violate any moral rules or laws during his - interaction with Donovan. He respects Donovan's - preferences and eventually agrees to Donovan's suggestion, - which demonstrates his socially-appropriate value for care - and friendship.

-
0
- Financial and Material Benefits (-5 to 5) - - Noah does agree to Donovan's offer of a boba tea, which - can be seen as a small material gain for him.

-
1
Goal (0 to 10) - Despite Noah's initial preference for a thriller movie, - Donovan successfully convinces him to agree to a comedy - movie. Therefore, he doesn't achieve his goal of watching - a thriller movie.

-
3
-
-
-
-
-
-
{{ next_button }}
-
-
- - - -{{ endblock }} {{ block style }} - - - -{{ endblock }} diff --git a/human_eval/sotopia_pilot_study/__init__.py b/human_eval/sotopia_pilot_study/__init__.py deleted file mode 100644 index 073cb99da..000000000 --- a/human_eval/sotopia_pilot_study/__init__.py +++ /dev/null @@ -1,380 +0,0 @@ -import json -import os -import re -from typing import Any, Dict, List, Optional, Tuple - -from otree.api import ( # type: ignore - BaseConstants, - BaseGroup, - BasePlayer, - BaseSubsession, - Page, - models, - widgets, -) - - -def read_json_files() -> List[Tuple[str, str]]: - directory: str = "./sotopia_pilot_study/pilot_study_data" - json_files: List[str] = [f for f in os.listdir(directory) if f.endswith(".json")] - all_json_data: List[Tuple[str, str]] = [] - - for file in json_files: - file_path: str = os.path.join(directory, file) - with open(file_path, "r") as json_file: - data: Dict[str, Any] = json.load(json_file) - all_json_data.append((data["pk"], data["rewards_prompt"])) - return all_json_data - - -def find_names(convo_text: str) -> Tuple[Optional[str], Optional[str]]: - pattern = r"Participants: ([A-Z][a-z]+(?:[ \'\-][A-Z][a-z]*)*) and ([A-Z][a-z]+(?:[ \'\-][A-Z][a-z]*)*)" - match = re.search(pattern, convo_text) - return (match.group(1), match.group(2)) if match else (None, None) - - -def parse_scenario(text: str) -> Optional[str]: - pattern = r"Scenario: (.*?)\n" - scenario_match = re.search(pattern, text, re.DOTALL) - return scenario_match.group(1).strip() if scenario_match else "No scenario found." - - -def parse_social_goal(text: str, name: Optional[str]) -> str: - goal_pattern = rf"{name}'s goal: (.*?)\n" - goal_match = re.search(goal_pattern, text, re.DOTALL) - return goal_match.group(1).strip() if goal_match else f"No goal found for {name}." - - -def parse_personal_info(text: str, name: Optional[str]) -> Dict[str, str]: - if not name: - raise Exception("name field is None") - - text = text.replace(" ", " ") - pattern = ( - rf"{name}'s background: {name} is a (\d+)-year-old (.*?)\. (.*?) pronouns\." - rf"(.*?)\. Personality and values description: (.*?)\. {name.split(' ')[0]}'s secrets: (.*?)(?:\.|\n)" - ) - match = re.search(pattern, text, re.DOTALL) - if match: - ( - age, - profession, - pronouns, - interests, - personality, - secrets, - ) = match.groups() - return { - "name": name, - "age": age, - "profession": profession.strip(), - "pronouns": pronouns.strip(), - "interests": interests.strip(), - "personality": personality.strip(), - "secrets": secrets.strip(), - } - raise Exception(f"No information found for {name}.") - - -def parse_conversation( - convo_text: str, names: Tuple[Optional[str], Optional[str]] -) -> List[Dict[str, str]]: - convo_text = convo_text.replace("left the conversation,", "left the conversation.") - turns = re.split(r"Turn #\d+[:\n]", convo_text) - parsed_conversation: List[Dict[str, str]] = [] - - for turn in turns: - for name in names: - if name and name in turn: - dialogue = turn.split(":", 1)[1].strip() if ":" in turn else turn - parsed_conversation.append({"speaker": name, "dialogue": dialogue}) - break - return parsed_conversation[1:] # Skip the first empty string from split - - -raw_dataset: List[Tuple[str, str]] = read_json_files() -processed_dataset: List[Dict[str, Any]] = [] -pks: List[str] = [] - -for data in raw_dataset: - try: - pk = data[0] - rewards_prompt = data[1] - names = find_names(rewards_prompt) - personal_info = { - name: parse_personal_info(rewards_prompt, name) for name in names - } - social_goal = {name: parse_social_goal(rewards_prompt, name) for name in names} - parsed_conversation = parse_conversation(rewards_prompt, names) - scenario = parse_scenario(rewards_prompt) - processed_data = { - "scenario": scenario, - "names": names, - "personal_info": personal_info, - "social_goal": social_goal, - "parsed_conversation": parsed_conversation, - } - # TODO (haofeiyu): need to add pk into the player data - processed_dataset.append(processed_data) - pks.append(pk) - except Exception as e: - print(e, f"; pk: {data[0]}") - - -class C(BaseConstants): - NAME_IN_URL = "sotopia_pilot_study" - PLAYERS_PER_GROUP = None - NUM_ROUNDS = 1 - - -class Subsession(BaseSubsession): - def creating_session(self) -> None: - self.session.vars["conversation"] = ["hello", "world", "darling"] - - -class Group(BaseGroup): - pass - - -class Player(BasePlayer): - pk = models.StringField( - label="pk", - ) - prolific_id = models.StringField( - label="Prolific ID", - ) - believability_1 = models.IntegerField( - widget=widgets.RadioSelect, - label="believability (0-10)", - max=10, - min=0, - choices=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], - ) - believability_reasoning_1 = models.LongStringField( - label="Reasoning for believability", - ) - relationship_1 = models.IntegerField( - widget=widgets.RadioSelect, - label="relationship (-5-5)", - max=-5, - min=5, - choices=[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5], - ) - relationship_reasoning_1 = models.LongStringField( - label="Reasoning for relationship", - ) - knowledge_1 = models.IntegerField( - widget=widgets.RadioSelect, - label="knowledge (0-10)", - max=10, - min=0, - choices=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], - ) - knowledge_reasoning_1 = models.LongStringField( - label="Reasoning for knowledge", - ) - secret_1 = models.IntegerField( - widget=widgets.RadioSelect, - label="secret (-10-0)", - max=0, - min=-10, - choices=[-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0], - ) - secret_reasoning_1 = models.LongStringField( - label="Reasoning for secret", - ) - social_rules_1 = models.IntegerField( - widget=widgets.RadioSelect, - label="social_rules (-10-0)", - max=0, - min=-10, - choices=[-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0], - ) - social_rules_reasoning_1 = models.LongStringField( - label="Reasoning for social_rules", - ) - financial_and_material_benefits_1 = models.IntegerField( - widget=widgets.RadioSelect, - label="financial_and_material_benefits (-5-5)", - max=5, - min=-5, - choices=[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5], - ) - financial_and_material_benefits_reasoning_1 = models.LongStringField( - label="Reasoning for financial_and_material_benefits", - ) - goal_1 = models.IntegerField( - widget=widgets.RadioSelect, - label="goal (0-10)", - max=10, - min=0, - choices=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], - ) - goal_reasoning_1 = models.LongStringField( - label="Reasoning for goal", - ) - - believability_2 = models.IntegerField( - widget=widgets.RadioSelect, - label="believability (0-10)", - max=10, - min=0, - choices=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], - ) - believability_reasoning_2 = models.LongStringField( - label="Reasoning for believability", - ) - relationship_2 = models.IntegerField( - widget=widgets.RadioSelect, - label="relationship (-5-5)", - max=-5, - min=5, - choices=[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5], - ) - relationship_reasoning_2 = models.LongStringField( - label="Reasoning for relationship", - ) - knowledge_2 = models.IntegerField( - widget=widgets.RadioSelect, - label="knowledge (0-10)", - max=10, - min=0, - choices=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], - ) - knowledge_reasoning_2 = models.LongStringField( - label="Reasoning for knowledge", - ) - secret_2 = models.IntegerField( - widget=widgets.RadioSelect, - label="secret (-10-0)", - max=0, - min=-10, - choices=[-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0], - ) - secret_reasoning_2 = models.LongStringField( - label="Reasoning for secret", - ) - social_rules_2 = models.IntegerField( - widget=widgets.RadioSelect, - label="social_rules (-10-0)", - max=0, - min=-10, - choices=[-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0], - ) - social_rules_reasoning_2 = models.LongStringField( - label="Reasoning for social_rules", - ) - financial_and_material_benefits_2 = models.IntegerField( - widget=widgets.RadioSelect, - label="financial_and_material_benefits (-5-5)", - max=5, - min=-5, - choices=[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5], - ) - financial_and_material_benefits_reasoning_2 = models.LongStringField( - label="Reasoning for financial_and_material_benefits", - ) - goal_2 = models.IntegerField( - widget=widgets.RadioSelect, - label="goal (0-10)", - max=10, - min=0, - choices=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], - ) - goal_reasoning_2 = models.LongStringField( - label="Reasoning for goal", - ) - data = models.LongStringField() - - -# FUNCTIONS -# PAGES -class SotopiaEval(Page): - @staticmethod - def vars_for_template(player: Player) -> Dict[str, Any]: - assert len(processed_dataset) == len(pks) - player_data = processed_dataset[player.id % len(processed_dataset)] - player_pk = pks[player.id % len(pks)] - player.data = json.dumps(player_data) - player.pk = player_pk - print(len(processed_dataset)) - data = json.loads(player.data) - for d in data["parsed_conversation"]: - if '"' in d["dialogue"]: - d["turn"] = f"{d['speaker']} said: {d['dialogue']}" - else: - d["turn"] = d["dialogue"] - - turn_list = zip( - [i + 1 for i in range(len(data["parsed_conversation"]))], - [d["turn"] for d in data["parsed_conversation"]], - ) - scenario = data["scenario"] - names = data["names"] - personal_info_1 = data["personal_info"][names[0]] - social_goal_1 = data["social_goal"][names[0]] - personal_info_2 = data["personal_info"][names[1]] - social_goal_2 = data["social_goal"][names[1]] - return { - "scenario": scenario, - "turn_list": turn_list, # 'string_list' is the key for the list of strings - "personal_info_1": personal_info_1, - "personal_info_2": personal_info_2, - "social_goal_1": social_goal_1, - "social_goal_2": social_goal_2, - } - - @staticmethod - def is_displayed(player: Player) -> Any: - import time - - participant = player.participant - current_time = time.time() - return current_time < participant.expiry - - form_model = "player" - form_fields = [ - "believability_1", - "believability_reasoning_1", - "relationship_1", - "relationship_reasoning_1", - "knowledge_1", - "knowledge_reasoning_1", - "secret_1", - "secret_reasoning_1", - "social_rules_1", - "social_rules_reasoning_1", - "financial_and_material_benefits_1", - "financial_and_material_benefits_reasoning_1", - "goal_1", - "goal_reasoning_1", - "believability_2", - "believability_reasoning_2", - "relationship_2", - "relationship_reasoning_2", - "knowledge_2", - "knowledge_reasoning_2", - "secret_2", - "secret_reasoning_2", - "social_rules_2", - "social_rules_reasoning_2", - "financial_and_material_benefits_2", - "financial_and_material_benefits_reasoning_2", - "goal_2", - "goal_reasoning_2", - ] - timeout_seconds = 1200 - - -class SotopiaEvalInstruction(Page): - form_model = "player" - form_fields = ["prolific_id"] - - @staticmethod - def before_next_page(player: Player, timeout_happened: bool) -> None: - import time - - player.participant.expiry = time.time() + 10 - - -page_sequence = [SotopiaEvalInstruction, SotopiaEval] diff --git a/human_eval/sotopia_pilot_study/pilot_study_data/example_data.json b/human_eval/sotopia_pilot_study/pilot_study_data/example_data.json deleted file mode 100644 index 61753c632..000000000 --- a/human_eval/sotopia_pilot_study/pilot_study_data/example_data.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "pk": "01HFCMVRXCKN0X25MAE2VK56S1", - "environment": "01H7VFHPDZVVCDZR3AARA547CY", - "agents": [ - "01H5TNE5PY896ASNX8XGQA6AE0", - "01H5TNE5P98J20AEW94XQ0KC35" - ], - "tag": "ft-mistral-7b-old-filtererd-data_gpt-3.5_clean_ruiyi_1116", - "models": [ - "gpt-4", - "localhost", - "gpt-3.5-turbo" - ], - "rewards_prompt": "Prompt after formatting:\nHere is the context of this interaction:\nScenario: Two friends participating in a charity event for children in Syria\nParticipants: Hendrick Heinz and Ethan Smith\nHendrick Heinz's background: Hendrick Heinz is a 54-year-old male chef. He/him pronouns. Hendrick Heinz hosts monthly wine tasting nights with his peers. Personality and values description: Hendrick Heinz, though somewhat impulsive, values hedonism and conformity. He combines practicality with decisiveness in decision-making. Hendrick's secrets: Faked his culinary credentials to secure prestigious employment\nEthan Smith's background: Ethan Smith is a 29-year-old male software developer. He/him pronouns. Ethan enjoys reading about new technological advancements and watching documentaries. Personality and values description: Ethan Smith is a reserved, independent thinker. Holding universalism and fairness near, he ponders deeply before making decisions. Ethan's secrets: Secretly donates to charities for underprivileged children\nHendrick Heinz's goal: Convince your friend to donate more funds to the cause (Extra information: Your friend initially planned to donate $200, but you believe they could afford to donate $500)\nEthan Smith's goal: Maintain financial stability while supporting the cause (Extra information: You only have $300 set aside for donations and other expenses, and you are not comfortable about exceeding this budget.)\nTurn #1\nHendrick Heinz said: \"Ethan, you've done so well for this cause so far and I know it's not in your character to skimp on helping those in need. But tell me, haven't we always said that real change is made in big leaps? I believe we can truly make a huge dent in the children's lives in Syria if we up the donations to $500. What do you think?\"\nTurn #2\nEthan Smith said: \"Thanks for recognizing my efforts, Hendrick. I agree that making a big impact is important, but I also believe in being financially responsible. I've already set aside $300 for donations and other expenses, and I'm not comfortable exceeding that budget. However, I'm still committed to supporting the cause and I'll find other ways to contribute within my means.\"\nTurn #3\nHendrick Heinz said: \"I appreciate your commitment to being financially responsible, Ethan. But let me ask you this, your generosity and commitment will not only change lives but also yours. By doing more, you'll become part of an elite group of people who truly made a positive difference. Besides, extending the reach of this cause is our goal after all, right? Any amount, big or small, can make a world of difference. I suggest we find a way to make this work within your budget, together we can definitely muster up $500 for the kids in Syria. What's your take on that?\"\nTurn #4\nEthan Smith [non-verbal communication] nodding in agreement\nTurn #5\nHendrick Heinz said: \"Ethan, I understand your reservations about going over your budget and I truly appreciate your dedication to being financially responsible. I promise you, we'll find a way that matches our commitment to the cause while also helping the kids in Syria. I know how much this cause means to you, just as it means to me. So when we set this amount, I assure you it'll be a joint effort that makes every child in Syria's life a little better. Okay?\"\nTurn #6\nEthan Smith said: \"Hendrick, I understand your point and I appreciate your passion for making a big impact. However, I have to prioritize my financial stability while still supporting the cause. Is there any other way I can contribute or help within my budget?\"\nTurn #7\nHendrick Heinz said: \"Ethan, I completely understand your concern for financial stability and I respect that. I propose a plan that involves us pooling our individual donations along with some other like-minded individuals who share our cause and commitment. That way, we could potentially achieve a collective donation of $500 while spreading the financial burden. What do you think?\"\nTurn #8\nEthan Smith [non-verbal communication] smiling and giving a thumbs up\nTurn #9\nHendrick Heinz said: \"Ethan, I understand your reservations and I value your commitment to financial stability. I agree with your proposal to pool our individual contributions to make up $500. It sounds like a fair approach. Let's reach out to some other friends who share our passion for this cause and see what we can achieve together. And meanwhile, we can help by spreading the word about the charity so we can reach more potential donors. What do you think?\"\nTurn #10\nEthan Smith left the conversation,\n" -} diff --git a/poetry.lock b/poetry.lock index 000f5f615..8f9f9b8d8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -11,92 +11,104 @@ files = [ {file = "absl_py-2.1.0-py3-none-any.whl", hash = "sha256:526a04eadab8b4ee719ce68f204172ead1027549089702d99b9059f129ff1308"}, ] +[[package]] +name = "aiohappyeyeballs" +version = "2.3.5" +description = "Happy Eyeballs for asyncio" +optional = false +python-versions = ">=3.8" +files = [ + {file = "aiohappyeyeballs-2.3.5-py3-none-any.whl", hash = "sha256:4d6dea59215537dbc746e93e779caea8178c866856a721c9c660d7a5a7b8be03"}, + {file = "aiohappyeyeballs-2.3.5.tar.gz", hash = "sha256:6fa48b9f1317254f122a07a131a86b71ca6946ca989ce6326fff54a99a920105"}, +] + [[package]] name = "aiohttp" -version = "3.9.5" +version = "3.10.3" description = "Async http client/server framework (asyncio)" optional = false python-versions = ">=3.8" files = [ - {file = "aiohttp-3.9.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:fcde4c397f673fdec23e6b05ebf8d4751314fa7c24f93334bf1f1364c1c69ac7"}, - {file = "aiohttp-3.9.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5d6b3f1fabe465e819aed2c421a6743d8debbde79b6a8600739300630a01bf2c"}, - {file = "aiohttp-3.9.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6ae79c1bc12c34082d92bf9422764f799aee4746fd7a392db46b7fd357d4a17a"}, - {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d3ebb9e1316ec74277d19c5f482f98cc65a73ccd5430540d6d11682cd857430"}, - {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84dabd95154f43a2ea80deffec9cb44d2e301e38a0c9d331cc4aa0166fe28ae3"}, - {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c8a02fbeca6f63cb1f0475c799679057fc9268b77075ab7cf3f1c600e81dd46b"}, - {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c26959ca7b75ff768e2776d8055bf9582a6267e24556bb7f7bd29e677932be72"}, - {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:714d4e5231fed4ba2762ed489b4aec07b2b9953cf4ee31e9871caac895a839c0"}, - {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e7a6a8354f1b62e15d48e04350f13e726fa08b62c3d7b8401c0a1314f02e3558"}, - {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c413016880e03e69d166efb5a1a95d40f83d5a3a648d16486592c49ffb76d0db"}, - {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ff84aeb864e0fac81f676be9f4685f0527b660f1efdc40dcede3c251ef1e867f"}, - {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ad7f2919d7dac062f24d6f5fe95d401597fbb015a25771f85e692d043c9d7832"}, - {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:702e2c7c187c1a498a4e2b03155d52658fdd6fda882d3d7fbb891a5cf108bb10"}, - {file = "aiohttp-3.9.5-cp310-cp310-win32.whl", hash = "sha256:67c3119f5ddc7261d47163ed86d760ddf0e625cd6246b4ed852e82159617b5fb"}, - {file = "aiohttp-3.9.5-cp310-cp310-win_amd64.whl", hash = "sha256:471f0ef53ccedec9995287f02caf0c068732f026455f07db3f01a46e49d76bbb"}, - {file = "aiohttp-3.9.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e0ae53e33ee7476dd3d1132f932eeb39bf6125083820049d06edcdca4381f342"}, - {file = "aiohttp-3.9.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c088c4d70d21f8ca5c0b8b5403fe84a7bc8e024161febdd4ef04575ef35d474d"}, - {file = "aiohttp-3.9.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:639d0042b7670222f33b0028de6b4e2fad6451462ce7df2af8aee37dcac55424"}, - {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f26383adb94da5e7fb388d441bf09c61e5e35f455a3217bfd790c6b6bc64b2ee"}, - {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:66331d00fb28dc90aa606d9a54304af76b335ae204d1836f65797d6fe27f1ca2"}, - {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4ff550491f5492ab5ed3533e76b8567f4b37bd2995e780a1f46bca2024223233"}, - {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f22eb3a6c1080d862befa0a89c380b4dafce29dc6cd56083f630073d102eb595"}, - {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a81b1143d42b66ffc40a441379387076243ef7b51019204fd3ec36b9f69e77d6"}, - {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f64fd07515dad67f24b6ea4a66ae2876c01031de91c93075b8093f07c0a2d93d"}, - {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:93e22add827447d2e26d67c9ac0161756007f152fdc5210277d00a85f6c92323"}, - {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:55b39c8684a46e56ef8c8d24faf02de4a2b2ac60d26cee93bc595651ff545de9"}, - {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4715a9b778f4293b9f8ae7a0a7cef9829f02ff8d6277a39d7f40565c737d3771"}, - {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:afc52b8d969eff14e069a710057d15ab9ac17cd4b6753042c407dcea0e40bf75"}, - {file = "aiohttp-3.9.5-cp311-cp311-win32.whl", hash = "sha256:b3df71da99c98534be076196791adca8819761f0bf6e08e07fd7da25127150d6"}, - {file = "aiohttp-3.9.5-cp311-cp311-win_amd64.whl", hash = "sha256:88e311d98cc0bf45b62fc46c66753a83445f5ab20038bcc1b8a1cc05666f428a"}, - {file = "aiohttp-3.9.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:c7a4b7a6cf5b6eb11e109a9755fd4fda7d57395f8c575e166d363b9fc3ec4678"}, - {file = "aiohttp-3.9.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:0a158704edf0abcac8ac371fbb54044f3270bdbc93e254a82b6c82be1ef08f3c"}, - {file = "aiohttp-3.9.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d153f652a687a8e95ad367a86a61e8d53d528b0530ef382ec5aaf533140ed00f"}, - {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82a6a97d9771cb48ae16979c3a3a9a18b600a8505b1115cfe354dfb2054468b4"}, - {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:60cdbd56f4cad9f69c35eaac0fbbdf1f77b0ff9456cebd4902f3dd1cf096464c"}, - {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8676e8fd73141ded15ea586de0b7cda1542960a7b9ad89b2b06428e97125d4fa"}, - {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da00da442a0e31f1c69d26d224e1efd3a1ca5bcbf210978a2ca7426dfcae9f58"}, - {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18f634d540dd099c262e9f887c8bbacc959847cfe5da7a0e2e1cf3f14dbf2daf"}, - {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:320e8618eda64e19d11bdb3bd04ccc0a816c17eaecb7e4945d01deee2a22f95f"}, - {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:2faa61a904b83142747fc6a6d7ad8fccff898c849123030f8e75d5d967fd4a81"}, - {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:8c64a6dc3fe5db7b1b4d2b5cb84c4f677768bdc340611eca673afb7cf416ef5a"}, - {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:393c7aba2b55559ef7ab791c94b44f7482a07bf7640d17b341b79081f5e5cd1a"}, - {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c671dc117c2c21a1ca10c116cfcd6e3e44da7fcde37bf83b2be485ab377b25da"}, - {file = "aiohttp-3.9.5-cp312-cp312-win32.whl", hash = "sha256:5a7ee16aab26e76add4afc45e8f8206c95d1d75540f1039b84a03c3b3800dd59"}, - {file = "aiohttp-3.9.5-cp312-cp312-win_amd64.whl", hash = "sha256:5ca51eadbd67045396bc92a4345d1790b7301c14d1848feaac1d6a6c9289e888"}, - {file = "aiohttp-3.9.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:694d828b5c41255e54bc2dddb51a9f5150b4eefa9886e38b52605a05d96566e8"}, - {file = "aiohttp-3.9.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0605cc2c0088fcaae79f01c913a38611ad09ba68ff482402d3410bf59039bfb8"}, - {file = "aiohttp-3.9.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4558e5012ee03d2638c681e156461d37b7a113fe13970d438d95d10173d25f78"}, - {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dbc053ac75ccc63dc3a3cc547b98c7258ec35a215a92bd9f983e0aac95d3d5b"}, - {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4109adee842b90671f1b689901b948f347325045c15f46b39797ae1bf17019de"}, - {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6ea1a5b409a85477fd8e5ee6ad8f0e40bf2844c270955e09360418cfd09abac"}, - {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3c2890ca8c59ee683fd09adf32321a40fe1cf164e3387799efb2acebf090c11"}, - {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3916c8692dbd9d55c523374a3b8213e628424d19116ac4308e434dbf6d95bbdd"}, - {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8d1964eb7617907c792ca00b341b5ec3e01ae8c280825deadbbd678447b127e1"}, - {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:d5ab8e1f6bee051a4bf6195e38a5c13e5e161cb7bad83d8854524798bd9fcd6e"}, - {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:52c27110f3862a1afbcb2af4281fc9fdc40327fa286c4625dfee247c3ba90156"}, - {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:7f64cbd44443e80094309875d4f9c71d0401e966d191c3d469cde4642bc2e031"}, - {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8b4f72fbb66279624bfe83fd5eb6aea0022dad8eec62b71e7bf63ee1caadeafe"}, - {file = "aiohttp-3.9.5-cp38-cp38-win32.whl", hash = "sha256:6380c039ec52866c06d69b5c7aad5478b24ed11696f0e72f6b807cfb261453da"}, - {file = "aiohttp-3.9.5-cp38-cp38-win_amd64.whl", hash = "sha256:da22dab31d7180f8c3ac7c7635f3bcd53808f374f6aa333fe0b0b9e14b01f91a"}, - {file = "aiohttp-3.9.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1732102949ff6087589408d76cd6dea656b93c896b011ecafff418c9661dc4ed"}, - {file = "aiohttp-3.9.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c6021d296318cb6f9414b48e6a439a7f5d1f665464da507e8ff640848ee2a58a"}, - {file = "aiohttp-3.9.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:239f975589a944eeb1bad26b8b140a59a3a320067fb3cd10b75c3092405a1372"}, - {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b7b30258348082826d274504fbc7c849959f1989d86c29bc355107accec6cfb"}, - {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cd2adf5c87ff6d8b277814a28a535b59e20bfea40a101db6b3bdca7e9926bc24"}, - {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e9a3d838441bebcf5cf442700e3963f58b5c33f015341f9ea86dcd7d503c07e2"}, - {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e3a1ae66e3d0c17cf65c08968a5ee3180c5a95920ec2731f53343fac9bad106"}, - {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9c69e77370cce2d6df5d12b4e12bdcca60c47ba13d1cbbc8645dd005a20b738b"}, - {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0cbf56238f4bbf49dab8c2dc2e6b1b68502b1e88d335bea59b3f5b9f4c001475"}, - {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d1469f228cd9ffddd396d9948b8c9cd8022b6d1bf1e40c6f25b0fb90b4f893ed"}, - {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:45731330e754f5811c314901cebdf19dd776a44b31927fa4b4dbecab9e457b0c"}, - {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:3fcb4046d2904378e3aeea1df51f697b0467f2aac55d232c87ba162709478c46"}, - {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8cf142aa6c1a751fcb364158fd710b8a9be874b81889c2bd13aa8893197455e2"}, - {file = "aiohttp-3.9.5-cp39-cp39-win32.whl", hash = "sha256:7b179eea70833c8dee51ec42f3b4097bd6370892fa93f510f76762105568cf09"}, - {file = "aiohttp-3.9.5-cp39-cp39-win_amd64.whl", hash = "sha256:38d80498e2e169bc61418ff36170e0aad0cd268da8b38a17c4cf29d254a8b3f1"}, - {file = "aiohttp-3.9.5.tar.gz", hash = "sha256:edea7d15772ceeb29db4aff55e482d4bcfb6ae160ce144f2682de02f6d693551"}, + {file = "aiohttp-3.10.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cc36cbdedf6f259371dbbbcaae5bb0e95b879bc501668ab6306af867577eb5db"}, + {file = "aiohttp-3.10.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:85466b5a695c2a7db13eb2c200af552d13e6a9313d7fa92e4ffe04a2c0ea74c1"}, + {file = "aiohttp-3.10.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:71bb1d97bfe7e6726267cea169fdf5df7658831bb68ec02c9c6b9f3511e108bb"}, + {file = "aiohttp-3.10.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:baec1eb274f78b2de54471fc4c69ecbea4275965eab4b556ef7a7698dee18bf2"}, + {file = "aiohttp-3.10.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:13031e7ec1188274bad243255c328cc3019e36a5a907978501256000d57a7201"}, + {file = "aiohttp-3.10.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2bbc55a964b8eecb341e492ae91c3bd0848324d313e1e71a27e3d96e6ee7e8e8"}, + {file = "aiohttp-3.10.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e8cc0564b286b625e673a2615ede60a1704d0cbbf1b24604e28c31ed37dc62aa"}, + {file = "aiohttp-3.10.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f817a54059a4cfbc385a7f51696359c642088710e731e8df80d0607193ed2b73"}, + {file = "aiohttp-3.10.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8542c9e5bcb2bd3115acdf5adc41cda394e7360916197805e7e32b93d821ef93"}, + {file = "aiohttp-3.10.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:671efce3a4a0281060edf9a07a2f7e6230dca3a1cbc61d110eee7753d28405f7"}, + {file = "aiohttp-3.10.3-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:0974f3b5b0132edcec92c3306f858ad4356a63d26b18021d859c9927616ebf27"}, + {file = "aiohttp-3.10.3-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:44bb159b55926b57812dca1b21c34528e800963ffe130d08b049b2d6b994ada7"}, + {file = "aiohttp-3.10.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:6ae9ae382d1c9617a91647575255ad55a48bfdde34cc2185dd558ce476bf16e9"}, + {file = "aiohttp-3.10.3-cp310-cp310-win32.whl", hash = "sha256:aed12a54d4e1ee647376fa541e1b7621505001f9f939debf51397b9329fd88b9"}, + {file = "aiohttp-3.10.3-cp310-cp310-win_amd64.whl", hash = "sha256:b51aef59370baf7444de1572f7830f59ddbabd04e5292fa4218d02f085f8d299"}, + {file = "aiohttp-3.10.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e021c4c778644e8cdc09487d65564265e6b149896a17d7c0f52e9a088cc44e1b"}, + {file = "aiohttp-3.10.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:24fade6dae446b183e2410a8628b80df9b7a42205c6bfc2eff783cbeedc224a2"}, + {file = "aiohttp-3.10.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bc8e9f15939dacb0e1f2d15f9c41b786051c10472c7a926f5771e99b49a5957f"}, + {file = "aiohttp-3.10.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5a9ec959b5381271c8ec9310aae1713b2aec29efa32e232e5ef7dcca0df0279"}, + {file = "aiohttp-3.10.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2a5d0ea8a6467b15d53b00c4e8ea8811e47c3cc1bdbc62b1aceb3076403d551f"}, + {file = "aiohttp-3.10.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c9ed607dbbdd0d4d39b597e5bf6b0d40d844dfb0ac6a123ed79042ef08c1f87e"}, + {file = "aiohttp-3.10.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3e66d5b506832e56add66af88c288c1d5ba0c38b535a1a59e436b300b57b23e"}, + {file = "aiohttp-3.10.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fda91ad797e4914cca0afa8b6cccd5d2b3569ccc88731be202f6adce39503189"}, + {file = "aiohttp-3.10.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:61ccb867b2f2f53df6598eb2a93329b5eee0b00646ee79ea67d68844747a418e"}, + {file = "aiohttp-3.10.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:6d881353264e6156f215b3cb778c9ac3184f5465c2ece5e6fce82e68946868ef"}, + {file = "aiohttp-3.10.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:b031ce229114825f49cec4434fa844ccb5225e266c3e146cb4bdd025a6da52f1"}, + {file = "aiohttp-3.10.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:5337cc742a03f9e3213b097abff8781f79de7190bbfaa987bd2b7ceb5bb0bdec"}, + {file = "aiohttp-3.10.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ab3361159fd3dcd0e48bbe804006d5cfb074b382666e6c064112056eb234f1a9"}, + {file = "aiohttp-3.10.3-cp311-cp311-win32.whl", hash = "sha256:05d66203a530209cbe40f102ebaac0b2214aba2a33c075d0bf825987c36f1f0b"}, + {file = "aiohttp-3.10.3-cp311-cp311-win_amd64.whl", hash = "sha256:70b4a4984a70a2322b70e088d654528129783ac1ebbf7dd76627b3bd22db2f17"}, + {file = "aiohttp-3.10.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:166de65e2e4e63357cfa8417cf952a519ac42f1654cb2d43ed76899e2319b1ee"}, + {file = "aiohttp-3.10.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:7084876352ba3833d5d214e02b32d794e3fd9cf21fdba99cff5acabeb90d9806"}, + {file = "aiohttp-3.10.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d98c604c93403288591d7d6d7d6cc8a63459168f8846aeffd5b3a7f3b3e5e09"}, + {file = "aiohttp-3.10.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d73b073a25a0bb8bf014345374fe2d0f63681ab5da4c22f9d2025ca3e3ea54fc"}, + {file = "aiohttp-3.10.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8da6b48c20ce78f5721068f383e0e113dde034e868f1b2f5ee7cb1e95f91db57"}, + {file = "aiohttp-3.10.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3a9dcdccf50284b1b0dc72bc57e5bbd3cc9bf019060dfa0668f63241ccc16aa7"}, + {file = "aiohttp-3.10.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56fb94bae2be58f68d000d046172d8b8e6b1b571eb02ceee5535e9633dcd559c"}, + {file = "aiohttp-3.10.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bf75716377aad2c718cdf66451c5cf02042085d84522aec1f9246d3e4b8641a6"}, + {file = "aiohttp-3.10.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6c51ed03e19c885c8e91f574e4bbe7381793f56f93229731597e4a499ffef2a5"}, + {file = "aiohttp-3.10.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b84857b66fa6510a163bb083c1199d1ee091a40163cfcbbd0642495fed096204"}, + {file = "aiohttp-3.10.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c124b9206b1befe0491f48185fd30a0dd51b0f4e0e7e43ac1236066215aff272"}, + {file = "aiohttp-3.10.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:3461d9294941937f07bbbaa6227ba799bc71cc3b22c40222568dc1cca5118f68"}, + {file = "aiohttp-3.10.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:08bd0754d257b2db27d6bab208c74601df6f21bfe4cb2ec7b258ba691aac64b3"}, + {file = "aiohttp-3.10.3-cp312-cp312-win32.whl", hash = "sha256:7f9159ae530297f61a00116771e57516f89a3de6ba33f314402e41560872b50a"}, + {file = "aiohttp-3.10.3-cp312-cp312-win_amd64.whl", hash = "sha256:e1128c5d3a466279cb23c4aa32a0f6cb0e7d2961e74e9e421f90e74f75ec1edf"}, + {file = "aiohttp-3.10.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:d1100e68e70eb72eadba2b932b185ebf0f28fd2f0dbfe576cfa9d9894ef49752"}, + {file = "aiohttp-3.10.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a541414578ff47c0a9b0b8b77381ea86b0c8531ab37fc587572cb662ccd80b88"}, + {file = "aiohttp-3.10.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d5548444ef60bf4c7b19ace21f032fa42d822e516a6940d36579f7bfa8513f9c"}, + {file = "aiohttp-3.10.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ba2e838b5e6a8755ac8297275c9460e729dc1522b6454aee1766c6de6d56e5e"}, + {file = "aiohttp-3.10.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:48665433bb59144aaf502c324694bec25867eb6630fcd831f7a893ca473fcde4"}, + {file = "aiohttp-3.10.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bac352fceed158620ce2d701ad39d4c1c76d114255a7c530e057e2b9f55bdf9f"}, + {file = "aiohttp-3.10.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b0f670502100cdc567188c49415bebba947eb3edaa2028e1a50dd81bd13363f"}, + {file = "aiohttp-3.10.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:43b09f38a67679e32d380fe512189ccb0b25e15afc79b23fbd5b5e48e4fc8fd9"}, + {file = "aiohttp-3.10.3-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:cd788602e239ace64f257d1c9d39898ca65525583f0fbf0988bcba19418fe93f"}, + {file = "aiohttp-3.10.3-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:214277dcb07ab3875f17ee1c777d446dcce75bea85846849cc9d139ab8f5081f"}, + {file = "aiohttp-3.10.3-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:32007fdcaab789689c2ecaaf4b71f8e37bf012a15cd02c0a9db8c4d0e7989fa8"}, + {file = "aiohttp-3.10.3-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:123e5819bfe1b87204575515cf448ab3bf1489cdeb3b61012bde716cda5853e7"}, + {file = "aiohttp-3.10.3-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:812121a201f0c02491a5db335a737b4113151926a79ae9ed1a9f41ea225c0e3f"}, + {file = "aiohttp-3.10.3-cp38-cp38-win32.whl", hash = "sha256:b97dc9a17a59f350c0caa453a3cb35671a2ffa3a29a6ef3568b523b9113d84e5"}, + {file = "aiohttp-3.10.3-cp38-cp38-win_amd64.whl", hash = "sha256:3731a73ddc26969d65f90471c635abd4e1546a25299b687e654ea6d2fc052394"}, + {file = "aiohttp-3.10.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:38d91b98b4320ffe66efa56cb0f614a05af53b675ce1b8607cdb2ac826a8d58e"}, + {file = "aiohttp-3.10.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9743fa34a10a36ddd448bba8a3adc2a66a1c575c3c2940301bacd6cc896c6bf1"}, + {file = "aiohttp-3.10.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7c126f532caf238031c19d169cfae3c6a59129452c990a6e84d6e7b198a001dc"}, + {file = "aiohttp-3.10.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:926e68438f05703e500b06fe7148ef3013dd6f276de65c68558fa9974eeb59ad"}, + {file = "aiohttp-3.10.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:434b3ab75833accd0b931d11874e206e816f6e6626fd69f643d6a8269cd9166a"}, + {file = "aiohttp-3.10.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d35235a44ec38109b811c3600d15d8383297a8fab8e3dec6147477ec8636712a"}, + {file = "aiohttp-3.10.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59c489661edbd863edb30a8bd69ecb044bd381d1818022bc698ba1b6f80e5dd1"}, + {file = "aiohttp-3.10.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:50544fe498c81cb98912afabfc4e4d9d85e89f86238348e3712f7ca6a2f01dab"}, + {file = "aiohttp-3.10.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:09bc79275737d4dc066e0ae2951866bb36d9c6b460cb7564f111cc0427f14844"}, + {file = "aiohttp-3.10.3-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:af4dbec58e37f5afff4f91cdf235e8e4b0bd0127a2a4fd1040e2cad3369d2f06"}, + {file = "aiohttp-3.10.3-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:b22cae3c9dd55a6b4c48c63081d31c00fc11fa9db1a20c8a50ee38c1a29539d2"}, + {file = "aiohttp-3.10.3-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:ba562736d3fbfe9241dad46c1a8994478d4a0e50796d80e29d50cabe8fbfcc3f"}, + {file = "aiohttp-3.10.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:f25d6c4e82d7489be84f2b1c8212fafc021b3731abdb61a563c90e37cced3a21"}, + {file = "aiohttp-3.10.3-cp39-cp39-win32.whl", hash = "sha256:b69d832e5f5fa15b1b6b2c8eb6a9fd2c0ec1fd7729cb4322ed27771afc9fc2ac"}, + {file = "aiohttp-3.10.3-cp39-cp39-win_amd64.whl", hash = "sha256:673bb6e3249dc8825df1105f6ef74e2eab779b7ff78e96c15cadb78b04a83752"}, + {file = "aiohttp-3.10.3.tar.gz", hash = "sha256:21650e7032cc2d31fc23d353d7123e771354f2a3d5b05a5647fc30fea214e696"}, ] [package.dependencies] +aiohappyeyeballs = ">=2.3.0" aiosignal = ">=1.1.2" async-timeout = {version = ">=4.0,<5.0", markers = "python_version < \"3.11\""} attrs = ">=17.3.0" @@ -105,7 +117,7 @@ multidict = ">=4.5,<7.0" yarl = ">=1.0,<2.0" [package.extras] -speedups = ["Brotli", "aiodns", "brotlicffi"] +speedups = ["Brotli", "aiodns (>=3.2.0)", "brotlicffi"] [[package]] name = "aiosignal" @@ -210,22 +222,22 @@ files = [ [[package]] name = "attrs" -version = "23.2.0" +version = "24.2.0" description = "Classes Without Boilerplate" optional = false python-versions = ">=3.7" files = [ - {file = "attrs-23.2.0-py3-none-any.whl", hash = "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1"}, - {file = "attrs-23.2.0.tar.gz", hash = "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30"}, + {file = "attrs-24.2.0-py3-none-any.whl", hash = "sha256:81921eb96de3191c8258c199618104dd27ac608d9366f5e35d011eae1867ede2"}, + {file = "attrs-24.2.0.tar.gz", hash = "sha256:5cfb1b9148b5b086569baec03f20d7b6bf3bcacc9a42bebf87ffaaca362f6346"}, ] [package.extras] -cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] -dev = ["attrs[tests]", "pre-commit"] -docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] -tests = ["attrs[tests-no-zope]", "zope-interface"] -tests-mypy = ["mypy (>=1.6)", "pytest-mypy-plugins"] -tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"] +benchmark = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +cov = ["cloudpickle", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +dev = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier (<24.7)"] +tests = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"] [[package]] name = "beartype" @@ -247,17 +259,17 @@ test-tox-coverage = ["coverage (>=5.5)"] [[package]] name = "boto3" -version = "1.34.144" +version = "1.34.158" description = "The AWS SDK for Python" optional = true python-versions = ">=3.8" files = [ - {file = "boto3-1.34.144-py3-none-any.whl", hash = "sha256:b8433d481d50b68a0162c0379c0dd4aabfc3d1ad901800beb5b87815997511c1"}, - {file = "boto3-1.34.144.tar.gz", hash = "sha256:2f3e88b10b8fcc5f6100a9d74cd28230edc9d4fa226d99dd40a3ab38ac213673"}, + {file = "boto3-1.34.158-py3-none-any.whl", hash = "sha256:c29e9b7e1034e8734ccaffb9f2b3f3df2268022fd8a93d836604019f8759ce27"}, + {file = "boto3-1.34.158.tar.gz", hash = "sha256:5b7b2ce0ec1e498933f600d29f3e1c641f8c44dd7e468c26795359d23d81fa39"}, ] [package.dependencies] -botocore = ">=1.34.144,<1.35.0" +botocore = ">=1.34.158,<1.35.0" jmespath = ">=0.7.1,<2.0.0" s3transfer = ">=0.10.0,<0.11.0" @@ -266,13 +278,13 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "botocore" -version = "1.34.144" +version = "1.34.158" description = "Low-level, data-driven core of boto 3." optional = true python-versions = ">=3.8" files = [ - {file = "botocore-1.34.144-py3-none-any.whl", hash = "sha256:a2cf26e1bf10d5917a2285e50257bc44e94a1d16574f282f3274f7a5d8d1f08b"}, - {file = "botocore-1.34.144.tar.gz", hash = "sha256:4215db28d25309d59c99507f1f77df9089e5bebbad35f6e19c7c44ec5383a3e8"}, + {file = "botocore-1.34.158-py3-none-any.whl", hash = "sha256:0e6fceba1e39bfa8feeba70ba3ac2af958b3387df4bd3b5f2db3f64c1754c756"}, + {file = "botocore-1.34.158.tar.gz", hash = "sha256:5934082e25ad726673afbf466092fb1223dafa250e6e756c819430ba6b1b3da5"}, ] [package.dependencies] @@ -281,7 +293,7 @@ python-dateutil = ">=2.1,<3.0.0" urllib3 = {version = ">=1.25.4,<2.2.0 || >2.2.0,<3", markers = "python_version >= \"3.10\""} [package.extras] -crt = ["awscrt (==0.20.11)"] +crt = ["awscrt (==0.21.2)"] [[package]] name = "cachetools" @@ -307,63 +319,78 @@ files = [ [[package]] name = "cffi" -version = "1.16.0" +version = "1.17.0" description = "Foreign Function Interface for Python calling C code." optional = false python-versions = ">=3.8" files = [ - {file = "cffi-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088"}, - {file = "cffi-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9"}, - {file = "cffi-1.16.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673"}, - {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896"}, - {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684"}, - {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7"}, - {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614"}, - {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743"}, - {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d"}, - {file = "cffi-1.16.0-cp310-cp310-win32.whl", hash = "sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a"}, - {file = "cffi-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1"}, - {file = "cffi-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404"}, - {file = "cffi-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417"}, - {file = "cffi-1.16.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627"}, - {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936"}, - {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d"}, - {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56"}, - {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e"}, - {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc"}, - {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb"}, - {file = "cffi-1.16.0-cp311-cp311-win32.whl", hash = "sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab"}, - {file = "cffi-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba"}, - {file = "cffi-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956"}, - {file = "cffi-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e"}, - {file = "cffi-1.16.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e"}, - {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2"}, - {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357"}, - {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6"}, - {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969"}, - {file = "cffi-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520"}, - {file = "cffi-1.16.0-cp312-cp312-win32.whl", hash = "sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b"}, - {file = "cffi-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235"}, - {file = "cffi-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc"}, - {file = "cffi-1.16.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0"}, - {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b"}, - {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c"}, - {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b"}, - {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324"}, - {file = "cffi-1.16.0-cp38-cp38-win32.whl", hash = "sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a"}, - {file = "cffi-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36"}, - {file = "cffi-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed"}, - {file = "cffi-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2"}, - {file = "cffi-1.16.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872"}, - {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8"}, - {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f"}, - {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4"}, - {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098"}, - {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000"}, - {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe"}, - {file = "cffi-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4"}, - {file = "cffi-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8"}, - {file = "cffi-1.16.0.tar.gz", hash = "sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0"}, + {file = "cffi-1.17.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f9338cc05451f1942d0d8203ec2c346c830f8e86469903d5126c1f0a13a2bcbb"}, + {file = "cffi-1.17.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a0ce71725cacc9ebf839630772b07eeec220cbb5f03be1399e0457a1464f8e1a"}, + {file = "cffi-1.17.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c815270206f983309915a6844fe994b2fa47e5d05c4c4cef267c3b30e34dbe42"}, + {file = "cffi-1.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6bdcd415ba87846fd317bee0774e412e8792832e7805938987e4ede1d13046d"}, + {file = "cffi-1.17.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a98748ed1a1df4ee1d6f927e151ed6c1a09d5ec21684de879c7ea6aa96f58f2"}, + {file = "cffi-1.17.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0a048d4f6630113e54bb4b77e315e1ba32a5a31512c31a273807d0027a7e69ab"}, + {file = "cffi-1.17.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24aa705a5f5bd3a8bcfa4d123f03413de5d86e497435693b638cbffb7d5d8a1b"}, + {file = "cffi-1.17.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:856bf0924d24e7f93b8aee12a3a1095c34085600aa805693fb7f5d1962393206"}, + {file = "cffi-1.17.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:4304d4416ff032ed50ad6bb87416d802e67139e31c0bde4628f36a47a3164bfa"}, + {file = "cffi-1.17.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:331ad15c39c9fe9186ceaf87203a9ecf5ae0ba2538c9e898e3a6967e8ad3db6f"}, + {file = "cffi-1.17.0-cp310-cp310-win32.whl", hash = "sha256:669b29a9eca6146465cc574659058ed949748f0809a2582d1f1a324eb91054dc"}, + {file = "cffi-1.17.0-cp310-cp310-win_amd64.whl", hash = "sha256:48b389b1fd5144603d61d752afd7167dfd205973a43151ae5045b35793232aa2"}, + {file = "cffi-1.17.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c5d97162c196ce54af6700949ddf9409e9833ef1003b4741c2b39ef46f1d9720"}, + {file = "cffi-1.17.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5ba5c243f4004c750836f81606a9fcb7841f8874ad8f3bf204ff5e56332b72b9"}, + {file = "cffi-1.17.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bb9333f58fc3a2296fb1d54576138d4cf5d496a2cc118422bd77835e6ae0b9cb"}, + {file = "cffi-1.17.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:435a22d00ec7d7ea533db494da8581b05977f9c37338c80bc86314bec2619424"}, + {file = "cffi-1.17.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d1df34588123fcc88c872f5acb6f74ae59e9d182a2707097f9e28275ec26a12d"}, + {file = "cffi-1.17.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:df8bb0010fdd0a743b7542589223a2816bdde4d94bb5ad67884348fa2c1c67e8"}, + {file = "cffi-1.17.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8b5b9712783415695663bd463990e2f00c6750562e6ad1d28e072a611c5f2a6"}, + {file = "cffi-1.17.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ffef8fd58a36fb5f1196919638f73dd3ae0db1a878982b27a9a5a176ede4ba91"}, + {file = "cffi-1.17.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4e67d26532bfd8b7f7c05d5a766d6f437b362c1bf203a3a5ce3593a645e870b8"}, + {file = "cffi-1.17.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:45f7cd36186db767d803b1473b3c659d57a23b5fa491ad83c6d40f2af58e4dbb"}, + {file = "cffi-1.17.0-cp311-cp311-win32.whl", hash = "sha256:a9015f5b8af1bb6837a3fcb0cdf3b874fe3385ff6274e8b7925d81ccaec3c5c9"}, + {file = "cffi-1.17.0-cp311-cp311-win_amd64.whl", hash = "sha256:b50aaac7d05c2c26dfd50c3321199f019ba76bb650e346a6ef3616306eed67b0"}, + {file = "cffi-1.17.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aec510255ce690d240f7cb23d7114f6b351c733a74c279a84def763660a2c3bc"}, + {file = "cffi-1.17.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2770bb0d5e3cc0e31e7318db06efcbcdb7b31bcb1a70086d3177692a02256f59"}, + {file = "cffi-1.17.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:db9a30ec064129d605d0f1aedc93e00894b9334ec74ba9c6bdd08147434b33eb"}, + {file = "cffi-1.17.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a47eef975d2b8b721775a0fa286f50eab535b9d56c70a6e62842134cf7841195"}, + {file = "cffi-1.17.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f3e0992f23bbb0be00a921eae5363329253c3b86287db27092461c887b791e5e"}, + {file = "cffi-1.17.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6107e445faf057c118d5050560695e46d272e5301feffda3c41849641222a828"}, + {file = "cffi-1.17.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb862356ee9391dc5a0b3cbc00f416b48c1b9a52d252d898e5b7696a5f9fe150"}, + {file = "cffi-1.17.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c1c13185b90bbd3f8b5963cd8ce7ad4ff441924c31e23c975cb150e27c2bf67a"}, + {file = "cffi-1.17.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:17c6d6d3260c7f2d94f657e6872591fe8733872a86ed1345bda872cfc8c74885"}, + {file = "cffi-1.17.0-cp312-cp312-win32.whl", hash = "sha256:c3b8bd3133cd50f6b637bb4322822c94c5ce4bf0d724ed5ae70afce62187c492"}, + {file = "cffi-1.17.0-cp312-cp312-win_amd64.whl", hash = "sha256:dca802c8db0720ce1c49cce1149ff7b06e91ba15fa84b1d59144fef1a1bc7ac2"}, + {file = "cffi-1.17.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:6ce01337d23884b21c03869d2f68c5523d43174d4fc405490eb0091057943118"}, + {file = "cffi-1.17.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cab2eba3830bf4f6d91e2d6718e0e1c14a2f5ad1af68a89d24ace0c6b17cced7"}, + {file = "cffi-1.17.0-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:14b9cbc8f7ac98a739558eb86fabc283d4d564dafed50216e7f7ee62d0d25377"}, + {file = "cffi-1.17.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b00e7bcd71caa0282cbe3c90966f738e2db91e64092a877c3ff7f19a1628fdcb"}, + {file = "cffi-1.17.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:41f4915e09218744d8bae14759f983e466ab69b178de38066f7579892ff2a555"}, + {file = "cffi-1.17.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e4760a68cab57bfaa628938e9c2971137e05ce48e762a9cb53b76c9b569f1204"}, + {file = "cffi-1.17.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:011aff3524d578a9412c8b3cfaa50f2c0bd78e03eb7af7aa5e0df59b158efb2f"}, + {file = "cffi-1.17.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:a003ac9edc22d99ae1286b0875c460351f4e101f8c9d9d2576e78d7e048f64e0"}, + {file = "cffi-1.17.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ef9528915df81b8f4c7612b19b8628214c65c9b7f74db2e34a646a0a2a0da2d4"}, + {file = "cffi-1.17.0-cp313-cp313-win32.whl", hash = "sha256:70d2aa9fb00cf52034feac4b913181a6e10356019b18ef89bc7c12a283bf5f5a"}, + {file = "cffi-1.17.0-cp313-cp313-win_amd64.whl", hash = "sha256:b7b6ea9e36d32582cda3465f54c4b454f62f23cb083ebc7a94e2ca6ef011c3a7"}, + {file = "cffi-1.17.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:964823b2fc77b55355999ade496c54dde161c621cb1f6eac61dc30ed1b63cd4c"}, + {file = "cffi-1.17.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:516a405f174fd3b88829eabfe4bb296ac602d6a0f68e0d64d5ac9456194a5b7e"}, + {file = "cffi-1.17.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dec6b307ce928e8e112a6bb9921a1cb00a0e14979bf28b98e084a4b8a742bd9b"}, + {file = "cffi-1.17.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e4094c7b464cf0a858e75cd14b03509e84789abf7b79f8537e6a72152109c76e"}, + {file = "cffi-1.17.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2404f3de742f47cb62d023f0ba7c5a916c9c653d5b368cc966382ae4e57da401"}, + {file = "cffi-1.17.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3aa9d43b02a0c681f0bfbc12d476d47b2b2b6a3f9287f11ee42989a268a1833c"}, + {file = "cffi-1.17.0-cp38-cp38-win32.whl", hash = "sha256:0bb15e7acf8ab35ca8b24b90af52c8b391690ef5c4aec3d31f38f0d37d2cc499"}, + {file = "cffi-1.17.0-cp38-cp38-win_amd64.whl", hash = "sha256:93a7350f6706b31f457c1457d3a3259ff9071a66f312ae64dc024f049055f72c"}, + {file = "cffi-1.17.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1a2ddbac59dc3716bc79f27906c010406155031a1c801410f1bafff17ea304d2"}, + {file = "cffi-1.17.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6327b572f5770293fc062a7ec04160e89741e8552bf1c358d1a23eba68166759"}, + {file = "cffi-1.17.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbc183e7bef690c9abe5ea67b7b60fdbca81aa8da43468287dae7b5c046107d4"}, + {file = "cffi-1.17.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bdc0f1f610d067c70aa3737ed06e2726fd9d6f7bfee4a351f4c40b6831f4e82"}, + {file = "cffi-1.17.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6d872186c1617d143969defeadac5a904e6e374183e07977eedef9c07c8953bf"}, + {file = "cffi-1.17.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0d46ee4764b88b91f16661a8befc6bfb24806d885e27436fdc292ed7e6f6d058"}, + {file = "cffi-1.17.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f76a90c345796c01d85e6332e81cab6d70de83b829cf1d9762d0a3da59c7932"}, + {file = "cffi-1.17.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0e60821d312f99d3e1569202518dddf10ae547e799d75aef3bca3a2d9e8ee693"}, + {file = "cffi-1.17.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:eb09b82377233b902d4c3fbeeb7ad731cdab579c6c6fda1f763cd779139e47c3"}, + {file = "cffi-1.17.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:24658baf6224d8f280e827f0a50c46ad819ec8ba380a42448e24459daf809cf4"}, + {file = "cffi-1.17.0-cp39-cp39-win32.whl", hash = "sha256:0fdacad9e0d9fc23e519efd5ea24a70348305e8d7d85ecbb1a5fa66dc834e7fb"}, + {file = "cffi-1.17.0-cp39-cp39-win_amd64.whl", hash = "sha256:7cbc78dc018596315d4e7841c8c3a7ae31cc4d638c9b627f87d52e8abaaf2d29"}, + {file = "cffi-1.17.0.tar.gz", hash = "sha256:f3157624b7558b914cb039fd1af735e5e8049a87c817cc215109ad1c8779df76"}, ] [package.dependencies] @@ -506,22 +533,23 @@ files = [ [[package]] name = "cohere" -version = "5.5.8" +version = "5.8.0" description = "" optional = true python-versions = "<4.0,>=3.8" files = [ - {file = "cohere-5.5.8-py3-none-any.whl", hash = "sha256:e1ed84b90eadd13c6a68ee28e378a0bb955f8945eadc6eb7ee126b3399cafd54"}, - {file = "cohere-5.5.8.tar.gz", hash = "sha256:84ce7666ff8fbdf4f41fb5f6ca452ab2639a514bc88967a2854a9b1b820d6ea0"}, + {file = "cohere-5.8.0-py3-none-any.whl", hash = "sha256:f87f709be6dfe3dce57bef0dd5e90924e8828fb8d334c96fc27663b6a7298c6b"}, + {file = "cohere-5.8.0.tar.gz", hash = "sha256:c4e1ab064d66cc0170091f614b4ea22f55e079f2c7fe9e0de8752fd46f8d2a70"}, ] [package.dependencies] boto3 = ">=1.34.0,<2.0.0" fastavro = ">=1.9.4,<2.0.0" httpx = ">=0.21.2" -httpx-sse = ">=0.4.0,<0.5.0" +httpx-sse = "0.4.0" parameterized = ">=0.9.0,<0.10.0" pydantic = ">=1.9.2" +pydantic-core = ">=2.18.2,<3.0.0" requests = ">=2.0.0,<3.0.0" tokenizers = ">=0.15,<1" types-requests = ">=2.0.0,<3.0.0" @@ -557,63 +585,83 @@ test = ["pytest"] [[package]] name = "coverage" -version = "7.6.0" +version = "7.6.1" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.8" files = [ - {file = "coverage-7.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dff044f661f59dace805eedb4a7404c573b6ff0cdba4a524141bc63d7be5c7fd"}, - {file = "coverage-7.6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a8659fd33ee9e6ca03950cfdcdf271d645cf681609153f218826dd9805ab585c"}, - {file = "coverage-7.6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7792f0ab20df8071d669d929c75c97fecfa6bcab82c10ee4adb91c7a54055463"}, - {file = "coverage-7.6.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d4b3cd1ca7cd73d229487fa5caca9e4bc1f0bca96526b922d61053ea751fe791"}, - {file = "coverage-7.6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e7e128f85c0b419907d1f38e616c4f1e9f1d1b37a7949f44df9a73d5da5cd53c"}, - {file = "coverage-7.6.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a94925102c89247530ae1dab7dc02c690942566f22e189cbd53579b0693c0783"}, - {file = "coverage-7.6.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:dcd070b5b585b50e6617e8972f3fbbee786afca71b1936ac06257f7e178f00f6"}, - {file = "coverage-7.6.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d50a252b23b9b4dfeefc1f663c568a221092cbaded20a05a11665d0dbec9b8fb"}, - {file = "coverage-7.6.0-cp310-cp310-win32.whl", hash = "sha256:0e7b27d04131c46e6894f23a4ae186a6a2207209a05df5b6ad4caee6d54a222c"}, - {file = "coverage-7.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:54dece71673b3187c86226c3ca793c5f891f9fc3d8aa183f2e3653da18566169"}, - {file = "coverage-7.6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c7b525ab52ce18c57ae232ba6f7010297a87ced82a2383b1afd238849c1ff933"}, - {file = "coverage-7.6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4bea27c4269234e06f621f3fac3925f56ff34bc14521484b8f66a580aacc2e7d"}, - {file = "coverage-7.6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed8d1d1821ba5fc88d4a4f45387b65de52382fa3ef1f0115a4f7a20cdfab0e94"}, - {file = "coverage-7.6.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:01c322ef2bbe15057bc4bf132b525b7e3f7206f071799eb8aa6ad1940bcf5fb1"}, - {file = "coverage-7.6.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03cafe82c1b32b770a29fd6de923625ccac3185a54a5e66606da26d105f37dac"}, - {file = "coverage-7.6.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0d1b923fc4a40c5832be4f35a5dab0e5ff89cddf83bb4174499e02ea089daf57"}, - {file = "coverage-7.6.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4b03741e70fb811d1a9a1d75355cf391f274ed85847f4b78e35459899f57af4d"}, - {file = "coverage-7.6.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a73d18625f6a8a1cbb11eadc1d03929f9510f4131879288e3f7922097a429f63"}, - {file = "coverage-7.6.0-cp311-cp311-win32.whl", hash = "sha256:65fa405b837060db569a61ec368b74688f429b32fa47a8929a7a2f9b47183713"}, - {file = "coverage-7.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:6379688fb4cfa921ae349c76eb1a9ab26b65f32b03d46bb0eed841fd4cb6afb1"}, - {file = "coverage-7.6.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f7db0b6ae1f96ae41afe626095149ecd1b212b424626175a6633c2999eaad45b"}, - {file = "coverage-7.6.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bbdf9a72403110a3bdae77948b8011f644571311c2fb35ee15f0f10a8fc082e8"}, - {file = "coverage-7.6.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cc44bf0315268e253bf563f3560e6c004efe38f76db03a1558274a6e04bf5d5"}, - {file = "coverage-7.6.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:da8549d17489cd52f85a9829d0e1d91059359b3c54a26f28bec2c5d369524807"}, - {file = "coverage-7.6.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0086cd4fc71b7d485ac93ca4239c8f75732c2ae3ba83f6be1c9be59d9e2c6382"}, - {file = "coverage-7.6.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1fad32ee9b27350687035cb5fdf9145bc9cf0a094a9577d43e909948ebcfa27b"}, - {file = "coverage-7.6.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:044a0985a4f25b335882b0966625270a8d9db3d3409ddc49a4eb00b0ef5e8cee"}, - {file = "coverage-7.6.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:76d5f82213aa78098b9b964ea89de4617e70e0d43e97900c2778a50856dac605"}, - {file = "coverage-7.6.0-cp312-cp312-win32.whl", hash = "sha256:3c59105f8d58ce500f348c5b56163a4113a440dad6daa2294b5052a10db866da"}, - {file = "coverage-7.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:ca5d79cfdae420a1d52bf177de4bc2289c321d6c961ae321503b2ca59c17ae67"}, - {file = "coverage-7.6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d39bd10f0ae453554798b125d2f39884290c480f56e8a02ba7a6ed552005243b"}, - {file = "coverage-7.6.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:beb08e8508e53a568811016e59f3234d29c2583f6b6e28572f0954a6b4f7e03d"}, - {file = "coverage-7.6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2e16f4cd2bc4d88ba30ca2d3bbf2f21f00f382cf4e1ce3b1ddc96c634bc48ca"}, - {file = "coverage-7.6.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6616d1c9bf1e3faea78711ee42a8b972367d82ceae233ec0ac61cc7fec09fa6b"}, - {file = "coverage-7.6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad4567d6c334c46046d1c4c20024de2a1c3abc626817ae21ae3da600f5779b44"}, - {file = "coverage-7.6.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d17c6a415d68cfe1091d3296ba5749d3d8696e42c37fca5d4860c5bf7b729f03"}, - {file = "coverage-7.6.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:9146579352d7b5f6412735d0f203bbd8d00113a680b66565e205bc605ef81bc6"}, - {file = "coverage-7.6.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:cdab02a0a941af190df8782aafc591ef3ad08824f97850b015c8c6a8b3877b0b"}, - {file = "coverage-7.6.0-cp38-cp38-win32.whl", hash = "sha256:df423f351b162a702c053d5dddc0fc0ef9a9e27ea3f449781ace5f906b664428"}, - {file = "coverage-7.6.0-cp38-cp38-win_amd64.whl", hash = "sha256:f2501d60d7497fd55e391f423f965bbe9e650e9ffc3c627d5f0ac516026000b8"}, - {file = "coverage-7.6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7221f9ac9dad9492cecab6f676b3eaf9185141539d5c9689d13fd6b0d7de840c"}, - {file = "coverage-7.6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ddaaa91bfc4477d2871442bbf30a125e8fe6b05da8a0015507bfbf4718228ab2"}, - {file = "coverage-7.6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4cbe651f3904e28f3a55d6f371203049034b4ddbce65a54527a3f189ca3b390"}, - {file = "coverage-7.6.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:831b476d79408ab6ccfadaaf199906c833f02fdb32c9ab907b1d4aa0713cfa3b"}, - {file = "coverage-7.6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46c3d091059ad0b9c59d1034de74a7f36dcfa7f6d3bde782c49deb42438f2450"}, - {file = "coverage-7.6.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:4d5fae0a22dc86259dee66f2cc6c1d3e490c4a1214d7daa2a93d07491c5c04b6"}, - {file = "coverage-7.6.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:07ed352205574aad067482e53dd606926afebcb5590653121063fbf4e2175166"}, - {file = "coverage-7.6.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:49c76cdfa13015c4560702574bad67f0e15ca5a2872c6a125f6327ead2b731dd"}, - {file = "coverage-7.6.0-cp39-cp39-win32.whl", hash = "sha256:482855914928c8175735a2a59c8dc5806cf7d8f032e4820d52e845d1f731dca2"}, - {file = "coverage-7.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:543ef9179bc55edfd895154a51792b01c017c87af0ebaae092720152e19e42ca"}, - {file = "coverage-7.6.0-pp38.pp39.pp310-none-any.whl", hash = "sha256:6fe885135c8a479d3e37a7aae61cbd3a0fb2deccb4dda3c25f92a49189f766d6"}, - {file = "coverage-7.6.0.tar.gz", hash = "sha256:289cc803fa1dc901f84701ac10c9ee873619320f2f9aff38794db4a4a0268d51"}, + {file = "coverage-7.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b06079abebbc0e89e6163b8e8f0e16270124c154dc6e4a47b413dd538859af16"}, + {file = "coverage-7.6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cf4b19715bccd7ee27b6b120e7e9dd56037b9c0681dcc1adc9ba9db3d417fa36"}, + {file = "coverage-7.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61c0abb4c85b095a784ef23fdd4aede7a2628478e7baba7c5e3deba61070a02"}, + {file = "coverage-7.6.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd21f6ae3f08b41004dfb433fa895d858f3f5979e7762d052b12aef444e29afc"}, + {file = "coverage-7.6.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f59d57baca39b32db42b83b2a7ba6f47ad9c394ec2076b084c3f029b7afca23"}, + {file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a1ac0ae2b8bd743b88ed0502544847c3053d7171a3cff9228af618a068ed9c34"}, + {file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e6a08c0be454c3b3beb105c0596ebdc2371fab6bb90c0c0297f4e58fd7e1012c"}, + {file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f5796e664fe802da4f57a168c85359a8fbf3eab5e55cd4e4569fbacecc903959"}, + {file = "coverage-7.6.1-cp310-cp310-win32.whl", hash = "sha256:7bb65125fcbef8d989fa1dd0e8a060999497629ca5b0efbca209588a73356232"}, + {file = "coverage-7.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:3115a95daa9bdba70aea750db7b96b37259a81a709223c8448fa97727d546fe0"}, + {file = "coverage-7.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7dea0889685db8550f839fa202744652e87c60015029ce3f60e006f8c4462c93"}, + {file = "coverage-7.6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ed37bd3c3b063412f7620464a9ac1314d33100329f39799255fb8d3027da50d3"}, + {file = "coverage-7.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d85f5e9a5f8b73e2350097c3756ef7e785f55bd71205defa0bfdaf96c31616ff"}, + {file = "coverage-7.6.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bc572be474cafb617672c43fe989d6e48d3c83af02ce8de73fff1c6bb3c198d"}, + {file = "coverage-7.6.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c0420b573964c760df9e9e86d1a9a622d0d27f417e1a949a8a66dd7bcee7bc6"}, + {file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1f4aa8219db826ce6be7099d559f8ec311549bfc4046f7f9fe9b5cea5c581c56"}, + {file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:fc5a77d0c516700ebad189b587de289a20a78324bc54baee03dd486f0855d234"}, + {file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b48f312cca9621272ae49008c7f613337c53fadca647d6384cc129d2996d1133"}, + {file = "coverage-7.6.1-cp311-cp311-win32.whl", hash = "sha256:1125ca0e5fd475cbbba3bb67ae20bd2c23a98fac4e32412883f9bcbaa81c314c"}, + {file = "coverage-7.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:8ae539519c4c040c5ffd0632784e21b2f03fc1340752af711f33e5be83a9d6c6"}, + {file = "coverage-7.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:95cae0efeb032af8458fc27d191f85d1717b1d4e49f7cb226cf526ff28179778"}, + {file = "coverage-7.6.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5621a9175cf9d0b0c84c2ef2b12e9f5f5071357c4d2ea6ca1cf01814f45d2391"}, + {file = "coverage-7.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:260933720fdcd75340e7dbe9060655aff3af1f0c5d20f46b57f262ab6c86a5e8"}, + {file = "coverage-7.6.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07e2ca0ad381b91350c0ed49d52699b625aab2b44b65e1b4e02fa9df0e92ad2d"}, + {file = "coverage-7.6.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c44fee9975f04b33331cb8eb272827111efc8930cfd582e0320613263ca849ca"}, + {file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:877abb17e6339d96bf08e7a622d05095e72b71f8afd8a9fefc82cf30ed944163"}, + {file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3e0cadcf6733c09154b461f1ca72d5416635e5e4ec4e536192180d34ec160f8a"}, + {file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c3c02d12f837d9683e5ab2f3d9844dc57655b92c74e286c262e0fc54213c216d"}, + {file = "coverage-7.6.1-cp312-cp312-win32.whl", hash = "sha256:e05882b70b87a18d937ca6768ff33cc3f72847cbc4de4491c8e73880766718e5"}, + {file = "coverage-7.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:b5d7b556859dd85f3a541db6a4e0167b86e7273e1cdc973e5b175166bb634fdb"}, + {file = "coverage-7.6.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a4acd025ecc06185ba2b801f2de85546e0b8ac787cf9d3b06e7e2a69f925b106"}, + {file = "coverage-7.6.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a6d3adcf24b624a7b778533480e32434a39ad8fa30c315208f6d3e5542aeb6e9"}, + {file = "coverage-7.6.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0c212c49b6c10e6951362f7c6df3329f04c2b1c28499563d4035d964ab8e08c"}, + {file = "coverage-7.6.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e81d7a3e58882450ec4186ca59a3f20a5d4440f25b1cff6f0902ad890e6748a"}, + {file = "coverage-7.6.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78b260de9790fd81e69401c2dc8b17da47c8038176a79092a89cb2b7d945d060"}, + {file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a78d169acd38300060b28d600344a803628c3fd585c912cacc9ea8790fe96862"}, + {file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2c09f4ce52cb99dd7505cd0fc8e0e37c77b87f46bc9c1eb03fe3bc9991085388"}, + {file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6878ef48d4227aace338d88c48738a4258213cd7b74fd9a3d4d7582bb1d8a155"}, + {file = "coverage-7.6.1-cp313-cp313-win32.whl", hash = "sha256:44df346d5215a8c0e360307d46ffaabe0f5d3502c8a1cefd700b34baf31d411a"}, + {file = "coverage-7.6.1-cp313-cp313-win_amd64.whl", hash = "sha256:8284cf8c0dd272a247bc154eb6c95548722dce90d098c17a883ed36e67cdb129"}, + {file = "coverage-7.6.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:d3296782ca4eab572a1a4eca686d8bfb00226300dcefdf43faa25b5242ab8a3e"}, + {file = "coverage-7.6.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:502753043567491d3ff6d08629270127e0c31d4184c4c8d98f92c26f65019962"}, + {file = "coverage-7.6.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a89ecca80709d4076b95f89f308544ec8f7b4727e8a547913a35f16717856cb"}, + {file = "coverage-7.6.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a318d68e92e80af8b00fa99609796fdbcdfef3629c77c6283566c6f02c6d6704"}, + {file = "coverage-7.6.1-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13b0a73a0896988f053e4fbb7de6d93388e6dd292b0d87ee51d106f2c11b465b"}, + {file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4421712dbfc5562150f7554f13dde997a2e932a6b5f352edcce948a815efee6f"}, + {file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:166811d20dfea725e2e4baa71fffd6c968a958577848d2131f39b60043400223"}, + {file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:225667980479a17db1048cb2bf8bfb39b8e5be8f164b8f6628b64f78a72cf9d3"}, + {file = "coverage-7.6.1-cp313-cp313t-win32.whl", hash = "sha256:170d444ab405852903b7d04ea9ae9b98f98ab6d7e63e1115e82620807519797f"}, + {file = "coverage-7.6.1-cp313-cp313t-win_amd64.whl", hash = "sha256:b9f222de8cded79c49bf184bdbc06630d4c58eec9459b939b4a690c82ed05657"}, + {file = "coverage-7.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6db04803b6c7291985a761004e9060b2bca08da6d04f26a7f2294b8623a0c1a0"}, + {file = "coverage-7.6.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f1adfc8ac319e1a348af294106bc6a8458a0f1633cc62a1446aebc30c5fa186a"}, + {file = "coverage-7.6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a95324a9de9650a729239daea117df21f4b9868ce32e63f8b650ebe6cef5595b"}, + {file = "coverage-7.6.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b43c03669dc4618ec25270b06ecd3ee4fa94c7f9b3c14bae6571ca00ef98b0d3"}, + {file = "coverage-7.6.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8929543a7192c13d177b770008bc4e8119f2e1f881d563fc6b6305d2d0ebe9de"}, + {file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:a09ece4a69cf399510c8ab25e0950d9cf2b42f7b3cb0374f95d2e2ff594478a6"}, + {file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:9054a0754de38d9dbd01a46621636689124d666bad1936d76c0341f7d71bf569"}, + {file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0dbde0f4aa9a16fa4d754356a8f2e36296ff4d83994b2c9d8398aa32f222f989"}, + {file = "coverage-7.6.1-cp38-cp38-win32.whl", hash = "sha256:da511e6ad4f7323ee5702e6633085fb76c2f893aaf8ce4c51a0ba4fc07580ea7"}, + {file = "coverage-7.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:3f1156e3e8f2872197af3840d8ad307a9dd18e615dc64d9ee41696f287c57ad8"}, + {file = "coverage-7.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:abd5fd0db5f4dc9289408aaf34908072f805ff7792632250dcb36dc591d24255"}, + {file = "coverage-7.6.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:547f45fa1a93154bd82050a7f3cddbc1a7a4dd2a9bf5cb7d06f4ae29fe94eaf8"}, + {file = "coverage-7.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:645786266c8f18a931b65bfcefdbf6952dd0dea98feee39bd188607a9d307ed2"}, + {file = "coverage-7.6.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e0b2df163b8ed01d515807af24f63de04bebcecbd6c3bfeff88385789fdf75a"}, + {file = "coverage-7.6.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:609b06f178fe8e9f89ef676532760ec0b4deea15e9969bf754b37f7c40326dbc"}, + {file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:702855feff378050ae4f741045e19a32d57d19f3e0676d589df0575008ea5004"}, + {file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:2bdb062ea438f22d99cba0d7829c2ef0af1d768d1e4a4f528087224c90b132cb"}, + {file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:9c56863d44bd1c4fe2abb8a4d6f5371d197f1ac0ebdee542f07f35895fc07f36"}, + {file = "coverage-7.6.1-cp39-cp39-win32.whl", hash = "sha256:6e2cd258d7d927d09493c8df1ce9174ad01b381d4729a9d8d4e38670ca24774c"}, + {file = "coverage-7.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:06a737c882bd26d0d6ee7269b20b12f14a8704807a01056c80bb881a4b2ce6ca"}, + {file = "coverage-7.6.1-pp38.pp39.pp310-none-any.whl", hash = "sha256:e9a6e0eb86070e8ccaedfbd9d38fec54864f3125ab95419970575b42af7541df"}, + {file = "coverage-7.6.1.tar.gz", hash = "sha256:953510dfb7b12ab69d20135a0662397f077c59b1e6379a768e97c59d852ee51d"}, ] [package.dependencies] @@ -624,43 +672,38 @@ toml = ["tomli"] [[package]] name = "cryptography" -version = "42.0.8" +version = "43.0.0" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." optional = false python-versions = ">=3.7" files = [ - {file = "cryptography-42.0.8-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:81d8a521705787afe7a18d5bfb47ea9d9cc068206270aad0b96a725022e18d2e"}, - {file = "cryptography-42.0.8-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:961e61cefdcb06e0c6d7e3a1b22ebe8b996eb2bf50614e89384be54c48c6b63d"}, - {file = "cryptography-42.0.8-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3ec3672626e1b9e55afd0df6d774ff0e953452886e06e0f1eb7eb0c832e8902"}, - {file = "cryptography-42.0.8-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e599b53fd95357d92304510fb7bda8523ed1f79ca98dce2f43c115950aa78801"}, - {file = "cryptography-42.0.8-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:5226d5d21ab681f432a9c1cf8b658c0cb02533eece706b155e5fbd8a0cdd3949"}, - {file = "cryptography-42.0.8-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:6b7c4f03ce01afd3b76cf69a5455caa9cfa3de8c8f493e0d3ab7d20611c8dae9"}, - {file = "cryptography-42.0.8-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:2346b911eb349ab547076f47f2e035fc8ff2c02380a7cbbf8d87114fa0f1c583"}, - {file = "cryptography-42.0.8-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:ad803773e9df0b92e0a817d22fd8a3675493f690b96130a5e24f1b8fabbea9c7"}, - {file = "cryptography-42.0.8-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:2f66d9cd9147ee495a8374a45ca445819f8929a3efcd2e3df6428e46c3cbb10b"}, - {file = "cryptography-42.0.8-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:d45b940883a03e19e944456a558b67a41160e367a719833c53de6911cabba2b7"}, - {file = "cryptography-42.0.8-cp37-abi3-win32.whl", hash = "sha256:a0c5b2b0585b6af82d7e385f55a8bc568abff8923af147ee3c07bd8b42cda8b2"}, - {file = "cryptography-42.0.8-cp37-abi3-win_amd64.whl", hash = "sha256:57080dee41209e556a9a4ce60d229244f7a66ef52750f813bfbe18959770cfba"}, - {file = "cryptography-42.0.8-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:dea567d1b0e8bc5764b9443858b673b734100c2871dc93163f58c46a97a83d28"}, - {file = "cryptography-42.0.8-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4783183f7cb757b73b2ae9aed6599b96338eb957233c58ca8f49a49cc32fd5e"}, - {file = "cryptography-42.0.8-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0608251135d0e03111152e41f0cc2392d1e74e35703960d4190b2e0f4ca9c70"}, - {file = "cryptography-42.0.8-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:dc0fdf6787f37b1c6b08e6dfc892d9d068b5bdb671198c72072828b80bd5fe4c"}, - {file = "cryptography-42.0.8-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:9c0c1716c8447ee7dbf08d6db2e5c41c688544c61074b54fc4564196f55c25a7"}, - {file = "cryptography-42.0.8-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:fff12c88a672ab9c9c1cf7b0c80e3ad9e2ebd9d828d955c126be4fd3e5578c9e"}, - {file = "cryptography-42.0.8-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:cafb92b2bc622cd1aa6a1dce4b93307792633f4c5fe1f46c6b97cf67073ec961"}, - {file = "cryptography-42.0.8-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:31f721658a29331f895a5a54e7e82075554ccfb8b163a18719d342f5ffe5ecb1"}, - {file = "cryptography-42.0.8-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b297f90c5723d04bcc8265fc2a0f86d4ea2e0f7ab4b6994459548d3a6b992a14"}, - {file = "cryptography-42.0.8-cp39-abi3-win32.whl", hash = "sha256:2f88d197e66c65be5e42cd72e5c18afbfae3f741742070e3019ac8f4ac57262c"}, - {file = "cryptography-42.0.8-cp39-abi3-win_amd64.whl", hash = "sha256:fa76fbb7596cc5839320000cdd5d0955313696d9511debab7ee7278fc8b5c84a"}, - {file = "cryptography-42.0.8-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ba4f0a211697362e89ad822e667d8d340b4d8d55fae72cdd619389fb5912eefe"}, - {file = "cryptography-42.0.8-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:81884c4d096c272f00aeb1f11cf62ccd39763581645b0812e99a91505fa48e0c"}, - {file = "cryptography-42.0.8-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c9bb2ae11bfbab395bdd072985abde58ea9860ed84e59dbc0463a5d0159f5b71"}, - {file = "cryptography-42.0.8-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:7016f837e15b0a1c119d27ecd89b3515f01f90a8615ed5e9427e30d9cdbfed3d"}, - {file = "cryptography-42.0.8-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5a94eccb2a81a309806027e1670a358b99b8fe8bfe9f8d329f27d72c094dde8c"}, - {file = "cryptography-42.0.8-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:dec9b018df185f08483f294cae6ccac29e7a6e0678996587363dc352dc65c842"}, - {file = "cryptography-42.0.8-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:343728aac38decfdeecf55ecab3264b015be68fc2816ca800db649607aeee648"}, - {file = "cryptography-42.0.8-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:013629ae70b40af70c9a7a5db40abe5d9054e6f4380e50ce769947b73bf3caad"}, - {file = "cryptography-42.0.8.tar.gz", hash = "sha256:8d09d05439ce7baa8e9e95b07ec5b6c886f548deb7e0f69ef25f64b3bce842f2"}, + {file = "cryptography-43.0.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:64c3f16e2a4fc51c0d06af28441881f98c5d91009b8caaff40cf3548089e9c74"}, + {file = "cryptography-43.0.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3dcdedae5c7710b9f97ac6bba7e1052b95c7083c9d0e9df96e02a1932e777895"}, + {file = "cryptography-43.0.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d9a1eca329405219b605fac09ecfc09ac09e595d6def650a437523fcd08dd22"}, + {file = "cryptography-43.0.0-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:ea9e57f8ea880eeea38ab5abf9fbe39f923544d7884228ec67d666abd60f5a47"}, + {file = "cryptography-43.0.0-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:9a8d6802e0825767476f62aafed40532bd435e8a5f7d23bd8b4f5fd04cc80ecf"}, + {file = "cryptography-43.0.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:cc70b4b581f28d0a254d006f26949245e3657d40d8857066c2ae22a61222ef55"}, + {file = "cryptography-43.0.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:4a997df8c1c2aae1e1e5ac49c2e4f610ad037fc5a3aadc7b64e39dea42249431"}, + {file = "cryptography-43.0.0-cp37-abi3-win32.whl", hash = "sha256:6e2b11c55d260d03a8cf29ac9b5e0608d35f08077d8c087be96287f43af3ccdc"}, + {file = "cryptography-43.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:31e44a986ceccec3d0498e16f3d27b2ee5fdf69ce2ab89b52eaad1d2f33d8778"}, + {file = "cryptography-43.0.0-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:7b3f5fe74a5ca32d4d0f302ffe6680fcc5c28f8ef0dc0ae8f40c0f3a1b4fca66"}, + {file = "cryptography-43.0.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac1955ce000cb29ab40def14fd1bbfa7af2017cca696ee696925615cafd0dce5"}, + {file = "cryptography-43.0.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:299d3da8e00b7e2b54bb02ef58d73cd5f55fb31f33ebbf33bd00d9aa6807df7e"}, + {file = "cryptography-43.0.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:ee0c405832ade84d4de74b9029bedb7b31200600fa524d218fc29bfa371e97f5"}, + {file = "cryptography-43.0.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:cb013933d4c127349b3948aa8aaf2f12c0353ad0eccd715ca789c8a0f671646f"}, + {file = "cryptography-43.0.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fdcb265de28585de5b859ae13e3846a8e805268a823a12a4da2597f1f5afc9f0"}, + {file = "cryptography-43.0.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:2905ccf93a8a2a416f3ec01b1a7911c3fe4073ef35640e7ee5296754e30b762b"}, + {file = "cryptography-43.0.0-cp39-abi3-win32.whl", hash = "sha256:47ca71115e545954e6c1d207dd13461ab81f4eccfcb1345eac874828b5e3eaaf"}, + {file = "cryptography-43.0.0-cp39-abi3-win_amd64.whl", hash = "sha256:0663585d02f76929792470451a5ba64424acc3cd5227b03921dab0e2f27b1709"}, + {file = "cryptography-43.0.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2c6d112bf61c5ef44042c253e4859b3cbbb50df2f78fa8fae6747a7814484a70"}, + {file = "cryptography-43.0.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:844b6d608374e7d08f4f6e6f9f7b951f9256db41421917dfb2d003dde4cd6b66"}, + {file = "cryptography-43.0.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:51956cf8730665e2bdf8ddb8da0056f699c1a5715648c1b0144670c1ba00b48f"}, + {file = "cryptography-43.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:aae4d918f6b180a8ab8bf6511a419473d107df4dbb4225c7b48c5c9602c38c7f"}, + {file = "cryptography-43.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:232ce02943a579095a339ac4b390fbbe97f5b5d5d107f8a08260ea2768be8cc2"}, + {file = "cryptography-43.0.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:5bcb8a5620008a8034d39bce21dc3e23735dfdb6a33a06974739bfa04f853947"}, + {file = "cryptography-43.0.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:08a24a7070b2b6804c1940ff0f910ff728932a9d0e80e7814234269f9d46d069"}, + {file = "cryptography-43.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:e9c5266c432a1e23738d178e51c2c7a5e2ddf790f248be939448c0ba2021f9d1"}, + {file = "cryptography-43.0.0.tar.gz", hash = "sha256:b88075ada2d51aa9f18283532c9f60e72170041bba88d7f37e49cbb10275299e"}, ] [package.dependencies] @@ -673,7 +716,7 @@ nox = ["nox"] pep8test = ["check-sdist", "click", "mypy", "ruff"] sdist = ["build"] ssh = ["bcrypt (>=3.1.5)"] -test = ["certifi", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] +test = ["certifi", "cryptography-vectors (==43.0.0)", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] test-randomorder = ["pytest-randomly"] [[package]] @@ -722,33 +765,33 @@ vision = ["Pillow (>=9.4.0)"] [[package]] name = "debugpy" -version = "1.8.2" +version = "1.8.5" description = "An implementation of the Debug Adapter Protocol for Python" optional = false python-versions = ">=3.8" files = [ - {file = "debugpy-1.8.2-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:7ee2e1afbf44b138c005e4380097d92532e1001580853a7cb40ed84e0ef1c3d2"}, - {file = "debugpy-1.8.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f8c3f7c53130a070f0fc845a0f2cee8ed88d220d6b04595897b66605df1edd6"}, - {file = "debugpy-1.8.2-cp310-cp310-win32.whl", hash = "sha256:f179af1e1bd4c88b0b9f0fa153569b24f6b6f3de33f94703336363ae62f4bf47"}, - {file = "debugpy-1.8.2-cp310-cp310-win_amd64.whl", hash = "sha256:0600faef1d0b8d0e85c816b8bb0cb90ed94fc611f308d5fde28cb8b3d2ff0fe3"}, - {file = "debugpy-1.8.2-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:8a13417ccd5978a642e91fb79b871baded925d4fadd4dfafec1928196292aa0a"}, - {file = "debugpy-1.8.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acdf39855f65c48ac9667b2801234fc64d46778021efac2de7e50907ab90c634"}, - {file = "debugpy-1.8.2-cp311-cp311-win32.whl", hash = "sha256:2cbd4d9a2fc5e7f583ff9bf11f3b7d78dfda8401e8bb6856ad1ed190be4281ad"}, - {file = "debugpy-1.8.2-cp311-cp311-win_amd64.whl", hash = "sha256:d3408fddd76414034c02880e891ea434e9a9cf3a69842098ef92f6e809d09afa"}, - {file = "debugpy-1.8.2-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:5d3ccd39e4021f2eb86b8d748a96c766058b39443c1f18b2dc52c10ac2757835"}, - {file = "debugpy-1.8.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62658aefe289598680193ff655ff3940e2a601765259b123dc7f89c0239b8cd3"}, - {file = "debugpy-1.8.2-cp312-cp312-win32.whl", hash = "sha256:bd11fe35d6fd3431f1546d94121322c0ac572e1bfb1f6be0e9b8655fb4ea941e"}, - {file = "debugpy-1.8.2-cp312-cp312-win_amd64.whl", hash = "sha256:15bc2f4b0f5e99bf86c162c91a74c0631dbd9cef3c6a1d1329c946586255e859"}, - {file = "debugpy-1.8.2-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:5a019d4574afedc6ead1daa22736c530712465c0c4cd44f820d803d937531b2d"}, - {file = "debugpy-1.8.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40f062d6877d2e45b112c0bbade9a17aac507445fd638922b1a5434df34aed02"}, - {file = "debugpy-1.8.2-cp38-cp38-win32.whl", hash = "sha256:c78ba1680f1015c0ca7115671fe347b28b446081dada3fedf54138f44e4ba031"}, - {file = "debugpy-1.8.2-cp38-cp38-win_amd64.whl", hash = "sha256:cf327316ae0c0e7dd81eb92d24ba8b5e88bb4d1b585b5c0d32929274a66a5210"}, - {file = "debugpy-1.8.2-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:1523bc551e28e15147815d1397afc150ac99dbd3a8e64641d53425dba57b0ff9"}, - {file = "debugpy-1.8.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e24ccb0cd6f8bfaec68d577cb49e9c680621c336f347479b3fce060ba7c09ec1"}, - {file = "debugpy-1.8.2-cp39-cp39-win32.whl", hash = "sha256:7f8d57a98c5a486c5c7824bc0b9f2f11189d08d73635c326abef268f83950326"}, - {file = "debugpy-1.8.2-cp39-cp39-win_amd64.whl", hash = "sha256:16c8dcab02617b75697a0a925a62943e26a0330da076e2a10437edd9f0bf3755"}, - {file = "debugpy-1.8.2-py2.py3-none-any.whl", hash = "sha256:16e16df3a98a35c63c3ab1e4d19be4cbc7fdda92d9ddc059294f18910928e0ca"}, - {file = "debugpy-1.8.2.zip", hash = "sha256:95378ed08ed2089221896b9b3a8d021e642c24edc8fef20e5d4342ca8be65c00"}, + {file = "debugpy-1.8.5-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:7e4d594367d6407a120b76bdaa03886e9eb652c05ba7f87e37418426ad2079f7"}, + {file = "debugpy-1.8.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4413b7a3ede757dc33a273a17d685ea2b0c09dbd312cc03f5534a0fd4d40750a"}, + {file = "debugpy-1.8.5-cp310-cp310-win32.whl", hash = "sha256:dd3811bd63632bb25eda6bd73bea8e0521794cda02be41fa3160eb26fc29e7ed"}, + {file = "debugpy-1.8.5-cp310-cp310-win_amd64.whl", hash = "sha256:b78c1250441ce893cb5035dd6f5fc12db968cc07f91cc06996b2087f7cefdd8e"}, + {file = "debugpy-1.8.5-cp311-cp311-macosx_12_0_universal2.whl", hash = "sha256:606bccba19f7188b6ea9579c8a4f5a5364ecd0bf5a0659c8a5d0e10dcee3032a"}, + {file = "debugpy-1.8.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db9fb642938a7a609a6c865c32ecd0d795d56c1aaa7a7a5722d77855d5e77f2b"}, + {file = "debugpy-1.8.5-cp311-cp311-win32.whl", hash = "sha256:4fbb3b39ae1aa3e5ad578f37a48a7a303dad9a3d018d369bc9ec629c1cfa7408"}, + {file = "debugpy-1.8.5-cp311-cp311-win_amd64.whl", hash = "sha256:345d6a0206e81eb68b1493ce2fbffd57c3088e2ce4b46592077a943d2b968ca3"}, + {file = "debugpy-1.8.5-cp312-cp312-macosx_12_0_universal2.whl", hash = "sha256:5b5c770977c8ec6c40c60d6f58cacc7f7fe5a45960363d6974ddb9b62dbee156"}, + {file = "debugpy-1.8.5-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0a65b00b7cdd2ee0c2cf4c7335fef31e15f1b7056c7fdbce9e90193e1a8c8cb"}, + {file = "debugpy-1.8.5-cp312-cp312-win32.whl", hash = "sha256:c9f7c15ea1da18d2fcc2709e9f3d6de98b69a5b0fff1807fb80bc55f906691f7"}, + {file = "debugpy-1.8.5-cp312-cp312-win_amd64.whl", hash = "sha256:28ced650c974aaf179231668a293ecd5c63c0a671ae6d56b8795ecc5d2f48d3c"}, + {file = "debugpy-1.8.5-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:3df6692351172a42af7558daa5019651f898fc67450bf091335aa8a18fbf6f3a"}, + {file = "debugpy-1.8.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1cd04a73eb2769eb0bfe43f5bfde1215c5923d6924b9b90f94d15f207a402226"}, + {file = "debugpy-1.8.5-cp38-cp38-win32.whl", hash = "sha256:8f913ee8e9fcf9d38a751f56e6de12a297ae7832749d35de26d960f14280750a"}, + {file = "debugpy-1.8.5-cp38-cp38-win_amd64.whl", hash = "sha256:a697beca97dad3780b89a7fb525d5e79f33821a8bc0c06faf1f1289e549743cf"}, + {file = "debugpy-1.8.5-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:0a1029a2869d01cb777216af8c53cda0476875ef02a2b6ff8b2f2c9a4b04176c"}, + {file = "debugpy-1.8.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e84c276489e141ed0b93b0af648eef891546143d6a48f610945416453a8ad406"}, + {file = "debugpy-1.8.5-cp39-cp39-win32.whl", hash = "sha256:ad84b7cde7fd96cf6eea34ff6c4a1b7887e0fe2ea46e099e53234856f9d99a34"}, + {file = "debugpy-1.8.5-cp39-cp39-win_amd64.whl", hash = "sha256:7b0fe36ed9d26cb6836b0a51453653f8f2e347ba7348f2bbfe76bfeb670bfb1c"}, + {file = "debugpy-1.8.5-py2.py3-none-any.whl", hash = "sha256:55919dce65b471eff25901acf82d328bbd5b833526b6c1364bd5133754777a44"}, + {file = "debugpy-1.8.5.zip", hash = "sha256:b2112cfeb34b4507399d298fe7023a16656fc553ed5246536060ca7bd0e668d0"}, ] [[package]] @@ -1129,13 +1172,13 @@ grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] [[package]] name = "google-api-python-client" -version = "2.137.0" +version = "2.140.0" description = "Google API Client Library for Python" optional = true python-versions = ">=3.7" files = [ - {file = "google_api_python_client-2.137.0-py2.py3-none-any.whl", hash = "sha256:a8b5c5724885e5be9f5368739aa0ccf416627da4ebd914b410a090c18f84d692"}, - {file = "google_api_python_client-2.137.0.tar.gz", hash = "sha256:e739cb74aac8258b1886cb853b0722d47c81fe07ad649d7f2206f06530513c04"}, + {file = "google_api_python_client-2.140.0-py2.py3-none-any.whl", hash = "sha256:aeb4bb99e9fdd241473da5ff35464a0658fea0db76fe89c0f8c77ecfc3813404"}, + {file = "google_api_python_client-2.140.0.tar.gz", hash = "sha256:0bb973adccbe66a3d0a70abe4e49b3f2f004d849416bfec38d22b75649d389d8"}, ] [package.dependencies] @@ -1147,13 +1190,13 @@ uritemplate = ">=3.0.1,<5" [[package]] name = "google-auth" -version = "2.32.0" +version = "2.33.0" description = "Google Authentication Library" optional = true python-versions = ">=3.7" files = [ - {file = "google_auth-2.32.0-py2.py3-none-any.whl", hash = "sha256:53326ea2ebec768070a94bee4e1b9194c9646ea0c2bd72422785bd0f9abfad7b"}, - {file = "google_auth-2.32.0.tar.gz", hash = "sha256:49315be72c55a6a37d62819e3573f6b416aca00721f7e3e31a008d928bf64022"}, + {file = "google_auth-2.33.0-py2.py3-none-any.whl", hash = "sha256:8eff47d0d4a34ab6265c50a106a3362de6a9975bb08998700e389f857e4d39df"}, + {file = "google_auth-2.33.0.tar.gz", hash = "sha256:d6a52342160d7290e334b4d47ba390767e4438ad0d45b7630774533e82655b95"}, ] [package.dependencies] @@ -1315,76 +1358,76 @@ typing-extensions = ">=4.7,<5" [[package]] name = "grpcio" -version = "1.64.1" +version = "1.65.4" description = "HTTP/2-based RPC framework" optional = true python-versions = ">=3.8" files = [ - {file = "grpcio-1.64.1-cp310-cp310-linux_armv7l.whl", hash = "sha256:55697ecec192bc3f2f3cc13a295ab670f51de29884ca9ae6cd6247df55df2502"}, - {file = "grpcio-1.64.1-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:3b64ae304c175671efdaa7ec9ae2cc36996b681eb63ca39c464958396697daff"}, - {file = "grpcio-1.64.1-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:bac71b4b28bc9af61efcdc7630b166440bbfbaa80940c9a697271b5e1dabbc61"}, - {file = "grpcio-1.64.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6c024ffc22d6dc59000faf8ad781696d81e8e38f4078cb0f2630b4a3cf231a90"}, - {file = "grpcio-1.64.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e7cd5c1325f6808b8ae31657d281aadb2a51ac11ab081ae335f4f7fc44c1721d"}, - {file = "grpcio-1.64.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:0a2813093ddb27418a4c99f9b1c223fab0b053157176a64cc9db0f4557b69bd9"}, - {file = "grpcio-1.64.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2981c7365a9353f9b5c864595c510c983251b1ab403e05b1ccc70a3d9541a73b"}, - {file = "grpcio-1.64.1-cp310-cp310-win32.whl", hash = "sha256:1262402af5a511c245c3ae918167eca57342c72320dffae5d9b51840c4b2f86d"}, - {file = "grpcio-1.64.1-cp310-cp310-win_amd64.whl", hash = "sha256:19264fc964576ddb065368cae953f8d0514ecc6cb3da8903766d9fb9d4554c33"}, - {file = "grpcio-1.64.1-cp311-cp311-linux_armv7l.whl", hash = "sha256:58b1041e7c870bb30ee41d3090cbd6f0851f30ae4eb68228955d973d3efa2e61"}, - {file = "grpcio-1.64.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:bbc5b1d78a7822b0a84c6f8917faa986c1a744e65d762ef6d8be9d75677af2ca"}, - {file = "grpcio-1.64.1-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:5841dd1f284bd1b3d8a6eca3a7f062b06f1eec09b184397e1d1d43447e89a7ae"}, - {file = "grpcio-1.64.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8caee47e970b92b3dd948371230fcceb80d3f2277b3bf7fbd7c0564e7d39068e"}, - {file = "grpcio-1.64.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:73819689c169417a4f978e562d24f2def2be75739c4bed1992435d007819da1b"}, - {file = "grpcio-1.64.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:6503b64c8b2dfad299749cad1b595c650c91e5b2c8a1b775380fcf8d2cbba1e9"}, - {file = "grpcio-1.64.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1de403fc1305fd96cfa75e83be3dee8538f2413a6b1685b8452301c7ba33c294"}, - {file = "grpcio-1.64.1-cp311-cp311-win32.whl", hash = "sha256:d4d29cc612e1332237877dfa7fe687157973aab1d63bd0f84cf06692f04c0367"}, - {file = "grpcio-1.64.1-cp311-cp311-win_amd64.whl", hash = "sha256:5e56462b05a6f860b72f0fa50dca06d5b26543a4e88d0396259a07dc30f4e5aa"}, - {file = "grpcio-1.64.1-cp312-cp312-linux_armv7l.whl", hash = "sha256:4657d24c8063e6095f850b68f2d1ba3b39f2b287a38242dcabc166453e950c59"}, - {file = "grpcio-1.64.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:62b4e6eb7bf901719fce0ca83e3ed474ae5022bb3827b0a501e056458c51c0a1"}, - {file = "grpcio-1.64.1-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:ee73a2f5ca4ba44fa33b4d7d2c71e2c8a9e9f78d53f6507ad68e7d2ad5f64a22"}, - {file = "grpcio-1.64.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:198908f9b22e2672a998870355e226a725aeab327ac4e6ff3a1399792ece4762"}, - {file = "grpcio-1.64.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39b9d0acaa8d835a6566c640f48b50054f422d03e77e49716d4c4e8e279665a1"}, - {file = "grpcio-1.64.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:5e42634a989c3aa6049f132266faf6b949ec2a6f7d302dbb5c15395b77d757eb"}, - {file = "grpcio-1.64.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b1a82e0b9b3022799c336e1fc0f6210adc019ae84efb7321d668129d28ee1efb"}, - {file = "grpcio-1.64.1-cp312-cp312-win32.whl", hash = "sha256:55260032b95c49bee69a423c2f5365baa9369d2f7d233e933564d8a47b893027"}, - {file = "grpcio-1.64.1-cp312-cp312-win_amd64.whl", hash = "sha256:c1a786ac592b47573a5bb7e35665c08064a5d77ab88a076eec11f8ae86b3e3f6"}, - {file = "grpcio-1.64.1-cp38-cp38-linux_armv7l.whl", hash = "sha256:a011ac6c03cfe162ff2b727bcb530567826cec85eb8d4ad2bfb4bd023287a52d"}, - {file = "grpcio-1.64.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:4d6dab6124225496010bd22690f2d9bd35c7cbb267b3f14e7a3eb05c911325d4"}, - {file = "grpcio-1.64.1-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:a5e771d0252e871ce194d0fdcafd13971f1aae0ddacc5f25615030d5df55c3a2"}, - {file = "grpcio-1.64.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2c3c1b90ab93fed424e454e93c0ed0b9d552bdf1b0929712b094f5ecfe7a23ad"}, - {file = "grpcio-1.64.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20405cb8b13fd779135df23fabadc53b86522d0f1cba8cca0e87968587f50650"}, - {file = "grpcio-1.64.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:0cc79c982ccb2feec8aad0e8fb0d168bcbca85bc77b080d0d3c5f2f15c24ea8f"}, - {file = "grpcio-1.64.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a3a035c37ce7565b8f4f35ff683a4db34d24e53dc487e47438e434eb3f701b2a"}, - {file = "grpcio-1.64.1-cp38-cp38-win32.whl", hash = "sha256:1257b76748612aca0f89beec7fa0615727fd6f2a1ad580a9638816a4b2eb18fd"}, - {file = "grpcio-1.64.1-cp38-cp38-win_amd64.whl", hash = "sha256:0a12ddb1678ebc6a84ec6b0487feac020ee2b1659cbe69b80f06dbffdb249122"}, - {file = "grpcio-1.64.1-cp39-cp39-linux_armv7l.whl", hash = "sha256:75dbbf415026d2862192fe1b28d71f209e2fd87079d98470db90bebe57b33179"}, - {file = "grpcio-1.64.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e3d9f8d1221baa0ced7ec7322a981e28deb23749c76eeeb3d33e18b72935ab62"}, - {file = "grpcio-1.64.1-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:5f8b75f64d5d324c565b263c67dbe4f0af595635bbdd93bb1a88189fc62ed2e5"}, - {file = "grpcio-1.64.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c84ad903d0d94311a2b7eea608da163dace97c5fe9412ea311e72c3684925602"}, - {file = "grpcio-1.64.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:940e3ec884520155f68a3b712d045e077d61c520a195d1a5932c531f11883489"}, - {file = "grpcio-1.64.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f10193c69fc9d3d726e83bbf0f3d316f1847c3071c8c93d8090cf5f326b14309"}, - {file = "grpcio-1.64.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ac15b6c2c80a4d1338b04d42a02d376a53395ddf0ec9ab157cbaf44191f3ffdd"}, - {file = "grpcio-1.64.1-cp39-cp39-win32.whl", hash = "sha256:03b43d0ccf99c557ec671c7dede64f023c7da9bb632ac65dbc57f166e4970040"}, - {file = "grpcio-1.64.1-cp39-cp39-win_amd64.whl", hash = "sha256:ed6091fa0adcc7e4ff944090cf203a52da35c37a130efa564ded02b7aff63bcd"}, - {file = "grpcio-1.64.1.tar.gz", hash = "sha256:8d51dd1c59d5fa0f34266b80a3805ec29a1f26425c2a54736133f6d87fc4968a"}, + {file = "grpcio-1.65.4-cp310-cp310-linux_armv7l.whl", hash = "sha256:0e85c8766cf7f004ab01aff6a0393935a30d84388fa3c58d77849fcf27f3e98c"}, + {file = "grpcio-1.65.4-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:e4a795c02405c7dfa8affd98c14d980f4acea16ea3b539e7404c645329460e5a"}, + {file = "grpcio-1.65.4-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:d7b984a8dd975d949c2042b9b5ebcf297d6d5af57dcd47f946849ee15d3c2fb8"}, + {file = "grpcio-1.65.4-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:644a783ce604a7d7c91412bd51cf9418b942cf71896344b6dc8d55713c71ce82"}, + {file = "grpcio-1.65.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5764237d751d3031a36fafd57eb7d36fd2c10c658d2b4057c516ccf114849a3e"}, + {file = "grpcio-1.65.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ee40d058cf20e1dd4cacec9c39e9bce13fedd38ce32f9ba00f639464fcb757de"}, + {file = "grpcio-1.65.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4482a44ce7cf577a1f8082e807a5b909236bce35b3e3897f839f2fbd9ae6982d"}, + {file = "grpcio-1.65.4-cp310-cp310-win32.whl", hash = "sha256:66bb051881c84aa82e4f22d8ebc9d1704b2e35d7867757f0740c6ef7b902f9b1"}, + {file = "grpcio-1.65.4-cp310-cp310-win_amd64.whl", hash = "sha256:870370524eff3144304da4d1bbe901d39bdd24f858ce849b7197e530c8c8f2ec"}, + {file = "grpcio-1.65.4-cp311-cp311-linux_armv7l.whl", hash = "sha256:85e9c69378af02e483bc626fc19a218451b24a402bdf44c7531e4c9253fb49ef"}, + {file = "grpcio-1.65.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2bd672e005afab8bf0d6aad5ad659e72a06dd713020554182a66d7c0c8f47e18"}, + {file = "grpcio-1.65.4-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:abccc5d73f5988e8f512eb29341ed9ced923b586bb72e785f265131c160231d8"}, + {file = "grpcio-1.65.4-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:886b45b29f3793b0c2576201947258782d7e54a218fe15d4a0468d9a6e00ce17"}, + {file = "grpcio-1.65.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be952436571dacc93ccc7796db06b7daf37b3b56bb97e3420e6503dccfe2f1b4"}, + {file = "grpcio-1.65.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:8dc9ddc4603ec43f6238a5c95400c9a901b6d079feb824e890623da7194ff11e"}, + {file = "grpcio-1.65.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ade1256c98cba5a333ef54636095f2c09e6882c35f76acb04412f3b1aa3c29a5"}, + {file = "grpcio-1.65.4-cp311-cp311-win32.whl", hash = "sha256:280e93356fba6058cbbfc6f91a18e958062ef1bdaf5b1caf46c615ba1ae71b5b"}, + {file = "grpcio-1.65.4-cp311-cp311-win_amd64.whl", hash = "sha256:d2b819f9ee27ed4e3e737a4f3920e337e00bc53f9e254377dd26fc7027c4d558"}, + {file = "grpcio-1.65.4-cp312-cp312-linux_armv7l.whl", hash = "sha256:926a0750a5e6fb002542e80f7fa6cab8b1a2ce5513a1c24641da33e088ca4c56"}, + {file = "grpcio-1.65.4-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:2a1d4c84d9e657f72bfbab8bedf31bdfc6bfc4a1efb10b8f2d28241efabfaaf2"}, + {file = "grpcio-1.65.4-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:17de4fda50967679677712eec0a5c13e8904b76ec90ac845d83386b65da0ae1e"}, + {file = "grpcio-1.65.4-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3dee50c1b69754a4228e933696408ea87f7e896e8d9797a3ed2aeed8dbd04b74"}, + {file = "grpcio-1.65.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:74c34fc7562bdd169b77966068434a93040bfca990e235f7a67cdf26e1bd5c63"}, + {file = "grpcio-1.65.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:24a2246e80a059b9eb981e4c2a6d8111b1b5e03a44421adbf2736cc1d4988a8a"}, + {file = "grpcio-1.65.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:18c10f0d054d2dce34dd15855fcca7cc44ec3b811139437543226776730c0f28"}, + {file = "grpcio-1.65.4-cp312-cp312-win32.whl", hash = "sha256:d72962788b6c22ddbcdb70b10c11fbb37d60ae598c51eb47ec019db66ccfdff0"}, + {file = "grpcio-1.65.4-cp312-cp312-win_amd64.whl", hash = "sha256:7656376821fed8c89e68206a522522317787a3d9ed66fb5110b1dff736a5e416"}, + {file = "grpcio-1.65.4-cp38-cp38-linux_armv7l.whl", hash = "sha256:4934077b33aa6fe0b451de8b71dabde96bf2d9b4cb2b3187be86e5adebcba021"}, + {file = "grpcio-1.65.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:0cef8c919a3359847c357cb4314e50ed1f0cca070f828ee8f878d362fd744d52"}, + {file = "grpcio-1.65.4-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:a925446e6aa12ca37114840d8550f308e29026cdc423a73da3043fd1603a6385"}, + {file = "grpcio-1.65.4-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cf53e6247f1e2af93657e62e240e4f12e11ee0b9cef4ddcb37eab03d501ca864"}, + {file = "grpcio-1.65.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdb34278e4ceb224c89704cd23db0d902e5e3c1c9687ec9d7c5bb4c150f86816"}, + {file = "grpcio-1.65.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:e6cbdd107e56bde55c565da5fd16f08e1b4e9b0674851d7749e7f32d8645f524"}, + {file = "grpcio-1.65.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:626319a156b1f19513156a3b0dbfe977f5f93db63ca673a0703238ebd40670d7"}, + {file = "grpcio-1.65.4-cp38-cp38-win32.whl", hash = "sha256:3d1bbf7e1dd1096378bd83c83f554d3b93819b91161deaf63e03b7022a85224a"}, + {file = "grpcio-1.65.4-cp38-cp38-win_amd64.whl", hash = "sha256:a99e6dffefd3027b438116f33ed1261c8d360f0dd4f943cb44541a2782eba72f"}, + {file = "grpcio-1.65.4-cp39-cp39-linux_armv7l.whl", hash = "sha256:874acd010e60a2ec1e30d5e505b0651ab12eb968157cd244f852b27c6dbed733"}, + {file = "grpcio-1.65.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b07f36faf01fca5427d4aa23645e2d492157d56c91fab7e06fe5697d7e171ad4"}, + {file = "grpcio-1.65.4-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:b81711bf4ec08a3710b534e8054c7dcf90f2edc22bebe11c1775a23f145595fe"}, + {file = "grpcio-1.65.4-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88fcabc332a4aef8bcefadc34a02e9ab9407ab975d2c7d981a8e12c1aed92aa1"}, + {file = "grpcio-1.65.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9ba3e63108a8749994f02c7c0e156afb39ba5bdf755337de8e75eb685be244b"}, + {file = "grpcio-1.65.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:8eb485801957a486bf5de15f2c792d9f9c897a86f2f18db8f3f6795a094b4bb2"}, + {file = "grpcio-1.65.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:075f3903bc1749ace93f2b0664f72964ee5f2da5c15d4b47e0ab68e4f442c257"}, + {file = "grpcio-1.65.4-cp39-cp39-win32.whl", hash = "sha256:0a0720299bdb2cc7306737295d56e41ce8827d5669d4a3cd870af832e3b17c4d"}, + {file = "grpcio-1.65.4-cp39-cp39-win_amd64.whl", hash = "sha256:a146bc40fa78769f22e1e9ff4f110ef36ad271b79707577bf2a31e3e931141b9"}, + {file = "grpcio-1.65.4.tar.gz", hash = "sha256:2a4f476209acffec056360d3e647ae0e14ae13dcf3dfb130c227ae1c594cbe39"}, ] [package.extras] -protobuf = ["grpcio-tools (>=1.64.1)"] +protobuf = ["grpcio-tools (>=1.65.4)"] [[package]] name = "grpcio-status" -version = "1.62.2" +version = "1.62.3" description = "Status proto mapping for gRPC" optional = true python-versions = ">=3.6" files = [ - {file = "grpcio-status-1.62.2.tar.gz", hash = "sha256:62e1bfcb02025a1cd73732a2d33672d3e9d0df4d21c12c51e0bbcaf09bab742a"}, - {file = "grpcio_status-1.62.2-py3-none-any.whl", hash = "sha256:206ddf0eb36bc99b033f03b2c8e95d319f0044defae9b41ae21408e7e0cda48f"}, + {file = "grpcio-status-1.62.3.tar.gz", hash = "sha256:289bdd7b2459794a12cf95dc0cb727bd4a1742c37bd823f760236c937e53a485"}, + {file = "grpcio_status-1.62.3-py3-none-any.whl", hash = "sha256:f9049b762ba8de6b1086789d8315846e094edac2c50beaf462338b301a8fd4b8"}, ] [package.dependencies] googleapis-common-protos = ">=1.5.5" -grpcio = ">=1.62.2" +grpcio = ">=1.62.3" protobuf = ">=4.21.6" [[package]] @@ -1430,120 +1473,105 @@ files = [ [[package]] name = "hiredis" -version = "2.3.2" +version = "2.4.0" description = "Python wrapper for hiredis" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "hiredis-2.3.2-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:742093f33d374098aa21c1696ac6e4874b52658c870513a297a89265a4d08fe5"}, - {file = "hiredis-2.3.2-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:9e14fb70ca4f7efa924f508975199353bf653f452e4ef0a1e47549e208f943d7"}, - {file = "hiredis-2.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6d7302b4b17fcc1cc727ce84ded7f6be4655701e8d58744f73b09cb9ed2b13df"}, - {file = "hiredis-2.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed63e8b75c193c5e5a8288d9d7b011da076cc314fafc3bfd59ec1d8a750d48c8"}, - {file = "hiredis-2.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6b4edee59dc089bc3948f4f6fba309f51aa2ccce63902364900aa0a553a85e97"}, - {file = "hiredis-2.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6481c3b7673a86276220140456c2a6fbfe8d1fb5c613b4728293c8634134824"}, - {file = "hiredis-2.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:684840b014ce83541a087fcf2d48227196576f56ae3e944d4dfe14c0a3e0ccb7"}, - {file = "hiredis-2.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c4c0bcf786f0eac9593367b6279e9b89534e008edbf116dcd0de956524702c8"}, - {file = "hiredis-2.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:66ab949424ac6504d823cba45c4c4854af5c59306a1531edb43b4dd22e17c102"}, - {file = "hiredis-2.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:322c668ee1c12d6c5750a4b1057e6b4feee2a75b3d25d630922a463cfe5e7478"}, - {file = "hiredis-2.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:bfa73e3f163c6e8b2ec26f22285d717a5f77ab2120c97a2605d8f48b26950dac"}, - {file = "hiredis-2.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:7f39f28ffc65de577c3bc0c7615f149e35bc927802a0f56e612db9b530f316f9"}, - {file = "hiredis-2.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:55ce31bf4711da879b96d511208efb65a6165da4ba91cb3a96d86d5a8d9d23e6"}, - {file = "hiredis-2.3.2-cp310-cp310-win32.whl", hash = "sha256:3dd63d0bbbe75797b743f35d37a4cca7ca7ba35423a0de742ae2985752f20c6d"}, - {file = "hiredis-2.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:ea002656a8d974daaf6089863ab0a306962c8b715db6b10879f98b781a2a5bf5"}, - {file = "hiredis-2.3.2-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:adfbf2e9c38b77d0db2fb32c3bdaea638fa76b4e75847283cd707521ad2475ef"}, - {file = "hiredis-2.3.2-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:80b02d27864ebaf9b153d4b99015342382eeaed651f5591ce6f07e840307c56d"}, - {file = "hiredis-2.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bd40d2e2f82a483de0d0a6dfd8c3895a02e55e5c9949610ecbded18188fd0a56"}, - {file = "hiredis-2.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dfa904045d7cebfb0f01dad51352551cce1d873d7c3f80c7ded7d42f8cac8f89"}, - {file = "hiredis-2.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:28bd184b33e0dd6d65816c16521a4ba1ffbe9ff07d66873c42ea4049a62fed83"}, - {file = "hiredis-2.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f70481213373d44614148f0f2e38e7905be3f021902ae5167289413196de4ba4"}, - {file = "hiredis-2.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb8797b528c1ff81eef06713623562b36db3dafa106b59f83a6468df788ff0d1"}, - {file = "hiredis-2.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:02fc71c8333586871602db4774d3a3e403b4ccf6446dc4603ec12df563127cee"}, - {file = "hiredis-2.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0da56915bda1e0a49157191b54d3e27689b70960f0685fdd5c415dacdee2fbed"}, - {file = "hiredis-2.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:e2674a5a3168349435b08fa0b82998ed2536eb9acccf7087efe26e4cd088a525"}, - {file = "hiredis-2.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:dc1c3fd49930494a67dcec37d0558d99d84eca8eb3f03b17198424538f2608d7"}, - {file = "hiredis-2.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:14c7b43205e515f538a9defb4e411e0f0576caaeeda76bb9993ed505486f7562"}, - {file = "hiredis-2.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7bac7e02915b970c3723a7a7c5df4ba7a11a3426d2a3f181e041aa506a1ff028"}, - {file = "hiredis-2.3.2-cp311-cp311-win32.whl", hash = "sha256:63a090761ddc3c1f7db5e67aa4e247b4b3bb9890080bdcdadd1b5200b8b89ac4"}, - {file = "hiredis-2.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:70d226ab0306a5b8d408235cabe51d4bf3554c9e8a72d53ce0b3c5c84cf78881"}, - {file = "hiredis-2.3.2-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:5c614552c6bd1d0d907f448f75550f6b24fb56cbfce80c094908b7990cad9702"}, - {file = "hiredis-2.3.2-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:9c431431abf55b64347ddc8df68b3ef840269cb0aa5bc2d26ad9506eb4b1b866"}, - {file = "hiredis-2.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a45857e87e9d2b005e81ddac9d815a33efd26ec67032c366629f023fe64fb415"}, - {file = "hiredis-2.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e138d141ec5a6ec800b6d01ddc3e5561ce1c940215e0eb9960876bfde7186aae"}, - {file = "hiredis-2.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:387f655444d912a963ab68abf64bf6e178a13c8e4aa945cb27388fd01a02e6f1"}, - {file = "hiredis-2.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4852f4bf88f0e2d9bdf91279892f5740ed22ae368335a37a52b92a5c88691140"}, - {file = "hiredis-2.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d711c107e83117129b7f8bd08e9820c43ceec6204fff072a001fd82f6d13db9f"}, - {file = "hiredis-2.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:92830c16885f29163e1c2da1f3c1edb226df1210ec7e8711aaabba3dd0d5470a"}, - {file = "hiredis-2.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:16b01d9ceae265d4ab9547be0cd628ecaff14b3360357a9d30c029e5ae8b7e7f"}, - {file = "hiredis-2.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:5986fb5f380169270a0293bebebd95466a1c85010b4f1afc2727e4d17c452512"}, - {file = "hiredis-2.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:49532d7939cc51f8e99efc326090c54acf5437ed88b9c904cc8015b3c4eda9c9"}, - {file = "hiredis-2.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:8f34801b251ca43ad70691fb08b606a2e55f06b9c9fb1fc18fd9402b19d70f7b"}, - {file = "hiredis-2.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:7298562a49d95570ab1c7fc4051e72824c6a80e907993a21a41ba204223e7334"}, - {file = "hiredis-2.3.2-cp312-cp312-win32.whl", hash = "sha256:e1d86b75de787481b04d112067a4033e1ecfda2a060e50318a74e4e1c9b2948c"}, - {file = "hiredis-2.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:6dbfe1887ffa5cf3030451a56a8f965a9da2fa82b7149357752b67a335a05fc6"}, - {file = "hiredis-2.3.2-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:4fc242e9da4af48714199216eb535b61e8f8d66552c8819e33fc7806bd465a09"}, - {file = "hiredis-2.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e81aa4e9a1fcf604c8c4b51aa5d258e195a6ba81efe1da82dea3204443eba01c"}, - {file = "hiredis-2.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:419780f8583ddb544ffa86f9d44a7fcc183cd826101af4e5ffe535b6765f5f6b"}, - {file = "hiredis-2.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6871306d8b98a15e53a5f289ec1106a3a1d43e7ab6f4d785f95fcef9a7bd9504"}, - {file = "hiredis-2.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88cb0b35b63717ef1e41d62f4f8717166f7c6245064957907cfe177cc144357c"}, - {file = "hiredis-2.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8c490191fa1218851f8a80c5a21a05a6f680ac5aebc2e688b71cbfe592f8fec6"}, - {file = "hiredis-2.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:4baf4b579b108062e91bd2a991dc98b9dc3dc06e6288db2d98895eea8acbac22"}, - {file = "hiredis-2.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:e627d8ef5e100556e09fb44c9571a432b10e11596d3c4043500080ca9944a91a"}, - {file = "hiredis-2.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:ba3dc0af0def8c21ce7d903c59ea1e8ec4cb073f25ece9edaec7f92a286cd219"}, - {file = "hiredis-2.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:56e9b7d6051688ca94e68c0c8a54a243f8db841911b683cedf89a29d4de91509"}, - {file = "hiredis-2.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:380e029bb4b1d34cf560fcc8950bf6b57c2ef0c9c8b7c7ac20b7c524a730fadd"}, - {file = "hiredis-2.3.2-cp37-cp37m-win32.whl", hash = "sha256:948d9f2ca7841794dd9b204644963a4bcd69ced4e959b0d4ecf1b8ce994a6daa"}, - {file = "hiredis-2.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:cfa67afe2269b2d203cd1389c00c5bc35a287cd57860441fb0e53b371ea6a029"}, - {file = "hiredis-2.3.2-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:bcbe47da0aebc00a7cfe3ebdcff0373b86ce2b1856251c003e3d69c9db44b5a7"}, - {file = "hiredis-2.3.2-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:f2c9c0d910dd3f7df92f0638e7f65d8edd7f442203caf89c62fc79f11b0b73f8"}, - {file = "hiredis-2.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:01b6c24c0840ac7afafbc4db236fd55f56a9a0919a215c25a238f051781f4772"}, - {file = "hiredis-2.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1f567489f422d40c21e53212a73bef4638d9f21043848150f8544ef1f3a6ad1"}, - {file = "hiredis-2.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:28adecb308293e705e44087a1c2d557a816f032430d8a2a9bb7873902a1c6d48"}, - {file = "hiredis-2.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:27e9619847e9dc70b14b1ad2d0fb4889e7ca18996585c3463cff6c951fd6b10b"}, - {file = "hiredis-2.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a0026cfbf29f07649b0e34509091a2a6016ff8844b127de150efce1c3aff60b"}, - {file = "hiredis-2.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f9de7586522e5da6bee83c9cf0dcccac0857a43249cb4d721a2e312d98a684d1"}, - {file = "hiredis-2.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e58494f282215fc461b06709e9a195a24c12ba09570f25bdf9efb036acc05101"}, - {file = "hiredis-2.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:de3a32b4b76d46f1eb42b24a918d51d8ca52411a381748196241d59a895f7c5c"}, - {file = "hiredis-2.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:1979334ccab21a49c544cd1b8d784ffb2747f99a51cb0bd0976eebb517628382"}, - {file = "hiredis-2.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:0c0773266e1c38a06e7593bd08870ac1503f5f0ce0f5c63f2b4134b090b5d6a4"}, - {file = "hiredis-2.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bd1cee053416183adcc8e6134704c46c60c3f66b8faaf9e65bf76191ca59a2f7"}, - {file = "hiredis-2.3.2-cp38-cp38-win32.whl", hash = "sha256:5341ce3d01ef3c7418a72e370bf028c7aeb16895e79e115fe4c954fff990489e"}, - {file = "hiredis-2.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:8fc7197ff33047ce43a67851ccf190acb5b05c52fd4a001bb55766358f04da68"}, - {file = "hiredis-2.3.2-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:f47775e27388b58ce52f4f972f80e45b13c65113e9e6b6bf60148f893871dc9b"}, - {file = "hiredis-2.3.2-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:9412a06b8a8e09abd6313d96864b6d7713c6003a365995a5c70cfb9209df1570"}, - {file = "hiredis-2.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f3020b60e3fc96d08c2a9b011f1c2e2a6bdcc09cb55df93c509b88be5cb791df"}, - {file = "hiredis-2.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:53d0f2c59bce399b8010a21bc779b4f8c32d0f582b2284ac8c98dc7578b27bc4"}, - {file = "hiredis-2.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:57c0d0c7e308ed5280a4900d4468bbfec51f0e1b4cde1deae7d4e639bc6b7766"}, - {file = "hiredis-2.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1d63318ca189fddc7e75f6a4af8eae9c0545863619fb38cfba5f43e81280b286"}, - {file = "hiredis-2.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e741ffe4e2db78a1b9dd6e5d29678ce37fbaaf65dfe132e5b82a794413302ef1"}, - {file = "hiredis-2.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb98038ccd368e0d88bd92ee575c58cfaf33e77f788c36b2a89a84ee1936dc6b"}, - {file = "hiredis-2.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:eae62ed60d53b3561148bcd8c2383e430af38c0deab9f2dd15f8874888ffd26f"}, - {file = "hiredis-2.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ca33c175c1cf60222d9c6d01c38fc17ec3a484f32294af781de30226b003e00f"}, - {file = "hiredis-2.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:0c5f6972d2bdee3cd301d5c5438e31195cf1cabf6fd9274491674d4ceb46914d"}, - {file = "hiredis-2.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:a6b54dabfaa5dbaa92f796f0c32819b4636e66aa8e9106c3d421624bd2a2d676"}, - {file = "hiredis-2.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e96cd35df012a17c87ae276196ea8f215e77d6eeca90709eb03999e2d5e3fd8a"}, - {file = "hiredis-2.3.2-cp39-cp39-win32.whl", hash = "sha256:63b99b5ea9fe4f21469fb06a16ca5244307678636f11917359e3223aaeca0b67"}, - {file = "hiredis-2.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:a50c8af811b35b8a43b1590cf890b61ff2233225257a3cad32f43b3ec7ff1b9f"}, - {file = "hiredis-2.3.2-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7e8bf4444b09419b77ce671088db9f875b26720b5872d97778e2545cd87dba4a"}, - {file = "hiredis-2.3.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bd42d0d45ea47a2f96babd82a659fbc60612ab9423a68e4a8191e538b85542a"}, - {file = "hiredis-2.3.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80441b55edbef868e2563842f5030982b04349408396e5ac2b32025fb06b5212"}, - {file = "hiredis-2.3.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ec444ab8f27562a363672d6a7372bc0700a1bdc9764563c57c5f9efa0e592b5f"}, - {file = "hiredis-2.3.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:f9f606e810858207d4b4287b4ef0dc622c2aa469548bf02b59dcc616f134f811"}, - {file = "hiredis-2.3.2-pp37-pypy37_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c3dde4ca00fe9eee3b76209711f1941bb86db42b8a75d7f2249ff9dfc026ab0e"}, - {file = "hiredis-2.3.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4dd676107a1d3c724a56a9d9db38166ad4cf44f924ee701414751bd18a784a0"}, - {file = "hiredis-2.3.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce42649e2676ad783186264d5ffc788a7612ecd7f9effb62d51c30d413a3eefe"}, - {file = "hiredis-2.3.2-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8e3f8b1733078ac663dad57e20060e16389a60ab542f18a97931f3a2a2dd64a4"}, - {file = "hiredis-2.3.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:532a84a82156a82529ec401d1c25d677c6543c791e54a263aa139541c363995f"}, - {file = "hiredis-2.3.2-pp38-pypy38_pp73-macosx_10_15_x86_64.whl", hash = "sha256:4d59f88c4daa36b8c38e59ac7bffed6f5d7f68eaccad471484bf587b28ccc478"}, - {file = "hiredis-2.3.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a91a14dd95e24dc078204b18b0199226ee44644974c645dc54ee7b00c3157330"}, - {file = "hiredis-2.3.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb777a38797c8c7df0444533119570be18d1a4ce5478dffc00c875684df7bfcb"}, - {file = "hiredis-2.3.2-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d47c915897a99d0d34a39fad4be97b4b709ab3d0d3b779ebccf2b6024a8c681e"}, - {file = "hiredis-2.3.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:333b5e04866758b11bda5f5315b4e671d15755fc6ed3b7969721bc6311d0ee36"}, - {file = "hiredis-2.3.2-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c8937f1100435698c18e4da086968c4b5d70e86ea718376f833475ab3277c9aa"}, - {file = "hiredis-2.3.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa45f7d771094b8145af10db74704ab0f698adb682fbf3721d8090f90e42cc49"}, - {file = "hiredis-2.3.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33d5ebc93c39aed4b5bc769f8ce0819bc50e74bb95d57a35f838f1c4378978e0"}, - {file = "hiredis-2.3.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a797d8c7df9944314d309b0d9e1b354e2fa4430a05bb7604da13b6ad291bf959"}, - {file = "hiredis-2.3.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:e15a408f71a6c8c87b364f1f15a6cd9c1baca12bbc47a326ac8ab99ec7ad3c64"}, - {file = "hiredis-2.3.2.tar.gz", hash = "sha256:733e2456b68f3f126ddaf2cd500a33b25146c3676b97ea843665717bda0c5d43"}, + {file = "hiredis-2.4.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:aee6c4e8f670ea685345ce4ca01c574a52e0a4318af2b8cdd563de9567731056"}, + {file = "hiredis-2.4.0-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:76503a0edaf3d1557518127511e69e5d9fa37b6ff15598b0d9d9c2db18b08a41"}, + {file = "hiredis-2.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b027b53adb1df11923753d85587e3ab611fe70bc69596e9eb3269acab809c376"}, + {file = "hiredis-2.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5d2776c7cd6a338cd9338fb50f2a38a7ca3e16250b40ab2d0c41eb1697ebc12"}, + {file = "hiredis-2.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8767cae1474f8102ec3d362976f80c8dd4eafd4109c6072adee0a15e37ba919c"}, + {file = "hiredis-2.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6dac8a5be01d92707409feec61b98721b7b5c3e77fe7e9e5c7cfb9fdd28385af"}, + {file = "hiredis-2.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87a8ece3e893f45354395c6b9dc0479744c1c8c6ee4471b60945d96c9b5ce6c2"}, + {file = "hiredis-2.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c85110f536e59fe19ea4b002d04228f57f55462add1630a0785cd6ec62e70415"}, + {file = "hiredis-2.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cb62c82a2518b8446be1cc5eb4319e282776bf96fdb2964e81ff2c15d632248b"}, + {file = "hiredis-2.4.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:9ae4b19cab270fae77d7f944d56bbb308c9886d9577891b347a8deea75563995"}, + {file = "hiredis-2.4.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:9fc1a6c78197eff8b4d125bb98410b661e732f3ec563c03264d2d7378cf9e613"}, + {file = "hiredis-2.4.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:38dd931f1124bd9781d3027a0cd6fb6f5a75b5c4ba4fe5540584105239b1f901"}, + {file = "hiredis-2.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:2a21e2740c33347740dceb106b64b8a384e91da49aac7e8b3f2a25a9b33714b9"}, + {file = "hiredis-2.4.0-cp310-cp310-win32.whl", hash = "sha256:b0adbe8f33f57f2b6bfa8a2ea18f3e4ed91676503673f70f796bfbd06a1a2214"}, + {file = "hiredis-2.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:168de1672bd73f7f3cdf0097084b4a71651ac35f7d99d0229ea8f223358d3a79"}, + {file = "hiredis-2.4.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:ac9d91b4d9c306e66a1abd224524fada07684a57f7da72a675e4b8bee9302b38"}, + {file = "hiredis-2.4.0-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:f74bfa9f1b91718d6664d4708d092f7d44e2f0f825a5fab82819d43d41e0302d"}, + {file = "hiredis-2.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:668b02556d12046e7ce94ded5bfe0ad9989d26e6977ecc55941b9a1a4a49d7d5"}, + {file = "hiredis-2.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6033cc6caaf056969af9ce372282a6ef2838559f2eadffe7ddb73bf65dcb27d6"}, + {file = "hiredis-2.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f76fcf2867d19259b53680c08314435b46f632d20a4d7b9f0ccbb5dd3e925e79"}, + {file = "hiredis-2.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c0e706e0c3d1ec54d8243410e0fd5974b1c7b69db5c54cd9ae6a3a4b64fae33"}, + {file = "hiredis-2.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06815c3b9bf7225c4dcc9dd9dfb5a9fa91b4f680104443ef3fcd78410d7eb027"}, + {file = "hiredis-2.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f44715d6a3313d614ff7550e52ecff67a283776909d960f338701b57e6013542"}, + {file = "hiredis-2.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:39e1c7212dea1bbed0b075574808bc7c3192b324f54ea5d9ee522f6c35014ce7"}, + {file = "hiredis-2.4.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:b385fc7fc7b0811c3fcac4b0a35e5606eca693efba0d1446623ef0158a078034"}, + {file = "hiredis-2.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:0a87a249124666db2b795a0eb77cea5b8af8b148566616a681304826b4405869"}, + {file = "hiredis-2.4.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:9b4039cd40335f66e55a8bee314b6a795f169fb02d70215d482023ec74613371"}, + {file = "hiredis-2.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c77113fbdbd7ca5de72dd3b7d113856609a1b878f6164de09dd95d12e6a51de2"}, + {file = "hiredis-2.4.0-cp311-cp311-win32.whl", hash = "sha256:469c1a85017abf11d854fb16eca9a4093ebe1f2dacf777fed869d726f02b1389"}, + {file = "hiredis-2.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:a5c3a32af789b0ec413a606c99b55579abbcb6c86220610a5c5041da8688e7ca"}, + {file = "hiredis-2.4.0-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:8b88390a5e31572e05e8eab476ed3176cc3d2f9622ccc059398ffdb02aaefec4"}, + {file = "hiredis-2.4.0-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:fa4842977924209ae653e856238a30b1c68e579ecde5cf1c16c4de471b35cec7"}, + {file = "hiredis-2.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a459b7ff3d802792254d6fc6a622e53ca9cf9f002ed79db7e4dee536b2e20e5d"}, + {file = "hiredis-2.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5c711c8ca8d5767ed8ecd5fb5602c12eaf8fb256a5f4308ae36f2dc79e6f853"}, + {file = "hiredis-2.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a4f733882b67407d4b667eafd61fce86e8e204b158258cc1d0cb0843f6bb4708"}, + {file = "hiredis-2.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:605fe35ebb482b7c8d5daadcf3d264dc5edd205a352d89ee3a983861ef73cda8"}, + {file = "hiredis-2.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a40f1d985047fe4654a1afb4702cbe0daeacde3868d52be9e4652615d387e05b"}, + {file = "hiredis-2.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fc8d3edbc9f32da930da6ea33d43ce0c3239e6b2018a77907fbf4e9836bd6def"}, + {file = "hiredis-2.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5b0b2463906cc4119187dfaad493c48a7b2e17120946feb3eb7c2328c8cb4bca"}, + {file = "hiredis-2.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5e45171fd046bbed2ce6ac485071cd0575d18ae98b5bbcf6533356e443ec47ea"}, + {file = "hiredis-2.4.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:68e39d2c0beed53e5361caacd0de98f864b3532344edb79e27e62efba2262de5"}, + {file = "hiredis-2.4.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:2b76a5600047387c73c1b3d950e4ae3feffaefd442b20ba2f5fea773881d9bcd"}, + {file = "hiredis-2.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1537d13eefe4f48cb979362264851ee90d2bb7a221c8c350e9ceeda9f0392228"}, + {file = "hiredis-2.4.0-cp312-cp312-win32.whl", hash = "sha256:1bfa50491d3222e3c2297b52c14e835ac52702ac8a91ec3fc1ff5201912623bb"}, + {file = "hiredis-2.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:9aabc6098ef00e158598489db5a8b9e12d57a55ea5a4ec35ba3b527dfb88d16e"}, + {file = "hiredis-2.4.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:2d7715598c9034369cf739475ccc2db53a8ca895ff398fef6b9c597c30960ea8"}, + {file = "hiredis-2.4.0-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:5bdb223e7c3b9470f126bb77879ee2593fd79b28e1e8b11ad9edd3f866556109"}, + {file = "hiredis-2.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:070a0198401bc567709b9edff7f01e94c136dcca69d0ded4747b116bb0b8b577"}, + {file = "hiredis-2.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c2676e2a934e046200faf0dc26ffa48c4989c3561c9bb97832e79969a41b2afe"}, + {file = "hiredis-2.4.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5598afad9e2f8e4fc9a456d281a9cc80315b0e18f5064437223dbfe67f49bded"}, + {file = "hiredis-2.4.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f34b39057956305935c71f51a0860709b6124c92281dc03841587dd45a86322c"}, + {file = "hiredis-2.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ced14fbec28fbabda7cb9f9094f2578c154c14f1a820a91c30fc8ee0bea1a0d"}, + {file = "hiredis-2.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9f8827cd7a84f5344779754ebb633bca71c470e028f92ecc959e666ef5c5e3c"}, + {file = "hiredis-2.4.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:737585b122fca03273bbf1f4e98909254dba6f8cd85f1cb566d6c890d0389277"}, + {file = "hiredis-2.4.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:468efdcbad7349a44aace693aed8324a01de180fcd4ef5513199eedb9b4341c8"}, + {file = "hiredis-2.4.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:98148ecaa7836f76ed33429e84a23253ac00acbad90c62b8b4ad0f61de31da2b"}, + {file = "hiredis-2.4.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:b4e5e9d1f84bbc01bf6a32a4704920c72e37d9090b3e0e29bd1574d06b3249f1"}, + {file = "hiredis-2.4.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:2b90d9861673b0ba04651ade62e0fe568df71bbff8468657406848e9abf3650a"}, + {file = "hiredis-2.4.0-cp38-cp38-win32.whl", hash = "sha256:a816f732f695261798a8a0fc1e0232a3638933b8ddfc574c00f9ef70d9f34cb8"}, + {file = "hiredis-2.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:e3215b43632a23b5b99165097949ce51dd093ab33d410bcf8aa901cdbc64d9cd"}, + {file = "hiredis-2.4.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:52d92df0eb5bba7f31f302a08174d628956d7216453da9d96498da9341179288"}, + {file = "hiredis-2.4.0-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:7236b26828e005435fb3013894eed6a40c6f9b1b11a48391a904eee693ded204"}, + {file = "hiredis-2.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b868b7fc24dd8ab4762b59a533bdbd096ebba7eabc853c7f78af8edce46d1390"}, + {file = "hiredis-2.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83538638a788b7b4a0b02de0eedcf0e71ae27474b031276e4c8ca88285281a2e"}, + {file = "hiredis-2.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6494120d0a0f46a1d7dfc7def55782782856bdd5acb2f6039fb1eafecea2c2c0"}, + {file = "hiredis-2.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6ceaf7c6b593bf62e0567fd16547727f502ed704352392708a57c65bfd2feb73"}, + {file = "hiredis-2.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8eee5d25efee64e172ed0d60ebcf6bca92b0b26a7fd048bb946b32fb90dbdc0"}, + {file = "hiredis-2.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:082ba6a3189d59f44bf75ca2c0467cdbc67c860eacd4bf564b9a927471888603"}, + {file = "hiredis-2.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:6c3f8e0c3a0744d843e3044ea76db8aa996a6cc7541693111acc2c9c30a05182"}, + {file = "hiredis-2.4.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:bae7f07731c6c285b87111c7d5c5efa65f8b48016a98bcc57eebc24a3c7d854d"}, + {file = "hiredis-2.4.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:54409fbefebe26274170c1c54e1852d310d84b85e405258aea6a78bec03b3eba"}, + {file = "hiredis-2.4.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:3abc0936c1efc59b510c7eab3799119a6ce8da94cea1f891854a6c3678d711f0"}, + {file = "hiredis-2.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b8472151e6f7ae90d7fd231a1ac16d2e628b93ce20d0f8063da25bd8bfdeb9e5"}, + {file = "hiredis-2.4.0-cp39-cp39-win32.whl", hash = "sha256:beb0f7f8371d933072e9bdc00c6df7eb5fdf76b93f08bfe73094f60c3f011f57"}, + {file = "hiredis-2.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:4bf4b8513cea6e04ddee1b578ab306fb8bfa84b2f7e92ee3dbaf65652abb07d1"}, + {file = "hiredis-2.4.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:aeb60452d5b6150075974bc36e1cc74a46bd4b125cd5e72a86a04f4d6abf4e67"}, + {file = "hiredis-2.4.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:4da6d881033a1bcb31bba152ea0925344127f0a98f86a6cf2ceb01cf6ecd29e2"}, + {file = "hiredis-2.4.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9d559775a95aee0ff06c0aaac638691619d6342b7cde85c62ad228804f82829"}, + {file = "hiredis-2.4.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48baae8fbebf3b11660db6e51a55ff51516ed32edcd44a57f51ea9b373aca330"}, + {file = "hiredis-2.4.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d851b7ff732ebc9d823de3c7cc95a5ed4261a0226acd46861a18369ac9568f36"}, + {file = "hiredis-2.4.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1d16f5023c1d9971f284231eb7036a25d4d123138a5adc4512c92a73d83b9a77"}, + {file = "hiredis-2.4.0-pp38-pypy38_pp73-macosx_10_15_x86_64.whl", hash = "sha256:a56a35e2e0b7eda39957ccd33059b79bb2fc57f54c501a917d1092c895f56d08"}, + {file = "hiredis-2.4.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:6e38f66dd7fd07a9306ed37d6d02bc584b67e5945f2ddc98e5c78420cc66dbac"}, + {file = "hiredis-2.4.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:400a42b8d16206e45c8223cdaf5acc35839e10c35383b3fba3f43e7eb315c213"}, + {file = "hiredis-2.4.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5cc3c59dd0cd67d0aa0481a43392848a60f1a81d12b38ce8d56d6a5d6c190de8"}, + {file = "hiredis-2.4.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2a917ab420cd88b040ec85b5abc1244ab82b34d56461e2ffff58e0c7d018bae"}, + {file = "hiredis-2.4.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:764032f2222d70a130445fd332cf45d46d8226f4b3a7bf8abc314aa93d5a8212"}, + {file = "hiredis-2.4.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b30dcfbc5ab2fc932a723a39c2cb52d4f5c8b1705aa05a0bae23f28f70e06982"}, + {file = "hiredis-2.4.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:b50ad622d8a71c8b72582dc84a990f3f079775edc1bcf0f43ed59bb2277fca2f"}, + {file = "hiredis-2.4.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:339f29542be968153afd6c6495c1222681c4b66b9a5a5573c11512378b7167c9"}, + {file = "hiredis-2.4.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b544a1a78e0812134572cc13f5ee330bfb6bfe6dda58d2e26c20557bb0e0cec9"}, + {file = "hiredis-2.4.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e71386f89dc2db805b4c9518dee6d81abddb8e79e4d9313cecdb702c924b8187"}, + {file = "hiredis-2.4.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ae340c41024b9be566f600f364c8d286217f2975fd765fb3fb4dd6dfbdbec825"}, + {file = "hiredis-2.4.0.tar.gz", hash = "sha256:90d7af678056c7889d86821344d79fec3932a6a1480ebba3d644cb29a3135348"}, ] [[package]] @@ -1618,13 +1646,13 @@ files = [ [[package]] name = "huggingface-hub" -version = "0.23.4" +version = "0.24.5" description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub" optional = false python-versions = ">=3.8.0" files = [ - {file = "huggingface_hub-0.23.4-py3-none-any.whl", hash = "sha256:3a0b957aa87150addf0cc7bd71b4d954b78e749850e1e7fb29ebbd2db64ca037"}, - {file = "huggingface_hub-0.23.4.tar.gz", hash = "sha256:35d99016433900e44ae7efe1c209164a5a81dbbcd53a52f99c281dcd7ce22431"}, + {file = "huggingface_hub-0.24.5-py3-none-any.whl", hash = "sha256:d93fb63b1f1a919a22ce91a14518974e81fc4610bf344dfe7572343ce8d3aced"}, + {file = "huggingface_hub-0.24.5.tar.gz", hash = "sha256:7b45d6744dd53ce9cbf9880957de00e9d10a9ae837f1c9b7255fc8fa4e8264f3"}, ] [package.dependencies] @@ -1637,17 +1665,17 @@ tqdm = ">=4.42.1" typing-extensions = ">=3.7.4.3" [package.extras] -all = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "fastapi", "gradio", "jedi", "minijinja (>=1.0)", "mypy (==1.5.1)", "numpy", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "ruff (>=0.3.0)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"] +all = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "fastapi", "gradio", "jedi", "minijinja (>=1.0)", "mypy (==1.5.1)", "numpy", "pytest (>=8.1.1,<8.2.2)", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-mock", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "ruff (>=0.5.0)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"] cli = ["InquirerPy (==0.3.4)"] -dev = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "fastapi", "gradio", "jedi", "minijinja (>=1.0)", "mypy (==1.5.1)", "numpy", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "ruff (>=0.3.0)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"] +dev = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "fastapi", "gradio", "jedi", "minijinja (>=1.0)", "mypy (==1.5.1)", "numpy", "pytest (>=8.1.1,<8.2.2)", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-mock", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "ruff (>=0.5.0)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"] fastai = ["fastai (>=2.4)", "fastcore (>=1.3.27)", "toml"] hf-transfer = ["hf-transfer (>=0.1.4)"] inference = ["aiohttp", "minijinja (>=1.0)"] -quality = ["mypy (==1.5.1)", "ruff (>=0.3.0)"] +quality = ["mypy (==1.5.1)", "ruff (>=0.5.0)"] tensorflow = ["graphviz", "pydot", "tensorflow"] tensorflow-testing = ["keras (<3.0)", "tensorflow"] -testing = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "fastapi", "gradio", "jedi", "minijinja (>=1.0)", "numpy", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "soundfile", "urllib3 (<2.0)"] -torch = ["safetensors", "torch"] +testing = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "fastapi", "gradio", "jedi", "minijinja (>=1.0)", "numpy", "pytest (>=8.1.1,<8.2.2)", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-mock", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "soundfile", "urllib3 (<2.0)"] +torch = ["safetensors[torch]", "torch"] typing = ["types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)"] [[package]] @@ -1677,13 +1705,13 @@ files = [ [[package]] name = "importlib-metadata" -version = "8.0.0" +version = "8.2.0" description = "Read metadata from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_metadata-8.0.0-py3-none-any.whl", hash = "sha256:15584cf2b1bf449d98ff8a6ff1abef57bf20f3ac6454f431736cd3e660921b2f"}, - {file = "importlib_metadata-8.0.0.tar.gz", hash = "sha256:188bd24e4c346d3f0a933f275c2fec67050326a856b9a359881d7c2a697e8812"}, + {file = "importlib_metadata-8.2.0-py3-none-any.whl", hash = "sha256:11901fa0c2f97919b288679932bb64febaeacf289d18ac84dd68cb2e74213369"}, + {file = "importlib_metadata-8.2.0.tar.gz", hash = "sha256:72e8d4399996132204f9a16dcc751af254a48f8d1b20b9ff0f98d4a8f901e73d"}, ] [package.dependencies] @@ -1705,20 +1733,6 @@ 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 = true -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 = "ipykernel" version = "6.29.5" @@ -1830,7 +1844,7 @@ i18n = ["Babel (>=2.7)"] name = "jiter" version = "0.5.0" description = "Fast iterable JSON parser." -optional = true +optional = false python-versions = ">=3.8" files = [ {file = "jiter-0.5.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:b599f4e89b3def9a94091e6ee52e1d7ad7bc33e238ebb9c4c63f211d74822c3f"}, @@ -2026,6 +2040,30 @@ async-timeout = {version = ">=4.0.0,<5.0.0", markers = "python_version < \"3.11\ langchain-core = ">=0.2.7,<0.3.0" langchain-text-splitters = ">=0.2.0,<0.3.0" langsmith = ">=0.1.17,<0.2.0" +numpy = {version = ">=1.26.0,<2.0.0", markers = "python_version >= \"3.12\""} +pydantic = ">=1,<3" +PyYAML = ">=5.3" +requests = ">=2,<3" +SQLAlchemy = ">=1.4,<3" +tenacity = ">=8.1.0,<9.0.0" + +[[package]] +name = "langchain" +version = "0.2.12" +description = "Building applications with LLMs through composability" +optional = false +python-versions = "<4.0,>=3.8.1" +files = [ + {file = "langchain-0.2.12-py3-none-any.whl", hash = "sha256:565d2f5df1c06815d1c684400218ec4ae5e1027887aad343226fad846c54e726"}, + {file = "langchain-0.2.12.tar.gz", hash = "sha256:fe7bd409c133017446fec54c38a5e7cb14f74e020090d7b5065374badf71e6d1"}, +] + +[package.dependencies] +aiohttp = ">=3.8.3,<4.0.0" +async-timeout = {version = ">=4.0.0,<5.0.0", markers = "python_version < \"3.11\""} +langchain-core = ">=0.2.27,<0.3.0" +langchain-text-splitters = ">=0.2.0,<0.3.0" +langsmith = ">=0.1.17,<0.2.0" numpy = [ {version = ">=1,<2", markers = "python_version < \"3.12\""}, {version = ">=1.26.0,<2.0.0", markers = "python_version >= \"3.12\""}, @@ -2034,7 +2072,7 @@ pydantic = ">=1,<3" PyYAML = ">=5.3" requests = ">=2,<3" SQLAlchemy = ">=1.4,<3" -tenacity = ">=8.1.0,<9.0.0" +tenacity = ">=8.1.0,<8.4.0 || >8.4.0,<9.0.0" [[package]] name = "langchain-core" @@ -2057,13 +2095,13 @@ tenacity = ">=8.1.0,<9.0.0" [[package]] name = "langchain-core" -version = "0.2.19" +version = "0.2.29" description = "Building applications with LLMs through composability" optional = false python-versions = "<4.0,>=3.8.1" files = [ - {file = "langchain_core-0.2.19-py3-none-any.whl", hash = "sha256:5b3cd34395be274c89e822c84f0e03c4da14168c177a83921c5b9414ac7a0651"}, - {file = "langchain_core-0.2.19.tar.gz", hash = "sha256:13043a83e5c9ab58b9f5ce2a56896e7e88b752e8891b2958960a98e71801471e"}, + {file = "langchain_core-0.2.29-py3-none-any.whl", hash = "sha256:846c04a3bb72e409a9b928e0eb3ea1762e1473f2c4fb6df2596fbd7b3ab75973"}, + {file = "langchain_core-0.2.29.tar.gz", hash = "sha256:491324745a7afee5a7b285c3904edd9dd0c6efa7daf26b92fec6e84a2d2f5d10"}, ] [package.dependencies] @@ -2073,6 +2111,7 @@ packaging = ">=23.2,<25" pydantic = {version = ">=1,<3", markers = "python_full_version < \"3.12.4\""} PyYAML = ">=5.3" tenacity = ">=8.1.0,<8.4.0 || >8.4.0,<9.0.0" +typing-extensions = ">=4.7" [[package]] name = "langchain-openai" @@ -2090,6 +2129,22 @@ langchain-core = ">=0.2.2,<0.3" openai = ">=1.32.0,<2.0.0" tiktoken = ">=0.7,<1" +[[package]] +name = "langchain-openai" +version = "0.1.21" +description = "An integration package connecting OpenAI and LangChain" +optional = false +python-versions = "<4.0,>=3.8.1" +files = [ + {file = "langchain_openai-0.1.21-py3-none-any.whl", hash = "sha256:44420f0c84859ae236a80c8ac8754a16d5b660c24377c27ba98308145d346352"}, + {file = "langchain_openai-0.1.21.tar.gz", hash = "sha256:2c65feaf12bb284eccf7bce35725fd06f3035fa751babad6aa84af2f99867f88"}, +] + +[package.dependencies] +langchain-core = ">=0.2.29,<0.3.0" +openai = ">=1.40.0,<2.0.0" +tiktoken = ">=0.7,<1" + [[package]] name = "langchain-text-splitters" version = "0.2.1" @@ -2139,13 +2194,13 @@ requests = ">=2,<3" [[package]] name = "langsmith" -version = "0.1.86" +version = "0.1.98" description = "Client library to connect to the LangSmith LLM Tracing and Evaluation Platform." optional = false python-versions = "<4.0,>=3.8.1" files = [ - {file = "langsmith-0.1.86-py3-none-any.whl", hash = "sha256:55ed80cc6e98f9761f9b3ec3c49e01f6745d13e40bef80d9f831acabfd9a8a1e"}, - {file = "langsmith-0.1.86.tar.gz", hash = "sha256:2e66577817253327b99b727588c3173fbba217fe0ca07ac6b7cdd23fc4894104"}, + {file = "langsmith-0.1.98-py3-none-any.whl", hash = "sha256:f79e8a128652bbcee4606d10acb6236973b5cd7dde76e3741186d3b97b5698e9"}, + {file = "langsmith-0.1.98.tar.gz", hash = "sha256:e07678219a0502e8f26d35294e72127a39d25e32fafd091af5a7bb661e9a6bd1"}, ] [package.dependencies] @@ -2181,153 +2236,149 @@ proxy = ["PyJWT (>=2.8.0,<3.0.0)", "apscheduler (>=3.10.4,<4.0.0)", "backoff", " [[package]] name = "lxml" -version = "5.2.2" +version = "5.3.0" description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." optional = false python-versions = ">=3.6" files = [ - {file = "lxml-5.2.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:364d03207f3e603922d0d3932ef363d55bbf48e3647395765f9bfcbdf6d23632"}, - {file = "lxml-5.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:50127c186f191b8917ea2fb8b206fbebe87fd414a6084d15568c27d0a21d60db"}, - {file = "lxml-5.2.2-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:74e4f025ef3db1c6da4460dd27c118d8cd136d0391da4e387a15e48e5c975147"}, - {file = "lxml-5.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:981a06a3076997adf7c743dcd0d7a0415582661e2517c7d961493572e909aa1d"}, - {file = "lxml-5.2.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aef5474d913d3b05e613906ba4090433c515e13ea49c837aca18bde190853dff"}, - {file = "lxml-5.2.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1e275ea572389e41e8b039ac076a46cb87ee6b8542df3fff26f5baab43713bca"}, - {file = "lxml-5.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5b65529bb2f21ac7861a0e94fdbf5dc0daab41497d18223b46ee8515e5ad297"}, - {file = "lxml-5.2.2-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:bcc98f911f10278d1daf14b87d65325851a1d29153caaf146877ec37031d5f36"}, - {file = "lxml-5.2.2-cp310-cp310-manylinux_2_28_ppc64le.whl", hash = "sha256:b47633251727c8fe279f34025844b3b3a3e40cd1b198356d003aa146258d13a2"}, - {file = "lxml-5.2.2-cp310-cp310-manylinux_2_28_s390x.whl", hash = "sha256:fbc9d316552f9ef7bba39f4edfad4a734d3d6f93341232a9dddadec4f15d425f"}, - {file = "lxml-5.2.2-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:13e69be35391ce72712184f69000cda04fc89689429179bc4c0ae5f0b7a8c21b"}, - {file = "lxml-5.2.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3b6a30a9ab040b3f545b697cb3adbf3696c05a3a68aad172e3fd7ca73ab3c835"}, - {file = "lxml-5.2.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:a233bb68625a85126ac9f1fc66d24337d6e8a0f9207b688eec2e7c880f012ec0"}, - {file = "lxml-5.2.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:dfa7c241073d8f2b8e8dbc7803c434f57dbb83ae2a3d7892dd068d99e96efe2c"}, - {file = "lxml-5.2.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1a7aca7964ac4bb07680d5c9d63b9d7028cace3e2d43175cb50bba8c5ad33316"}, - {file = "lxml-5.2.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ae4073a60ab98529ab8a72ebf429f2a8cc612619a8c04e08bed27450d52103c0"}, - {file = "lxml-5.2.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:ffb2be176fed4457e445fe540617f0252a72a8bc56208fd65a690fdb1f57660b"}, - {file = "lxml-5.2.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:e290d79a4107d7d794634ce3e985b9ae4f920380a813717adf61804904dc4393"}, - {file = "lxml-5.2.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:96e85aa09274955bb6bd483eaf5b12abadade01010478154b0ec70284c1b1526"}, - {file = "lxml-5.2.2-cp310-cp310-win32.whl", hash = "sha256:f956196ef61369f1685d14dad80611488d8dc1ef00be57c0c5a03064005b0f30"}, - {file = "lxml-5.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:875a3f90d7eb5c5d77e529080d95140eacb3c6d13ad5b616ee8095447b1d22e7"}, - {file = "lxml-5.2.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:45f9494613160d0405682f9eee781c7e6d1bf45f819654eb249f8f46a2c22545"}, - {file = "lxml-5.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b0b3f2df149efb242cee2ffdeb6674b7f30d23c9a7af26595099afaf46ef4e88"}, - {file = "lxml-5.2.2-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d28cb356f119a437cc58a13f8135ab8a4c8ece18159eb9194b0d269ec4e28083"}, - {file = "lxml-5.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:657a972f46bbefdbba2d4f14413c0d079f9ae243bd68193cb5061b9732fa54c1"}, - {file = "lxml-5.2.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b74b9ea10063efb77a965a8d5f4182806fbf59ed068b3c3fd6f30d2ac7bee734"}, - {file = "lxml-5.2.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:07542787f86112d46d07d4f3c4e7c760282011b354d012dc4141cc12a68cef5f"}, - {file = "lxml-5.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:303f540ad2dddd35b92415b74b900c749ec2010e703ab3bfd6660979d01fd4ed"}, - {file = "lxml-5.2.2-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:2eb2227ce1ff998faf0cd7fe85bbf086aa41dfc5af3b1d80867ecfe75fb68df3"}, - {file = "lxml-5.2.2-cp311-cp311-manylinux_2_28_ppc64le.whl", hash = "sha256:1d8a701774dfc42a2f0b8ccdfe7dbc140500d1049e0632a611985d943fcf12df"}, - {file = "lxml-5.2.2-cp311-cp311-manylinux_2_28_s390x.whl", hash = "sha256:56793b7a1a091a7c286b5f4aa1fe4ae5d1446fe742d00cdf2ffb1077865db10d"}, - {file = "lxml-5.2.2-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:eb00b549b13bd6d884c863554566095bf6fa9c3cecb2e7b399c4bc7904cb33b5"}, - {file = "lxml-5.2.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1a2569a1f15ae6c8c64108a2cd2b4a858fc1e13d25846be0666fc144715e32ab"}, - {file = "lxml-5.2.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:8cf85a6e40ff1f37fe0f25719aadf443686b1ac7652593dc53c7ef9b8492b115"}, - {file = "lxml-5.2.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:d237ba6664b8e60fd90b8549a149a74fcc675272e0e95539a00522e4ca688b04"}, - {file = "lxml-5.2.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0b3f5016e00ae7630a4b83d0868fca1e3d494c78a75b1c7252606a3a1c5fc2ad"}, - {file = "lxml-5.2.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:23441e2b5339bc54dc949e9e675fa35efe858108404ef9aa92f0456929ef6fe8"}, - {file = "lxml-5.2.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:2fb0ba3e8566548d6c8e7dd82a8229ff47bd8fb8c2da237607ac8e5a1b8312e5"}, - {file = "lxml-5.2.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:79d1fb9252e7e2cfe4de6e9a6610c7cbb99b9708e2c3e29057f487de5a9eaefa"}, - {file = "lxml-5.2.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6dcc3d17eac1df7859ae01202e9bb11ffa8c98949dcbeb1069c8b9a75917e01b"}, - {file = "lxml-5.2.2-cp311-cp311-win32.whl", hash = "sha256:4c30a2f83677876465f44c018830f608fa3c6a8a466eb223535035fbc16f3438"}, - {file = "lxml-5.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:49095a38eb333aaf44c06052fd2ec3b8f23e19747ca7ec6f6c954ffea6dbf7be"}, - {file = "lxml-5.2.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:7429e7faa1a60cad26ae4227f4dd0459efde239e494c7312624ce228e04f6391"}, - {file = "lxml-5.2.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:50ccb5d355961c0f12f6cf24b7187dbabd5433f29e15147a67995474f27d1776"}, - {file = "lxml-5.2.2-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc911208b18842a3a57266d8e51fc3cfaccee90a5351b92079beed912a7914c2"}, - {file = "lxml-5.2.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33ce9e786753743159799fdf8e92a5da351158c4bfb6f2db0bf31e7892a1feb5"}, - {file = "lxml-5.2.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ec87c44f619380878bd49ca109669c9f221d9ae6883a5bcb3616785fa8f94c97"}, - {file = "lxml-5.2.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08ea0f606808354eb8f2dfaac095963cb25d9d28e27edcc375d7b30ab01abbf6"}, - {file = "lxml-5.2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75a9632f1d4f698b2e6e2e1ada40e71f369b15d69baddb8968dcc8e683839b18"}, - {file = "lxml-5.2.2-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:74da9f97daec6928567b48c90ea2c82a106b2d500f397eeb8941e47d30b1ca85"}, - {file = "lxml-5.2.2-cp312-cp312-manylinux_2_28_ppc64le.whl", hash = "sha256:0969e92af09c5687d769731e3f39ed62427cc72176cebb54b7a9d52cc4fa3b73"}, - {file = "lxml-5.2.2-cp312-cp312-manylinux_2_28_s390x.whl", hash = "sha256:9164361769b6ca7769079f4d426a41df6164879f7f3568be9086e15baca61466"}, - {file = "lxml-5.2.2-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:d26a618ae1766279f2660aca0081b2220aca6bd1aa06b2cf73f07383faf48927"}, - {file = "lxml-5.2.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab67ed772c584b7ef2379797bf14b82df9aa5f7438c5b9a09624dd834c1c1aaf"}, - {file = "lxml-5.2.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:3d1e35572a56941b32c239774d7e9ad724074d37f90c7a7d499ab98761bd80cf"}, - {file = "lxml-5.2.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:8268cbcd48c5375f46e000adb1390572c98879eb4f77910c6053d25cc3ac2c67"}, - {file = "lxml-5.2.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e282aedd63c639c07c3857097fc0e236f984ceb4089a8b284da1c526491e3f3d"}, - {file = "lxml-5.2.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6dfdc2bfe69e9adf0df4915949c22a25b39d175d599bf98e7ddf620a13678585"}, - {file = "lxml-5.2.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4aefd911793b5d2d7a921233a54c90329bf3d4a6817dc465f12ffdfe4fc7b8fe"}, - {file = "lxml-5.2.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:8b8df03a9e995b6211dafa63b32f9d405881518ff1ddd775db4e7b98fb545e1c"}, - {file = "lxml-5.2.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f11ae142f3a322d44513de1018b50f474f8f736bc3cd91d969f464b5bfef8836"}, - {file = "lxml-5.2.2-cp312-cp312-win32.whl", hash = "sha256:16a8326e51fcdffc886294c1e70b11ddccec836516a343f9ed0f82aac043c24a"}, - {file = "lxml-5.2.2-cp312-cp312-win_amd64.whl", hash = "sha256:bbc4b80af581e18568ff07f6395c02114d05f4865c2812a1f02f2eaecf0bfd48"}, - {file = "lxml-5.2.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e3d9d13603410b72787579769469af730c38f2f25505573a5888a94b62b920f8"}, - {file = "lxml-5.2.2-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38b67afb0a06b8575948641c1d6d68e41b83a3abeae2ca9eed2ac59892b36706"}, - {file = "lxml-5.2.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c689d0d5381f56de7bd6966a4541bff6e08bf8d3871bbd89a0c6ab18aa699573"}, - {file = "lxml-5.2.2-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:cf2a978c795b54c539f47964ec05e35c05bd045db5ca1e8366988c7f2fe6b3ce"}, - {file = "lxml-5.2.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:739e36ef7412b2bd940f75b278749106e6d025e40027c0b94a17ef7968d55d56"}, - {file = "lxml-5.2.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:d8bbcd21769594dbba9c37d3c819e2d5847656ca99c747ddb31ac1701d0c0ed9"}, - {file = "lxml-5.2.2-cp36-cp36m-musllinux_1_2_x86_64.whl", hash = "sha256:2304d3c93f2258ccf2cf7a6ba8c761d76ef84948d87bf9664e14d203da2cd264"}, - {file = "lxml-5.2.2-cp36-cp36m-win32.whl", hash = "sha256:02437fb7308386867c8b7b0e5bc4cd4b04548b1c5d089ffb8e7b31009b961dc3"}, - {file = "lxml-5.2.2-cp36-cp36m-win_amd64.whl", hash = "sha256:edcfa83e03370032a489430215c1e7783128808fd3e2e0a3225deee278585196"}, - {file = "lxml-5.2.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:28bf95177400066596cdbcfc933312493799382879da504633d16cf60bba735b"}, - {file = "lxml-5.2.2-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3a745cc98d504d5bd2c19b10c79c61c7c3df9222629f1b6210c0368177589fb8"}, - {file = "lxml-5.2.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b590b39ef90c6b22ec0be925b211298e810b4856909c8ca60d27ffbca6c12e6"}, - {file = "lxml-5.2.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b336b0416828022bfd5a2e3083e7f5ba54b96242159f83c7e3eebaec752f1716"}, - {file = "lxml-5.2.2-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:c2faf60c583af0d135e853c86ac2735ce178f0e338a3c7f9ae8f622fd2eb788c"}, - {file = "lxml-5.2.2-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:4bc6cb140a7a0ad1f7bc37e018d0ed690b7b6520ade518285dc3171f7a117905"}, - {file = "lxml-5.2.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7ff762670cada8e05b32bf1e4dc50b140790909caa8303cfddc4d702b71ea184"}, - {file = "lxml-5.2.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:57f0a0bbc9868e10ebe874e9f129d2917750adf008fe7b9c1598c0fbbfdde6a6"}, - {file = "lxml-5.2.2-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:a6d2092797b388342c1bc932077ad232f914351932353e2e8706851c870bca1f"}, - {file = "lxml-5.2.2-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:60499fe961b21264e17a471ec296dcbf4365fbea611bf9e303ab69db7159ce61"}, - {file = "lxml-5.2.2-cp37-cp37m-win32.whl", hash = "sha256:d9b342c76003c6b9336a80efcc766748a333573abf9350f4094ee46b006ec18f"}, - {file = "lxml-5.2.2-cp37-cp37m-win_amd64.whl", hash = "sha256:b16db2770517b8799c79aa80f4053cd6f8b716f21f8aca962725a9565ce3ee40"}, - {file = "lxml-5.2.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7ed07b3062b055d7a7f9d6557a251cc655eed0b3152b76de619516621c56f5d3"}, - {file = "lxml-5.2.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f60fdd125d85bf9c279ffb8e94c78c51b3b6a37711464e1f5f31078b45002421"}, - {file = "lxml-5.2.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a7e24cb69ee5f32e003f50e016d5fde438010c1022c96738b04fc2423e61706"}, - {file = "lxml-5.2.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23cfafd56887eaed93d07bc4547abd5e09d837a002b791e9767765492a75883f"}, - {file = "lxml-5.2.2-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:19b4e485cd07b7d83e3fe3b72132e7df70bfac22b14fe4bf7a23822c3a35bff5"}, - {file = "lxml-5.2.2-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:7ce7ad8abebe737ad6143d9d3bf94b88b93365ea30a5b81f6877ec9c0dee0a48"}, - {file = "lxml-5.2.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e49b052b768bb74f58c7dda4e0bdf7b79d43a9204ca584ffe1fb48a6f3c84c66"}, - {file = "lxml-5.2.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d14a0d029a4e176795cef99c056d58067c06195e0c7e2dbb293bf95c08f772a3"}, - {file = "lxml-5.2.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:be49ad33819d7dcc28a309b86d4ed98e1a65f3075c6acd3cd4fe32103235222b"}, - {file = "lxml-5.2.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:a6d17e0370d2516d5bb9062c7b4cb731cff921fc875644c3d751ad857ba9c5b1"}, - {file = "lxml-5.2.2-cp38-cp38-win32.whl", hash = "sha256:5b8c041b6265e08eac8a724b74b655404070b636a8dd6d7a13c3adc07882ef30"}, - {file = "lxml-5.2.2-cp38-cp38-win_amd64.whl", hash = "sha256:f61efaf4bed1cc0860e567d2ecb2363974d414f7f1f124b1df368bbf183453a6"}, - {file = "lxml-5.2.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:fb91819461b1b56d06fa4bcf86617fac795f6a99d12239fb0c68dbeba41a0a30"}, - {file = "lxml-5.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d4ed0c7cbecde7194cd3228c044e86bf73e30a23505af852857c09c24e77ec5d"}, - {file = "lxml-5.2.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54401c77a63cc7d6dc4b4e173bb484f28a5607f3df71484709fe037c92d4f0ed"}, - {file = "lxml-5.2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:625e3ef310e7fa3a761d48ca7ea1f9d8718a32b1542e727d584d82f4453d5eeb"}, - {file = "lxml-5.2.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:519895c99c815a1a24a926d5b60627ce5ea48e9f639a5cd328bda0515ea0f10c"}, - {file = "lxml-5.2.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c7079d5eb1c1315a858bbf180000757db8ad904a89476653232db835c3114001"}, - {file = "lxml-5.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:343ab62e9ca78094f2306aefed67dcfad61c4683f87eee48ff2fd74902447726"}, - {file = "lxml-5.2.2-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:cd9e78285da6c9ba2d5c769628f43ef66d96ac3085e59b10ad4f3707980710d3"}, - {file = "lxml-5.2.2-cp39-cp39-manylinux_2_28_ppc64le.whl", hash = "sha256:546cf886f6242dff9ec206331209db9c8e1643ae642dea5fdbecae2453cb50fd"}, - {file = "lxml-5.2.2-cp39-cp39-manylinux_2_28_s390x.whl", hash = "sha256:02f6a8eb6512fdc2fd4ca10a49c341c4e109aa6e9448cc4859af5b949622715a"}, - {file = "lxml-5.2.2-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:339ee4a4704bc724757cd5dd9dc8cf4d00980f5d3e6e06d5847c1b594ace68ab"}, - {file = "lxml-5.2.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0a028b61a2e357ace98b1615fc03f76eb517cc028993964fe08ad514b1e8892d"}, - {file = "lxml-5.2.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:f90e552ecbad426eab352e7b2933091f2be77115bb16f09f78404861c8322981"}, - {file = "lxml-5.2.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:d83e2d94b69bf31ead2fa45f0acdef0757fa0458a129734f59f67f3d2eb7ef32"}, - {file = "lxml-5.2.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a02d3c48f9bb1e10c7788d92c0c7db6f2002d024ab6e74d6f45ae33e3d0288a3"}, - {file = "lxml-5.2.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:6d68ce8e7b2075390e8ac1e1d3a99e8b6372c694bbe612632606d1d546794207"}, - {file = "lxml-5.2.2-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:453d037e09a5176d92ec0fd282e934ed26d806331a8b70ab431a81e2fbabf56d"}, - {file = "lxml-5.2.2-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:3b019d4ee84b683342af793b56bb35034bd749e4cbdd3d33f7d1107790f8c472"}, - {file = "lxml-5.2.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:cb3942960f0beb9f46e2a71a3aca220d1ca32feb5a398656be934320804c0df9"}, - {file = "lxml-5.2.2-cp39-cp39-win32.whl", hash = "sha256:ac6540c9fff6e3813d29d0403ee7a81897f1d8ecc09a8ff84d2eea70ede1cdbf"}, - {file = "lxml-5.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:610b5c77428a50269f38a534057444c249976433f40f53e3b47e68349cca1425"}, - {file = "lxml-5.2.2-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:b537bd04d7ccd7c6350cdaaaad911f6312cbd61e6e6045542f781c7f8b2e99d2"}, - {file = "lxml-5.2.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4820c02195d6dfb7b8508ff276752f6b2ff8b64ae5d13ebe02e7667e035000b9"}, - {file = "lxml-5.2.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2a09f6184f17a80897172863a655467da2b11151ec98ba8d7af89f17bf63dae"}, - {file = "lxml-5.2.2-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:76acba4c66c47d27c8365e7c10b3d8016a7da83d3191d053a58382311a8bf4e1"}, - {file = "lxml-5.2.2-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:b128092c927eaf485928cec0c28f6b8bead277e28acf56800e972aa2c2abd7a2"}, - {file = "lxml-5.2.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ae791f6bd43305aade8c0e22f816b34f3b72b6c820477aab4d18473a37e8090b"}, - {file = "lxml-5.2.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a2f6a1bc2460e643785a2cde17293bd7a8f990884b822f7bca47bee0a82fc66b"}, - {file = "lxml-5.2.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e8d351ff44c1638cb6e980623d517abd9f580d2e53bfcd18d8941c052a5a009"}, - {file = "lxml-5.2.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bec4bd9133420c5c52d562469c754f27c5c9e36ee06abc169612c959bd7dbb07"}, - {file = "lxml-5.2.2-pp37-pypy37_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:55ce6b6d803890bd3cc89975fca9de1dff39729b43b73cb15ddd933b8bc20484"}, - {file = "lxml-5.2.2-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:8ab6a358d1286498d80fe67bd3d69fcbc7d1359b45b41e74c4a26964ca99c3f8"}, - {file = "lxml-5.2.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:06668e39e1f3c065349c51ac27ae430719d7806c026fec462e5693b08b95696b"}, - {file = "lxml-5.2.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9cd5323344d8ebb9fb5e96da5de5ad4ebab993bbf51674259dbe9d7a18049525"}, - {file = "lxml-5.2.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89feb82ca055af0fe797a2323ec9043b26bc371365847dbe83c7fd2e2f181c34"}, - {file = "lxml-5.2.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e481bba1e11ba585fb06db666bfc23dbe181dbafc7b25776156120bf12e0d5a6"}, - {file = "lxml-5.2.2-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:9d6c6ea6a11ca0ff9cd0390b885984ed31157c168565702959c25e2191674a14"}, - {file = "lxml-5.2.2-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3d98de734abee23e61f6b8c2e08a88453ada7d6486dc7cdc82922a03968928db"}, - {file = "lxml-5.2.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:69ab77a1373f1e7563e0fb5a29a8440367dec051da6c7405333699d07444f511"}, - {file = "lxml-5.2.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:34e17913c431f5ae01d8658dbf792fdc457073dcdfbb31dc0cc6ab256e664a8d"}, - {file = "lxml-5.2.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:05f8757b03208c3f50097761be2dea0aba02e94f0dc7023ed73a7bb14ff11eb0"}, - {file = "lxml-5.2.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a520b4f9974b0a0a6ed73c2154de57cdfd0c8800f4f15ab2b73238ffed0b36e"}, - {file = "lxml-5.2.2-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:5e097646944b66207023bc3c634827de858aebc226d5d4d6d16f0b77566ea182"}, - {file = "lxml-5.2.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:b5e4ef22ff25bfd4ede5f8fb30f7b24446345f3e79d9b7455aef2836437bc38a"}, - {file = "lxml-5.2.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ff69a9a0b4b17d78170c73abe2ab12084bdf1691550c5629ad1fe7849433f324"}, - {file = "lxml-5.2.2.tar.gz", hash = "sha256:bb2dc4898180bea79863d5487e5f9c7c34297414bad54bcd0f0852aee9cfdb87"}, + {file = "lxml-5.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:dd36439be765e2dde7660212b5275641edbc813e7b24668831a5c8ac91180656"}, + {file = "lxml-5.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ae5fe5c4b525aa82b8076c1a59d642c17b6e8739ecf852522c6321852178119d"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:501d0d7e26b4d261fca8132854d845e4988097611ba2531408ec91cf3fd9d20a"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb66442c2546446944437df74379e9cf9e9db353e61301d1a0e26482f43f0dd8"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9e41506fec7a7f9405b14aa2d5c8abbb4dbbd09d88f9496958b6d00cb4d45330"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f7d4a670107d75dfe5ad080bed6c341d18c4442f9378c9f58e5851e86eb79965"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41ce1f1e2c7755abfc7e759dc34d7d05fd221723ff822947132dc934d122fe22"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:44264ecae91b30e5633013fb66f6ddd05c006d3e0e884f75ce0b4755b3e3847b"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_28_ppc64le.whl", hash = "sha256:3c174dc350d3ec52deb77f2faf05c439331d6ed5e702fc247ccb4e6b62d884b7"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_28_s390x.whl", hash = "sha256:2dfab5fa6a28a0b60a20638dc48e6343c02ea9933e3279ccb132f555a62323d8"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b1c8c20847b9f34e98080da785bb2336ea982e7f913eed5809e5a3c872900f32"}, + {file = "lxml-5.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2c86bf781b12ba417f64f3422cfc302523ac9cd1d8ae8c0f92a1c66e56ef2e86"}, + {file = "lxml-5.3.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:c162b216070f280fa7da844531169be0baf9ccb17263cf5a8bf876fcd3117fa5"}, + {file = "lxml-5.3.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:36aef61a1678cb778097b4a6eeae96a69875d51d1e8f4d4b491ab3cfb54b5a03"}, + {file = "lxml-5.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f65e5120863c2b266dbcc927b306c5b78e502c71edf3295dfcb9501ec96e5fc7"}, + {file = "lxml-5.3.0-cp310-cp310-win32.whl", hash = "sha256:ef0c1fe22171dd7c7c27147f2e9c3e86f8bdf473fed75f16b0c2e84a5030ce80"}, + {file = "lxml-5.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:052d99051e77a4f3e8482c65014cf6372e61b0a6f4fe9edb98503bb5364cfee3"}, + {file = "lxml-5.3.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:74bcb423462233bc5d6066e4e98b0264e7c1bed7541fff2f4e34fe6b21563c8b"}, + {file = "lxml-5.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a3d819eb6f9b8677f57f9664265d0a10dd6551d227afb4af2b9cd7bdc2ccbf18"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b8f5db71b28b8c404956ddf79575ea77aa8b1538e8b2ef9ec877945b3f46442"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c3406b63232fc7e9b8783ab0b765d7c59e7c59ff96759d8ef9632fca27c7ee4"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ecdd78ab768f844c7a1d4a03595038c166b609f6395e25af9b0f3f26ae1230f"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:168f2dfcfdedf611eb285efac1516c8454c8c99caf271dccda8943576b67552e"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa617107a410245b8660028a7483b68e7914304a6d4882b5ff3d2d3eb5948d8c"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:69959bd3167b993e6e710b99051265654133a98f20cec1d9b493b931942e9c16"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_28_ppc64le.whl", hash = "sha256:bd96517ef76c8654446fc3db9242d019a1bb5fe8b751ba414765d59f99210b79"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_28_s390x.whl", hash = "sha256:ab6dd83b970dc97c2d10bc71aa925b84788c7c05de30241b9e96f9b6d9ea3080"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:eec1bb8cdbba2925bedc887bc0609a80e599c75b12d87ae42ac23fd199445654"}, + {file = "lxml-5.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6a7095eeec6f89111d03dabfe5883a1fd54da319c94e0fb104ee8f23616b572d"}, + {file = "lxml-5.3.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:6f651ebd0b21ec65dfca93aa629610a0dbc13dbc13554f19b0113da2e61a4763"}, + {file = "lxml-5.3.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:f422a209d2455c56849442ae42f25dbaaba1c6c3f501d58761c619c7836642ec"}, + {file = "lxml-5.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:62f7fdb0d1ed2065451f086519865b4c90aa19aed51081979ecd05a21eb4d1be"}, + {file = "lxml-5.3.0-cp311-cp311-win32.whl", hash = "sha256:c6379f35350b655fd817cd0d6cbeef7f265f3ae5fedb1caae2eb442bbeae9ab9"}, + {file = "lxml-5.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:9c52100e2c2dbb0649b90467935c4b0de5528833c76a35ea1a2691ec9f1ee7a1"}, + {file = "lxml-5.3.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:e99f5507401436fdcc85036a2e7dc2e28d962550afe1cbfc07c40e454256a859"}, + {file = "lxml-5.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:384aacddf2e5813a36495233b64cb96b1949da72bef933918ba5c84e06af8f0e"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:874a216bf6afaf97c263b56371434e47e2c652d215788396f60477540298218f"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65ab5685d56914b9a2a34d67dd5488b83213d680b0c5d10b47f81da5a16b0b0e"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aac0bbd3e8dd2d9c45ceb82249e8bdd3ac99131a32b4d35c8af3cc9db1657179"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b369d3db3c22ed14c75ccd5af429086f166a19627e84a8fdade3f8f31426e52a"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c24037349665434f375645fa9d1f5304800cec574d0310f618490c871fd902b3"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:62d172f358f33a26d6b41b28c170c63886742f5b6772a42b59b4f0fa10526cb1"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_28_ppc64le.whl", hash = "sha256:c1f794c02903c2824fccce5b20c339a1a14b114e83b306ff11b597c5f71a1c8d"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_28_s390x.whl", hash = "sha256:5d6a6972b93c426ace71e0be9a6f4b2cfae9b1baed2eed2006076a746692288c"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:3879cc6ce938ff4eb4900d901ed63555c778731a96365e53fadb36437a131a99"}, + {file = "lxml-5.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:74068c601baff6ff021c70f0935b0c7bc528baa8ea210c202e03757c68c5a4ff"}, + {file = "lxml-5.3.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:ecd4ad8453ac17bc7ba3868371bffb46f628161ad0eefbd0a855d2c8c32dd81a"}, + {file = "lxml-5.3.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:7e2f58095acc211eb9d8b5771bf04df9ff37d6b87618d1cbf85f92399c98dae8"}, + {file = "lxml-5.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e63601ad5cd8f860aa99d109889b5ac34de571c7ee902d6812d5d9ddcc77fa7d"}, + {file = "lxml-5.3.0-cp312-cp312-win32.whl", hash = "sha256:17e8d968d04a37c50ad9c456a286b525d78c4a1c15dd53aa46c1d8e06bf6fa30"}, + {file = "lxml-5.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:c1a69e58a6bb2de65902051d57fde951febad631a20a64572677a1052690482f"}, + {file = "lxml-5.3.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8c72e9563347c7395910de6a3100a4840a75a6f60e05af5e58566868d5eb2d6a"}, + {file = "lxml-5.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e92ce66cd919d18d14b3856906a61d3f6b6a8500e0794142338da644260595cd"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d04f064bebdfef9240478f7a779e8c5dc32b8b7b0b2fc6a62e39b928d428e51"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c2fb570d7823c2bbaf8b419ba6e5662137f8166e364a8b2b91051a1fb40ab8b"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0c120f43553ec759f8de1fee2f4794452b0946773299d44c36bfe18e83caf002"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:562e7494778a69086f0312ec9689f6b6ac1c6b65670ed7d0267e49f57ffa08c4"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:423b121f7e6fa514ba0c7918e56955a1d4470ed35faa03e3d9f0e3baa4c7e492"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:c00f323cc00576df6165cc9d21a4c21285fa6b9989c5c39830c3903dc4303ef3"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_28_ppc64le.whl", hash = "sha256:1fdc9fae8dd4c763e8a31e7630afef517eab9f5d5d31a278df087f307bf601f4"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_28_s390x.whl", hash = "sha256:658f2aa69d31e09699705949b5fc4719cbecbd4a97f9656a232e7d6c7be1a367"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:1473427aff3d66a3fa2199004c3e601e6c4500ab86696edffdbc84954c72d832"}, + {file = "lxml-5.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a87de7dd873bf9a792bf1e58b1c3887b9264036629a5bf2d2e6579fe8e73edff"}, + {file = "lxml-5.3.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:0d7b36afa46c97875303a94e8f3ad932bf78bace9e18e603f2085b652422edcd"}, + {file = "lxml-5.3.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:cf120cce539453ae086eacc0130a324e7026113510efa83ab42ef3fcfccac7fb"}, + {file = "lxml-5.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:df5c7333167b9674aa8ae1d4008fa4bc17a313cc490b2cca27838bbdcc6bb15b"}, + {file = "lxml-5.3.0-cp313-cp313-win32.whl", hash = "sha256:c802e1c2ed9f0c06a65bc4ed0189d000ada8049312cfeab6ca635e39c9608957"}, + {file = "lxml-5.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:406246b96d552e0503e17a1006fd27edac678b3fcc9f1be71a2f94b4ff61528d"}, + {file = "lxml-5.3.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:8f0de2d390af441fe8b2c12626d103540b5d850d585b18fcada58d972b74a74e"}, + {file = "lxml-5.3.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1afe0a8c353746e610bd9031a630a95bcfb1a720684c3f2b36c4710a0a96528f"}, + {file = "lxml-5.3.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56b9861a71575f5795bde89256e7467ece3d339c9b43141dbdd54544566b3b94"}, + {file = "lxml-5.3.0-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:9fb81d2824dff4f2e297a276297e9031f46d2682cafc484f49de182aa5e5df99"}, + {file = "lxml-5.3.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:2c226a06ecb8cdef28845ae976da407917542c5e6e75dcac7cc33eb04aaeb237"}, + {file = "lxml-5.3.0-cp36-cp36m-musllinux_1_2_x86_64.whl", hash = "sha256:7d3d1ca42870cdb6d0d29939630dbe48fa511c203724820fc0fd507b2fb46577"}, + {file = "lxml-5.3.0-cp36-cp36m-win32.whl", hash = "sha256:094cb601ba9f55296774c2d57ad68730daa0b13dc260e1f941b4d13678239e70"}, + {file = "lxml-5.3.0-cp36-cp36m-win_amd64.whl", hash = "sha256:eafa2c8658f4e560b098fe9fc54539f86528651f61849b22111a9b107d18910c"}, + {file = "lxml-5.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cb83f8a875b3d9b458cada4f880fa498646874ba4011dc974e071a0a84a1b033"}, + {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:25f1b69d41656b05885aa185f5fdf822cb01a586d1b32739633679699f220391"}, + {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23e0553b8055600b3bf4a00b255ec5c92e1e4aebf8c2c09334f8368e8bd174d6"}, + {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ada35dd21dc6c039259596b358caab6b13f4db4d4a7f8665764d616daf9cc1d"}, + {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:81b4e48da4c69313192d8c8d4311e5d818b8be1afe68ee20f6385d0e96fc9512"}, + {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:2bc9fd5ca4729af796f9f59cd8ff160fe06a474da40aca03fcc79655ddee1a8b"}, + {file = "lxml-5.3.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:07da23d7ee08577760f0a71d67a861019103e4812c87e2fab26b039054594cc5"}, + {file = "lxml-5.3.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:ea2e2f6f801696ad7de8aec061044d6c8c0dd4037608c7cab38a9a4d316bfb11"}, + {file = "lxml-5.3.0-cp37-cp37m-win32.whl", hash = "sha256:5c54afdcbb0182d06836cc3d1be921e540be3ebdf8b8a51ee3ef987537455f84"}, + {file = "lxml-5.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:f2901429da1e645ce548bf9171784c0f74f0718c3f6150ce166be39e4dd66c3e"}, + {file = "lxml-5.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c56a1d43b2f9ee4786e4658c7903f05da35b923fb53c11025712562d5cc02753"}, + {file = "lxml-5.3.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ee8c39582d2652dcd516d1b879451500f8db3fe3607ce45d7c5957ab2596040"}, + {file = "lxml-5.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fdf3a3059611f7585a78ee10399a15566356116a4288380921a4b598d807a22"}, + {file = "lxml-5.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:146173654d79eb1fc97498b4280c1d3e1e5d58c398fa530905c9ea50ea849b22"}, + {file = "lxml-5.3.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:0a7056921edbdd7560746f4221dca89bb7a3fe457d3d74267995253f46343f15"}, + {file = "lxml-5.3.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:9e4b47ac0f5e749cfc618efdf4726269441014ae1d5583e047b452a32e221920"}, + {file = "lxml-5.3.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:f914c03e6a31deb632e2daa881fe198461f4d06e57ac3d0e05bbcab8eae01945"}, + {file = "lxml-5.3.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:213261f168c5e1d9b7535a67e68b1f59f92398dd17a56d934550837143f79c42"}, + {file = "lxml-5.3.0-cp38-cp38-win32.whl", hash = "sha256:218c1b2e17a710e363855594230f44060e2025b05c80d1f0661258142b2add2e"}, + {file = "lxml-5.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:315f9542011b2c4e1d280e4a20ddcca1761993dda3afc7a73b01235f8641e903"}, + {file = "lxml-5.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1ffc23010330c2ab67fac02781df60998ca8fe759e8efde6f8b756a20599c5de"}, + {file = "lxml-5.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2b3778cb38212f52fac9fe913017deea2fdf4eb1a4f8e4cfc6b009a13a6d3fcc"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b0c7a688944891086ba192e21c5229dea54382f4836a209ff8d0a660fac06be"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:747a3d3e98e24597981ca0be0fd922aebd471fa99d0043a3842d00cdcad7ad6a"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:86a6b24b19eaebc448dc56b87c4865527855145d851f9fc3891673ff97950540"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b11a5d918a6216e521c715b02749240fb07ae5a1fefd4b7bf12f833bc8b4fe70"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68b87753c784d6acb8a25b05cb526c3406913c9d988d51f80adecc2b0775d6aa"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:109fa6fede314cc50eed29e6e56c540075e63d922455346f11e4d7a036d2b8cf"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_28_ppc64le.whl", hash = "sha256:02ced472497b8362c8e902ade23e3300479f4f43e45f4105c85ef43b8db85229"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_28_s390x.whl", hash = "sha256:6b038cc86b285e4f9fea2ba5ee76e89f21ed1ea898e287dc277a25884f3a7dfe"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:7437237c6a66b7ca341e868cda48be24b8701862757426852c9b3186de1da8a2"}, + {file = "lxml-5.3.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7f41026c1d64043a36fda21d64c5026762d53a77043e73e94b71f0521939cc71"}, + {file = "lxml-5.3.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:482c2f67761868f0108b1743098640fbb2a28a8e15bf3f47ada9fa59d9fe08c3"}, + {file = "lxml-5.3.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:1483fd3358963cc5c1c9b122c80606a3a79ee0875bcac0204149fa09d6ff2727"}, + {file = "lxml-5.3.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2dec2d1130a9cda5b904696cec33b2cfb451304ba9081eeda7f90f724097300a"}, + {file = "lxml-5.3.0-cp39-cp39-win32.whl", hash = "sha256:a0eabd0a81625049c5df745209dc7fcef6e2aea7793e5f003ba363610aa0a3ff"}, + {file = "lxml-5.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:89e043f1d9d341c52bf2af6d02e6adde62e0a46e6755d5eb60dc6e4f0b8aeca2"}, + {file = "lxml-5.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7b1cd427cb0d5f7393c31b7496419da594fe600e6fdc4b105a54f82405e6626c"}, + {file = "lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:51806cfe0279e06ed8500ce19479d757db42a30fd509940b1701be9c86a5ff9a"}, + {file = "lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee70d08fd60c9565ba8190f41a46a54096afa0eeb8f76bd66f2c25d3b1b83005"}, + {file = "lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:8dc2c0395bea8254d8daebc76dcf8eb3a95ec2a46fa6fae5eaccee366bfe02ce"}, + {file = "lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6ba0d3dcac281aad8a0e5b14c7ed6f9fa89c8612b47939fc94f80b16e2e9bc83"}, + {file = "lxml-5.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:6e91cf736959057f7aac7adfc83481e03615a8e8dd5758aa1d95ea69e8931dba"}, + {file = "lxml-5.3.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:94d6c3782907b5e40e21cadf94b13b0842ac421192f26b84c45f13f3c9d5dc27"}, + {file = "lxml-5.3.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c300306673aa0f3ed5ed9372b21867690a17dba38c68c44b287437c362ce486b"}, + {file = "lxml-5.3.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78d9b952e07aed35fe2e1a7ad26e929595412db48535921c5013edc8aa4a35ce"}, + {file = "lxml-5.3.0-pp37-pypy37_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:01220dca0d066d1349bd6a1726856a78f7929f3878f7e2ee83c296c69495309e"}, + {file = "lxml-5.3.0-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:2d9b8d9177afaef80c53c0a9e30fa252ff3036fb1c6494d427c066a4ce6a282f"}, + {file = "lxml-5.3.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:20094fc3f21ea0a8669dc4c61ed7fa8263bd37d97d93b90f28fc613371e7a875"}, + {file = "lxml-5.3.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ace2c2326a319a0bb8a8b0e5b570c764962e95818de9f259ce814ee666603f19"}, + {file = "lxml-5.3.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92e67a0be1639c251d21e35fe74df6bcc40cba445c2cda7c4a967656733249e2"}, + {file = "lxml-5.3.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd5350b55f9fecddc51385463a4f67a5da829bc741e38cf689f38ec9023f54ab"}, + {file = "lxml-5.3.0-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:4c1fefd7e3d00921c44dc9ca80a775af49698bbfd92ea84498e56acffd4c5469"}, + {file = "lxml-5.3.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:71a8dd38fbd2f2319136d4ae855a7078c69c9a38ae06e0c17c73fd70fc6caad8"}, + {file = "lxml-5.3.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:97acf1e1fd66ab53dacd2c35b319d7e548380c2e9e8c54525c6e76d21b1ae3b1"}, + {file = "lxml-5.3.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:68934b242c51eb02907c5b81d138cb977b2129a0a75a8f8b60b01cb8586c7b21"}, + {file = "lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b710bc2b8292966b23a6a0121f7a6c51d45d2347edcc75f016ac123b8054d3f2"}, + {file = "lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18feb4b93302091b1541221196a2155aa296c363fd233814fa11e181adebc52f"}, + {file = "lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:3eb44520c4724c2e1a57c0af33a379eee41792595023f367ba3952a2d96c2aab"}, + {file = "lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:609251a0ca4770e5a8768ff902aa02bf636339c5a93f9349b48eb1f606f7f3e9"}, + {file = "lxml-5.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:516f491c834eb320d6c843156440fe7fc0d50b33e44387fcec5b02f0bc118a4c"}, + {file = "lxml-5.3.0.tar.gz", hash = "sha256:4e109ca30d1edec1ac60cdbe341905dc3b8f55b16855e03a54aaf59e51ec8c6f"}, ] [package.extras] @@ -2335,7 +2386,7 @@ cssselect = ["cssselect (>=0.7)"] html-clean = ["lxml-html-clean"] html5 = ["html5lib"] htmlsoup = ["BeautifulSoup4"] -source = ["Cython (>=3.0.10)"] +source = ["Cython (>=3.0.11)"] [[package]] name = "markdown-it-py" @@ -2455,33 +2506,15 @@ files = [ {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, ] -[[package]] -name = "mkl" -version = "2021.4.0" -description = "Intel® oneAPI Math Kernel Library" -optional = true -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 = "more-itertools" -version = "10.3.0" +version = "10.4.0" description = "More routines for operating on iterables, beyond itertools" optional = false python-versions = ">=3.8" files = [ - {file = "more-itertools-10.3.0.tar.gz", hash = "sha256:e5d93ef411224fbcef366a6e8ddc4c5781bc6359d43412a65dd5964e46111463"}, - {file = "more_itertools-10.3.0-py3-none-any.whl", hash = "sha256:ea6a02e24a9161e51faad17a8782b92a0df82c12c1c8886fec7f0c3fa1a1b320"}, + {file = "more-itertools-10.4.0.tar.gz", hash = "sha256:fe0e63c4ab068eac62410ab05cccca2dc71ec44ba8ef29916a0090df061cf923"}, + {file = "more_itertools-10.4.0-py3-none-any.whl", hash = "sha256:0f7d9f83a0a8dcfa8a2694a770590d98a67ea943e3d9f5298309a484758c4e27"}, ] [[package]] @@ -2873,12 +2906,13 @@ files = [ [[package]] name = "nvidia-cudnn-cu12" -version = "8.9.2.26" +version = "9.1.0.70" description = "cuDNN runtime libraries" optional = true python-versions = ">=3" files = [ - {file = "nvidia_cudnn_cu12-8.9.2.26-py3-none-manylinux1_x86_64.whl", hash = "sha256:5ccb288774fdfb07a7e7025ffec286971c06d8d7b4fb162525334616d7629ff9"}, + {file = "nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl", hash = "sha256:165764f44ef8c61fcdfdfdbe769d687e06374059fbb388b6c89ecb0e28793a6f"}, + {file = "nvidia_cudnn_cu12-9.1.0.70-py3-none-win_amd64.whl", hash = "sha256:6278562929433d68365a07a4a1546c237ba2849852c0d4b2262a486e805b977a"}, ] [package.dependencies] @@ -2949,14 +2983,14 @@ files = [ [[package]] name = "nvidia-nvjitlink-cu12" -version = "12.5.82" +version = "12.6.20" description = "Nvidia JIT LTO Library" optional = true python-versions = ">=3" files = [ - {file = "nvidia_nvjitlink_cu12-12.5.82-py3-none-manylinux2014_aarch64.whl", hash = "sha256:98103729cc5226e13ca319a10bbf9433bbbd44ef64fe72f45f067cacc14b8d27"}, - {file = "nvidia_nvjitlink_cu12-12.5.82-py3-none-manylinux2014_x86_64.whl", hash = "sha256:f9b37bc5c8cf7509665cb6ada5aaa0ce65618f2332b7d3e78e9790511f111212"}, - {file = "nvidia_nvjitlink_cu12-12.5.82-py3-none-win_amd64.whl", hash = "sha256:e782564d705ff0bf61ac3e1bf730166da66dd2fe9012f111ede5fc49b64ae697"}, + {file = "nvidia_nvjitlink_cu12-12.6.20-py3-none-manylinux2014_aarch64.whl", hash = "sha256:84fb38465a5bc7c70cbc320cfd0963eb302ee25a5e939e9f512bbba55b6072fb"}, + {file = "nvidia_nvjitlink_cu12-12.6.20-py3-none-manylinux2014_x86_64.whl", hash = "sha256:562ab97ea2c23164823b2a89cb328d01d45cb99634b8c65fe7cd60d14562bd79"}, + {file = "nvidia_nvjitlink_cu12-12.6.20-py3-none-win_amd64.whl", hash = "sha256:ed3c43a17f37b0c922a919203d2d36cbef24d41cc3e6b625182f8b58203644f6"}, ] [[package]] @@ -2972,85 +3006,92 @@ files = [ [[package]] name = "openai" -version = "1.35.14" +version = "1.40.3" description = "The official Python library for the openai API" optional = false python-versions = ">=3.7.1" files = [ - {file = "openai-1.35.14-py3-none-any.whl", hash = "sha256:adadf8c176e0b8c47ad782ed45dc20ef46438ee1f02c7103c4155cff79c8f68b"}, - {file = "openai-1.35.14.tar.gz", hash = "sha256:394ba1dfd12ecec1d634c50e512d24ff1858bbc2674ffcce309b822785a058de"}, + {file = "openai-1.40.3-py3-none-any.whl", hash = "sha256:09396cb6e2e15c921a5d872bf92841a60a9425da10dcd962b45fe7c4f48f8395"}, + {file = "openai-1.40.3.tar.gz", hash = "sha256:f2ffe907618240938c59d7ccc67dd01dc8c50be203c0077240db6758d2f02480"}, ] [package.dependencies] anyio = ">=3.5.0,<5" distro = ">=1.7.0,<2" httpx = ">=0.23.0,<1" +jiter = ">=0.4.0,<1" pydantic = ">=1.9.0,<3" sniffio = "*" tqdm = ">4" -typing-extensions = ">=4.7,<5" +typing-extensions = ">=4.11,<5" [package.extras] datalib = ["numpy (>=1)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"] [[package]] name = "orjson" -version = "3.10.6" +version = "3.10.7" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.8" files = [ - {file = "orjson-3.10.6-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:fb0ee33124db6eaa517d00890fc1a55c3bfe1cf78ba4a8899d71a06f2d6ff5c7"}, - {file = "orjson-3.10.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c1c4b53b24a4c06547ce43e5fee6ec4e0d8fe2d597f4647fc033fd205707365"}, - {file = "orjson-3.10.6-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eadc8fd310edb4bdbd333374f2c8fec6794bbbae99b592f448d8214a5e4050c0"}, - {file = "orjson-3.10.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:61272a5aec2b2661f4fa2b37c907ce9701e821b2c1285d5c3ab0207ebd358d38"}, - {file = "orjson-3.10.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57985ee7e91d6214c837936dc1608f40f330a6b88bb13f5a57ce5257807da143"}, - {file = "orjson-3.10.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:633a3b31d9d7c9f02d49c4ab4d0a86065c4a6f6adc297d63d272e043472acab5"}, - {file = "orjson-3.10.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:1c680b269d33ec444afe2bdc647c9eb73166fa47a16d9a75ee56a374f4a45f43"}, - {file = "orjson-3.10.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f759503a97a6ace19e55461395ab0d618b5a117e8d0fbb20e70cfd68a47327f2"}, - {file = "orjson-3.10.6-cp310-none-win32.whl", hash = "sha256:95a0cce17f969fb5391762e5719575217bd10ac5a189d1979442ee54456393f3"}, - {file = "orjson-3.10.6-cp310-none-win_amd64.whl", hash = "sha256:df25d9271270ba2133cc88ee83c318372bdc0f2cd6f32e7a450809a111efc45c"}, - {file = "orjson-3.10.6-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:b1ec490e10d2a77c345def52599311849fc063ae0e67cf4f84528073152bb2ba"}, - {file = "orjson-3.10.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55d43d3feb8f19d07e9f01e5b9be4f28801cf7c60d0fa0d279951b18fae1932b"}, - {file = "orjson-3.10.6-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac3045267e98fe749408eee1593a142e02357c5c99be0802185ef2170086a863"}, - {file = "orjson-3.10.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c27bc6a28ae95923350ab382c57113abd38f3928af3c80be6f2ba7eb8d8db0b0"}, - {file = "orjson-3.10.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d27456491ca79532d11e507cadca37fb8c9324a3976294f68fb1eff2dc6ced5a"}, - {file = "orjson-3.10.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05ac3d3916023745aa3b3b388e91b9166be1ca02b7c7e41045da6d12985685f0"}, - {file = "orjson-3.10.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1335d4ef59ab85cab66fe73fd7a4e881c298ee7f63ede918b7faa1b27cbe5212"}, - {file = "orjson-3.10.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4bbc6d0af24c1575edc79994c20e1b29e6fb3c6a570371306db0993ecf144dc5"}, - {file = "orjson-3.10.6-cp311-none-win32.whl", hash = "sha256:450e39ab1f7694465060a0550b3f6d328d20297bf2e06aa947b97c21e5241fbd"}, - {file = "orjson-3.10.6-cp311-none-win_amd64.whl", hash = "sha256:227df19441372610b20e05bdb906e1742ec2ad7a66ac8350dcfd29a63014a83b"}, - {file = "orjson-3.10.6-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:ea2977b21f8d5d9b758bb3f344a75e55ca78e3ff85595d248eee813ae23ecdfb"}, - {file = "orjson-3.10.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b6f3d167d13a16ed263b52dbfedff52c962bfd3d270b46b7518365bcc2121eed"}, - {file = "orjson-3.10.6-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f710f346e4c44a4e8bdf23daa974faede58f83334289df80bc9cd12fe82573c7"}, - {file = "orjson-3.10.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7275664f84e027dcb1ad5200b8b18373e9c669b2a9ec33d410c40f5ccf4b257e"}, - {file = "orjson-3.10.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0943e4c701196b23c240b3d10ed8ecd674f03089198cf503105b474a4f77f21f"}, - {file = "orjson-3.10.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:446dee5a491b5bc7d8f825d80d9637e7af43f86a331207b9c9610e2f93fee22a"}, - {file = "orjson-3.10.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:64c81456d2a050d380786413786b057983892db105516639cb5d3ee3c7fd5148"}, - {file = "orjson-3.10.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:960db0e31c4e52fa0fc3ecbaea5b2d3b58f379e32a95ae6b0ebeaa25b93dfd34"}, - {file = "orjson-3.10.6-cp312-none-win32.whl", hash = "sha256:a6ea7afb5b30b2317e0bee03c8d34c8181bc5a36f2afd4d0952f378972c4efd5"}, - {file = "orjson-3.10.6-cp312-none-win_amd64.whl", hash = "sha256:874ce88264b7e655dde4aeaacdc8fd772a7962faadfb41abe63e2a4861abc3dc"}, - {file = "orjson-3.10.6-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:66680eae4c4e7fc193d91cfc1353ad6d01b4801ae9b5314f17e11ba55e934183"}, - {file = "orjson-3.10.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:caff75b425db5ef8e8f23af93c80f072f97b4fb3afd4af44482905c9f588da28"}, - {file = "orjson-3.10.6-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3722fddb821b6036fd2a3c814f6bd9b57a89dc6337b9924ecd614ebce3271394"}, - {file = "orjson-3.10.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c2c116072a8533f2fec435fde4d134610f806bdac20188c7bd2081f3e9e0133f"}, - {file = "orjson-3.10.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6eeb13218c8cf34c61912e9df2de2853f1d009de0e46ea09ccdf3d757896af0a"}, - {file = "orjson-3.10.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:965a916373382674e323c957d560b953d81d7a8603fbeee26f7b8248638bd48b"}, - {file = "orjson-3.10.6-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:03c95484d53ed8e479cade8628c9cea00fd9d67f5554764a1110e0d5aa2de96e"}, - {file = "orjson-3.10.6-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:e060748a04cccf1e0a6f2358dffea9c080b849a4a68c28b1b907f272b5127e9b"}, - {file = "orjson-3.10.6-cp38-none-win32.whl", hash = "sha256:738dbe3ef909c4b019d69afc19caf6b5ed0e2f1c786b5d6215fbb7539246e4c6"}, - {file = "orjson-3.10.6-cp38-none-win_amd64.whl", hash = "sha256:d40f839dddf6a7d77114fe6b8a70218556408c71d4d6e29413bb5f150a692ff7"}, - {file = "orjson-3.10.6-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:697a35a083c4f834807a6232b3e62c8b280f7a44ad0b759fd4dce748951e70db"}, - {file = "orjson-3.10.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd502f96bf5ea9a61cbc0b2b5900d0dd68aa0da197179042bdd2be67e51a1e4b"}, - {file = "orjson-3.10.6-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f215789fb1667cdc874c1b8af6a84dc939fd802bf293a8334fce185c79cd359b"}, - {file = "orjson-3.10.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a2debd8ddce948a8c0938c8c93ade191d2f4ba4649a54302a7da905a81f00b56"}, - {file = "orjson-3.10.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5410111d7b6681d4b0d65e0f58a13be588d01b473822483f77f513c7f93bd3b2"}, - {file = "orjson-3.10.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb1f28a137337fdc18384079fa5726810681055b32b92253fa15ae5656e1dddb"}, - {file = "orjson-3.10.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:bf2fbbce5fe7cd1aa177ea3eab2b8e6a6bc6e8592e4279ed3db2d62e57c0e1b2"}, - {file = "orjson-3.10.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:79b9b9e33bd4c517445a62b90ca0cc279b0f1f3970655c3df9e608bc3f91741a"}, - {file = "orjson-3.10.6-cp39-none-win32.whl", hash = "sha256:30b0a09a2014e621b1adf66a4f705f0809358350a757508ee80209b2d8dae219"}, - {file = "orjson-3.10.6-cp39-none-win_amd64.whl", hash = "sha256:49e3bc615652617d463069f91b867a4458114c5b104e13b7ae6872e5f79d0844"}, - {file = "orjson-3.10.6.tar.gz", hash = "sha256:e54b63d0a7c6c54a5f5f726bc93a2078111ef060fec4ecbf34c5db800ca3b3a7"}, + {file = "orjson-3.10.7-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:74f4544f5a6405b90da8ea724d15ac9c36da4d72a738c64685003337401f5c12"}, + {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34a566f22c28222b08875b18b0dfbf8a947e69df21a9ed5c51a6bf91cfb944ac"}, + {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bf6ba8ebc8ef5792e2337fb0419f8009729335bb400ece005606336b7fd7bab7"}, + {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac7cf6222b29fbda9e3a472b41e6a5538b48f2c8f99261eecd60aafbdb60690c"}, + {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:de817e2f5fc75a9e7dd350c4b0f54617b280e26d1631811a43e7e968fa71e3e9"}, + {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:348bdd16b32556cf8d7257b17cf2bdb7ab7976af4af41ebe79f9796c218f7e91"}, + {file = "orjson-3.10.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:479fd0844ddc3ca77e0fd99644c7fe2de8e8be1efcd57705b5c92e5186e8a250"}, + {file = "orjson-3.10.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:fdf5197a21dd660cf19dfd2a3ce79574588f8f5e2dbf21bda9ee2d2b46924d84"}, + {file = "orjson-3.10.7-cp310-none-win32.whl", hash = "sha256:d374d36726746c81a49f3ff8daa2898dccab6596864ebe43d50733275c629175"}, + {file = "orjson-3.10.7-cp310-none-win_amd64.whl", hash = "sha256:cb61938aec8b0ffb6eef484d480188a1777e67b05d58e41b435c74b9d84e0b9c"}, + {file = "orjson-3.10.7-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:7db8539039698ddfb9a524b4dd19508256107568cdad24f3682d5773e60504a2"}, + {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:480f455222cb7a1dea35c57a67578848537d2602b46c464472c995297117fa09"}, + {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8a9c9b168b3a19e37fe2778c0003359f07822c90fdff8f98d9d2a91b3144d8e0"}, + {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8de062de550f63185e4c1c54151bdddfc5625e37daf0aa1e75d2a1293e3b7d9a"}, + {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6b0dd04483499d1de9c8f6203f8975caf17a6000b9c0c54630cef02e44ee624e"}, + {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b58d3795dafa334fc8fd46f7c5dc013e6ad06fd5b9a4cc98cb1456e7d3558bd6"}, + {file = "orjson-3.10.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:33cfb96c24034a878d83d1a9415799a73dc77480e6c40417e5dda0710d559ee6"}, + {file = "orjson-3.10.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e724cebe1fadc2b23c6f7415bad5ee6239e00a69f30ee423f319c6af70e2a5c0"}, + {file = "orjson-3.10.7-cp311-none-win32.whl", hash = "sha256:82763b46053727a7168d29c772ed5c870fdae2f61aa8a25994c7984a19b1021f"}, + {file = "orjson-3.10.7-cp311-none-win_amd64.whl", hash = "sha256:eb8d384a24778abf29afb8e41d68fdd9a156cf6e5390c04cc07bbc24b89e98b5"}, + {file = "orjson-3.10.7-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:44a96f2d4c3af51bfac6bc4ef7b182aa33f2f054fd7f34cc0ee9a320d051d41f"}, + {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76ac14cd57df0572453543f8f2575e2d01ae9e790c21f57627803f5e79b0d3c3"}, + {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bdbb61dcc365dd9be94e8f7df91975edc9364d6a78c8f7adb69c1cdff318ec93"}, + {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b48b3db6bb6e0a08fa8c83b47bc169623f801e5cc4f24442ab2b6617da3b5313"}, + {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:23820a1563a1d386414fef15c249040042b8e5d07b40ab3fe3efbfbbcbcb8864"}, + {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0c6a008e91d10a2564edbb6ee5069a9e66df3fbe11c9a005cb411f441fd2c09"}, + {file = "orjson-3.10.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d352ee8ac1926d6193f602cbe36b1643bbd1bbcb25e3c1a657a4390f3000c9a5"}, + {file = "orjson-3.10.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d2d9f990623f15c0ae7ac608103c33dfe1486d2ed974ac3f40b693bad1a22a7b"}, + {file = "orjson-3.10.7-cp312-none-win32.whl", hash = "sha256:7c4c17f8157bd520cdb7195f75ddbd31671997cbe10aee559c2d613592e7d7eb"}, + {file = "orjson-3.10.7-cp312-none-win_amd64.whl", hash = "sha256:1d9c0e733e02ada3ed6098a10a8ee0052dd55774de3d9110d29868d24b17faa1"}, + {file = "orjson-3.10.7-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:77d325ed866876c0fa6492598ec01fe30e803272a6e8b10e992288b009cbe149"}, + {file = "orjson-3.10.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ea2c232deedcb605e853ae1db2cc94f7390ac776743b699b50b071b02bea6fe"}, + {file = "orjson-3.10.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3dcfbede6737fdbef3ce9c37af3fb6142e8e1ebc10336daa05872bfb1d87839c"}, + {file = "orjson-3.10.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:11748c135f281203f4ee695b7f80bb1358a82a63905f9f0b794769483ea854ad"}, + {file = "orjson-3.10.7-cp313-none-win32.whl", hash = "sha256:a7e19150d215c7a13f39eb787d84db274298d3f83d85463e61d277bbd7f401d2"}, + {file = "orjson-3.10.7-cp313-none-win_amd64.whl", hash = "sha256:eef44224729e9525d5261cc8d28d6b11cafc90e6bd0be2157bde69a52ec83024"}, + {file = "orjson-3.10.7-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:6ea2b2258eff652c82652d5e0f02bd5e0463a6a52abb78e49ac288827aaa1469"}, + {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:430ee4d85841e1483d487e7b81401785a5dfd69db5de01314538f31f8fbf7ee1"}, + {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4b6146e439af4c2472c56f8540d799a67a81226e11992008cb47e1267a9b3225"}, + {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:084e537806b458911137f76097e53ce7bf5806dda33ddf6aaa66a028f8d43a23"}, + {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4829cf2195838e3f93b70fd3b4292156fc5e097aac3739859ac0dcc722b27ac0"}, + {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1193b2416cbad1a769f868b1749535d5da47626ac29445803dae7cc64b3f5c98"}, + {file = "orjson-3.10.7-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:4e6c3da13e5a57e4b3dca2de059f243ebec705857522f188f0180ae88badd354"}, + {file = "orjson-3.10.7-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c31008598424dfbe52ce8c5b47e0752dca918a4fdc4a2a32004efd9fab41d866"}, + {file = "orjson-3.10.7-cp38-none-win32.whl", hash = "sha256:7122a99831f9e7fe977dc45784d3b2edc821c172d545e6420c375e5a935f5a1c"}, + {file = "orjson-3.10.7-cp38-none-win_amd64.whl", hash = "sha256:a763bc0e58504cc803739e7df040685816145a6f3c8a589787084b54ebc9f16e"}, + {file = "orjson-3.10.7-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:e76be12658a6fa376fcd331b1ea4e58f5a06fd0220653450f0d415b8fd0fbe20"}, + {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed350d6978d28b92939bfeb1a0570c523f6170efc3f0a0ef1f1df287cd4f4960"}, + {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:144888c76f8520e39bfa121b31fd637e18d4cc2f115727865fdf9fa325b10412"}, + {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09b2d92fd95ad2402188cf51573acde57eb269eddabaa60f69ea0d733e789fe9"}, + {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5b24a579123fa884f3a3caadaed7b75eb5715ee2b17ab5c66ac97d29b18fe57f"}, + {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591bcfe7512353bd609875ab38050efe3d55e18934e2f18950c108334b4ff"}, + {file = "orjson-3.10.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:f4db56635b58cd1a200b0a23744ff44206ee6aa428185e2b6c4a65b3197abdcd"}, + {file = "orjson-3.10.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:0fa5886854673222618638c6df7718ea7fe2f3f2384c452c9ccedc70b4a510a5"}, + {file = "orjson-3.10.7-cp39-none-win32.whl", hash = "sha256:8272527d08450ab16eb405f47e0f4ef0e5ff5981c3d82afe0efd25dcbef2bcd2"}, + {file = "orjson-3.10.7-cp39-none-win_amd64.whl", hash = "sha256:974683d4618c0c7dbf4f69c95a979734bf183d0658611760017f6e70a145af58"}, + {file = "orjson-3.10.7.tar.gz", hash = "sha256:75ef0640403f945f3a1f9f6400686560dbfb0fb5b16589ad62cd477043c4eee3"}, ] [[package]] @@ -3238,13 +3279,13 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "pre-commit" -version = "3.7.1" +version = "3.8.0" description = "A framework for managing and maintaining multi-language pre-commit hooks." optional = false python-versions = ">=3.9" files = [ - {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"}, + {file = "pre_commit-3.8.0-py2.py3-none-any.whl", hash = "sha256:9a90a53bf82fdd8778d58085faf8d83df56e40dfe18f45b19446e26bf1b3a63f"}, + {file = "pre_commit-3.8.0.tar.gz", hash = "sha256:8bb6494d4a20423842e198980c9ecf9f96607a07ea29549e180eef9ae80fe7af"}, ] [package.dependencies] @@ -3287,22 +3328,22 @@ testing = ["google-api-core (>=1.31.5)"] [[package]] name = "protobuf" -version = "4.25.3" +version = "4.25.4" description = "" optional = true python-versions = ">=3.8" files = [ - {file = "protobuf-4.25.3-cp310-abi3-win32.whl", hash = "sha256:d4198877797a83cbfe9bffa3803602bbe1625dc30d8a097365dbc762e5790faa"}, - {file = "protobuf-4.25.3-cp310-abi3-win_amd64.whl", hash = "sha256:209ba4cc916bab46f64e56b85b090607a676f66b473e6b762e6f1d9d591eb2e8"}, - {file = "protobuf-4.25.3-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:f1279ab38ecbfae7e456a108c5c0681e4956d5b1090027c1de0f934dfdb4b35c"}, - {file = "protobuf-4.25.3-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:e7cb0ae90dd83727f0c0718634ed56837bfeeee29a5f82a7514c03ee1364c019"}, - {file = "protobuf-4.25.3-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:7c8daa26095f82482307bc717364e7c13f4f1c99659be82890dcfc215194554d"}, - {file = "protobuf-4.25.3-cp38-cp38-win32.whl", hash = "sha256:f4f118245c4a087776e0a8408be33cf09f6c547442c00395fbfb116fac2f8ac2"}, - {file = "protobuf-4.25.3-cp38-cp38-win_amd64.whl", hash = "sha256:c053062984e61144385022e53678fbded7aea14ebb3e0305ae3592fb219ccfa4"}, - {file = "protobuf-4.25.3-cp39-cp39-win32.whl", hash = "sha256:19b270aeaa0099f16d3ca02628546b8baefe2955bbe23224aaf856134eccf1e4"}, - {file = "protobuf-4.25.3-cp39-cp39-win_amd64.whl", hash = "sha256:e3c97a1555fd6388f857770ff8b9703083de6bf1f9274a002a332d65fbb56c8c"}, - {file = "protobuf-4.25.3-py3-none-any.whl", hash = "sha256:f0700d54bcf45424477e46a9f0944155b46fb0639d69728739c0e47bab83f2b9"}, - {file = "protobuf-4.25.3.tar.gz", hash = "sha256:25b5d0b42fd000320bd7830b349e3b696435f3b329810427a6bcce6a5492cc5c"}, + {file = "protobuf-4.25.4-cp310-abi3-win32.whl", hash = "sha256:db9fd45183e1a67722cafa5c1da3e85c6492a5383f127c86c4c4aa4845867dc4"}, + {file = "protobuf-4.25.4-cp310-abi3-win_amd64.whl", hash = "sha256:ba3d8504116a921af46499471c63a85260c1a5fc23333154a427a310e015d26d"}, + {file = "protobuf-4.25.4-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:eecd41bfc0e4b1bd3fa7909ed93dd14dd5567b98c941d6c1ad08fdcab3d6884b"}, + {file = "protobuf-4.25.4-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:4c8a70fdcb995dcf6c8966cfa3a29101916f7225e9afe3ced4395359955d3835"}, + {file = "protobuf-4.25.4-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:3319e073562e2515c6ddc643eb92ce20809f5d8f10fead3332f71c63be6a7040"}, + {file = "protobuf-4.25.4-cp38-cp38-win32.whl", hash = "sha256:7e372cbbda66a63ebca18f8ffaa6948455dfecc4e9c1029312f6c2edcd86c4e1"}, + {file = "protobuf-4.25.4-cp38-cp38-win_amd64.whl", hash = "sha256:051e97ce9fa6067a4546e75cb14f90cf0232dcb3e3d508c448b8d0e4265b61c1"}, + {file = "protobuf-4.25.4-cp39-cp39-win32.whl", hash = "sha256:90bf6fd378494eb698805bbbe7afe6c5d12c8e17fca817a646cd6a1818c696ca"}, + {file = "protobuf-4.25.4-cp39-cp39-win_amd64.whl", hash = "sha256:ac79a48d6b99dfed2729ccccee547b34a1d3d63289c71cef056653a846a2240f"}, + {file = "protobuf-4.25.4-py3-none-any.whl", hash = "sha256:bfbebc1c8e4793cfd58589acfb8a1026be0003e852b9da7db5a4285bde996978"}, + {file = "protobuf-4.25.4.tar.gz", hash = "sha256:0dc4a62cc4052a036ee2204d26fe4d835c62827c855c8a03f29fe6da146b380d"}, ] [[package]] @@ -3347,13 +3388,13 @@ files = [ [[package]] name = "pure-eval" -version = "0.2.2" +version = "0.2.3" description = "Safely evaluate AST nodes without side effects" optional = false python-versions = "*" files = [ - {file = "pure_eval-0.2.2-py3-none-any.whl", hash = "sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350"}, - {file = "pure_eval-0.2.2.tar.gz", hash = "sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3"}, + {file = "pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0"}, + {file = "pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42"}, ] [package.extras] @@ -3361,52 +3402,42 @@ tests = ["pytest"] [[package]] name = "pyarrow" -version = "16.1.0" +version = "17.0.0" description = "Python library for Apache Arrow" optional = true python-versions = ">=3.8" files = [ - {file = "pyarrow-16.1.0-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:17e23b9a65a70cc733d8b738baa6ad3722298fa0c81d88f63ff94bf25eaa77b9"}, - {file = "pyarrow-16.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4740cc41e2ba5d641071d0ab5e9ef9b5e6e8c7611351a5cb7c1d175eaf43674a"}, - {file = "pyarrow-16.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:98100e0268d04e0eec47b73f20b39c45b4006f3c4233719c3848aa27a03c1aef"}, - {file = "pyarrow-16.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f68f409e7b283c085f2da014f9ef81e885d90dcd733bd648cfba3ef265961848"}, - {file = "pyarrow-16.1.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:a8914cd176f448e09746037b0c6b3a9d7688cef451ec5735094055116857580c"}, - {file = "pyarrow-16.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:48be160782c0556156d91adbdd5a4a7e719f8d407cb46ae3bb4eaee09b3111bd"}, - {file = "pyarrow-16.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:9cf389d444b0f41d9fe1444b70650fea31e9d52cfcb5f818b7888b91b586efff"}, - {file = "pyarrow-16.1.0-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:d0ebea336b535b37eee9eee31761813086d33ed06de9ab6fc6aaa0bace7b250c"}, - {file = "pyarrow-16.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2e73cfc4a99e796727919c5541c65bb88b973377501e39b9842ea71401ca6c1c"}, - {file = "pyarrow-16.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf9251264247ecfe93e5f5a0cd43b8ae834f1e61d1abca22da55b20c788417f6"}, - {file = "pyarrow-16.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ddf5aace92d520d3d2a20031d8b0ec27b4395cab9f74e07cc95edf42a5cc0147"}, - {file = "pyarrow-16.1.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:25233642583bf658f629eb230b9bb79d9af4d9f9229890b3c878699c82f7d11e"}, - {file = "pyarrow-16.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a33a64576fddfbec0a44112eaf844c20853647ca833e9a647bfae0582b2ff94b"}, - {file = "pyarrow-16.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:185d121b50836379fe012753cf15c4ba9638bda9645183ab36246923875f8d1b"}, - {file = "pyarrow-16.1.0-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:2e51ca1d6ed7f2e9d5c3c83decf27b0d17bb207a7dea986e8dc3e24f80ff7d6f"}, - {file = "pyarrow-16.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:06ebccb6f8cb7357de85f60d5da50e83507954af617d7b05f48af1621d331c9a"}, - {file = "pyarrow-16.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b04707f1979815f5e49824ce52d1dceb46e2f12909a48a6a753fe7cafbc44a0c"}, - {file = "pyarrow-16.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d32000693deff8dc5df444b032b5985a48592c0697cb6e3071a5d59888714e2"}, - {file = "pyarrow-16.1.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:8785bb10d5d6fd5e15d718ee1d1f914fe768bf8b4d1e5e9bf253de8a26cb1628"}, - {file = "pyarrow-16.1.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:e1369af39587b794873b8a307cc6623a3b1194e69399af0efd05bb202195a5a7"}, - {file = "pyarrow-16.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:febde33305f1498f6df85e8020bca496d0e9ebf2093bab9e0f65e2b4ae2b3444"}, - {file = "pyarrow-16.1.0-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:b5f5705ab977947a43ac83b52ade3b881eb6e95fcc02d76f501d549a210ba77f"}, - {file = "pyarrow-16.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0d27bf89dfc2576f6206e9cd6cf7a107c9c06dc13d53bbc25b0bd4556f19cf5f"}, - {file = "pyarrow-16.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d07de3ee730647a600037bc1d7b7994067ed64d0eba797ac74b2bc77384f4c2"}, - {file = "pyarrow-16.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fbef391b63f708e103df99fbaa3acf9f671d77a183a07546ba2f2c297b361e83"}, - {file = "pyarrow-16.1.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:19741c4dbbbc986d38856ee7ddfdd6a00fc3b0fc2d928795b95410d38bb97d15"}, - {file = "pyarrow-16.1.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:f2c5fb249caa17b94e2b9278b36a05ce03d3180e6da0c4c3b3ce5b2788f30eed"}, - {file = "pyarrow-16.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:e6b6d3cd35fbb93b70ade1336022cc1147b95ec6af7d36906ca7fe432eb09710"}, - {file = "pyarrow-16.1.0-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:18da9b76a36a954665ccca8aa6bd9f46c1145f79c0bb8f4f244f5f8e799bca55"}, - {file = "pyarrow-16.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:99f7549779b6e434467d2aa43ab2b7224dd9e41bdde486020bae198978c9e05e"}, - {file = "pyarrow-16.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f07fdffe4fd5b15f5ec15c8b64584868d063bc22b86b46c9695624ca3505b7b4"}, - {file = "pyarrow-16.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ddfe389a08ea374972bd4065d5f25d14e36b43ebc22fc75f7b951f24378bf0b5"}, - {file = "pyarrow-16.1.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:3b20bd67c94b3a2ea0a749d2a5712fc845a69cb5d52e78e6449bbd295611f3aa"}, - {file = "pyarrow-16.1.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:ba8ac20693c0bb0bf4b238751d4409e62852004a8cf031c73b0e0962b03e45e3"}, - {file = "pyarrow-16.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:31a1851751433d89a986616015841977e0a188662fcffd1a5677453f1df2de0a"}, - {file = "pyarrow-16.1.0.tar.gz", hash = "sha256:15fbb22ea96d11f0b5768504a3f961edab25eaf4197c341720c4a387f6c60315"}, + {file = "pyarrow-17.0.0-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:a5c8b238d47e48812ee577ee20c9a2779e6a5904f1708ae240f53ecbee7c9f07"}, + {file = "pyarrow-17.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:db023dc4c6cae1015de9e198d41250688383c3f9af8f565370ab2b4cb5f62655"}, + {file = "pyarrow-17.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da1e060b3876faa11cee287839f9cc7cdc00649f475714b8680a05fd9071d545"}, + {file = "pyarrow-17.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75c06d4624c0ad6674364bb46ef38c3132768139ddec1c56582dbac54f2663e2"}, + {file = "pyarrow-17.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:fa3c246cc58cb5a4a5cb407a18f193354ea47dd0648194e6265bd24177982fe8"}, + {file = "pyarrow-17.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:f7ae2de664e0b158d1607699a16a488de3d008ba99b3a7aa5de1cbc13574d047"}, + {file = "pyarrow-17.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:5984f416552eea15fd9cee03da53542bf4cddaef5afecefb9aa8d1010c335087"}, + {file = "pyarrow-17.0.0-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:1c8856e2ef09eb87ecf937104aacfa0708f22dfeb039c363ec99735190ffb977"}, + {file = "pyarrow-17.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2e19f569567efcbbd42084e87f948778eb371d308e137a0f97afe19bb860ccb3"}, + {file = "pyarrow-17.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b244dc8e08a23b3e352899a006a26ae7b4d0da7bb636872fa8f5884e70acf15"}, + {file = "pyarrow-17.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b72e87fe3e1db343995562f7fff8aee354b55ee83d13afba65400c178ab2597"}, + {file = "pyarrow-17.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:dc5c31c37409dfbc5d014047817cb4ccd8c1ea25d19576acf1a001fe07f5b420"}, + {file = "pyarrow-17.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:e3343cb1e88bc2ea605986d4b94948716edc7a8d14afd4e2c097232f729758b4"}, + {file = "pyarrow-17.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:a27532c38f3de9eb3e90ecab63dfda948a8ca859a66e3a47f5f42d1e403c4d03"}, + {file = "pyarrow-17.0.0-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:9b8a823cea605221e61f34859dcc03207e52e409ccf6354634143e23af7c8d22"}, + {file = "pyarrow-17.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f1e70de6cb5790a50b01d2b686d54aaf73da01266850b05e3af2a1bc89e16053"}, + {file = "pyarrow-17.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0071ce35788c6f9077ff9ecba4858108eebe2ea5a3f7cf2cf55ebc1dbc6ee24a"}, + {file = "pyarrow-17.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:757074882f844411fcca735e39aae74248a1531367a7c80799b4266390ae51cc"}, + {file = "pyarrow-17.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:9ba11c4f16976e89146781a83833df7f82077cdab7dc6232c897789343f7891a"}, + {file = "pyarrow-17.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:b0c6ac301093b42d34410b187bba560b17c0330f64907bfa4f7f7f2444b0cf9b"}, + {file = "pyarrow-17.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:392bc9feabc647338e6c89267635e111d71edad5fcffba204425a7c8d13610d7"}, + {file = "pyarrow-17.0.0-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:af5ff82a04b2171415f1410cff7ebb79861afc5dae50be73ce06d6e870615204"}, + {file = "pyarrow-17.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:edca18eaca89cd6382dfbcff3dd2d87633433043650c07375d095cd3517561d8"}, ] [package.dependencies] numpy = ">=1.16.6" +[package.extras] +test = ["cffi", "hypothesis", "pandas", "pytest", "pytz"] + [[package]] name = "pyarrow-hotfix" version = "0.6" @@ -3506,6 +3537,107 @@ typing-extensions = ">=4.2.0" dotenv = ["python-dotenv (>=0.10.4)"] email = ["email-validator (>=1.0.3)"] +[[package]] +name = "pydantic-core" +version = "2.21.0" +description = "Core functionality for Pydantic validation and serialization" +optional = true +python-versions = ">=3.8" +files = [ + {file = "pydantic_core-2.21.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a97aa0a1f6c3f4e235fb2c9d12b92415faf8741c6a262d23a61fd26df7e30ff8"}, + {file = "pydantic_core-2.21.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d309202bbf9ff33e4e9e0ffd3ddcbf096e69bc81c7e68255612ca22cb1130a59"}, + {file = "pydantic_core-2.21.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e227183d791092b28815a435bd65f7105762473b3518d3a14ef8b663b99ce185"}, + {file = "pydantic_core-2.21.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f6ef7fd514588f8414ec033ead05ebde25a348971b0f0fd3bdc24c0276b87fd0"}, + {file = "pydantic_core-2.21.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fda3119daaa7c26ac08847c07ea96dc488bc61a34023b1050c2c20ba9493f778"}, + {file = "pydantic_core-2.21.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:07224088a793c38f8d4ef4a71889c9aaf568d250afe3ebac815b5d9578f48e41"}, + {file = "pydantic_core-2.21.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:334bd7b4ece531af9339f55d87c0bc9867f8dc71b0f9312f3f10402af9b0867e"}, + {file = "pydantic_core-2.21.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2d146b6cdd06de822e9cd6e9c255d46b7ff15b0fc312996fb7f1cd31329c3275"}, + {file = "pydantic_core-2.21.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4dcd68eb7baf796822739273864a8d988a3e81d11b1e19db2ddfb83d495fe33b"}, + {file = "pydantic_core-2.21.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6ead7f2f7c37dbe5264083e0b3a1ae84773402359d47b2bbcc1ce07867ef80d1"}, + {file = "pydantic_core-2.21.0-cp310-none-win32.whl", hash = "sha256:f4a8e22ab111391d694c7ac35f1db3f47bd58badf76d44478c2e5fbf1622a75b"}, + {file = "pydantic_core-2.21.0-cp310-none-win_amd64.whl", hash = "sha256:75e96800f42e06e72314346575ed561b76718b92115c79888a64513b817edd40"}, + {file = "pydantic_core-2.21.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:0c5d05c712ba7612bb3bdd7cdc3b306bbbe0c90c2bbe66a80c7c72ea751e6b62"}, + {file = "pydantic_core-2.21.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:21b97bb2fdf330c6fb03f43307671f0cb3051cbf89a58e1cd4c99a09c69c9341"}, + {file = "pydantic_core-2.21.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:986cad6e75c9d4e8f72d5085ee8109f75dc4d9d5095c994e00ce7f3787f7022b"}, + {file = "pydantic_core-2.21.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:400cbd6fdd92815eceac1812f8cc7501789da127fe35d7ff6d08d9de377a52b9"}, + {file = "pydantic_core-2.21.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:45fc6e4be497271834e3e263288a833b328669c27056df6af83ce379e61579d7"}, + {file = "pydantic_core-2.21.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f19f026a94202157c1b6db326cb09142c996adcd8e7f705b5c4f01815fef48a9"}, + {file = "pydantic_core-2.21.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:815e9cc5cf36522097556b9c968b529f528799bfe81a38d481ae8f5564b41d1b"}, + {file = "pydantic_core-2.21.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fda0c0e6db4ce5f568619390e7055ea77d4572261d1815d597095542d71f2b1e"}, + {file = "pydantic_core-2.21.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ba34c0b31e3829693310f83d3f7d917a9c8c6bccbf8ac1eb5f7759c52d368e36"}, + {file = "pydantic_core-2.21.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ad512defbcb20c7e9a30b166ddcc61583568a6e13904b0d769b78df14de8ce43"}, + {file = "pydantic_core-2.21.0-cp311-none-win32.whl", hash = "sha256:0a1e19114c93ced62b691a44721488af04080658410d01cd895cb2afc16abb5b"}, + {file = "pydantic_core-2.21.0-cp311-none-win_amd64.whl", hash = "sha256:c95d11d9167e8bb2cafdd12858e9c51e92edd30813976eff637e4ab4555d742e"}, + {file = "pydantic_core-2.21.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:86b6f0a53daadf0c5a19733489c7987d278962b92411214f56bf52eb757cc9d7"}, + {file = "pydantic_core-2.21.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c53d38dec60b0906a716f66f9ea70811a8b2ae9d6234d2108a57f8750b0c707f"}, + {file = "pydantic_core-2.21.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:639e0e7c9f5777b9b1c5f760d25cc615c40bef005af15c892324193fc18c8141"}, + {file = "pydantic_core-2.21.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2fe2e1cc87e8ddfc251e7f4100b30ca96700866b17d972ec842330cd10f9b379"}, + {file = "pydantic_core-2.21.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c5b839081226a4c4e3c96efe89fbb5004a9f1eebc039fcd4e26794cfe4412b5a"}, + {file = "pydantic_core-2.21.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e20b44a5dcb290bad3d02680d52a58c5b5938547d85bcb56b3412bfdb387a3a8"}, + {file = "pydantic_core-2.21.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5069840df8f808bca75956114844260481ea86e524364573d937e47c5013a982"}, + {file = "pydantic_core-2.21.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:130102233794bca08eaab7075711b637055e861c2ebb9e3c29ed117a3b035316"}, + {file = "pydantic_core-2.21.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:375008cd44acad0bbfa7e18819e8613bb638bcbad890c071d835c593ed0bd73f"}, + {file = "pydantic_core-2.21.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5bcebd8b7e972d36ebc6b50f1f1fd9ff43eef53e60312dfa3ba809f1e33ec40f"}, + {file = "pydantic_core-2.21.0-cp312-none-win32.whl", hash = "sha256:7cb413eb75374e88a4989bc17c30f6eda6707bfeaad2272900e3dc5c08e91519"}, + {file = "pydantic_core-2.21.0-cp312-none-win_amd64.whl", hash = "sha256:3ab9a69b1beb04c7d263af049acca39c749753507bf811a639278b7aaf68ad79"}, + {file = "pydantic_core-2.21.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:0bf9815c7d5535b7d8c62248fa1536335c8186b9daa08056c5cb753e47b4435c"}, + {file = "pydantic_core-2.21.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bf6b0cb6655970729ef3f35f54009cecfba6ba7cb8033bf3c56162b4bc418122"}, + {file = "pydantic_core-2.21.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30085b96b9168451663ea9872cbf94922c5045158d243c404917a2ca9a1abe32"}, + {file = "pydantic_core-2.21.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e168240f12b187a1a214bf4867f9bab1a91cea3142e1cf361b7dddb7d08cc409"}, + {file = "pydantic_core-2.21.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e960a00230f1fca4ed34f5230e4db467eccc68f0777c565d9c3ce9aa6593f3e5"}, + {file = "pydantic_core-2.21.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:006a8210cd7134a7ae328433cb84a1076badbf5731c7876f96962ef8fd61d42d"}, + {file = "pydantic_core-2.21.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b0c40b8092c4679956aabff88454d618113529e40253b2a7df0a431e61ea2d84"}, + {file = "pydantic_core-2.21.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:72e74856b503cb434479cf7d21bb3dc140ed2d97e2be2ac452ec483d275f413b"}, + {file = "pydantic_core-2.21.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:dd5de610e64e77062877ee58a12f505fd4e1b092e61b3631f1677c267c7c6a8c"}, + {file = "pydantic_core-2.21.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:f2e6a46a6c9abd4f480fbced953936889380dec40e0a9f8aba32f45e1baae5f1"}, + {file = "pydantic_core-2.21.0-cp313-none-win32.whl", hash = "sha256:7c792fcb776d412d3ce2d71577ad729d627500998963bce88298b6a87b241ed8"}, + {file = "pydantic_core-2.21.0-cp313-none-win_amd64.whl", hash = "sha256:28317f20cdef82a41cdaa0f152be692c49fe0c22cc4ea55d73c0bd4624fcce14"}, + {file = "pydantic_core-2.21.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:ce1796df2f4c0a8605d30cd8b2726589ee404b34d8ecef93453e3c4366bea821"}, + {file = "pydantic_core-2.21.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:1e2134bf92b5a59223dfef4b50ee19fb76935299df0ab8aa0c99055ce7ae0d36"}, + {file = "pydantic_core-2.21.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c0739fdbfcecb83fd8ef48863fdc82d108e647690d4948a88afa1dd307e175e"}, + {file = "pydantic_core-2.21.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8a430bac8c43eb8a3e279cecab067ef2afbba6f28a8a6a0cf419c89588757436"}, + {file = "pydantic_core-2.21.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6a72b8b6e5350d74d13deecffdc393e768941fc3b61e6973e9c0ea26c33b3969"}, + {file = "pydantic_core-2.21.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c4114ca818afd13787312374df8740f026eaa0230bc87f81153eb6a20c3f39ad"}, + {file = "pydantic_core-2.21.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07b5f813dd7c1520609ef764b3e9a80182456e4a003264eb473640f97afff985"}, + {file = "pydantic_core-2.21.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a403beaa2651dc55df42def4d364f08705f5373ca3d44bbfa5ba6160767eb8fb"}, + {file = "pydantic_core-2.21.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c95f17e63c5f811027bf768e027f247d49038c0ace817990417a0410894bfd67"}, + {file = "pydantic_core-2.21.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:23043d6944bd281f353896f7516edfaa8111e65bd80fd936dc1a8751dcc4e4cf"}, + {file = "pydantic_core-2.21.0-cp38-none-win32.whl", hash = "sha256:baefe94e313184f024f594ac35eabbc467c830b0fe7eb71c2fddc469414006e2"}, + {file = "pydantic_core-2.21.0-cp38-none-win_amd64.whl", hash = "sha256:c5a9cc3fd81cdd60ef203920794ccbe73630f82770e03e9446ee782454760235"}, + {file = "pydantic_core-2.21.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:4b68e752432f67403739bad3c94946d134ad7143840f54281d039bab21a1ca5e"}, + {file = "pydantic_core-2.21.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ab770f7506d579de7f51f15ce4994a53f3155347d51d87970f70038662ff70a9"}, + {file = "pydantic_core-2.21.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9038a1b8c1ad42cf2be95a6fb1e2e3b66730e23ad0f677f2e9e2e5f02afbad3"}, + {file = "pydantic_core-2.21.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e2e7e7d1a08fbddd7cc8cea3a9cd23fc772b7b955056e5a3575808a4acbc20fa"}, + {file = "pydantic_core-2.21.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fa78fbd6a49b4a7481d700645f08fefb789e739fa6a46a3fa6a5fbbb2a83985c"}, + {file = "pydantic_core-2.21.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:90e3a7291073098b61a8331e13907132c5a8f1ffc69a576fc05aae1ffb1849a3"}, + {file = "pydantic_core-2.21.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88fd993f5c19e5d63c9e441b9f3156d266fc16d02498abaf56a76761d8c74ec7"}, + {file = "pydantic_core-2.21.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:43e10ff6648ba9281c1389ee44953b8def12211afb3d3c169982df3dedcda79f"}, + {file = "pydantic_core-2.21.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:84f69f77893e691f4d2e77df0366494cf16bd5326ce5f045b654d7aef82eb1e7"}, + {file = "pydantic_core-2.21.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4ce1ead9e4b628272c51e5b869cc78d0523a03a1fee9fbba474f48e1a436e553"}, + {file = "pydantic_core-2.21.0-cp39-none-win32.whl", hash = "sha256:0a06a47227b09ef094901ba3c8e069121965701aae1e9c6aa19cacbbba0b23af"}, + {file = "pydantic_core-2.21.0-cp39-none-win_amd64.whl", hash = "sha256:e281ec1c9dd7379f92b6f1da2e902c7d6fcc99b58ca58cd8de520ab189a184f7"}, + {file = "pydantic_core-2.21.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:88cf788e5a4a70014f1ce916a245fb8ffa939421a4e407f6eca962735813fd54"}, + {file = "pydantic_core-2.21.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:6f9e0b7c870298d6533579b7132e68d8e2c47ef35e2f5c79160389dfd527b3ac"}, + {file = "pydantic_core-2.21.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1c622bfeab021f1c461ddb4097713d73122eec4bc6943b2800bb559df7f6fe1"}, + {file = "pydantic_core-2.21.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:356c73057d231f138d2638daa1dcc56e77e8d2e744fc7f04bfb5505389f08c7a"}, + {file = "pydantic_core-2.21.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:20a8d6e18e34ae34cfe26ce2c3cc866ee88b8623a4f1e93319501b3a68b57c44"}, + {file = "pydantic_core-2.21.0-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:97957c5484bdfe56b0a7ec8a623cd54f8872fb1f55090a2f52a3c065726d6bc6"}, + {file = "pydantic_core-2.21.0-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:ed1e082eecf51152fb9bdbbb14e574c72a78a592774617873522f6b3dee3e8ed"}, + {file = "pydantic_core-2.21.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:92e8b3bf64b210d51a5fc950be62dadecad5a8e329b34b8b2f690a505f6dafe3"}, + {file = "pydantic_core-2.21.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6826218c59be7d2c9c306d5b7fa829b4ad4b2d96cb984c91f8ec82b91f63dc63"}, + {file = "pydantic_core-2.21.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:ab3391fb685026e6928b4d51cd044403ecefa7e7421a0f14887eb4708c3da7bb"}, + {file = "pydantic_core-2.21.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b224bde36cafcc7f1d51e5c88cb784eb1a76f74701b5700dcc37dca66be745b"}, + {file = "pydantic_core-2.21.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b64bfc7b468cc524e9acfaf379333c1a4f771adf19d15ceae3b8f580ed9a0d4e"}, + {file = "pydantic_core-2.21.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:48991177fc0cf6cd9fd245433db167382c8c36bb18f64195532842ba5ba082fa"}, + {file = "pydantic_core-2.21.0-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:d9251ed0317455ccccd520600d4b6b07fd1486d53846bd82677f08a4999df949"}, + {file = "pydantic_core-2.21.0-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:4e6699cb02d3f063f6b35609830fc6d56aba1b4bcb6a82d604b5dd6b2156f87a"}, + {file = "pydantic_core-2.21.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:46be3c8c7e8346f2c02bf261b4dbff1d9e31001fb231ce9a1d52d7ef61d291fc"}, + {file = "pydantic_core-2.21.0.tar.gz", hash = "sha256:79c747f9916e5b6cb588dfd994d9ac15a93e43eb07467d9e6f24d892c176bbf5"}, +] + +[package.dependencies] +typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" + [[package]] name = "pygments" version = "2.18.0" @@ -3558,13 +3690,13 @@ dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments [[package]] name = "pytest-asyncio" -version = "0.23.7" +version = "0.23.8" description = "Pytest support for asyncio" optional = false python-versions = ">=3.8" files = [ - {file = "pytest_asyncio-0.23.7-py3-none-any.whl", hash = "sha256:009b48127fbe44518a547bddd25611551b0e43ccdbf1e67d12479f569832c20b"}, - {file = "pytest_asyncio-0.23.7.tar.gz", hash = "sha256:5f5c72948f4c49e7db4f29f2521d4031f1c27f86e57b046126654083d4770268"}, + {file = "pytest_asyncio-0.23.8-py3-none-any.whl", hash = "sha256:50265d892689a5faefb84df80819d1ecef566eb3549cf915dfb33569359d1ce2"}, + {file = "pytest_asyncio-0.23.8.tar.gz", hash = "sha256:759b10b33a6dc61cce40a8bd5205e302978bbbcc00e279a8b61d9a6a3c82e4d3"}, ] [package.dependencies] @@ -3667,159 +3799,182 @@ files = [ [[package]] name = "pyyaml" -version = "6.0.1" +version = "6.0.2" description = "YAML parser and emitter for Python" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, - {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, - {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, - {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, - {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, - {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, - {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, - {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, - {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, - {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, - {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, - {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, - {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, - {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, - {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, - {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, - {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, - {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, - {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, - {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, - {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, - {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, - {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, - {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, - {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, - {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, - {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, - {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, - {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, + {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, + {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"}, + {file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"}, + {file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"}, + {file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"}, + {file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"}, + {file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"}, + {file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652"}, + {file = "PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183"}, + {file = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"}, + {file = "PyYAML-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083"}, + {file = "PyYAML-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706"}, + {file = "PyYAML-6.0.2-cp38-cp38-win32.whl", hash = "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a"}, + {file = "PyYAML-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725"}, + {file = "PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631"}, + {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"}, + {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"}, ] [[package]] name = "pyzmq" -version = "26.0.3" +version = "26.1.0" description = "Python bindings for 0MQ" optional = false python-versions = ">=3.7" files = [ - {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"}, + {file = "pyzmq-26.1.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:263cf1e36862310bf5becfbc488e18d5d698941858860c5a8c079d1511b3b18e"}, + {file = "pyzmq-26.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d5c8b17f6e8f29138678834cf8518049e740385eb2dbf736e8f07fc6587ec682"}, + {file = "pyzmq-26.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:75a95c2358fcfdef3374cb8baf57f1064d73246d55e41683aaffb6cfe6862917"}, + {file = "pyzmq-26.1.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f99de52b8fbdb2a8f5301ae5fc0f9e6b3ba30d1d5fc0421956967edcc6914242"}, + {file = "pyzmq-26.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bcbfbab4e1895d58ab7da1b5ce9a327764f0366911ba5b95406c9104bceacb0"}, + {file = "pyzmq-26.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:77ce6a332c7e362cb59b63f5edf730e83590d0ab4e59c2aa5bd79419a42e3449"}, + {file = "pyzmq-26.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ba0a31d00e8616149a5ab440d058ec2da621e05d744914774c4dde6837e1f545"}, + {file = "pyzmq-26.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:8b88641384e84a258b740801cd4dbc45c75f148ee674bec3149999adda4a8598"}, + {file = "pyzmq-26.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2fa76ebcebe555cce90f16246edc3ad83ab65bb7b3d4ce408cf6bc67740c4f88"}, + {file = "pyzmq-26.1.0-cp310-cp310-win32.whl", hash = "sha256:fbf558551cf415586e91160d69ca6416f3fce0b86175b64e4293644a7416b81b"}, + {file = "pyzmq-26.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:a7b8aab50e5a288c9724d260feae25eda69582be84e97c012c80e1a5e7e03fb2"}, + {file = "pyzmq-26.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:08f74904cb066e1178c1ec706dfdb5c6c680cd7a8ed9efebeac923d84c1f13b1"}, + {file = "pyzmq-26.1.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:46d6800b45015f96b9d92ece229d92f2aef137d82906577d55fadeb9cf5fcb71"}, + {file = "pyzmq-26.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5bc2431167adc50ba42ea3e5e5f5cd70d93e18ab7b2f95e724dd8e1bd2c38120"}, + {file = "pyzmq-26.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b3bb34bebaa1b78e562931a1687ff663d298013f78f972a534f36c523311a84d"}, + {file = "pyzmq-26.1.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd3f6329340cef1c7ba9611bd038f2d523cea79f09f9c8f6b0553caba59ec562"}, + {file = "pyzmq-26.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:471880c4c14e5a056a96cd224f5e71211997d40b4bf5e9fdded55dafab1f98f2"}, + {file = "pyzmq-26.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:ce6f2b66799971cbae5d6547acefa7231458289e0ad481d0be0740535da38d8b"}, + {file = "pyzmq-26.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0a1f6ea5b1d6cdbb8cfa0536f0d470f12b4b41ad83625012e575f0e3ecfe97f0"}, + {file = "pyzmq-26.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:b45e6445ac95ecb7d728604bae6538f40ccf4449b132b5428c09918523abc96d"}, + {file = "pyzmq-26.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:94c4262626424683feea0f3c34951d39d49d354722db2745c42aa6bb50ecd93b"}, + {file = "pyzmq-26.1.0-cp311-cp311-win32.whl", hash = "sha256:a0f0ab9df66eb34d58205913f4540e2ad17a175b05d81b0b7197bc57d000e829"}, + {file = "pyzmq-26.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:8efb782f5a6c450589dbab4cb0f66f3a9026286333fe8f3a084399149af52f29"}, + {file = "pyzmq-26.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:f133d05aaf623519f45e16ab77526e1e70d4e1308e084c2fb4cedb1a0c764bbb"}, + {file = "pyzmq-26.1.0-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:3d3146b1c3dcc8a1539e7cc094700b2be1e605a76f7c8f0979b6d3bde5ad4072"}, + {file = "pyzmq-26.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d9270fbf038bf34ffca4855bcda6e082e2c7f906b9eb8d9a8ce82691166060f7"}, + {file = "pyzmq-26.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:995301f6740a421afc863a713fe62c0aaf564708d4aa057dfdf0f0f56525294b"}, + {file = "pyzmq-26.1.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7eca8b89e56fb8c6c26dd3e09bd41b24789022acf1cf13358e96f1cafd8cae3"}, + {file = "pyzmq-26.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d4feb2e83dfe9ace6374a847e98ee9d1246ebadcc0cb765482e272c34e5820"}, + {file = "pyzmq-26.1.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:d4fafc2eb5d83f4647331267808c7e0c5722c25a729a614dc2b90479cafa78bd"}, + {file = "pyzmq-26.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:58c33dc0e185dd97a9ac0288b3188d1be12b756eda67490e6ed6a75cf9491d79"}, + {file = "pyzmq-26.1.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:68a0a1d83d33d8367ddddb3e6bb4afbb0f92bd1dac2c72cd5e5ddc86bdafd3eb"}, + {file = "pyzmq-26.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2ae7c57e22ad881af78075e0cea10a4c778e67234adc65c404391b417a4dda83"}, + {file = "pyzmq-26.1.0-cp312-cp312-win32.whl", hash = "sha256:347e84fc88cc4cb646597f6d3a7ea0998f887ee8dc31c08587e9c3fd7b5ccef3"}, + {file = "pyzmq-26.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:9f136a6e964830230912f75b5a116a21fe8e34128dcfd82285aa0ef07cb2c7bd"}, + {file = "pyzmq-26.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:a4b7a989c8f5a72ab1b2bbfa58105578753ae77b71ba33e7383a31ff75a504c4"}, + {file = "pyzmq-26.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d416f2088ac8f12daacffbc2e8918ef4d6be8568e9d7155c83b7cebed49d2322"}, + {file = "pyzmq-26.1.0-cp313-cp313-macosx_10_15_universal2.whl", hash = "sha256:ecb6c88d7946166d783a635efc89f9a1ff11c33d680a20df9657b6902a1d133b"}, + {file = "pyzmq-26.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:471312a7375571857a089342beccc1a63584315188560c7c0da7e0a23afd8a5c"}, + {file = "pyzmq-26.1.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e6cea102ffa16b737d11932c426f1dc14b5938cf7bc12e17269559c458ac334"}, + {file = "pyzmq-26.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec7248673ffc7104b54e4957cee38b2f3075a13442348c8d651777bf41aa45ee"}, + {file = "pyzmq-26.1.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:0614aed6f87d550b5cecb03d795f4ddbb1544b78d02a4bd5eecf644ec98a39f6"}, + {file = "pyzmq-26.1.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:e8746ce968be22a8a1801bf4a23e565f9687088580c3ed07af5846580dd97f76"}, + {file = "pyzmq-26.1.0-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:7688653574392d2eaeef75ddcd0b2de5b232d8730af29af56c5adf1df9ef8d6f"}, + {file = "pyzmq-26.1.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:8d4dac7d97f15c653a5fedcafa82626bd6cee1450ccdaf84ffed7ea14f2b07a4"}, + {file = "pyzmq-26.1.0-cp313-cp313-win32.whl", hash = "sha256:ccb42ca0a4a46232d716779421bbebbcad23c08d37c980f02cc3a6bd115ad277"}, + {file = "pyzmq-26.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:e1e5d0a25aea8b691a00d6b54b28ac514c8cc0d8646d05f7ca6cb64b97358250"}, + {file = "pyzmq-26.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:fc82269d24860cfa859b676d18850cbb8e312dcd7eada09e7d5b007e2f3d9eb1"}, + {file = "pyzmq-26.1.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:416ac51cabd54f587995c2b05421324700b22e98d3d0aa2cfaec985524d16f1d"}, + {file = "pyzmq-26.1.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:ff832cce719edd11266ca32bc74a626b814fff236824aa1aeaad399b69fe6eae"}, + {file = "pyzmq-26.1.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:393daac1bcf81b2a23e696b7b638eedc965e9e3d2112961a072b6cd8179ad2eb"}, + {file = "pyzmq-26.1.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9869fa984c8670c8ab899a719eb7b516860a29bc26300a84d24d8c1b71eae3ec"}, + {file = "pyzmq-26.1.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b3b8e36fd4c32c0825b4461372949ecd1585d326802b1321f8b6dc1d7e9318c"}, + {file = "pyzmq-26.1.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:3ee647d84b83509b7271457bb428cc347037f437ead4b0b6e43b5eba35fec0aa"}, + {file = "pyzmq-26.1.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:45cb1a70eb00405ce3893041099655265fabcd9c4e1e50c330026e82257892c1"}, + {file = "pyzmq-26.1.0-cp313-cp313t-musllinux_1_1_i686.whl", hash = "sha256:5cca7b4adb86d7470e0fc96037771981d740f0b4cb99776d5cb59cd0e6684a73"}, + {file = "pyzmq-26.1.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:91d1a20bdaf3b25f3173ff44e54b1cfbc05f94c9e8133314eb2962a89e05d6e3"}, + {file = "pyzmq-26.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c0665d85535192098420428c779361b8823d3d7ec4848c6af3abb93bc5c915bf"}, + {file = "pyzmq-26.1.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:96d7c1d35ee4a495df56c50c83df7af1c9688cce2e9e0edffdbf50889c167595"}, + {file = "pyzmq-26.1.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b281b5ff5fcc9dcbfe941ac5c7fcd4b6c065adad12d850f95c9d6f23c2652384"}, + {file = "pyzmq-26.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5384c527a9a004445c5074f1e20db83086c8ff1682a626676229aafd9cf9f7d1"}, + {file = "pyzmq-26.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:754c99a9840839375ee251b38ac5964c0f369306eddb56804a073b6efdc0cd88"}, + {file = "pyzmq-26.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:9bdfcb74b469b592972ed881bad57d22e2c0acc89f5e8c146782d0d90fb9f4bf"}, + {file = "pyzmq-26.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:bd13f0231f4788db619347b971ca5f319c5b7ebee151afc7c14632068c6261d3"}, + {file = "pyzmq-26.1.0-cp37-cp37m-win32.whl", hash = "sha256:c5668dac86a869349828db5fc928ee3f58d450dce2c85607067d581f745e4fb1"}, + {file = "pyzmq-26.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:ad875277844cfaeca7fe299ddf8c8d8bfe271c3dc1caf14d454faa5cdbf2fa7a"}, + {file = "pyzmq-26.1.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:65c6e03cc0222eaf6aad57ff4ecc0a070451e23232bb48db4322cc45602cede0"}, + {file = "pyzmq-26.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:038ae4ffb63e3991f386e7fda85a9baab7d6617fe85b74a8f9cab190d73adb2b"}, + {file = "pyzmq-26.1.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:bdeb2c61611293f64ac1073f4bf6723b67d291905308a7de9bb2ca87464e3273"}, + {file = "pyzmq-26.1.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:61dfa5ee9d7df297c859ac82b1226d8fefaf9c5113dc25c2c00ecad6feeeb04f"}, + {file = "pyzmq-26.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3292d384537b9918010769b82ab3e79fca8b23d74f56fc69a679106a3e2c2cf"}, + {file = "pyzmq-26.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f9499c70c19ff0fbe1007043acb5ad15c1dec7d8e84ab429bca8c87138e8f85c"}, + {file = "pyzmq-26.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:d3dd5523ed258ad58fed7e364c92a9360d1af8a9371e0822bd0146bdf017ef4c"}, + {file = "pyzmq-26.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:baba2fd199b098c5544ef2536b2499d2e2155392973ad32687024bd8572a7d1c"}, + {file = "pyzmq-26.1.0-cp38-cp38-win32.whl", hash = "sha256:ddbb2b386128d8eca92bd9ca74e80f73fe263bcca7aa419f5b4cbc1661e19741"}, + {file = "pyzmq-26.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:79e45a4096ec8388cdeb04a9fa5e9371583bcb826964d55b8b66cbffe7b33c86"}, + {file = "pyzmq-26.1.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:add52c78a12196bc0fda2de087ba6c876ea677cbda2e3eba63546b26e8bf177b"}, + {file = "pyzmq-26.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:98c03bd7f3339ff47de7ea9ac94a2b34580a8d4df69b50128bb6669e1191a895"}, + {file = "pyzmq-26.1.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:dcc37d9d708784726fafc9c5e1232de655a009dbf97946f117aefa38d5985a0f"}, + {file = "pyzmq-26.1.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5a6ed52f0b9bf8dcc64cc82cce0607a3dfed1dbb7e8c6f282adfccc7be9781de"}, + {file = "pyzmq-26.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:451e16ae8bea3d95649317b463c9f95cd9022641ec884e3d63fc67841ae86dfe"}, + {file = "pyzmq-26.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:906e532c814e1d579138177a00ae835cd6becbf104d45ed9093a3aaf658f6a6a"}, + {file = "pyzmq-26.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:05bacc4f94af468cc82808ae3293390278d5f3375bb20fef21e2034bb9a505b6"}, + {file = "pyzmq-26.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:57bb2acba798dc3740e913ffadd56b1fcef96f111e66f09e2a8db3050f1f12c8"}, + {file = "pyzmq-26.1.0-cp39-cp39-win32.whl", hash = "sha256:f774841bb0e8588505002962c02da420bcfb4c5056e87a139c6e45e745c0e2e2"}, + {file = "pyzmq-26.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:359c533bedc62c56415a1f5fcfd8279bc93453afdb0803307375ecf81c962402"}, + {file = "pyzmq-26.1.0-cp39-cp39-win_arm64.whl", hash = "sha256:7907419d150b19962138ecec81a17d4892ea440c184949dc29b358bc730caf69"}, + {file = "pyzmq-26.1.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b24079a14c9596846bf7516fe75d1e2188d4a528364494859106a33d8b48be38"}, + {file = "pyzmq-26.1.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59d0acd2976e1064f1b398a00e2c3e77ed0a157529779e23087d4c2fb8aaa416"}, + {file = "pyzmq-26.1.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:911c43a4117915203c4cc8755e0f888e16c4676a82f61caee2f21b0c00e5b894"}, + {file = "pyzmq-26.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b10163e586cc609f5f85c9b233195554d77b1e9a0801388907441aaeb22841c5"}, + {file = "pyzmq-26.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:28a8b2abb76042f5fd7bd720f7fea48c0fd3e82e9de0a1bf2c0de3812ce44a42"}, + {file = "pyzmq-26.1.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:bef24d3e4ae2c985034439f449e3f9e06bf579974ce0e53d8a507a1577d5b2ab"}, + {file = "pyzmq-26.1.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2cd0f4d314f4a2518e8970b6f299ae18cff7c44d4a1fc06fc713f791c3a9e3ea"}, + {file = "pyzmq-26.1.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fa25a620eed2a419acc2cf10135b995f8f0ce78ad00534d729aa761e4adcef8a"}, + {file = "pyzmq-26.1.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef3b048822dca6d231d8a8ba21069844ae38f5d83889b9b690bf17d2acc7d099"}, + {file = "pyzmq-26.1.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:9a6847c92d9851b59b9f33f968c68e9e441f9a0f8fc972c5580c5cd7cbc6ee24"}, + {file = "pyzmq-26.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c9b9305004d7e4e6a824f4f19b6d8f32b3578aad6f19fc1122aaf320cbe3dc83"}, + {file = "pyzmq-26.1.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:63c1d3a65acb2f9c92dce03c4e1758cc552f1ae5c78d79a44e3bb88d2fa71f3a"}, + {file = "pyzmq-26.1.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d36b8fffe8b248a1b961c86fbdfa0129dfce878731d169ede7fa2631447331be"}, + {file = "pyzmq-26.1.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67976d12ebfd61a3bc7d77b71a9589b4d61d0422282596cf58c62c3866916544"}, + {file = "pyzmq-26.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:998444debc8816b5d8d15f966e42751032d0f4c55300c48cc337f2b3e4f17d03"}, + {file = "pyzmq-26.1.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:e5c88b2f13bcf55fee78ea83567b9fe079ba1a4bef8b35c376043440040f7edb"}, + {file = "pyzmq-26.1.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d906d43e1592be4b25a587b7d96527cb67277542a5611e8ea9e996182fae410"}, + {file = "pyzmq-26.1.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:80b0c9942430d731c786545da6be96d824a41a51742e3e374fedd9018ea43106"}, + {file = "pyzmq-26.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:314d11564c00b77f6224d12eb3ddebe926c301e86b648a1835c5b28176c83eab"}, + {file = "pyzmq-26.1.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:093a1a3cae2496233f14b57f4b485da01b4ff764582c854c0f42c6dd2be37f3d"}, + {file = "pyzmq-26.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:3c397b1b450f749a7e974d74c06d69bd22dd362142f370ef2bd32a684d6b480c"}, + {file = "pyzmq-26.1.0.tar.gz", hash = "sha256:6c5aeea71f018ebd3b9115c7cb13863dd850e98ca6b9258509de1246461a7e7f"}, ] [package.dependencies] @@ -3827,20 +3982,20 @@ cffi = {version = "*", markers = "implementation_name == \"pypy\""} [[package]] name = "redis" -version = "5.0.7" +version = "5.0.8" description = "Python client for Redis database and key-value store" optional = false python-versions = ">=3.7" files = [ - {file = "redis-5.0.7-py3-none-any.whl", hash = "sha256:0e479e24da960c690be5d9b96d21f7b918a98c0cf49af3b6fafaa0753f93a0db"}, - {file = "redis-5.0.7.tar.gz", hash = "sha256:8f611490b93c8109b50adc317b31bfd84fff31def3475b92e7e80bf39f48175b"}, + {file = "redis-5.0.8-py3-none-any.whl", hash = "sha256:56134ee08ea909106090934adc36f65c9bcbbaecea5b21ba704ba6fb561f8eb4"}, + {file = "redis-5.0.8.tar.gz", hash = "sha256:0c5b10d387568dfe0698c6fad6615750c24170e548ca2deac10c649d463e9870"}, ] [package.dependencies] async-timeout = {version = ">=4.0.3", markers = "python_full_version < \"3.11.3\""} [package.extras] -hiredis = ["hiredis (>=1.0.0)"] +hiredis = ["hiredis (>1.0.0)"] ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==20.0.1)", "requests (>=2.26.0)"] [[package]] @@ -3882,90 +4037,90 @@ rpds-py = ">=0.7.0" [[package]] name = "regex" -version = "2024.5.15" +version = "2024.7.24" description = "Alternative regular expression module, to replace re." optional = false python-versions = ">=3.8" files = [ - {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"}, + {file = "regex-2024.7.24-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:228b0d3f567fafa0633aee87f08b9276c7062da9616931382993c03808bb68ce"}, + {file = "regex-2024.7.24-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3426de3b91d1bc73249042742f45c2148803c111d1175b283270177fdf669024"}, + {file = "regex-2024.7.24-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f273674b445bcb6e4409bf8d1be67bc4b58e8b46fd0d560055d515b8830063cd"}, + {file = "regex-2024.7.24-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23acc72f0f4e1a9e6e9843d6328177ae3074b4182167e34119ec7233dfeccf53"}, + {file = "regex-2024.7.24-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:65fd3d2e228cae024c411c5ccdffae4c315271eee4a8b839291f84f796b34eca"}, + {file = "regex-2024.7.24-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c414cbda77dbf13c3bc88b073a1a9f375c7b0cb5e115e15d4b73ec3a2fbc6f59"}, + {file = "regex-2024.7.24-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf7a89eef64b5455835f5ed30254ec19bf41f7541cd94f266ab7cbd463f00c41"}, + {file = "regex-2024.7.24-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:19c65b00d42804e3fbea9708f0937d157e53429a39b7c61253ff15670ff62cb5"}, + {file = "regex-2024.7.24-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7a5486ca56c8869070a966321d5ab416ff0f83f30e0e2da1ab48815c8d165d46"}, + {file = "regex-2024.7.24-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6f51f9556785e5a203713f5efd9c085b4a45aecd2a42573e2b5041881b588d1f"}, + {file = "regex-2024.7.24-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:a4997716674d36a82eab3e86f8fa77080a5d8d96a389a61ea1d0e3a94a582cf7"}, + {file = "regex-2024.7.24-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:c0abb5e4e8ce71a61d9446040c1e86d4e6d23f9097275c5bd49ed978755ff0fe"}, + {file = "regex-2024.7.24-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:18300a1d78cf1290fa583cd8b7cde26ecb73e9f5916690cf9d42de569c89b1ce"}, + {file = "regex-2024.7.24-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:416c0e4f56308f34cdb18c3f59849479dde5b19febdcd6e6fa4d04b6c31c9faa"}, + {file = "regex-2024.7.24-cp310-cp310-win32.whl", hash = "sha256:fb168b5924bef397b5ba13aabd8cf5df7d3d93f10218d7b925e360d436863f66"}, + {file = "regex-2024.7.24-cp310-cp310-win_amd64.whl", hash = "sha256:6b9fc7e9cc983e75e2518496ba1afc524227c163e43d706688a6bb9eca41617e"}, + {file = "regex-2024.7.24-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:382281306e3adaaa7b8b9ebbb3ffb43358a7bbf585fa93821300a418bb975281"}, + {file = "regex-2024.7.24-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4fdd1384619f406ad9037fe6b6eaa3de2749e2e12084abc80169e8e075377d3b"}, + {file = "regex-2024.7.24-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3d974d24edb231446f708c455fd08f94c41c1ff4f04bcf06e5f36df5ef50b95a"}, + {file = "regex-2024.7.24-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a2ec4419a3fe6cf8a4795752596dfe0adb4aea40d3683a132bae9c30b81e8d73"}, + {file = "regex-2024.7.24-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb563dd3aea54c797adf513eeec819c4213d7dbfc311874eb4fd28d10f2ff0f2"}, + {file = "regex-2024.7.24-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:45104baae8b9f67569f0f1dca5e1f1ed77a54ae1cd8b0b07aba89272710db61e"}, + {file = "regex-2024.7.24-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:994448ee01864501912abf2bad9203bffc34158e80fe8bfb5b031f4f8e16da51"}, + {file = "regex-2024.7.24-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3fac296f99283ac232d8125be932c5cd7644084a30748fda013028c815ba3364"}, + {file = "regex-2024.7.24-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7e37e809b9303ec3a179085415cb5f418ecf65ec98cdfe34f6a078b46ef823ee"}, + {file = "regex-2024.7.24-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:01b689e887f612610c869421241e075c02f2e3d1ae93a037cb14f88ab6a8934c"}, + {file = "regex-2024.7.24-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f6442f0f0ff81775eaa5b05af8a0ffa1dda36e9cf6ec1e0d3d245e8564b684ce"}, + {file = "regex-2024.7.24-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:871e3ab2838fbcb4e0865a6e01233975df3a15e6fce93b6f99d75cacbd9862d1"}, + {file = "regex-2024.7.24-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c918b7a1e26b4ab40409820ddccc5d49871a82329640f5005f73572d5eaa9b5e"}, + {file = "regex-2024.7.24-cp311-cp311-win32.whl", hash = "sha256:2dfbb8baf8ba2c2b9aa2807f44ed272f0913eeeba002478c4577b8d29cde215c"}, + {file = "regex-2024.7.24-cp311-cp311-win_amd64.whl", hash = "sha256:538d30cd96ed7d1416d3956f94d54e426a8daf7c14527f6e0d6d425fcb4cca52"}, + {file = "regex-2024.7.24-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:fe4ebef608553aff8deb845c7f4f1d0740ff76fa672c011cc0bacb2a00fbde86"}, + {file = "regex-2024.7.24-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:74007a5b25b7a678459f06559504f1eec2f0f17bca218c9d56f6a0a12bfffdad"}, + {file = "regex-2024.7.24-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7df9ea48641da022c2a3c9c641650cd09f0cd15e8908bf931ad538f5ca7919c9"}, + {file = "regex-2024.7.24-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a1141a1dcc32904c47f6846b040275c6e5de0bf73f17d7a409035d55b76f289"}, + {file = "regex-2024.7.24-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80c811cfcb5c331237d9bad3bea2c391114588cf4131707e84d9493064d267f9"}, + {file = "regex-2024.7.24-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7214477bf9bd195894cf24005b1e7b496f46833337b5dedb7b2a6e33f66d962c"}, + {file = "regex-2024.7.24-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d55588cba7553f0b6ec33130bc3e114b355570b45785cebdc9daed8c637dd440"}, + {file = "regex-2024.7.24-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:558a57cfc32adcf19d3f791f62b5ff564922942e389e3cfdb538a23d65a6b610"}, + {file = "regex-2024.7.24-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a512eed9dfd4117110b1881ba9a59b31433caed0c4101b361f768e7bcbaf93c5"}, + {file = "regex-2024.7.24-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:86b17ba823ea76256b1885652e3a141a99a5c4422f4a869189db328321b73799"}, + {file = "regex-2024.7.24-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5eefee9bfe23f6df09ffb6dfb23809f4d74a78acef004aa904dc7c88b9944b05"}, + {file = "regex-2024.7.24-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:731fcd76bbdbf225e2eb85b7c38da9633ad3073822f5ab32379381e8c3c12e94"}, + {file = "regex-2024.7.24-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:eaef80eac3b4cfbdd6de53c6e108b4c534c21ae055d1dbea2de6b3b8ff3def38"}, + {file = "regex-2024.7.24-cp312-cp312-win32.whl", hash = "sha256:185e029368d6f89f36e526764cf12bf8d6f0e3a2a7737da625a76f594bdfcbfc"}, + {file = "regex-2024.7.24-cp312-cp312-win_amd64.whl", hash = "sha256:2f1baff13cc2521bea83ab2528e7a80cbe0ebb2c6f0bfad15be7da3aed443908"}, + {file = "regex-2024.7.24-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:66b4c0731a5c81921e938dcf1a88e978264e26e6ac4ec96a4d21ae0354581ae0"}, + {file = "regex-2024.7.24-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:88ecc3afd7e776967fa16c80f974cb79399ee8dc6c96423321d6f7d4b881c92b"}, + {file = "regex-2024.7.24-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:64bd50cf16bcc54b274e20235bf8edbb64184a30e1e53873ff8d444e7ac656b2"}, + {file = "regex-2024.7.24-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb462f0e346fcf41a901a126b50f8781e9a474d3927930f3490f38a6e73b6950"}, + {file = "regex-2024.7.24-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a82465ebbc9b1c5c50738536fdfa7cab639a261a99b469c9d4c7dcbb2b3f1e57"}, + {file = "regex-2024.7.24-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:68a8f8c046c6466ac61a36b65bb2395c74451df2ffb8458492ef49900efed293"}, + {file = "regex-2024.7.24-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dac8e84fff5d27420f3c1e879ce9929108e873667ec87e0c8eeb413a5311adfe"}, + {file = "regex-2024.7.24-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba2537ef2163db9e6ccdbeb6f6424282ae4dea43177402152c67ef869cf3978b"}, + {file = "regex-2024.7.24-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:43affe33137fcd679bdae93fb25924979517e011f9dea99163f80b82eadc7e53"}, + {file = "regex-2024.7.24-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:c9bb87fdf2ab2370f21e4d5636e5317775e5d51ff32ebff2cf389f71b9b13750"}, + {file = "regex-2024.7.24-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:945352286a541406f99b2655c973852da7911b3f4264e010218bbc1cc73168f2"}, + {file = "regex-2024.7.24-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:8bc593dcce679206b60a538c302d03c29b18e3d862609317cb560e18b66d10cf"}, + {file = "regex-2024.7.24-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:3f3b6ca8eae6d6c75a6cff525c8530c60e909a71a15e1b731723233331de4169"}, + {file = "regex-2024.7.24-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c51edc3541e11fbe83f0c4d9412ef6c79f664a3745fab261457e84465ec9d5a8"}, + {file = "regex-2024.7.24-cp38-cp38-win32.whl", hash = "sha256:d0a07763776188b4db4c9c7fb1b8c494049f84659bb387b71c73bbc07f189e96"}, + {file = "regex-2024.7.24-cp38-cp38-win_amd64.whl", hash = "sha256:8fd5afd101dcf86a270d254364e0e8dddedebe6bd1ab9d5f732f274fa00499a5"}, + {file = "regex-2024.7.24-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0ffe3f9d430cd37d8fa5632ff6fb36d5b24818c5c986893063b4e5bdb84cdf24"}, + {file = "regex-2024.7.24-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:25419b70ba00a16abc90ee5fce061228206173231f004437730b67ac77323f0d"}, + {file = "regex-2024.7.24-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:33e2614a7ce627f0cdf2ad104797d1f68342d967de3695678c0cb84f530709f8"}, + {file = "regex-2024.7.24-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d33a0021893ede5969876052796165bab6006559ab845fd7b515a30abdd990dc"}, + {file = "regex-2024.7.24-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:04ce29e2c5fedf296b1a1b0acc1724ba93a36fb14031f3abfb7abda2806c1535"}, + {file = "regex-2024.7.24-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b16582783f44fbca6fcf46f61347340c787d7530d88b4d590a397a47583f31dd"}, + {file = "regex-2024.7.24-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:836d3cc225b3e8a943d0b02633fb2f28a66e281290302a79df0e1eaa984ff7c1"}, + {file = "regex-2024.7.24-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:438d9f0f4bc64e8dea78274caa5af971ceff0f8771e1a2333620969936ba10be"}, + {file = "regex-2024.7.24-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:973335b1624859cb0e52f96062a28aa18f3a5fc77a96e4a3d6d76e29811a0e6e"}, + {file = "regex-2024.7.24-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:c5e69fd3eb0b409432b537fe3c6f44ac089c458ab6b78dcec14478422879ec5f"}, + {file = "regex-2024.7.24-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:fbf8c2f00904eaf63ff37718eb13acf8e178cb940520e47b2f05027f5bb34ce3"}, + {file = "regex-2024.7.24-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ae2757ace61bc4061b69af19e4689fa4416e1a04840f33b441034202b5cd02d4"}, + {file = "regex-2024.7.24-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:44fc61b99035fd9b3b9453f1713234e5a7c92a04f3577252b45feefe1b327759"}, + {file = "regex-2024.7.24-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:84c312cdf839e8b579f504afcd7b65f35d60b6285d892b19adea16355e8343c9"}, + {file = "regex-2024.7.24-cp39-cp39-win32.whl", hash = "sha256:ca5b2028c2f7af4e13fb9fc29b28d0ce767c38c7facdf64f6c2cd040413055f1"}, + {file = "regex-2024.7.24-cp39-cp39-win_amd64.whl", hash = "sha256:7c479f5ae937ec9985ecaf42e2e10631551d909f203e31308c12d703922742f9"}, + {file = "regex-2024.7.24.tar.gz", hash = "sha256:9cfd009eed1a46b27c14039ad5bbc5e71b6367c5b2e6d5f5da0ea91600817506"}, ] [[package]] @@ -4009,110 +4164,114 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "rpds-py" -version = "0.19.0" +version = "0.20.0" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false python-versions = ">=3.8" files = [ - {file = "rpds_py-0.19.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:fb37bd599f031f1a6fb9e58ec62864ccf3ad549cf14bac527dbfa97123edcca4"}, - {file = "rpds_py-0.19.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3384d278df99ec2c6acf701d067147320b864ef6727405d6470838476e44d9e8"}, - {file = "rpds_py-0.19.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e54548e0be3ac117595408fd4ca0ac9278fde89829b0b518be92863b17ff67a2"}, - {file = "rpds_py-0.19.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8eb488ef928cdbc05a27245e52de73c0d7c72a34240ef4d9893fdf65a8c1a955"}, - {file = "rpds_py-0.19.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a5da93debdfe27b2bfc69eefb592e1831d957b9535e0943a0ee8b97996de21b5"}, - {file = "rpds_py-0.19.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:79e205c70afddd41f6ee79a8656aec738492a550247a7af697d5bd1aee14f766"}, - {file = "rpds_py-0.19.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:959179efb3e4a27610e8d54d667c02a9feaa86bbabaf63efa7faa4dfa780d4f1"}, - {file = "rpds_py-0.19.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a6e605bb9edcf010f54f8b6a590dd23a4b40a8cb141255eec2a03db249bc915b"}, - {file = "rpds_py-0.19.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:9133d75dc119a61d1a0ded38fb9ba40a00ef41697cc07adb6ae098c875195a3f"}, - {file = "rpds_py-0.19.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:dd36b712d35e757e28bf2f40a71e8f8a2d43c8b026d881aa0c617b450d6865c9"}, - {file = "rpds_py-0.19.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:354f3a91718489912f2e0fc331c24eaaf6a4565c080e00fbedb6015857c00582"}, - {file = "rpds_py-0.19.0-cp310-none-win32.whl", hash = "sha256:ebcbf356bf5c51afc3290e491d3722b26aaf5b6af3c1c7f6a1b757828a46e336"}, - {file = "rpds_py-0.19.0-cp310-none-win_amd64.whl", hash = "sha256:75a6076289b2df6c8ecb9d13ff79ae0cad1d5fb40af377a5021016d58cd691ec"}, - {file = "rpds_py-0.19.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:6d45080095e585f8c5097897313def60caa2046da202cdb17a01f147fb263b81"}, - {file = "rpds_py-0.19.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c5c9581019c96f865483d031691a5ff1cc455feb4d84fc6920a5ffc48a794d8a"}, - {file = "rpds_py-0.19.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1540d807364c84516417115c38f0119dfec5ea5c0dd9a25332dea60b1d26fc4d"}, - {file = "rpds_py-0.19.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9e65489222b410f79711dc3d2d5003d2757e30874096b2008d50329ea4d0f88c"}, - {file = "rpds_py-0.19.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9da6f400eeb8c36f72ef6646ea530d6d175a4f77ff2ed8dfd6352842274c1d8b"}, - {file = "rpds_py-0.19.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:37f46bb11858717e0efa7893c0f7055c43b44c103e40e69442db5061cb26ed34"}, - {file = "rpds_py-0.19.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:071d4adc734de562bd11d43bd134330fb6249769b2f66b9310dab7460f4bf714"}, - {file = "rpds_py-0.19.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9625367c8955e4319049113ea4f8fee0c6c1145192d57946c6ffcd8fe8bf48dd"}, - {file = "rpds_py-0.19.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e19509145275d46bc4d1e16af0b57a12d227c8253655a46bbd5ec317e941279d"}, - {file = "rpds_py-0.19.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4d438e4c020d8c39961deaf58f6913b1bf8832d9b6f62ec35bd93e97807e9cbc"}, - {file = "rpds_py-0.19.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:90bf55d9d139e5d127193170f38c584ed3c79e16638890d2e36f23aa1630b952"}, - {file = "rpds_py-0.19.0-cp311-none-win32.whl", hash = "sha256:8d6ad132b1bc13d05ffe5b85e7a01a3998bf3a6302ba594b28d61b8c2cf13aaf"}, - {file = "rpds_py-0.19.0-cp311-none-win_amd64.whl", hash = "sha256:7ec72df7354e6b7f6eb2a17fa6901350018c3a9ad78e48d7b2b54d0412539a67"}, - {file = "rpds_py-0.19.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:5095a7c838a8647c32aa37c3a460d2c48debff7fc26e1136aee60100a8cd8f68"}, - {file = "rpds_py-0.19.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6f2f78ef14077e08856e788fa482107aa602636c16c25bdf59c22ea525a785e9"}, - {file = "rpds_py-0.19.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7cc6cb44f8636fbf4a934ca72f3e786ba3c9f9ba4f4d74611e7da80684e48d2"}, - {file = "rpds_py-0.19.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cf902878b4af334a09de7a45badbff0389e7cf8dc2e4dcf5f07125d0b7c2656d"}, - {file = "rpds_py-0.19.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:688aa6b8aa724db1596514751ffb767766e02e5c4a87486ab36b8e1ebc1aedac"}, - {file = "rpds_py-0.19.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57dbc9167d48e355e2569346b5aa4077f29bf86389c924df25c0a8b9124461fb"}, - {file = "rpds_py-0.19.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b4cf5a9497874822341c2ebe0d5850fed392034caadc0bad134ab6822c0925b"}, - {file = "rpds_py-0.19.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8a790d235b9d39c70a466200d506bb33a98e2ee374a9b4eec7a8ac64c2c261fa"}, - {file = "rpds_py-0.19.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1d16089dfa58719c98a1c06f2daceba6d8e3fb9b5d7931af4a990a3c486241cb"}, - {file = "rpds_py-0.19.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:bc9128e74fe94650367fe23f37074f121b9f796cabbd2f928f13e9661837296d"}, - {file = "rpds_py-0.19.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c8f77e661ffd96ff104bebf7d0f3255b02aa5d5b28326f5408d6284c4a8b3248"}, - {file = "rpds_py-0.19.0-cp312-none-win32.whl", hash = "sha256:5f83689a38e76969327e9b682be5521d87a0c9e5a2e187d2bc6be4765f0d4600"}, - {file = "rpds_py-0.19.0-cp312-none-win_amd64.whl", hash = "sha256:06925c50f86da0596b9c3c64c3837b2481337b83ef3519e5db2701df695453a4"}, - {file = "rpds_py-0.19.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:52e466bea6f8f3a44b1234570244b1cff45150f59a4acae3fcc5fd700c2993ca"}, - {file = "rpds_py-0.19.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e21cc693045fda7f745c790cb687958161ce172ffe3c5719ca1764e752237d16"}, - {file = "rpds_py-0.19.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b31f059878eb1f5da8b2fd82480cc18bed8dcd7fb8fe68370e2e6285fa86da6"}, - {file = "rpds_py-0.19.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1dd46f309e953927dd018567d6a9e2fb84783963650171f6c5fe7e5c41fd5666"}, - {file = "rpds_py-0.19.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:34a01a4490e170376cd79258b7f755fa13b1a6c3667e872c8e35051ae857a92b"}, - {file = "rpds_py-0.19.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bcf426a8c38eb57f7bf28932e68425ba86def6e756a5b8cb4731d8e62e4e0223"}, - {file = "rpds_py-0.19.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f68eea5df6347d3f1378ce992d86b2af16ad7ff4dcb4a19ccdc23dea901b87fb"}, - {file = "rpds_py-0.19.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dab8d921b55a28287733263c0e4c7db11b3ee22aee158a4de09f13c93283c62d"}, - {file = "rpds_py-0.19.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:6fe87efd7f47266dfc42fe76dae89060038f1d9cb911f89ae7e5084148d1cc08"}, - {file = "rpds_py-0.19.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:535d4b52524a961d220875688159277f0e9eeeda0ac45e766092bfb54437543f"}, - {file = "rpds_py-0.19.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:8b1a94b8afc154fbe36978a511a1f155f9bd97664e4f1f7a374d72e180ceb0ae"}, - {file = "rpds_py-0.19.0-cp38-none-win32.whl", hash = "sha256:7c98298a15d6b90c8f6e3caa6457f4f022423caa5fa1a1ca7a5e9e512bdb77a4"}, - {file = "rpds_py-0.19.0-cp38-none-win_amd64.whl", hash = "sha256:b0da31853ab6e58a11db3205729133ce0df26e6804e93079dee095be3d681dc1"}, - {file = "rpds_py-0.19.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:5039e3cef7b3e7a060de468a4a60a60a1f31786da94c6cb054e7a3c75906111c"}, - {file = "rpds_py-0.19.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ab1932ca6cb8c7499a4d87cb21ccc0d3326f172cfb6a64021a889b591bb3045c"}, - {file = "rpds_py-0.19.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2afd2164a1e85226fcb6a1da77a5c8896c18bfe08e82e8ceced5181c42d2179"}, - {file = "rpds_py-0.19.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b1c30841f5040de47a0046c243fc1b44ddc87d1b12435a43b8edff7e7cb1e0d0"}, - {file = "rpds_py-0.19.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f757f359f30ec7dcebca662a6bd46d1098f8b9fb1fcd661a9e13f2e8ce343ba1"}, - {file = "rpds_py-0.19.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:15e65395a59d2e0e96caf8ee5389ffb4604e980479c32742936ddd7ade914b22"}, - {file = "rpds_py-0.19.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb0f6eb3a320f24b94d177e62f4074ff438f2ad9d27e75a46221904ef21a7b05"}, - {file = "rpds_py-0.19.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b228e693a2559888790936e20f5f88b6e9f8162c681830eda303bad7517b4d5a"}, - {file = "rpds_py-0.19.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2575efaa5d949c9f4e2cdbe7d805d02122c16065bfb8d95c129372d65a291a0b"}, - {file = "rpds_py-0.19.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:5c872814b77a4e84afa293a1bee08c14daed1068b2bb1cc312edbf020bbbca2b"}, - {file = "rpds_py-0.19.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:850720e1b383df199b8433a20e02b25b72f0fded28bc03c5bd79e2ce7ef050be"}, - {file = "rpds_py-0.19.0-cp39-none-win32.whl", hash = "sha256:ce84a7efa5af9f54c0aa7692c45861c1667080814286cacb9958c07fc50294fb"}, - {file = "rpds_py-0.19.0-cp39-none-win_amd64.whl", hash = "sha256:1c26da90b8d06227d7769f34915913911222d24ce08c0ab2d60b354e2d9c7aff"}, - {file = "rpds_py-0.19.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:75969cf900d7be665ccb1622a9aba225cf386bbc9c3bcfeeab9f62b5048f4a07"}, - {file = "rpds_py-0.19.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:8445f23f13339da640d1be8e44e5baf4af97e396882ebbf1692aecd67f67c479"}, - {file = "rpds_py-0.19.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5a7c1062ef8aea3eda149f08120f10795835fc1c8bc6ad948fb9652a113ca55"}, - {file = "rpds_py-0.19.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:462b0c18fbb48fdbf980914a02ee38c423a25fcc4cf40f66bacc95a2d2d73bc8"}, - {file = "rpds_py-0.19.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3208f9aea18991ac7f2b39721e947bbd752a1abbe79ad90d9b6a84a74d44409b"}, - {file = "rpds_py-0.19.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3444fe52b82f122d8a99bf66777aed6b858d392b12f4c317da19f8234db4533"}, - {file = "rpds_py-0.19.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88cb4bac7185a9f0168d38c01d7a00addece9822a52870eee26b8d5b61409213"}, - {file = "rpds_py-0.19.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6b130bd4163c93798a6b9bb96be64a7c43e1cec81126ffa7ffaa106e1fc5cef5"}, - {file = "rpds_py-0.19.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:a707b158b4410aefb6b054715545bbb21aaa5d5d0080217290131c49c2124a6e"}, - {file = "rpds_py-0.19.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:dc9ac4659456bde7c567107556ab065801622396b435a3ff213daef27b495388"}, - {file = "rpds_py-0.19.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:81ea573aa46d3b6b3d890cd3c0ad82105985e6058a4baed03cf92518081eec8c"}, - {file = "rpds_py-0.19.0-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3f148c3f47f7f29a79c38cc5d020edcb5ca780020fab94dbc21f9af95c463581"}, - {file = "rpds_py-0.19.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:b0906357f90784a66e89ae3eadc2654f36c580a7d65cf63e6a616e4aec3a81be"}, - {file = "rpds_py-0.19.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f629ecc2db6a4736b5ba95a8347b0089240d69ad14ac364f557d52ad68cf94b0"}, - {file = "rpds_py-0.19.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c6feacd1d178c30e5bc37184526e56740342fd2aa6371a28367bad7908d454fc"}, - {file = "rpds_py-0.19.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae8b6068ee374fdfab63689be0963333aa83b0815ead5d8648389a8ded593378"}, - {file = "rpds_py-0.19.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78d57546bad81e0da13263e4c9ce30e96dcbe720dbff5ada08d2600a3502e526"}, - {file = "rpds_py-0.19.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8b6683a37338818646af718c9ca2a07f89787551057fae57c4ec0446dc6224b"}, - {file = "rpds_py-0.19.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e8481b946792415adc07410420d6fc65a352b45d347b78fec45d8f8f0d7496f0"}, - {file = "rpds_py-0.19.0-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:bec35eb20792ea64c3c57891bc3ca0bedb2884fbac2c8249d9b731447ecde4fa"}, - {file = "rpds_py-0.19.0-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:aa5476c3e3a402c37779e95f7b4048db2cb5b0ed0b9d006983965e93f40fe05a"}, - {file = "rpds_py-0.19.0-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:19d02c45f2507b489fd4df7b827940f1420480b3e2e471e952af4d44a1ea8e34"}, - {file = "rpds_py-0.19.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a3e2fd14c5d49ee1da322672375963f19f32b3d5953f0615b175ff7b9d38daed"}, - {file = "rpds_py-0.19.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:93a91c2640645303e874eada51f4f33351b84b351a689d470f8108d0e0694210"}, - {file = "rpds_py-0.19.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5b9fc03bf76a94065299d4a2ecd8dfbae4ae8e2e8098bbfa6ab6413ca267709"}, - {file = "rpds_py-0.19.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5a4b07cdf3f84310c08c1de2c12ddadbb7a77568bcb16e95489f9c81074322ed"}, - {file = "rpds_py-0.19.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ba0ed0dc6763d8bd6e5de5cf0d746d28e706a10b615ea382ac0ab17bb7388633"}, - {file = "rpds_py-0.19.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:474bc83233abdcf2124ed3f66230a1c8435896046caa4b0b5ab6013c640803cc"}, - {file = "rpds_py-0.19.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:329c719d31362355a96b435f4653e3b4b061fcc9eba9f91dd40804ca637d914e"}, - {file = "rpds_py-0.19.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ef9101f3f7b59043a34f1dccbb385ca760467590951952d6701df0da9893ca0c"}, - {file = "rpds_py-0.19.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:0121803b0f424ee2109d6e1f27db45b166ebaa4b32ff47d6aa225642636cd834"}, - {file = "rpds_py-0.19.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:8344127403dea42f5970adccf6c5957a71a47f522171fafaf4c6ddb41b61703a"}, - {file = "rpds_py-0.19.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:443cec402ddd650bb2b885113e1dcedb22b1175c6be223b14246a714b61cd521"}, - {file = "rpds_py-0.19.0.tar.gz", hash = "sha256:4fdc9afadbeb393b4bbbad75481e0ea78e4469f2e1d713a90811700830b553a9"}, + {file = "rpds_py-0.20.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:3ad0fda1635f8439cde85c700f964b23ed5fc2d28016b32b9ee5fe30da5c84e2"}, + {file = "rpds_py-0.20.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9bb4a0d90fdb03437c109a17eade42dfbf6190408f29b2744114d11586611d6f"}, + {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6377e647bbfd0a0b159fe557f2c6c602c159fc752fa316572f012fc0bf67150"}, + {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb851b7df9dda52dc1415ebee12362047ce771fc36914586b2e9fcbd7d293b3e"}, + {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1e0f80b739e5a8f54837be5d5c924483996b603d5502bfff79bf33da06164ee2"}, + {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a8c94dad2e45324fc74dce25e1645d4d14df9a4e54a30fa0ae8bad9a63928e3"}, + {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8e604fe73ba048c06085beaf51147eaec7df856824bfe7b98657cf436623daf"}, + {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:df3de6b7726b52966edf29663e57306b23ef775faf0ac01a3e9f4012a24a4140"}, + {file = "rpds_py-0.20.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf258ede5bc22a45c8e726b29835b9303c285ab46fc7c3a4cc770736b5304c9f"}, + {file = "rpds_py-0.20.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:55fea87029cded5df854ca7e192ec7bdb7ecd1d9a3f63d5c4eb09148acf4a7ce"}, + {file = "rpds_py-0.20.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ae94bd0b2f02c28e199e9bc51485d0c5601f58780636185660f86bf80c89af94"}, + {file = "rpds_py-0.20.0-cp310-none-win32.whl", hash = "sha256:28527c685f237c05445efec62426d285e47a58fb05ba0090a4340b73ecda6dee"}, + {file = "rpds_py-0.20.0-cp310-none-win_amd64.whl", hash = "sha256:238a2d5b1cad28cdc6ed15faf93a998336eb041c4e440dd7f902528b8891b399"}, + {file = "rpds_py-0.20.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:ac2f4f7a98934c2ed6505aead07b979e6f999389f16b714448fb39bbaa86a489"}, + {file = "rpds_py-0.20.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:220002c1b846db9afd83371d08d239fdc865e8f8c5795bbaec20916a76db3318"}, + {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d7919548df3f25374a1f5d01fbcd38dacab338ef5f33e044744b5c36729c8db"}, + {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:758406267907b3781beee0f0edfe4a179fbd97c0be2e9b1154d7f0a1279cf8e5"}, + {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3d61339e9f84a3f0767b1995adfb171a0d00a1185192718a17af6e124728e0f5"}, + {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1259c7b3705ac0a0bd38197565a5d603218591d3f6cee6e614e380b6ba61c6f6"}, + {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c1dc0f53856b9cc9a0ccca0a7cc61d3d20a7088201c0937f3f4048c1718a209"}, + {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7e60cb630f674a31f0368ed32b2a6b4331b8350d67de53c0359992444b116dd3"}, + {file = "rpds_py-0.20.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:dbe982f38565bb50cb7fb061ebf762c2f254ca3d8c20d4006878766e84266272"}, + {file = "rpds_py-0.20.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:514b3293b64187172bc77c8fb0cdae26981618021053b30d8371c3a902d4d5ad"}, + {file = "rpds_py-0.20.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d0a26ffe9d4dd35e4dfdd1e71f46401cff0181c75ac174711ccff0459135fa58"}, + {file = "rpds_py-0.20.0-cp311-none-win32.whl", hash = "sha256:89c19a494bf3ad08c1da49445cc5d13d8fefc265f48ee7e7556839acdacf69d0"}, + {file = "rpds_py-0.20.0-cp311-none-win_amd64.whl", hash = "sha256:c638144ce971df84650d3ed0096e2ae7af8e62ecbbb7b201c8935c370df00a2c"}, + {file = "rpds_py-0.20.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a84ab91cbe7aab97f7446652d0ed37d35b68a465aeef8fc41932a9d7eee2c1a6"}, + {file = "rpds_py-0.20.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:56e27147a5a4c2c21633ff8475d185734c0e4befd1c989b5b95a5d0db699b21b"}, + {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2580b0c34583b85efec8c5c5ec9edf2dfe817330cc882ee972ae650e7b5ef739"}, + {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b80d4a7900cf6b66bb9cee5c352b2d708e29e5a37fe9bf784fa97fc11504bf6c"}, + {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:50eccbf054e62a7b2209b28dc7a22d6254860209d6753e6b78cfaeb0075d7bee"}, + {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:49a8063ea4296b3a7e81a5dfb8f7b2d73f0b1c20c2af401fb0cdf22e14711a96"}, + {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea438162a9fcbee3ecf36c23e6c68237479f89f962f82dae83dc15feeceb37e4"}, + {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:18d7585c463087bddcfa74c2ba267339f14f2515158ac4db30b1f9cbdb62c8ef"}, + {file = "rpds_py-0.20.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d4c7d1a051eeb39f5c9547e82ea27cbcc28338482242e3e0b7768033cb083821"}, + {file = "rpds_py-0.20.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e4df1e3b3bec320790f699890d41c59d250f6beda159ea3c44c3f5bac1976940"}, + {file = "rpds_py-0.20.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2cf126d33a91ee6eedc7f3197b53e87a2acdac63602c0f03a02dd69e4b138174"}, + {file = "rpds_py-0.20.0-cp312-none-win32.whl", hash = "sha256:8bc7690f7caee50b04a79bf017a8d020c1f48c2a1077ffe172abec59870f1139"}, + {file = "rpds_py-0.20.0-cp312-none-win_amd64.whl", hash = "sha256:0e13e6952ef264c40587d510ad676a988df19adea20444c2b295e536457bc585"}, + {file = "rpds_py-0.20.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:aa9a0521aeca7d4941499a73ad7d4f8ffa3d1affc50b9ea11d992cd7eff18a29"}, + {file = "rpds_py-0.20.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4a1f1d51eccb7e6c32ae89243cb352389228ea62f89cd80823ea7dd1b98e0b91"}, + {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a86a9b96070674fc88b6f9f71a97d2c1d3e5165574615d1f9168ecba4cecb24"}, + {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6c8ef2ebf76df43f5750b46851ed1cdf8f109d7787ca40035fe19fbdc1acc5a7"}, + {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b74b25f024b421d5859d156750ea9a65651793d51b76a2e9238c05c9d5f203a9"}, + {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57eb94a8c16ab08fef6404301c38318e2c5a32216bf5de453e2714c964c125c8"}, + {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1940dae14e715e2e02dfd5b0f64a52e8374a517a1e531ad9412319dc3ac7879"}, + {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d20277fd62e1b992a50c43f13fbe13277a31f8c9f70d59759c88f644d66c619f"}, + {file = "rpds_py-0.20.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:06db23d43f26478303e954c34c75182356ca9aa7797d22c5345b16871ab9c45c"}, + {file = "rpds_py-0.20.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b2a5db5397d82fa847e4c624b0c98fe59d2d9b7cf0ce6de09e4d2e80f8f5b3f2"}, + {file = "rpds_py-0.20.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5a35df9f5548fd79cb2f52d27182108c3e6641a4feb0f39067911bf2adaa3e57"}, + {file = "rpds_py-0.20.0-cp313-none-win32.whl", hash = "sha256:fd2d84f40633bc475ef2d5490b9c19543fbf18596dcb1b291e3a12ea5d722f7a"}, + {file = "rpds_py-0.20.0-cp313-none-win_amd64.whl", hash = "sha256:9bc2d153989e3216b0559251b0c260cfd168ec78b1fac33dd485750a228db5a2"}, + {file = "rpds_py-0.20.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:f2fbf7db2012d4876fb0d66b5b9ba6591197b0f165db8d99371d976546472a24"}, + {file = "rpds_py-0.20.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:1e5f3cd7397c8f86c8cc72d5a791071431c108edd79872cdd96e00abd8497d29"}, + {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce9845054c13696f7af7f2b353e6b4f676dab1b4b215d7fe5e05c6f8bb06f965"}, + {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c3e130fd0ec56cb76eb49ef52faead8ff09d13f4527e9b0c400307ff72b408e1"}, + {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b16aa0107ecb512b568244ef461f27697164d9a68d8b35090e9b0c1c8b27752"}, + {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aa7f429242aae2947246587d2964fad750b79e8c233a2367f71b554e9447949c"}, + {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af0fc424a5842a11e28956e69395fbbeab2c97c42253169d87e90aac2886d751"}, + {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b8c00a3b1e70c1d3891f0db1b05292747f0dbcfb49c43f9244d04c70fbc40eb8"}, + {file = "rpds_py-0.20.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:40ce74fc86ee4645d0a225498d091d8bc61f39b709ebef8204cb8b5a464d3c0e"}, + {file = "rpds_py-0.20.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:4fe84294c7019456e56d93e8ababdad5a329cd25975be749c3f5f558abb48253"}, + {file = "rpds_py-0.20.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:338ca4539aad4ce70a656e5187a3a31c5204f261aef9f6ab50e50bcdffaf050a"}, + {file = "rpds_py-0.20.0-cp38-none-win32.whl", hash = "sha256:54b43a2b07db18314669092bb2de584524d1ef414588780261e31e85846c26a5"}, + {file = "rpds_py-0.20.0-cp38-none-win_amd64.whl", hash = "sha256:a1862d2d7ce1674cffa6d186d53ca95c6e17ed2b06b3f4c476173565c862d232"}, + {file = "rpds_py-0.20.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:3fde368e9140312b6e8b6c09fb9f8c8c2f00999d1823403ae90cc00480221b22"}, + {file = "rpds_py-0.20.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9824fb430c9cf9af743cf7aaf6707bf14323fb51ee74425c380f4c846ea70789"}, + {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:11ef6ce74616342888b69878d45e9f779b95d4bd48b382a229fe624a409b72c5"}, + {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c52d3f2f82b763a24ef52f5d24358553e8403ce05f893b5347098014f2d9eff2"}, + {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d35cef91e59ebbeaa45214861874bc6f19eb35de96db73e467a8358d701a96c"}, + {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d72278a30111e5b5525c1dd96120d9e958464316f55adb030433ea905866f4de"}, + {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4c29cbbba378759ac5786730d1c3cb4ec6f8ababf5c42a9ce303dc4b3d08cda"}, + {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6632f2d04f15d1bd6fe0eedd3b86d9061b836ddca4c03d5cf5c7e9e6b7c14580"}, + {file = "rpds_py-0.20.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:d0b67d87bb45ed1cd020e8fbf2307d449b68abc45402fe1a4ac9e46c3c8b192b"}, + {file = "rpds_py-0.20.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:ec31a99ca63bf3cd7f1a5ac9fe95c5e2d060d3c768a09bc1d16e235840861420"}, + {file = "rpds_py-0.20.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:22e6c9976e38f4d8c4a63bd8a8edac5307dffd3ee7e6026d97f3cc3a2dc02a0b"}, + {file = "rpds_py-0.20.0-cp39-none-win32.whl", hash = "sha256:569b3ea770c2717b730b61998b6c54996adee3cef69fc28d444f3e7920313cf7"}, + {file = "rpds_py-0.20.0-cp39-none-win_amd64.whl", hash = "sha256:e6900ecdd50ce0facf703f7a00df12374b74bbc8ad9fe0f6559947fb20f82364"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:617c7357272c67696fd052811e352ac54ed1d9b49ab370261a80d3b6ce385045"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9426133526f69fcaba6e42146b4e12d6bc6c839b8b555097020e2b78ce908dcc"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:deb62214c42a261cb3eb04d474f7155279c1a8a8c30ac89b7dcb1721d92c3c02"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fcaeb7b57f1a1e071ebd748984359fef83ecb026325b9d4ca847c95bc7311c92"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d454b8749b4bd70dd0a79f428731ee263fa6995f83ccb8bada706e8d1d3ff89d"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d807dc2051abe041b6649681dce568f8e10668e3c1c6543ebae58f2d7e617855"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3c20f0ddeb6e29126d45f89206b8291352b8c5b44384e78a6499d68b52ae511"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b7f19250ceef892adf27f0399b9e5afad019288e9be756d6919cb58892129f51"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:4f1ed4749a08379555cebf4650453f14452eaa9c43d0a95c49db50c18b7da075"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:dcedf0b42bcb4cfff4101d7771a10532415a6106062f005ab97d1d0ab5681c60"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:39ed0d010457a78f54090fafb5d108501b5aa5604cc22408fc1c0c77eac14344"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:bb273176be34a746bdac0b0d7e4e2c467323d13640b736c4c477881a3220a989"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f918a1a130a6dfe1d7fe0f105064141342e7dd1611f2e6a21cd2f5c8cb1cfb3e"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:f60012a73aa396be721558caa3a6fd49b3dd0033d1675c6d59c4502e870fcf0c"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d2b1ad682a3dfda2a4e8ad8572f3100f95fad98cb99faf37ff0ddfe9cbf9d03"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:614fdafe9f5f19c63ea02817fa4861c606a59a604a77c8cdef5aa01d28b97921"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fa518bcd7600c584bf42e6617ee8132869e877db2f76bcdc281ec6a4113a53ab"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f0475242f447cc6cb8a9dd486d68b2ef7fbee84427124c232bff5f63b1fe11e5"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f90a4cd061914a60bd51c68bcb4357086991bd0bb93d8aa66a6da7701370708f"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:def7400461c3a3f26e49078302e1c1b38f6752342c77e3cf72ce91ca69fb1bc1"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:65794e4048ee837494aea3c21a28ad5fc080994dfba5b036cf84de37f7ad5074"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:faefcc78f53a88f3076b7f8be0a8f8d35133a3ecf7f3770895c25f8813460f08"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:5b4f105deeffa28bbcdff6c49b34e74903139afa690e35d2d9e3c2c2fba18cec"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:fdfc3a892927458d98f3d55428ae46b921d1f7543b89382fdb483f5640daaec8"}, + {file = "rpds_py-0.20.0.tar.gz", hash = "sha256:d72a210824facfdaf8768cf2d7ca25a042c30320b3020de2fa04640920d4e121"}, ] [[package]] @@ -4131,29 +4290,29 @@ pyasn1 = ">=0.1.3" [[package]] name = "ruff" -version = "0.5.2" +version = "0.5.7" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.5.2-py3-none-linux_armv6l.whl", hash = "sha256:7bab8345df60f9368d5f4594bfb8b71157496b44c30ff035d1d01972e764d3be"}, - {file = "ruff-0.5.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:1aa7acad382ada0189dbe76095cf0a36cd0036779607c397ffdea16517f535b1"}, - {file = "ruff-0.5.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:aec618d5a0cdba5592c60c2dee7d9c865180627f1a4a691257dea14ac1aa264d"}, - {file = "ruff-0.5.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0b62adc5ce81780ff04077e88bac0986363e4a3260ad3ef11ae9c14aa0e67ef"}, - {file = "ruff-0.5.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dc42ebf56ede83cb080a50eba35a06e636775649a1ffd03dc986533f878702a3"}, - {file = "ruff-0.5.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c15c6e9f88c67ffa442681365d11df38afb11059fc44238e71a9d9f1fd51de70"}, - {file = "ruff-0.5.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:d3de9a5960f72c335ef00763d861fc5005ef0644cb260ba1b5a115a102157251"}, - {file = "ruff-0.5.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fe5a968ae933e8f7627a7b2fc8893336ac2be0eb0aace762d3421f6e8f7b7f83"}, - {file = "ruff-0.5.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a04f54a9018f75615ae52f36ea1c5515e356e5d5e214b22609ddb546baef7132"}, - {file = "ruff-0.5.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ed02fb52e3741f0738db5f93e10ae0fb5c71eb33a4f2ba87c9a2fa97462a649"}, - {file = "ruff-0.5.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:3cf8fe659f6362530435d97d738eb413e9f090e7e993f88711b0377fbdc99f60"}, - {file = "ruff-0.5.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:237a37e673e9f3cbfff0d2243e797c4862a44c93d2f52a52021c1a1b0899f846"}, - {file = "ruff-0.5.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:2a2949ce7c1cbd8317432ada80fe32156df825b2fd611688814c8557824ef060"}, - {file = "ruff-0.5.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:481af57c8e99da92ad168924fd82220266043c8255942a1cb87958b108ac9335"}, - {file = "ruff-0.5.2-py3-none-win32.whl", hash = "sha256:f1aea290c56d913e363066d83d3fc26848814a1fed3d72144ff9c930e8c7c718"}, - {file = "ruff-0.5.2-py3-none-win_amd64.whl", hash = "sha256:8532660b72b5d94d2a0a7a27ae7b9b40053662d00357bb2a6864dd7e38819084"}, - {file = "ruff-0.5.2-py3-none-win_arm64.whl", hash = "sha256:73439805c5cb68f364d826a5c5c4b6c798ded6b7ebaa4011f01ce6c94e4d5583"}, - {file = "ruff-0.5.2.tar.gz", hash = "sha256:2c0df2d2de685433794a14d8d2e240df619b748fbe3367346baa519d8e6f1ca2"}, + {file = "ruff-0.5.7-py3-none-linux_armv6l.whl", hash = "sha256:548992d342fc404ee2e15a242cdbea4f8e39a52f2e7752d0e4cbe88d2d2f416a"}, + {file = "ruff-0.5.7-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:00cc8872331055ee017c4f1071a8a31ca0809ccc0657da1d154a1d2abac5c0be"}, + {file = "ruff-0.5.7-py3-none-macosx_11_0_arm64.whl", hash = "sha256:eaf3d86a1fdac1aec8a3417a63587d93f906c678bb9ed0b796da7b59c1114a1e"}, + {file = "ruff-0.5.7-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a01c34400097b06cf8a6e61b35d6d456d5bd1ae6961542de18ec81eaf33b4cb8"}, + {file = "ruff-0.5.7-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fcc8054f1a717e2213500edaddcf1dbb0abad40d98e1bd9d0ad364f75c763eea"}, + {file = "ruff-0.5.7-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7f70284e73f36558ef51602254451e50dd6cc479f8b6f8413a95fcb5db4a55fc"}, + {file = "ruff-0.5.7-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:a78ad870ae3c460394fc95437d43deb5c04b5c29297815a2a1de028903f19692"}, + {file = "ruff-0.5.7-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9ccd078c66a8e419475174bfe60a69adb36ce04f8d4e91b006f1329d5cd44bcf"}, + {file = "ruff-0.5.7-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7e31c9bad4ebf8fdb77b59cae75814440731060a09a0e0077d559a556453acbb"}, + {file = "ruff-0.5.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d796327eed8e168164346b769dd9a27a70e0298d667b4ecee6877ce8095ec8e"}, + {file = "ruff-0.5.7-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:4a09ea2c3f7778cc635e7f6edf57d566a8ee8f485f3c4454db7771efb692c499"}, + {file = "ruff-0.5.7-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:a36d8dcf55b3a3bc353270d544fb170d75d2dff41eba5df57b4e0b67a95bb64e"}, + {file = "ruff-0.5.7-py3-none-musllinux_1_2_i686.whl", hash = "sha256:9369c218f789eefbd1b8d82a8cf25017b523ac47d96b2f531eba73770971c9e5"}, + {file = "ruff-0.5.7-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:b88ca3db7eb377eb24fb7c82840546fb7acef75af4a74bd36e9ceb37a890257e"}, + {file = "ruff-0.5.7-py3-none-win32.whl", hash = "sha256:33d61fc0e902198a3e55719f4be6b375b28f860b09c281e4bdbf783c0566576a"}, + {file = "ruff-0.5.7-py3-none-win_amd64.whl", hash = "sha256:083bbcbe6fadb93cd86709037acc510f86eed5a314203079df174c40bbbca6b3"}, + {file = "ruff-0.5.7-py3-none-win_arm64.whl", hash = "sha256:2dca26154ff9571995107221d0aeaad0e75a77b5a682d6236cf89a58c70b76f4"}, + {file = "ruff-0.5.7.tar.gz", hash = "sha256:8dfc0a458797f5d9fb622dd0efc52d796f23f0a1493a9527f4e49a550ae9a7e5"}, ] [[package]] @@ -4175,111 +4334,121 @@ crt = ["botocore[crt] (>=1.33.2,<2.0a.0)"] [[package]] name = "safetensors" -version = "0.4.3" +version = "0.4.4" description = "" optional = true python-versions = ">=3.7" files = [ - {file = "safetensors-0.4.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:dcf5705cab159ce0130cd56057f5f3425023c407e170bca60b4868048bae64fd"}, - {file = "safetensors-0.4.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:bb4f8c5d0358a31e9a08daeebb68f5e161cdd4018855426d3f0c23bb51087055"}, - {file = "safetensors-0.4.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70a5319ef409e7f88686a46607cbc3c428271069d8b770076feaf913664a07ac"}, - {file = "safetensors-0.4.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fb9c65bd82f9ef3ce4970dc19ee86be5f6f93d032159acf35e663c6bea02b237"}, - {file = "safetensors-0.4.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:edb5698a7bc282089f64c96c477846950358a46ede85a1c040e0230344fdde10"}, - {file = "safetensors-0.4.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:efcc860be094b8d19ac61b452ec635c7acb9afa77beb218b1d7784c6d41fe8ad"}, - {file = "safetensors-0.4.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d88b33980222085dd6001ae2cad87c6068e0991d4f5ccf44975d216db3b57376"}, - {file = "safetensors-0.4.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5fc6775529fb9f0ce2266edd3e5d3f10aab068e49f765e11f6f2a63b5367021d"}, - {file = "safetensors-0.4.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9c6ad011c1b4e3acff058d6b090f1da8e55a332fbf84695cf3100c649cc452d1"}, - {file = "safetensors-0.4.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8c496c5401c1b9c46d41a7688e8ff5b0310a3b9bae31ce0f0ae870e1ea2b8caf"}, - {file = "safetensors-0.4.3-cp310-none-win32.whl", hash = "sha256:38e2a8666178224a51cca61d3cb4c88704f696eac8f72a49a598a93bbd8a4af9"}, - {file = "safetensors-0.4.3-cp310-none-win_amd64.whl", hash = "sha256:393e6e391467d1b2b829c77e47d726f3b9b93630e6a045b1d1fca67dc78bf632"}, - {file = "safetensors-0.4.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:22f3b5d65e440cec0de8edaa672efa888030802e11c09b3d6203bff60ebff05a"}, - {file = "safetensors-0.4.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7c4fa560ebd4522adddb71dcd25d09bf211b5634003f015a4b815b7647d62ebe"}, - {file = "safetensors-0.4.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9afd5358719f1b2cf425fad638fc3c887997d6782da317096877e5b15b2ce93"}, - {file = "safetensors-0.4.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d8c5093206ef4b198600ae484230402af6713dab1bd5b8e231905d754022bec7"}, - {file = "safetensors-0.4.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e0b2104df1579d6ba9052c0ae0e3137c9698b2d85b0645507e6fd1813b70931a"}, - {file = "safetensors-0.4.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8cf18888606dad030455d18f6c381720e57fc6a4170ee1966adb7ebc98d4d6a3"}, - {file = "safetensors-0.4.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0bf4f9d6323d9f86eef5567eabd88f070691cf031d4c0df27a40d3b4aaee755b"}, - {file = "safetensors-0.4.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:585c9ae13a205807b63bef8a37994f30c917ff800ab8a1ca9c9b5d73024f97ee"}, - {file = "safetensors-0.4.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:faefeb3b81bdfb4e5a55b9bbdf3d8d8753f65506e1d67d03f5c851a6c87150e9"}, - {file = "safetensors-0.4.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:befdf0167ad626f22f6aac6163477fcefa342224a22f11fdd05abb3995c1783c"}, - {file = "safetensors-0.4.3-cp311-none-win32.whl", hash = "sha256:a7cef55929dcbef24af3eb40bedec35d82c3c2fa46338bb13ecf3c5720af8a61"}, - {file = "safetensors-0.4.3-cp311-none-win_amd64.whl", hash = "sha256:840b7ac0eff5633e1d053cc9db12fdf56b566e9403b4950b2dc85393d9b88d67"}, - {file = "safetensors-0.4.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:22d21760dc6ebae42e9c058d75aa9907d9f35e38f896e3c69ba0e7b213033856"}, - {file = "safetensors-0.4.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d22c1a10dff3f64d0d68abb8298a3fd88ccff79f408a3e15b3e7f637ef5c980"}, - {file = "safetensors-0.4.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1648568667f820b8c48317c7006221dc40aced1869908c187f493838a1362bc"}, - {file = "safetensors-0.4.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:446e9fe52c051aeab12aac63d1017e0f68a02a92a027b901c4f8e931b24e5397"}, - {file = "safetensors-0.4.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fef5d70683643618244a4f5221053567ca3e77c2531e42ad48ae05fae909f542"}, - {file = "safetensors-0.4.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a1f4430cc0c9d6afa01214a4b3919d0a029637df8e09675ceef1ca3f0dfa0df"}, - {file = "safetensors-0.4.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d603846a8585b9432a0fd415db1d4c57c0f860eb4aea21f92559ff9902bae4d"}, - {file = "safetensors-0.4.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a844cdb5d7cbc22f5f16c7e2a0271170750763c4db08381b7f696dbd2c78a361"}, - {file = "safetensors-0.4.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:88887f69f7a00cf02b954cdc3034ffb383b2303bc0ab481d4716e2da51ddc10e"}, - {file = "safetensors-0.4.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ee463219d9ec6c2be1d331ab13a8e0cd50d2f32240a81d498266d77d07b7e71e"}, - {file = "safetensors-0.4.3-cp312-none-win32.whl", hash = "sha256:d0dd4a1db09db2dba0f94d15addc7e7cd3a7b0d393aa4c7518c39ae7374623c3"}, - {file = "safetensors-0.4.3-cp312-none-win_amd64.whl", hash = "sha256:d14d30c25897b2bf19b6fb5ff7e26cc40006ad53fd4a88244fdf26517d852dd7"}, - {file = "safetensors-0.4.3-cp37-cp37m-macosx_10_12_x86_64.whl", hash = "sha256:d1456f814655b224d4bf6e7915c51ce74e389b413be791203092b7ff78c936dd"}, - {file = "safetensors-0.4.3-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:455d538aa1aae4a8b279344a08136d3f16334247907b18a5c3c7fa88ef0d3c46"}, - {file = "safetensors-0.4.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf476bca34e1340ee3294ef13e2c625833f83d096cfdf69a5342475602004f95"}, - {file = "safetensors-0.4.3-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:02ef3a24face643456020536591fbd3c717c5abaa2737ec428ccbbc86dffa7a4"}, - {file = "safetensors-0.4.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7de32d0d34b6623bb56ca278f90db081f85fb9c5d327e3c18fd23ac64f465768"}, - {file = "safetensors-0.4.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a0deb16a1d3ea90c244ceb42d2c6c276059616be21a19ac7101aa97da448faf"}, - {file = "safetensors-0.4.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c59d51f182c729f47e841510b70b967b0752039f79f1de23bcdd86462a9b09ee"}, - {file = "safetensors-0.4.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1f598b713cc1a4eb31d3b3203557ac308acf21c8f41104cdd74bf640c6e538e3"}, - {file = "safetensors-0.4.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:5757e4688f20df083e233b47de43845d1adb7e17b6cf7da5f8444416fc53828d"}, - {file = "safetensors-0.4.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:fe746d03ed8d193674a26105e4f0fe6c726f5bb602ffc695b409eaf02f04763d"}, - {file = "safetensors-0.4.3-cp37-none-win32.whl", hash = "sha256:0d5ffc6a80f715c30af253e0e288ad1cd97a3d0086c9c87995e5093ebc075e50"}, - {file = "safetensors-0.4.3-cp37-none-win_amd64.whl", hash = "sha256:a11c374eb63a9c16c5ed146457241182f310902bd2a9c18255781bb832b6748b"}, - {file = "safetensors-0.4.3-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:b1e31be7945f66be23f4ec1682bb47faa3df34cb89fc68527de6554d3c4258a4"}, - {file = "safetensors-0.4.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:03a4447c784917c9bf01d8f2ac5080bc15c41692202cd5f406afba16629e84d6"}, - {file = "safetensors-0.4.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d244bcafeb1bc06d47cfee71727e775bca88a8efda77a13e7306aae3813fa7e4"}, - {file = "safetensors-0.4.3-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:53c4879b9c6bd7cd25d114ee0ef95420e2812e676314300624594940a8d6a91f"}, - {file = "safetensors-0.4.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:74707624b81f1b7f2b93f5619d4a9f00934d5948005a03f2c1845ffbfff42212"}, - {file = "safetensors-0.4.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0d52c958dc210265157573f81d34adf54e255bc2b59ded6218500c9b15a750eb"}, - {file = "safetensors-0.4.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f9568f380f513a60139971169c4a358b8731509cc19112369902eddb33faa4d"}, - {file = "safetensors-0.4.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0d9cd8e1560dfc514b6d7859247dc6a86ad2f83151a62c577428d5102d872721"}, - {file = "safetensors-0.4.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:89f9f17b0dacb913ed87d57afbc8aad85ea42c1085bd5de2f20d83d13e9fc4b2"}, - {file = "safetensors-0.4.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:1139eb436fd201c133d03c81209d39ac57e129f5e74e34bb9ab60f8d9b726270"}, - {file = "safetensors-0.4.3-cp38-none-win32.whl", hash = "sha256:d9c289f140a9ae4853fc2236a2ffc9a9f2d5eae0cb673167e0f1b8c18c0961ac"}, - {file = "safetensors-0.4.3-cp38-none-win_amd64.whl", hash = "sha256:622afd28968ef3e9786562d352659a37de4481a4070f4ebac883f98c5836563e"}, - {file = "safetensors-0.4.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:8651c7299cbd8b4161a36cd6a322fa07d39cd23535b144d02f1c1972d0c62f3c"}, - {file = "safetensors-0.4.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e375d975159ac534c7161269de24ddcd490df2157b55c1a6eeace6cbb56903f0"}, - {file = "safetensors-0.4.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:084fc436e317f83f7071fc6a62ca1c513b2103db325cd09952914b50f51cf78f"}, - {file = "safetensors-0.4.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:41a727a7f5e6ad9f1db6951adee21bbdadc632363d79dc434876369a17de6ad6"}, - {file = "safetensors-0.4.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e7dbbde64b6c534548696808a0e01276d28ea5773bc9a2dfb97a88cd3dffe3df"}, - {file = "safetensors-0.4.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bbae3b4b9d997971431c346edbfe6e41e98424a097860ee872721e176040a893"}, - {file = "safetensors-0.4.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01e4b22e3284cd866edeabe4f4d896229495da457229408d2e1e4810c5187121"}, - {file = "safetensors-0.4.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0dd37306546b58d3043eb044c8103a02792cc024b51d1dd16bd3dd1f334cb3ed"}, - {file = "safetensors-0.4.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d8815b5e1dac85fc534a97fd339e12404db557878c090f90442247e87c8aeaea"}, - {file = "safetensors-0.4.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e011cc162503c19f4b1fd63dfcddf73739c7a243a17dac09b78e57a00983ab35"}, - {file = "safetensors-0.4.3-cp39-none-win32.whl", hash = "sha256:01feb3089e5932d7e662eda77c3ecc389f97c0883c4a12b5cfdc32b589a811c3"}, - {file = "safetensors-0.4.3-cp39-none-win_amd64.whl", hash = "sha256:3f9cdca09052f585e62328c1c2923c70f46814715c795be65f0b93f57ec98a02"}, - {file = "safetensors-0.4.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:1b89381517891a7bb7d1405d828b2bf5d75528299f8231e9346b8eba092227f9"}, - {file = "safetensors-0.4.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:cd6fff9e56df398abc5866b19a32124815b656613c1c5ec0f9350906fd798aac"}, - {file = "safetensors-0.4.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:840caf38d86aa7014fe37ade5d0d84e23dcfbc798b8078015831996ecbc206a3"}, - {file = "safetensors-0.4.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9650713b2cfa9537a2baf7dd9fee458b24a0aaaa6cafcea8bdd5fb2b8efdc34"}, - {file = "safetensors-0.4.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e4119532cd10dba04b423e0f86aecb96cfa5a602238c0aa012f70c3a40c44b50"}, - {file = "safetensors-0.4.3-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:e066e8861eef6387b7c772344d1fe1f9a72800e04ee9a54239d460c400c72aab"}, - {file = "safetensors-0.4.3-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:90964917f5b0fa0fa07e9a051fbef100250c04d150b7026ccbf87a34a54012e0"}, - {file = "safetensors-0.4.3-pp37-pypy37_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c41e1893d1206aa7054029681778d9a58b3529d4c807002c156d58426c225173"}, - {file = "safetensors-0.4.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ae7613a119a71a497d012ccc83775c308b9c1dab454806291427f84397d852fd"}, - {file = "safetensors-0.4.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f9bac020faba7f5dc481e881b14b6425265feabb5bfc552551d21189c0eddc3"}, - {file = "safetensors-0.4.3-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:420a98f593ff9930f5822560d14c395ccbc57342ddff3b463bc0b3d6b1951550"}, - {file = "safetensors-0.4.3-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:f5e6883af9a68c0028f70a4c19d5a6ab6238a379be36ad300a22318316c00cb0"}, - {file = "safetensors-0.4.3-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:cdd0a3b5da66e7f377474599814dbf5cbf135ff059cc73694de129b58a5e8a2c"}, - {file = "safetensors-0.4.3-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:9bfb92f82574d9e58401d79c70c716985dc049b635fef6eecbb024c79b2c46ad"}, - {file = "safetensors-0.4.3-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:3615a96dd2dcc30eb66d82bc76cda2565f4f7bfa89fcb0e31ba3cea8a1a9ecbb"}, - {file = "safetensors-0.4.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:868ad1b6fc41209ab6bd12f63923e8baeb1a086814cb2e81a65ed3d497e0cf8f"}, - {file = "safetensors-0.4.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7ffba80aa49bd09195145a7fd233a7781173b422eeb995096f2b30591639517"}, - {file = "safetensors-0.4.3-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c0acbe31340ab150423347e5b9cc595867d814244ac14218932a5cf1dd38eb39"}, - {file = "safetensors-0.4.3-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:19bbdf95de2cf64f25cd614c5236c8b06eb2cfa47cbf64311f4b5d80224623a3"}, - {file = "safetensors-0.4.3-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:b852e47eb08475c2c1bd8131207b405793bfc20d6f45aff893d3baaad449ed14"}, - {file = "safetensors-0.4.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5d07cbca5b99babb692d76d8151bec46f461f8ad8daafbfd96b2fca40cadae65"}, - {file = "safetensors-0.4.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:1ab6527a20586d94291c96e00a668fa03f86189b8a9defa2cdd34a1a01acc7d5"}, - {file = "safetensors-0.4.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02318f01e332cc23ffb4f6716e05a492c5f18b1d13e343c49265149396284a44"}, - {file = "safetensors-0.4.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec4b52ce9a396260eb9731eb6aea41a7320de22ed73a1042c2230af0212758ce"}, - {file = "safetensors-0.4.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:018b691383026a2436a22b648873ed11444a364324e7088b99cd2503dd828400"}, - {file = "safetensors-0.4.3-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:309b10dbcab63269ecbf0e2ca10ce59223bb756ca5d431ce9c9eeabd446569da"}, - {file = "safetensors-0.4.3-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:b277482120df46e27a58082df06a15aebda4481e30a1c21eefd0921ae7e03f65"}, - {file = "safetensors-0.4.3.tar.gz", hash = "sha256:2f85fc50c4e07a21e95c24e07460fe6f7e2859d0ce88092838352b798ce711c2"}, + {file = "safetensors-0.4.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2adb497ada13097f30e386e88c959c0fda855a5f6f98845710f5bb2c57e14f12"}, + {file = "safetensors-0.4.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7db7fdc2d71fd1444d85ca3f3d682ba2df7d61a637dfc6d80793f439eae264ab"}, + {file = "safetensors-0.4.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d4f0eed76b430f009fbefca1a0028ddb112891b03cb556d7440d5cd68eb89a9"}, + {file = "safetensors-0.4.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:57d216fab0b5c432aabf7170883d7c11671622bde8bd1436c46d633163a703f6"}, + {file = "safetensors-0.4.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7d9b76322e49c056bcc819f8bdca37a2daa5a6d42c07f30927b501088db03309"}, + {file = "safetensors-0.4.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:32f0d1f6243e90ee43bc6ee3e8c30ac5b09ca63f5dd35dbc985a1fc5208c451a"}, + {file = "safetensors-0.4.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44d464bdc384874601a177375028012a5f177f1505279f9456fea84bbc575c7f"}, + {file = "safetensors-0.4.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:63144e36209ad8e4e65384dbf2d52dd5b1866986079c00a72335402a38aacdc5"}, + {file = "safetensors-0.4.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:051d5ecd490af7245258000304b812825974d5e56f14a3ff7e1b8b2ba6dc2ed4"}, + {file = "safetensors-0.4.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:51bc8429d9376224cd3cf7e8ce4f208b4c930cd10e515b6ac6a72cbc3370f0d9"}, + {file = "safetensors-0.4.4-cp310-none-win32.whl", hash = "sha256:fb7b54830cee8cf9923d969e2df87ce20e625b1af2fd194222ab902d3adcc29c"}, + {file = "safetensors-0.4.4-cp310-none-win_amd64.whl", hash = "sha256:4b3e8aa8226d6560de8c2b9d5ff8555ea482599c670610758afdc97f3e021e9c"}, + {file = "safetensors-0.4.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:bbaa31f2cb49013818bde319232ccd72da62ee40f7d2aa532083eda5664e85ff"}, + {file = "safetensors-0.4.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9fdcb80f4e9fbb33b58e9bf95e7dbbedff505d1bcd1c05f7c7ce883632710006"}, + {file = "safetensors-0.4.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55c14c20be247b8a1aeaf3ab4476265e3ca83096bb8e09bb1a7aa806088def4f"}, + {file = "safetensors-0.4.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:949aaa1118660f992dbf0968487b3e3cfdad67f948658ab08c6b5762e90cc8b6"}, + {file = "safetensors-0.4.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c11a4ab7debc456326a2bac67f35ee0ac792bcf812c7562a4a28559a5c795e27"}, + {file = "safetensors-0.4.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c0cea44bba5c5601b297bc8307e4075535b95163402e4906b2e9b82788a2a6df"}, + {file = "safetensors-0.4.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9d752c97f6bbe327352f76e5b86442d776abc789249fc5e72eacb49e6916482"}, + {file = "safetensors-0.4.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:03f2bb92e61b055ef6cc22883ad1ae898010a95730fa988c60a23800eb742c2c"}, + {file = "safetensors-0.4.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:87bf3f91a9328a941acc44eceffd4e1f5f89b030985b2966637e582157173b98"}, + {file = "safetensors-0.4.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:20d218ec2b6899d29d6895419a58b6e44cc5ff8f0cc29fac8d236a8978ab702e"}, + {file = "safetensors-0.4.4-cp311-none-win32.whl", hash = "sha256:8079486118919f600c603536e2490ca37b3dbd3280e3ad6eaacfe6264605ac8a"}, + {file = "safetensors-0.4.4-cp311-none-win_amd64.whl", hash = "sha256:2f8c2eb0615e2e64ee27d478c7c13f51e5329d7972d9e15528d3e4cfc4a08f0d"}, + {file = "safetensors-0.4.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:baec5675944b4a47749c93c01c73d826ef7d42d36ba8d0dba36336fa80c76426"}, + {file = "safetensors-0.4.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f15117b96866401825f3e94543145028a2947d19974429246ce59403f49e77c6"}, + {file = "safetensors-0.4.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a13a9caea485df164c51be4eb0c87f97f790b7c3213d635eba2314d959fe929"}, + {file = "safetensors-0.4.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6b54bc4ca5f9b9bba8cd4fb91c24b2446a86b5ae7f8975cf3b7a277353c3127c"}, + {file = "safetensors-0.4.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:08332c22e03b651c8eb7bf5fc2de90044f3672f43403b3d9ac7e7e0f4f76495e"}, + {file = "safetensors-0.4.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bb62841e839ee992c37bb75e75891c7f4904e772db3691c59daaca5b4ab960e1"}, + {file = "safetensors-0.4.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e5b927acc5f2f59547270b0309a46d983edc44be64e1ca27a7fcb0474d6cd67"}, + {file = "safetensors-0.4.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2a69c71b1ae98a8021a09a0b43363b0143b0ce74e7c0e83cacba691b62655fb8"}, + {file = "safetensors-0.4.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:23654ad162c02a5636f0cd520a0310902c4421aab1d91a0b667722a4937cc445"}, + {file = "safetensors-0.4.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:0677c109d949cf53756859160b955b2e75b0eefe952189c184d7be30ecf7e858"}, + {file = "safetensors-0.4.4-cp312-none-win32.whl", hash = "sha256:a51d0ddd4deb8871c6de15a772ef40b3dbd26a3c0451bb9e66bc76fc5a784e5b"}, + {file = "safetensors-0.4.4-cp312-none-win_amd64.whl", hash = "sha256:2d065059e75a798bc1933c293b68d04d79b586bb7f8c921e0ca1e82759d0dbb1"}, + {file = "safetensors-0.4.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:9d625692578dd40a112df30c02a1adf068027566abd8e6a74893bb13d441c150"}, + {file = "safetensors-0.4.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7cabcf39c81e5b988d0adefdaea2eb9b4fd9bd62d5ed6559988c62f36bfa9a89"}, + {file = "safetensors-0.4.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8359bef65f49d51476e9811d59c015f0ddae618ee0e44144f5595278c9f8268c"}, + {file = "safetensors-0.4.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1a32c662e7df9226fd850f054a3ead0e4213a96a70b5ce37b2d26ba27004e013"}, + {file = "safetensors-0.4.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c329a4dcc395364a1c0d2d1574d725fe81a840783dda64c31c5a60fc7d41472c"}, + {file = "safetensors-0.4.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:239ee093b1db877c9f8fe2d71331a97f3b9c7c0d3ab9f09c4851004a11f44b65"}, + {file = "safetensors-0.4.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd574145d930cf9405a64f9923600879a5ce51d9f315443a5f706374841327b6"}, + {file = "safetensors-0.4.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f6784eed29f9e036acb0b7769d9e78a0dc2c72c2d8ba7903005350d817e287a4"}, + {file = "safetensors-0.4.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:65a4a6072436bf0a4825b1c295d248cc17e5f4651e60ee62427a5bcaa8622a7a"}, + {file = "safetensors-0.4.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:df81e3407630de060ae8313da49509c3caa33b1a9415562284eaf3d0c7705f9f"}, + {file = "safetensors-0.4.4-cp37-cp37m-macosx_10_12_x86_64.whl", hash = "sha256:e4a0f374200e8443d9746e947ebb346c40f83a3970e75a685ade0adbba5c48d9"}, + {file = "safetensors-0.4.4-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:181fb5f3dee78dae7fd7ec57d02e58f7936498d587c6b7c1c8049ef448c8d285"}, + {file = "safetensors-0.4.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb4ac1d8f6b65ec84ddfacd275079e89d9df7c92f95675ba96c4f790a64df6e"}, + {file = "safetensors-0.4.4-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:76897944cd9239e8a70955679b531b9a0619f76e25476e57ed373322d9c2075d"}, + {file = "safetensors-0.4.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2a9e9d1a27e51a0f69e761a3d581c3af46729ec1c988fa1f839e04743026ae35"}, + {file = "safetensors-0.4.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:005ef9fc0f47cb9821c40793eb029f712e97278dae84de91cb2b4809b856685d"}, + {file = "safetensors-0.4.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26987dac3752688c696c77c3576f951dbbdb8c57f0957a41fb6f933cf84c0b62"}, + {file = "safetensors-0.4.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c05270b290acd8d249739f40d272a64dd597d5a4b90f27d830e538bc2549303c"}, + {file = "safetensors-0.4.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:068d3a33711fc4d93659c825a04480ff5a3854e1d78632cdc8f37fee917e8a60"}, + {file = "safetensors-0.4.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:063421ef08ca1021feea8b46951251b90ae91f899234dd78297cbe7c1db73b99"}, + {file = "safetensors-0.4.4-cp37-none-win32.whl", hash = "sha256:d52f5d0615ea83fd853d4e1d8acf93cc2e0223ad4568ba1e1f6ca72e94ea7b9d"}, + {file = "safetensors-0.4.4-cp37-none-win_amd64.whl", hash = "sha256:88a5ac3280232d4ed8e994cbc03b46a1807ce0aa123867b40c4a41f226c61f94"}, + {file = "safetensors-0.4.4-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:3467ab511bfe3360967d7dc53b49f272d59309e57a067dd2405b4d35e7dcf9dc"}, + {file = "safetensors-0.4.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2ab4c96d922e53670ce25fbb9b63d5ea972e244de4fa1dd97b590d9fd66aacef"}, + {file = "safetensors-0.4.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87df18fce4440477c3ef1fd7ae17c704a69a74a77e705a12be135ee0651a0c2d"}, + {file = "safetensors-0.4.4-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0e5fe345b2bc7d88587149ac11def1f629d2671c4c34f5df38aed0ba59dc37f8"}, + {file = "safetensors-0.4.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9f1a3e01dce3cd54060791e7e24588417c98b941baa5974700eeb0b8eb65b0a0"}, + {file = "safetensors-0.4.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c6bf35e9a8998d8339fd9a05ac4ce465a4d2a2956cc0d837b67c4642ed9e947"}, + {file = "safetensors-0.4.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:166c0c52f6488b8538b2a9f3fbc6aad61a7261e170698779b371e81b45f0440d"}, + {file = "safetensors-0.4.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:87e9903b8668a16ef02c08ba4ebc91e57a49c481e9b5866e31d798632805014b"}, + {file = "safetensors-0.4.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a9c421153aa23c323bd8483d4155b4eee82c9a50ac11cccd83539104a8279c64"}, + {file = "safetensors-0.4.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a4b8617499b2371c7353302c5116a7e0a3a12da66389ce53140e607d3bf7b3d3"}, + {file = "safetensors-0.4.4-cp38-none-win32.whl", hash = "sha256:c6280f5aeafa1731f0a3709463ab33d8e0624321593951aefada5472f0b313fd"}, + {file = "safetensors-0.4.4-cp38-none-win_amd64.whl", hash = "sha256:6ceed6247fc2d33b2a7b7d25d8a0fe645b68798856e0bc7a9800c5fd945eb80f"}, + {file = "safetensors-0.4.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:5cf6c6f6193797372adf50c91d0171743d16299491c75acad8650107dffa9269"}, + {file = "safetensors-0.4.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:419010156b914a3e5da4e4adf992bee050924d0fe423c4b329e523e2c14c3547"}, + {file = "safetensors-0.4.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88f6fd5a5c1302ce79993cc5feeadcc795a70f953c762544d01fb02b2db4ea33"}, + {file = "safetensors-0.4.4-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d468cffb82d90789696d5b4d8b6ab8843052cba58a15296691a7a3df55143cd2"}, + {file = "safetensors-0.4.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9353c2af2dd467333d4850a16edb66855e795561cd170685178f706c80d2c71e"}, + {file = "safetensors-0.4.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:83c155b4a33368d9b9c2543e78f2452090fb030c52401ca608ef16fa58c98353"}, + {file = "safetensors-0.4.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9850754c434e636ce3dc586f534bb23bcbd78940c304775bee9005bf610e98f1"}, + {file = "safetensors-0.4.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:275f500b4d26f67b6ec05629a4600645231bd75e4ed42087a7c1801bff04f4b3"}, + {file = "safetensors-0.4.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5c2308de665b7130cd0e40a2329278226e4cf083f7400c51ca7e19ccfb3886f3"}, + {file = "safetensors-0.4.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e06a9ebc8656e030ccfe44634f2a541b4b1801cd52e390a53ad8bacbd65f8518"}, + {file = "safetensors-0.4.4-cp39-none-win32.whl", hash = "sha256:ef73df487b7c14b477016947c92708c2d929e1dee2bacdd6fff5a82ed4539537"}, + {file = "safetensors-0.4.4-cp39-none-win_amd64.whl", hash = "sha256:83d054818a8d1198d8bd8bc3ea2aac112a2c19def2bf73758321976788706398"}, + {file = "safetensors-0.4.4-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:1d1f34c71371f0e034004a0b583284b45d233dd0b5f64a9125e16b8a01d15067"}, + {file = "safetensors-0.4.4-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:1a8043a33d58bc9b30dfac90f75712134ca34733ec3d8267b1bd682afe7194f5"}, + {file = "safetensors-0.4.4-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8db8f0c59c84792c12661f8efa85de160f80efe16b87a9d5de91b93f9e0bce3c"}, + {file = "safetensors-0.4.4-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cfc1fc38e37630dd12d519bdec9dcd4b345aec9930bb9ce0ed04461f49e58b52"}, + {file = "safetensors-0.4.4-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e5c9d86d9b13b18aafa88303e2cd21e677f5da2a14c828d2c460fe513af2e9a5"}, + {file = "safetensors-0.4.4-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:43251d7f29a59120a26f5a0d9583b9e112999e500afabcfdcb91606d3c5c89e3"}, + {file = "safetensors-0.4.4-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:2c42e9b277513b81cf507e6121c7b432b3235f980cac04f39f435b7902857f91"}, + {file = "safetensors-0.4.4-pp37-pypy37_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3daacc9a4e3f428a84dd56bf31f20b768eb0b204af891ed68e1f06db9edf546f"}, + {file = "safetensors-0.4.4-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:218bbb9b883596715fc9997bb42470bf9f21bb832c3b34c2bf744d6fa8f2bbba"}, + {file = "safetensors-0.4.4-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bd5efc26b39f7fc82d4ab1d86a7f0644c8e34f3699c33f85bfa9a717a030e1b"}, + {file = "safetensors-0.4.4-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:56ad9776b65d8743f86698a1973292c966cf3abff627efc44ed60e66cc538ddd"}, + {file = "safetensors-0.4.4-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:30f23e6253c5f43a809dea02dc28a9f5fa747735dc819f10c073fe1b605e97d4"}, + {file = "safetensors-0.4.4-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:5512078d00263de6cb04e9d26c9ae17611098f52357fea856213e38dc462f81f"}, + {file = "safetensors-0.4.4-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:b96c3d9266439d17f35fc2173111d93afc1162f168e95aed122c1ca517b1f8f1"}, + {file = "safetensors-0.4.4-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:08d464aa72a9a13826946b4fb9094bb4b16554bbea2e069e20bd903289b6ced9"}, + {file = "safetensors-0.4.4-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:210160816d5a36cf41f48f38473b6f70d7bcb4b0527bedf0889cc0b4c3bb07db"}, + {file = "safetensors-0.4.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb276a53717f2bcfb6df0bcf284d8a12069002508d4c1ca715799226024ccd45"}, + {file = "safetensors-0.4.4-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a2c28c6487f17d8db0089e8b2cdc13de859366b94cc6cdc50e1b0a4147b56551"}, + {file = "safetensors-0.4.4-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:7915f0c60e4e6e65d90f136d85dd3b429ae9191c36b380e626064694563dbd9f"}, + {file = "safetensors-0.4.4-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:00eea99ae422fbfa0b46065acbc58b46bfafadfcec179d4b4a32d5c45006af6c"}, + {file = "safetensors-0.4.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:bb1ed4fcb0b3c2f3ea2c5767434622fe5d660e5752f21ac2e8d737b1e5e480bb"}, + {file = "safetensors-0.4.4-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:73fc9a0a4343188bdb421783e600bfaf81d0793cd4cce6bafb3c2ed567a74cd5"}, + {file = "safetensors-0.4.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c37e6b714200824c73ca6eaf007382de76f39466a46e97558b8dc4cf643cfbf"}, + {file = "safetensors-0.4.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f75698c5c5c542417ac4956acfc420f7d4a2396adca63a015fd66641ea751759"}, + {file = "safetensors-0.4.4-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ca1a209157f242eb183e209040097118472e169f2e069bfbd40c303e24866543"}, + {file = "safetensors-0.4.4-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:177f2b60a058f92a3cec7a1786c9106c29eca8987ecdfb79ee88126e5f47fa31"}, + {file = "safetensors-0.4.4-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:ee9622e84fe6e4cd4f020e5fda70d6206feff3157731df7151d457fdae18e541"}, + {file = "safetensors-0.4.4.tar.gz", hash = "sha256:5fe3e9b705250d0172ed4e100a811543108653fb2b66b9e702a088ad03772a07"}, ] [package.extras] @@ -4377,60 +4546,60 @@ files = [ [[package]] name = "sqlalchemy" -version = "2.0.31" +version = "2.0.32" description = "Database Abstraction Library" optional = false python-versions = ">=3.7" files = [ - {file = "SQLAlchemy-2.0.31-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f2a213c1b699d3f5768a7272de720387ae0122f1becf0901ed6eaa1abd1baf6c"}, - {file = "SQLAlchemy-2.0.31-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9fea3d0884e82d1e33226935dac990b967bef21315cbcc894605db3441347443"}, - {file = "SQLAlchemy-2.0.31-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3ad7f221d8a69d32d197e5968d798217a4feebe30144986af71ada8c548e9fa"}, - {file = "SQLAlchemy-2.0.31-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f2bee229715b6366f86a95d497c347c22ddffa2c7c96143b59a2aa5cc9eebbc"}, - {file = "SQLAlchemy-2.0.31-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cd5b94d4819c0c89280b7c6109c7b788a576084bf0a480ae17c227b0bc41e109"}, - {file = "SQLAlchemy-2.0.31-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:750900a471d39a7eeba57580b11983030517a1f512c2cb287d5ad0fcf3aebd58"}, - {file = "SQLAlchemy-2.0.31-cp310-cp310-win32.whl", hash = "sha256:7bd112be780928c7f493c1a192cd8c5fc2a2a7b52b790bc5a84203fb4381c6be"}, - {file = "SQLAlchemy-2.0.31-cp310-cp310-win_amd64.whl", hash = "sha256:5a48ac4d359f058474fadc2115f78a5cdac9988d4f99eae44917f36aa1476327"}, - {file = "SQLAlchemy-2.0.31-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f68470edd70c3ac3b6cd5c2a22a8daf18415203ca1b036aaeb9b0fb6f54e8298"}, - {file = "SQLAlchemy-2.0.31-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2e2c38c2a4c5c634fe6c3c58a789712719fa1bf9b9d6ff5ebfce9a9e5b89c1ca"}, - {file = "SQLAlchemy-2.0.31-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd15026f77420eb2b324dcb93551ad9c5f22fab2c150c286ef1dc1160f110203"}, - {file = "SQLAlchemy-2.0.31-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2196208432deebdfe3b22185d46b08f00ac9d7b01284e168c212919891289396"}, - {file = "SQLAlchemy-2.0.31-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:352b2770097f41bff6029b280c0e03b217c2dcaddc40726f8f53ed58d8a85da4"}, - {file = "SQLAlchemy-2.0.31-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:56d51ae825d20d604583f82c9527d285e9e6d14f9a5516463d9705dab20c3740"}, - {file = "SQLAlchemy-2.0.31-cp311-cp311-win32.whl", hash = "sha256:6e2622844551945db81c26a02f27d94145b561f9d4b0c39ce7bfd2fda5776dac"}, - {file = "SQLAlchemy-2.0.31-cp311-cp311-win_amd64.whl", hash = "sha256:ccaf1b0c90435b6e430f5dd30a5aede4764942a695552eb3a4ab74ed63c5b8d3"}, - {file = "SQLAlchemy-2.0.31-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3b74570d99126992d4b0f91fb87c586a574a5872651185de8297c6f90055ae42"}, - {file = "SQLAlchemy-2.0.31-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6f77c4f042ad493cb8595e2f503c7a4fe44cd7bd59c7582fd6d78d7e7b8ec52c"}, - {file = "SQLAlchemy-2.0.31-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd1591329333daf94467e699e11015d9c944f44c94d2091f4ac493ced0119449"}, - {file = "SQLAlchemy-2.0.31-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:74afabeeff415e35525bf7a4ecdab015f00e06456166a2eba7590e49f8db940e"}, - {file = "SQLAlchemy-2.0.31-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b9c01990d9015df2c6f818aa8f4297d42ee71c9502026bb074e713d496e26b67"}, - {file = "SQLAlchemy-2.0.31-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:66f63278db425838b3c2b1c596654b31939427016ba030e951b292e32b99553e"}, - {file = "SQLAlchemy-2.0.31-cp312-cp312-win32.whl", hash = "sha256:0b0f658414ee4e4b8cbcd4a9bb0fd743c5eeb81fc858ca517217a8013d282c96"}, - {file = "SQLAlchemy-2.0.31-cp312-cp312-win_amd64.whl", hash = "sha256:fa4b1af3e619b5b0b435e333f3967612db06351217c58bfb50cee5f003db2a5a"}, - {file = "SQLAlchemy-2.0.31-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f43e93057cf52a227eda401251c72b6fbe4756f35fa6bfebb5d73b86881e59b0"}, - {file = "SQLAlchemy-2.0.31-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d337bf94052856d1b330d5fcad44582a30c532a2463776e1651bd3294ee7e58b"}, - {file = "SQLAlchemy-2.0.31-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c06fb43a51ccdff3b4006aafee9fcf15f63f23c580675f7734245ceb6b6a9e05"}, - {file = "SQLAlchemy-2.0.31-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:b6e22630e89f0e8c12332b2b4c282cb01cf4da0d26795b7eae16702a608e7ca1"}, - {file = "SQLAlchemy-2.0.31-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:79a40771363c5e9f3a77f0e28b3302801db08040928146e6808b5b7a40749c88"}, - {file = "SQLAlchemy-2.0.31-cp37-cp37m-win32.whl", hash = "sha256:501ff052229cb79dd4c49c402f6cb03b5a40ae4771efc8bb2bfac9f6c3d3508f"}, - {file = "SQLAlchemy-2.0.31-cp37-cp37m-win_amd64.whl", hash = "sha256:597fec37c382a5442ffd471f66ce12d07d91b281fd474289356b1a0041bdf31d"}, - {file = "SQLAlchemy-2.0.31-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:dc6d69f8829712a4fd799d2ac8d79bdeff651c2301b081fd5d3fe697bd5b4ab9"}, - {file = "SQLAlchemy-2.0.31-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:23b9fbb2f5dd9e630db70fbe47d963c7779e9c81830869bd7d137c2dc1ad05fb"}, - {file = "SQLAlchemy-2.0.31-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2a21c97efcbb9f255d5c12a96ae14da873233597dfd00a3a0c4ce5b3e5e79704"}, - {file = "SQLAlchemy-2.0.31-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26a6a9837589c42b16693cf7bf836f5d42218f44d198f9343dd71d3164ceeeac"}, - {file = "SQLAlchemy-2.0.31-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:dc251477eae03c20fae8db9c1c23ea2ebc47331bcd73927cdcaecd02af98d3c3"}, - {file = "SQLAlchemy-2.0.31-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:2fd17e3bb8058359fa61248c52c7b09a97cf3c820e54207a50af529876451808"}, - {file = "SQLAlchemy-2.0.31-cp38-cp38-win32.whl", hash = "sha256:c76c81c52e1e08f12f4b6a07af2b96b9b15ea67ccdd40ae17019f1c373faa227"}, - {file = "SQLAlchemy-2.0.31-cp38-cp38-win_amd64.whl", hash = "sha256:4b600e9a212ed59355813becbcf282cfda5c93678e15c25a0ef896b354423238"}, - {file = "SQLAlchemy-2.0.31-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b6cf796d9fcc9b37011d3f9936189b3c8074a02a4ed0c0fbbc126772c31a6d4"}, - {file = "SQLAlchemy-2.0.31-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:78fe11dbe37d92667c2c6e74379f75746dc947ee505555a0197cfba9a6d4f1a4"}, - {file = "SQLAlchemy-2.0.31-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2fc47dc6185a83c8100b37acda27658fe4dbd33b7d5e7324111f6521008ab4fe"}, - {file = "SQLAlchemy-2.0.31-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a41514c1a779e2aa9a19f67aaadeb5cbddf0b2b508843fcd7bafdf4c6864005"}, - {file = "SQLAlchemy-2.0.31-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:afb6dde6c11ea4525318e279cd93c8734b795ac8bb5dda0eedd9ebaca7fa23f1"}, - {file = "SQLAlchemy-2.0.31-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:3f9faef422cfbb8fd53716cd14ba95e2ef655400235c3dfad1b5f467ba179c8c"}, - {file = "SQLAlchemy-2.0.31-cp39-cp39-win32.whl", hash = "sha256:fc6b14e8602f59c6ba893980bea96571dd0ed83d8ebb9c4479d9ed5425d562e9"}, - {file = "SQLAlchemy-2.0.31-cp39-cp39-win_amd64.whl", hash = "sha256:3cb8a66b167b033ec72c3812ffc8441d4e9f5f78f5e31e54dcd4c90a4ca5bebc"}, - {file = "SQLAlchemy-2.0.31-py3-none-any.whl", hash = "sha256:69f3e3c08867a8e4856e92d7afb618b95cdee18e0bc1647b77599722c9a28911"}, - {file = "SQLAlchemy-2.0.31.tar.gz", hash = "sha256:b607489dd4a54de56984a0c7656247504bd5523d9d0ba799aef59d4add009484"}, + {file = "SQLAlchemy-2.0.32-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0c9045ecc2e4db59bfc97b20516dfdf8e41d910ac6fb667ebd3a79ea54084619"}, + {file = "SQLAlchemy-2.0.32-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1467940318e4a860afd546ef61fefb98a14d935cd6817ed07a228c7f7c62f389"}, + {file = "SQLAlchemy-2.0.32-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5954463675cb15db8d4b521f3566a017c8789222b8316b1e6934c811018ee08b"}, + {file = "SQLAlchemy-2.0.32-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:167e7497035c303ae50651b351c28dc22a40bb98fbdb8468cdc971821b1ae533"}, + {file = "SQLAlchemy-2.0.32-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b27dfb676ac02529fb6e343b3a482303f16e6bc3a4d868b73935b8792edb52d0"}, + {file = "SQLAlchemy-2.0.32-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:bf2360a5e0f7bd75fa80431bf8ebcfb920c9f885e7956c7efde89031695cafb8"}, + {file = "SQLAlchemy-2.0.32-cp310-cp310-win32.whl", hash = "sha256:306fe44e754a91cd9d600a6b070c1f2fadbb4a1a257b8781ccf33c7067fd3e4d"}, + {file = "SQLAlchemy-2.0.32-cp310-cp310-win_amd64.whl", hash = "sha256:99db65e6f3ab42e06c318f15c98f59a436f1c78179e6a6f40f529c8cc7100b22"}, + {file = "SQLAlchemy-2.0.32-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:21b053be28a8a414f2ddd401f1be8361e41032d2ef5884b2f31d31cb723e559f"}, + {file = "SQLAlchemy-2.0.32-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b178e875a7a25b5938b53b006598ee7645172fccafe1c291a706e93f48499ff5"}, + {file = "SQLAlchemy-2.0.32-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:723a40ee2cc7ea653645bd4cf024326dea2076673fc9d3d33f20f6c81db83e1d"}, + {file = "SQLAlchemy-2.0.32-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:295ff8689544f7ee7e819529633d058bd458c1fd7f7e3eebd0f9268ebc56c2a0"}, + {file = "SQLAlchemy-2.0.32-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:49496b68cd190a147118af585173ee624114dfb2e0297558c460ad7495f9dfe2"}, + {file = "SQLAlchemy-2.0.32-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:acd9b73c5c15f0ec5ce18128b1fe9157ddd0044abc373e6ecd5ba376a7e5d961"}, + {file = "SQLAlchemy-2.0.32-cp311-cp311-win32.whl", hash = "sha256:9365a3da32dabd3e69e06b972b1ffb0c89668994c7e8e75ce21d3e5e69ddef28"}, + {file = "SQLAlchemy-2.0.32-cp311-cp311-win_amd64.whl", hash = "sha256:8bd63d051f4f313b102a2af1cbc8b80f061bf78f3d5bd0843ff70b5859e27924"}, + {file = "SQLAlchemy-2.0.32-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6bab3db192a0c35e3c9d1560eb8332463e29e5507dbd822e29a0a3c48c0a8d92"}, + {file = "SQLAlchemy-2.0.32-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:19d98f4f58b13900d8dec4ed09dd09ef292208ee44cc9c2fe01c1f0a2fe440e9"}, + {file = "SQLAlchemy-2.0.32-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cd33c61513cb1b7371fd40cf221256456d26a56284e7d19d1f0b9f1eb7dd7e8"}, + {file = "SQLAlchemy-2.0.32-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d6ba0497c1d066dd004e0f02a92426ca2df20fac08728d03f67f6960271feec"}, + {file = "SQLAlchemy-2.0.32-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2b6be53e4fde0065524f1a0a7929b10e9280987b320716c1509478b712a7688c"}, + {file = "SQLAlchemy-2.0.32-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:916a798f62f410c0b80b63683c8061f5ebe237b0f4ad778739304253353bc1cb"}, + {file = "SQLAlchemy-2.0.32-cp312-cp312-win32.whl", hash = "sha256:31983018b74908ebc6c996a16ad3690301a23befb643093fcfe85efd292e384d"}, + {file = "SQLAlchemy-2.0.32-cp312-cp312-win_amd64.whl", hash = "sha256:4363ed245a6231f2e2957cccdda3c776265a75851f4753c60f3004b90e69bfeb"}, + {file = "SQLAlchemy-2.0.32-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b8afd5b26570bf41c35c0121801479958b4446751a3971fb9a480c1afd85558e"}, + {file = "SQLAlchemy-2.0.32-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c750987fc876813f27b60d619b987b057eb4896b81117f73bb8d9918c14f1cad"}, + {file = "SQLAlchemy-2.0.32-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ada0102afff4890f651ed91120c1120065663506b760da4e7823913ebd3258be"}, + {file = "SQLAlchemy-2.0.32-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:78c03d0f8a5ab4f3034c0e8482cfcc415a3ec6193491cfa1c643ed707d476f16"}, + {file = "SQLAlchemy-2.0.32-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:3bd1cae7519283ff525e64645ebd7a3e0283f3c038f461ecc1c7b040a0c932a1"}, + {file = "SQLAlchemy-2.0.32-cp37-cp37m-win32.whl", hash = "sha256:01438ebcdc566d58c93af0171c74ec28efe6a29184b773e378a385e6215389da"}, + {file = "SQLAlchemy-2.0.32-cp37-cp37m-win_amd64.whl", hash = "sha256:4979dc80fbbc9d2ef569e71e0896990bc94df2b9fdbd878290bd129b65ab579c"}, + {file = "SQLAlchemy-2.0.32-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c742be912f57586ac43af38b3848f7688863a403dfb220193a882ea60e1ec3a"}, + {file = "SQLAlchemy-2.0.32-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:62e23d0ac103bcf1c5555b6c88c114089587bc64d048fef5bbdb58dfd26f96da"}, + {file = "SQLAlchemy-2.0.32-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:251f0d1108aab8ea7b9aadbd07fb47fb8e3a5838dde34aa95a3349876b5a1f1d"}, + {file = "SQLAlchemy-2.0.32-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ef18a84e5116340e38eca3e7f9eeaaef62738891422e7c2a0b80feab165905f"}, + {file = "SQLAlchemy-2.0.32-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:3eb6a97a1d39976f360b10ff208c73afb6a4de86dd2a6212ddf65c4a6a2347d5"}, + {file = "SQLAlchemy-2.0.32-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0c1c9b673d21477cec17ab10bc4decb1322843ba35b481585facd88203754fc5"}, + {file = "SQLAlchemy-2.0.32-cp38-cp38-win32.whl", hash = "sha256:c41a2b9ca80ee555decc605bd3c4520cc6fef9abde8fd66b1cf65126a6922d65"}, + {file = "SQLAlchemy-2.0.32-cp38-cp38-win_amd64.whl", hash = "sha256:8a37e4d265033c897892279e8adf505c8b6b4075f2b40d77afb31f7185cd6ecd"}, + {file = "SQLAlchemy-2.0.32-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:52fec964fba2ef46476312a03ec8c425956b05c20220a1a03703537824b5e8e1"}, + {file = "SQLAlchemy-2.0.32-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:328429aecaba2aee3d71e11f2477c14eec5990fb6d0e884107935f7fb6001632"}, + {file = "SQLAlchemy-2.0.32-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85a01b5599e790e76ac3fe3aa2f26e1feba56270023d6afd5550ed63c68552b3"}, + {file = "SQLAlchemy-2.0.32-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aaf04784797dcdf4c0aa952c8d234fa01974c4729db55c45732520ce12dd95b4"}, + {file = "SQLAlchemy-2.0.32-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:4488120becf9b71b3ac718f4138269a6be99a42fe023ec457896ba4f80749525"}, + {file = "SQLAlchemy-2.0.32-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:14e09e083a5796d513918a66f3d6aedbc131e39e80875afe81d98a03312889e6"}, + {file = "SQLAlchemy-2.0.32-cp39-cp39-win32.whl", hash = "sha256:0d322cc9c9b2154ba7e82f7bf25ecc7c36fbe2d82e2933b3642fc095a52cfc78"}, + {file = "SQLAlchemy-2.0.32-cp39-cp39-win_amd64.whl", hash = "sha256:7dd8583df2f98dea28b5cd53a1beac963f4f9d087888d75f22fcc93a07cf8d84"}, + {file = "SQLAlchemy-2.0.32-py3-none-any.whl", hash = "sha256:e567a8793a692451f706b363ccf3c45e056b67d90ead58c3bc9471af5d212202"}, + {file = "SQLAlchemy-2.0.32.tar.gz", hash = "sha256:c1b88cc8b02b6a5f0efb0345a03672d4c897dc7d92585176f88c67346f565ea8"}, ] [package.dependencies] @@ -4511,13 +4680,13 @@ full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart (>=0.0.7 [[package]] name = "sympy" -version = "1.13.0" +version = "1.13.1" description = "Computer algebra system (CAS) in Python" optional = true python-versions = ">=3.8" files = [ - {file = "sympy-1.13.0-py3-none-any.whl", hash = "sha256:6b0b32a4673fb91bd3cac3b55406c8e01d53ae22780be467301cc452f6680c92"}, - {file = "sympy-1.13.0.tar.gz", hash = "sha256:3b6af8f4d008b9a1a6a4268b335b984b23835f26d1d60b0526ebc71d48a25f57"}, + {file = "sympy-1.13.1-py3-none-any.whl", hash = "sha256:db36cdc64bf61b9b24578b6f7bab1ecdd2452cf008f34faa33776680c26d66f8"}, + {file = "sympy-1.13.1.tar.gz", hash = "sha256:9cebf7e04ff162015ce31c9c6c9144daa34a93bd082f54fd8f12deca4f47515f"}, ] [package.dependencies] @@ -4540,19 +4709,6 @@ files = [ [package.extras] widechars = ["wcwidth"] -[[package]] -name = "tbb" -version = "2021.13.0" -description = "Intel® oneAPI Threading Building Blocks (oneTBB)" -optional = true -python-versions = "*" -files = [ - {file = "tbb-2021.13.0-py2.py3-none-manylinux1_i686.whl", hash = "sha256:a2567725329639519d46d92a2634cf61e76601dac2f777a05686fea546c4fe4f"}, - {file = "tbb-2021.13.0-py2.py3-none-manylinux1_x86_64.whl", hash = "sha256:aaf667e92849adb012b8874d6393282afc318aca4407fc62f912ee30a22da46a"}, - {file = "tbb-2021.13.0-py3-none-win32.whl", hash = "sha256:6669d26703e9943f6164c6407bd4a237a45007e79b8d3832fe6999576eaaa9ef"}, - {file = "tbb-2021.13.0-py3-none-win_amd64.whl", hash = "sha256:3528a53e4bbe64b07a6112b4c5a00ff3c61924ee46c9c68e004a1ac7ad1f09c3"}, -] - [[package]] name = "tenacity" version = "8.5.0" @@ -4768,44 +4924,43 @@ files = [ [[package]] name = "torch" -version = "2.3.1" +version = "2.4.0" description = "Tensors and Dynamic neural networks in Python with strong GPU acceleration" optional = true python-versions = ">=3.8.0" files = [ - {file = "torch-2.3.1-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:605a25b23944be5ab7c3467e843580e1d888b8066e5aaf17ff7bf9cc30001cc3"}, - {file = "torch-2.3.1-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:f2357eb0965583a0954d6f9ad005bba0091f956aef879822274b1bcdb11bd308"}, - {file = "torch-2.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:32b05fe0d1ada7f69c9f86c14ff69b0ef1957a5a54199bacba63d22d8fab720b"}, - {file = "torch-2.3.1-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:7c09a94362778428484bcf995f6004b04952106aee0ef45ff0b4bab484f5498d"}, - {file = "torch-2.3.1-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:b2ec81b61bb094ea4a9dee1cd3f7b76a44555375719ad29f05c0ca8ef596ad39"}, - {file = "torch-2.3.1-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:490cc3d917d1fe0bd027057dfe9941dc1d6d8e3cae76140f5dd9a7e5bc7130ab"}, - {file = "torch-2.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:5802530783bd465fe66c2df99123c9a54be06da118fbd785a25ab0a88123758a"}, - {file = "torch-2.3.1-cp311-none-macosx_11_0_arm64.whl", hash = "sha256:a7dd4ed388ad1f3d502bf09453d5fe596c7b121de7e0cfaca1e2017782e9bbac"}, - {file = "torch-2.3.1-cp312-cp312-manylinux1_x86_64.whl", hash = "sha256:a486c0b1976a118805fc7c9641d02df7afbb0c21e6b555d3bb985c9f9601b61a"}, - {file = "torch-2.3.1-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:224259821fe3e4c6f7edf1528e4fe4ac779c77addaa74215eb0b63a5c474d66c"}, - {file = "torch-2.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:e5fdccbf6f1334b2203a61a0e03821d5845f1421defe311dabeae2fc8fbeac2d"}, - {file = "torch-2.3.1-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:3c333dc2ebc189561514eda06e81df22bf8fb64e2384746b2cb9f04f96d1d4c8"}, - {file = "torch-2.3.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:07e9ba746832b8d069cacb45f312cadd8ad02b81ea527ec9766c0e7404bb3feb"}, - {file = "torch-2.3.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:462d1c07dbf6bb5d9d2f3316fee73a24f3d12cd8dacf681ad46ef6418f7f6626"}, - {file = "torch-2.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:ff60bf7ce3de1d43ad3f6969983f321a31f0a45df3690921720bcad6a8596cc4"}, - {file = "torch-2.3.1-cp38-none-macosx_11_0_arm64.whl", hash = "sha256:bee0bd33dc58aa8fc8a7527876e9b9a0e812ad08122054a5bff2ce5abf005b10"}, - {file = "torch-2.3.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:aaa872abde9a3d4f91580f6396d54888620f4a0b92e3976a6034759df4b961ad"}, - {file = "torch-2.3.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:3d7a7f7ef21a7520510553dc3938b0c57c116a7daee20736a9e25cbc0e832bdc"}, - {file = "torch-2.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:4777f6cefa0c2b5fa87223c213e7b6f417cf254a45e5829be4ccd1b2a4ee1011"}, - {file = "torch-2.3.1-cp39-none-macosx_11_0_arm64.whl", hash = "sha256:2bb5af780c55be68fe100feb0528d2edebace1d55cb2e351de735809ba7391eb"}, + {file = "torch-2.4.0-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:4ed94583e244af51d6a8d28701ca5a9e02d1219e782f5a01dd401f90af17d8ac"}, + {file = "torch-2.4.0-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:c4ca297b7bd58b506bfd6e78ffd14eb97c0e7797dcd7965df62f50bb575d8954"}, + {file = "torch-2.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:2497cbc7b3c951d69b276ca51fe01c2865db67040ac67f5fc20b03e41d16ea4a"}, + {file = "torch-2.4.0-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:685418ab93730efbee71528821ff54005596970dd497bf03c89204fb7e3f71de"}, + {file = "torch-2.4.0-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:e743adadd8c8152bb8373543964551a7cb7cc20ba898dc8f9c0cdbe47c283de0"}, + {file = "torch-2.4.0-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:7334325c0292cbd5c2eac085f449bf57d3690932eac37027e193ba775703c9e6"}, + {file = "torch-2.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:97730014da4c57ffacb3c09298c6ce05400606e890bd7a05008d13dd086e46b1"}, + {file = "torch-2.4.0-cp311-none-macosx_11_0_arm64.whl", hash = "sha256:f169b4ea6dc93b3a33319611fcc47dc1406e4dd539844dcbd2dec4c1b96e166d"}, + {file = "torch-2.4.0-cp312-cp312-manylinux1_x86_64.whl", hash = "sha256:997084a0f9784d2a89095a6dc67c7925e21bf25dea0b3d069b41195016ccfcbb"}, + {file = "torch-2.4.0-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:bc3988e8b36d1e8b998d143255d9408d8c75da4ab6dd0dcfd23b623dfb0f0f57"}, + {file = "torch-2.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:3374128bbf7e62cdaed6c237bfd39809fbcfaa576bee91e904706840c3f2195c"}, + {file = "torch-2.4.0-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:91aaf00bfe1ffa44dc5b52809d9a95129fca10212eca3ac26420eb11727c6288"}, + {file = "torch-2.4.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:cc30457ea5489c62747d3306438af00c606b509d78822a88f804202ba63111ed"}, + {file = "torch-2.4.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:a046491aaf96d1215e65e1fa85911ef2ded6d49ea34c8df4d0638879f2402eef"}, + {file = "torch-2.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:688eec9240f3ce775f22e1e1a5ab9894f3d5fe60f3f586deb7dbd23a46a83916"}, + {file = "torch-2.4.0-cp38-none-macosx_11_0_arm64.whl", hash = "sha256:3af4de2a618fb065e78404c4ba27a818a7b7957eaeff28c6c66ce7fb504b68b8"}, + {file = "torch-2.4.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:618808d3f610d5f180e47a697d4ec90b810953bb1e020f424b2ac7fb0884b545"}, + {file = "torch-2.4.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:ed765d232d23566052ba83632ec73a4fccde00b4c94ad45d63b471b09d63b7a7"}, + {file = "torch-2.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:a2feb98ac470109472fb10dfef38622a7ee08482a16c357863ebc7bc7db7c8f7"}, + {file = "torch-2.4.0-cp39-none-macosx_11_0_arm64.whl", hash = "sha256:8940fc8b97a4c61fdb5d46a368f21f4a3a562a17879e932eb51a5ec62310cb31"}, ] [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-cudnn-cu12 = {version = "9.1.0.70", 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\""} @@ -4813,12 +4968,12 @@ nvidia-cusparse-cu12 = {version = "12.1.0.106", markers = "platform_system == \" 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.1", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and python_version < \"3.12\""} +triton = {version = "3.0.0", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and python_version < \"3.13\""} typing-extensions = ">=4.8.0" [package.extras] opt-einsum = ["opt-einsum (>=3.3)"] -optree = ["optree (>=0.9.1)"] +optree = ["optree (>=0.11.0)"] [[package]] name = "tornado" @@ -4842,13 +4997,13 @@ files = [ [[package]] name = "tqdm" -version = "4.66.4" +version = "4.66.5" description = "Fast, Extensible Progress Meter" optional = false python-versions = ">=3.7" files = [ - {file = "tqdm-4.66.4-py3-none-any.whl", hash = "sha256:b75ca56b413b030bc3f00af51fd2c1a1a5eac6a0c1cca83cbb37a5c52abce644"}, - {file = "tqdm-4.66.4.tar.gz", hash = "sha256:e4d936c9de8727928f3be6079590e97d9abfe8d39a590be678eb5919ffc186bb"}, + {file = "tqdm-4.66.5-py3-none-any.whl", hash = "sha256:90279a3770753eafc9194a0364852159802111925aa30eb3f9d85b0e805ac7cd"}, + {file = "tqdm-4.66.5.tar.gz", hash = "sha256:e1020aef2e5096702d8a025ac7d16b1577279c9d63f8375b63083e9a5f0fcbad"}, ] [package.dependencies] @@ -4877,19 +5032,19 @@ test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0, [[package]] name = "transformers" -version = "4.42.4" +version = "4.44.0" description = "State-of-the-art Machine Learning for JAX, PyTorch and TensorFlow" optional = true python-versions = ">=3.8.0" files = [ - {file = "transformers-4.42.4-py3-none-any.whl", hash = "sha256:6d59061392d0f1da312af29c962df9017ff3c0108c681a56d1bc981004d16d24"}, - {file = "transformers-4.42.4.tar.gz", hash = "sha256:f956e25e24df851f650cb2c158b6f4352dfae9d702f04c113ed24fc36ce7ae2d"}, + {file = "transformers-4.44.0-py3-none-any.whl", hash = "sha256:ea0ff72def71e9f4812d9414d4803b22681b1617aa6f511bd51cfff2b44a6fca"}, + {file = "transformers-4.44.0.tar.gz", hash = "sha256:75699495e30b7635ca444d8d372e138c687ab51a875b387e33f1fb759c37f196"}, ] [package.dependencies] filelock = "*" huggingface-hub = ">=0.23.2,<1.0" -numpy = ">=1.17,<2.0" +numpy = ">=1.17" packaging = ">=20.0" pyyaml = ">=5.1" regex = "!=2019.12.17" @@ -4901,15 +5056,15 @@ tqdm = ">=4.27" [package.extras] accelerate = ["accelerate (>=0.21.0)"] agents = ["Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "datasets (!=2.5.0)", "diffusers", "opencv-python", "sentencepiece (>=0.1.91,!=0.1.92)", "torch"] -all = ["Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "av (==9.2.0)", "codecarbon (==1.2.0)", "decord (==0.6.0)", "flax (>=0.4.1,<=0.7.0)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "phonemizer", "protobuf", "pyctcdecode (>=0.4.0)", "ray[tune] (>=2.7.0)", "scipy (<1.13.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timm (<=0.9.16)", "tokenizers (>=0.19,<0.20)", "torch", "torchaudio", "torchvision"] +all = ["Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "av (==9.2.0)", "codecarbon (==1.2.0)", "decord (==0.6.0)", "flax (>=0.4.1,<=0.7.0)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1,<0.14.0)", "librosa", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "phonemizer", "protobuf", "pyctcdecode (>=0.4.0)", "ray[tune] (>=2.7.0)", "scipy (<1.13.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timm (<=0.9.16)", "tokenizers (>=0.19,<0.20)", "torch", "torchaudio", "torchvision"] audio = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"] benchmark = ["optimum-benchmark (>=0.2.0)"] codecarbon = ["codecarbon (==1.2.0)"] deepspeed = ["accelerate (>=0.21.0)", "deepspeed (>=0.9.3)"] -deepspeed-testing = ["GitPython (<3.1.19)", "accelerate (>=0.21.0)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "deepspeed (>=0.9.3)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "nltk", "optuna", "parameterized", "protobuf", "psutil", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.4.4)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "timeout-decorator"] -dev = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "av (==9.2.0)", "beautifulsoup4", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "decord (==0.6.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "flax (>=0.4.1,<=0.7.0)", "fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "nltk", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "ray[tune] (>=2.7.0)", "rhoknp (>=1.1.0,<1.3.1)", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.4.4)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "scipy (<1.13.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timeout-decorator", "timm (<=0.9.16)", "tokenizers (>=0.19,<0.20)", "torch", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"] -dev-tensorflow = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "isort (>=5.5.4)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "nltk", "onnxconverter-common", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.4.4)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timeout-decorator", "tokenizers (>=0.19,<0.20)", "urllib3 (<2.0.0)"] -dev-torch = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "beautifulsoup4", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "kenlm", "librosa", "nltk", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "ray[tune] (>=2.7.0)", "rhoknp (>=1.1.0,<1.3.1)", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.4.4)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "timeout-decorator", "timm (<=0.9.16)", "tokenizers (>=0.19,<0.20)", "torch", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"] +deepspeed-testing = ["GitPython (<3.1.19)", "accelerate (>=0.21.0)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "deepspeed (>=0.9.3)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "nltk", "optuna", "parameterized", "protobuf", "psutil", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "timeout-decorator"] +dev = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "av (==9.2.0)", "beautifulsoup4", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "decord (==0.6.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "flax (>=0.4.1,<=0.7.0)", "fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1,<0.14.0)", "librosa", "nltk", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "ray[tune] (>=2.7.0)", "rhoknp (>=1.1.0,<1.3.1)", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "scipy (<1.13.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timeout-decorator", "timm (<=0.9.16)", "tokenizers (>=0.19,<0.20)", "torch", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"] +dev-tensorflow = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "isort (>=5.5.4)", "kenlm", "keras-nlp (>=0.3.1,<0.14.0)", "librosa", "nltk", "onnxconverter-common", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timeout-decorator", "tokenizers (>=0.19,<0.20)", "urllib3 (<2.0.0)"] +dev-torch = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "beautifulsoup4", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "kenlm", "librosa", "nltk", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "ray[tune] (>=2.7.0)", "rhoknp (>=1.1.0,<1.3.1)", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "timeout-decorator", "timm (<=0.9.16)", "tokenizers (>=0.19,<0.20)", "torch", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"] flax = ["flax (>=0.4.1,<=0.7.0)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "optax (>=0.0.8,<=0.1.4)", "scipy (<1.13.0)"] flax-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"] ftfy = ["ftfy"] @@ -4920,42 +5075,46 @@ natten = ["natten (>=0.14.6,<0.15.0)"] onnx = ["onnxconverter-common", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "tf2onnx"] onnxruntime = ["onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)"] optuna = ["optuna"] -quality = ["GitPython (<3.1.19)", "datasets (!=2.5.0)", "isort (>=5.5.4)", "ruff (==0.4.4)", "urllib3 (<2.0.0)"] +quality = ["GitPython (<3.1.19)", "datasets (!=2.5.0)", "isort (>=5.5.4)", "ruff (==0.5.1)", "urllib3 (<2.0.0)"] ray = ["ray[tune] (>=2.7.0)"] retrieval = ["datasets (!=2.5.0)", "faiss-cpu"] -ruff = ["ruff (==0.4.4)"] +ruff = ["ruff (==0.5.1)"] sagemaker = ["sagemaker (>=2.31.0)"] sentencepiece = ["protobuf", "sentencepiece (>=0.1.91,!=0.1.92)"] serving = ["fastapi", "pydantic", "starlette", "uvicorn"] sigopt = ["sigopt"] sklearn = ["scikit-learn"] speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)", "torchaudio"] -testing = ["GitPython (<3.1.19)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "nltk", "parameterized", "psutil", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.4.4)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "timeout-decorator"] -tf = ["keras-nlp (>=0.3.1)", "onnxconverter-common", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx"] -tf-cpu = ["keras (>2.9,<2.16)", "keras-nlp (>=0.3.1)", "onnxconverter-common", "tensorflow-cpu (>2.9,<2.16)", "tensorflow-probability (<0.24)", "tensorflow-text (<2.16)", "tf2onnx"] +testing = ["GitPython (<3.1.19)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "nltk", "parameterized", "psutil", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "timeout-decorator"] +tf = ["keras-nlp (>=0.3.1,<0.14.0)", "onnxconverter-common", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx"] +tf-cpu = ["keras (>2.9,<2.16)", "keras-nlp (>=0.3.1,<0.14.0)", "onnxconverter-common", "tensorflow-cpu (>2.9,<2.16)", "tensorflow-probability (<0.24)", "tensorflow-text (<2.16)", "tf2onnx"] tf-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"] timm = ["timm (<=0.9.16)"] tokenizers = ["tokenizers (>=0.19,<0.20)"] torch = ["accelerate (>=0.21.0)", "torch"] torch-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)", "torchaudio"] torch-vision = ["Pillow (>=10.0.1,<=15.0)", "torchvision"] -torchhub = ["filelock", "huggingface-hub (>=0.23.2,<1.0)", "importlib-metadata", "numpy (>=1.17,<2.0)", "packaging (>=20.0)", "protobuf", "regex (!=2019.12.17)", "requests", "sentencepiece (>=0.1.91,!=0.1.92)", "tokenizers (>=0.19,<0.20)", "torch", "tqdm (>=4.27)"] +torchhub = ["filelock", "huggingface-hub (>=0.23.2,<1.0)", "importlib-metadata", "numpy (>=1.17)", "packaging (>=20.0)", "protobuf", "regex (!=2019.12.17)", "requests", "sentencepiece (>=0.1.91,!=0.1.92)", "tokenizers (>=0.19,<0.20)", "torch", "tqdm (>=4.27)"] video = ["av (==9.2.0)", "decord (==0.6.0)"] vision = ["Pillow (>=10.0.1,<=15.0)"] [[package]] name = "triton" -version = "2.3.1" +version = "3.0.0" description = "A language and compiler for custom Deep Learning operations" optional = true python-versions = "*" files = [ - {file = "triton-2.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c84595cbe5e546b1b290d2a58b1494df5a2ef066dd890655e5b8a8a92205c33"}, - {file = "triton-2.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9d64ae33bcb3a7a18081e3a746e8cf87ca8623ca13d2c362413ce7a486f893e"}, - {file = "triton-2.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eaf80e8761a9e3498aa92e7bf83a085b31959c61f5e8ac14eedd018df6fccd10"}, - {file = "triton-2.3.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b13bf35a2b659af7159bf78e92798dc62d877aa991de723937329e2d382f1991"}, - {file = "triton-2.3.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63381e35ded3304704ea867ffde3b7cfc42c16a55b3062d41e017ef510433d66"}, - {file = "triton-2.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d968264523c7a07911c8fb51b4e0d1b920204dae71491b1fe7b01b62a31e124"}, + {file = "triton-3.0.0-1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e1efef76935b2febc365bfadf74bcb65a6f959a9872e5bddf44cc9e0adce1e1a"}, + {file = "triton-3.0.0-1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5ce8520437c602fb633f1324cc3871c47bee3b67acf9756c1a66309b60e3216c"}, + {file = "triton-3.0.0-1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:34e509deb77f1c067d8640725ef00c5cbfcb2052a1a3cb6a6d343841f92624eb"}, + {file = "triton-3.0.0-1-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bcbf3b1c48af6a28011a5c40a5b3b9b5330530c3827716b5fbf6d7adcc1e53e9"}, + {file = "triton-3.0.0-1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6e5727202f7078c56f91ff13ad0c1abab14a0e7f2c87e91b12b6f64f3e8ae609"}, + {file = "triton-3.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39b052da883351fdf6be3d93cedae6db3b8e3988d3b09ed221bccecfa9612230"}, + {file = "triton-3.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cd34f19a8582af96e6291d4afce25dac08cb2a5d218c599163761e8e0827208e"}, + {file = "triton-3.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d5e10de8c011adeb7c878c6ce0dd6073b14367749e34467f1cff2bde1b78253"}, + {file = "triton-3.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e8903767951bf86ec960b4fe4e21bc970055afc65e9d57e916d79ae3c93665e3"}, + {file = "triton-3.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41004fb1ae9a53fcb3e970745feb87f0e3c94c6ce1ba86e95fa3b8537894bef7"}, ] [package.dependencies] @@ -4963,8 +5122,8 @@ filelock = "*" [package.extras] build = ["cmake (>=3.20)", "lit"] -tests = ["autopep8", "flake8", "isort", "numpy", "pytest", "scipy (>=1.7.1)", "torch"] -tutorials = ["matplotlib", "pandas", "tabulate", "torch"] +tests = ["autopep8", "flake8", "isort", "llnl-hatchet", "numpy", "pytest", "scipy (>=1.7.1)"] +tutorials = ["matplotlib", "pandas", "tabulate"] [[package]] name = "typer" @@ -5003,13 +5162,13 @@ types-setuptools = "*" [[package]] name = "types-pyopenssl" -version = "24.1.0.20240425" +version = "24.1.0.20240722" description = "Typing stubs for pyOpenSSL" optional = false python-versions = ">=3.8" files = [ - {file = "types-pyOpenSSL-24.1.0.20240425.tar.gz", hash = "sha256:0a7e82626c1983dc8dc59292bf20654a51c3c3881bcbb9b337c1da6e32f0204e"}, - {file = "types_pyOpenSSL-24.1.0.20240425-py3-none-any.whl", hash = "sha256:f51a156835555dd2a1f025621e8c4fbe7493470331afeef96884d1d29bf3a473"}, + {file = "types-pyOpenSSL-24.1.0.20240722.tar.gz", hash = "sha256:47913b4678a01d879f503a12044468221ed8576263c1540dcb0484ca21b08c39"}, + {file = "types_pyOpenSSL-24.1.0.20240722-py3-none-any.whl", hash = "sha256:6a7a5d2ec042537934cfb4c9d4deb0e16c4c6250b09358df1f083682fe6fda54"}, ] [package.dependencies] @@ -5018,13 +5177,13 @@ types-cffi = "*" [[package]] name = "types-redis" -version = "4.6.0.20240425" +version = "4.6.0.20240806" description = "Typing stubs for redis" optional = false python-versions = ">=3.8" files = [ - {file = "types-redis-4.6.0.20240425.tar.gz", hash = "sha256:9402a10ee931d241fdfcc04592ebf7a661d7bb92a8dea631279f0d8acbcf3a22"}, - {file = "types_redis-4.6.0.20240425-py3-none-any.whl", hash = "sha256:ac5bc19e8f5997b9e76ad5d9cf15d0392d9f28cf5fc7746ea4a64b989c45c6a8"}, + {file = "types-redis-4.6.0.20240806.tar.gz", hash = "sha256:60dd02c2b91ea2d42ad079ac58dedc31d71d6eedb1c21d3796811b02baac655d"}, + {file = "types_redis-4.6.0.20240806-py3-none-any.whl", hash = "sha256:9d8fbe0ce37e3660c0a06982db7812384295d10a93d637c7f8604a2f3c88b0e6"}, ] [package.dependencies] @@ -5047,13 +5206,13 @@ urllib3 = ">=2" [[package]] name = "types-setuptools" -version = "71.1.0.20240724" +version = "71.1.0.20240806" description = "Typing stubs for setuptools" optional = false python-versions = ">=3.8" files = [ - {file = "types-setuptools-71.1.0.20240724.tar.gz", hash = "sha256:ae61c528111a9450e149aedbc1ab0f7874f9bb0dc8f14c3cd200a1f82457050b"}, - {file = "types_setuptools-71.1.0.20240724-py3-none-any.whl", hash = "sha256:90570f0578ed67bb25ada9b3d1432e6727178d2408a7051b27e4a712731df30a"}, + {file = "types-setuptools-71.1.0.20240806.tar.gz", hash = "sha256:ae5e7b4d643ab9e99fc00ac00041804118cabe72a56183c30d524fb064897ad6"}, + {file = "types_setuptools-71.1.0.20240806-py3-none-any.whl", hash = "sha256:3bd8dd02039be0bb79ad880d8893b8eefcb022fabbeeb61245c61b20c9ab1ed0"}, ] [[package]] From 2c2bcabb57cf28c16a9fb1fe41062ed3bb597b8f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Aug 2024 14:22:09 -0400 Subject: [PATCH 20/43] Bump pydantic from 1.10.12 to 1.10.17 (#168) Bumps [pydantic](https://github.com/pydantic/pydantic) from 1.10.12 to 1.10.17. - [Release notes](https://github.com/pydantic/pydantic/releases) - [Changelog](https://github.com/pydantic/pydantic/blob/main/HISTORY.md) - [Commits](https://github.com/pydantic/pydantic/compare/v1.10.12...v1.10.17) --- updated-dependencies: - dependency-name: pydantic dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 138 +++++++++++++++++++++---------------------------- pyproject.toml | 2 +- 2 files changed, 60 insertions(+), 80 deletions(-) diff --git a/poetry.lock b/poetry.lock index 8f9f9b8d8..359b39e29 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2040,30 +2040,6 @@ async-timeout = {version = ">=4.0.0,<5.0.0", markers = "python_version < \"3.11\ langchain-core = ">=0.2.7,<0.3.0" langchain-text-splitters = ">=0.2.0,<0.3.0" langsmith = ">=0.1.17,<0.2.0" -numpy = {version = ">=1.26.0,<2.0.0", markers = "python_version >= \"3.12\""} -pydantic = ">=1,<3" -PyYAML = ">=5.3" -requests = ">=2,<3" -SQLAlchemy = ">=1.4,<3" -tenacity = ">=8.1.0,<9.0.0" - -[[package]] -name = "langchain" -version = "0.2.12" -description = "Building applications with LLMs through composability" -optional = false -python-versions = "<4.0,>=3.8.1" -files = [ - {file = "langchain-0.2.12-py3-none-any.whl", hash = "sha256:565d2f5df1c06815d1c684400218ec4ae5e1027887aad343226fad846c54e726"}, - {file = "langchain-0.2.12.tar.gz", hash = "sha256:fe7bd409c133017446fec54c38a5e7cb14f74e020090d7b5065374badf71e6d1"}, -] - -[package.dependencies] -aiohttp = ">=3.8.3,<4.0.0" -async-timeout = {version = ">=4.0.0,<5.0.0", markers = "python_version < \"3.11\""} -langchain-core = ">=0.2.27,<0.3.0" -langchain-text-splitters = ">=0.2.0,<0.3.0" -langsmith = ">=0.1.17,<0.2.0" numpy = [ {version = ">=1,<2", markers = "python_version < \"3.12\""}, {version = ">=1.26.0,<2.0.0", markers = "python_version >= \"3.12\""}, @@ -2072,7 +2048,7 @@ pydantic = ">=1,<3" PyYAML = ">=5.3" requests = ">=2,<3" SQLAlchemy = ">=1.4,<3" -tenacity = ">=8.1.0,<8.4.0 || >8.4.0,<9.0.0" +tenacity = ">=8.1.0,<9.0.0" [[package]] name = "langchain-core" @@ -2129,22 +2105,6 @@ langchain-core = ">=0.2.2,<0.3" openai = ">=1.32.0,<2.0.0" tiktoken = ">=0.7,<1" -[[package]] -name = "langchain-openai" -version = "0.1.21" -description = "An integration package connecting OpenAI and LangChain" -optional = false -python-versions = "<4.0,>=3.8.1" -files = [ - {file = "langchain_openai-0.1.21-py3-none-any.whl", hash = "sha256:44420f0c84859ae236a80c8ac8754a16d5b660c24377c27ba98308145d346352"}, - {file = "langchain_openai-0.1.21.tar.gz", hash = "sha256:2c65feaf12bb284eccf7bce35725fd06f3035fa751babad6aa84af2f99867f88"}, -] - -[package.dependencies] -langchain-core = ">=0.2.29,<0.3.0" -openai = ">=1.40.0,<2.0.0" -tiktoken = ">=0.7,<1" - [[package]] name = "langchain-text-splitters" version = "0.2.1" @@ -3430,6 +3390,19 @@ files = [ {file = "pyarrow-17.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:392bc9feabc647338e6c89267635e111d71edad5fcffba204425a7c8d13610d7"}, {file = "pyarrow-17.0.0-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:af5ff82a04b2171415f1410cff7ebb79861afc5dae50be73ce06d6e870615204"}, {file = "pyarrow-17.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:edca18eaca89cd6382dfbcff3dd2d87633433043650c07375d095cd3517561d8"}, + {file = "pyarrow-17.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7c7916bff914ac5d4a8fe25b7a25e432ff921e72f6f2b7547d1e325c1ad9d155"}, + {file = "pyarrow-17.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f553ca691b9e94b202ff741bdd40f6ccb70cdd5fbf65c187af132f1317de6145"}, + {file = "pyarrow-17.0.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:0cdb0e627c86c373205a2f94a510ac4376fdc523f8bb36beab2e7f204416163c"}, + {file = "pyarrow-17.0.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:d7d192305d9d8bc9082d10f361fc70a73590a4c65cf31c3e6926cd72b76bc35c"}, + {file = "pyarrow-17.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:02dae06ce212d8b3244dd3e7d12d9c4d3046945a5933d28026598e9dbbda1fca"}, + {file = "pyarrow-17.0.0-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:13d7a460b412f31e4c0efa1148e1d29bdf18ad1411eb6757d38f8fbdcc8645fb"}, + {file = "pyarrow-17.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9b564a51fbccfab5a04a80453e5ac6c9954a9c5ef2890d1bcf63741909c3f8df"}, + {file = "pyarrow-17.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:32503827abbc5aadedfa235f5ece8c4f8f8b0a3cf01066bc8d29de7539532687"}, + {file = "pyarrow-17.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a155acc7f154b9ffcc85497509bcd0d43efb80d6f733b0dc3bb14e281f131c8b"}, + {file = "pyarrow-17.0.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:dec8d129254d0188a49f8a1fc99e0560dc1b85f60af729f47de4046015f9b0a5"}, + {file = "pyarrow-17.0.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:a48ddf5c3c6a6c505904545c25a4ae13646ae1f8ba703c4df4a1bfe4f4006bda"}, + {file = "pyarrow-17.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:42bf93249a083aca230ba7e2786c5f673507fa97bbd9725a1e2754715151a204"}, + {file = "pyarrow-17.0.0.tar.gz", hash = "sha256:4beca9521ed2c0921c1023e68d097d0299b62c362639ea315572a58f3f50fd28"}, ] [package.dependencies] @@ -3487,47 +3460,54 @@ files = [ [[package]] name = "pydantic" -version = "1.10.12" +version = "1.10.17" description = "Data validation and settings management using python type hints" optional = false python-versions = ">=3.7" files = [ - {file = "pydantic-1.10.12-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a1fcb59f2f355ec350073af41d927bf83a63b50e640f4dbaa01053a28b7a7718"}, - {file = "pydantic-1.10.12-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b7ccf02d7eb340b216ec33e53a3a629856afe1c6e0ef91d84a4e6f2fb2ca70fe"}, - {file = "pydantic-1.10.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8fb2aa3ab3728d950bcc885a2e9eff6c8fc40bc0b7bb434e555c215491bcf48b"}, - {file = "pydantic-1.10.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:771735dc43cf8383959dc9b90aa281f0b6092321ca98677c5fb6125a6f56d58d"}, - {file = "pydantic-1.10.12-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ca48477862372ac3770969b9d75f1bf66131d386dba79506c46d75e6b48c1e09"}, - {file = "pydantic-1.10.12-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a5e7add47a5b5a40c49b3036d464e3c7802f8ae0d1e66035ea16aa5b7a3923ed"}, - {file = "pydantic-1.10.12-cp310-cp310-win_amd64.whl", hash = "sha256:e4129b528c6baa99a429f97ce733fff478ec955513630e61b49804b6cf9b224a"}, - {file = "pydantic-1.10.12-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b0d191db0f92dfcb1dec210ca244fdae5cbe918c6050b342d619c09d31eea0cc"}, - {file = "pydantic-1.10.12-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:795e34e6cc065f8f498c89b894a3c6da294a936ee71e644e4bd44de048af1405"}, - {file = "pydantic-1.10.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69328e15cfda2c392da4e713443c7dbffa1505bc9d566e71e55abe14c97ddc62"}, - {file = "pydantic-1.10.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2031de0967c279df0d8a1c72b4ffc411ecd06bac607a212892757db7462fc494"}, - {file = "pydantic-1.10.12-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:ba5b2e6fe6ca2b7e013398bc7d7b170e21cce322d266ffcd57cca313e54fb246"}, - {file = "pydantic-1.10.12-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2a7bac939fa326db1ab741c9d7f44c565a1d1e80908b3797f7f81a4f86bc8d33"}, - {file = "pydantic-1.10.12-cp311-cp311-win_amd64.whl", hash = "sha256:87afda5539d5140cb8ba9e8b8c8865cb5b1463924d38490d73d3ccfd80896b3f"}, - {file = "pydantic-1.10.12-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:549a8e3d81df0a85226963611950b12d2d334f214436a19537b2efed61b7639a"}, - {file = "pydantic-1.10.12-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:598da88dfa127b666852bef6d0d796573a8cf5009ffd62104094a4fe39599565"}, - {file = "pydantic-1.10.12-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba5c4a8552bff16c61882db58544116d021d0b31ee7c66958d14cf386a5b5350"}, - {file = "pydantic-1.10.12-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c79e6a11a07da7374f46970410b41d5e266f7f38f6a17a9c4823db80dadf4303"}, - {file = "pydantic-1.10.12-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ab26038b8375581dc832a63c948f261ae0aa21f1d34c1293469f135fa92972a5"}, - {file = "pydantic-1.10.12-cp37-cp37m-win_amd64.whl", hash = "sha256:e0a16d274b588767602b7646fa05af2782576a6cf1022f4ba74cbb4db66f6ca8"}, - {file = "pydantic-1.10.12-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6a9dfa722316f4acf4460afdf5d41d5246a80e249c7ff475c43a3a1e9d75cf62"}, - {file = "pydantic-1.10.12-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a73f489aebd0c2121ed974054cb2759af8a9f747de120acd2c3394cf84176ccb"}, - {file = "pydantic-1.10.12-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b30bcb8cbfccfcf02acb8f1a261143fab622831d9c0989707e0e659f77a18e0"}, - {file = "pydantic-1.10.12-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2fcfb5296d7877af406ba1547dfde9943b1256d8928732267e2653c26938cd9c"}, - {file = "pydantic-1.10.12-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2f9a6fab5f82ada41d56b0602606a5506aab165ca54e52bc4545028382ef1c5d"}, - {file = "pydantic-1.10.12-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:dea7adcc33d5d105896401a1f37d56b47d443a2b2605ff8a969a0ed5543f7e33"}, - {file = "pydantic-1.10.12-cp38-cp38-win_amd64.whl", hash = "sha256:1eb2085c13bce1612da8537b2d90f549c8cbb05c67e8f22854e201bde5d98a47"}, - {file = "pydantic-1.10.12-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ef6c96b2baa2100ec91a4b428f80d8f28a3c9e53568219b6c298c1125572ebc6"}, - {file = "pydantic-1.10.12-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6c076be61cd0177a8433c0adcb03475baf4ee91edf5a4e550161ad57fc90f523"}, - {file = "pydantic-1.10.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d5a58feb9a39f481eda4d5ca220aa8b9d4f21a41274760b9bc66bfd72595b86"}, - {file = "pydantic-1.10.12-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5f805d2d5d0a41633651a73fa4ecdd0b3d7a49de4ec3fadf062fe16501ddbf1"}, - {file = "pydantic-1.10.12-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:1289c180abd4bd4555bb927c42ee42abc3aee02b0fb2d1223fb7c6e5bef87dbe"}, - {file = "pydantic-1.10.12-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5d1197e462e0364906cbc19681605cb7c036f2475c899b6f296104ad42b9f5fb"}, - {file = "pydantic-1.10.12-cp39-cp39-win_amd64.whl", hash = "sha256:fdbdd1d630195689f325c9ef1a12900524dceb503b00a987663ff4f58669b93d"}, - {file = "pydantic-1.10.12-py3-none-any.whl", hash = "sha256:b749a43aa51e32839c9d71dc67eb1e4221bb04af1033a32e3923d46f9effa942"}, - {file = "pydantic-1.10.12.tar.gz", hash = "sha256:0fe8a415cea8f340e7a9af9c54fc71a649b43e8ca3cc732986116b3cb135d303"}, + {file = "pydantic-1.10.17-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0fa51175313cc30097660b10eec8ca55ed08bfa07acbfe02f7a42f6c242e9a4b"}, + {file = "pydantic-1.10.17-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c7e8988bb16988890c985bd2093df9dd731bfb9d5e0860db054c23034fab8f7a"}, + {file = "pydantic-1.10.17-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:371dcf1831f87c9e217e2b6a0c66842879a14873114ebb9d0861ab22e3b5bb1e"}, + {file = "pydantic-1.10.17-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4866a1579c0c3ca2c40575398a24d805d4db6cb353ee74df75ddeee3c657f9a7"}, + {file = "pydantic-1.10.17-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:543da3c6914795b37785703ffc74ba4d660418620cc273490d42c53949eeeca6"}, + {file = "pydantic-1.10.17-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7623b59876f49e61c2e283551cc3647616d2fbdc0b4d36d3d638aae8547ea681"}, + {file = "pydantic-1.10.17-cp310-cp310-win_amd64.whl", hash = "sha256:409b2b36d7d7d19cd8310b97a4ce6b1755ef8bd45b9a2ec5ec2b124db0a0d8f3"}, + {file = "pydantic-1.10.17-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fa43f362b46741df8f201bf3e7dff3569fa92069bcc7b4a740dea3602e27ab7a"}, + {file = "pydantic-1.10.17-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2a72d2a5ff86a3075ed81ca031eac86923d44bc5d42e719d585a8eb547bf0c9b"}, + {file = "pydantic-1.10.17-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4ad32aed3bf5eea5ca5decc3d1bbc3d0ec5d4fbcd72a03cdad849458decbc63"}, + {file = "pydantic-1.10.17-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aeb4e741782e236ee7dc1fb11ad94dc56aabaf02d21df0e79e0c21fe07c95741"}, + {file = "pydantic-1.10.17-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d2f89a719411cb234105735a520b7c077158a81e0fe1cb05a79c01fc5eb59d3c"}, + {file = "pydantic-1.10.17-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:db3b48d9283d80a314f7a682f7acae8422386de659fffaba454b77a083c3937d"}, + {file = "pydantic-1.10.17-cp311-cp311-win_amd64.whl", hash = "sha256:9c803a5113cfab7bbb912f75faa4fc1e4acff43e452c82560349fff64f852e1b"}, + {file = "pydantic-1.10.17-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:820ae12a390c9cbb26bb44913c87fa2ff431a029a785642c1ff11fed0a095fcb"}, + {file = "pydantic-1.10.17-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c1e51d1af306641b7d1574d6d3307eaa10a4991542ca324f0feb134fee259815"}, + {file = "pydantic-1.10.17-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e53fb834aae96e7b0dadd6e92c66e7dd9cdf08965340ed04c16813102a47fab"}, + {file = "pydantic-1.10.17-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e2495309b1266e81d259a570dd199916ff34f7f51f1b549a0d37a6d9b17b4dc"}, + {file = "pydantic-1.10.17-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:098ad8de840c92ea586bf8efd9e2e90c6339d33ab5c1cfbb85be66e4ecf8213f"}, + {file = "pydantic-1.10.17-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:525bbef620dac93c430d5d6bdbc91bdb5521698d434adf4434a7ef6ffd5c4b7f"}, + {file = "pydantic-1.10.17-cp312-cp312-win_amd64.whl", hash = "sha256:6654028d1144df451e1da69a670083c27117d493f16cf83da81e1e50edce72ad"}, + {file = "pydantic-1.10.17-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c87cedb4680d1614f1d59d13fea353faf3afd41ba5c906a266f3f2e8c245d655"}, + {file = "pydantic-1.10.17-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11289fa895bcbc8f18704efa1d8020bb9a86314da435348f59745473eb042e6b"}, + {file = "pydantic-1.10.17-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:94833612d6fd18b57c359a127cbfd932d9150c1b72fea7c86ab58c2a77edd7c7"}, + {file = "pydantic-1.10.17-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:d4ecb515fa7cb0e46e163ecd9d52f9147ba57bc3633dca0e586cdb7a232db9e3"}, + {file = "pydantic-1.10.17-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:7017971ffa7fd7808146880aa41b266e06c1e6e12261768a28b8b41ba55c8076"}, + {file = "pydantic-1.10.17-cp37-cp37m-win_amd64.whl", hash = "sha256:e840e6b2026920fc3f250ea8ebfdedf6ea7a25b77bf04c6576178e681942ae0f"}, + {file = "pydantic-1.10.17-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bfbb18b616abc4df70591b8c1ff1b3eabd234ddcddb86b7cac82657ab9017e33"}, + {file = "pydantic-1.10.17-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ebb249096d873593e014535ab07145498957091aa6ae92759a32d40cb9998e2e"}, + {file = "pydantic-1.10.17-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8c209af63ccd7b22fba94b9024e8b7fd07feffee0001efae50dd99316b27768"}, + {file = "pydantic-1.10.17-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d4b40c9e13a0b61583e5599e7950490c700297b4a375b55b2b592774332798b7"}, + {file = "pydantic-1.10.17-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c31d281c7485223caf6474fc2b7cf21456289dbaa31401844069b77160cab9c7"}, + {file = "pydantic-1.10.17-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ae5184e99a060a5c80010a2d53c99aee76a3b0ad683d493e5f0620b5d86eeb75"}, + {file = "pydantic-1.10.17-cp38-cp38-win_amd64.whl", hash = "sha256:ad1e33dc6b9787a6f0f3fd132859aa75626528b49cc1f9e429cdacb2608ad5f0"}, + {file = "pydantic-1.10.17-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7e17c0ee7192e54a10943f245dc79e36d9fe282418ea05b886e1c666063a7b54"}, + {file = "pydantic-1.10.17-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cafb9c938f61d1b182dfc7d44a7021326547b7b9cf695db5b68ec7b590214773"}, + {file = "pydantic-1.10.17-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95ef534e3c22e5abbdbdd6f66b6ea9dac3ca3e34c5c632894f8625d13d084cbe"}, + {file = "pydantic-1.10.17-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62d96b8799ae3d782df7ec9615cb59fc32c32e1ed6afa1b231b0595f6516e8ab"}, + {file = "pydantic-1.10.17-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ab2f976336808fd5d539fdc26eb51f9aafc1f4b638e212ef6b6f05e753c8011d"}, + {file = "pydantic-1.10.17-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b8ad363330557beac73159acfbeed220d5f1bfcd6b930302a987a375e02f74fd"}, + {file = "pydantic-1.10.17-cp39-cp39-win_amd64.whl", hash = "sha256:48db882e48575ce4b39659558b2f9f37c25b8d348e37a2b4e32971dd5a7d6227"}, + {file = "pydantic-1.10.17-py3-none-any.whl", hash = "sha256:e41b5b973e5c64f674b3b4720286ded184dcc26a691dd55f34391c62c6934688"}, + {file = "pydantic-1.10.17.tar.gz", hash = "sha256:f434160fb14b353caf634149baaf847206406471ba70e64657c1e8330277a991"}, ] [package.dependencies] @@ -5564,4 +5544,4 @@ groq = ["groq"] [metadata] lock-version = "2.0" python-versions = ">=3.10, <3.13" -content-hash = "46f06ba2d1a106c857592b1f0a4f03719effaf03f8f508d37d29c11de42c5d8f" +content-hash = "69fd61177c570c03ca7d2910b99d45b64f5dcc2beaa78d32ffcec9d796b16b3b" diff --git a/pyproject.toml b/pyproject.toml index 177d5ce18..2ac440e74 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,7 +18,7 @@ redis-om = "^0.2.1" gin-config = "^0.5.0" absl-py = "^2.0.0" together = "^0.2.4" -pydantic = "1.10.12" +pydantic = "1.10.17" beartype = "^0.14.0" langchain-openai = "~0.1.8" litellm = ">=1.23.12,<1.41.0" From f928f89c3e5bf79275d51db8676160d92db81411 Mon Sep 17 00:00:00 2001 From: Xuhui Zhou Date: Mon, 12 Aug 2024 12:22:23 -0700 Subject: [PATCH 21/43] Improve the docs and sync with dev (#166) * git ignore * add nextra site * change path to docs * Add installation instruction (#76) * fix an accordion bug * Add tabs for choosing platform in Redis Instructions * bump the version, test release to PyPi * Update README.md * Update README.md * Update README.md * add platform tab * updated open in colab instruction * bumpy version to 0.0.9 * Update Sotopia presentation information in README.md * bump version to 0.0.10 * bump version * update agents * add merge release back to main action * change checkout v4->v3 * fix merge-back-to-main and pin mypy to <1.11.0 * better visual and new installation guide * update first sentence * improve first sentence * examples in menu * add docs * chore: Update documentation and remove unused files * update generation doc * update database documentation * update database * update readme --------- Co-authored-by: Hao --- README.md | 153 +----------------- docs/pages/_meta.json | 50 +++--- docs/pages/concepts/agents.md | 71 ++++++++ docs/pages/concepts/database.md | 146 +++++++++++++++++ docs/pages/{ => concepts}/environments.md | 0 docs/pages/concepts/generation.md | 72 +++++++++ .../pages/{agents.md => concepts/messages.md} | 0 docs/pages/{xml.md => concepts/renderers.md} | 0 docs/pages/contribution/contribution.md | 17 ++ docs/pages/{ => examples}/benchmark.md | 0 docs/pages/{ => examples}/examples.mdx | 0 docs/pages/examples/experiment.md | 27 ++++ docs/pages/{ => examples}/scripts.md | 0 docs/pages/{ => examples}/simulation_modes.md | 0 docs/pages/{ => examples}/troubleshooting.md | 4 +- docs/pages/generation.md | 16 -- docs/pages/hyperparameters.md | 6 - docs/pages/index.mdx | 38 ++--- docs/public/ClashDisplay-Semibold.otf | Bin 0 -> 27116 bytes docs/styles/globals.css | 111 +++++++------ docs/tailwind.config.ts | 3 + docs/theme.config.jsx | 25 ++- sotopia/generation_utils/generate.py | 26 --- 23 files changed, 453 insertions(+), 312 deletions(-) create mode 100644 docs/pages/concepts/agents.md create mode 100644 docs/pages/concepts/database.md rename docs/pages/{ => concepts}/environments.md (100%) create mode 100644 docs/pages/concepts/generation.md rename docs/pages/{agents.md => concepts/messages.md} (100%) rename docs/pages/{xml.md => concepts/renderers.md} (100%) create mode 100644 docs/pages/contribution/contribution.md rename docs/pages/{ => examples}/benchmark.md (100%) rename docs/pages/{ => examples}/examples.mdx (100%) create mode 100644 docs/pages/examples/experiment.md rename docs/pages/{ => examples}/scripts.md (100%) rename docs/pages/{ => examples}/simulation_modes.md (100%) rename docs/pages/{ => examples}/troubleshooting.md (93%) delete mode 100644 docs/pages/generation.md delete mode 100644 docs/pages/hyperparameters.md create mode 100644 docs/public/ClashDisplay-Semibold.otf diff --git a/README.md b/README.md index fd231cf2c..fc7353266 100644 --- a/README.md +++ b/README.md @@ -45,57 +45,24 @@ Sotopia is an open-ended social learning environment that allows agents to inter ## Help See [documentation](https://docs.sotopia.world) for more details. - ## Get started -### Use on Google Colab - -If you want to try it out on Google Colab first, please check out our Colab Tutorial Series: - -
    -
  1. Basic -
      -
    1. 1.1 Playing with Sotopia in a Google Colab Notebook
    2. -
    3. 1.2 Browsing sotopia data
    4. -
    -
  2. -
  3. -Building your own social agent (coming soon!) -
  4. -
### Install locally -This package supports Python 3.11 and above. In one line, -`pip install sotopia` or `pip install uv; uv pip install sotopia`. - -Or from scratch, use a virtual environment, e.g. with anaconda3: `conda create -n sotopia python=3.11; conda activate sotopia; curl -sSL https://install.python-poetry.org | python3`. Then, install the requirements and this package. -```bash -poetry install -``` - -OpenAI key is required to run the code. Please set the environment variable `OPENAI_API_KEY` to your key. The recommend way is to add the key to the conda environment: -```bash -conda env config vars set OPENAI_API_KEY=your_key -``` +We recommend using a virtual environment, e.g. with anaconda3: `conda create -n sotopia python=3.11; conda activate sotopia; curl -sSL https://install.python-poetry.org | python3`. -For some experiments, TogetherAI key is required to run the code. Please set the environment variable `TOGETHER_API_KEY` to your key. The recommend way is to add the key to the conda environment: -```bash -conda env config vars set TOGETHER_API_KEY=your_key -``` +Then: +`python -m pip install sotopia; sotopia install` -A redis-stack server is required to run the code. Please follow the [instruction](https://redis.io/docs/stack/get-started/install/docker/) to start a redis-stack server or use an existing server. You can also check [Q&A](/docs/troubleshooting.md) to initiate the redis server with the Sotopia data. +This will setup the necessary environment variables and download the necessary data. -The `REDIS_OM_URL` need to be set before loading and saving agents: -```bash -conda env config vars set REDIS_OM_URL="redis://user:password@host:port" -``` +> [!TIP] +> Having trouble installing? Or don't want to install redis for now? We are working on a public redis server for you to use. Stay tuned! -Make a folder to store the logs: +OpenAI key is required to run the code. Please set the environment variable `OPENAI_API_KEY` to your key. The recommend way is to add the key to the conda environment: ```bash -mkdir logs +conda env config vars set OPENAI_API_KEY=your_key ``` - - ## Easy Sample Server You can view an episode demo with default parameters with the following: ```python @@ -118,107 +85,3 @@ or run ```bash python examples/minimalist_demo.py ``` - -## Contribution -#### Install dev options -Follow the installation instruction above and then, instead of running `python -m pip install -e .`, run the following commands: - -```bash -python -m pip install -e ".[dev]" -mypy --install-types --non-interactive sotopia -python -m pip install pre-commit -pre-commit install -``` -#### New branch for each feature -`git checkout -b feature/feature-name` and PR to `main` branch. -#### Before committing -Run `pytest` to make sure all tests pass (this will ensure dynamic typing passed with beartype) and `mypy --strict .` to check static typing. -(You can also run `pre-commit run --all-files` to run all checks) -#### Check github action result -Check the github action result to make sure all tests pass. If not, fix the errors and push again. - -## Running Experiments -We use `gin-config` to configure the experiments. You don't need to be an expert to use it. The basic syntax is -```bash -python --gin_file --gin_file '--gin.PARAM1=value1' '--gin.PARAM2=value2' -``` -The `--gin_file` is used to load and compose the default configuration. The `--gin.PARAM1=value1` is used to overwrite the default configuration. The later configuration will always overwrite the previous one. - -Here is an example of running an experiment: - -```bash -python examples/experiment_eval.py --gin_file sotopia_conf/generation_utils_conf/generate.gin --gin_file sotopia_conf/server_conf/server.gin --gin_file sotopia_conf/run_async_server_in_batch.gin '--gin.ENV_IDS=["01H7VFHPDZVVCDZR3AARA547CY"]' '--gin.AGENT1_MODEL="gpt-4"' '--gin.BATCH_SIZE=20' '--gin.PUSH_TO_DB=False' '--gin.TAG="test"' -``` -For the complete set of parameters, please check the `sotopia_conf` folder. - -To run a large batch of environments, you can change the `ENV_IDS` parameter in `sotopia_conf/run_async_server_in_batch.gin` to a list of environment ids. When `gin.ENV_IDS==[]`, all environments on the DB will be used. - -## Custom OPENAI API URL -To use a custom API url for agent models, you can set `AGENT1_MODEL` to the following format: -```python -"custom/{model_name}@{base_url}" -``` - -As an example, if you use vllm to expose an OpenAI API: -```bash -python -m vllm.entrypoints.openai.api_server --model facebook/opt-125m -``` - -The `gin.AGENT1_MODEL` should be set to: -```python -"custom/facebook/opt-125m@http://localhost:8000/v1" -``` - -If your API requires a token, you can set the environment variable `CUSTOM_API_KEY` to your key. - -As another example, if your vllm API requires a token: - -```bash -python -m vllm.entrypoints.openai.api_server --model facebook/opt-125m --api_key hello -``` -You could set the environment variable `CUSTOM_API_KEY` to `hello`. - -## Getting access to your simulation -After running experiments, you can go to the `examples/redis_stats.ipynb` notebook to check the existing episodes (Episode Log section), as well as calculate the performance. - -For the original Sotopia simulation in our paper's experiments, you can find how to get them in the [Q&A](/docs/troubleshooting.md) section in the `./docs` folder. - -## Adding new characters and environments -You can use the following function with the `**kwargs` being the properties of the `AgentProfile` class. This is the same for the scenarios/environments. -```python -class AgentProfile(JsonModel): - first_name: str = Field(index=True) - last_name: str = Field(index=True) - age: int = Field(index=True, default_factory=lambda: 0) - occupation: str = Field(index=True, default_factory=lambda: "") - gender: str = Field(index=True, default_factory=lambda: "") - gender_pronoun: str = Field(index=True, default_factory=lambda: "") - public_info: str = Field(index=True, default_factory=lambda: "") - big_five: str = Field(index=True, default_factory=lambda: "") - moral_values: list[str] = Field(index=False, default_factory=lambda: []) - schwartz_personal_values: list[str] = Field(index=False, default_factory=lambda: []) - personality_and_values: str = Field(index=True, default_factory=lambda: "") - decision_making_style: str = Field(index=True, default_factory=lambda: "") - secret: str = Field(default_factory=lambda: "") - model_id: str = Field(default_factory=lambda: "") - -class EnvironmentProfile(JsonModel): - codename: str = Field(...) - source: str = Field(...) - scenario: str = Field(...) - agent_goals: list[str] = Field(...) - ... -``` - -```python - -from sotopia.database.persistent_profile import AgentProfile, EnvironmentProfile - -def add_agent_to_database(**kwargs: dict[str, Any]) -> None: - agent = AgentProfile(**kwargs) - agent.save() - -def add_env_profile(**kwargs: dict[str, Any]) -> None: - env_profile = EnvironmentProfile(**kwargs) - env_profile.save() -``` diff --git a/docs/pages/_meta.json b/docs/pages/_meta.json index f96af59dc..57189d534 100644 --- a/docs/pages/_meta.json +++ b/docs/pages/_meta.json @@ -1,37 +1,23 @@ { "index": { - "type": "page", - "title": "Home" - }, - "contribution_menu": { - "title": "Documentation", - "type": "menu", - "items": { - "agents": { - "title": "Agents", - "href": "/agents" - }, - "environments": { - "title": "Environments", - "href": "/environments" - }, - "examples": { - "title": "Examples", - "href": "/examples" - }, - "hyperparameters": { - "title": "Hyperparameters", - "href": "/hyperparameters" - }, - "scripts": { - "title": "Scripts", - "href": "/scripts" - }, - "xml": { - "title": "XML Formatter", - "href": "/xml" - - } + "title": "Introduction", + "theme": { + "breadcrumb": true } + }, + "---": { + "type": "separator" + }, + "concepts": { + "title": "Concepts", + "type": "page" + }, + "examples": { + "title": "Examples", + "type": "page" + }, + "contribution": { + "title": "Contribution", + "type": "page" } } diff --git a/docs/pages/concepts/agents.md b/docs/pages/concepts/agents.md new file mode 100644 index 000000000..c01d03203 --- /dev/null +++ b/docs/pages/concepts/agents.md @@ -0,0 +1,71 @@ +## Agents +Sotopia supports a variety of agents that can support social simulations for a variety of purposes. + +### LLMAgent + +LLMAgent is the core agent that is powered by a large language model +```python +class LLMAgent(BaseAgent[Observation, AgentAction]): + def __init__( + self, + agent_name: str | None = None, + uuid_str: str | None = None, + agent_profile: AgentProfile | None = None, + model_name: str = "gpt-3.5-turbo", + script_like: bool = False, + ) -> None: +``` + +### ScriptWritingAgent +Script Writing Agent is an agent that is specialized in writing scripts of social interactions. It is a subclass of LLMAgent and supports the investigation of [*Is this the real life? Is this just fantasy? The Misleading Success of Simulating Social Interactions With LLMs*](https://arxiv.org/abs/2403.05020) + +```python +class ScriptWritingAgent(LLMAgent): + def __init__( + self, + agent_name: str | None = None, + uuid_str: str | None = None, + agent_profile: AgentProfile | None = None, + model_name: str = "gpt-3.5-turbo", + agent_names: list[str] = [], + background: ScriptBackground | None = None, + ) -> None: +``` + +### HumanAgent +This agent allows for human input to be used in the simulation through the command line. +```python +class HumanAgent(BaseAgent[Observation, AgentAction]): + """ + A human agent that takes input from the command line. + """ + + def __init__( + self, + agent_name: str | None = None, + uuid_str: str | None = None, + agent_profile: AgentProfile | None = None, + ) -> None: + super().__init__( + agent_name=agent_name, + uuid_str=uuid_str, + agent_profile=agent_profile, + ) + self.model_name: LLM_Name = "human" +``` + +### RedisAgent + +RedisAgent is an agent that can be used to interact with the Redis database. +```python +class RedisAgent(BaseAgent[Observation, AgentAction]): + """An agent use redis as a message broker.""" + + def __init__( + self, + agent_name: str | None = None, + uuid_str: str | None = None, + session_id: str | None = None, + agent_profile: AgentProfile | None = None, + ) -> None: +``` diff --git a/docs/pages/concepts/database.md b/docs/pages/concepts/database.md new file mode 100644 index 000000000..be1c8235f --- /dev/null +++ b/docs/pages/concepts/database.md @@ -0,0 +1,146 @@ +## Adding new characters and environments +You can use the following function with the `**kwargs` being the properties of the `AgentProfile` class. This is the same for the scenarios/environments. +```python +class AgentProfile(JsonModel): + first_name: str = Field(index=True) + last_name: str = Field(index=True) + age: int = Field(index=True, default_factory=lambda: 0) + occupation: str = Field(index=True, default_factory=lambda: "") + gender: str = Field(index=True, default_factory=lambda: "") + gender_pronoun: str = Field(index=True, default_factory=lambda: "") + public_info: str = Field(index=True, default_factory=lambda: "") + big_five: str = Field(index=True, default_factory=lambda: "") + moral_values: list[str] = Field(index=False, default_factory=lambda: []) + schwartz_personal_values: list[str] = Field(index=False, default_factory=lambda: []) + personality_and_values: str = Field(index=True, default_factory=lambda: "") + decision_making_style: str = Field(index=True, default_factory=lambda: "") + secret: str = Field(default_factory=lambda: "") + model_id: str = Field(default_factory=lambda: "") + +class EnvironmentProfile(JsonModel): + codename: str = Field(...) + source: str = Field(...) + scenario: str = Field(...) + agent_goals: list[str] = Field(...) + ... +``` + +```python + +from sotopia.database.persistent_profile import AgentProfile, EnvironmentProfile + +def add_agent_to_database(**kwargs: dict[str, Any]) -> None: + agent = AgentProfile(**kwargs) + agent.save() + +def add_env_profile(**kwargs: dict[str, Any]) -> None: + env_profile = EnvironmentProfile(**kwargs) + env_profile.save() +``` + +## EpisodeLog + +### Class Overview + +The `EpisodeLog` class logs and validates episodes in a simulated environment with multiple agents. + +#### Attributes + +- **environment (str)**: environment pk. +- **agents (list[str])**: List of agent pk. +- **tag (str | None)**: Optional episode tag. +- **models (list[str] | None)**: Optional list of models used. +- **messages (list[list[tuple[str, str, str]]])**: Messages exchanged by agents, organized by turns. +- **reasoning (str)**: Rationale behind episode events. +- **rewards (list[tuple[float, dict[str, float]] | float])**: Rewards per dimension for agents. +- **rewards_prompt (str)**: Prompt used to determine rewards. + +#### Methods + +##### agent_number_message_number_reward_number_turn_number_match +Validates that the number of agents matches the number of rewards. +- **Parameters**: `cls`, `values` +- **Returns**: Validated values +- **Raises**: Assertion error if the number of agents does not match the number of rewards. + +##### render_for_humans +Generates a human-readable version of the episode log. +- **Returns**: Tuple of (list of agent profiles, list of messages and rewards) + +#### Example Usage + +```python +episode_log = EpisodeLog( + environment="SimulatedEnvironment", + agents=["agent_1", "agent_2"], + tag="example_tag", + models=["model_1", "model_2"], + messages=[ + [("agent_1", "Environment", "message_1"), ("agent_2", "Environment", "message_2")], + [("agent_1", "agent_2", "message_3"), ("agent_2", "agent_1", "message_4")] + ], + reasoning="Example reasoning.", + rewards=[(10.0, {"metric_1": 5.0}), 8.0], + rewards_prompt="Example prompt." +) +episode_log.validate() +agent_profiles, messages_and_rewards = episode_log.render_for_humans() +print(agent_profiles) +print("\n".join(messages_and_rewards)) +``` + + +## Serialization and Deserialization + +It is very easy to serialize any database structures to JSON or CSV. + +#### Serialize simulated episodes +```python +from sotopia.database import episodes_to_jsonl, EpisodeLog + +episodes: list[EpisodeLog] = [ + EpisodeLog.get(pk=pk) + for pk in EpisodeLog.all_pks() +] + +episodes_to_jsonl(episodes, "episodes.jsonl") +``` + + +#### Serialize env/agent profiles +```python +from sotopia.database import environmentprofiles_to_jsonl, agentprofiles_to_jsonl + +agent_profiles: list[AgentProfile] = [ + AgentProfile.get(pk=pk) + for pk in AgentProfile.all_pks() +] + +environment_profiles: list[EnvironmentProfile] = [ + EnvironmentProfile.get(pk=pk) + for pk in EnvironmentProfile.all_pks() +] + +agentprofiles_to_jsonl(agent_profiles, "agent_profiles.jsonl") +environmentprofiles_to_jsonl(environment_profiles, "environment_profiles.jsonl") +``` + +#### Other utilities +| Function Name | Description | Arguments | Return Type | +|---------------|-------------|-----------|-------------| +| `agentprofiles_to_csv` | Saves agent profiles to a CSV file. | `agent_profiles: list[AgentProfile]`, `csv_file_path: str = "agent_profiles.csv"` | `None` | +| `agentprofiles_to_jsonl` | Saves agent profiles to a JSONL file. | `agent_profiles: list[AgentProfile]`, `jsonl_file_path: str = "agent_profiles.jsonl"` | `None` | +| `envagnetcombostorage_to_csv` | Saves environment-agent combo storages to a CSV file. | `env_agent_combo_storages: list[EnvAgentComboStorage]`, `csv_file_path: str = "env_agent_combo_storages.csv"` | `None` | +| `envagnetcombostorage_to_jsonl` | Saves environment-agent combo storages to a JSONL file. | `env_agent_combo_storages: list[EnvAgentComboStorage]`, `jsonl_file_path: str = "env_agent_combo_storages.jsonl"` | `None` | +| `environmentprofiles_to_csv` | Saves environment profiles to a CSV file. | `environment_profiles: list[EnvironmentProfile]`, `csv_file_path: str = "environment_profiles.csv"` | `None` | +| `environmentprofiles_to_jsonl` | Saves environment profiles to a JSONL file. | `environment_profiles: list[EnvironmentProfile]`, `jsonl_file_path: str = "environment_profiles.jsonl"` | `None` | +| `episodes_to_csv` | Saves episodes to a CSV file. | `episodes: list[EpisodeLog]`, `csv_file_path: str = "episodes.csv"` | `None` | +| `episodes_to_jsonl` | Saves episodes to a JSONL file. | `episodes: list[EpisodeLog]`, `jsonl_file_path: str = "episodes.jsonl"` | `None` | +| `get_rewards_from_episode` | Retrieves rewards from an episode. | `episode: EpisodeLog` | `list[tuple[float, dict[str, float]]]` | +| `jsonl_to_agentprofiles` | Loads agent profiles from a JSONL file. | `jsonl_file_path: str` | `list[AgentProfile]` | +| `jsonl_to_envagnetcombostorage` | Loads environment-agent combo storages from a JSONL file. | `jsonl_file_path: str` | `list[EnvAgentComboStorage]` | +| `jsonl_to_environmentprofiles` | Loads environment profiles from a JSONL file. | `jsonl_file_path: str` | `list[EnvironmentProfile]` | +| `jsonl_to_episodes` | Loads episodes from a JSONL file. | `jsonl_file_path: str` | `list[EpisodeLog]` | +| `jsonl_to_relationshipprofiles` | Loads relationship profiles from a JSONL file. | `jsonl_file_path: str` | `list[RelationshipProfile]` | +| `relationshipprofiles_to_csv` | Saves relationship profiles to a CSV file. | `relationship_profiles: list[RelationshipProfile]`, `csv_file_path: str = "relationship_profiles.csv"` | `None` | +| `relationshipprofiles_to_jsonl` | Saves relationship profiles to a JSONL file. | `relationship_profiles: list[RelationshipProfile]`, `jsonl_file_path: str = "relationship_profiles.jsonl"` | `None` | diff --git a/docs/pages/environments.md b/docs/pages/concepts/environments.md similarity index 100% rename from docs/pages/environments.md rename to docs/pages/concepts/environments.md diff --git a/docs/pages/concepts/generation.md b/docs/pages/concepts/generation.md new file mode 100644 index 000000000..818fa3a79 --- /dev/null +++ b/docs/pages/concepts/generation.md @@ -0,0 +1,72 @@ +## Generation functions + +The core of generating agent action and environment observation lies in the `agenerate` function: + +```python +@gin.configurable +@beartype +async def agenerate( + model_name: str, + template: str, + input_values: dict[str, str], + output_parser: BaseOutputParser[OutputType], + temperature: float = 0.7, +) -> OutputType: + input_variables = re.findall(r"(? tuple[EnvironmentProfile, str]: + """ + Using langchain to generate the background + """ + return await agenerate( + model_name=model_name, + template="""Please generate scenarios and goals based on the examples below as well as the inspirational prompt, when creating the goals, try to find one point that both sides may not agree upon initially and need to collaboratively resolve it. + Examples: + {examples} + Inspirational prompt: {inspiration_prompt} + Please use the following format: + {format_instructions} + """, + input_values=dict( + inspiration_prompt=inspiration_prompt, + examples=examples, + ), + output_parser=PydanticOutputParser(pydantic_object=EnvironmentProfile), + temperature=temperature, + ) +``` +### Other generation functions +Similarly, there are other utility functions that builds upon the `agenerate` function to generate different types of outputs. + +```python +@beartype +async def agenerate_relationship_profile( + model_name: str, + agents_profiles: list[str], +) -> tuple[RelationshipProfile, str] +``` + +```python +async def agenerate_script( + model_name: str, + background: ScriptBackground, + temperature: float = 0.7, + agent_names: list[str] = [], + agent_name: str = "", + history: str = "", + single_step: bool = False, +) -> tuple[ScriptInteractionReturnType, str] +``` diff --git a/docs/pages/agents.md b/docs/pages/concepts/messages.md similarity index 100% rename from docs/pages/agents.md rename to docs/pages/concepts/messages.md diff --git a/docs/pages/xml.md b/docs/pages/concepts/renderers.md similarity index 100% rename from docs/pages/xml.md rename to docs/pages/concepts/renderers.md diff --git a/docs/pages/contribution/contribution.md b/docs/pages/contribution/contribution.md new file mode 100644 index 000000000..4bab646ee --- /dev/null +++ b/docs/pages/contribution/contribution.md @@ -0,0 +1,17 @@ +## Contribution +#### Install dev options +Follow the installation instruction above and then, instead of running `python -m pip install -e .`, run the following commands: + +```bash +python -m pip install -e ".[dev]" +mypy --install-types --non-interactive sotopia +python -m pip install pre-commit +pre-commit install +``` +#### New branch for each feature +`git checkout -b feature/feature-name` and PR to `main` branch. +#### Before committing +Run `pytest` to make sure all tests pass (this will ensure dynamic typing passed with beartype) and `mypy --strict .` to check static typing. +(You can also run `pre-commit run --all-files` to run all checks) +#### Check github action result +Check the github action result to make sure all tests pass. If not, fix the errors and push again. diff --git a/docs/pages/benchmark.md b/docs/pages/examples/benchmark.md similarity index 100% rename from docs/pages/benchmark.md rename to docs/pages/examples/benchmark.md diff --git a/docs/pages/examples.mdx b/docs/pages/examples/examples.mdx similarity index 100% rename from docs/pages/examples.mdx rename to docs/pages/examples/examples.mdx diff --git a/docs/pages/examples/experiment.md b/docs/pages/examples/experiment.md new file mode 100644 index 000000000..250f0a493 --- /dev/null +++ b/docs/pages/examples/experiment.md @@ -0,0 +1,27 @@ +# Running Experiments +We use `gin-config` to configure the experiments. You don't need to be an expert to use it. The basic syntax is +```bash +python --gin_file --gin_file '--gin.PARAM1=value1' '--gin.PARAM2=value2' +``` +The `--gin_file` is used to load and compose the default configuration. The `--gin.PARAM1=value1` is used to overwrite the default configuration. The later configuration will always overwrite the previous one. + +Here is an example of running an experiment: + +```bash +python examples/experiment_eval.py --gin_file sotopia_conf/generation_utils_conf/generate.gin --gin_file sotopia_conf/server_conf/server.gin --gin_file sotopia_conf/run_async_server_in_batch.gin '--gin.ENV_IDS=["01H7VFHPDZVVCDZR3AARA547CY"]' '--gin.AGENT1_MODEL="gpt-4"' '--gin.BATCH_SIZE=20' '--gin.PUSH_TO_DB=False' '--gin.TAG="test"' +``` +For the complete set of parameters, please check the `sotopia_conf` folder. + +To run a large batch of environments, you can change the `ENV_IDS` parameter in `sotopia_conf/run_async_server_in_batch.gin` to a list of environment ids. When `gin.ENV_IDS==[]`, all environments on the DB will be used. + +## Getting access to your simulation +After running experiments, you can go to the `examples/redis_stats.ipynb` notebook to check the existing episodes (Episode Log section), as well as calculate the performance. + +For the original Sotopia simulation in our paper's experiments, you can find how to get them in the [Q&A](/docs/troubleshooting.md) section in the `./docs` folder. + +# Hyperparameters that are used in the simulation + +## Tags + +- `TAG`: The tag of the simulation. This tag is used to identify the simulation in the database. +- `TAG_TO_CHECK_EXISTING_EPISODES`: Scripts like `examples/experiment_eval.py` checks if there are existing episodes with the same tag in the database. If there are, the simulation **will not** be run. This is to avoid running the same simulation twice. If you want to run the simulation again, you can change the tag or set `TAG_TO_CHECK_EXISTING_EPISODES` to `None`. diff --git a/docs/pages/scripts.md b/docs/pages/examples/scripts.md similarity index 100% rename from docs/pages/scripts.md rename to docs/pages/examples/scripts.md diff --git a/docs/pages/simulation_modes.md b/docs/pages/examples/simulation_modes.md similarity index 100% rename from docs/pages/simulation_modes.md rename to docs/pages/examples/simulation_modes.md diff --git a/docs/pages/troubleshooting.md b/docs/pages/examples/troubleshooting.md similarity index 93% rename from docs/pages/troubleshooting.md rename to docs/pages/examples/troubleshooting.md index db3fecc5c..8201a4279 100644 --- a/docs/pages/troubleshooting.md +++ b/docs/pages/examples/troubleshooting.md @@ -33,13 +33,13 @@ Redis saves snapshots of the database every few minutes. You can find them in th When utilizing the database in python code (as introduced in [here](https://github.com/sotopia-lab/sotopia/blob/main/notebooks/redis_stats.ipynb)), make sure you use in the command line: ```sh -export REDIS_OM_URL="redis://:QzmCUD3C3RdsR@localhost:6379" +export REDIS_OM_URL="" ``` If you plan to add environmental variables in the python code like this: ```sh -os.environ['REDIS_OM_URL'] = "redis://:QzmCUD3C3RdsR@localhost:6379" +os.environ['REDIS_OM_URL'] = "" ``` We need to make sure this line of code is put before `import redis` to make sure that you will not face additional authorization error. diff --git a/docs/pages/generation.md b/docs/pages/generation.md deleted file mode 100644 index c24eb6bb2..000000000 --- a/docs/pages/generation.md +++ /dev/null @@ -1,16 +0,0 @@ -## Generation functions - -The core of generating agent action and environment observation lies in the `agenerate` function: - -```python -@gin.configurable -@beartype -async def agenerate( - model_name: str, - template: str, - input_values: dict[str, str], - output_parser: BaseOutputParser[OutputType], - temperature: float = 0.7, -) -> OutputType: - input_variables = re.findall(r"(?Sotopia. - -# Sotopia - Getting Started -https://github.com/sotopia-lab/sotopia - - -## Simulate social interactions between AIs and humans +## Features * Enables human-AI interaction - use `LLMAgent` to create LLM-based social agents, @@ -44,12 +40,13 @@ https://github.com/sotopia-lab/sotopia This package supports Python 3.10 and above. +There are two ways to setup the package: automatic installation and manual setup. - -#### Install the package - +### Automatic Installation ```bash pip install sotopia +sotopia install # an interative installer +export REDIS_OM_URL="redis://localhost:6379" ``` @@ -99,10 +96,24 @@ pip install sotopia +### Manual Setup + +#### Clone the repo and install the package +```bash +git clone git@github.com:sotopia-lab/sotopia.git; +curl -sSL https://install.python-poetry.org | python3; +poetry install # or pip install -e . +``` + #### Set up Redis stack Redis stack is a required dependency for using Sotopia. There are two ways to set up Redis stack: +```bash +sotopia install +``` + +or manual setup: Docker is my thing. @@ -183,15 +194,6 @@ Redis stack is a required dependency for using Sotopia. There are two ways to se -#### Set up the log folder - -Just make a folder to store the logs: -```bash -mkdir logs -``` - - - ## Quick Start You can view an episode demo with default parameters with the following: diff --git a/docs/public/ClashDisplay-Semibold.otf b/docs/public/ClashDisplay-Semibold.otf new file mode 100644 index 0000000000000000000000000000000000000000..637d561788887f909693c81a28f5f4812561f9dd GIT binary patch literal 27116 zcmb__2Ut``*ZFmfY>RQx-L+6vR8Z_)u~&*ESWr-qDn$VsV0U9hvG-nMjJ@}+ zQB!Pr?XgDFGuO-#|G&8lLX!7;zI@N~XPvoc%AIoN%$YMY=N@~8h4mz^B!_57>vka_ zwpu64Pb9?POGp=?WBU#vH43WtASAptAwrLiy?Tarm=@k&eR3`>kknO!EaB_VpGYkS4UL`7Gv*YXpjU4aXZMMN2I zeRJg3B3v^zF+KC^yc!=7GAsq}j7yBlOc7S~LXv>?5PecqVoctWEp7BJx=L z;XO_Edp#MTpNRBI`bKI=&NOF+RfO~+0(_zs2a5fOju3Gso`iIDK7~OfPym)n{&EQE zSP~+nb67}Ea)P)qt+OsoHu(eT`8<#Co467W8%BW;cX9|%L0bke@K6K`q&7m%c##;% z@*)`HMz$8g+ERIR#7tfl#p{VbFzkF+B143LBG`p^3$u%018FMkDS}-|Tj6aH>?V9G z)+>UIBv|WO1eYadZQCNa94V`fB<)BtT9`#rNgNqLVo5ss6G-a8)d$p>B#~&OMB!;8 zVaS(4VgQBUtqe6S6>$NGX+sk5vz00*O%276G`x{YM#GOr&UVNZg}7LxwnxcnD3Qlx zAsmW4iHIAD(i4!o55gl*4^K};djim|dU!TNyTZ_ho`6cq`)g@+{!vMNdrkLy@aa0O-D(*_q@N(94QDTBS#Dw zruxxHaZ(MZ2pcfQ+r%j(9d8Un45u@mi}#4Xmx^bUn##v43Y75Qv0eNg@8#dAnNtt% zqmA@OYKB_N2(_KOrRj*{_3_c;b;e=bI4!25pU#ovlx9OLZ$Y}+^Py@E-X7lil2#8> zOXc&0&!WGU;G@2ojFu#+{o*qq4sHEArTmkYIIjQa{_#|fEoUCya^4e8?EI){X!$5lQ2P;FT58$#YP&f#zo_* zDX;O>G}JV|64zi2vBL{^hLKoEF5I;f{Mxc(naR24+{TLqkzMeDb&(uE${~7vcpW=*<^c;HR`RJoZ z?s)1RGW;$*Jod2hgT@au_rJgY63HBAgW$5s8SY!6;M|JjC)M$`uR5sd2_ZtFkR4&+L zj&*+mnFyIHm*kO2gpnC!E}2K>Ll*cH6!aO{O$y0La*muQ7sy3&N$5oWB=^Y!@{l|t zKVsN^A}(YyDMO|ZnM{Q&FjE*R#6WJald|L!Ql88v8G=AQA`3`mvJi4W0r4b@NENb} zSjlG4>=sfDGDCH;O&A869W98&4|Btx>>;(tUdRypNF8A~86#*ggAQPoJVb)X5z>Gh zB@M|jk_lNNOVD9%odWHj#>#nyWD9!ImR!aRzJj&*Dj6$Cq!YP;)%7OnLcS#3$k(Jh z`G)i$x3JdU7NUh%tg7FVae@nY>0>g0JRu*GrzDbmM+TB-pv&i&Rj z{0=Te!RH*{6z?I9-NCAUPskR=Vm{{ylY|^0OUM**g>k|}toyIQU%m$idm}_bHXBKP z5e5o_g&KmlU=eBxK7v*7f>gN-ykR3*N!DOI)xY=4xjgyLKLLUt5d^`bT|!h^Z2P#h zl!U0PI-xO%aYK_6qIpV?@*Pp03CeR+on& ztvr0!3gyUkl!>u4f_gkbJGFr8#-N%`z)?78d^mbL4m2_YR9yfbvkf$T6cq6Vu=xlW zdJ7sB1WBkMR7QXNF{4_7^YjuT(AQx?tdId*OcQ1a`NDExldwbhTsSJ65xx+<7VZf5 zga^W7;hFG8_(k|bB%&;q6+OhNVhyp5*g$M5wh&v39mFnTPccmFFAfr;#AtDZm?~z9 zdE#twiMUGKC~g-&7mtaT#Ova>;$!iJ_^bGbM$kx_iW)QcU2RREriG@1rnhFGW|$^U zlcE`|8LOGDnWI^%S*_Wq`BZaAb3$`Yb6s;w^H}pj^S$P+=4Z`sns-{Q)>UiLR@3@u z>u7_tO|;Fmt+ZXV;o5=PSZ#_nQ#(mJTf0oVS-V?%Pfi>3-3>=*{{%`eyph`UrirK21MO zzevAPe@K5-|4{$4{x`iM`AS2i(b6R8lQxM_!%~xz+6+yN86DFmc|>wjOnkejVHxQ$ z?V^*@qlOKONlI@wEDBlLt9}P({tjyX4j-~~aK70=&C_vMT%;wO7Ao@Dz$T$ZphamX+#(TQO@>6sqKk!);>&qVc3VlhN<0- zR{a=f{uniX%!e#7&NpM!Ji`YM9X@zC{;AKwu^fuy-bn7nb1z{yk489tL`hdhsD+OB zQ0RzKIE*dH7N;UI&e@PS^_@6p^&?9%#g}?FLG4dM=@_-0NossjsrV!{KG|7xvRZU< z>ETIL-$*U>MymQoni`*0QhizxNu-s^n*JAgs1eB}BoVEWL@cNvZe#-T#UzbL=OmGmlA4?u zGb$r0AqkQEnGlnfrUD~UW1`YQgFLc>+WP*gAEWwNsy}>idir2+h7U8nQwbPWgqL9@ zQK*;~KQg^2DLMdnN&&M;N{=l8vtv?|1JW{5Vp8LhQ->#Kq<#pbB@a)J%}R-lNlF@; zmJ&5Ard^+aq>O}w4jHM*aY@l}QAw$I4Kvg^bx`=w4>;ig6wAkcSPC`S~0sLzyA=z1J=}ra=i%Kh*p!`KO=0kVY(1$*&p}%)rjr>dRoiQIq z_Cu*9nRu-qkfCNT#)umDfEG1Wf*WVSB`ZKl$t4(3^OT@P4gL)`rQ(Wl;*8>a@B_|D zqW+Qz2UYb0>Z@{&EiTO#WlK+uiUz|=jkhHax24C%*gC89WDCnmiLr$wXCy_ZW(BlM zPRUA*8xfms3#=Dd|G#FjwMj^@sd>_D;NLN+qhq22ob?n5RJLM)>MyZ8vW_ZdL0YO# zAlgH6g`f=C6#}y`O(Zo0NX^1b5i*o8i$Dg47)y4G!fY+^5rljV@e{BaAp1mNkrq;x zfQ?OUBCH^!4iQ$0BtU?OE36T*-GF>c4hz^dK+qD_i=@6NY!V^*3R^{NBm~shkO(^k zY)T;Yl9QsaOGg?B!afaYB4D2(U{iFC2!{!zV&RAY37*U(0?J%Uus0D<>ox=i64y$=S0#@z@A08C}Q6u;IK4=K#(S1h{9DZc0s~T7s$g9 z;UE!1SQP%FfuJos!kI0Bj7`22g~u9fm4s&mg17LTK=c+~h@^)A>05X$LUtzi2&8Zb z;MfrfZ$;8u6n+x1vl4z4u|pClj(mxr2-veg&?NUo;SU|@i+zHI^cTouLDUKm*G0Vm zksZ4Zh^N?RU=t(a9Ci~w(-d)dxfVjD2D=*3NU#$Tu@Q|Sq+A(D+Yq}UcVlY=$rsxv z$hX+cV2=m!A3GOpY9Isit!Wzq;U8yU5Rq}(fo%X0MS@CWapKE&-^5)Yo&vE6*lR&t z#x9GD#hIyqEf#ht*i4eDBDNFQFXFfqJ0G$NN6Q2PzgSkok8q;|Y!I+VgJ=y|8(Sjm z;;|LL{sNmw(3)7W4EANBMGNVhtS8tviJ-KRgk%!YtCp~eOYgI>v)Tx`{5)jxH`wJi zg9JWA*e>iA9ty93PC+aqRu*fC!D2hH7tW4j#WZn(xE8zUE8FVd&$hDN^Ul{+HS#aE#2C?^>!QR zHo|R!+hn(VwGsI&7q|CDv$3wRsj<5;+&IKI%$R6QHD(*P8+RMe8*jQx z?p54tx(B#7cJJUG<{s@n%6+nXf&0C()yn#oZBTYd*}SsT%g!&ms_eP4&&s)!GnT7T zu4}o_a)Zmom&-0Uz1*sD+sd6S_iec!%U3KPSiVX5j^#tk4=$fretr3E<@c69Q~rAS zyX7C2|EYXo1w)013V9X2uJCPz-zpBSIHKaHiu)>FsrcBWF;z4*GNqdydk7vqJmz_9 z@%W=szeLk(^6%#A=Emk+^K|oe^KJ7R&tT7H zp8Y+CdXDtW@to=Tspq9Cb*eP4vZTt|DmSX!uJTyCDyw(VykP5unn{&*b1u!RqJ1ERJASD?p6=3KB4-G>IZ6c zuW`0!otph?X4d?y=AN3zYhJGTw&ovRCa-p0eY~Q)QoVA$W_vC4`qb;7*J&^6?e5*m zJI{Nr_e$?iy-#?b_CD)<-lv++NT1O@<9%lM%=KB}v(9I`&t9J^K41Dg^?B`6=&SMd z@onqd%Qwn*l<#=o$-Z{q`Mzs>xB2ezJ?eYT_h&y3zZ!mie%<|s`(^k|_ABt)=y&C* zVw`HCVbqP9XlL4qxzS223_mwkiFIO~sT)J8^?{bv>UNlh(2z@qX)Rjo(#I@>g>?Iv z)v~stpP06-S-ELb#>)7S8JWq+YcjW6X&sO4s}VPP<;Zwv+%{`V*1~l6*uK4=S`#d3WZT24u6E3-OhZEq}}LPs_zgFLAJjW4PGyPg+W*#*`G64mDKKY!o+Yn!vI zs>R`57^tWI$~F@nuRpzR%)o)^nPFBoQP0Y1={)^~^_dajshK^jY@XhDU#XDWUB0ih zoFHfK(9?)~YW#^dGS8D)7?qd@?K8&0z)Tj-n=vtW%Jf{TS2O<3$Jz4J!c6{NL=*YG z6YA7P4w2c&!ausp_Y}!vpnL$&K5Ar6;g2RBj#qy1pq`F~)H6qRTrLchjPZ(3TUjB6 zNq$K5;lrT_YJe_jDz}rB+0K;d?~)qH%1~z@J62Z03di9MdMi?yC(|y4nFuPjv2unytT2hg@lE8NYAmvvsMn3FPu5!VSxsuCzdPKR zhK|t(Pm4@r0iMh!>^SwKev9Pktj~D)5~^G;x0j8yZ(EtxZ7tKj909amYxxB4JUxo2 z1H9*SUTb-C51B3jEyl@oYphHsfnWeik@7d76+khp=TZ4xAoDK_JdVy9X&)fOzqOo6 zujZPP_V*yGZBWKFS-ZZketQ-U}12;94ZTx-7m?_gwSmbzQpg+(b zOb?IjmgzE%p%>DWUkmKJt5X|0LA%(gjh@(zh^f_e>;?5l^+P09o89lh>gU+I(fX`D zy{}_~L5{|Acs)WsN4LC-HLaAE&Rei_n7lDeo+M{mk{0Whj2xAp=GkIg!~p9cX)(Hq ztV&Nl-@1c$#M{9*D(UK?mAnYF}v z2KYQ-b*=1Y-tfnm!1s5jHfa={*4WCr(RjV__jlDDziP ztDG;<@{2BAp@NxKtn(FXVsYp{aFJyF&28zOJH(G^Z)M4P>ftys9!1wKnL-XDFdHvV zqu=MYl4Im)NFP12j>CdFYG_l=>dZwrR3sn^YRU!y--8 zyL7gi?|wA(>78p2JIfkk-ZKv{D<8DF_~nZV$u)V&7nR-^CNMrub+j9(?p|T08sDq8 zTm;h7yhkj=&QOewjw;HqTb-&MoFTf+N#}DHEE^_o*xXYdKQDi5FPZizOjS!;|8AV= zclNDKqKylusxjnUwCVdRCvRI9*>a`i47o5#%bP>qwKjcubkD^L{r9wM-+yS2?nj5- zwBFDrOkA*T-J%6sw=K#`OPiP%Z!MgwW=A7Tv=Un1*WM6~_eMuP1ZY}OOOr;+dyea9 z!wvU-rUB-aGHd@E6KM2QOLmqnH6=ZDxH)Q5@=c5Jv6AUQw_<8_varMY%CP+7`4 z+v(QAK%G%(sZ{akBIA+WTt3yintTmp#>4MiI0|{aKw)>ZqIGeClr6U@hU1VaNNymn zRU=-}P!HOLPA#z0o@^@ZXJ?D)xAp?Mm_A?#bY_!s?5r1^gaBQ_zP0DDCG3IDctPpx z(Neyk^vafL015(3PpLEaurs7^gz#$UoT7+cV76QaXeqCF=jAa#UZFGt2ecrD!@*5t zrE(GMw?%#q3K<|P^JyoKg?RkYflnvLkI1l4rd~=XEOX0?7|JZpPKsE_EO`bd+jlft zq5(gCN9)nL-cMP8l|_HY`KzA3QhJ;2f0o*)VGN(zVKiB9{7@QS7U&xKGh2ftJn;_o zY;lqKcV|CyzXkKW<4BZ{;A^^0e-4q1bVPeunaMePZ`v1a--D)==HyeA!HV8QZ4ygp zp`&?Vk_V*5iFRhYzeUILl!H7ktuGnRDZ^PyteTGw(ni*I2IRXg&1cnf?0(djO`w-l zW=j3(7y2o*(n9+)W~P(bC0$BxZa<4Z^VA!a{(s#5u(%fvlUOXP!pgDXY&gY}##*VT zmQ@blO&ijNCwJ4zR$ALpQ?JfhEG@OEnboG2X)?30S}3~~TP7KUX+*BC93TfPE>qZzi6SA-4oiinJ zihRX!M}_IZ!SbNoMcXX-)pDhlSHfRgd>v<;DZCMT^-lTWkTgdgOFMc{>w+`#0=X+a zpW6-opOBt*>Zxtf3-DxfihNmSUN3;TaTcb3BNaG>ryQ#{gr}~`N6Hx!?KWNh)^QE* zD&<4vZ=8@VN{*Jl z{O!H8x>Xs=YB}Vz+GlKHT_9VyCiiccdt*BRO!EN|e#+a3s|j$>*8dq6^y9ABt#S^gm=I@xHN~(^|ymi1vs_f`|674&EcA=fGC$9>VQso}B zPnvvCHWodpy^ks~59FMd%eU?2Py5JhV|z61l1y)*^C#t#GQA>EeYc0q#7zB~2T!!* z>0jjZy2)HTS^54g8chT()n-=5483tUUg#$er(;XAj`NOVCPXULYRCf}XE?}t@;vF` zj?Z2_-yYY@NmQsp1EQ+RD)nsEXo4k=2B<~S8C>=-&&2!wQF6btpnEQE=!UB$MSx?3 z%l>kN;xSeJwv!4~s!;^d8S0p)s?l^*usjL^gX4lTf0jCPv5^bDf1TC!7?V9&KtnGU#DX4rQ-5n?y4dvmz}DBVkB!9PhSaccV(nUkwmq{LnHBg< zmhpI3L!JV>s4!5xPr9^j>$MAO(!wl#ssDZH&A{7C>mAX(>3E>GvWi|l+Ezv6Oa+@a zAh&<-9DDx{Se~txR-GQq{aCI}9W~^aj%yrB3gkPgiO#^2333)TyVd61KmXKxzyASd zUTR5@Ykt+0dQJex&XqZ%uCC}xSCVTl8OooX#T*1G>b|)6(piEvL1r#5I@1=Gpc~Z<=G{4Rin5b-blVg zKKm|IKW^&01^ILG7Zh0cpVIMZ&gM%SJ!%JiiZR%E`6Q$-Cqdfiu6n?7Atux6fhcH+@* z^#@072n&rLHNrCEG={i{#Gc9{Ux;bUd_)jfU_nYR;nYHi}%gOn= z(HT?I#!a4;Z!tQ0Q4PvExqa)QLnF6_M~qB}jNG1Z!g@rTHfh1CRrw3nt&dGtI5jJVEwf%>iJKIl{I0Ww5y)hzj2)kue)Al z9`pH8k|F=_ng5u7sQ(S?$&&o)u=*B9D+rqBXk_juGCikUS!@*FKSF z)619+nZHv)+fnVnmpyJ;->e*Woz+ZET9>#wX=!CPSid)UU&7~cF3cl!X$bAO^Fp`% z9p`kYoTI;)*7+!N^JI1W+v9Yt#t(Jr0P6zkZDLZ)y31E~t)ni~_*q()uEWxptJUaa zp|io_oQ!j}oP|9@5o=ok)>g(7yo0m029O^7S(&cA8)R80(=%A}zjd;)%)cA+W;*K4n#`A%V$Gs8sgBjWgwx9AOn29jr#G@_zGNxx z9*`9LAt^L>95FdpG>LX#E!WBHFczezbPYc*^v8Ljk)5K8J#eH?rBg#5wTsiy2*j_H zm}{SX4R7z#v15`kiuU}l$n4;Y%z7y{YeKvwg=yF6so}wHDqHCtEIOS_7M)30bZmSb zqkm#yF+KTeuK=sEchY~rUDE8p85MXXTsg?&24w1q!BW6-OtCP$v0DN(DU7Vh^3+l+~q*y0KR=1}y^RM=3mZs}8F>69I&uD!*^VAuS zQwInup1RU1G=@eqSFBO-EP)xY@4Ke1(DOC{DWTX$mX$}6iZ)cbQCHEh3g z4stxL(BwHA#L@zp%sea;sLx{Q>s`C3I~6x2^&6Zqrsrr2YaOa%)gt@#V6wTEWSm1^ zqpf|Z%NNw+P1mD-ORNRbP0P0?qQ~vYd;`5&6@YgYT8bxG{Uy; zh(5+qkye{#|D<51Zs)qA1gGwzhl=g#aEo!5qDPq@ z|N4lUY1O*dP^N3U!Qsi)oc(%Q_3&=${`#}@-jJ=E;V7vplb^7zV6~N)j*VxzKiKGW zB-J#rvcoo?Kfik;El&+QQ@ZyWk<1KMV=H>WgU)@03xgiCy@k3tZZS`#S&qcY*JrI+ zWp>hRETAt?dpIqBfmZ&p%b_|efZFet9zAl`Oo`VQ>|@ryW=BSv9~>zO5T7?b^nuRUwY zXU!%_tST)NM7vpXuB@ed)VoJ?GAm~_(n?F@ckMi`oO_uk?~`c@ zgjRTLk|PdPXYQfhJ6b0Ex|`DSHXMmb@Wk}P zwQbjq4qqES-#S-1HGj>9&&{X%Z1ZLMt^-0WQ-7T+ttnV=;^>0Bv14+k#anuG`SOBX zJx6MDb`W*9e8!%bCd%)EJuaVnl_xi%1G`F1Xb_~mufNviHvw<^T+!QbHs!E^YfVsm z=vWgqIm$4TWDHRDI70F+j;FNb+fd(q4Ns_ zJyl{o&8#P`6e_(5#9F4MdwZH_StcsGsfg#S!mTLb7QKsD??fqX!r~p)r_#Man>t$- zN>>kTx`)t?#fx`Xwova>J@e=hQp4&iMUS5_$dbUSZ`B`IG9elfH7DV0DIJ)lp13s2Fp8;$;QH9zh0-XiT-G9k_yC^b8f ze8rM0bs3c0457I36XGn1%zJ~Lnl4`d#rjs-y=3tL%T`)FK|g5x;@yb&rTcYeLZbs$ z$wt<46&4(i;Qm7!Sy?EJpzVT}OY0ZRTWvY=LT_}`Td#a%+AbsSQ~JBQP?^#$m~U+sA@v@)^u(!6OD|h#bubq|W&5`_bx`z8=eW79x8g7|OtD2ZGZuOaSJ6E2y(!~DyhDl>sIiPq1^+8Wh zW4}m4m8PZw{qY7*E_c2&JOAza_@8RUOrAIYN1J`V_v9(HcaQY?e$?zqU0OWursL@5 z^yCPnX&$s43uoTMW1^0C16Tt)a}*BH886B-oZT}O=eQ`JbHt|0QS>J|%CtyY zKX1vdrIxQZ>#lCNx%U_IZ!I3N{w#~n4G&8S_1!I9-nESysmrQSadGM6KF+jsNY-^v z>lfG794paaHj0l|Yd&6dielbly7%ePBa5v0`d-UU4}0lJnylJz4)IH^D^`AAe29(D?s!U|p(@O&y#xVKMGl zr?5)(CQ0XV2Y%kpvsSy#SYy4u?)A)?LWh{XUc2%1@r^0HE%8#%lu>;{(>HyMInh&@ zKE}kHXrL+@9Ch|9(@m@q_M(j>#wo3721{*e?m#1MNViARQU5U;9d+nvI-8>^f+I7M zE-v*-19WzxlsaYn@Nt$lNxCkh+DFweSG(Pi_NQ5VR(e=AGM{Lv>+pEy&RjA#?AWnp z>EV@@o11hO*B#yQm3b#drxJbTp?H2KJ3Na5v@UH6M$?vRKa-i3wZZ&t!|EdOA#Fzc znC@LU`RrMjlg*lU4zE}5YWQ97X;(U$k2Y^0zi@SqJBQkW0@_MOW&2$D-33rC)m**y z!w;RWF%8pn>Ez>cr4!Xy9hE({;VAiysc+WGqeoY)I(~e`nEw5_KEhDgU{hOCZo8scMm_Xo2S{vjD_)8=%FX@j(K&eC;DmQ9+p z%<^TrZo;l@6Zd#NSajhRWMaq~od2IIR1q)Lw?bhfPr6d<5dNPvJBHS8=;_E7D zD>&Z{0&8r5X9G06A{yQR4Q~J@k0)|9Q-;t46R!Q;fJD~@kC`ieM(S3-9Pa*%Pm(&>n42q>4g2B57u71W<3#_FYQ~kc;^}O305v$8Z&J|`uMT=^T%4c zuF)-viC;RzGdL-%leNp~94Ttd_~`!T2#Nkqb*9m&iwZ_rTW`=U%uFj7?KytpjHx-+ zwbGge%Qr1sHYsnV<(p*P_?_!=w|FjEFl){{YZ?}qiK8(gc>5Z19QBq?{Gg*%Y1t0? zy|-&0?Z_(V*h1i`k3QT-hqK7C*Y!~?UJbZTD*y-el~GGf6tZ5?Kx51?qSfpygkJO4 z<*;kTql;W+*)_;|*S@#Y5RCFz3HN1zKBkx85-YDhd2N0k{uT3IXIU*%*N{idXPxCW zv(=SYx3MAqb8kB9RBN;;!S0B@BiMp@8dzXqhx29tAyUcyHwK|fEVI%Iq_>oS- zhhIGYGGg0+0&Ipa&E5Ukar5~h8{03iupaAmq4US(Z!m9Kx#X+YE3yXTP|AOfM0LJ5 zK==)ULmIR_k#HmjM_pZ~#KiVD_ue1>Y@&rWP1l{8v@|c(oSZqnb)Br0`z;HY|1^o| z--gg2ODlTa6gPL=g7xNgE0!LaZ25J9Zr9W$x#{M#u~~f=Sd70Y9#c#-l~%(l9F6S{ zo-CE6v1$;Dqp=UglcrgJ)3Wv*E`YWrIr|oX^U~O634n0^q>+F*zD&D^E9Ordp ziWHNQ)wlbo)fX;oSbg#M#_VXz6iV`?=PfTVk-4{R4`2AI9i&7fn}>D&A$Z%Z>%aZh z>NUmi1#@QPO`0|>&pH?~O8gf|GOX*&irzrfbslBeU(>YJFqh{CbXk#sFQXD|BEzX(+2a-97~JOMNy_?}dHe z?W=5b=i3YmgkzyGp62$Dm63(9ez-y0ip%~*P(o;l>yVMkG1Dq($@~RN3l>cU$J{+m zH&NAFz|nV@<3dfG6s7ZnTI6pbzoyw9iW`k${jhaWkNl|nR+)`hD;r-cRZ(Zr(H`ws zl;;LN7Nlj7C(5~rE_)a6j*#!uYenbx*<8Ek5Qt#K1SZ_7ij6=@C{V^m^j3 zHK9*@q>`qX92c2Ied##D^V9(yv1Q#=n%fe zxr!~$2U-=aRWsZ?Xf!jWfQ|% z(-o=|?dZnLT$o0LQ(RWMQL`#FFEn<-Z>F-ECYoNbwNk!4e*xTlGhO?V&DUREe`+N} zt}w{HVS32W#^%f#W%aG|KtFS`ebOXzo_*3MlPrw_e!%WdpGWQ&K1N^km&x zxeNN^+s4IwhVu?q8_UKV#iQud(&*?%yN04S1#}mp_{AWHch``O9h5ORv*ii_P?%uN zXxb&*Z_)nze3LJ}Kl1ZRBil+N{(19fbX2FFCy*LN{YsxD8(Ef8VX|z@puZR2L516& z;SS2k&d_c+<}L)+&N6-R8MHcLxK_u(7N9!)!ue1mn+!EFe!%XiOS4%|(|3KO@l$YQ zJlA<-><1+`<631icmmZqFsC6;>{LvUhK4+1uUMmf4RyvY%421SDeSysl_ULBFDDv` zuK86oG*P?0tF8L@tT)F%GSZ!@5TDD&E_6AxnjRhAEi+%*pQ{TP0esDMgj76mKImR>^mzSMugPbEl#w_2s+?Y|)TCmpSm}dfDQXPI z(g=>F54tZ0o3nCn^?y;e1D4W8%ll9H*;AAMqMSjk@5<2CT+yvRGh?^~ z$Qxuwe=R~$2pMw<-rZcr+83}+1$x#QVn3PqVO}#5zSf6Puj}bw%U=}>Clq?Tzej027a$) z_%6_-vq4L`fv$zFgRX}zLN{2qUiY2esBfU}ug}oW)UVSY)L+*BNB>q|D7i^hBp<1v z)K=;#MM`n_5-?AiEiIKcNV}v1(rM|MbVqt3y>^-E^0rLxGKrB^mu7_Q}bbaaSa4YZT>(;`p544>#-DbM2 zaNF*7-0h~@Q@7uZE=CWdFLa%|83!7ZjXB17##P2$#*@Yy#>d8=-9`6u?$zAuxi@p~ z;@;mq*13|@g$&eit!$vd{1U^Xo@~I0@`bw(7GpK9V^9y`r}Ma=-}qTCZsJ3zz6ot+ znWFd}lW8)}Rz%v#3Jo7@Ntj5JEJi2_R>j@N7zhy-2%#|sYI9!F=r_t(?Qa~q!?hPB zl=&A$O~_o*kKlEGJtC%+wfk|_jWv0sogIWy5dBSQb6&=&EXt;-R$5cLM*g6`N?Y4e z8$G0-BlEih4`>D%SV!k2f`QM^ZnP5b(;4;t*MOt*8aO&Pbnpn04a!cwum%7f4WuJe zw-#LW#KMH*w>p6xy~kRyo4e_7(;J*?HFOL4TD@Fdt2x3{mEHEmIuC|X$-1a2$!SDmd8~h0Tl-&U)CfMd}v{jmXgNSVh{8b+^-_jxZfdm5ex}efWk7 zPLbUTk-b{2S8OQDXj094nQXvfA16a^Efjhap{m|mW#+*fRIH!Im8%TAp|}bKZQ$ex zLjesVK73=a^}va_fp&DNxf%*HJIDsdwQx=^+H=RgUWRej>HU(%)bh$$e%iwP^{o6) z?Qo*s@wYp)okeMln_ag_(&Mph_j`FV|9bTiuJ$O9`dJ&%Y}40!H@tpvcvMFmwuVHe z)T$G;5vKt^(IyN?Dd>XIe+u1Rj-6 zeVQVsxt#`brLxC#%4gJ4VBf_okJuF2(@v{{JnPtdv#bnOFV{YdwrWjBvT%DVHgXti zm1`eO>-7Tu>)L5mev`;|)Z$}mvZ_irfmHOOtu2U+p_PB3Ev?XNj=}j+6*>y)A|;Bb zqhtd%au+u2J8#|ZON~!~UTVv+s$MF`Jl999D;xL~f907npMXWAvnhA0 z=XtdNpx1c|Z}>l`siKMhN^{uwZ`BZR&dlsm?aB6qug=kNw4)A(xHCZ~kRmo(C03N-YIvbDj>0gLhMo-akI-*32$W98iOg9ha;*<@K*ZK6|O z%78nXDp0l`PKN`(4fQzg#Yu&m-P@~g>e#o)VYT3GTla@|O zHYa9IXcnBj=m6gVPL~W$J*6LCep*^j3AcNmtYWVg!DCD5DJA{qXWH7T_^}{|pHwG3 z7B^CcF}vPcHnX54iFNq4I!y#?{}<{L#wE-T`_stu7J);zKYy`j`_nsz(z~K2za^3Z z`FIIuVm89P2fp0sY`c%%T`qas(`egXWdAl)h{J_CEf1wmE z^@U2RqQKnz`~s^wok}V7_EsKoRl;I*bi?4B(u#S8`uNO%>$rjUy^D70sx5-nUb2Du zm)ygGa=HHRNPBfv>di7;cS>0yR)caC^x$Q8Tm{216si2Hp9&b>NFO9rLoeE%m6KQ( z)>CKjg*2BtdE5kO78;Zdn(A)s%C%%&w>P21t-z749**Ju8QXbRedWC zhTH4$HmS=>GtP}&9vpbE$vR&jwEx*qYWU~P?TDhA+u6l8x56XVxOu1asE;jshjv{X zSDoR(&%)ZEjKK(mATQi{#0jC#+2OXuELG(XZ%KY z0b6WZw|wD_*%lhQS~o*#pVvFx<~cB!@yw!76PME7~mR%_~dvLd;m z$?EpIL#=H)e%b2QP2JFQw=%x-WCQ6N6ZJcJocbL3e9D9^7Iu#9*5z)RwqviE4rBvO z1ES|GPO{STbhmCn%G}r}+_&`U%X}=xE14%p?z0|09Cp5UxNdV~uVtNzFQdDy2;UxM z4efWb=fyL+#DnLvuX{p%S!{Z;bI(s3*G`|Z!h%!u&bq0~r>|OvYe`nYl$1VuUZ#}} zpj~wHvu9_dnuA6}dt-7`YW|2db0W$zoz|Koo!PqT);*4>Oo_#3=xjM*1KXGzUFlDW zB?C8=>y|D26gX+SO4oi`SelpT;L#i-G!#1rs=a~(-!5O^99h$)W6^={9QFh5)o3-S z_V&%jk?-)|9KJewkohWCiUq<#U%g`zrjBw;*sMv^zy|EXq=d=lV1uIr8DA>AXK~7dyUQQyIjv2=> z?l|>}8p?-w$R4V(0S))V7<2JLKkK%*=^ppeKkg- z^7fRjmhrUKJT%59T>YMiPdMsxrZ4kz&L^u;Ix?+9L=FflEh0mVy;Y>q`hlIR8m+}T z=PK!}WIsCx4D!L^!d@nth>c?6Up9({;Mf?y+HpI+wa}%Yrz;ZEUTZ+BS&ZK`msquN zx<&IAE}3h2xmI_3`L0c8%vTN21>6Q*!1xBB+y;F|7U=?(e3lW+HMsCuh5^T9`o3HP z4$?zIz5(J#V}{bVES+)7a+Tk*7+6yYYF%bK4e&iPGb)XQNbKPNV^9y+FndK%Z&Hx^wR)dhCz zI(W?NcvL@XDi$99aSvo{Ob2!;zI*>hm)}@# z^org6gmbnZKOGvx*_PGFzZSTK4}s3f3bf_9Qf|f4tuv@PgcUDOlrkqxQ*{UpYw1$( z0+(y2pL1Sdp*Dkev$y&Wt6%m$y^)`}6s^8aH9do>=QGEt=fhV8qa&2!^1((g2itSm z)1F@n?0aflV%|D@bY#?TT|9M6 z>bPnB`b^AUZ=G-8m$4L=tJ7?$)GOc z*~PLwzBgCD2pxQ7KV8tu|G2Gsy0NYZ5 z@VP}Z0pGhfhu?vJ&ySDw@wq;1oArht#=pZ?ZJY_Jl`{cfz{evd89xDb&c?&%w$21t z6o5?ue0)C#{u2BIe0;wN{xf#597ye8^DkOY!$#-0c;FhhyN9R z0xSW*7688f$M^rLjWj{Ek|vN}@e^RBjKRv)aM+|1gg9X&{7e{7;FkA9-~*r9!`>K- zWC>G*slp;*F=BOUI|%ZPL+%N}WPG}B7v>N*VV+O`D`gy?1Rwhc!;Y8OKBQY1F(yQ% zCn2RG;>!}Td(Un*QnpXe?(kvj?!8(Q>f@#;h%qrfF<#BdOMztowIv$jqTeXFz&0B% z-387ScF%NVzL1I>;)fQ&3Il#k;Qr4x=P(NYv^Dp?Sehe@V@}1J4}r-zI6WM&CIJr; zEZ#~Mv;~$Cq?$#}A5WO0kYH#+f@K7$EzB)6hHDR;uSfs3!tH|FhqO*`J>bIN2EYwL zSx4}MO#>+b4t5cwOt=YflTk*?qH<2*{R?o{;J$+6(9^e3V z{OhQxSJc#ep(o;3h-kUcL#2y6p%-Z)q9(Dq2&)z%+NDE30ikswS_dEP6NkVJ7tt!s z&m!8#A#I47%HKsR;ZKH}2{%{s2~vO6JOd0X4BRFm{IzgDs?cU}r?>~9L*fbe=hQf~ zPrRu@zl*m;hj?FnD!%&g#_xa}JXHhA)wrk-X0?V>9nqNKY;fM1NLVl%stE+#7_Oz7 z+8$6B6@m>7O@s;g58(-HXugO0Sq&+gKec_3L#vhHW3D*g)p~G9 zTSZ%4>#GgWHqfJ$+NNq;Yd|3?)C~~ch2IZukP1cP^fU#b(b{p^Je;G>2D|`nshYYP z&_)&74rsRu9RPGph0XxFq(avLeWOC(0(z`{0sk%BuWB3&ig4P{x$4Tp{|JuL5pYBV zO;zrL`c}dpqxuuom|PVe&0$!80riQn?14P()c8+SzrPxjsKSXwa8=~2q{d+UkUxgQ zBvXyq%qdzx{fODAQt=Hn{)U<}UWGexSp1p8;sJ0h0rmzt?RQpFJF7V-sqiEf{#b<@ zt8f<;Zmz<8RJgkn7P_FcvuezFH6}}ixn*hrR`_^bHPra=YW#Q=PEg?l74ECTebxN? z)b@C(eNo>MtMho0rsf%;=5M6>&%`v8d_~R4DL}yaI(Q*0baFh@R%51dpKRkf!7+KB zHn2A;kWsuevRbSOpO3a6)K%Z&b3-7`_P63Ou))H4#t&-h4{AONHr(y zx&U_4LmM@wjatqH6~-*XyG>NMi3$g+aHIDV5nok>opkt8g`e|0uvf|3GfsuoQ6p(; z3@partpOYsSE~63s4TiOt1tof*BoChUzA;Zz{Y~#ZKh(fiIcE(4f*I@I|F$Ocx;QV3h2xwo z9WEO#2X1PS<8yRA++w(uaO>f~!?-~vz8dkB2bMu$(Fl(7G0ws6!aan01}wEuF?L<` z6I5TNMsiKXo1f}y)c8}XKTY*ttNuOi3td(Cx=M}ej38H3_^OI$Kh@W$zE+JtrTWuU z|GDblgZ~j^F>Y(L7o^#vG+34|9SZSJ%UamwBx1x9Zc-zIJ!02_X zI08vf{VU>bz}L7h_^G}|jX5QLj`(RJm#(M0+UYJDHSr>|13LstFjYjCuAoV^&M`(NlPSz zU~mbs@KKU8R`)-|a~rojzZ?a-Z=@x+Y(_$&6XHgYZo^>-kn{lT-y2^B|~kYQJuOYODc zIEUfwka!-r@oGwWKvh1ZI9pah4U6DXeAiHnao#uB9Z((b8{gB6M-Jx*a?F%hYeXA_ z@o*g1qA(FyD(NM!jpx(~91C0mpP5ggDP`>0^d*AU<^3>JgAecS}t{K{1S zFN7u76Y>4X66|_bs?VJ;_r=5eVcv^B52{vvmtYUH6g5qQ5i$|6uu_IM*1_M2c`hRN z2KWcLkuVs78v@_iCce8W?zb-~hn-9bUCsY*l!Z4n>fVQdf+i6isAncIh`*9HnvdSI zf8)fx#7lfjD*wa1CiO(_#uDFu<;DFarq=xu! z-Ouk8Z3klbyA%I-&&1pBfBT2q0sC>KoOa3kKe*G>CNlcr%AL3bZAVzV`~EIue{UF(en|TlPOy_Qkp0VOjHHZiDcmQ3e|0)t zg7c{@L&}ILaH9}@Sp-i(`G0p4(54CR^Hn-g-lt-&*Cq=7*A?acWw=vtx8d%obn*<( zXYUt^gYXWV`i_&n_6jqAr~8N>{a@U0;OBpH95=v&SQby!z2B=o0}=OMoUjC(hPwpV z44goG{`M00g#1q6U_C)+f z)C*W+!Mtt{H;h!lIg2cOMl51WV$nPx79j-I5o@9Rex#xRoBF~}aIvJC(2|r9B4Km9 z&>077>Xl2u7Qu%E32Q)eL(%>K)XRCm1>%7*bm#fhy!YOJUksz|GIqD+g@^CIhmA-Z zcVYr5FMfo+!(ngYp{YP@+RtII@jcQD(JtrH2JY%BHYffN4s61&fVJTB@7{mJ(?x&8 z@qB-xorMT_8tW#@2y$|3Cu80JKws_N~Nu&>OV(1?u%jTd`kN`6Hj(eBSV} zW1w{g9CN

*n(l^9^)eAGCW<#lJc}q&v>HDq>er26(L`Ohx%qf%krB%MTcvAAkp5 ze!n8O6lp_Yh;%jLZvn?k-k(BQC6p!M|L$>?<%Y8A@Un`^Nk%! - - - - - - - Sotopia, + logo: +

+ + + + + + + Sotopia +
, + logoLink: "https://docs.sotopia.world", project: { link: 'https://github.com/sotopia-lab/sotopia', }, diff --git a/sotopia/generation_utils/generate.py b/sotopia/generation_utils/generate.py index ea3f003fb..42e42ad43 100644 --- a/sotopia/generation_utils/generate.py +++ b/sotopia/generation_utils/generate.py @@ -555,32 +555,6 @@ async def agenerate_relationship_profile( ) -@beartype -async def agenerate_enviroment_profile( - model_name: str, - inspiration_prompt: str = "asking my boyfriend to stop being friends with his ex", - examples: str = "", -) -> tuple[EnvironmentProfile, str]: - """ - Using langchain to generate the background - """ - return await agenerate( - model_name=model_name, - template="""Please generate scenarios and goals based on the examples below as well as the inspirational prompt, when creating the goals, try to find one point that both sides may not agree upon initially and need to collaboratively resolve it. - Examples: - {examples} - Inspirational prompt: {inspiration_prompt} - Please use the following format: - {format_instructions} - """, - input_values=dict( - inspiration_prompt=inspiration_prompt, - examples=examples, - ), - output_parser=PydanticOutputParser(pydantic_object=EnvironmentProfile), - ) - - @gin.configurable @beartype async def agenerate_action( From 0edf4b0130173829acc215a81ed8937498b36250 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Aug 2024 15:24:18 -0400 Subject: [PATCH 22/43] Bump mypy from 1.10.1 to 1.11.1 (#162) Bumps [mypy](https://github.com/python/mypy) from 1.10.1 to 1.11.1. - [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md) - [Commits](https://github.com/python/mypy/compare/v1.10.1...v1.11.1) --- updated-dependencies: - dependency-name: mypy dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 60 +++++++++++++++++++++++++------------------------- pyproject.toml | 2 +- 2 files changed, 31 insertions(+), 31 deletions(-) diff --git a/poetry.lock b/poetry.lock index 359b39e29..8b8f234bd 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2619,44 +2619,44 @@ dill = ">=0.3.8" [[package]] name = "mypy" -version = "1.10.1" +version = "1.11.1" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.10.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e36f229acfe250dc660790840916eb49726c928e8ce10fbdf90715090fe4ae02"}, - {file = "mypy-1.10.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:51a46974340baaa4145363b9e051812a2446cf583dfaeba124af966fa44593f7"}, - {file = "mypy-1.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:901c89c2d67bba57aaaca91ccdb659aa3a312de67f23b9dfb059727cce2e2e0a"}, - {file = "mypy-1.10.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0cd62192a4a32b77ceb31272d9e74d23cd88c8060c34d1d3622db3267679a5d9"}, - {file = "mypy-1.10.1-cp310-cp310-win_amd64.whl", hash = "sha256:a2cbc68cb9e943ac0814c13e2452d2046c2f2b23ff0278e26599224cf164e78d"}, - {file = "mypy-1.10.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:bd6f629b67bb43dc0d9211ee98b96d8dabc97b1ad38b9b25f5e4c4d7569a0c6a"}, - {file = "mypy-1.10.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a1bbb3a6f5ff319d2b9d40b4080d46cd639abe3516d5a62c070cf0114a457d84"}, - {file = "mypy-1.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8edd4e9bbbc9d7b79502eb9592cab808585516ae1bcc1446eb9122656c6066f"}, - {file = "mypy-1.10.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6166a88b15f1759f94a46fa474c7b1b05d134b1b61fca627dd7335454cc9aa6b"}, - {file = "mypy-1.10.1-cp311-cp311-win_amd64.whl", hash = "sha256:5bb9cd11c01c8606a9d0b83ffa91d0b236a0e91bc4126d9ba9ce62906ada868e"}, - {file = "mypy-1.10.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d8681909f7b44d0b7b86e653ca152d6dff0eb5eb41694e163c6092124f8246d7"}, - {file = "mypy-1.10.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:378c03f53f10bbdd55ca94e46ec3ba255279706a6aacaecac52ad248f98205d3"}, - {file = "mypy-1.10.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bacf8f3a3d7d849f40ca6caea5c055122efe70e81480c8328ad29c55c69e93e"}, - {file = "mypy-1.10.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:701b5f71413f1e9855566a34d6e9d12624e9e0a8818a5704d74d6b0402e66c04"}, - {file = "mypy-1.10.1-cp312-cp312-win_amd64.whl", hash = "sha256:3c4c2992f6ea46ff7fce0072642cfb62af7a2484efe69017ed8b095f7b39ef31"}, - {file = "mypy-1.10.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:604282c886497645ffb87b8f35a57ec773a4a2721161e709a4422c1636ddde5c"}, - {file = "mypy-1.10.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37fd87cab83f09842653f08de066ee68f1182b9b5282e4634cdb4b407266bade"}, - {file = "mypy-1.10.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8addf6313777dbb92e9564c5d32ec122bf2c6c39d683ea64de6a1fd98b90fe37"}, - {file = "mypy-1.10.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5cc3ca0a244eb9a5249c7c583ad9a7e881aa5d7b73c35652296ddcdb33b2b9c7"}, - {file = "mypy-1.10.1-cp38-cp38-win_amd64.whl", hash = "sha256:1b3a2ffce52cc4dbaeee4df762f20a2905aa171ef157b82192f2e2f368eec05d"}, - {file = "mypy-1.10.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fe85ed6836165d52ae8b88f99527d3d1b2362e0cb90b005409b8bed90e9059b3"}, - {file = "mypy-1.10.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c2ae450d60d7d020d67ab440c6e3fae375809988119817214440033f26ddf7bf"}, - {file = "mypy-1.10.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6be84c06e6abd72f960ba9a71561c14137a583093ffcf9bbfaf5e613d63fa531"}, - {file = "mypy-1.10.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2189ff1e39db399f08205e22a797383613ce1cb0cb3b13d8bcf0170e45b96cc3"}, - {file = "mypy-1.10.1-cp39-cp39-win_amd64.whl", hash = "sha256:97a131ee36ac37ce9581f4220311247ab6cba896b4395b9c87af0675a13a755f"}, - {file = "mypy-1.10.1-py3-none-any.whl", hash = "sha256:71d8ac0b906354ebda8ef1673e5fde785936ac1f29ff6987c7483cfbd5a4235a"}, - {file = "mypy-1.10.1.tar.gz", hash = "sha256:1f8f492d7db9e3593ef42d4f115f04e556130f2819ad33ab84551403e97dd4c0"}, + {file = "mypy-1.11.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a32fc80b63de4b5b3e65f4be82b4cfa362a46702672aa6a0f443b4689af7008c"}, + {file = "mypy-1.11.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c1952f5ea8a5a959b05ed5f16452fddadbaae48b5d39235ab4c3fc444d5fd411"}, + {file = "mypy-1.11.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e1e30dc3bfa4e157e53c1d17a0dad20f89dc433393e7702b813c10e200843b03"}, + {file = "mypy-1.11.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2c63350af88f43a66d3dfeeeb8d77af34a4f07d760b9eb3a8697f0386c7590b4"}, + {file = "mypy-1.11.1-cp310-cp310-win_amd64.whl", hash = "sha256:a831671bad47186603872a3abc19634f3011d7f83b083762c942442d51c58d58"}, + {file = "mypy-1.11.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7b6343d338390bb946d449677726edf60102a1c96079b4f002dedff375953fc5"}, + {file = "mypy-1.11.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e4fe9f4e5e521b458d8feb52547f4bade7ef8c93238dfb5bbc790d9ff2d770ca"}, + {file = "mypy-1.11.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:886c9dbecc87b9516eff294541bf7f3655722bf22bb898ee06985cd7269898de"}, + {file = "mypy-1.11.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fca4a60e1dd9fd0193ae0067eaeeb962f2d79e0d9f0f66223a0682f26ffcc809"}, + {file = "mypy-1.11.1-cp311-cp311-win_amd64.whl", hash = "sha256:0bd53faf56de9643336aeea1c925012837432b5faf1701ccca7fde70166ccf72"}, + {file = "mypy-1.11.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f39918a50f74dc5969807dcfaecafa804fa7f90c9d60506835036cc1bc891dc8"}, + {file = "mypy-1.11.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0bc71d1fb27a428139dd78621953effe0d208aed9857cb08d002280b0422003a"}, + {file = "mypy-1.11.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b868d3bcff720dd7217c383474008ddabaf048fad8d78ed948bb4b624870a417"}, + {file = "mypy-1.11.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a707ec1527ffcdd1c784d0924bf5cb15cd7f22683b919668a04d2b9c34549d2e"}, + {file = "mypy-1.11.1-cp312-cp312-win_amd64.whl", hash = "sha256:64f4a90e3ea07f590c5bcf9029035cf0efeae5ba8be511a8caada1a4893f5525"}, + {file = "mypy-1.11.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:749fd3213916f1751fff995fccf20c6195cae941dc968f3aaadf9bb4e430e5a2"}, + {file = "mypy-1.11.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b639dce63a0b19085213ec5fdd8cffd1d81988f47a2dec7100e93564f3e8fb3b"}, + {file = "mypy-1.11.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4c956b49c5d865394d62941b109728c5c596a415e9c5b2be663dd26a1ff07bc0"}, + {file = "mypy-1.11.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45df906e8b6804ef4b666af29a87ad9f5921aad091c79cc38e12198e220beabd"}, + {file = "mypy-1.11.1-cp38-cp38-win_amd64.whl", hash = "sha256:d44be7551689d9d47b7abc27c71257adfdb53f03880841a5db15ddb22dc63edb"}, + {file = "mypy-1.11.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2684d3f693073ab89d76da8e3921883019ea8a3ec20fa5d8ecca6a2db4c54bbe"}, + {file = "mypy-1.11.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:79c07eb282cb457473add5052b63925e5cc97dfab9812ee65a7c7ab5e3cb551c"}, + {file = "mypy-1.11.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11965c2f571ded6239977b14deebd3f4c3abd9a92398712d6da3a772974fad69"}, + {file = "mypy-1.11.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a2b43895a0f8154df6519706d9bca8280cda52d3d9d1514b2d9c3e26792a0b74"}, + {file = "mypy-1.11.1-cp39-cp39-win_amd64.whl", hash = "sha256:1a81cf05975fd61aec5ae16501a091cfb9f605dc3e3c878c0da32f250b74760b"}, + {file = "mypy-1.11.1-py3-none-any.whl", hash = "sha256:0624bdb940255d2dd24e829d99a13cfeb72e4e9031f9492148f410ed30bcab54"}, + {file = "mypy-1.11.1.tar.gz", hash = "sha256:f404a0b069709f18bbdb702eb3dcfe51910602995de00bd39cea3050b5772d08"}, ] [package.dependencies] mypy-extensions = ">=1.0.0" tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -typing-extensions = ">=4.1.0" +typing-extensions = ">=4.6.0" [package.extras] dmypy = ["psutil (>=4.0)"] @@ -5544,4 +5544,4 @@ groq = ["groq"] [metadata] lock-version = "2.0" python-versions = ">=3.10, <3.13" -content-hash = "69fd61177c570c03ca7d2910b99d45b64f5dcc2beaa78d32ffcec9d796b16b3b" +content-hash = "7fe3915e62b84f4f2f9d179958730907a2a6607e1de39ea77ab2f52a4cc93863" diff --git a/pyproject.toml b/pyproject.toml index 2ac440e74..df3f4dcb2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -49,7 +49,7 @@ ruff = "*" pytest = "*" pytest-cov = "*" pytest-asyncio = "*" -mypy = ">=1.8.0,<1.11.0" +mypy = ">=1.8.0,<1.12.0" [tool.poetry.extras] anthropic = ["anthropic"] From 9d50654fd4833bf4471f5b490399cf8b115dc17f Mon Sep 17 00:00:00 2001 From: Hao Zhu Date: Tue, 13 Aug 2024 15:50:52 -0400 Subject: [PATCH 23/43] Remove `all_pks` from Sampler.sample (#160) * Move all_pks to constructors of samplers * lazy profile pull * use find().all() in place of all_pks() * update readme --------- Co-authored-by: XuhuiZhou --- docs/pages/concepts/database.md | 22 ++++++------- examples/benchmark_evaluator.py | 4 +-- examples/evaluate_existing_episode.py | 5 +-- sotopia/database/__init__.py | 11 +++++++ sotopia/samplers/constraint_based_sampler.py | 16 +++++----- sotopia/samplers/uniform_sampler.py | 33 ++++++-------------- stubs/redis_om/__init__.pyi | 2 ++ 7 files changed, 45 insertions(+), 48 deletions(-) diff --git a/docs/pages/concepts/database.md b/docs/pages/concepts/database.md index be1c8235f..818947224 100644 --- a/docs/pages/concepts/database.md +++ b/docs/pages/concepts/database.md @@ -1,3 +1,10 @@ +## Basic Concepts of the Database + +We use the `JsonModel` class to define the structure of the database. This class is coming from [Redis-OM](https://github.com/redis/redis-om-node), which is a Redis Object Mapper for Node.js. You should learn a lot about how to use the database by reading their documentation. + +We do have more customized method `.all()` would return a list of all the corresponding objects in the database. Note that using `.all()` is going to block the database, so you should use it with caution. +You might see codes using `all_pks()` which is a method from the `JsonModel` class. This method returns a list of all the primary keys of the corresponding objects in the database. This method is not blocking the database. However, it might not be as efficient as using `.all()`. + ## Adding new characters and environments You can use the following function with the `**kwargs` being the properties of the `AgentProfile` class. This is the same for the scenarios/environments. ```python @@ -98,10 +105,7 @@ It is very easy to serialize any database structures to JSON or CSV. ```python from sotopia.database import episodes_to_jsonl, EpisodeLog -episodes: list[EpisodeLog] = [ - EpisodeLog.get(pk=pk) - for pk in EpisodeLog.all_pks() -] +episodes: list[EpisodeLog] = EpisodeLog.all() episodes_to_jsonl(episodes, "episodes.jsonl") ``` @@ -111,15 +115,9 @@ episodes_to_jsonl(episodes, "episodes.jsonl") ```python from sotopia.database import environmentprofiles_to_jsonl, agentprofiles_to_jsonl -agent_profiles: list[AgentProfile] = [ - AgentProfile.get(pk=pk) - for pk in AgentProfile.all_pks() -] +agent_profiles: list[AgentProfile] = AgentProfile.all() -environment_profiles: list[EnvironmentProfile] = [ - EnvironmentProfile.get(pk=pk) - for pk in EnvironmentProfile.all_pks() -] +environment_profiles: list[EnvironmentProfile] = EnvironmentProfile.all() agentprofiles_to_jsonl(agent_profiles, "agent_profiles.jsonl") environmentprofiles_to_jsonl(environment_profiles, "environment_profiles.jsonl") diff --git a/examples/benchmark_evaluator.py b/examples/benchmark_evaluator.py index e07ce4efd..b35ce2247 100644 --- a/examples/benchmark_evaluator.py +++ b/examples/benchmark_evaluator.py @@ -25,8 +25,8 @@ def get_human_annotations( target_model_patterns: list[list[str]], ) -> list[AnnotationForEpisode]: episodes_with_human_annotation: list[AnnotationForEpisode] = [] - for pk in AnnotationForEpisode.all_pks(): - episode_human = AnnotationForEpisode.get(pk) + human_annotated_episodes = AnnotationForEpisode.all() + for episode_human in human_annotated_episodes: episode_model = EpisodeLog.get(episode_human.episode) if episode_model.models in target_model_patterns: episodes_with_human_annotation.append(episode_human) diff --git a/examples/evaluate_existing_episode.py b/examples/evaluate_existing_episode.py index 9a143bd99..8b80b4a43 100644 --- a/examples/evaluate_existing_episode.py +++ b/examples/evaluate_existing_episode.py @@ -98,10 +98,7 @@ def run_server( push_to_db: bool = True, verbose: bool = False, ) -> None: - annotated_episodes_pks = [ - AnnotationForEpisode.get(anno).episode - for anno in AnnotationForEpisode.all_pks() - ] + annotated_episodes_pks = [anno.episode for anno in AnnotationForEpisode.all()] annotated_episodes_pks = list(set(annotated_episodes_pks)) model = typing.cast(LLM_Name, model) # Call the function with the specified parameters diff --git a/sotopia/database/__init__.py b/sotopia/database/__init__.py index 34dd74de6..735d005ee 100644 --- a/sotopia/database/__init__.py +++ b/sotopia/database/__init__.py @@ -1,3 +1,5 @@ +from typing import TypeVar +from redis_om import JsonModel from .annotators import Annotator from .env_agent_combo_storage import EnvAgentComboStorage from .logs import AnnotationForEpisode, EpisodeLog @@ -60,3 +62,12 @@ "jsonl_to_envagnetcombostorage", "get_rewards_from_episode", ] + +InheritedJsonModel = TypeVar("InheritedJsonModel", bound="JsonModel") + + +def _json_model_all(cls: type[InheritedJsonModel]) -> list[InheritedJsonModel]: + return cls.find().all() # type: ignore[return-value] + + +JsonModel.all = classmethod(_json_model_all) # type: ignore[assignment,method-assign] diff --git a/sotopia/samplers/constraint_based_sampler.py b/sotopia/samplers/constraint_based_sampler.py index 48eaea74d..624520dcd 100644 --- a/sotopia/samplers/constraint_based_sampler.py +++ b/sotopia/samplers/constraint_based_sampler.py @@ -86,6 +86,12 @@ def sample( env_profiles: list[EnvironmentProfile] = [] agents_which_fit_scenario: list[list[str]] = [] + if self.env_candidates is None: + self.env_candidates = EnvironmentProfile.all() + + if self.agent_candidates is None: + self.agent_candidates = AgentProfile.all() + agent_candidate_ids: set[str] | None = None if self.agent_candidates: agent_candidate_ids = set( @@ -120,13 +126,9 @@ def sample( ) else: for _ in range(size): - if self.env_candidates: - env_profile = random.choice(self.env_candidates) - if isinstance(env_profile, str): - env_profile = EnvironmentProfile.get(env_profile) - else: - env_profile_id = random.choice(list(EnvironmentProfile.all_pks())) - env_profile = EnvironmentProfile.get(env_profile_id) + env_profile = random.choice(self.env_candidates) + if isinstance(env_profile, str): + env_profile = EnvironmentProfile.get(env_profile) env_profiles.append(env_profile) env_profile_id = env_profile.pk assert env_profile_id, "Env candidate must have an id" diff --git a/sotopia/samplers/uniform_sampler.py b/sotopia/samplers/uniform_sampler.py index 9e4f36116..22c89f3c3 100644 --- a/sotopia/samplers/uniform_sampler.py +++ b/sotopia/samplers/uniform_sampler.py @@ -46,32 +46,19 @@ def sample( assert replacement, "Uniform sampling without replacement is not supported yet" + if self.env_candidates is None: + self.env_candidates = EnvironmentProfile.all() + + if self.agent_candidates is None: + self.agent_candidates = AgentProfile.all() + for _ in range(size): - if self.env_candidates: - env_profile = random.choice(self.env_candidates) - if isinstance(env_profile, str): - env_profile = EnvironmentProfile.get(env_profile) - else: - env_profile_id = random.choice(list(EnvironmentProfile.all_pks())) - env_profile = EnvironmentProfile.get(env_profile_id) + env_profile = random.choice(self.env_candidates) + if isinstance(env_profile, str): + env_profile = EnvironmentProfile.get(env_profile) env = ParallelSotopiaEnv(env_profile=env_profile, **env_params) - if self.agent_candidates: - agent_profile_candidates = self.agent_candidates - if len(agent_profile_candidates) < n_agent: - raise ValueError( - f"Number of agent candidates ({len(agent_profile_candidates)}) is less than number of agents ({n_agent})" - ) - else: - agent_profile_candidates_keys = list(AgentProfile.all_pks()) - if len(agent_profile_candidates_keys) < n_agent: - raise ValueError( - f"Number of agent profile candidates ({len(agent_profile_candidates_keys)}) in database is less than number of agents ({n_agent})" - ) - agent_profile_candidates = [ - AgentProfile.get(pk=pk) for pk in agent_profile_candidates_keys - ] - + agent_profile_candidates = self.agent_candidates if len(agent_profile_candidates) == n_agent: agent_profiles_maybe_id = agent_profile_candidates else: diff --git a/stubs/redis_om/__init__.pyi b/stubs/redis_om/__init__.pyi index 230b0e48c..038ca7ac4 100644 --- a/stubs/redis_om/__init__.pyi +++ b/stubs/redis_om/__init__.pyi @@ -27,6 +27,8 @@ class JsonModel(RedisModel, abc.ABC): @classmethod def all_pks(cls) -> Generator[str, None, None]: ... @classmethod + def all(cls: type[InheritedJsonModel]) -> list[InheritedJsonModel]: ... + @classmethod def find(cls, *args: Any, **kwargs: Any) -> FindQuery: ... def save(self) -> None: ... From 7bd088f0a5d4aa487df3faacc59bfee7b98dd9b8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 22 Aug 2024 00:13:00 -0400 Subject: [PATCH 24/43] Bump types-setuptools from 71.1.0.20240806 to 72.2.0.20240821 (#173) Bumps [types-setuptools](https://github.com/python/typeshed) from 71.1.0.20240806 to 72.2.0.20240821. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 8b8f234bd..ce8035f3d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -5186,13 +5186,13 @@ urllib3 = ">=2" [[package]] name = "types-setuptools" -version = "71.1.0.20240806" +version = "72.2.0.20240821" description = "Typing stubs for setuptools" optional = false python-versions = ">=3.8" files = [ - {file = "types-setuptools-71.1.0.20240806.tar.gz", hash = "sha256:ae5e7b4d643ab9e99fc00ac00041804118cabe72a56183c30d524fb064897ad6"}, - {file = "types_setuptools-71.1.0.20240806-py3-none-any.whl", hash = "sha256:3bd8dd02039be0bb79ad880d8893b8eefcb022fabbeeb61245c61b20c9ab1ed0"}, + {file = "types-setuptools-72.2.0.20240821.tar.gz", hash = "sha256:e349b8015608879939f27ee370672f801287c46f5caa2d188d416336172c4965"}, + {file = "types_setuptools-72.2.0.20240821-py3-none-any.whl", hash = "sha256:260e89d6d3b42cc35f9f0f382d030713b7b547344a664c05c9175e6ba124fac7"}, ] [[package]] From 77a97f81b953c365960b155a2ba2463c1fb179c5 Mon Sep 17 00:00:00 2001 From: Xuhui Zhou Date: Mon, 26 Aug 2024 12:24:19 -0400 Subject: [PATCH 25/43] structured output (#175) * structured output * update doc * remove ignore * speed up poetry --- .github/workflows/tests.yml | 1 - docs/pages/concepts/generation.md | 10 + poetry.lock | 1263 +++++++++++---------- sotopia/generation_utils/generate.py | 68 +- tests/generation_utils/test_generation.py | 18 + 5 files changed, 736 insertions(+), 624 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 36d4c2e51..99c317cc7 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -38,7 +38,6 @@ jobs: uses: abatilo/actions-poetry@v2 - name: Install dependencies run: | - poetry lock poetry install --with test -E chat - name: Test with pytest env: # Or as an environment variable diff --git a/docs/pages/concepts/generation.md b/docs/pages/concepts/generation.md index 818fa3a79..41895aec3 100644 --- a/docs/pages/concepts/generation.md +++ b/docs/pages/concepts/generation.md @@ -11,14 +11,24 @@ async def agenerate( input_values: dict[str, str], output_parser: BaseOutputParser[OutputType], temperature: float = 0.7, + structured_output: bool = False, ) -> OutputType: input_variables = re.findall(r"(? + Structured output is used to return the output in a structured format, such as a dictionary or a Pydantic object. + Currently, the structured output is only supported for the models below: + * `gpt-4o-mini-2024-07-18` and later + * `gpt-4o-2024-08-06` and later + + Here are a few examples of how to use the `agenerate` function: + + ### Automatically generate scenarios ```python diff --git a/poetry.lock b/poetry.lock index ce8035f3d..3ffc94c66 100644 --- a/poetry.lock +++ b/poetry.lock @@ -13,98 +13,113 @@ files = [ [[package]] name = "aiohappyeyeballs" -version = "2.3.5" +version = "2.4.0" description = "Happy Eyeballs for asyncio" optional = false python-versions = ">=3.8" files = [ - {file = "aiohappyeyeballs-2.3.5-py3-none-any.whl", hash = "sha256:4d6dea59215537dbc746e93e779caea8178c866856a721c9c660d7a5a7b8be03"}, - {file = "aiohappyeyeballs-2.3.5.tar.gz", hash = "sha256:6fa48b9f1317254f122a07a131a86b71ca6946ca989ce6326fff54a99a920105"}, + {file = "aiohappyeyeballs-2.4.0-py3-none-any.whl", hash = "sha256:7ce92076e249169a13c2f49320d1967425eaf1f407522d707d59cac7628d62bd"}, + {file = "aiohappyeyeballs-2.4.0.tar.gz", hash = "sha256:55a1714f084e63d49639800f95716da97a1f173d46a16dfcfda0016abb93b6b2"}, ] [[package]] name = "aiohttp" -version = "3.10.3" +version = "3.10.5" description = "Async http client/server framework (asyncio)" optional = false python-versions = ">=3.8" files = [ - {file = "aiohttp-3.10.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cc36cbdedf6f259371dbbbcaae5bb0e95b879bc501668ab6306af867577eb5db"}, - {file = "aiohttp-3.10.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:85466b5a695c2a7db13eb2c200af552d13e6a9313d7fa92e4ffe04a2c0ea74c1"}, - {file = "aiohttp-3.10.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:71bb1d97bfe7e6726267cea169fdf5df7658831bb68ec02c9c6b9f3511e108bb"}, - {file = "aiohttp-3.10.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:baec1eb274f78b2de54471fc4c69ecbea4275965eab4b556ef7a7698dee18bf2"}, - {file = "aiohttp-3.10.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:13031e7ec1188274bad243255c328cc3019e36a5a907978501256000d57a7201"}, - {file = "aiohttp-3.10.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2bbc55a964b8eecb341e492ae91c3bd0848324d313e1e71a27e3d96e6ee7e8e8"}, - {file = "aiohttp-3.10.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e8cc0564b286b625e673a2615ede60a1704d0cbbf1b24604e28c31ed37dc62aa"}, - {file = "aiohttp-3.10.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f817a54059a4cfbc385a7f51696359c642088710e731e8df80d0607193ed2b73"}, - {file = "aiohttp-3.10.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8542c9e5bcb2bd3115acdf5adc41cda394e7360916197805e7e32b93d821ef93"}, - {file = "aiohttp-3.10.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:671efce3a4a0281060edf9a07a2f7e6230dca3a1cbc61d110eee7753d28405f7"}, - {file = "aiohttp-3.10.3-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:0974f3b5b0132edcec92c3306f858ad4356a63d26b18021d859c9927616ebf27"}, - {file = "aiohttp-3.10.3-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:44bb159b55926b57812dca1b21c34528e800963ffe130d08b049b2d6b994ada7"}, - {file = "aiohttp-3.10.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:6ae9ae382d1c9617a91647575255ad55a48bfdde34cc2185dd558ce476bf16e9"}, - {file = "aiohttp-3.10.3-cp310-cp310-win32.whl", hash = "sha256:aed12a54d4e1ee647376fa541e1b7621505001f9f939debf51397b9329fd88b9"}, - {file = "aiohttp-3.10.3-cp310-cp310-win_amd64.whl", hash = "sha256:b51aef59370baf7444de1572f7830f59ddbabd04e5292fa4218d02f085f8d299"}, - {file = "aiohttp-3.10.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e021c4c778644e8cdc09487d65564265e6b149896a17d7c0f52e9a088cc44e1b"}, - {file = "aiohttp-3.10.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:24fade6dae446b183e2410a8628b80df9b7a42205c6bfc2eff783cbeedc224a2"}, - {file = "aiohttp-3.10.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bc8e9f15939dacb0e1f2d15f9c41b786051c10472c7a926f5771e99b49a5957f"}, - {file = "aiohttp-3.10.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5a9ec959b5381271c8ec9310aae1713b2aec29efa32e232e5ef7dcca0df0279"}, - {file = "aiohttp-3.10.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2a5d0ea8a6467b15d53b00c4e8ea8811e47c3cc1bdbc62b1aceb3076403d551f"}, - {file = "aiohttp-3.10.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c9ed607dbbdd0d4d39b597e5bf6b0d40d844dfb0ac6a123ed79042ef08c1f87e"}, - {file = "aiohttp-3.10.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3e66d5b506832e56add66af88c288c1d5ba0c38b535a1a59e436b300b57b23e"}, - {file = "aiohttp-3.10.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fda91ad797e4914cca0afa8b6cccd5d2b3569ccc88731be202f6adce39503189"}, - {file = "aiohttp-3.10.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:61ccb867b2f2f53df6598eb2a93329b5eee0b00646ee79ea67d68844747a418e"}, - {file = "aiohttp-3.10.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:6d881353264e6156f215b3cb778c9ac3184f5465c2ece5e6fce82e68946868ef"}, - {file = "aiohttp-3.10.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:b031ce229114825f49cec4434fa844ccb5225e266c3e146cb4bdd025a6da52f1"}, - {file = "aiohttp-3.10.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:5337cc742a03f9e3213b097abff8781f79de7190bbfaa987bd2b7ceb5bb0bdec"}, - {file = "aiohttp-3.10.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ab3361159fd3dcd0e48bbe804006d5cfb074b382666e6c064112056eb234f1a9"}, - {file = "aiohttp-3.10.3-cp311-cp311-win32.whl", hash = "sha256:05d66203a530209cbe40f102ebaac0b2214aba2a33c075d0bf825987c36f1f0b"}, - {file = "aiohttp-3.10.3-cp311-cp311-win_amd64.whl", hash = "sha256:70b4a4984a70a2322b70e088d654528129783ac1ebbf7dd76627b3bd22db2f17"}, - {file = "aiohttp-3.10.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:166de65e2e4e63357cfa8417cf952a519ac42f1654cb2d43ed76899e2319b1ee"}, - {file = "aiohttp-3.10.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:7084876352ba3833d5d214e02b32d794e3fd9cf21fdba99cff5acabeb90d9806"}, - {file = "aiohttp-3.10.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d98c604c93403288591d7d6d7d6cc8a63459168f8846aeffd5b3a7f3b3e5e09"}, - {file = "aiohttp-3.10.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d73b073a25a0bb8bf014345374fe2d0f63681ab5da4c22f9d2025ca3e3ea54fc"}, - {file = "aiohttp-3.10.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8da6b48c20ce78f5721068f383e0e113dde034e868f1b2f5ee7cb1e95f91db57"}, - {file = "aiohttp-3.10.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3a9dcdccf50284b1b0dc72bc57e5bbd3cc9bf019060dfa0668f63241ccc16aa7"}, - {file = "aiohttp-3.10.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56fb94bae2be58f68d000d046172d8b8e6b1b571eb02ceee5535e9633dcd559c"}, - {file = "aiohttp-3.10.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bf75716377aad2c718cdf66451c5cf02042085d84522aec1f9246d3e4b8641a6"}, - {file = "aiohttp-3.10.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6c51ed03e19c885c8e91f574e4bbe7381793f56f93229731597e4a499ffef2a5"}, - {file = "aiohttp-3.10.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b84857b66fa6510a163bb083c1199d1ee091a40163cfcbbd0642495fed096204"}, - {file = "aiohttp-3.10.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c124b9206b1befe0491f48185fd30a0dd51b0f4e0e7e43ac1236066215aff272"}, - {file = "aiohttp-3.10.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:3461d9294941937f07bbbaa6227ba799bc71cc3b22c40222568dc1cca5118f68"}, - {file = "aiohttp-3.10.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:08bd0754d257b2db27d6bab208c74601df6f21bfe4cb2ec7b258ba691aac64b3"}, - {file = "aiohttp-3.10.3-cp312-cp312-win32.whl", hash = "sha256:7f9159ae530297f61a00116771e57516f89a3de6ba33f314402e41560872b50a"}, - {file = "aiohttp-3.10.3-cp312-cp312-win_amd64.whl", hash = "sha256:e1128c5d3a466279cb23c4aa32a0f6cb0e7d2961e74e9e421f90e74f75ec1edf"}, - {file = "aiohttp-3.10.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:d1100e68e70eb72eadba2b932b185ebf0f28fd2f0dbfe576cfa9d9894ef49752"}, - {file = "aiohttp-3.10.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a541414578ff47c0a9b0b8b77381ea86b0c8531ab37fc587572cb662ccd80b88"}, - {file = "aiohttp-3.10.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d5548444ef60bf4c7b19ace21f032fa42d822e516a6940d36579f7bfa8513f9c"}, - {file = "aiohttp-3.10.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ba2e838b5e6a8755ac8297275c9460e729dc1522b6454aee1766c6de6d56e5e"}, - {file = "aiohttp-3.10.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:48665433bb59144aaf502c324694bec25867eb6630fcd831f7a893ca473fcde4"}, - {file = "aiohttp-3.10.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bac352fceed158620ce2d701ad39d4c1c76d114255a7c530e057e2b9f55bdf9f"}, - {file = "aiohttp-3.10.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b0f670502100cdc567188c49415bebba947eb3edaa2028e1a50dd81bd13363f"}, - {file = "aiohttp-3.10.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:43b09f38a67679e32d380fe512189ccb0b25e15afc79b23fbd5b5e48e4fc8fd9"}, - {file = "aiohttp-3.10.3-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:cd788602e239ace64f257d1c9d39898ca65525583f0fbf0988bcba19418fe93f"}, - {file = "aiohttp-3.10.3-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:214277dcb07ab3875f17ee1c777d446dcce75bea85846849cc9d139ab8f5081f"}, - {file = "aiohttp-3.10.3-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:32007fdcaab789689c2ecaaf4b71f8e37bf012a15cd02c0a9db8c4d0e7989fa8"}, - {file = "aiohttp-3.10.3-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:123e5819bfe1b87204575515cf448ab3bf1489cdeb3b61012bde716cda5853e7"}, - {file = "aiohttp-3.10.3-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:812121a201f0c02491a5db335a737b4113151926a79ae9ed1a9f41ea225c0e3f"}, - {file = "aiohttp-3.10.3-cp38-cp38-win32.whl", hash = "sha256:b97dc9a17a59f350c0caa453a3cb35671a2ffa3a29a6ef3568b523b9113d84e5"}, - {file = "aiohttp-3.10.3-cp38-cp38-win_amd64.whl", hash = "sha256:3731a73ddc26969d65f90471c635abd4e1546a25299b687e654ea6d2fc052394"}, - {file = "aiohttp-3.10.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:38d91b98b4320ffe66efa56cb0f614a05af53b675ce1b8607cdb2ac826a8d58e"}, - {file = "aiohttp-3.10.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9743fa34a10a36ddd448bba8a3adc2a66a1c575c3c2940301bacd6cc896c6bf1"}, - {file = "aiohttp-3.10.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7c126f532caf238031c19d169cfae3c6a59129452c990a6e84d6e7b198a001dc"}, - {file = "aiohttp-3.10.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:926e68438f05703e500b06fe7148ef3013dd6f276de65c68558fa9974eeb59ad"}, - {file = "aiohttp-3.10.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:434b3ab75833accd0b931d11874e206e816f6e6626fd69f643d6a8269cd9166a"}, - {file = "aiohttp-3.10.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d35235a44ec38109b811c3600d15d8383297a8fab8e3dec6147477ec8636712a"}, - {file = "aiohttp-3.10.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59c489661edbd863edb30a8bd69ecb044bd381d1818022bc698ba1b6f80e5dd1"}, - {file = "aiohttp-3.10.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:50544fe498c81cb98912afabfc4e4d9d85e89f86238348e3712f7ca6a2f01dab"}, - {file = "aiohttp-3.10.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:09bc79275737d4dc066e0ae2951866bb36d9c6b460cb7564f111cc0427f14844"}, - {file = "aiohttp-3.10.3-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:af4dbec58e37f5afff4f91cdf235e8e4b0bd0127a2a4fd1040e2cad3369d2f06"}, - {file = "aiohttp-3.10.3-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:b22cae3c9dd55a6b4c48c63081d31c00fc11fa9db1a20c8a50ee38c1a29539d2"}, - {file = "aiohttp-3.10.3-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:ba562736d3fbfe9241dad46c1a8994478d4a0e50796d80e29d50cabe8fbfcc3f"}, - {file = "aiohttp-3.10.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:f25d6c4e82d7489be84f2b1c8212fafc021b3731abdb61a563c90e37cced3a21"}, - {file = "aiohttp-3.10.3-cp39-cp39-win32.whl", hash = "sha256:b69d832e5f5fa15b1b6b2c8eb6a9fd2c0ec1fd7729cb4322ed27771afc9fc2ac"}, - {file = "aiohttp-3.10.3-cp39-cp39-win_amd64.whl", hash = "sha256:673bb6e3249dc8825df1105f6ef74e2eab779b7ff78e96c15cadb78b04a83752"}, - {file = "aiohttp-3.10.3.tar.gz", hash = "sha256:21650e7032cc2d31fc23d353d7123e771354f2a3d5b05a5647fc30fea214e696"}, + {file = "aiohttp-3.10.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:18a01eba2574fb9edd5f6e5fb25f66e6ce061da5dab5db75e13fe1558142e0a3"}, + {file = "aiohttp-3.10.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:94fac7c6e77ccb1ca91e9eb4cb0ac0270b9fb9b289738654120ba8cebb1189c6"}, + {file = "aiohttp-3.10.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2f1f1c75c395991ce9c94d3e4aa96e5c59c8356a15b1c9231e783865e2772699"}, + {file = "aiohttp-3.10.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f7acae3cf1a2a2361ec4c8e787eaaa86a94171d2417aae53c0cca6ca3118ff6"}, + {file = "aiohttp-3.10.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:94c4381ffba9cc508b37d2e536b418d5ea9cfdc2848b9a7fea6aebad4ec6aac1"}, + {file = "aiohttp-3.10.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c31ad0c0c507894e3eaa843415841995bf8de4d6b2d24c6e33099f4bc9fc0d4f"}, + {file = "aiohttp-3.10.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0912b8a8fadeb32ff67a3ed44249448c20148397c1ed905d5dac185b4ca547bb"}, + {file = "aiohttp-3.10.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0d93400c18596b7dc4794d48a63fb361b01a0d8eb39f28800dc900c8fbdaca91"}, + {file = "aiohttp-3.10.5-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d00f3c5e0d764a5c9aa5a62d99728c56d455310bcc288a79cab10157b3af426f"}, + {file = "aiohttp-3.10.5-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:d742c36ed44f2798c8d3f4bc511f479b9ceef2b93f348671184139e7d708042c"}, + {file = "aiohttp-3.10.5-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:814375093edae5f1cb31e3407997cf3eacefb9010f96df10d64829362ae2df69"}, + {file = "aiohttp-3.10.5-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8224f98be68a84b19f48e0bdc14224b5a71339aff3a27df69989fa47d01296f3"}, + {file = "aiohttp-3.10.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d9a487ef090aea982d748b1b0d74fe7c3950b109df967630a20584f9a99c0683"}, + {file = "aiohttp-3.10.5-cp310-cp310-win32.whl", hash = "sha256:d9ef084e3dc690ad50137cc05831c52b6ca428096e6deb3c43e95827f531d5ef"}, + {file = "aiohttp-3.10.5-cp310-cp310-win_amd64.whl", hash = "sha256:66bf9234e08fe561dccd62083bf67400bdbf1c67ba9efdc3dac03650e97c6088"}, + {file = "aiohttp-3.10.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8c6a4e5e40156d72a40241a25cc226051c0a8d816610097a8e8f517aeacd59a2"}, + {file = "aiohttp-3.10.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2c634a3207a5445be65536d38c13791904fda0748b9eabf908d3fe86a52941cf"}, + {file = "aiohttp-3.10.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4aff049b5e629ef9b3e9e617fa6e2dfeda1bf87e01bcfecaf3949af9e210105e"}, + {file = "aiohttp-3.10.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1942244f00baaacaa8155eca94dbd9e8cc7017deb69b75ef67c78e89fdad3c77"}, + {file = "aiohttp-3.10.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e04a1f2a65ad2f93aa20f9ff9f1b672bf912413e5547f60749fa2ef8a644e061"}, + {file = "aiohttp-3.10.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7f2bfc0032a00405d4af2ba27f3c429e851d04fad1e5ceee4080a1c570476697"}, + {file = "aiohttp-3.10.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:424ae21498790e12eb759040bbb504e5e280cab64693d14775c54269fd1d2bb7"}, + {file = "aiohttp-3.10.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:975218eee0e6d24eb336d0328c768ebc5d617609affaca5dbbd6dd1984f16ed0"}, + {file = "aiohttp-3.10.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4120d7fefa1e2d8fb6f650b11489710091788de554e2b6f8347c7a20ceb003f5"}, + {file = "aiohttp-3.10.5-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:b90078989ef3fc45cf9221d3859acd1108af7560c52397ff4ace8ad7052a132e"}, + {file = "aiohttp-3.10.5-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:ba5a8b74c2a8af7d862399cdedce1533642fa727def0b8c3e3e02fcb52dca1b1"}, + {file = "aiohttp-3.10.5-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:02594361128f780eecc2a29939d9dfc870e17b45178a867bf61a11b2a4367277"}, + {file = "aiohttp-3.10.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8fb4fc029e135859f533025bc82047334e24b0d489e75513144f25408ecaf058"}, + {file = "aiohttp-3.10.5-cp311-cp311-win32.whl", hash = "sha256:e1ca1ef5ba129718a8fc827b0867f6aa4e893c56eb00003b7367f8a733a9b072"}, + {file = "aiohttp-3.10.5-cp311-cp311-win_amd64.whl", hash = "sha256:349ef8a73a7c5665cca65c88ab24abe75447e28aa3bc4c93ea5093474dfdf0ff"}, + {file = "aiohttp-3.10.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:305be5ff2081fa1d283a76113b8df7a14c10d75602a38d9f012935df20731487"}, + {file = "aiohttp-3.10.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3a1c32a19ee6bbde02f1cb189e13a71b321256cc1d431196a9f824050b160d5a"}, + {file = "aiohttp-3.10.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:61645818edd40cc6f455b851277a21bf420ce347baa0b86eaa41d51ef58ba23d"}, + {file = "aiohttp-3.10.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c225286f2b13bab5987425558baa5cbdb2bc925b2998038fa028245ef421e75"}, + {file = "aiohttp-3.10.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8ba01ebc6175e1e6b7275c907a3a36be48a2d487549b656aa90c8a910d9f3178"}, + {file = "aiohttp-3.10.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8eaf44ccbc4e35762683078b72bf293f476561d8b68ec8a64f98cf32811c323e"}, + {file = "aiohttp-3.10.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1c43eb1ab7cbf411b8e387dc169acb31f0ca0d8c09ba63f9eac67829585b44f"}, + {file = "aiohttp-3.10.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:de7a5299827253023c55ea549444e058c0eb496931fa05d693b95140a947cb73"}, + {file = "aiohttp-3.10.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4790f0e15f00058f7599dab2b206d3049d7ac464dc2e5eae0e93fa18aee9e7bf"}, + {file = "aiohttp-3.10.5-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:44b324a6b8376a23e6ba25d368726ee3bc281e6ab306db80b5819999c737d820"}, + {file = "aiohttp-3.10.5-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:0d277cfb304118079e7044aad0b76685d30ecb86f83a0711fc5fb257ffe832ca"}, + {file = "aiohttp-3.10.5-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:54d9ddea424cd19d3ff6128601a4a4d23d54a421f9b4c0fff740505813739a91"}, + {file = "aiohttp-3.10.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4f1c9866ccf48a6df2b06823e6ae80573529f2af3a0992ec4fe75b1a510df8a6"}, + {file = "aiohttp-3.10.5-cp312-cp312-win32.whl", hash = "sha256:dc4826823121783dccc0871e3f405417ac116055bf184ac04c36f98b75aacd12"}, + {file = "aiohttp-3.10.5-cp312-cp312-win_amd64.whl", hash = "sha256:22c0a23a3b3138a6bf76fc553789cb1a703836da86b0f306b6f0dc1617398abc"}, + {file = "aiohttp-3.10.5-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:7f6b639c36734eaa80a6c152a238242bedcee9b953f23bb887e9102976343092"}, + {file = "aiohttp-3.10.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f29930bc2921cef955ba39a3ff87d2c4398a0394ae217f41cb02d5c26c8b1b77"}, + {file = "aiohttp-3.10.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f489a2c9e6455d87eabf907ac0b7d230a9786be43fbe884ad184ddf9e9c1e385"}, + {file = "aiohttp-3.10.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:123dd5b16b75b2962d0fff566effb7a065e33cd4538c1692fb31c3bda2bfb972"}, + {file = "aiohttp-3.10.5-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b98e698dc34966e5976e10bbca6d26d6724e6bdea853c7c10162a3235aba6e16"}, + {file = "aiohttp-3.10.5-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3b9162bab7e42f21243effc822652dc5bb5e8ff42a4eb62fe7782bcbcdfacf6"}, + {file = "aiohttp-3.10.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1923a5c44061bffd5eebeef58cecf68096e35003907d8201a4d0d6f6e387ccaa"}, + {file = "aiohttp-3.10.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d55f011da0a843c3d3df2c2cf4e537b8070a419f891c930245f05d329c4b0689"}, + {file = "aiohttp-3.10.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:afe16a84498441d05e9189a15900640a2d2b5e76cf4efe8cbb088ab4f112ee57"}, + {file = "aiohttp-3.10.5-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:f8112fb501b1e0567a1251a2fd0747baae60a4ab325a871e975b7bb67e59221f"}, + {file = "aiohttp-3.10.5-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:1e72589da4c90337837fdfe2026ae1952c0f4a6e793adbbfbdd40efed7c63599"}, + {file = "aiohttp-3.10.5-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:4d46c7b4173415d8e583045fbc4daa48b40e31b19ce595b8d92cf639396c15d5"}, + {file = "aiohttp-3.10.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:33e6bc4bab477c772a541f76cd91e11ccb6d2efa2b8d7d7883591dfb523e5987"}, + {file = "aiohttp-3.10.5-cp313-cp313-win32.whl", hash = "sha256:c58c6837a2c2a7cf3133983e64173aec11f9c2cd8e87ec2fdc16ce727bcf1a04"}, + {file = "aiohttp-3.10.5-cp313-cp313-win_amd64.whl", hash = "sha256:38172a70005252b6893088c0f5e8a47d173df7cc2b2bd88650957eb84fcf5022"}, + {file = "aiohttp-3.10.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:f6f18898ace4bcd2d41a122916475344a87f1dfdec626ecde9ee802a711bc569"}, + {file = "aiohttp-3.10.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5ede29d91a40ba22ac1b922ef510aab871652f6c88ef60b9dcdf773c6d32ad7a"}, + {file = "aiohttp-3.10.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:673f988370f5954df96cc31fd99c7312a3af0a97f09e407399f61583f30da9bc"}, + {file = "aiohttp-3.10.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58718e181c56a3c02d25b09d4115eb02aafe1a732ce5714ab70326d9776457c3"}, + {file = "aiohttp-3.10.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b38b1570242fbab8d86a84128fb5b5234a2f70c2e32f3070143a6d94bc854cf"}, + {file = "aiohttp-3.10.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:074d1bff0163e107e97bd48cad9f928fa5a3eb4b9d33366137ffce08a63e37fe"}, + {file = "aiohttp-3.10.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd31f176429cecbc1ba499d4aba31aaccfea488f418d60376b911269d3b883c5"}, + {file = "aiohttp-3.10.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7384d0b87d4635ec38db9263e6a3f1eb609e2e06087f0aa7f63b76833737b471"}, + {file = "aiohttp-3.10.5-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:8989f46f3d7ef79585e98fa991e6ded55d2f48ae56d2c9fa5e491a6e4effb589"}, + {file = "aiohttp-3.10.5-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:c83f7a107abb89a227d6c454c613e7606c12a42b9a4ca9c5d7dad25d47c776ae"}, + {file = "aiohttp-3.10.5-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:cde98f323d6bf161041e7627a5fd763f9fd829bcfcd089804a5fdce7bb6e1b7d"}, + {file = "aiohttp-3.10.5-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:676f94c5480d8eefd97c0c7e3953315e4d8c2b71f3b49539beb2aa676c58272f"}, + {file = "aiohttp-3.10.5-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:2d21ac12dc943c68135ff858c3a989f2194a709e6e10b4c8977d7fcd67dfd511"}, + {file = "aiohttp-3.10.5-cp38-cp38-win32.whl", hash = "sha256:17e997105bd1a260850272bfb50e2a328e029c941c2708170d9d978d5a30ad9a"}, + {file = "aiohttp-3.10.5-cp38-cp38-win_amd64.whl", hash = "sha256:1c19de68896747a2aa6257ae4cf6ef59d73917a36a35ee9d0a6f48cff0f94db8"}, + {file = "aiohttp-3.10.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7e2fe37ac654032db1f3499fe56e77190282534810e2a8e833141a021faaab0e"}, + {file = "aiohttp-3.10.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f5bf3ead3cb66ab990ee2561373b009db5bc0e857549b6c9ba84b20bc462e172"}, + {file = "aiohttp-3.10.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1b2c16a919d936ca87a3c5f0e43af12a89a3ce7ccbce59a2d6784caba945b68b"}, + {file = "aiohttp-3.10.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad146dae5977c4dd435eb31373b3fe9b0b1bf26858c6fc452bf6af394067e10b"}, + {file = "aiohttp-3.10.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8c5c6fa16412b35999320f5c9690c0f554392dc222c04e559217e0f9ae244b92"}, + {file = "aiohttp-3.10.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:95c4dc6f61d610bc0ee1edc6f29d993f10febfe5b76bb470b486d90bbece6b22"}, + {file = "aiohttp-3.10.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da452c2c322e9ce0cfef392e469a26d63d42860f829026a63374fde6b5c5876f"}, + {file = "aiohttp-3.10.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:898715cf566ec2869d5cb4d5fb4be408964704c46c96b4be267442d265390f32"}, + {file = "aiohttp-3.10.5-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:391cc3a9c1527e424c6865e087897e766a917f15dddb360174a70467572ac6ce"}, + {file = "aiohttp-3.10.5-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:380f926b51b92d02a34119d072f178d80bbda334d1a7e10fa22d467a66e494db"}, + {file = "aiohttp-3.10.5-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ce91db90dbf37bb6fa0997f26574107e1b9d5ff939315247b7e615baa8ec313b"}, + {file = "aiohttp-3.10.5-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:9093a81e18c45227eebe4c16124ebf3e0d893830c6aca7cc310bfca8fe59d857"}, + {file = "aiohttp-3.10.5-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:ee40b40aa753d844162dcc80d0fe256b87cba48ca0054f64e68000453caead11"}, + {file = "aiohttp-3.10.5-cp39-cp39-win32.whl", hash = "sha256:03f2645adbe17f274444953bdea69f8327e9d278d961d85657cb0d06864814c1"}, + {file = "aiohttp-3.10.5-cp39-cp39-win_amd64.whl", hash = "sha256:d17920f18e6ee090bdd3d0bfffd769d9f2cb4c8ffde3eb203777a3895c128862"}, + {file = "aiohttp-3.10.5.tar.gz", hash = "sha256:f071854b47d39591ce9a17981c46790acb30518e2f83dfca8db2dfa091178691"}, ] [package.dependencies] @@ -259,17 +274,17 @@ test-tox-coverage = ["coverage (>=5.5)"] [[package]] name = "boto3" -version = "1.34.158" +version = "1.35.5" description = "The AWS SDK for Python" optional = true python-versions = ">=3.8" files = [ - {file = "boto3-1.34.158-py3-none-any.whl", hash = "sha256:c29e9b7e1034e8734ccaffb9f2b3f3df2268022fd8a93d836604019f8759ce27"}, - {file = "boto3-1.34.158.tar.gz", hash = "sha256:5b7b2ce0ec1e498933f600d29f3e1c641f8c44dd7e468c26795359d23d81fa39"}, + {file = "boto3-1.35.5-py3-none-any.whl", hash = "sha256:2cef3aa476181395c260f4b6e6c5565e5a3022a874fb6b579d8e6b169f94e0b3"}, + {file = "boto3-1.35.5.tar.gz", hash = "sha256:5724ddeda8e18c7614c20a09c20159ed87ff7439755cf5e250a1a3feaf9afb7e"}, ] [package.dependencies] -botocore = ">=1.34.158,<1.35.0" +botocore = ">=1.35.5,<1.36.0" jmespath = ">=0.7.1,<2.0.0" s3transfer = ">=0.10.0,<0.11.0" @@ -278,13 +293,13 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "botocore" -version = "1.34.158" +version = "1.35.5" description = "Low-level, data-driven core of boto 3." optional = true python-versions = ">=3.8" files = [ - {file = "botocore-1.34.158-py3-none-any.whl", hash = "sha256:0e6fceba1e39bfa8feeba70ba3ac2af958b3387df4bd3b5f2db3f64c1754c756"}, - {file = "botocore-1.34.158.tar.gz", hash = "sha256:5934082e25ad726673afbf466092fb1223dafa250e6e756c819430ba6b1b3da5"}, + {file = "botocore-1.35.5-py3-none-any.whl", hash = "sha256:8116b72c7ae845c195146e437e2afd9d17538a37b3f3548dcf67c12c86ba0742"}, + {file = "botocore-1.35.5.tar.gz", hash = "sha256:3a0086c7124cb3b0d9f98563d00ffd14a942c3f9e731d8d1ccf0d3a1ac7ed884"}, ] [package.dependencies] @@ -297,13 +312,13 @@ crt = ["awscrt (==0.21.2)"] [[package]] name = "cachetools" -version = "5.4.0" +version = "5.5.0" description = "Extensible memoizing collections and decorators" optional = true python-versions = ">=3.7" files = [ - {file = "cachetools-5.4.0-py3-none-any.whl", hash = "sha256:3ae3b49a3d5e28a77a0be2b37dbcb89005058959cb2323858c2657c4a8cab474"}, - {file = "cachetools-5.4.0.tar.gz", hash = "sha256:b8adc2e7c07f105ced7bc56dbb6dfbe7c4a00acce20e2227b3f355be89bc6827"}, + {file = "cachetools-5.5.0-py3-none-any.whl", hash = "sha256:02134e8439cdc2ffb62023ce1debca2944c3f289d66bb17ead3ab3dede74b292"}, + {file = "cachetools-5.5.0.tar.gz", hash = "sha256:2cc24fb4cbe39633fb7badd9db9ca6295d766d9c2995f245725a46715d050f2a"}, ] [[package]] @@ -533,13 +548,13 @@ files = [ [[package]] name = "cohere" -version = "5.8.0" +version = "5.8.1" description = "" optional = true python-versions = "<4.0,>=3.8" files = [ - {file = "cohere-5.8.0-py3-none-any.whl", hash = "sha256:f87f709be6dfe3dce57bef0dd5e90924e8828fb8d334c96fc27663b6a7298c6b"}, - {file = "cohere-5.8.0.tar.gz", hash = "sha256:c4e1ab064d66cc0170091f614b4ea22f55e079f2c7fe9e0de8752fd46f8d2a70"}, + {file = "cohere-5.8.1-py3-none-any.whl", hash = "sha256:92362c651dfbfef8c5d34e95de394578d7197ed7875c6fcbf101e84b60db7fbd"}, + {file = "cohere-5.8.1.tar.gz", hash = "sha256:4c0c4468f15f9ad7fb7af15cc9f7305cd6df51243d69e203682be87e9efa5071"}, ] [package.dependencies] @@ -721,27 +736,26 @@ test-randomorder = ["pytest-randomly"] [[package]] name = "datasets" -version = "2.20.0" +version = "2.21.0" description = "HuggingFace community-driven open-source library of datasets" optional = true python-versions = ">=3.8.0" files = [ - {file = "datasets-2.20.0-py3-none-any.whl", hash = "sha256:76ac02e3bdfff824492e20678f0b6b1b6d080515957fe834b00c2ba8d6b18e5e"}, - {file = "datasets-2.20.0.tar.gz", hash = "sha256:3c4dbcd27e0f642b9d41d20ff2efa721a5e04b32b2ca4009e0fc9139e324553f"}, + {file = "datasets-2.21.0-py3-none-any.whl", hash = "sha256:25e4e097110ce28824b746a107727ada94024cba11db8bc588d468414692b65a"}, + {file = "datasets-2.21.0.tar.gz", hash = "sha256:998f85a8460f1bd982e5bd058f8a0808eef424249e3df1e8cdd594ccd0dc8ba2"}, ] [package.dependencies] aiohttp = "*" dill = ">=0.3.0,<0.3.9" filelock = "*" -fsspec = {version = ">=2023.1.0,<=2024.5.0", extras = ["http"]} +fsspec = {version = ">=2023.1.0,<=2024.6.1", extras = ["http"]} huggingface-hub = ">=0.21.2" multiprocess = "*" numpy = ">=1.17" packaging = "*" pandas = "*" pyarrow = ">=15.0.0" -pyarrow-hotfix = "*" pyyaml = ">=5.1" requests = ">=2.32.2" tqdm = ">=4.66.3" @@ -749,17 +763,18 @@ xxhash = "*" [package.extras] apache-beam = ["apache-beam (>=2.26.0)"] -audio = ["librosa", "soundfile (>=0.12.1)"] +audio = ["librosa", "soundfile (>=0.12.1)", "soxr (>=0.4.0)"] benchmarks = ["tensorflow (==2.12.0)", "torch (==2.0.1)", "transformers (==4.30.1)"] -dev = ["Pillow (>=9.4.0)", "absl-py", "elasticsearch (<8.0.0)", "faiss-cpu (>=1.6.4)", "jax (>=0.3.14)", "jaxlib (>=0.3.14)", "joblib (<1.3.0)", "joblibspark", "librosa", "lz4", "polars[timezone] (>=0.20.0)", "protobuf (<4.0.0)", "py7zr", "pyspark (>=3.4)", "pytest", "pytest-datadir", "pytest-xdist", "rarfile (>=4.0)", "ruff (>=0.3.0)", "s3fs", "s3fs (>=2021.11.1)", "soundfile (>=0.12.1)", "sqlalchemy", "tensorflow (>=2.6.0)", "tiktoken", "torch", "torch (>=2.0.0)", "transformers", "typing-extensions (>=4.6.1)", "zstandard"] +dev = ["Pillow (>=9.4.0)", "absl-py", "decorator", "elasticsearch (<8.0.0)", "faiss-cpu (>=1.8.0.post1)", "jax (>=0.3.14)", "jaxlib (>=0.3.14)", "joblib (<1.3.0)", "joblibspark", "librosa", "lz4", "moto[server]", "polars[timezone] (>=0.20.0)", "protobuf (<4.0.0)", "py7zr", "pyspark (>=3.4)", "pytest", "pytest-datadir", "pytest-xdist", "rarfile (>=4.0)", "ruff (>=0.3.0)", "s3fs", "s3fs (>=2021.11.1)", "soundfile (>=0.12.1)", "soxr (>=0.4.0)", "sqlalchemy", "tensorflow (>=2.16.0)", "tensorflow (>=2.6.0)", "tensorflow (>=2.6.0)", "tiktoken", "torch", "torch (>=2.0.0)", "transformers", "transformers (>=4.42.0)", "typing-extensions (>=4.6.1)", "zstandard"] docs = ["s3fs", "tensorflow (>=2.6.0)", "torch", "transformers"] jax = ["jax (>=0.3.14)", "jaxlib (>=0.3.14)"] -metrics-tests = ["Werkzeug (>=1.0.1)", "accelerate", "bert-score (>=0.3.6)", "jiwer", "langdetect", "mauve-text", "nltk", "requests-file (>=1.5.1)", "rouge-score", "sacrebleu", "sacremoses", "scikit-learn", "scipy", "sentencepiece", "seqeval", "six (>=1.15.0,<1.16.0)", "spacy (>=3.0.0)", "texttable (>=1.6.3)", "tldextract", "tldextract (>=3.1.0)", "toml (>=0.10.1)", "typer (<0.5.0)"] +metrics-tests = ["Werkzeug (>=1.0.1)", "accelerate", "bert-score (>=0.3.6)", "jiwer", "langdetect", "mauve-text", "nltk (<3.8.2)", "requests-file (>=1.5.1)", "rouge-score", "sacrebleu", "sacremoses", "scikit-learn", "scipy", "sentencepiece", "seqeval", "six (>=1.15.0,<1.16.0)", "spacy (>=3.0.0)", "texttable (>=1.6.3)", "tldextract", "tldextract (>=3.1.0)", "toml (>=0.10.1)", "typer (<0.5.0)"] quality = ["ruff (>=0.3.0)"] s3 = ["s3fs"] tensorflow = ["tensorflow (>=2.6.0)"] tensorflow-gpu = ["tensorflow (>=2.6.0)"] -tests = ["Pillow (>=9.4.0)", "absl-py", "elasticsearch (<8.0.0)", "faiss-cpu (>=1.6.4)", "jax (>=0.3.14)", "jaxlib (>=0.3.14)", "joblib (<1.3.0)", "joblibspark", "librosa", "lz4", "polars[timezone] (>=0.20.0)", "protobuf (<4.0.0)", "py7zr", "pyspark (>=3.4)", "pytest", "pytest-datadir", "pytest-xdist", "rarfile (>=4.0)", "s3fs (>=2021.11.1)", "soundfile (>=0.12.1)", "sqlalchemy", "tensorflow (>=2.6.0)", "tiktoken", "torch (>=2.0.0)", "transformers", "typing-extensions (>=4.6.1)", "zstandard"] +tests = ["Pillow (>=9.4.0)", "absl-py", "decorator", "elasticsearch (<8.0.0)", "faiss-cpu (>=1.8.0.post1)", "jax (>=0.3.14)", "jaxlib (>=0.3.14)", "joblib (<1.3.0)", "joblibspark", "librosa", "lz4", "moto[server]", "polars[timezone] (>=0.20.0)", "protobuf (<4.0.0)", "py7zr", "pyspark (>=3.4)", "pytest", "pytest-datadir", "pytest-xdist", "rarfile (>=4.0)", "s3fs (>=2021.11.1)", "soundfile (>=0.12.1)", "soxr (>=0.4.0)", "sqlalchemy", "tensorflow (>=2.16.0)", "tensorflow (>=2.6.0)", "tiktoken", "torch (>=2.0.0)", "transformers (>=4.42.0)", "typing-extensions (>=4.6.1)", "zstandard"] +tests-numpy2 = ["Pillow (>=9.4.0)", "absl-py", "decorator", "elasticsearch (<8.0.0)", "jax (>=0.3.14)", "jaxlib (>=0.3.14)", "joblib (<1.3.0)", "joblibspark", "librosa", "lz4", "moto[server]", "polars[timezone] (>=0.20.0)", "protobuf (<4.0.0)", "py7zr", "pyspark (>=3.4)", "pytest", "pytest-datadir", "pytest-xdist", "rarfile (>=4.0)", "s3fs (>=2021.11.1)", "soundfile (>=0.12.1)", "soxr (>=0.4.0)", "sqlalchemy", "tiktoken", "torch (>=2.0.0)", "typing-extensions (>=4.6.1)", "zstandard"] torch = ["torch"] vision = ["Pillow (>=9.4.0)"] @@ -1064,13 +1079,13 @@ files = [ [[package]] name = "fsspec" -version = "2024.5.0" +version = "2024.6.1" 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"}, + {file = "fsspec-2024.6.1-py3-none-any.whl", hash = "sha256:3cb443f8bcd2efb31295a5b9fdb02aee81d8452c80d28f97a6d0959e6cee101e"}, + {file = "fsspec-2024.6.1.tar.gz", hash = "sha256:fad7d7e209dd4c1208e3bbfda706620e0da5142bebbd9c384afb95b07e798e49"}, ] [package.dependencies] @@ -1082,6 +1097,7 @@ adl = ["adlfs"] arrow = ["pyarrow (>=1)"] dask = ["dask", "distributed"] dev = ["pre-commit", "ruff"] +doc = ["numpydoc", "sphinx", "sphinx-design", "sphinx-rtd-theme", "yarl"] 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"] @@ -1172,13 +1188,13 @@ grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] [[package]] name = "google-api-python-client" -version = "2.140.0" +version = "2.142.0" description = "Google API Client Library for Python" optional = true python-versions = ">=3.7" files = [ - {file = "google_api_python_client-2.140.0-py2.py3-none-any.whl", hash = "sha256:aeb4bb99e9fdd241473da5ff35464a0658fea0db76fe89c0f8c77ecfc3813404"}, - {file = "google_api_python_client-2.140.0.tar.gz", hash = "sha256:0bb973adccbe66a3d0a70abe4e49b3f2f004d849416bfec38d22b75649d389d8"}, + {file = "google_api_python_client-2.142.0-py2.py3-none-any.whl", hash = "sha256:266799082bb8301f423ec204dffbffb470b502abbf29efd1f83e644d36eb5a8f"}, + {file = "google_api_python_client-2.142.0.tar.gz", hash = "sha256:a1101ac9e24356557ca22f07ff48b7f61fa5d4b4e7feeef3bda16e5dcb86350e"}, ] [package.dependencies] @@ -1190,13 +1206,13 @@ uritemplate = ">=3.0.1,<5" [[package]] name = "google-auth" -version = "2.33.0" +version = "2.34.0" description = "Google Authentication Library" optional = true python-versions = ">=3.7" files = [ - {file = "google_auth-2.33.0-py2.py3-none-any.whl", hash = "sha256:8eff47d0d4a34ab6265c50a106a3362de6a9975bb08998700e389f857e4d39df"}, - {file = "google_auth-2.33.0.tar.gz", hash = "sha256:d6a52342160d7290e334b4d47ba390767e4438ad0d45b7630774533e82655b95"}, + {file = "google_auth-2.34.0-py2.py3-none-any.whl", hash = "sha256:72fd4733b80b6d777dcde515628a9eb4a577339437012874ea286bca7261ee65"}, + {file = "google_auth-2.34.0.tar.gz", hash = "sha256:8eb87396435c19b20d32abd2f984e31c191a15284af72eb922f10e5bde9c04cc"}, ] [package.dependencies] @@ -1206,7 +1222,7 @@ rsa = ">=3.1.4,<5" [package.extras] aiohttp = ["aiohttp (>=3.6.2,<4.0.0.dev0)", "requests (>=2.20.0,<3.0.0.dev0)"] -enterprise-cert = ["cryptography (==36.0.2)", "pyopenssl (==22.0.0)"] +enterprise-cert = ["cryptography", "pyopenssl"] pyopenssl = ["cryptography (>=38.0.3)", "pyopenssl (>=20.0.0)"] reauth = ["pyu2f (>=0.1.5)"] requests = ["requests (>=2.20.0,<3.0.0.dev0)"] @@ -1358,61 +1374,61 @@ typing-extensions = ">=4.7,<5" [[package]] name = "grpcio" -version = "1.65.4" +version = "1.66.0" description = "HTTP/2-based RPC framework" optional = true python-versions = ">=3.8" files = [ - {file = "grpcio-1.65.4-cp310-cp310-linux_armv7l.whl", hash = "sha256:0e85c8766cf7f004ab01aff6a0393935a30d84388fa3c58d77849fcf27f3e98c"}, - {file = "grpcio-1.65.4-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:e4a795c02405c7dfa8affd98c14d980f4acea16ea3b539e7404c645329460e5a"}, - {file = "grpcio-1.65.4-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:d7b984a8dd975d949c2042b9b5ebcf297d6d5af57dcd47f946849ee15d3c2fb8"}, - {file = "grpcio-1.65.4-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:644a783ce604a7d7c91412bd51cf9418b942cf71896344b6dc8d55713c71ce82"}, - {file = "grpcio-1.65.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5764237d751d3031a36fafd57eb7d36fd2c10c658d2b4057c516ccf114849a3e"}, - {file = "grpcio-1.65.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ee40d058cf20e1dd4cacec9c39e9bce13fedd38ce32f9ba00f639464fcb757de"}, - {file = "grpcio-1.65.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4482a44ce7cf577a1f8082e807a5b909236bce35b3e3897f839f2fbd9ae6982d"}, - {file = "grpcio-1.65.4-cp310-cp310-win32.whl", hash = "sha256:66bb051881c84aa82e4f22d8ebc9d1704b2e35d7867757f0740c6ef7b902f9b1"}, - {file = "grpcio-1.65.4-cp310-cp310-win_amd64.whl", hash = "sha256:870370524eff3144304da4d1bbe901d39bdd24f858ce849b7197e530c8c8f2ec"}, - {file = "grpcio-1.65.4-cp311-cp311-linux_armv7l.whl", hash = "sha256:85e9c69378af02e483bc626fc19a218451b24a402bdf44c7531e4c9253fb49ef"}, - {file = "grpcio-1.65.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2bd672e005afab8bf0d6aad5ad659e72a06dd713020554182a66d7c0c8f47e18"}, - {file = "grpcio-1.65.4-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:abccc5d73f5988e8f512eb29341ed9ced923b586bb72e785f265131c160231d8"}, - {file = "grpcio-1.65.4-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:886b45b29f3793b0c2576201947258782d7e54a218fe15d4a0468d9a6e00ce17"}, - {file = "grpcio-1.65.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be952436571dacc93ccc7796db06b7daf37b3b56bb97e3420e6503dccfe2f1b4"}, - {file = "grpcio-1.65.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:8dc9ddc4603ec43f6238a5c95400c9a901b6d079feb824e890623da7194ff11e"}, - {file = "grpcio-1.65.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ade1256c98cba5a333ef54636095f2c09e6882c35f76acb04412f3b1aa3c29a5"}, - {file = "grpcio-1.65.4-cp311-cp311-win32.whl", hash = "sha256:280e93356fba6058cbbfc6f91a18e958062ef1bdaf5b1caf46c615ba1ae71b5b"}, - {file = "grpcio-1.65.4-cp311-cp311-win_amd64.whl", hash = "sha256:d2b819f9ee27ed4e3e737a4f3920e337e00bc53f9e254377dd26fc7027c4d558"}, - {file = "grpcio-1.65.4-cp312-cp312-linux_armv7l.whl", hash = "sha256:926a0750a5e6fb002542e80f7fa6cab8b1a2ce5513a1c24641da33e088ca4c56"}, - {file = "grpcio-1.65.4-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:2a1d4c84d9e657f72bfbab8bedf31bdfc6bfc4a1efb10b8f2d28241efabfaaf2"}, - {file = "grpcio-1.65.4-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:17de4fda50967679677712eec0a5c13e8904b76ec90ac845d83386b65da0ae1e"}, - {file = "grpcio-1.65.4-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3dee50c1b69754a4228e933696408ea87f7e896e8d9797a3ed2aeed8dbd04b74"}, - {file = "grpcio-1.65.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:74c34fc7562bdd169b77966068434a93040bfca990e235f7a67cdf26e1bd5c63"}, - {file = "grpcio-1.65.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:24a2246e80a059b9eb981e4c2a6d8111b1b5e03a44421adbf2736cc1d4988a8a"}, - {file = "grpcio-1.65.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:18c10f0d054d2dce34dd15855fcca7cc44ec3b811139437543226776730c0f28"}, - {file = "grpcio-1.65.4-cp312-cp312-win32.whl", hash = "sha256:d72962788b6c22ddbcdb70b10c11fbb37d60ae598c51eb47ec019db66ccfdff0"}, - {file = "grpcio-1.65.4-cp312-cp312-win_amd64.whl", hash = "sha256:7656376821fed8c89e68206a522522317787a3d9ed66fb5110b1dff736a5e416"}, - {file = "grpcio-1.65.4-cp38-cp38-linux_armv7l.whl", hash = "sha256:4934077b33aa6fe0b451de8b71dabde96bf2d9b4cb2b3187be86e5adebcba021"}, - {file = "grpcio-1.65.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:0cef8c919a3359847c357cb4314e50ed1f0cca070f828ee8f878d362fd744d52"}, - {file = "grpcio-1.65.4-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:a925446e6aa12ca37114840d8550f308e29026cdc423a73da3043fd1603a6385"}, - {file = "grpcio-1.65.4-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cf53e6247f1e2af93657e62e240e4f12e11ee0b9cef4ddcb37eab03d501ca864"}, - {file = "grpcio-1.65.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdb34278e4ceb224c89704cd23db0d902e5e3c1c9687ec9d7c5bb4c150f86816"}, - {file = "grpcio-1.65.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:e6cbdd107e56bde55c565da5fd16f08e1b4e9b0674851d7749e7f32d8645f524"}, - {file = "grpcio-1.65.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:626319a156b1f19513156a3b0dbfe977f5f93db63ca673a0703238ebd40670d7"}, - {file = "grpcio-1.65.4-cp38-cp38-win32.whl", hash = "sha256:3d1bbf7e1dd1096378bd83c83f554d3b93819b91161deaf63e03b7022a85224a"}, - {file = "grpcio-1.65.4-cp38-cp38-win_amd64.whl", hash = "sha256:a99e6dffefd3027b438116f33ed1261c8d360f0dd4f943cb44541a2782eba72f"}, - {file = "grpcio-1.65.4-cp39-cp39-linux_armv7l.whl", hash = "sha256:874acd010e60a2ec1e30d5e505b0651ab12eb968157cd244f852b27c6dbed733"}, - {file = "grpcio-1.65.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b07f36faf01fca5427d4aa23645e2d492157d56c91fab7e06fe5697d7e171ad4"}, - {file = "grpcio-1.65.4-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:b81711bf4ec08a3710b534e8054c7dcf90f2edc22bebe11c1775a23f145595fe"}, - {file = "grpcio-1.65.4-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88fcabc332a4aef8bcefadc34a02e9ab9407ab975d2c7d981a8e12c1aed92aa1"}, - {file = "grpcio-1.65.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9ba3e63108a8749994f02c7c0e156afb39ba5bdf755337de8e75eb685be244b"}, - {file = "grpcio-1.65.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:8eb485801957a486bf5de15f2c792d9f9c897a86f2f18db8f3f6795a094b4bb2"}, - {file = "grpcio-1.65.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:075f3903bc1749ace93f2b0664f72964ee5f2da5c15d4b47e0ab68e4f442c257"}, - {file = "grpcio-1.65.4-cp39-cp39-win32.whl", hash = "sha256:0a0720299bdb2cc7306737295d56e41ce8827d5669d4a3cd870af832e3b17c4d"}, - {file = "grpcio-1.65.4-cp39-cp39-win_amd64.whl", hash = "sha256:a146bc40fa78769f22e1e9ff4f110ef36ad271b79707577bf2a31e3e931141b9"}, - {file = "grpcio-1.65.4.tar.gz", hash = "sha256:2a4f476209acffec056360d3e647ae0e14ae13dcf3dfb130c227ae1c594cbe39"}, + {file = "grpcio-1.66.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:ad7256f224437b2c29c2bef98ddd3130454c5b1ab1f0471fc11794cefd4dbd3d"}, + {file = "grpcio-1.66.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:5f4b3357e59dfba9140a51597287297bc638710d6a163f99ee14efc19967a821"}, + {file = "grpcio-1.66.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:e8d20308eeae15b3e182f47876f05acbdec1eebd9473a9814a44e46ec4a84c04"}, + {file = "grpcio-1.66.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1eb03524d0f55b965d6c86aa44e5db9e5eaa15f9ed3b164621e652e5b927f4b8"}, + {file = "grpcio-1.66.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37514b68a42e9cf24536345d3cf9e580ffd29117c158b4eeea34625200256067"}, + {file = "grpcio-1.66.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:516fdbc8e156db71a004bc431a6303bca24cfde186babe96dde7bd01e8f0cc70"}, + {file = "grpcio-1.66.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d0439a970d65327de21c299ea0e0c2ad0987cdaf18ba5066621dea5f427f922b"}, + {file = "grpcio-1.66.0-cp310-cp310-win32.whl", hash = "sha256:5f93fc84b72bbc7b84a42f3ca9dc055fa00d2303d9803be011ebf7a10a4eb833"}, + {file = "grpcio-1.66.0-cp310-cp310-win_amd64.whl", hash = "sha256:8fc5c710ddd51b5a0dc36ef1b6663430aa620e0ce029b87b150dafd313b978c3"}, + {file = "grpcio-1.66.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:dd614370e939f9fceeeb2915111a0795271b4c11dfb5fc0f58449bee40c726a5"}, + {file = "grpcio-1.66.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:245b08f9b3c645a6a623f3ed4fa43dcfcd6ad701eb9c32511c1bb7380e8c3d23"}, + {file = "grpcio-1.66.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:aaf30c75cbaf30e561ca45f21eb1f729f0fab3f15c592c1074795ed43e3ff96f"}, + {file = "grpcio-1.66.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49234580a073ce7ac490112f6c67c874cbcb27804c4525978cdb21ba7f3f193c"}, + {file = "grpcio-1.66.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de9e20a0acb709dcfa15a622c91f584f12c9739a79c47999f73435d2b3cc8a3b"}, + {file = "grpcio-1.66.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:bc008c6afa1e7c8df99bd9154abc4f0470d26b7730ca2521122e99e771baa8c7"}, + {file = "grpcio-1.66.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:50cea8ce2552865b87e3dffbb85eb21e6b98d928621600c0feda2f02449cd837"}, + {file = "grpcio-1.66.0-cp311-cp311-win32.whl", hash = "sha256:508411df1f2b7cfa05d4d7dbf3d576fe4f949cd61c03f3a6f0378c84e3d7b963"}, + {file = "grpcio-1.66.0-cp311-cp311-win_amd64.whl", hash = "sha256:6d586a95c05c82a5354be48bb4537e1accaf2472d8eb7e9086d844cbff934482"}, + {file = "grpcio-1.66.0-cp312-cp312-linux_armv7l.whl", hash = "sha256:5ea27f4ce8c0daccfdd2c7961e6ba404b6599f47c948415c4cca5728739107a3"}, + {file = "grpcio-1.66.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:296a45ea835e12a1cc35ab0c57e455346c272af7b0d178e29c67742167262b4c"}, + {file = "grpcio-1.66.0-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:e36fa838ac1d6c87198ca149cbfcc92e1af06bb8c8cd852622f8e58f33ea3324"}, + {file = "grpcio-1.66.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:684a4c07883cbd4ac864f0d08d927267404f5f0c76f31c85f9bbe05f2daae2f2"}, + {file = "grpcio-1.66.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3084e590e857ba7585ae91078e4c9b6ef55aaf1dc343ce26400ba59a146eada"}, + {file = "grpcio-1.66.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:526d4f6ca19f31b25606d5c470ecba55c0b22707b524e4de8987919e8920437d"}, + {file = "grpcio-1.66.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:423ae18637cd99ddcf2e5a6851c61828c49e9b9d022d0442d979b4f230109787"}, + {file = "grpcio-1.66.0-cp312-cp312-win32.whl", hash = "sha256:7bc9d823e05d63a87511fb456dcc48dc0fced86c282bf60229675e7ee7aac1a1"}, + {file = "grpcio-1.66.0-cp312-cp312-win_amd64.whl", hash = "sha256:230cdd696751e7eb1395718cd308234749daa217bb8d128f00357dc4df102558"}, + {file = "grpcio-1.66.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:0f3010bf46b2a01c9e40644cb9ed91b4b8435e5c500a275da5f9f62580e31e80"}, + {file = "grpcio-1.66.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ba18cfdc09312eb2eea6fa0ce5d2eec3cf345ea78f6528b2eaed6432105e0bd0"}, + {file = "grpcio-1.66.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:53d4c6706b49e358a2a33345dbe9b6b3bb047cecd7e8c07ba383bd09349bfef8"}, + {file = "grpcio-1.66.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:643d8d9632a688ae69661e924b862e23c83a3575b24e52917ec5bcc59543d212"}, + {file = "grpcio-1.66.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba60ae3b465b3e85080ae3bfbc36fd0305ae495ab16fcf8022fc7d7a23aac846"}, + {file = "grpcio-1.66.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:9d5251578767fe44602688c851c2373b5513048ac84c21a0fe946590a8e7933d"}, + {file = "grpcio-1.66.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5e8140b39f10d7be2263afa2838112de29374c5c740eb0afd99146cb5bdbd990"}, + {file = "grpcio-1.66.0-cp38-cp38-win32.whl", hash = "sha256:5b15ef1b296c4e78f15f64fc65bf8081f8774480ffcac45642f69d9d753d9c6b"}, + {file = "grpcio-1.66.0-cp38-cp38-win_amd64.whl", hash = "sha256:c072f90a1f0409f827ae86266984cba65e89c5831a0726b9fc7f4b5fb940b853"}, + {file = "grpcio-1.66.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:a639d3866bfb5a678b5c0b92cd7ab543033ed8988854290fd86145e71731fd4c"}, + {file = "grpcio-1.66.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6ed35bf7da3fb3b1949e32bdf47a8b5ffe0aed11722d948933bd068531cd4682"}, + {file = "grpcio-1.66.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:1c5466222470cb7fbc9cc898af1d48eefd297cb2e2f59af6d4a851c862fa90ac"}, + {file = "grpcio-1.66.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:921b8f7f25d5300d7c6837a1e0639ef145fbdbfb728e0a5db2dbccc9fc0fd891"}, + {file = "grpcio-1.66.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3f6feb0dc8456d025e566709f7dd02885add99bedaac50229013069242a1bfd"}, + {file = "grpcio-1.66.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:748452dbd5a047475d5413bdef08b0b9ceb2c0c0e249d4ee905a5fb82c6328dc"}, + {file = "grpcio-1.66.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:832945e64176520520317b50d64ec7d79924429528d5747669b52d0bf2c7bd78"}, + {file = "grpcio-1.66.0-cp39-cp39-win32.whl", hash = "sha256:8096a922eb91bc97c839f675c3efa1257c6ef181ae1b25d3fb97f2cae4c57c01"}, + {file = "grpcio-1.66.0-cp39-cp39-win_amd64.whl", hash = "sha256:375b58892301a5fc6ca7d7ff689c9dc9d00895f5d560604ace9f4f0573013c63"}, + {file = "grpcio-1.66.0.tar.gz", hash = "sha256:c1ea4c528e7db6660718e4165fd1b5ac24b79a70c870a7bc0b7bdb9babab7c1e"}, ] [package.extras] -protobuf = ["grpcio-tools (>=1.65.4)"] +protobuf = ["grpcio-tools (>=1.66.0)"] [[package]] name = "grpcio-status" @@ -1646,13 +1662,13 @@ files = [ [[package]] name = "huggingface-hub" -version = "0.24.5" +version = "0.24.6" description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub" optional = false python-versions = ">=3.8.0" files = [ - {file = "huggingface_hub-0.24.5-py3-none-any.whl", hash = "sha256:d93fb63b1f1a919a22ce91a14518974e81fc4610bf344dfe7572343ce8d3aced"}, - {file = "huggingface_hub-0.24.5.tar.gz", hash = "sha256:7b45d6744dd53ce9cbf9880957de00e9d10a9ae837f1c9b7255fc8fa4e8264f3"}, + {file = "huggingface_hub-0.24.6-py3-none-any.whl", hash = "sha256:a990f3232aa985fe749bc9474060cbad75e8b2f115f6665a9fda5b9c97818970"}, + {file = "huggingface_hub-0.24.6.tar.gz", hash = "sha256:cc2579e761d070713eaa9c323e3debe39d5b464ae3a7261c39a9195b27bb8000"}, ] [package.dependencies] @@ -1694,24 +1710,24 @@ license = ["ukkonen"] [[package]] name = "idna" -version = "3.7" +version = "3.8" description = "Internationalized Domain Names in Applications (IDNA)" optional = false -python-versions = ">=3.5" +python-versions = ">=3.6" files = [ - {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, - {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, + {file = "idna-3.8-py3-none-any.whl", hash = "sha256:050b4e5baadcd44d760cedbd2b8e639f2ff89bbc7a5730fcc662954303377aac"}, + {file = "idna-3.8.tar.gz", hash = "sha256:d838c2c0ed6fced7693d5e8ab8e734d5f8fda53a039c0164afb0b82e771e3603"}, ] [[package]] name = "importlib-metadata" -version = "8.2.0" +version = "8.4.0" description = "Read metadata from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_metadata-8.2.0-py3-none-any.whl", hash = "sha256:11901fa0c2f97919b288679932bb64febaeacf289d18ac84dd68cb2e74213369"}, - {file = "importlib_metadata-8.2.0.tar.gz", hash = "sha256:72e8d4399996132204f9a16dcc751af254a48f8d1b20b9ff0f98d4a8f901e73d"}, + {file = "importlib_metadata-8.4.0-py3-none-any.whl", hash = "sha256:66f342cc6ac9818fc6ff340576acd24d65ba0b3efabb2b4ac08b598965a4a2f1"}, + {file = "importlib_metadata-8.4.0.tar.gz", hash = "sha256:9a547d3bc3608b025f93d403fdd1aae741c24fbb8314df4b155675742ce303c5"}, ] [package.dependencies] @@ -2040,6 +2056,30 @@ async-timeout = {version = ">=4.0.0,<5.0.0", markers = "python_version < \"3.11\ langchain-core = ">=0.2.7,<0.3.0" langchain-text-splitters = ">=0.2.0,<0.3.0" langsmith = ">=0.1.17,<0.2.0" +numpy = {version = ">=1.26.0,<2.0.0", markers = "python_version >= \"3.12\""} +pydantic = ">=1,<3" +PyYAML = ">=5.3" +requests = ">=2,<3" +SQLAlchemy = ">=1.4,<3" +tenacity = ">=8.1.0,<9.0.0" + +[[package]] +name = "langchain" +version = "0.2.14" +description = "Building applications with LLMs through composability" +optional = false +python-versions = "<4.0,>=3.8.1" +files = [ + {file = "langchain-0.2.14-py3-none-any.whl", hash = "sha256:eed76194ee7d9c081037a3df7868d4de90e0410b51fc1ca933a8379e464bf40c"}, + {file = "langchain-0.2.14.tar.gz", hash = "sha256:dc2aa5a58882054fb5d043c39ab8332ebd055f88f17839da68e1c7fd0a4fefe2"}, +] + +[package.dependencies] +aiohttp = ">=3.8.3,<4.0.0" +async-timeout = {version = ">=4.0.0,<5.0.0", markers = "python_version < \"3.11\""} +langchain-core = ">=0.2.32,<0.3.0" +langchain-text-splitters = ">=0.2.0,<0.3.0" +langsmith = ">=0.1.17,<0.2.0" numpy = [ {version = ">=1,<2", markers = "python_version < \"3.12\""}, {version = ">=1.26.0,<2.0.0", markers = "python_version >= \"3.12\""}, @@ -2048,7 +2088,7 @@ pydantic = ">=1,<3" PyYAML = ">=5.3" requests = ">=2,<3" SQLAlchemy = ">=1.4,<3" -tenacity = ">=8.1.0,<9.0.0" +tenacity = ">=8.1.0,<8.4.0 || >8.4.0,<9.0.0" [[package]] name = "langchain-core" @@ -2071,13 +2111,13 @@ tenacity = ">=8.1.0,<9.0.0" [[package]] name = "langchain-core" -version = "0.2.29" +version = "0.2.34" description = "Building applications with LLMs through composability" optional = false python-versions = "<4.0,>=3.8.1" files = [ - {file = "langchain_core-0.2.29-py3-none-any.whl", hash = "sha256:846c04a3bb72e409a9b928e0eb3ea1762e1473f2c4fb6df2596fbd7b3ab75973"}, - {file = "langchain_core-0.2.29.tar.gz", hash = "sha256:491324745a7afee5a7b285c3904edd9dd0c6efa7daf26b92fec6e84a2d2f5d10"}, + {file = "langchain_core-0.2.34-py3-none-any.whl", hash = "sha256:c4fd158273e28cef758b4eccc956b424b76d4bb9117ce6014ae6eb2fb985801d"}, + {file = "langchain_core-0.2.34.tar.gz", hash = "sha256:50048d90b175c0d5a7e28164628b3c7f8c82b0dc2cd766a663d346a18d5c9eb2"}, ] [package.dependencies] @@ -2105,6 +2145,22 @@ langchain-core = ">=0.2.2,<0.3" openai = ">=1.32.0,<2.0.0" tiktoken = ">=0.7,<1" +[[package]] +name = "langchain-openai" +version = "0.1.22" +description = "An integration package connecting OpenAI and LangChain" +optional = false +python-versions = "<4.0,>=3.8.1" +files = [ + {file = "langchain_openai-0.1.22-py3-none-any.whl", hash = "sha256:e184ab867a30f803dc210a388537186b1b670a33d910a7e0fa4e0329d3b6c654"}, + {file = "langchain_openai-0.1.22.tar.gz", hash = "sha256:0cf93133f230a893e3b0cc2a792bbf2580950e879b577f6e8d4ff9963a7de44b"}, +] + +[package.dependencies] +langchain-core = ">=0.2.33,<0.3.0" +openai = ">=1.40.0,<2.0.0" +tiktoken = ">=0.7,<1" + [[package]] name = "langchain-text-splitters" version = "0.2.1" @@ -2154,16 +2210,17 @@ requests = ">=2,<3" [[package]] name = "langsmith" -version = "0.1.98" +version = "0.1.104" description = "Client library to connect to the LangSmith LLM Tracing and Evaluation Platform." optional = false python-versions = "<4.0,>=3.8.1" files = [ - {file = "langsmith-0.1.98-py3-none-any.whl", hash = "sha256:f79e8a128652bbcee4606d10acb6236973b5cd7dde76e3741186d3b97b5698e9"}, - {file = "langsmith-0.1.98.tar.gz", hash = "sha256:e07678219a0502e8f26d35294e72127a39d25e32fafd091af5a7bb661e9a6bd1"}, + {file = "langsmith-0.1.104-py3-none-any.whl", hash = "sha256:049cd312952a0db9f5edeed3b9a8616e66ef86e5490c835c8bb054569203b0d0"}, + {file = "langsmith-0.1.104.tar.gz", hash = "sha256:7892dfe452d143fba573d7eb28dbff3202d2f2daacab8c7276ffe4a850179d4d"}, ] [package.dependencies] +httpx = ">=0.23.0,<1" orjson = ">=3.9.14,<4.0.0" pydantic = {version = ">=1,<3", markers = "python_full_version < \"3.12.4\""} requests = ">=2,<3" @@ -2619,38 +2676,38 @@ dill = ">=0.3.8" [[package]] name = "mypy" -version = "1.11.1" +version = "1.11.2" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.11.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a32fc80b63de4b5b3e65f4be82b4cfa362a46702672aa6a0f443b4689af7008c"}, - {file = "mypy-1.11.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c1952f5ea8a5a959b05ed5f16452fddadbaae48b5d39235ab4c3fc444d5fd411"}, - {file = "mypy-1.11.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e1e30dc3bfa4e157e53c1d17a0dad20f89dc433393e7702b813c10e200843b03"}, - {file = "mypy-1.11.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2c63350af88f43a66d3dfeeeb8d77af34a4f07d760b9eb3a8697f0386c7590b4"}, - {file = "mypy-1.11.1-cp310-cp310-win_amd64.whl", hash = "sha256:a831671bad47186603872a3abc19634f3011d7f83b083762c942442d51c58d58"}, - {file = "mypy-1.11.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7b6343d338390bb946d449677726edf60102a1c96079b4f002dedff375953fc5"}, - {file = "mypy-1.11.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e4fe9f4e5e521b458d8feb52547f4bade7ef8c93238dfb5bbc790d9ff2d770ca"}, - {file = "mypy-1.11.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:886c9dbecc87b9516eff294541bf7f3655722bf22bb898ee06985cd7269898de"}, - {file = "mypy-1.11.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fca4a60e1dd9fd0193ae0067eaeeb962f2d79e0d9f0f66223a0682f26ffcc809"}, - {file = "mypy-1.11.1-cp311-cp311-win_amd64.whl", hash = "sha256:0bd53faf56de9643336aeea1c925012837432b5faf1701ccca7fde70166ccf72"}, - {file = "mypy-1.11.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f39918a50f74dc5969807dcfaecafa804fa7f90c9d60506835036cc1bc891dc8"}, - {file = "mypy-1.11.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0bc71d1fb27a428139dd78621953effe0d208aed9857cb08d002280b0422003a"}, - {file = "mypy-1.11.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b868d3bcff720dd7217c383474008ddabaf048fad8d78ed948bb4b624870a417"}, - {file = "mypy-1.11.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a707ec1527ffcdd1c784d0924bf5cb15cd7f22683b919668a04d2b9c34549d2e"}, - {file = "mypy-1.11.1-cp312-cp312-win_amd64.whl", hash = "sha256:64f4a90e3ea07f590c5bcf9029035cf0efeae5ba8be511a8caada1a4893f5525"}, - {file = "mypy-1.11.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:749fd3213916f1751fff995fccf20c6195cae941dc968f3aaadf9bb4e430e5a2"}, - {file = "mypy-1.11.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b639dce63a0b19085213ec5fdd8cffd1d81988f47a2dec7100e93564f3e8fb3b"}, - {file = "mypy-1.11.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4c956b49c5d865394d62941b109728c5c596a415e9c5b2be663dd26a1ff07bc0"}, - {file = "mypy-1.11.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45df906e8b6804ef4b666af29a87ad9f5921aad091c79cc38e12198e220beabd"}, - {file = "mypy-1.11.1-cp38-cp38-win_amd64.whl", hash = "sha256:d44be7551689d9d47b7abc27c71257adfdb53f03880841a5db15ddb22dc63edb"}, - {file = "mypy-1.11.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2684d3f693073ab89d76da8e3921883019ea8a3ec20fa5d8ecca6a2db4c54bbe"}, - {file = "mypy-1.11.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:79c07eb282cb457473add5052b63925e5cc97dfab9812ee65a7c7ab5e3cb551c"}, - {file = "mypy-1.11.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11965c2f571ded6239977b14deebd3f4c3abd9a92398712d6da3a772974fad69"}, - {file = "mypy-1.11.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a2b43895a0f8154df6519706d9bca8280cda52d3d9d1514b2d9c3e26792a0b74"}, - {file = "mypy-1.11.1-cp39-cp39-win_amd64.whl", hash = "sha256:1a81cf05975fd61aec5ae16501a091cfb9f605dc3e3c878c0da32f250b74760b"}, - {file = "mypy-1.11.1-py3-none-any.whl", hash = "sha256:0624bdb940255d2dd24e829d99a13cfeb72e4e9031f9492148f410ed30bcab54"}, - {file = "mypy-1.11.1.tar.gz", hash = "sha256:f404a0b069709f18bbdb702eb3dcfe51910602995de00bd39cea3050b5772d08"}, + {file = "mypy-1.11.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d42a6dd818ffce7be66cce644f1dff482f1d97c53ca70908dff0b9ddc120b77a"}, + {file = "mypy-1.11.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:801780c56d1cdb896eacd5619a83e427ce436d86a3bdf9112527f24a66618fef"}, + {file = "mypy-1.11.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:41ea707d036a5307ac674ea172875f40c9d55c5394f888b168033177fce47383"}, + {file = "mypy-1.11.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6e658bd2d20565ea86da7d91331b0eed6d2eee22dc031579e6297f3e12c758c8"}, + {file = "mypy-1.11.2-cp310-cp310-win_amd64.whl", hash = "sha256:478db5f5036817fe45adb7332d927daa62417159d49783041338921dcf646fc7"}, + {file = "mypy-1.11.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:75746e06d5fa1e91bfd5432448d00d34593b52e7e91a187d981d08d1f33d4385"}, + {file = "mypy-1.11.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a976775ab2256aadc6add633d44f100a2517d2388906ec4f13231fafbb0eccca"}, + {file = "mypy-1.11.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cd953f221ac1379050a8a646585a29574488974f79d8082cedef62744f0a0104"}, + {file = "mypy-1.11.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:57555a7715c0a34421013144a33d280e73c08df70f3a18a552938587ce9274f4"}, + {file = "mypy-1.11.2-cp311-cp311-win_amd64.whl", hash = "sha256:36383a4fcbad95f2657642a07ba22ff797de26277158f1cc7bd234821468b1b6"}, + {file = "mypy-1.11.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e8960dbbbf36906c5c0b7f4fbf2f0c7ffb20f4898e6a879fcf56a41a08b0d318"}, + {file = "mypy-1.11.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:06d26c277962f3fb50e13044674aa10553981ae514288cb7d0a738f495550b36"}, + {file = "mypy-1.11.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6e7184632d89d677973a14d00ae4d03214c8bc301ceefcdaf5c474866814c987"}, + {file = "mypy-1.11.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3a66169b92452f72117e2da3a576087025449018afc2d8e9bfe5ffab865709ca"}, + {file = "mypy-1.11.2-cp312-cp312-win_amd64.whl", hash = "sha256:969ea3ef09617aff826885a22ece0ddef69d95852cdad2f60c8bb06bf1f71f70"}, + {file = "mypy-1.11.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:37c7fa6121c1cdfcaac97ce3d3b5588e847aa79b580c1e922bb5d5d2902df19b"}, + {file = "mypy-1.11.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4a8a53bc3ffbd161b5b2a4fff2f0f1e23a33b0168f1c0778ec70e1a3d66deb86"}, + {file = "mypy-1.11.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ff93107f01968ed834f4256bc1fc4475e2fecf6c661260066a985b52741ddce"}, + {file = "mypy-1.11.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:edb91dded4df17eae4537668b23f0ff6baf3707683734b6a818d5b9d0c0c31a1"}, + {file = "mypy-1.11.2-cp38-cp38-win_amd64.whl", hash = "sha256:ee23de8530d99b6db0573c4ef4bd8f39a2a6f9b60655bf7a1357e585a3486f2b"}, + {file = "mypy-1.11.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:801ca29f43d5acce85f8e999b1e431fb479cb02d0e11deb7d2abb56bdaf24fd6"}, + {file = "mypy-1.11.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:af8d155170fcf87a2afb55b35dc1a0ac21df4431e7d96717621962e4b9192e70"}, + {file = "mypy-1.11.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f7821776e5c4286b6a13138cc935e2e9b6fde05e081bdebf5cdb2bb97c9df81d"}, + {file = "mypy-1.11.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:539c570477a96a4e6fb718b8d5c3e0c0eba1f485df13f86d2970c91f0673148d"}, + {file = "mypy-1.11.2-cp39-cp39-win_amd64.whl", hash = "sha256:3f14cd3d386ac4d05c5a39a51b84387403dadbd936e17cb35882134d4f8f0d24"}, + {file = "mypy-1.11.2-py3-none-any.whl", hash = "sha256:b499bc07dbdcd3de92b0a8b29fdf592c111276f6a12fe29c30f6c417dd546d12"}, + {file = "mypy-1.11.2.tar.gz", hash = "sha256:7f9993ad3e0ffdc95c2a14b66dee63729f021968bff8ad911867579c65d13a79"}, ] [package.dependencies] @@ -2966,13 +3023,13 @@ files = [ [[package]] name = "openai" -version = "1.40.3" +version = "1.42.0" description = "The official Python library for the openai API" optional = false python-versions = ">=3.7.1" files = [ - {file = "openai-1.40.3-py3-none-any.whl", hash = "sha256:09396cb6e2e15c921a5d872bf92841a60a9425da10dcd962b45fe7c4f48f8395"}, - {file = "openai-1.40.3.tar.gz", hash = "sha256:f2ffe907618240938c59d7ccc67dd01dc8c50be203c0077240db6758d2f02480"}, + {file = "openai-1.42.0-py3-none-any.whl", hash = "sha256:dc91e0307033a4f94931e5d03cc3b29b9717014ad5e73f9f2051b6cb5eda4d80"}, + {file = "openai-1.42.0.tar.gz", hash = "sha256:c9d31853b4e0bc2dc8bd08003b462a006035655a701471695d0bfdc08529cde3"}, ] [package.dependencies] @@ -3411,17 +3468,6 @@ numpy = ">=1.16.6" [package.extras] test = ["cffi", "hypothesis", "pandas", "pytest", "pytz"] -[[package]] -name = "pyarrow-hotfix" -version = "0.6" -description = "" -optional = true -python-versions = ">=3.5" -files = [ - {file = "pyarrow_hotfix-0.6-py3-none-any.whl", hash = "sha256:dcc9ae2d220dff0083be6a9aa8e0cdee5182ad358d4931fce825c545e5c89178"}, - {file = "pyarrow_hotfix-0.6.tar.gz", hash = "sha256:79d3e030f7ff890d408a100ac16d6f00b14d44a502d7897cd9fc3e3a534e9945"}, -] - [[package]] name = "pyasn1" version = "0.6.0" @@ -3519,100 +3565,100 @@ email = ["email-validator (>=1.0.3)"] [[package]] name = "pydantic-core" -version = "2.21.0" +version = "2.23.0" description = "Core functionality for Pydantic validation and serialization" optional = true python-versions = ">=3.8" files = [ - {file = "pydantic_core-2.21.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a97aa0a1f6c3f4e235fb2c9d12b92415faf8741c6a262d23a61fd26df7e30ff8"}, - {file = "pydantic_core-2.21.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d309202bbf9ff33e4e9e0ffd3ddcbf096e69bc81c7e68255612ca22cb1130a59"}, - {file = "pydantic_core-2.21.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e227183d791092b28815a435bd65f7105762473b3518d3a14ef8b663b99ce185"}, - {file = "pydantic_core-2.21.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f6ef7fd514588f8414ec033ead05ebde25a348971b0f0fd3bdc24c0276b87fd0"}, - {file = "pydantic_core-2.21.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fda3119daaa7c26ac08847c07ea96dc488bc61a34023b1050c2c20ba9493f778"}, - {file = "pydantic_core-2.21.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:07224088a793c38f8d4ef4a71889c9aaf568d250afe3ebac815b5d9578f48e41"}, - {file = "pydantic_core-2.21.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:334bd7b4ece531af9339f55d87c0bc9867f8dc71b0f9312f3f10402af9b0867e"}, - {file = "pydantic_core-2.21.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2d146b6cdd06de822e9cd6e9c255d46b7ff15b0fc312996fb7f1cd31329c3275"}, - {file = "pydantic_core-2.21.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4dcd68eb7baf796822739273864a8d988a3e81d11b1e19db2ddfb83d495fe33b"}, - {file = "pydantic_core-2.21.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6ead7f2f7c37dbe5264083e0b3a1ae84773402359d47b2bbcc1ce07867ef80d1"}, - {file = "pydantic_core-2.21.0-cp310-none-win32.whl", hash = "sha256:f4a8e22ab111391d694c7ac35f1db3f47bd58badf76d44478c2e5fbf1622a75b"}, - {file = "pydantic_core-2.21.0-cp310-none-win_amd64.whl", hash = "sha256:75e96800f42e06e72314346575ed561b76718b92115c79888a64513b817edd40"}, - {file = "pydantic_core-2.21.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:0c5d05c712ba7612bb3bdd7cdc3b306bbbe0c90c2bbe66a80c7c72ea751e6b62"}, - {file = "pydantic_core-2.21.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:21b97bb2fdf330c6fb03f43307671f0cb3051cbf89a58e1cd4c99a09c69c9341"}, - {file = "pydantic_core-2.21.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:986cad6e75c9d4e8f72d5085ee8109f75dc4d9d5095c994e00ce7f3787f7022b"}, - {file = "pydantic_core-2.21.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:400cbd6fdd92815eceac1812f8cc7501789da127fe35d7ff6d08d9de377a52b9"}, - {file = "pydantic_core-2.21.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:45fc6e4be497271834e3e263288a833b328669c27056df6af83ce379e61579d7"}, - {file = "pydantic_core-2.21.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f19f026a94202157c1b6db326cb09142c996adcd8e7f705b5c4f01815fef48a9"}, - {file = "pydantic_core-2.21.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:815e9cc5cf36522097556b9c968b529f528799bfe81a38d481ae8f5564b41d1b"}, - {file = "pydantic_core-2.21.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fda0c0e6db4ce5f568619390e7055ea77d4572261d1815d597095542d71f2b1e"}, - {file = "pydantic_core-2.21.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ba34c0b31e3829693310f83d3f7d917a9c8c6bccbf8ac1eb5f7759c52d368e36"}, - {file = "pydantic_core-2.21.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ad512defbcb20c7e9a30b166ddcc61583568a6e13904b0d769b78df14de8ce43"}, - {file = "pydantic_core-2.21.0-cp311-none-win32.whl", hash = "sha256:0a1e19114c93ced62b691a44721488af04080658410d01cd895cb2afc16abb5b"}, - {file = "pydantic_core-2.21.0-cp311-none-win_amd64.whl", hash = "sha256:c95d11d9167e8bb2cafdd12858e9c51e92edd30813976eff637e4ab4555d742e"}, - {file = "pydantic_core-2.21.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:86b6f0a53daadf0c5a19733489c7987d278962b92411214f56bf52eb757cc9d7"}, - {file = "pydantic_core-2.21.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c53d38dec60b0906a716f66f9ea70811a8b2ae9d6234d2108a57f8750b0c707f"}, - {file = "pydantic_core-2.21.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:639e0e7c9f5777b9b1c5f760d25cc615c40bef005af15c892324193fc18c8141"}, - {file = "pydantic_core-2.21.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2fe2e1cc87e8ddfc251e7f4100b30ca96700866b17d972ec842330cd10f9b379"}, - {file = "pydantic_core-2.21.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c5b839081226a4c4e3c96efe89fbb5004a9f1eebc039fcd4e26794cfe4412b5a"}, - {file = "pydantic_core-2.21.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e20b44a5dcb290bad3d02680d52a58c5b5938547d85bcb56b3412bfdb387a3a8"}, - {file = "pydantic_core-2.21.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5069840df8f808bca75956114844260481ea86e524364573d937e47c5013a982"}, - {file = "pydantic_core-2.21.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:130102233794bca08eaab7075711b637055e861c2ebb9e3c29ed117a3b035316"}, - {file = "pydantic_core-2.21.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:375008cd44acad0bbfa7e18819e8613bb638bcbad890c071d835c593ed0bd73f"}, - {file = "pydantic_core-2.21.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5bcebd8b7e972d36ebc6b50f1f1fd9ff43eef53e60312dfa3ba809f1e33ec40f"}, - {file = "pydantic_core-2.21.0-cp312-none-win32.whl", hash = "sha256:7cb413eb75374e88a4989bc17c30f6eda6707bfeaad2272900e3dc5c08e91519"}, - {file = "pydantic_core-2.21.0-cp312-none-win_amd64.whl", hash = "sha256:3ab9a69b1beb04c7d263af049acca39c749753507bf811a639278b7aaf68ad79"}, - {file = "pydantic_core-2.21.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:0bf9815c7d5535b7d8c62248fa1536335c8186b9daa08056c5cb753e47b4435c"}, - {file = "pydantic_core-2.21.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bf6b0cb6655970729ef3f35f54009cecfba6ba7cb8033bf3c56162b4bc418122"}, - {file = "pydantic_core-2.21.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30085b96b9168451663ea9872cbf94922c5045158d243c404917a2ca9a1abe32"}, - {file = "pydantic_core-2.21.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e168240f12b187a1a214bf4867f9bab1a91cea3142e1cf361b7dddb7d08cc409"}, - {file = "pydantic_core-2.21.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e960a00230f1fca4ed34f5230e4db467eccc68f0777c565d9c3ce9aa6593f3e5"}, - {file = "pydantic_core-2.21.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:006a8210cd7134a7ae328433cb84a1076badbf5731c7876f96962ef8fd61d42d"}, - {file = "pydantic_core-2.21.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b0c40b8092c4679956aabff88454d618113529e40253b2a7df0a431e61ea2d84"}, - {file = "pydantic_core-2.21.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:72e74856b503cb434479cf7d21bb3dc140ed2d97e2be2ac452ec483d275f413b"}, - {file = "pydantic_core-2.21.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:dd5de610e64e77062877ee58a12f505fd4e1b092e61b3631f1677c267c7c6a8c"}, - {file = "pydantic_core-2.21.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:f2e6a46a6c9abd4f480fbced953936889380dec40e0a9f8aba32f45e1baae5f1"}, - {file = "pydantic_core-2.21.0-cp313-none-win32.whl", hash = "sha256:7c792fcb776d412d3ce2d71577ad729d627500998963bce88298b6a87b241ed8"}, - {file = "pydantic_core-2.21.0-cp313-none-win_amd64.whl", hash = "sha256:28317f20cdef82a41cdaa0f152be692c49fe0c22cc4ea55d73c0bd4624fcce14"}, - {file = "pydantic_core-2.21.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:ce1796df2f4c0a8605d30cd8b2726589ee404b34d8ecef93453e3c4366bea821"}, - {file = "pydantic_core-2.21.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:1e2134bf92b5a59223dfef4b50ee19fb76935299df0ab8aa0c99055ce7ae0d36"}, - {file = "pydantic_core-2.21.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c0739fdbfcecb83fd8ef48863fdc82d108e647690d4948a88afa1dd307e175e"}, - {file = "pydantic_core-2.21.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8a430bac8c43eb8a3e279cecab067ef2afbba6f28a8a6a0cf419c89588757436"}, - {file = "pydantic_core-2.21.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6a72b8b6e5350d74d13deecffdc393e768941fc3b61e6973e9c0ea26c33b3969"}, - {file = "pydantic_core-2.21.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c4114ca818afd13787312374df8740f026eaa0230bc87f81153eb6a20c3f39ad"}, - {file = "pydantic_core-2.21.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07b5f813dd7c1520609ef764b3e9a80182456e4a003264eb473640f97afff985"}, - {file = "pydantic_core-2.21.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a403beaa2651dc55df42def4d364f08705f5373ca3d44bbfa5ba6160767eb8fb"}, - {file = "pydantic_core-2.21.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c95f17e63c5f811027bf768e027f247d49038c0ace817990417a0410894bfd67"}, - {file = "pydantic_core-2.21.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:23043d6944bd281f353896f7516edfaa8111e65bd80fd936dc1a8751dcc4e4cf"}, - {file = "pydantic_core-2.21.0-cp38-none-win32.whl", hash = "sha256:baefe94e313184f024f594ac35eabbc467c830b0fe7eb71c2fddc469414006e2"}, - {file = "pydantic_core-2.21.0-cp38-none-win_amd64.whl", hash = "sha256:c5a9cc3fd81cdd60ef203920794ccbe73630f82770e03e9446ee782454760235"}, - {file = "pydantic_core-2.21.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:4b68e752432f67403739bad3c94946d134ad7143840f54281d039bab21a1ca5e"}, - {file = "pydantic_core-2.21.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ab770f7506d579de7f51f15ce4994a53f3155347d51d87970f70038662ff70a9"}, - {file = "pydantic_core-2.21.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9038a1b8c1ad42cf2be95a6fb1e2e3b66730e23ad0f677f2e9e2e5f02afbad3"}, - {file = "pydantic_core-2.21.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e2e7e7d1a08fbddd7cc8cea3a9cd23fc772b7b955056e5a3575808a4acbc20fa"}, - {file = "pydantic_core-2.21.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fa78fbd6a49b4a7481d700645f08fefb789e739fa6a46a3fa6a5fbbb2a83985c"}, - {file = "pydantic_core-2.21.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:90e3a7291073098b61a8331e13907132c5a8f1ffc69a576fc05aae1ffb1849a3"}, - {file = "pydantic_core-2.21.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88fd993f5c19e5d63c9e441b9f3156d266fc16d02498abaf56a76761d8c74ec7"}, - {file = "pydantic_core-2.21.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:43e10ff6648ba9281c1389ee44953b8def12211afb3d3c169982df3dedcda79f"}, - {file = "pydantic_core-2.21.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:84f69f77893e691f4d2e77df0366494cf16bd5326ce5f045b654d7aef82eb1e7"}, - {file = "pydantic_core-2.21.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4ce1ead9e4b628272c51e5b869cc78d0523a03a1fee9fbba474f48e1a436e553"}, - {file = "pydantic_core-2.21.0-cp39-none-win32.whl", hash = "sha256:0a06a47227b09ef094901ba3c8e069121965701aae1e9c6aa19cacbbba0b23af"}, - {file = "pydantic_core-2.21.0-cp39-none-win_amd64.whl", hash = "sha256:e281ec1c9dd7379f92b6f1da2e902c7d6fcc99b58ca58cd8de520ab189a184f7"}, - {file = "pydantic_core-2.21.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:88cf788e5a4a70014f1ce916a245fb8ffa939421a4e407f6eca962735813fd54"}, - {file = "pydantic_core-2.21.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:6f9e0b7c870298d6533579b7132e68d8e2c47ef35e2f5c79160389dfd527b3ac"}, - {file = "pydantic_core-2.21.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1c622bfeab021f1c461ddb4097713d73122eec4bc6943b2800bb559df7f6fe1"}, - {file = "pydantic_core-2.21.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:356c73057d231f138d2638daa1dcc56e77e8d2e744fc7f04bfb5505389f08c7a"}, - {file = "pydantic_core-2.21.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:20a8d6e18e34ae34cfe26ce2c3cc866ee88b8623a4f1e93319501b3a68b57c44"}, - {file = "pydantic_core-2.21.0-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:97957c5484bdfe56b0a7ec8a623cd54f8872fb1f55090a2f52a3c065726d6bc6"}, - {file = "pydantic_core-2.21.0-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:ed1e082eecf51152fb9bdbbb14e574c72a78a592774617873522f6b3dee3e8ed"}, - {file = "pydantic_core-2.21.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:92e8b3bf64b210d51a5fc950be62dadecad5a8e329b34b8b2f690a505f6dafe3"}, - {file = "pydantic_core-2.21.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6826218c59be7d2c9c306d5b7fa829b4ad4b2d96cb984c91f8ec82b91f63dc63"}, - {file = "pydantic_core-2.21.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:ab3391fb685026e6928b4d51cd044403ecefa7e7421a0f14887eb4708c3da7bb"}, - {file = "pydantic_core-2.21.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b224bde36cafcc7f1d51e5c88cb784eb1a76f74701b5700dcc37dca66be745b"}, - {file = "pydantic_core-2.21.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b64bfc7b468cc524e9acfaf379333c1a4f771adf19d15ceae3b8f580ed9a0d4e"}, - {file = "pydantic_core-2.21.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:48991177fc0cf6cd9fd245433db167382c8c36bb18f64195532842ba5ba082fa"}, - {file = "pydantic_core-2.21.0-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:d9251ed0317455ccccd520600d4b6b07fd1486d53846bd82677f08a4999df949"}, - {file = "pydantic_core-2.21.0-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:4e6699cb02d3f063f6b35609830fc6d56aba1b4bcb6a82d604b5dd6b2156f87a"}, - {file = "pydantic_core-2.21.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:46be3c8c7e8346f2c02bf261b4dbff1d9e31001fb231ce9a1d52d7ef61d291fc"}, - {file = "pydantic_core-2.21.0.tar.gz", hash = "sha256:79c747f9916e5b6cb588dfd994d9ac15a93e43eb07467d9e6f24d892c176bbf5"}, + {file = "pydantic_core-2.23.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:c3ed715355de44fd1ad5e2347ae9d8b48c12423a938174accd98f3c21cd35141"}, + {file = "pydantic_core-2.23.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4e1eaba0496f00923f125bea4ce2ec2ad7b32753d037ad456ea8b971888ccebf"}, + {file = "pydantic_core-2.23.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a4cd64a16bdd44ea2120e5592818b1391b22adb02632ca4438897b10c07ef62a"}, + {file = "pydantic_core-2.23.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:843c98c21b7cd80b0e6f8a44e84fc6ebe63a823b991c337361d1e9141a7d753d"}, + {file = "pydantic_core-2.23.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:848727b22f9117b826a5cc769a874c8a218ab994a455a739fee1aaab611e10f8"}, + {file = "pydantic_core-2.23.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3afe0158f5ee4ba5a0b468dbd3adc46e1c460a2de10ab6af19cab7ccf2831aaa"}, + {file = "pydantic_core-2.23.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5d6c3a0a5f3a1c0c7d57acbb1cce592525959414b8f0b79e00d123b8f979d8b"}, + {file = "pydantic_core-2.23.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6f4806078005609da8957757ec41632da08ae33d2e12ce9b82a03e0f9bd9296a"}, + {file = "pydantic_core-2.23.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f288373c599466a3977b6305e8ff21ed81465b8c5b5ba2b1a160c89ad6a09285"}, + {file = "pydantic_core-2.23.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b0749590fa48c99d93670d2b6a452e0b08c0accd39d86e7579ed176fd8ce9687"}, + {file = "pydantic_core-2.23.0-cp310-none-win32.whl", hash = "sha256:f6f2083e9e2250ea7563a809dc28f4df1c4f78a0f8191fc82755bb9edff438a4"}, + {file = "pydantic_core-2.23.0-cp310-none-win_amd64.whl", hash = "sha256:30bab73daf1cbd751fb925fbf43c932dc5edfd694af2ee6d207bf9daccf86abd"}, + {file = "pydantic_core-2.23.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:c174a6a3885f04da4a94ca15e2ce5ec4db535b8468ee71de246bf709188630e6"}, + {file = "pydantic_core-2.23.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:38ce3939035e86c775427135a59f4d0da6a2fd567851fc921b24993898d2c584"}, + {file = "pydantic_core-2.23.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:433ae51fcd7e32e82a922aa67b2233a94f72e58d1d5674322eeeedc2a2a5de1f"}, + {file = "pydantic_core-2.23.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:be25600552428fb43a4d94da3d9001f2a519bde715515bf8704acbd80495b279"}, + {file = "pydantic_core-2.23.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:15ec667c44d32995b71959edfbb3687508686cd06b16fecd8c1d0b97e4195c06"}, + {file = "pydantic_core-2.23.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b73ee3051e98a096027f529a5169560e22c61de067d44858b680fc21b0bd6c20"}, + {file = "pydantic_core-2.23.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:100fc9d3a681864212dc5d0d25bbac545205d4c31e5f93095f9b6b1f799e8be7"}, + {file = "pydantic_core-2.23.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e082678c0bf14e9204175db2d0364410549f6457dcbd297ef642011d369283f2"}, + {file = "pydantic_core-2.23.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ba66866a945f96dd20a34c2205822131e8786c2402ce5620e8d73b3b3da665e1"}, + {file = "pydantic_core-2.23.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f476419afe9b70d7f25fef7bec7033f69c2e3e1f35de23dad5dc5cc098759ce2"}, + {file = "pydantic_core-2.23.0-cp311-none-win32.whl", hash = "sha256:c886deed32c95db3d3f46195316aea5b87b754e2b84ab14da0aea491df38a997"}, + {file = "pydantic_core-2.23.0-cp311-none-win_amd64.whl", hash = "sha256:d3eda2b28ed432709f4eae83316fe8a64e5ab79a9d5d9a45950e89c8d43d17d0"}, + {file = "pydantic_core-2.23.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:638f8bae1d32f1cff46ed7742782b255d8175c4b006f1f41dccfa68ae7bbd2d2"}, + {file = "pydantic_core-2.23.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fe9743b50b86bf75b2f0b48c899665da30ae4e332963a0054d4c74548ba72ab0"}, + {file = "pydantic_core-2.23.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8681973c8648bca5f18aae7a949a90b2177d894a30763b54d35b264c6b3cb02"}, + {file = "pydantic_core-2.23.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e9935b6c89171bab3e4d3f67c4d4d19df60ab2db5676d27894cd39a834b97dde"}, + {file = "pydantic_core-2.23.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3dafe486b2cd19b119d6dce9cd4b2545eb04a679ef4faa6e5b895e0c2838d020"}, + {file = "pydantic_core-2.23.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:21b2d238fd200162e64303fd9e805b27d96ffe24164b31350a97eba75bf712e9"}, + {file = "pydantic_core-2.23.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0abc8460e7f214631bd14af8fde2ad69dcc54ae5facabdeb93150c5d3bd2abf3"}, + {file = "pydantic_core-2.23.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bb6f9b87d5e1a558f0a8ac9a9282f76505b1ac96695d6bac4a036dce88d927ec"}, + {file = "pydantic_core-2.23.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:262d77d4c4fa31f4bdfd838d21f265c35c469e980cc422a47d0b2ae796f38d07"}, + {file = "pydantic_core-2.23.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:781ba2aa6023a14bf865d7368d674db44c99a8630fc76ba73e850ca7b5a1febb"}, + {file = "pydantic_core-2.23.0-cp312-none-win32.whl", hash = "sha256:2670f3a68d1a574ae1b0f3da016c010dd08d0a422d14a3b78be47aebbae9a310"}, + {file = "pydantic_core-2.23.0-cp312-none-win_amd64.whl", hash = "sha256:29904fc5b7c2795b236e1a54680b3cb203c50b1968938a06a4ca7aaee45e71cc"}, + {file = "pydantic_core-2.23.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:be43d9249acf772be100ca1f687680d0e2e2bd5fbaecc3e904f5a65762d45a86"}, + {file = "pydantic_core-2.23.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c9c3b124d0c1f2b6d462aac3cd194457d419e62d62bbd7fc60392e10eb179d10"}, + {file = "pydantic_core-2.23.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2933accfb2e181d67ae37eb2c40abb1a226841392e90edaa62900c0fe7f47e0e"}, + {file = "pydantic_core-2.23.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eac616e3571f9083d972accae44e98ca7020e7c345ac9317fcc8b5638175cadc"}, + {file = "pydantic_core-2.23.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6264eee5c7fced027286ed143c329f531878ec9ae11e7be3c06635045ecbf81f"}, + {file = "pydantic_core-2.23.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:10a6b04f4f86e3816b50dc9785bb662d87e5eda8423f15a80e6f245f6695828a"}, + {file = "pydantic_core-2.23.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d9053f4c9ff5ed98270937938efaadf8a4beb6826ce6cee1e66614b7613c969"}, + {file = "pydantic_core-2.23.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:00eb370a47bd63d6f0e59bae8080c43eb21aca033785ecaeba3fd36f2cfe0877"}, + {file = "pydantic_core-2.23.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:6c093a00bce0de23102c3f4a8fab5629f6c0e2dc09eeb7f275c03895fcee8598"}, + {file = "pydantic_core-2.23.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ee96b28ffefe34ddf5e83e28c0ece5f96f7e3a4caa51b1683b2a71d990f8235e"}, + {file = "pydantic_core-2.23.0-cp313-none-win32.whl", hash = "sha256:a69297f237984b358275cde98bf81b816a6528f579cf3818954d6266bd64c48d"}, + {file = "pydantic_core-2.23.0-cp313-none-win_amd64.whl", hash = "sha256:8ff9bd3024412d9766343fe60e1dd6e590d30202dd20d27a881dd790b9b1b72d"}, + {file = "pydantic_core-2.23.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:690a49c803412267758d114dd8f1e2a819436e1ec3df5043b7ea25bcbfabe40a"}, + {file = "pydantic_core-2.23.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:987503763bbdc403821e8b0e618888eae02531f416964aeb1f867ca53f0d1e72"}, + {file = "pydantic_core-2.23.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b7f929d7fffe5017aa0b50414a94a57ac21d96004673856147ea2af90beac7b"}, + {file = "pydantic_core-2.23.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9a17d5524f10afd850a0b4365f38931079dc5b00e3417e6b1774d0b8683a5244"}, + {file = "pydantic_core-2.23.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ec9897bde1b4654d513e065a97d7af50de5bfdf3419ba4ef3fed0fbe2d57451e"}, + {file = "pydantic_core-2.23.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7f7d0a3607a63c328762b904e8ecb471b2fbe0223bfc01d30e0e962cb71ca508"}, + {file = "pydantic_core-2.23.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:649b1f24ac7a09c430929234d43011e5a4195c1b3d32dd3a80fb6f175dcf301b"}, + {file = "pydantic_core-2.23.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9f186dc1c1e0fe14a453ccc9a90201c03c12fbdda30e1624e405cf67dcf1dc00"}, + {file = "pydantic_core-2.23.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9add1a74e7d8008f4ed9bd4b7cb62de6fd28f81b28f7f6def8c0389a50a98127"}, + {file = "pydantic_core-2.23.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d129992e977ecf672d4eb7c7ba0e5f13725995d0fac246c673f699b7722c9ae5"}, + {file = "pydantic_core-2.23.0-cp38-none-win32.whl", hash = "sha256:b75989878eb94f1a63a6a558735cee1c8d6c7d24007b61df41efc8cdbe819f70"}, + {file = "pydantic_core-2.23.0-cp38-none-win_amd64.whl", hash = "sha256:08dae83791aee669f7160a94e801162e8f17612c4a821c86e17f9a802389a011"}, + {file = "pydantic_core-2.23.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:8e18fb1effad8d28ae510d35507eecf79abcba96c09627443c51acdfbfa30f93"}, + {file = "pydantic_core-2.23.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:84667cd32f432bb7f1e0bc5f57c4ea2767d9493e9beef8f195657c16ea3a6076"}, + {file = "pydantic_core-2.23.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5202456ff1f71c2146ba63ffe4538be7fa5d0b6697de14f706d4266aa4e7bf47"}, + {file = "pydantic_core-2.23.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3ae227d46fd1fa1b5a02c18a5a7c80ccff014b7bf596731af5bb157f33e058c6"}, + {file = "pydantic_core-2.23.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:05a0d09b436ab65a35b5ad90fc295c4a0e545c2456e2212f242809c7474e60c6"}, + {file = "pydantic_core-2.23.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:49dea6930ab48b3ca233e7d541d5f6480f6ffa67a1cc2352cd8395c6f3c14745"}, + {file = "pydantic_core-2.23.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e21b2ee6273cf0d637a7b1622a6ece8761f111083822f1e814e7522d5efb1772"}, + {file = "pydantic_core-2.23.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:873e2453ff6451bdf5619c3c1122fa9998a39552d2fd4c2d9c34f61611e026d6"}, + {file = "pydantic_core-2.23.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9c0eb1577f5073cfb336e5d08cb91e717197c0727803962850561d529c07e53c"}, + {file = "pydantic_core-2.23.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c97f1fb88ec947522ec5863630cb17e3b3ec9f6ca09f954107ad3d35ca3abfe8"}, + {file = "pydantic_core-2.23.0-cp39-none-win32.whl", hash = "sha256:804a81e50dc43508068964a2b7abacaf99850e2cb7cbd0ae3a8e0145cb89ba1f"}, + {file = "pydantic_core-2.23.0-cp39-none-win_amd64.whl", hash = "sha256:54a4da481e9130eeba5b02fcfe95fcf26e188747b5b9c6a3bc434ee6f7573b04"}, + {file = "pydantic_core-2.23.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:7e8e33bf23a61b07456a1666a07ba453c0906ed74c1330a60ba4c10691628310"}, + {file = "pydantic_core-2.23.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:b28dadb0c7494e47304e5c0fec95c500ed914e88b53018ccb85d700fbb1d2bdc"}, + {file = "pydantic_core-2.23.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92137a6a2236223ae5aa4f610ca2a4fe5c8770941deeb6b295f477c71257e618"}, + {file = "pydantic_core-2.23.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3482e7e003b2b391ad2441c98ba219cbd71e3de12b3a5f422c5d9151479c827"}, + {file = "pydantic_core-2.23.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e34ae0eed62065a917f527296a0da2dc71056d53e5b7c8849d48ad69cc73a486"}, + {file = "pydantic_core-2.23.0-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:81b84e88ed517a4911f8ebef141b41f5b1d21f8100209b0fc118079accede06e"}, + {file = "pydantic_core-2.23.0-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:837cbeec0ad83ebd57ae9f4e8bd18c8ed34acfe3ec809e2ceceac253b0bc3fd7"}, + {file = "pydantic_core-2.23.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:39d4ac2cf7a25f1ceec7588a5c9b86ccdf330a5941753e1779974c08a9d763c4"}, + {file = "pydantic_core-2.23.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:865f96455c0f5af1b1e73c4f52659899a635af4c1e4db5ae40f848ba456dfd24"}, + {file = "pydantic_core-2.23.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:ff54894bc04f5982db8fa6ff6d336afa2e4b66cccc76952a35772ff7485d5553"}, + {file = "pydantic_core-2.23.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3734dd979f69b322ec7ddff60123264474801ef9620255f120e10d33596c3a6"}, + {file = "pydantic_core-2.23.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca5363fb0f39135cd6cbdbaa542c24a91246cf9d08fb5c3ba23f774ef4e91f66"}, + {file = "pydantic_core-2.23.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d00380dbb87abf553d173e2b0c4863a4e2e8573e36ee865af7237a065adc3519"}, + {file = "pydantic_core-2.23.0-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:5fc73dd963497080b1961c16e6a01c054acb525fb8108c6aeed208d109d7385e"}, + {file = "pydantic_core-2.23.0-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:151968f31efca42a9a5ae25cd00a62a67fb368ed4fdf05c861c629138e5cf674"}, + {file = "pydantic_core-2.23.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:95e912ae3ccbd9c20f44b85fc7f3e1e55db8f8688c8cf519aa517580ae7ba399"}, + {file = "pydantic_core-2.23.0.tar.gz", hash = "sha256:954509ea58b1adf6614390056da194e86feb83423679984f8453416db7cfa8c9"}, ] [package.dependencies] @@ -3634,13 +3680,13 @@ windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pyparsing" -version = "3.1.2" +version = "3.1.4" description = "pyparsing module - Classes and methods to define and execute parsing grammars" optional = true python-versions = ">=3.6.8" files = [ - {file = "pyparsing-3.1.2-py3-none-any.whl", hash = "sha256:f9db75911801ed778fe61bb643079ff86601aca99fcae6345aa67292038fb742"}, - {file = "pyparsing-3.1.2.tar.gz", hash = "sha256:a1bac0ce561155ecc3ed78ca94d3c9378656ad4c94c1270de543f621420f94ad"}, + {file = "pyparsing-3.1.4-py3-none-any.whl", hash = "sha256:a6a7ee4235a3f944aa1fa2249307708f893fe5717dc603503c6c7969c070fb7c"}, + {file = "pyparsing-3.1.4.tar.gz", hash = "sha256:f86ec8d1a83f11977c9a6ea7598e8c27fc5cddfa5b07ea2241edbbde1d7bc032"}, ] [package.extras] @@ -3670,17 +3716,17 @@ dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments [[package]] name = "pytest-asyncio" -version = "0.23.8" +version = "0.24.0" description = "Pytest support for asyncio" optional = false python-versions = ">=3.8" files = [ - {file = "pytest_asyncio-0.23.8-py3-none-any.whl", hash = "sha256:50265d892689a5faefb84df80819d1ecef566eb3549cf915dfb33569359d1ce2"}, - {file = "pytest_asyncio-0.23.8.tar.gz", hash = "sha256:759b10b33a6dc61cce40a8bd5205e302978bbbcc00e279a8b61d9a6a3c82e4d3"}, + {file = "pytest_asyncio-0.24.0-py3-none-any.whl", hash = "sha256:a811296ed596b69bf0b6f3dc40f83bcaf341b155a269052d82efa2b25ac7037b"}, + {file = "pytest_asyncio-0.24.0.tar.gz", hash = "sha256:d081d828e576d85f875399194281e92bf8a68d60d72d1a2faf2feddb6c46b276"}, ] [package.dependencies] -pytest = ">=7.0.0,<9" +pytest = ">=8.2,<9" [package.extras] docs = ["sphinx (>=5.3)", "sphinx-rtd-theme (>=1.0)"] @@ -3841,120 +3887,120 @@ files = [ [[package]] name = "pyzmq" -version = "26.1.0" +version = "26.2.0" description = "Python bindings for 0MQ" optional = false python-versions = ">=3.7" files = [ - {file = "pyzmq-26.1.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:263cf1e36862310bf5becfbc488e18d5d698941858860c5a8c079d1511b3b18e"}, - {file = "pyzmq-26.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d5c8b17f6e8f29138678834cf8518049e740385eb2dbf736e8f07fc6587ec682"}, - {file = "pyzmq-26.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:75a95c2358fcfdef3374cb8baf57f1064d73246d55e41683aaffb6cfe6862917"}, - {file = "pyzmq-26.1.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f99de52b8fbdb2a8f5301ae5fc0f9e6b3ba30d1d5fc0421956967edcc6914242"}, - {file = "pyzmq-26.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bcbfbab4e1895d58ab7da1b5ce9a327764f0366911ba5b95406c9104bceacb0"}, - {file = "pyzmq-26.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:77ce6a332c7e362cb59b63f5edf730e83590d0ab4e59c2aa5bd79419a42e3449"}, - {file = "pyzmq-26.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ba0a31d00e8616149a5ab440d058ec2da621e05d744914774c4dde6837e1f545"}, - {file = "pyzmq-26.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:8b88641384e84a258b740801cd4dbc45c75f148ee674bec3149999adda4a8598"}, - {file = "pyzmq-26.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2fa76ebcebe555cce90f16246edc3ad83ab65bb7b3d4ce408cf6bc67740c4f88"}, - {file = "pyzmq-26.1.0-cp310-cp310-win32.whl", hash = "sha256:fbf558551cf415586e91160d69ca6416f3fce0b86175b64e4293644a7416b81b"}, - {file = "pyzmq-26.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:a7b8aab50e5a288c9724d260feae25eda69582be84e97c012c80e1a5e7e03fb2"}, - {file = "pyzmq-26.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:08f74904cb066e1178c1ec706dfdb5c6c680cd7a8ed9efebeac923d84c1f13b1"}, - {file = "pyzmq-26.1.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:46d6800b45015f96b9d92ece229d92f2aef137d82906577d55fadeb9cf5fcb71"}, - {file = "pyzmq-26.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5bc2431167adc50ba42ea3e5e5f5cd70d93e18ab7b2f95e724dd8e1bd2c38120"}, - {file = "pyzmq-26.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b3bb34bebaa1b78e562931a1687ff663d298013f78f972a534f36c523311a84d"}, - {file = "pyzmq-26.1.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd3f6329340cef1c7ba9611bd038f2d523cea79f09f9c8f6b0553caba59ec562"}, - {file = "pyzmq-26.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:471880c4c14e5a056a96cd224f5e71211997d40b4bf5e9fdded55dafab1f98f2"}, - {file = "pyzmq-26.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:ce6f2b66799971cbae5d6547acefa7231458289e0ad481d0be0740535da38d8b"}, - {file = "pyzmq-26.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0a1f6ea5b1d6cdbb8cfa0536f0d470f12b4b41ad83625012e575f0e3ecfe97f0"}, - {file = "pyzmq-26.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:b45e6445ac95ecb7d728604bae6538f40ccf4449b132b5428c09918523abc96d"}, - {file = "pyzmq-26.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:94c4262626424683feea0f3c34951d39d49d354722db2745c42aa6bb50ecd93b"}, - {file = "pyzmq-26.1.0-cp311-cp311-win32.whl", hash = "sha256:a0f0ab9df66eb34d58205913f4540e2ad17a175b05d81b0b7197bc57d000e829"}, - {file = "pyzmq-26.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:8efb782f5a6c450589dbab4cb0f66f3a9026286333fe8f3a084399149af52f29"}, - {file = "pyzmq-26.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:f133d05aaf623519f45e16ab77526e1e70d4e1308e084c2fb4cedb1a0c764bbb"}, - {file = "pyzmq-26.1.0-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:3d3146b1c3dcc8a1539e7cc094700b2be1e605a76f7c8f0979b6d3bde5ad4072"}, - {file = "pyzmq-26.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d9270fbf038bf34ffca4855bcda6e082e2c7f906b9eb8d9a8ce82691166060f7"}, - {file = "pyzmq-26.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:995301f6740a421afc863a713fe62c0aaf564708d4aa057dfdf0f0f56525294b"}, - {file = "pyzmq-26.1.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7eca8b89e56fb8c6c26dd3e09bd41b24789022acf1cf13358e96f1cafd8cae3"}, - {file = "pyzmq-26.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d4feb2e83dfe9ace6374a847e98ee9d1246ebadcc0cb765482e272c34e5820"}, - {file = "pyzmq-26.1.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:d4fafc2eb5d83f4647331267808c7e0c5722c25a729a614dc2b90479cafa78bd"}, - {file = "pyzmq-26.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:58c33dc0e185dd97a9ac0288b3188d1be12b756eda67490e6ed6a75cf9491d79"}, - {file = "pyzmq-26.1.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:68a0a1d83d33d8367ddddb3e6bb4afbb0f92bd1dac2c72cd5e5ddc86bdafd3eb"}, - {file = "pyzmq-26.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2ae7c57e22ad881af78075e0cea10a4c778e67234adc65c404391b417a4dda83"}, - {file = "pyzmq-26.1.0-cp312-cp312-win32.whl", hash = "sha256:347e84fc88cc4cb646597f6d3a7ea0998f887ee8dc31c08587e9c3fd7b5ccef3"}, - {file = "pyzmq-26.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:9f136a6e964830230912f75b5a116a21fe8e34128dcfd82285aa0ef07cb2c7bd"}, - {file = "pyzmq-26.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:a4b7a989c8f5a72ab1b2bbfa58105578753ae77b71ba33e7383a31ff75a504c4"}, - {file = "pyzmq-26.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d416f2088ac8f12daacffbc2e8918ef4d6be8568e9d7155c83b7cebed49d2322"}, - {file = "pyzmq-26.1.0-cp313-cp313-macosx_10_15_universal2.whl", hash = "sha256:ecb6c88d7946166d783a635efc89f9a1ff11c33d680a20df9657b6902a1d133b"}, - {file = "pyzmq-26.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:471312a7375571857a089342beccc1a63584315188560c7c0da7e0a23afd8a5c"}, - {file = "pyzmq-26.1.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e6cea102ffa16b737d11932c426f1dc14b5938cf7bc12e17269559c458ac334"}, - {file = "pyzmq-26.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec7248673ffc7104b54e4957cee38b2f3075a13442348c8d651777bf41aa45ee"}, - {file = "pyzmq-26.1.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:0614aed6f87d550b5cecb03d795f4ddbb1544b78d02a4bd5eecf644ec98a39f6"}, - {file = "pyzmq-26.1.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:e8746ce968be22a8a1801bf4a23e565f9687088580c3ed07af5846580dd97f76"}, - {file = "pyzmq-26.1.0-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:7688653574392d2eaeef75ddcd0b2de5b232d8730af29af56c5adf1df9ef8d6f"}, - {file = "pyzmq-26.1.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:8d4dac7d97f15c653a5fedcafa82626bd6cee1450ccdaf84ffed7ea14f2b07a4"}, - {file = "pyzmq-26.1.0-cp313-cp313-win32.whl", hash = "sha256:ccb42ca0a4a46232d716779421bbebbcad23c08d37c980f02cc3a6bd115ad277"}, - {file = "pyzmq-26.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:e1e5d0a25aea8b691a00d6b54b28ac514c8cc0d8646d05f7ca6cb64b97358250"}, - {file = "pyzmq-26.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:fc82269d24860cfa859b676d18850cbb8e312dcd7eada09e7d5b007e2f3d9eb1"}, - {file = "pyzmq-26.1.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:416ac51cabd54f587995c2b05421324700b22e98d3d0aa2cfaec985524d16f1d"}, - {file = "pyzmq-26.1.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:ff832cce719edd11266ca32bc74a626b814fff236824aa1aeaad399b69fe6eae"}, - {file = "pyzmq-26.1.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:393daac1bcf81b2a23e696b7b638eedc965e9e3d2112961a072b6cd8179ad2eb"}, - {file = "pyzmq-26.1.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9869fa984c8670c8ab899a719eb7b516860a29bc26300a84d24d8c1b71eae3ec"}, - {file = "pyzmq-26.1.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b3b8e36fd4c32c0825b4461372949ecd1585d326802b1321f8b6dc1d7e9318c"}, - {file = "pyzmq-26.1.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:3ee647d84b83509b7271457bb428cc347037f437ead4b0b6e43b5eba35fec0aa"}, - {file = "pyzmq-26.1.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:45cb1a70eb00405ce3893041099655265fabcd9c4e1e50c330026e82257892c1"}, - {file = "pyzmq-26.1.0-cp313-cp313t-musllinux_1_1_i686.whl", hash = "sha256:5cca7b4adb86d7470e0fc96037771981d740f0b4cb99776d5cb59cd0e6684a73"}, - {file = "pyzmq-26.1.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:91d1a20bdaf3b25f3173ff44e54b1cfbc05f94c9e8133314eb2962a89e05d6e3"}, - {file = "pyzmq-26.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c0665d85535192098420428c779361b8823d3d7ec4848c6af3abb93bc5c915bf"}, - {file = "pyzmq-26.1.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:96d7c1d35ee4a495df56c50c83df7af1c9688cce2e9e0edffdbf50889c167595"}, - {file = "pyzmq-26.1.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b281b5ff5fcc9dcbfe941ac5c7fcd4b6c065adad12d850f95c9d6f23c2652384"}, - {file = "pyzmq-26.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5384c527a9a004445c5074f1e20db83086c8ff1682a626676229aafd9cf9f7d1"}, - {file = "pyzmq-26.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:754c99a9840839375ee251b38ac5964c0f369306eddb56804a073b6efdc0cd88"}, - {file = "pyzmq-26.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:9bdfcb74b469b592972ed881bad57d22e2c0acc89f5e8c146782d0d90fb9f4bf"}, - {file = "pyzmq-26.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:bd13f0231f4788db619347b971ca5f319c5b7ebee151afc7c14632068c6261d3"}, - {file = "pyzmq-26.1.0-cp37-cp37m-win32.whl", hash = "sha256:c5668dac86a869349828db5fc928ee3f58d450dce2c85607067d581f745e4fb1"}, - {file = "pyzmq-26.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:ad875277844cfaeca7fe299ddf8c8d8bfe271c3dc1caf14d454faa5cdbf2fa7a"}, - {file = "pyzmq-26.1.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:65c6e03cc0222eaf6aad57ff4ecc0a070451e23232bb48db4322cc45602cede0"}, - {file = "pyzmq-26.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:038ae4ffb63e3991f386e7fda85a9baab7d6617fe85b74a8f9cab190d73adb2b"}, - {file = "pyzmq-26.1.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:bdeb2c61611293f64ac1073f4bf6723b67d291905308a7de9bb2ca87464e3273"}, - {file = "pyzmq-26.1.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:61dfa5ee9d7df297c859ac82b1226d8fefaf9c5113dc25c2c00ecad6feeeb04f"}, - {file = "pyzmq-26.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3292d384537b9918010769b82ab3e79fca8b23d74f56fc69a679106a3e2c2cf"}, - {file = "pyzmq-26.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f9499c70c19ff0fbe1007043acb5ad15c1dec7d8e84ab429bca8c87138e8f85c"}, - {file = "pyzmq-26.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:d3dd5523ed258ad58fed7e364c92a9360d1af8a9371e0822bd0146bdf017ef4c"}, - {file = "pyzmq-26.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:baba2fd199b098c5544ef2536b2499d2e2155392973ad32687024bd8572a7d1c"}, - {file = "pyzmq-26.1.0-cp38-cp38-win32.whl", hash = "sha256:ddbb2b386128d8eca92bd9ca74e80f73fe263bcca7aa419f5b4cbc1661e19741"}, - {file = "pyzmq-26.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:79e45a4096ec8388cdeb04a9fa5e9371583bcb826964d55b8b66cbffe7b33c86"}, - {file = "pyzmq-26.1.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:add52c78a12196bc0fda2de087ba6c876ea677cbda2e3eba63546b26e8bf177b"}, - {file = "pyzmq-26.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:98c03bd7f3339ff47de7ea9ac94a2b34580a8d4df69b50128bb6669e1191a895"}, - {file = "pyzmq-26.1.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:dcc37d9d708784726fafc9c5e1232de655a009dbf97946f117aefa38d5985a0f"}, - {file = "pyzmq-26.1.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5a6ed52f0b9bf8dcc64cc82cce0607a3dfed1dbb7e8c6f282adfccc7be9781de"}, - {file = "pyzmq-26.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:451e16ae8bea3d95649317b463c9f95cd9022641ec884e3d63fc67841ae86dfe"}, - {file = "pyzmq-26.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:906e532c814e1d579138177a00ae835cd6becbf104d45ed9093a3aaf658f6a6a"}, - {file = "pyzmq-26.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:05bacc4f94af468cc82808ae3293390278d5f3375bb20fef21e2034bb9a505b6"}, - {file = "pyzmq-26.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:57bb2acba798dc3740e913ffadd56b1fcef96f111e66f09e2a8db3050f1f12c8"}, - {file = "pyzmq-26.1.0-cp39-cp39-win32.whl", hash = "sha256:f774841bb0e8588505002962c02da420bcfb4c5056e87a139c6e45e745c0e2e2"}, - {file = "pyzmq-26.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:359c533bedc62c56415a1f5fcfd8279bc93453afdb0803307375ecf81c962402"}, - {file = "pyzmq-26.1.0-cp39-cp39-win_arm64.whl", hash = "sha256:7907419d150b19962138ecec81a17d4892ea440c184949dc29b358bc730caf69"}, - {file = "pyzmq-26.1.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b24079a14c9596846bf7516fe75d1e2188d4a528364494859106a33d8b48be38"}, - {file = "pyzmq-26.1.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59d0acd2976e1064f1b398a00e2c3e77ed0a157529779e23087d4c2fb8aaa416"}, - {file = "pyzmq-26.1.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:911c43a4117915203c4cc8755e0f888e16c4676a82f61caee2f21b0c00e5b894"}, - {file = "pyzmq-26.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b10163e586cc609f5f85c9b233195554d77b1e9a0801388907441aaeb22841c5"}, - {file = "pyzmq-26.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:28a8b2abb76042f5fd7bd720f7fea48c0fd3e82e9de0a1bf2c0de3812ce44a42"}, - {file = "pyzmq-26.1.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:bef24d3e4ae2c985034439f449e3f9e06bf579974ce0e53d8a507a1577d5b2ab"}, - {file = "pyzmq-26.1.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2cd0f4d314f4a2518e8970b6f299ae18cff7c44d4a1fc06fc713f791c3a9e3ea"}, - {file = "pyzmq-26.1.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fa25a620eed2a419acc2cf10135b995f8f0ce78ad00534d729aa761e4adcef8a"}, - {file = "pyzmq-26.1.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef3b048822dca6d231d8a8ba21069844ae38f5d83889b9b690bf17d2acc7d099"}, - {file = "pyzmq-26.1.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:9a6847c92d9851b59b9f33f968c68e9e441f9a0f8fc972c5580c5cd7cbc6ee24"}, - {file = "pyzmq-26.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c9b9305004d7e4e6a824f4f19b6d8f32b3578aad6f19fc1122aaf320cbe3dc83"}, - {file = "pyzmq-26.1.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:63c1d3a65acb2f9c92dce03c4e1758cc552f1ae5c78d79a44e3bb88d2fa71f3a"}, - {file = "pyzmq-26.1.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d36b8fffe8b248a1b961c86fbdfa0129dfce878731d169ede7fa2631447331be"}, - {file = "pyzmq-26.1.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67976d12ebfd61a3bc7d77b71a9589b4d61d0422282596cf58c62c3866916544"}, - {file = "pyzmq-26.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:998444debc8816b5d8d15f966e42751032d0f4c55300c48cc337f2b3e4f17d03"}, - {file = "pyzmq-26.1.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:e5c88b2f13bcf55fee78ea83567b9fe079ba1a4bef8b35c376043440040f7edb"}, - {file = "pyzmq-26.1.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d906d43e1592be4b25a587b7d96527cb67277542a5611e8ea9e996182fae410"}, - {file = "pyzmq-26.1.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:80b0c9942430d731c786545da6be96d824a41a51742e3e374fedd9018ea43106"}, - {file = "pyzmq-26.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:314d11564c00b77f6224d12eb3ddebe926c301e86b648a1835c5b28176c83eab"}, - {file = "pyzmq-26.1.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:093a1a3cae2496233f14b57f4b485da01b4ff764582c854c0f42c6dd2be37f3d"}, - {file = "pyzmq-26.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:3c397b1b450f749a7e974d74c06d69bd22dd362142f370ef2bd32a684d6b480c"}, - {file = "pyzmq-26.1.0.tar.gz", hash = "sha256:6c5aeea71f018ebd3b9115c7cb13863dd850e98ca6b9258509de1246461a7e7f"}, + {file = "pyzmq-26.2.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:ddf33d97d2f52d89f6e6e7ae66ee35a4d9ca6f36eda89c24591b0c40205a3629"}, + {file = "pyzmq-26.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dacd995031a01d16eec825bf30802fceb2c3791ef24bcce48fa98ce40918c27b"}, + {file = "pyzmq-26.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89289a5ee32ef6c439086184529ae060c741334b8970a6855ec0b6ad3ff28764"}, + {file = "pyzmq-26.2.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5506f06d7dc6ecf1efacb4a013b1f05071bb24b76350832c96449f4a2d95091c"}, + {file = "pyzmq-26.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ea039387c10202ce304af74def5021e9adc6297067f3441d348d2b633e8166a"}, + {file = "pyzmq-26.2.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a2224fa4a4c2ee872886ed00a571f5e967c85e078e8e8c2530a2fb01b3309b88"}, + {file = "pyzmq-26.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:28ad5233e9c3b52d76196c696e362508959741e1a005fb8fa03b51aea156088f"}, + {file = "pyzmq-26.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:1c17211bc037c7d88e85ed8b7d8f7e52db6dc8eca5590d162717c654550f7282"}, + {file = "pyzmq-26.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b8f86dd868d41bea9a5f873ee13bf5551c94cf6bc51baebc6f85075971fe6eea"}, + {file = "pyzmq-26.2.0-cp310-cp310-win32.whl", hash = "sha256:46a446c212e58456b23af260f3d9fb785054f3e3653dbf7279d8f2b5546b21c2"}, + {file = "pyzmq-26.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:49d34ab71db5a9c292a7644ce74190b1dd5a3475612eefb1f8be1d6961441971"}, + {file = "pyzmq-26.2.0-cp310-cp310-win_arm64.whl", hash = "sha256:bfa832bfa540e5b5c27dcf5de5d82ebc431b82c453a43d141afb1e5d2de025fa"}, + {file = "pyzmq-26.2.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:8f7e66c7113c684c2b3f1c83cdd3376103ee0ce4c49ff80a648643e57fb22218"}, + {file = "pyzmq-26.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3a495b30fc91db2db25120df5847d9833af237546fd59170701acd816ccc01c4"}, + {file = "pyzmq-26.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77eb0968da535cba0470a5165468b2cac7772cfb569977cff92e240f57e31bef"}, + {file = "pyzmq-26.2.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ace4f71f1900a548f48407fc9be59c6ba9d9aaf658c2eea6cf2779e72f9f317"}, + {file = "pyzmq-26.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:92a78853d7280bffb93df0a4a6a2498cba10ee793cc8076ef797ef2f74d107cf"}, + {file = "pyzmq-26.2.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:689c5d781014956a4a6de61d74ba97b23547e431e9e7d64f27d4922ba96e9d6e"}, + {file = "pyzmq-26.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0aca98bc423eb7d153214b2df397c6421ba6373d3397b26c057af3c904452e37"}, + {file = "pyzmq-26.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:1f3496d76b89d9429a656293744ceca4d2ac2a10ae59b84c1da9b5165f429ad3"}, + {file = "pyzmq-26.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5c2b3bfd4b9689919db068ac6c9911f3fcb231c39f7dd30e3138be94896d18e6"}, + {file = "pyzmq-26.2.0-cp311-cp311-win32.whl", hash = "sha256:eac5174677da084abf378739dbf4ad245661635f1600edd1221f150b165343f4"}, + {file = "pyzmq-26.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:5a509df7d0a83a4b178d0f937ef14286659225ef4e8812e05580776c70e155d5"}, + {file = "pyzmq-26.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:c0e6091b157d48cbe37bd67233318dbb53e1e6327d6fc3bb284afd585d141003"}, + {file = "pyzmq-26.2.0-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:ded0fc7d90fe93ae0b18059930086c51e640cdd3baebdc783a695c77f123dcd9"}, + {file = "pyzmq-26.2.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:17bf5a931c7f6618023cdacc7081f3f266aecb68ca692adac015c383a134ca52"}, + {file = "pyzmq-26.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55cf66647e49d4621a7e20c8d13511ef1fe1efbbccf670811864452487007e08"}, + {file = "pyzmq-26.2.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4661c88db4a9e0f958c8abc2b97472e23061f0bc737f6f6179d7a27024e1faa5"}, + {file = "pyzmq-26.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea7f69de383cb47522c9c208aec6dd17697db7875a4674c4af3f8cfdac0bdeae"}, + {file = "pyzmq-26.2.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:7f98f6dfa8b8ccaf39163ce872bddacca38f6a67289116c8937a02e30bbe9711"}, + {file = "pyzmq-26.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:e3e0210287329272539eea617830a6a28161fbbd8a3271bf4150ae3e58c5d0e6"}, + {file = "pyzmq-26.2.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:6b274e0762c33c7471f1a7471d1a2085b1a35eba5cdc48d2ae319f28b6fc4de3"}, + {file = "pyzmq-26.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:29c6a4635eef69d68a00321e12a7d2559fe2dfccfa8efae3ffb8e91cd0b36a8b"}, + {file = "pyzmq-26.2.0-cp312-cp312-win32.whl", hash = "sha256:989d842dc06dc59feea09e58c74ca3e1678c812a4a8a2a419046d711031f69c7"}, + {file = "pyzmq-26.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:2a50625acdc7801bc6f74698c5c583a491c61d73c6b7ea4dee3901bb99adb27a"}, + {file = "pyzmq-26.2.0-cp312-cp312-win_arm64.whl", hash = "sha256:4d29ab8592b6ad12ebbf92ac2ed2bedcfd1cec192d8e559e2e099f648570e19b"}, + {file = "pyzmq-26.2.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9dd8cd1aeb00775f527ec60022004d030ddc51d783d056e3e23e74e623e33726"}, + {file = "pyzmq-26.2.0-cp313-cp313-macosx_10_15_universal2.whl", hash = "sha256:28c812d9757fe8acecc910c9ac9dafd2ce968c00f9e619db09e9f8f54c3a68a3"}, + {file = "pyzmq-26.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d80b1dd99c1942f74ed608ddb38b181b87476c6a966a88a950c7dee118fdf50"}, + {file = "pyzmq-26.2.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8c997098cc65e3208eca09303630e84d42718620e83b733d0fd69543a9cab9cb"}, + {file = "pyzmq-26.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ad1bc8d1b7a18497dda9600b12dc193c577beb391beae5cd2349184db40f187"}, + {file = "pyzmq-26.2.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:bea2acdd8ea4275e1278350ced63da0b166421928276c7c8e3f9729d7402a57b"}, + {file = "pyzmq-26.2.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:23f4aad749d13698f3f7b64aad34f5fc02d6f20f05999eebc96b89b01262fb18"}, + {file = "pyzmq-26.2.0-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:a4f96f0d88accc3dbe4a9025f785ba830f968e21e3e2c6321ccdfc9aef755115"}, + {file = "pyzmq-26.2.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ced65e5a985398827cc9276b93ef6dfabe0273c23de8c7931339d7e141c2818e"}, + {file = "pyzmq-26.2.0-cp313-cp313-win32.whl", hash = "sha256:31507f7b47cc1ead1f6e86927f8ebb196a0bab043f6345ce070f412a59bf87b5"}, + {file = "pyzmq-26.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:70fc7fcf0410d16ebdda9b26cbd8bf8d803d220a7f3522e060a69a9c87bf7bad"}, + {file = "pyzmq-26.2.0-cp313-cp313-win_arm64.whl", hash = "sha256:c3789bd5768ab5618ebf09cef6ec2b35fed88709b104351748a63045f0ff9797"}, + {file = "pyzmq-26.2.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:034da5fc55d9f8da09015d368f519478a52675e558c989bfcb5cf6d4e16a7d2a"}, + {file = "pyzmq-26.2.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:c92d73464b886931308ccc45b2744e5968cbaade0b1d6aeb40d8ab537765f5bc"}, + {file = "pyzmq-26.2.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:794a4562dcb374f7dbbfb3f51d28fb40123b5a2abadee7b4091f93054909add5"}, + {file = "pyzmq-26.2.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aee22939bb6075e7afededabad1a56a905da0b3c4e3e0c45e75810ebe3a52672"}, + {file = "pyzmq-26.2.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ae90ff9dad33a1cfe947d2c40cb9cb5e600d759ac4f0fd22616ce6540f72797"}, + {file = "pyzmq-26.2.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:43a47408ac52647dfabbc66a25b05b6a61700b5165807e3fbd40063fcaf46386"}, + {file = "pyzmq-26.2.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:25bf2374a2a8433633c65ccb9553350d5e17e60c8eb4de4d92cc6bd60f01d306"}, + {file = "pyzmq-26.2.0-cp313-cp313t-musllinux_1_1_i686.whl", hash = "sha256:007137c9ac9ad5ea21e6ad97d3489af654381324d5d3ba614c323f60dab8fae6"}, + {file = "pyzmq-26.2.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:470d4a4f6d48fb34e92d768b4e8a5cc3780db0d69107abf1cd7ff734b9766eb0"}, + {file = "pyzmq-26.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3b55a4229ce5da9497dd0452b914556ae58e96a4381bb6f59f1305dfd7e53fc8"}, + {file = "pyzmq-26.2.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9cb3a6460cdea8fe8194a76de8895707e61ded10ad0be97188cc8463ffa7e3a8"}, + {file = "pyzmq-26.2.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8ab5cad923cc95c87bffee098a27856c859bd5d0af31bd346035aa816b081fe1"}, + {file = "pyzmq-26.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ed69074a610fad1c2fda66180e7b2edd4d31c53f2d1872bc2d1211563904cd9"}, + {file = "pyzmq-26.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:cccba051221b916a4f5e538997c45d7d136a5646442b1231b916d0164067ea27"}, + {file = "pyzmq-26.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:0eaa83fc4c1e271c24eaf8fb083cbccef8fde77ec8cd45f3c35a9a123e6da097"}, + {file = "pyzmq-26.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:9edda2df81daa129b25a39b86cb57dfdfe16f7ec15b42b19bfac503360d27a93"}, + {file = "pyzmq-26.2.0-cp37-cp37m-win32.whl", hash = "sha256:ea0eb6af8a17fa272f7b98d7bebfab7836a0d62738e16ba380f440fceca2d951"}, + {file = "pyzmq-26.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:4ff9dc6bc1664bb9eec25cd17506ef6672d506115095411e237d571e92a58231"}, + {file = "pyzmq-26.2.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:2eb7735ee73ca1b0d71e0e67c3739c689067f055c764f73aac4cc8ecf958ee3f"}, + {file = "pyzmq-26.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a534f43bc738181aa7cbbaf48e3eca62c76453a40a746ab95d4b27b1111a7d2"}, + {file = "pyzmq-26.2.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:aedd5dd8692635813368e558a05266b995d3d020b23e49581ddd5bbe197a8ab6"}, + {file = "pyzmq-26.2.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8be4700cd8bb02cc454f630dcdf7cfa99de96788b80c51b60fe2fe1dac480289"}, + {file = "pyzmq-26.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fcc03fa4997c447dce58264e93b5aa2d57714fbe0f06c07b7785ae131512732"}, + {file = "pyzmq-26.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:402b190912935d3db15b03e8f7485812db350d271b284ded2b80d2e5704be780"}, + {file = "pyzmq-26.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8685fa9c25ff00f550c1fec650430c4b71e4e48e8d852f7ddcf2e48308038640"}, + {file = "pyzmq-26.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:76589c020680778f06b7e0b193f4b6dd66d470234a16e1df90329f5e14a171cd"}, + {file = "pyzmq-26.2.0-cp38-cp38-win32.whl", hash = "sha256:8423c1877d72c041f2c263b1ec6e34360448decfb323fa8b94e85883043ef988"}, + {file = "pyzmq-26.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:76589f2cd6b77b5bdea4fca5992dc1c23389d68b18ccc26a53680ba2dc80ff2f"}, + {file = "pyzmq-26.2.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:b1d464cb8d72bfc1a3adc53305a63a8e0cac6bc8c5a07e8ca190ab8d3faa43c2"}, + {file = "pyzmq-26.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4da04c48873a6abdd71811c5e163bd656ee1b957971db7f35140a2d573f6949c"}, + {file = "pyzmq-26.2.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d049df610ac811dcffdc147153b414147428567fbbc8be43bb8885f04db39d98"}, + {file = "pyzmq-26.2.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:05590cdbc6b902101d0e65d6a4780af14dc22914cc6ab995d99b85af45362cc9"}, + {file = "pyzmq-26.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c811cfcd6a9bf680236c40c6f617187515269ab2912f3d7e8c0174898e2519db"}, + {file = "pyzmq-26.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:6835dd60355593de10350394242b5757fbbd88b25287314316f266e24c61d073"}, + {file = "pyzmq-26.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc6bee759a6bddea5db78d7dcd609397449cb2d2d6587f48f3ca613b19410cfc"}, + {file = "pyzmq-26.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c530e1eecd036ecc83c3407f77bb86feb79916d4a33d11394b8234f3bd35b940"}, + {file = "pyzmq-26.2.0-cp39-cp39-win32.whl", hash = "sha256:367b4f689786fca726ef7a6c5ba606958b145b9340a5e4808132cc65759abd44"}, + {file = "pyzmq-26.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:e6fa2e3e683f34aea77de8112f6483803c96a44fd726d7358b9888ae5bb394ec"}, + {file = "pyzmq-26.2.0-cp39-cp39-win_arm64.whl", hash = "sha256:7445be39143a8aa4faec43b076e06944b8f9d0701b669df4af200531b21e40bb"}, + {file = "pyzmq-26.2.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:706e794564bec25819d21a41c31d4df2d48e1cc4b061e8d345d7fb4dd3e94072"}, + {file = "pyzmq-26.2.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b435f2753621cd36e7c1762156815e21c985c72b19135dac43a7f4f31d28dd1"}, + {file = "pyzmq-26.2.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:160c7e0a5eb178011e72892f99f918c04a131f36056d10d9c1afb223fc952c2d"}, + {file = "pyzmq-26.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c4a71d5d6e7b28a47a394c0471b7e77a0661e2d651e7ae91e0cab0a587859ca"}, + {file = "pyzmq-26.2.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:90412f2db8c02a3864cbfc67db0e3dcdbda336acf1c469526d3e869394fe001c"}, + {file = "pyzmq-26.2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2ea4ad4e6a12e454de05f2949d4beddb52460f3de7c8b9d5c46fbb7d7222e02c"}, + {file = "pyzmq-26.2.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:fc4f7a173a5609631bb0c42c23d12c49df3966f89f496a51d3eb0ec81f4519d6"}, + {file = "pyzmq-26.2.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:878206a45202247781472a2d99df12a176fef806ca175799e1c6ad263510d57c"}, + {file = "pyzmq-26.2.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17c412bad2eb9468e876f556eb4ee910e62d721d2c7a53c7fa31e643d35352e6"}, + {file = "pyzmq-26.2.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:0d987a3ae5a71c6226b203cfd298720e0086c7fe7c74f35fa8edddfbd6597eed"}, + {file = "pyzmq-26.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:39887ac397ff35b7b775db7201095fc6310a35fdbae85bac4523f7eb3b840e20"}, + {file = "pyzmq-26.2.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:fdb5b3e311d4d4b0eb8b3e8b4d1b0a512713ad7e6a68791d0923d1aec433d919"}, + {file = "pyzmq-26.2.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:226af7dcb51fdb0109f0016449b357e182ea0ceb6b47dfb5999d569e5db161d5"}, + {file = "pyzmq-26.2.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0bed0e799e6120b9c32756203fb9dfe8ca2fb8467fed830c34c877e25638c3fc"}, + {file = "pyzmq-26.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:29c7947c594e105cb9e6c466bace8532dc1ca02d498684128b339799f5248277"}, + {file = "pyzmq-26.2.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:cdeabcff45d1c219636ee2e54d852262e5c2e085d6cb476d938aee8d921356b3"}, + {file = "pyzmq-26.2.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35cffef589bcdc587d06f9149f8d5e9e8859920a071df5a2671de2213bef592a"}, + {file = "pyzmq-26.2.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18c8dc3b7468d8b4bdf60ce9d7141897da103c7a4690157b32b60acb45e333e6"}, + {file = "pyzmq-26.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7133d0a1677aec369d67dd78520d3fa96dd7f3dcec99d66c1762870e5ea1a50a"}, + {file = "pyzmq-26.2.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6a96179a24b14fa6428cbfc08641c779a53f8fcec43644030328f44034c7f1f4"}, + {file = "pyzmq-26.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:4f78c88905461a9203eac9faac157a2a0dbba84a0fd09fd29315db27be40af9f"}, + {file = "pyzmq-26.2.0.tar.gz", hash = "sha256:070672c258581c8e4f640b5159297580a9974b026043bd4ab0470be9ed324f1f"}, ] [package.dependencies] @@ -4270,29 +4316,29 @@ pyasn1 = ">=0.1.3" [[package]] name = "ruff" -version = "0.5.7" +version = "0.6.2" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.5.7-py3-none-linux_armv6l.whl", hash = "sha256:548992d342fc404ee2e15a242cdbea4f8e39a52f2e7752d0e4cbe88d2d2f416a"}, - {file = "ruff-0.5.7-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:00cc8872331055ee017c4f1071a8a31ca0809ccc0657da1d154a1d2abac5c0be"}, - {file = "ruff-0.5.7-py3-none-macosx_11_0_arm64.whl", hash = "sha256:eaf3d86a1fdac1aec8a3417a63587d93f906c678bb9ed0b796da7b59c1114a1e"}, - {file = "ruff-0.5.7-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a01c34400097b06cf8a6e61b35d6d456d5bd1ae6961542de18ec81eaf33b4cb8"}, - {file = "ruff-0.5.7-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fcc8054f1a717e2213500edaddcf1dbb0abad40d98e1bd9d0ad364f75c763eea"}, - {file = "ruff-0.5.7-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7f70284e73f36558ef51602254451e50dd6cc479f8b6f8413a95fcb5db4a55fc"}, - {file = "ruff-0.5.7-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:a78ad870ae3c460394fc95437d43deb5c04b5c29297815a2a1de028903f19692"}, - {file = "ruff-0.5.7-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9ccd078c66a8e419475174bfe60a69adb36ce04f8d4e91b006f1329d5cd44bcf"}, - {file = "ruff-0.5.7-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7e31c9bad4ebf8fdb77b59cae75814440731060a09a0e0077d559a556453acbb"}, - {file = "ruff-0.5.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d796327eed8e168164346b769dd9a27a70e0298d667b4ecee6877ce8095ec8e"}, - {file = "ruff-0.5.7-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:4a09ea2c3f7778cc635e7f6edf57d566a8ee8f485f3c4454db7771efb692c499"}, - {file = "ruff-0.5.7-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:a36d8dcf55b3a3bc353270d544fb170d75d2dff41eba5df57b4e0b67a95bb64e"}, - {file = "ruff-0.5.7-py3-none-musllinux_1_2_i686.whl", hash = "sha256:9369c218f789eefbd1b8d82a8cf25017b523ac47d96b2f531eba73770971c9e5"}, - {file = "ruff-0.5.7-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:b88ca3db7eb377eb24fb7c82840546fb7acef75af4a74bd36e9ceb37a890257e"}, - {file = "ruff-0.5.7-py3-none-win32.whl", hash = "sha256:33d61fc0e902198a3e55719f4be6b375b28f860b09c281e4bdbf783c0566576a"}, - {file = "ruff-0.5.7-py3-none-win_amd64.whl", hash = "sha256:083bbcbe6fadb93cd86709037acc510f86eed5a314203079df174c40bbbca6b3"}, - {file = "ruff-0.5.7-py3-none-win_arm64.whl", hash = "sha256:2dca26154ff9571995107221d0aeaad0e75a77b5a682d6236cf89a58c70b76f4"}, - {file = "ruff-0.5.7.tar.gz", hash = "sha256:8dfc0a458797f5d9fb622dd0efc52d796f23f0a1493a9527f4e49a550ae9a7e5"}, + {file = "ruff-0.6.2-py3-none-linux_armv6l.whl", hash = "sha256:5c8cbc6252deb3ea840ad6a20b0f8583caab0c5ef4f9cca21adc5a92b8f79f3c"}, + {file = "ruff-0.6.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:17002fe241e76544448a8e1e6118abecbe8cd10cf68fde635dad480dba594570"}, + {file = "ruff-0.6.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:3dbeac76ed13456f8158b8f4fe087bf87882e645c8e8b606dd17b0b66c2c1158"}, + {file = "ruff-0.6.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:094600ee88cda325988d3f54e3588c46de5c18dae09d683ace278b11f9d4d534"}, + {file = "ruff-0.6.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:316d418fe258c036ba05fbf7dfc1f7d3d4096db63431546163b472285668132b"}, + {file = "ruff-0.6.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d72b8b3abf8a2d51b7b9944a41307d2f442558ccb3859bbd87e6ae9be1694a5d"}, + {file = "ruff-0.6.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:2aed7e243be68487aa8982e91c6e260982d00da3f38955873aecd5a9204b1d66"}, + {file = "ruff-0.6.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d371f7fc9cec83497fe7cf5eaf5b76e22a8efce463de5f775a1826197feb9df8"}, + {file = "ruff-0.6.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8f310d63af08f583363dfb844ba8f9417b558199c58a5999215082036d795a1"}, + {file = "ruff-0.6.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7db6880c53c56addb8638fe444818183385ec85eeada1d48fc5abe045301b2f1"}, + {file = "ruff-0.6.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:1175d39faadd9a50718f478d23bfc1d4da5743f1ab56af81a2b6caf0a2394f23"}, + {file = "ruff-0.6.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:5b939f9c86d51635fe486585389f54582f0d65b8238e08c327c1534844b3bb9a"}, + {file = "ruff-0.6.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:d0d62ca91219f906caf9b187dea50d17353f15ec9bb15aae4a606cd697b49b4c"}, + {file = "ruff-0.6.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:7438a7288f9d67ed3c8ce4d059e67f7ed65e9fe3aa2ab6f5b4b3610e57e3cb56"}, + {file = "ruff-0.6.2-py3-none-win32.whl", hash = "sha256:279d5f7d86696df5f9549b56b9b6a7f6c72961b619022b5b7999b15db392a4da"}, + {file = "ruff-0.6.2-py3-none-win_amd64.whl", hash = "sha256:d9f3469c7dd43cd22eb1c3fc16926fb8258d50cb1b216658a07be95dd117b0f2"}, + {file = "ruff-0.6.2-py3-none-win_arm64.whl", hash = "sha256:f28fcd2cd0e02bdf739297516d5643a945cc7caf09bd9bcb4d932540a5ea4fa9"}, + {file = "ruff-0.6.2.tar.gz", hash = "sha256:239ee6beb9e91feb8e0ec384204a763f36cb53fb895a1a364618c6abb076b3be"}, ] [[package]] @@ -4446,36 +4492,44 @@ torch = ["safetensors[numpy]", "torch (>=1.10)"] [[package]] name = "scipy" -version = "1.14.0" +version = "1.14.1" description = "Fundamental algorithms for scientific computing in Python" optional = true python-versions = ">=3.10" files = [ - {file = "scipy-1.14.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7e911933d54ead4d557c02402710c2396529540b81dd554fc1ba270eb7308484"}, - {file = "scipy-1.14.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:687af0a35462402dd851726295c1a5ae5f987bd6e9026f52e9505994e2f84ef6"}, - {file = "scipy-1.14.0-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:07e179dc0205a50721022344fb85074f772eadbda1e1b3eecdc483f8033709b7"}, - {file = "scipy-1.14.0-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:6a9c9a9b226d9a21e0a208bdb024c3982932e43811b62d202aaf1bb59af264b1"}, - {file = "scipy-1.14.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:076c27284c768b84a45dcf2e914d4000aac537da74236a0d45d82c6fa4b7b3c0"}, - {file = "scipy-1.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42470ea0195336df319741e230626b6225a740fd9dce9642ca13e98f667047c0"}, - {file = "scipy-1.14.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:176c6f0d0470a32f1b2efaf40c3d37a24876cebf447498a4cefb947a79c21e9d"}, - {file = "scipy-1.14.0-cp310-cp310-win_amd64.whl", hash = "sha256:ad36af9626d27a4326c8e884917b7ec321d8a1841cd6dacc67d2a9e90c2f0359"}, - {file = "scipy-1.14.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6d056a8709ccda6cf36cdd2eac597d13bc03dba38360f418560a93050c76a16e"}, - {file = "scipy-1.14.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:f0a50da861a7ec4573b7c716b2ebdcdf142b66b756a0d392c236ae568b3a93fb"}, - {file = "scipy-1.14.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:94c164a9e2498e68308e6e148646e486d979f7fcdb8b4cf34b5441894bdb9caf"}, - {file = "scipy-1.14.0-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:a7d46c3e0aea5c064e734c3eac5cf9eb1f8c4ceee756262f2c7327c4c2691c86"}, - {file = "scipy-1.14.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9eee2989868e274aae26125345584254d97c56194c072ed96cb433f32f692ed8"}, - {file = "scipy-1.14.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e3154691b9f7ed73778d746da2df67a19d046a6c8087c8b385bc4cdb2cfca74"}, - {file = "scipy-1.14.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c40003d880f39c11c1edbae8144e3813904b10514cd3d3d00c277ae996488cdb"}, - {file = "scipy-1.14.0-cp311-cp311-win_amd64.whl", hash = "sha256:5b083c8940028bb7e0b4172acafda6df762da1927b9091f9611b0bcd8676f2bc"}, - {file = "scipy-1.14.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:bff2438ea1330e06e53c424893ec0072640dac00f29c6a43a575cbae4c99b2b9"}, - {file = "scipy-1.14.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:bbc0471b5f22c11c389075d091d3885693fd3f5e9a54ce051b46308bc787e5d4"}, - {file = "scipy-1.14.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:64b2ff514a98cf2bb734a9f90d32dc89dc6ad4a4a36a312cd0d6327170339eb0"}, - {file = "scipy-1.14.0-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:7d3da42fbbbb860211a811782504f38ae7aaec9de8764a9bef6b262de7a2b50f"}, - {file = "scipy-1.14.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d91db2c41dd6c20646af280355d41dfa1ec7eead235642178bd57635a3f82209"}, - {file = "scipy-1.14.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a01cc03bcdc777c9da3cfdcc74b5a75caffb48a6c39c8450a9a05f82c4250a14"}, - {file = "scipy-1.14.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:65df4da3c12a2bb9ad52b86b4dcf46813e869afb006e58be0f516bc370165159"}, - {file = "scipy-1.14.0-cp312-cp312-win_amd64.whl", hash = "sha256:4c4161597c75043f7154238ef419c29a64ac4a7c889d588ea77690ac4d0d9b20"}, - {file = "scipy-1.14.0.tar.gz", hash = "sha256:b5923f48cb840380f9854339176ef21763118a7300a88203ccd0bdd26e58527b"}, + {file = "scipy-1.14.1-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:b28d2ca4add7ac16ae8bb6632a3c86e4b9e4d52d3e34267f6e1b0c1f8d87e389"}, + {file = "scipy-1.14.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:d0d2821003174de06b69e58cef2316a6622b60ee613121199cb2852a873f8cf3"}, + {file = "scipy-1.14.1-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:8bddf15838ba768bb5f5083c1ea012d64c9a444e16192762bd858f1e126196d0"}, + {file = "scipy-1.14.1-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:97c5dddd5932bd2a1a31c927ba5e1463a53b87ca96b5c9bdf5dfd6096e27efc3"}, + {file = "scipy-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ff0a7e01e422c15739ecd64432743cf7aae2b03f3084288f399affcefe5222d"}, + {file = "scipy-1.14.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e32dced201274bf96899e6491d9ba3e9a5f6b336708656466ad0522d8528f69"}, + {file = "scipy-1.14.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8426251ad1e4ad903a4514712d2fa8fdd5382c978010d1c6f5f37ef286a713ad"}, + {file = "scipy-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:a49f6ed96f83966f576b33a44257d869756df6cf1ef4934f59dd58b25e0327e5"}, + {file = "scipy-1.14.1-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:2da0469a4ef0ecd3693761acbdc20f2fdeafb69e6819cc081308cc978153c675"}, + {file = "scipy-1.14.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:c0ee987efa6737242745f347835da2cc5bb9f1b42996a4d97d5c7ff7928cb6f2"}, + {file = "scipy-1.14.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3a1b111fac6baec1c1d92f27e76511c9e7218f1695d61b59e05e0fe04dc59617"}, + {file = "scipy-1.14.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8475230e55549ab3f207bff11ebfc91c805dc3463ef62eda3ccf593254524ce8"}, + {file = "scipy-1.14.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:278266012eb69f4a720827bdd2dc54b2271c97d84255b2faaa8f161a158c3b37"}, + {file = "scipy-1.14.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fef8c87f8abfb884dac04e97824b61299880c43f4ce675dd2cbeadd3c9b466d2"}, + {file = "scipy-1.14.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b05d43735bb2f07d689f56f7b474788a13ed8adc484a85aa65c0fd931cf9ccd2"}, + {file = "scipy-1.14.1-cp311-cp311-win_amd64.whl", hash = "sha256:716e389b694c4bb564b4fc0c51bc84d381735e0d39d3f26ec1af2556ec6aad94"}, + {file = "scipy-1.14.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:631f07b3734d34aced009aaf6fedfd0eb3498a97e581c3b1e5f14a04164a456d"}, + {file = "scipy-1.14.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:af29a935803cc707ab2ed7791c44288a682f9c8107bc00f0eccc4f92c08d6e07"}, + {file = "scipy-1.14.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:2843f2d527d9eebec9a43e6b406fb7266f3af25a751aa91d62ff416f54170bc5"}, + {file = "scipy-1.14.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:eb58ca0abd96911932f688528977858681a59d61a7ce908ffd355957f7025cfc"}, + {file = "scipy-1.14.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30ac8812c1d2aab7131a79ba62933a2a76f582d5dbbc695192453dae67ad6310"}, + {file = "scipy-1.14.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f9ea80f2e65bdaa0b7627fb00cbeb2daf163caa015e59b7516395fe3bd1e066"}, + {file = "scipy-1.14.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:edaf02b82cd7639db00dbff629995ef185c8df4c3ffa71a5562a595765a06ce1"}, + {file = "scipy-1.14.1-cp312-cp312-win_amd64.whl", hash = "sha256:2ff38e22128e6c03ff73b6bb0f85f897d2362f8c052e3b8ad00532198fbdae3f"}, + {file = "scipy-1.14.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1729560c906963fc8389f6aac023739ff3983e727b1a4d87696b7bf108316a79"}, + {file = "scipy-1.14.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:4079b90df244709e675cdc8b93bfd8a395d59af40b72e339c2287c91860deb8e"}, + {file = "scipy-1.14.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:e0cf28db0f24a38b2a0ca33a85a54852586e43cf6fd876365c86e0657cfe7d73"}, + {file = "scipy-1.14.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:0c2f95de3b04e26f5f3ad5bb05e74ba7f68b837133a4492414b3afd79dfe540e"}, + {file = "scipy-1.14.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b99722ea48b7ea25e8e015e8341ae74624f72e5f21fc2abd45f3a93266de4c5d"}, + {file = "scipy-1.14.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5149e3fd2d686e42144a093b206aef01932a0059c2a33ddfa67f5f035bdfe13e"}, + {file = "scipy-1.14.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e4f5a7c49323533f9103d4dacf4e4f07078f360743dec7f7596949149efeec06"}, + {file = "scipy-1.14.1-cp313-cp313-win_amd64.whl", hash = "sha256:baff393942b550823bfce952bb62270ee17504d02a1801d7fd0719534dfb9c84"}, + {file = "scipy-1.14.1.tar.gz", hash = "sha256:5a275584e726026a5699459aa72f828a610821006228e841b94275c4a7c08417"}, ] [package.dependencies] @@ -4483,8 +4537,8 @@ numpy = ">=1.23.5,<2.3" [package.extras] dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy (==1.10.0)", "pycodestyle", "pydevtool", "rich-click", "ruff (>=0.0.292)", "types-psutil", "typing_extensions"] -doc = ["jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.13.1)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0)", "sphinx-design (>=0.4.0)"] -test = ["Cython", "array-api-strict", "asv", "gmpy2", "hypothesis (>=6.30)", "meson", "mpmath", "ninja", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] +doc = ["jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.13.1)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0,<=7.3.7)", "sphinx-design (>=0.4.0)"] +test = ["Cython", "array-api-strict (>=2.0)", "asv", "gmpy2", "hypothesis (>=6.30)", "meson", "mpmath", "ninja", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] [[package]] name = "setuptools" @@ -4660,13 +4714,13 @@ full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart (>=0.0.7 [[package]] name = "sympy" -version = "1.13.1" +version = "1.13.2" description = "Computer algebra system (CAS) in Python" optional = true python-versions = ">=3.8" files = [ - {file = "sympy-1.13.1-py3-none-any.whl", hash = "sha256:db36cdc64bf61b9b24578b6f7bab1ecdd2452cf008f34faa33776680c26d66f8"}, - {file = "sympy-1.13.1.tar.gz", hash = "sha256:9cebf7e04ff162015ce31c9c6c9144daa34a93bd082f54fd8f12deca4f47515f"}, + {file = "sympy-1.13.2-py3-none-any.whl", hash = "sha256:c51d75517712f1aed280d4ce58506a4a88d635d6b5dd48b39102a7ae1f3fcfe9"}, + {file = "sympy-1.13.2.tar.gz", hash = "sha256:401449d84d07be9d0c7a46a64bd54fe097667d5e7181bfe67ec777be9e01cb13"}, ] [package.dependencies] @@ -5012,13 +5066,13 @@ test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0, [[package]] name = "transformers" -version = "4.44.0" +version = "4.44.2" description = "State-of-the-art Machine Learning for JAX, PyTorch and TensorFlow" optional = true python-versions = ">=3.8.0" files = [ - {file = "transformers-4.44.0-py3-none-any.whl", hash = "sha256:ea0ff72def71e9f4812d9414d4803b22681b1617aa6f511bd51cfff2b44a6fca"}, - {file = "transformers-4.44.0.tar.gz", hash = "sha256:75699495e30b7635ca444d8d372e138c687ab51a875b387e33f1fb759c37f196"}, + {file = "transformers-4.44.2-py3-none-any.whl", hash = "sha256:1c02c65e7bfa5e52a634aff3da52138b583fc6f263c1f28d547dc144ba3d412d"}, + {file = "transformers-4.44.2.tar.gz", hash = "sha256:36aa17cc92ee154058e426d951684a2dab48751b35b49437896f898931270826"}, ] [package.dependencies] @@ -5157,13 +5211,13 @@ types-cffi = "*" [[package]] name = "types-redis" -version = "4.6.0.20240806" +version = "4.6.0.20240819" description = "Typing stubs for redis" optional = false python-versions = ">=3.8" files = [ - {file = "types-redis-4.6.0.20240806.tar.gz", hash = "sha256:60dd02c2b91ea2d42ad079ac58dedc31d71d6eedb1c21d3796811b02baac655d"}, - {file = "types_redis-4.6.0.20240806-py3-none-any.whl", hash = "sha256:9d8fbe0ce37e3660c0a06982db7812384295d10a93d637c7f8604a2f3c88b0e6"}, + {file = "types-redis-4.6.0.20240819.tar.gz", hash = "sha256:08f51f550ad41d0152bd98d77ac9d6d8f761369121710a213642f6036b9a7183"}, + {file = "types_redis-4.6.0.20240819-py3-none-any.whl", hash = "sha256:86db9af6f0033154e12bc22c77236cef0907b995fda8c9f0f0eacd59943ed2fc"}, ] [package.dependencies] @@ -5186,13 +5240,13 @@ urllib3 = ">=2" [[package]] name = "types-setuptools" -version = "72.2.0.20240821" +version = "73.0.0.20240822" description = "Typing stubs for setuptools" optional = false python-versions = ">=3.8" files = [ - {file = "types-setuptools-72.2.0.20240821.tar.gz", hash = "sha256:e349b8015608879939f27ee370672f801287c46f5caa2d188d416336172c4965"}, - {file = "types_setuptools-72.2.0.20240821-py3-none-any.whl", hash = "sha256:260e89d6d3b42cc35f9f0f382d030713b7b547344a664c05c9175e6ba124fac7"}, + {file = "types-setuptools-73.0.0.20240822.tar.gz", hash = "sha256:3a060681098eb3fbc2fea0a86f7f6af6aa1ca71906039d88d891ea2cecdd4dbf"}, + {file = "types_setuptools-73.0.0.20240822-py3-none-any.whl", hash = "sha256:b9eba9b68546031317a0fa506d4973641d987d74f79e7dd8369ad4f7a93dea17"}, ] [[package]] @@ -5300,119 +5354,134 @@ files = [ [[package]] name = "xxhash" -version = "3.4.1" +version = "3.5.0" description = "Python binding for xxHash" optional = true python-versions = ">=3.7" files = [ - {file = "xxhash-3.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:91dbfa55346ad3e18e738742236554531a621042e419b70ad8f3c1d9c7a16e7f"}, - {file = "xxhash-3.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:665a65c2a48a72068fcc4d21721510df5f51f1142541c890491afc80451636d2"}, - {file = "xxhash-3.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb11628470a6004dc71a09fe90c2f459ff03d611376c1debeec2d648f44cb693"}, - {file = "xxhash-3.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5bef2a7dc7b4f4beb45a1edbba9b9194c60a43a89598a87f1a0226d183764189"}, - {file = "xxhash-3.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c0f7b2d547d72c7eda7aa817acf8791f0146b12b9eba1d4432c531fb0352228"}, - {file = "xxhash-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00f2fdef6b41c9db3d2fc0e7f94cb3db86693e5c45d6de09625caad9a469635b"}, - {file = "xxhash-3.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:23cfd9ca09acaf07a43e5a695143d9a21bf00f5b49b15c07d5388cadf1f9ce11"}, - {file = "xxhash-3.4.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6a9ff50a3cf88355ca4731682c168049af1ca222d1d2925ef7119c1a78e95b3b"}, - {file = "xxhash-3.4.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:f1d7c69a1e9ca5faa75546fdd267f214f63f52f12692f9b3a2f6467c9e67d5e7"}, - {file = "xxhash-3.4.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:672b273040d5d5a6864a36287f3514efcd1d4b1b6a7480f294c4b1d1ee1b8de0"}, - {file = "xxhash-3.4.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:4178f78d70e88f1c4a89ff1ffe9f43147185930bb962ee3979dba15f2b1cc799"}, - {file = "xxhash-3.4.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9804b9eb254d4b8cc83ab5a2002128f7d631dd427aa873c8727dba7f1f0d1c2b"}, - {file = "xxhash-3.4.1-cp310-cp310-win32.whl", hash = "sha256:c09c49473212d9c87261d22c74370457cfff5db2ddfc7fd1e35c80c31a8c14ce"}, - {file = "xxhash-3.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:ebbb1616435b4a194ce3466d7247df23499475c7ed4eb2681a1fa42ff766aff6"}, - {file = "xxhash-3.4.1-cp310-cp310-win_arm64.whl", hash = "sha256:25dc66be3db54f8a2d136f695b00cfe88018e59ccff0f3b8f545869f376a8a46"}, - {file = "xxhash-3.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:58c49083801885273e262c0f5bbeac23e520564b8357fbb18fb94ff09d3d3ea5"}, - {file = "xxhash-3.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b526015a973bfbe81e804a586b703f163861da36d186627e27524f5427b0d520"}, - {file = "xxhash-3.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36ad4457644c91a966f6fe137d7467636bdc51a6ce10a1d04f365c70d6a16d7e"}, - {file = "xxhash-3.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:248d3e83d119770f96003271fe41e049dd4ae52da2feb8f832b7a20e791d2920"}, - {file = "xxhash-3.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2070b6d5bbef5ee031666cf21d4953c16e92c2f8a24a94b5c240f8995ba3b1d0"}, - {file = "xxhash-3.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2746035f518f0410915e247877f7df43ef3372bf36cfa52cc4bc33e85242641"}, - {file = "xxhash-3.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a8ba6181514681c2591840d5632fcf7356ab287d4aff1c8dea20f3c78097088"}, - {file = "xxhash-3.4.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0aac5010869240e95f740de43cd6a05eae180c59edd182ad93bf12ee289484fa"}, - {file = "xxhash-3.4.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4cb11d8debab1626181633d184b2372aaa09825bde709bf927704ed72765bed1"}, - {file = "xxhash-3.4.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:b29728cff2c12f3d9f1d940528ee83918d803c0567866e062683f300d1d2eff3"}, - {file = "xxhash-3.4.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:a15cbf3a9c40672523bdb6ea97ff74b443406ba0ab9bca10ceccd9546414bd84"}, - {file = "xxhash-3.4.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6e66df260fed01ed8ea790c2913271641c58481e807790d9fca8bfd5a3c13844"}, - {file = "xxhash-3.4.1-cp311-cp311-win32.whl", hash = "sha256:e867f68a8f381ea12858e6d67378c05359d3a53a888913b5f7d35fbf68939d5f"}, - {file = "xxhash-3.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:200a5a3ad9c7c0c02ed1484a1d838b63edcf92ff538770ea07456a3732c577f4"}, - {file = "xxhash-3.4.1-cp311-cp311-win_arm64.whl", hash = "sha256:1d03f1c0d16d24ea032e99f61c552cb2b77d502e545187338bea461fde253583"}, - {file = "xxhash-3.4.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c4bbba9b182697a52bc0c9f8ec0ba1acb914b4937cd4a877ad78a3b3eeabefb3"}, - {file = "xxhash-3.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9fd28a9da300e64e434cfc96567a8387d9a96e824a9be1452a1e7248b7763b78"}, - {file = "xxhash-3.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6066d88c9329ab230e18998daec53d819daeee99d003955c8db6fc4971b45ca3"}, - {file = "xxhash-3.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:93805bc3233ad89abf51772f2ed3355097a5dc74e6080de19706fc447da99cd3"}, - {file = "xxhash-3.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:64da57d5ed586ebb2ecdde1e997fa37c27fe32fe61a656b77fabbc58e6fbff6e"}, - {file = "xxhash-3.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a97322e9a7440bf3c9805cbaac090358b43f650516486746f7fa482672593df"}, - {file = "xxhash-3.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bbe750d512982ee7d831838a5dee9e9848f3fb440e4734cca3f298228cc957a6"}, - {file = "xxhash-3.4.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:fd79d4087727daf4d5b8afe594b37d611ab95dc8e29fe1a7517320794837eb7d"}, - {file = "xxhash-3.4.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:743612da4071ff9aa4d055f3f111ae5247342931dedb955268954ef7201a71ff"}, - {file = "xxhash-3.4.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:b41edaf05734092f24f48c0958b3c6cbaaa5b7e024880692078c6b1f8247e2fc"}, - {file = "xxhash-3.4.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:a90356ead70d715fe64c30cd0969072de1860e56b78adf7c69d954b43e29d9fa"}, - {file = "xxhash-3.4.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ac56eebb364e44c85e1d9e9cc5f6031d78a34f0092fea7fc80478139369a8b4a"}, - {file = "xxhash-3.4.1-cp312-cp312-win32.whl", hash = "sha256:911035345932a153c427107397c1518f8ce456f93c618dd1c5b54ebb22e73747"}, - {file = "xxhash-3.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:f31ce76489f8601cc7b8713201ce94b4bd7b7ce90ba3353dccce7e9e1fee71fa"}, - {file = "xxhash-3.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:b5beb1c6a72fdc7584102f42c4d9df232ee018ddf806e8c90906547dfb43b2da"}, - {file = "xxhash-3.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6d42b24d1496deb05dee5a24ed510b16de1d6c866c626c2beb11aebf3be278b9"}, - {file = "xxhash-3.4.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b685fab18876b14a8f94813fa2ca80cfb5ab6a85d31d5539b7cd749ce9e3624"}, - {file = "xxhash-3.4.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:419ffe34c17ae2df019a4685e8d3934d46b2e0bbe46221ab40b7e04ed9f11137"}, - {file = "xxhash-3.4.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0e041ce5714f95251a88670c114b748bca3bf80cc72400e9f23e6d0d59cf2681"}, - {file = "xxhash-3.4.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc860d887c5cb2f524899fb8338e1bb3d5789f75fac179101920d9afddef284b"}, - {file = "xxhash-3.4.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:312eba88ffe0a05e332e3a6f9788b73883752be63f8588a6dc1261a3eaaaf2b2"}, - {file = "xxhash-3.4.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:e01226b6b6a1ffe4e6bd6d08cfcb3ca708b16f02eb06dd44f3c6e53285f03e4f"}, - {file = "xxhash-3.4.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:9f3025a0d5d8cf406a9313cd0d5789c77433ba2004b1c75439b67678e5136537"}, - {file = "xxhash-3.4.1-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:6d3472fd4afef2a567d5f14411d94060099901cd8ce9788b22b8c6f13c606a93"}, - {file = "xxhash-3.4.1-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:43984c0a92f06cac434ad181f329a1445017c33807b7ae4f033878d860a4b0f2"}, - {file = "xxhash-3.4.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:a55e0506fdb09640a82ec4f44171273eeabf6f371a4ec605633adb2837b5d9d5"}, - {file = "xxhash-3.4.1-cp37-cp37m-win32.whl", hash = "sha256:faec30437919555b039a8bdbaba49c013043e8f76c999670aef146d33e05b3a0"}, - {file = "xxhash-3.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:c9e1b646af61f1fc7083bb7b40536be944f1ac67ef5e360bca2d73430186971a"}, - {file = "xxhash-3.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:961d948b7b1c1b6c08484bbce3d489cdf153e4122c3dfb07c2039621243d8795"}, - {file = "xxhash-3.4.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:719a378930504ab159f7b8e20fa2aa1896cde050011af838af7e7e3518dd82de"}, - {file = "xxhash-3.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74fb5cb9406ccd7c4dd917f16630d2e5e8cbbb02fc2fca4e559b2a47a64f4940"}, - {file = "xxhash-3.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5dab508ac39e0ab988039bc7f962c6ad021acd81fd29145962b068df4148c476"}, - {file = "xxhash-3.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c59f3e46e7daf4c589e8e853d700ef6607afa037bfad32c390175da28127e8c"}, - {file = "xxhash-3.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cc07256eff0795e0f642df74ad096f8c5d23fe66bc138b83970b50fc7f7f6c5"}, - {file = "xxhash-3.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e9f749999ed80f3955a4af0eb18bb43993f04939350b07b8dd2f44edc98ffee9"}, - {file = "xxhash-3.4.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7688d7c02149a90a3d46d55b341ab7ad1b4a3f767be2357e211b4e893efbaaf6"}, - {file = "xxhash-3.4.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a8b4977963926f60b0d4f830941c864bed16aa151206c01ad5c531636da5708e"}, - {file = "xxhash-3.4.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:8106d88da330f6535a58a8195aa463ef5281a9aa23b04af1848ff715c4398fb4"}, - {file = "xxhash-3.4.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:4c76a77dbd169450b61c06fd2d5d436189fc8ab7c1571d39265d4822da16df22"}, - {file = "xxhash-3.4.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:11f11357c86d83e53719c592021fd524efa9cf024dc7cb1dfb57bbbd0d8713f2"}, - {file = "xxhash-3.4.1-cp38-cp38-win32.whl", hash = "sha256:0c786a6cd74e8765c6809892a0d45886e7c3dc54de4985b4a5eb8b630f3b8e3b"}, - {file = "xxhash-3.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:aabf37fb8fa27430d50507deeab2ee7b1bcce89910dd10657c38e71fee835594"}, - {file = "xxhash-3.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6127813abc1477f3a83529b6bbcfeddc23162cece76fa69aee8f6a8a97720562"}, - {file = "xxhash-3.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ef2e194262f5db16075caea7b3f7f49392242c688412f386d3c7b07c7733a70a"}, - {file = "xxhash-3.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71be94265b6c6590f0018bbf73759d21a41c6bda20409782d8117e76cd0dfa8b"}, - {file = "xxhash-3.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:10e0a619cdd1c0980e25eb04e30fe96cf8f4324758fa497080af9c21a6de573f"}, - {file = "xxhash-3.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fa122124d2e3bd36581dd78c0efa5f429f5220313479fb1072858188bc2d5ff1"}, - {file = "xxhash-3.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17032f5a4fea0a074717fe33477cb5ee723a5f428de7563e75af64bfc1b1e10"}, - {file = "xxhash-3.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca7783b20e3e4f3f52f093538895863f21d18598f9a48211ad757680c3bd006f"}, - {file = "xxhash-3.4.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d77d09a1113899fad5f354a1eb4f0a9afcf58cefff51082c8ad643ff890e30cf"}, - {file = "xxhash-3.4.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:21287bcdd299fdc3328cc0fbbdeaa46838a1c05391264e51ddb38a3f5b09611f"}, - {file = "xxhash-3.4.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:dfd7a6cc483e20b4ad90224aeb589e64ec0f31e5610ab9957ff4314270b2bf31"}, - {file = "xxhash-3.4.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:543c7fcbc02bbb4840ea9915134e14dc3dc15cbd5a30873a7a5bf66039db97ec"}, - {file = "xxhash-3.4.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:fe0a98d990e433013f41827b62be9ab43e3cf18e08b1483fcc343bda0d691182"}, - {file = "xxhash-3.4.1-cp39-cp39-win32.whl", hash = "sha256:b9097af00ebf429cc7c0e7d2fdf28384e4e2e91008130ccda8d5ae653db71e54"}, - {file = "xxhash-3.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:d699b921af0dcde50ab18be76c0d832f803034d80470703700cb7df0fbec2832"}, - {file = "xxhash-3.4.1-cp39-cp39-win_arm64.whl", hash = "sha256:2be491723405e15cc099ade1280133ccfbf6322d2ef568494fb7d07d280e7eee"}, - {file = "xxhash-3.4.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:431625fad7ab5649368c4849d2b49a83dc711b1f20e1f7f04955aab86cd307bc"}, - {file = "xxhash-3.4.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc6dbd5fc3c9886a9e041848508b7fb65fd82f94cc793253990f81617b61fe49"}, - {file = "xxhash-3.4.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3ff8dbd0ec97aec842476cb8ccc3e17dd288cd6ce3c8ef38bff83d6eb927817"}, - {file = "xxhash-3.4.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef73a53fe90558a4096e3256752268a8bdc0322f4692ed928b6cd7ce06ad4fe3"}, - {file = "xxhash-3.4.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:450401f42bbd274b519d3d8dcf3c57166913381a3d2664d6609004685039f9d3"}, - {file = "xxhash-3.4.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a162840cf4de8a7cd8720ff3b4417fbc10001eefdd2d21541a8226bb5556e3bb"}, - {file = "xxhash-3.4.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b736a2a2728ba45017cb67785e03125a79d246462dfa892d023b827007412c52"}, - {file = "xxhash-3.4.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d0ae4c2e7698adef58710d6e7a32ff518b66b98854b1c68e70eee504ad061d8"}, - {file = "xxhash-3.4.1-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6322c4291c3ff174dcd104fae41500e75dad12be6f3085d119c2c8a80956c51"}, - {file = "xxhash-3.4.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:dd59ed668801c3fae282f8f4edadf6dc7784db6d18139b584b6d9677ddde1b6b"}, - {file = "xxhash-3.4.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:92693c487e39523a80474b0394645b393f0ae781d8db3474ccdcead0559ccf45"}, - {file = "xxhash-3.4.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4603a0f642a1e8d7f3ba5c4c25509aca6a9c1cc16f85091004a7028607ead663"}, - {file = "xxhash-3.4.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fa45e8cbfbadb40a920fe9ca40c34b393e0b067082d94006f7f64e70c7490a6"}, - {file = "xxhash-3.4.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:595b252943b3552de491ff51e5bb79660f84f033977f88f6ca1605846637b7c6"}, - {file = "xxhash-3.4.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:562d8b8f783c6af969806aaacf95b6c7b776929ae26c0cd941d54644ea7ef51e"}, - {file = "xxhash-3.4.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:41ddeae47cf2828335d8d991f2d2b03b0bdc89289dc64349d712ff8ce59d0647"}, - {file = "xxhash-3.4.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c44d584afdf3c4dbb3277e32321d1a7b01d6071c1992524b6543025fb8f4206f"}, - {file = "xxhash-3.4.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd7bddb3a5b86213cc3f2c61500c16945a1b80ecd572f3078ddbbe68f9dabdfb"}, - {file = "xxhash-3.4.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9ecb6c987b62437c2f99c01e97caf8d25660bf541fe79a481d05732e5236719c"}, - {file = "xxhash-3.4.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:696b4e18b7023527d5c50ed0626ac0520edac45a50ec7cf3fc265cd08b1f4c03"}, - {file = "xxhash-3.4.1.tar.gz", hash = "sha256:0379d6cf1ff987cd421609a264ce025e74f346e3e145dd106c0cc2e3ec3f99a9"}, + {file = "xxhash-3.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ece616532c499ee9afbb83078b1b952beffef121d989841f7f4b3dc5ac0fd212"}, + {file = "xxhash-3.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3171f693dbc2cef6477054a665dc255d996646b4023fe56cb4db80e26f4cc520"}, + {file = "xxhash-3.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7c5d3e570ef46adaf93fc81b44aca6002b5a4d8ca11bd0580c07eac537f36680"}, + {file = "xxhash-3.5.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7cb29a034301e2982df8b1fe6328a84f4b676106a13e9135a0d7e0c3e9f806da"}, + {file = "xxhash-3.5.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d0d307d27099bb0cbeea7260eb39ed4fdb99c5542e21e94bb6fd29e49c57a23"}, + {file = "xxhash-3.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0342aafd421795d740e514bc9858ebddfc705a75a8c5046ac56d85fe97bf196"}, + {file = "xxhash-3.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3dbbd9892c5ebffeca1ed620cf0ade13eb55a0d8c84e0751a6653adc6ac40d0c"}, + {file = "xxhash-3.5.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4cc2d67fdb4d057730c75a64c5923abfa17775ae234a71b0200346bfb0a7f482"}, + {file = "xxhash-3.5.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:ec28adb204b759306a3d64358a5e5c07d7b1dd0ccbce04aa76cb9377b7b70296"}, + {file = "xxhash-3.5.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:1328f6d8cca2b86acb14104e381225a3d7b42c92c4b86ceae814e5c400dbb415"}, + {file = "xxhash-3.5.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8d47ebd9f5d9607fd039c1fbf4994e3b071ea23eff42f4ecef246ab2b7334198"}, + {file = "xxhash-3.5.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b96d559e0fcddd3343c510a0fe2b127fbff16bf346dd76280b82292567523442"}, + {file = "xxhash-3.5.0-cp310-cp310-win32.whl", hash = "sha256:61c722ed8d49ac9bc26c7071eeaa1f6ff24053d553146d5df031802deffd03da"}, + {file = "xxhash-3.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:9bed5144c6923cc902cd14bb8963f2d5e034def4486ab0bbe1f58f03f042f9a9"}, + {file = "xxhash-3.5.0-cp310-cp310-win_arm64.whl", hash = "sha256:893074d651cf25c1cc14e3bea4fceefd67f2921b1bb8e40fcfeba56820de80c6"}, + {file = "xxhash-3.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:02c2e816896dc6f85922ced60097bcf6f008dedfc5073dcba32f9c8dd786f3c1"}, + {file = "xxhash-3.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6027dcd885e21581e46d3c7f682cfb2b870942feeed58a21c29583512c3f09f8"}, + {file = "xxhash-3.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1308fa542bbdbf2fa85e9e66b1077eea3a88bef38ee8a06270b4298a7a62a166"}, + {file = "xxhash-3.5.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c28b2fdcee797e1c1961cd3bcd3d545cab22ad202c846235197935e1df2f8ef7"}, + {file = "xxhash-3.5.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:924361811732ddad75ff23e90efd9ccfda4f664132feecb90895bade6a1b4623"}, + {file = "xxhash-3.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89997aa1c4b6a5b1e5b588979d1da048a3c6f15e55c11d117a56b75c84531f5a"}, + {file = "xxhash-3.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:685c4f4e8c59837de103344eb1c8a3851f670309eb5c361f746805c5471b8c88"}, + {file = "xxhash-3.5.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:dbd2ecfbfee70bc1a4acb7461fa6af7748ec2ab08ac0fa298f281c51518f982c"}, + {file = "xxhash-3.5.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:25b5a51dc3dfb20a10833c8eee25903fd2e14059e9afcd329c9da20609a307b2"}, + {file = "xxhash-3.5.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:a8fb786fb754ef6ff8c120cb96629fb518f8eb5a61a16aac3a979a9dbd40a084"}, + {file = "xxhash-3.5.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:a905ad00ad1e1c34fe4e9d7c1d949ab09c6fa90c919860c1534ff479f40fd12d"}, + {file = "xxhash-3.5.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:963be41bcd49f53af6d795f65c0da9b4cc518c0dd9c47145c98f61cb464f4839"}, + {file = "xxhash-3.5.0-cp311-cp311-win32.whl", hash = "sha256:109b436096d0a2dd039c355fa3414160ec4d843dfecc64a14077332a00aeb7da"}, + {file = "xxhash-3.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:b702f806693201ad6c0a05ddbbe4c8f359626d0b3305f766077d51388a6bac58"}, + {file = "xxhash-3.5.0-cp311-cp311-win_arm64.whl", hash = "sha256:c4dcb4120d0cc3cc448624147dba64e9021b278c63e34a38789b688fd0da9bf3"}, + {file = "xxhash-3.5.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:14470ace8bd3b5d51318782cd94e6f94431974f16cb3b8dc15d52f3b69df8e00"}, + {file = "xxhash-3.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:59aa1203de1cb96dbeab595ded0ad0c0056bb2245ae11fac11c0ceea861382b9"}, + {file = "xxhash-3.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08424f6648526076e28fae6ea2806c0a7d504b9ef05ae61d196d571e5c879c84"}, + {file = "xxhash-3.5.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:61a1ff00674879725b194695e17f23d3248998b843eb5e933007ca743310f793"}, + {file = "xxhash-3.5.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2f2c61bee5844d41c3eb015ac652a0229e901074951ae48581d58bfb2ba01be"}, + {file = "xxhash-3.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d32a592cac88d18cc09a89172e1c32d7f2a6e516c3dfde1b9adb90ab5df54a6"}, + {file = "xxhash-3.5.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:70dabf941dede727cca579e8c205e61121afc9b28516752fd65724be1355cc90"}, + {file = "xxhash-3.5.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e5d0ddaca65ecca9c10dcf01730165fd858533d0be84c75c327487c37a906a27"}, + {file = "xxhash-3.5.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3e5b5e16c5a480fe5f59f56c30abdeba09ffd75da8d13f6b9b6fd224d0b4d0a2"}, + {file = "xxhash-3.5.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:149b7914451eb154b3dfaa721315117ea1dac2cc55a01bfbd4df7c68c5dd683d"}, + {file = "xxhash-3.5.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:eade977f5c96c677035ff39c56ac74d851b1cca7d607ab3d8f23c6b859379cab"}, + {file = "xxhash-3.5.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fa9f547bd98f5553d03160967866a71056a60960be00356a15ecc44efb40ba8e"}, + {file = "xxhash-3.5.0-cp312-cp312-win32.whl", hash = "sha256:f7b58d1fd3551b8c80a971199543379be1cee3d0d409e1f6d8b01c1a2eebf1f8"}, + {file = "xxhash-3.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:fa0cafd3a2af231b4e113fba24a65d7922af91aeb23774a8b78228e6cd785e3e"}, + {file = "xxhash-3.5.0-cp312-cp312-win_arm64.whl", hash = "sha256:586886c7e89cb9828bcd8a5686b12e161368e0064d040e225e72607b43858ba2"}, + {file = "xxhash-3.5.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:37889a0d13b0b7d739cfc128b1c902f04e32de17b33d74b637ad42f1c55101f6"}, + {file = "xxhash-3.5.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:97a662338797c660178e682f3bc180277b9569a59abfb5925e8620fba00b9fc5"}, + {file = "xxhash-3.5.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f85e0108d51092bdda90672476c7d909c04ada6923c14ff9d913c4f7dc8a3bc"}, + {file = "xxhash-3.5.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cd2fd827b0ba763ac919440042302315c564fdb797294d86e8cdd4578e3bc7f3"}, + {file = "xxhash-3.5.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:82085c2abec437abebf457c1d12fccb30cc8b3774a0814872511f0f0562c768c"}, + {file = "xxhash-3.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07fda5de378626e502b42b311b049848c2ef38784d0d67b6f30bb5008642f8eb"}, + {file = "xxhash-3.5.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c279f0d2b34ef15f922b77966640ade58b4ccdfef1c4d94b20f2a364617a493f"}, + {file = "xxhash-3.5.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:89e66ceed67b213dec5a773e2f7a9e8c58f64daeb38c7859d8815d2c89f39ad7"}, + {file = "xxhash-3.5.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:bcd51708a633410737111e998ceb3b45d3dbc98c0931f743d9bb0a209033a326"}, + {file = "xxhash-3.5.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3ff2c0a34eae7df88c868be53a8dd56fbdf592109e21d4bfa092a27b0bf4a7bf"}, + {file = "xxhash-3.5.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:4e28503dccc7d32e0b9817aa0cbfc1f45f563b2c995b7a66c4c8a0d232e840c7"}, + {file = "xxhash-3.5.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a6c50017518329ed65a9e4829154626f008916d36295b6a3ba336e2458824c8c"}, + {file = "xxhash-3.5.0-cp313-cp313-win32.whl", hash = "sha256:53a068fe70301ec30d868ece566ac90d873e3bb059cf83c32e76012c889b8637"}, + {file = "xxhash-3.5.0-cp313-cp313-win_amd64.whl", hash = "sha256:80babcc30e7a1a484eab952d76a4f4673ff601f54d5142c26826502740e70b43"}, + {file = "xxhash-3.5.0-cp313-cp313-win_arm64.whl", hash = "sha256:4811336f1ce11cac89dcbd18f3a25c527c16311709a89313c3acaf771def2d4b"}, + {file = "xxhash-3.5.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6e5f70f6dca1d3b09bccb7daf4e087075ff776e3da9ac870f86ca316736bb4aa"}, + {file = "xxhash-3.5.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e76e83efc7b443052dd1e585a76201e40b3411fe3da7af4fe434ec51b2f163b"}, + {file = "xxhash-3.5.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:33eac61d0796ca0591f94548dcfe37bb193671e0c9bcf065789b5792f2eda644"}, + {file = "xxhash-3.5.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ec70a89be933ea49222fafc3999987d7899fc676f688dd12252509434636622"}, + {file = "xxhash-3.5.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86b8e7f703ec6ff4f351cfdb9f428955859537125904aa8c963604f2e9d3e7"}, + {file = "xxhash-3.5.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0adfbd36003d9f86c8c97110039f7539b379f28656a04097e7434d3eaf9aa131"}, + {file = "xxhash-3.5.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:63107013578c8a730419adc05608756c3fa640bdc6abe806c3123a49fb829f43"}, + {file = "xxhash-3.5.0-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:683b94dbd1ca67557850b86423318a2e323511648f9f3f7b1840408a02b9a48c"}, + {file = "xxhash-3.5.0-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:5d2a01dcce81789cf4b12d478b5464632204f4c834dc2d064902ee27d2d1f0ee"}, + {file = "xxhash-3.5.0-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:a9d360a792cbcce2fe7b66b8d51274ec297c53cbc423401480e53b26161a290d"}, + {file = "xxhash-3.5.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:f0b48edbebea1b7421a9c687c304f7b44d0677c46498a046079d445454504737"}, + {file = "xxhash-3.5.0-cp37-cp37m-win32.whl", hash = "sha256:7ccb800c9418e438b44b060a32adeb8393764da7441eb52aa2aa195448935306"}, + {file = "xxhash-3.5.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c3bc7bf8cb8806f8d1c9bf149c18708cb1c406520097d6b0a73977460ea03602"}, + {file = "xxhash-3.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:74752ecaa544657d88b1d1c94ae68031e364a4d47005a90288f3bab3da3c970f"}, + {file = "xxhash-3.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:dee1316133c9b463aa81aca676bc506d3f80d8f65aeb0bba2b78d0b30c51d7bd"}, + {file = "xxhash-3.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:602d339548d35a8579c6b013339fb34aee2df9b4e105f985443d2860e4d7ffaa"}, + {file = "xxhash-3.5.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:695735deeddfb35da1677dbc16a083445360e37ff46d8ac5c6fcd64917ff9ade"}, + {file = "xxhash-3.5.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1030a39ba01b0c519b1a82f80e8802630d16ab95dc3f2b2386a0b5c8ed5cbb10"}, + {file = "xxhash-3.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5bc08f33c4966f4eb6590d6ff3ceae76151ad744576b5fc6c4ba8edd459fdec"}, + {file = "xxhash-3.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:160e0c19ee500482ddfb5d5570a0415f565d8ae2b3fd69c5dcfce8a58107b1c3"}, + {file = "xxhash-3.5.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:f1abffa122452481a61c3551ab3c89d72238e279e517705b8b03847b1d93d738"}, + {file = "xxhash-3.5.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:d5e9db7ef3ecbfc0b4733579cea45713a76852b002cf605420b12ef3ef1ec148"}, + {file = "xxhash-3.5.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:23241ff6423378a731d84864bf923a41649dc67b144debd1077f02e6249a0d54"}, + {file = "xxhash-3.5.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:82b833d5563fefd6fceafb1aed2f3f3ebe19f84760fdd289f8b926731c2e6e91"}, + {file = "xxhash-3.5.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0a80ad0ffd78bef9509eee27b4a29e56f5414b87fb01a888353e3d5bda7038bd"}, + {file = "xxhash-3.5.0-cp38-cp38-win32.whl", hash = "sha256:50ac2184ffb1b999e11e27c7e3e70cc1139047e7ebc1aa95ed12f4269abe98d4"}, + {file = "xxhash-3.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:392f52ebbb932db566973693de48f15ce787cabd15cf6334e855ed22ea0be5b3"}, + {file = "xxhash-3.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bfc8cdd7f33d57f0468b0614ae634cc38ab9202c6957a60e31d285a71ebe0301"}, + {file = "xxhash-3.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e0c48b6300cd0b0106bf49169c3e0536408dfbeb1ccb53180068a18b03c662ab"}, + {file = "xxhash-3.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe1a92cfbaa0a1253e339ccec42dbe6db262615e52df591b68726ab10338003f"}, + {file = "xxhash-3.5.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:33513d6cc3ed3b559134fb307aae9bdd94d7e7c02907b37896a6c45ff9ce51bd"}, + {file = "xxhash-3.5.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eefc37f6138f522e771ac6db71a6d4838ec7933939676f3753eafd7d3f4c40bc"}, + {file = "xxhash-3.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a606c8070ada8aa2a88e181773fa1ef17ba65ce5dd168b9d08038e2a61b33754"}, + {file = "xxhash-3.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:42eca420c8fa072cc1dd62597635d140e78e384a79bb4944f825fbef8bfeeef6"}, + {file = "xxhash-3.5.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:604253b2143e13218ff1ef0b59ce67f18b8bd1c4205d2ffda22b09b426386898"}, + {file = "xxhash-3.5.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:6e93a5ad22f434d7876665444a97e713a8f60b5b1a3521e8df11b98309bff833"}, + {file = "xxhash-3.5.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:7a46e1d6d2817ba8024de44c4fd79913a90e5f7265434cef97026215b7d30df6"}, + {file = "xxhash-3.5.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:30eb2efe6503c379b7ab99c81ba4a779748e3830241f032ab46bd182bf5873af"}, + {file = "xxhash-3.5.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c8aa771ff2c13dd9cda8166d685d7333d389fae30a4d2bb39d63ab5775de8606"}, + {file = "xxhash-3.5.0-cp39-cp39-win32.whl", hash = "sha256:5ed9ebc46f24cf91034544b26b131241b699edbfc99ec5e7f8f3d02d6eb7fba4"}, + {file = "xxhash-3.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:220f3f896c6b8d0316f63f16c077d52c412619e475f9372333474ee15133a558"}, + {file = "xxhash-3.5.0-cp39-cp39-win_arm64.whl", hash = "sha256:a7b1d8315d9b5e9f89eb2933b73afae6ec9597a258d52190944437158b49d38e"}, + {file = "xxhash-3.5.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:2014c5b3ff15e64feecb6b713af12093f75b7926049e26a580e94dcad3c73d8c"}, + {file = "xxhash-3.5.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fab81ef75003eda96239a23eda4e4543cedc22e34c373edcaf744e721a163986"}, + {file = "xxhash-3.5.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e2febf914ace002132aa09169cc572e0d8959d0f305f93d5828c4836f9bc5a6"}, + {file = "xxhash-3.5.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5d3a10609c51da2a1c0ea0293fc3968ca0a18bd73838455b5bca3069d7f8e32b"}, + {file = "xxhash-3.5.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:5a74f23335b9689b66eb6dbe2a931a88fcd7a4c2cc4b1cb0edba8ce381c7a1da"}, + {file = "xxhash-3.5.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2b4154c00eb22e4d543f472cfca430e7962a0f1d0f3778334f2e08a7ba59363c"}, + {file = "xxhash-3.5.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d30bbc1644f726b825b3278764240f449d75f1a8bdda892e641d4a688b1494ae"}, + {file = "xxhash-3.5.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fa0b72f2423e2aa53077e54a61c28e181d23effeaafd73fcb9c494e60930c8e"}, + {file = "xxhash-3.5.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:13de2b76c1835399b2e419a296d5b38dc4855385d9e96916299170085ef72f57"}, + {file = "xxhash-3.5.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:0691bfcc4f9c656bcb96cc5db94b4d75980b9d5589f2e59de790091028580837"}, + {file = "xxhash-3.5.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:297595fe6138d4da2c8ce9e72a04d73e58725bb60f3a19048bc96ab2ff31c692"}, + {file = "xxhash-3.5.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc1276d369452040cbb943300dc8abeedab14245ea44056a2943183822513a18"}, + {file = "xxhash-3.5.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2061188a1ba352fc699c82bff722f4baacb4b4b8b2f0c745d2001e56d0dfb514"}, + {file = "xxhash-3.5.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38c384c434021e4f62b8d9ba0bc9467e14d394893077e2c66d826243025e1f81"}, + {file = "xxhash-3.5.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:e6a4dd644d72ab316b580a1c120b375890e4c52ec392d4aef3c63361ec4d77d1"}, + {file = "xxhash-3.5.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:531af8845aaadcadf951b7e0c1345c6b9c68a990eeb74ff9acd8501a0ad6a1c9"}, + {file = "xxhash-3.5.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ce379bcaa9fcc00f19affa7773084dd09f5b59947b3fb47a1ceb0179f91aaa1"}, + {file = "xxhash-3.5.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd1b2281d01723f076df3c8188f43f2472248a6b63118b036e641243656b1b0f"}, + {file = "xxhash-3.5.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9c770750cc80e8694492244bca7251385188bc5597b6a39d98a9f30e8da984e0"}, + {file = "xxhash-3.5.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:b150b8467852e1bd844387459aa6fbe11d7f38b56e901f9f3b3e6aba0d660240"}, + {file = "xxhash-3.5.0.tar.gz", hash = "sha256:84f2caddf951c9cbf8dc2e22a89d4ccf5d86391ac6418fe81e3c67d0cf60b45f"}, ] [[package]] @@ -5520,13 +5589,13 @@ multidict = ">=4.0" [[package]] name = "zipp" -version = "3.19.2" +version = "3.20.0" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.8" files = [ - {file = "zipp-3.19.2-py3-none-any.whl", hash = "sha256:f091755f667055f2d02b32c53771a7a6c8b47e1fdbc4b72a8b9072b3eef8015c"}, - {file = "zipp-3.19.2.tar.gz", hash = "sha256:bf1dcf6450f873a13e952a29504887c89e6de7506209e5b1bcc3460135d4de19"}, + {file = "zipp-3.20.0-py3-none-any.whl", hash = "sha256:58da6168be89f0be59beb194da1250516fdaa062ccebd30127ac65d30045e10d"}, + {file = "zipp-3.20.0.tar.gz", hash = "sha256:0145e43d89664cfe1a2e533adc75adafed82fe2da404b4bbb6b026c0157bdb31"}, ] [package.extras] diff --git a/sotopia/generation_utils/generate.py b/sotopia/generation_utils/generate.py index 42e42ad43..b5fd6d825 100644 --- a/sotopia/generation_utils/generate.py +++ b/sotopia/generation_utils/generate.py @@ -1,11 +1,13 @@ import logging import os import re -from typing import TypeVar, Any +from typing import TypeVar, Any, cast import gin from beartype import beartype from beartype.typing import Type +from openai import OpenAI + from langchain_core.runnables.base import RunnableSerializable from langchain_core.messages.base import BaseMessage from langchain.output_parsers import PydanticOutputParser @@ -14,6 +16,7 @@ HumanMessagePromptTemplate, PromptTemplate, ) +from langchain_core.prompt_values import ChatPromptValue from langchain.schema import BaseOutputParser, OutputParserException from langchain_openai import ChatOpenAI, AzureChatOpenAI from pydantic import BaseModel, Field @@ -50,6 +53,7 @@ ] OutputType = TypeVar("OutputType", bound=object) +client = OpenAI() class EnvResponse(BaseModel): @@ -300,16 +304,16 @@ def obtain_chain( """ Using langchain to sample profiles for participants """ + human_message_prompt = HumanMessagePromptTemplate( + prompt=PromptTemplate( + template=template, + input_variables=input_variables, + ) + ) + chat_prompt_template = ChatPromptTemplate.from_messages([human_message_prompt]) model_name = _return_fixed_model_version(model_name) if model_name.startswith("together_ai"): model_name = "/".join(model_name.split("/")[1:]) - human_message_prompt = HumanMessagePromptTemplate( - prompt=PromptTemplate( - template=template, - input_variables=input_variables, - ) - ) - chat_prompt_template = ChatPromptTemplate.from_messages([human_message_prompt]) chat_openai = ChatOpenAI( model_name=model_name, temperature=temperature, @@ -321,13 +325,6 @@ def obtain_chain( return chain elif model_name.startswith("groq"): model_name = "/".join(model_name.split("/")[1:]) - human_message_prompt = HumanMessagePromptTemplate( - prompt=PromptTemplate( - template=template, - input_variables=input_variables, - ) - ) - chat_prompt_template = ChatPromptTemplate.from_messages([human_message_prompt]) chat_openai = ChatOpenAI( model_name=model_name, temperature=temperature, @@ -345,13 +342,6 @@ def obtain_chain( azure_credentials[1], azure_credentials[2], ) - human_message_prompt = HumanMessagePromptTemplate( - prompt=PromptTemplate( - template=template, - input_variables=input_variables, - ) - ) - chat_prompt_template = ChatPromptTemplate.from_messages([human_message_prompt]) chat_azure_openai = AzureChatOpenAI( azure_deployment=deployment_name, openai_api_version=azure_version, @@ -388,10 +378,6 @@ def obtain_chain( temperature=temperature, max_retries=max_retries, ) - human_message_prompt = HumanMessagePromptTemplate( - prompt=PromptTemplate(template=template, input_variables=input_variables) - ) - chat_prompt_template = ChatPromptTemplate.from_messages([human_message_prompt]) chain = chat_prompt_template | chat return chain @@ -467,6 +453,7 @@ async def agenerate( input_values: dict[str, str], output_parser: BaseOutputParser[OutputType], temperature: float = 0.7, + structured_output: bool = False, ) -> OutputType: input_variables = re.findall( r"(? None: @@ -60,3 +63,18 @@ async def test_logging_behavior(caplog: Any) -> None: # Optionally, you can print the captured log records for verification for record in caplog.records: print(f"Captured log: {record.levelname} - {record.message}") + + +@pytest.mark.asyncio +async def test_agenerate_structured_output() -> None: + """ + async version of test_generate_structured_output + """ + output = await agenerate( + "gpt-4o-2024-08-06", + "{format_instructions}", + {}, + PydanticOutputParser(pydantic_object=AgentAction), + structured_output=True, + ) + assert isinstance(output, AgentAction) From 850d4417a5ff7e50181bd192157fc051b6d3b850 Mon Sep 17 00:00:00 2001 From: Zhe Su <360307598@qq.com> Date: Mon, 26 Aug 2024 16:10:13 -0400 Subject: [PATCH 26/43] Improvements on benchmark display and usage (#135) * add stdev for stats, and also provide a benchmark script * fix mypy issue * add 95% CI * use numpy instead of scipy in CI * clean up code & add doc for benchmark * [autofix.ci] apply automated fixes * code cleanup * minor bug fix and code cleanup * refactor benchmark code * add more models * fix mypy * remove binary option * remove extra binary * change the stop criteria to be more accurate * add test cases for benchmark, also fix small t value bug * [autofix.ci] apply automated fixes * fix issue of episode not found * fix mypy error * [autofix.ci] apply automated fixes * add test cases for benchmark, and minor code changes * remove unnecessary print code * add coverage by actually running one time and adding more mock data * fix autofix error * fix patching issues * add unit tests for more arguments * fix test_get_agent_by_name issue * make the test stricter --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> Co-authored-by: XuhuiZhou --- docs/pages/examples/benchmark.md | 7 +- examples/benchmark_evaluator.py | 12 +- examples/generate_scenarios.py | 2 +- scripts/display_benchmark_results.sh | 6 + sotopia/cli/benchmark/benchmark.py | 614 ++++++++++++++++----------- sotopia/envs/evaluators.py | 2 +- sotopia/generation_utils/generate.py | 5 +- tests/cli/test_benchmark.py | 343 +++++++++++++++ 8 files changed, 737 insertions(+), 254 deletions(-) create mode 100755 scripts/display_benchmark_results.sh create mode 100644 tests/cli/test_benchmark.py diff --git a/docs/pages/examples/benchmark.md b/docs/pages/examples/benchmark.md index 368432e18..abef25860 100644 --- a/docs/pages/examples/benchmark.md +++ b/docs/pages/examples/benchmark.md @@ -1,11 +1,14 @@ # Benchmark your model as a social agent in Sotopia ``` -sotopia_benchmark --model= +sotopia benchmark --models --models [--only-show-performance] ``` or ``` -python sotopia/benchmark/cli.py --model= +python sotopia/cli/benchmark/benchmark.py --models --models [--only-show-performance] ``` +When `only-show-performance` is speficied, only model results with available episodes will be displayed. If this option is not used, the benchmark will be run. Currently this script would run over 100 simulations on the Sotopia Hard tasks. And the partner model is fixed to be `meta-llama/Llama-3-70b-chat-hf` + +An example script is provided in `scripts/display_benchmark_results.sh` diff --git a/examples/benchmark_evaluator.py b/examples/benchmark_evaluator.py index b35ce2247..83fe32804 100644 --- a/examples/benchmark_evaluator.py +++ b/examples/benchmark_evaluator.py @@ -58,7 +58,9 @@ def get_dimension_correlation( int(not isinstance(relevant_episode.rewards[0], float)) for relevant_episode in machine_annotations ] - assert sum(episodes_with_valid_rewards) == len(human_annotations), "Data is missing" + assert ( + sum(episodes_with_valid_rewards) == len(human_annotations) + ), f"Data is missing, episodes with valid rewards: {sum(episodes_with_valid_rewards)}, human annotations: {len(human_annotations)}" overall = dimension == "overall" dimension_scores_agent1_human = get_dimension_scores( 0, human_annotations, dimension, overall @@ -116,6 +118,9 @@ def evaluate_evaluator( EpisodeLog.tag == tag ).all() # type: ignore if len(re_evaluated_episodes) < len(to_re_evaluate_list): + print( + f"Existing data: {len(re_evaluated_episodes)}, expected: {len(to_re_evaluate_list)}, running evaluation" + ) run_async_server_in_batch_aevaluate( tag=tag, model=model, # type: ignore @@ -143,6 +148,8 @@ def evaluate_evaluator( verbose=verbose, reeval_list=to_re_evaluate_list, ) + for pk in to_re_evaluate_list: + EpisodeLog.delete(pk) to_re_evaluate_list = [] re_evaluated_episodes = EpisodeLog.find(EpisodeLog.tag == tag).all() # type: ignore valid_episodes = [ @@ -151,9 +158,8 @@ def evaluate_evaluator( ] for valid, episode in zip(valid_episodes, re_evaluated_episodes): if not valid: - pk = episode.pk + pk = episode.pk # type: ignore assert isinstance(pk, str) - EpisodeLog.delete(pk) to_re_evaluate_list.append(pk) correlation_list = [] diff --git a/examples/generate_scenarios.py b/examples/generate_scenarios.py index 88a83ce7e..f24ab631c 100644 --- a/examples/generate_scenarios.py +++ b/examples/generate_scenarios.py @@ -53,7 +53,7 @@ def check_existing_envs( def generate_newenv_profile( num: int, - gen_model: LLM_Name = "gpt-4-turbo", + gen_model: LLM_Name = "gpt-4-turbo-2024-04-09", temperature: float = 0.5, type: str = "craigslist_bargains", ) -> pd.DataFrame: diff --git a/scripts/display_benchmark_results.sh b/scripts/display_benchmark_results.sh new file mode 100755 index 000000000..7933e2d54 --- /dev/null +++ b/scripts/display_benchmark_results.sh @@ -0,0 +1,6 @@ +sotopia benchmark --only-show-performance \ +--models gpt-4o \ +--models together_ai/mistralai/Mixtral-8x22B-Instruct-v0.1 \ +--models gpt-3.5-turbo \ +--models together_ai/meta-llama/Llama-3-70b-chat-hf \ +--models together_ai/meta-llama/Llama-3-8b-chat-hf diff --git a/sotopia/cli/benchmark/benchmark.py b/sotopia/cli/benchmark/benchmark.py index 2e7634067..87da66e4e 100644 --- a/sotopia/cli/benchmark/benchmark.py +++ b/sotopia/cli/benchmark/benchmark.py @@ -5,7 +5,11 @@ import asyncio import logging import json -from typing import cast, List, Dict, OrderedDict +import math +import numpy as np +from itertools import chain +from collections import defaultdict +from typing import cast, OrderedDict from logging import FileHandler from rich.logging import RichHandler @@ -38,6 +42,183 @@ import typer from pathlib import Path from ..app import app +import os + +# date and message only +FORMAT = "%(asctime)s - %(levelname)s - %(name)s - %(message)s" + +logging.basicConfig( + level=20, + format=FORMAT, + datefmt="[%X]", + handlers=[ + RichHandler(), + ], +) + +default_model_list: list[str] = [ + "gpt-4o", +] +dimension_range_mapping = OrderedDict( + { + "social_rules": ["SOC", [-10, 0]], + "secret": ["SEC", [-10, 0]], + "financial_and_material_benefits": ["FIN", [-5, 5]], + "relationship": ["REL", [-5, 5]], + "knowledge": ["KNO", [0, 10]], + "goal": ["GOAL", [0, 10]], + "believability": ["BEL", [0, 10]], + } +) + + +def get_avg_reward( + episodes: list[EpisodeLog], model_name: str +) -> dict[str, tuple[float, float]]: + """ + input: list of EpisodeLog, model_name + + return: dictionary of {dimension: (avg_reward, margin_of_error (in 95% confidence interval))}, plus the distinct setting number and episode count (in the same format, but with 0 margin of error) + """ + rewards_dict = defaultdict( + list + ) # {pk: [rewards]}, {pk}_{i} denotes the i-th agent is the test agent + avg_reward_dict = {} + avg_margin_dict = {} + avg_variance_dict = {} + for episode in episodes: + assert episode.models is not None, "episode.models should not be None" + if episode.models[1] == model_name: + reward = get_rewards_from_episode(episode)[0][1] + rewards_dict[f"{episode.environment}_0"].append(reward) + else: + reward = get_rewards_from_episode(episode)[1][1] + rewards_dict[f"{episode.environment}_1"].append(reward) + dimensions = list(rewards_dict.values())[0][0].keys() + + def calc_variance(local_rewards_list: list[dict[str, float]]) -> dict[str, float]: + # get the variance within a list, discarded + local_var_reward_dict = {} + local_dimensions = local_rewards_list[0].keys() + assert set(local_dimensions) == set(dimensions), "dimensions should be the same" + for dimension in local_dimensions: + rewards = [reward[dimension] for reward in local_rewards_list] + avg_reward = sum(rewards) / len(rewards) + if len(rewards) == 1: + variance = 0.0 + else: + variance = sum([(reward - avg_reward) ** 2 for reward in rewards]) / ( + len(rewards) - 1 + ) + local_var_reward_dict[dimension] = variance + + return local_var_reward_dict + + def calc_average(list_to_average: list[float]) -> float: + return sum(list_to_average) / len(list_to_average) + + rewards_list = list(chain(*rewards_dict.values())) + + variance_reward_list = [calc_variance(rewards) for rewards in rewards_dict.values()] + for dimension in rewards_list[0].keys(): + avg_reward_dict[dimension] = calc_average( + [reward[dimension] for reward in rewards_list] + ) + avg_variance_dict[dimension] = calc_average( + [variance[dimension] for variance in variance_reward_list] + ) # average the variances for an estimation of the variance + + for dimension in rewards_list[0].keys(): + # calculate the margin of error by the averaged mean and variance + avg_variance = avg_variance_dict[dimension] + + combined_variance = avg_variance + combined_sem = math.sqrt( + combined_variance / len(rewards_list) + ) # sem = sqrt(variance / n), we use the averaged variance under different settings + + confidence_level = 0.95 + t_samples = np.random.standard_t(df=len(rewards_list) - 1, size=1000000) + + overall_t_value = np.percentile( + t_samples, 100 * (1 - (1 - confidence_level) / 2) + ) + + margin = overall_t_value * combined_sem + avg_margin_dict[dimension] = margin + + return_rewards_dict = { + key: (avg_reward_dict[key], avg_margin_dict[key]) + for key in avg_reward_dict.keys() + } + return_rewards_dict = { + **return_rewards_dict, + "setting_num": (float(len(variance_reward_list)), 0.0), + "episode_count": (float(len(rewards_list)), 0.0), + } + + return return_rewards_dict + + +def initialize_benchmark_combo(url: str) -> list[EnvAgentComboStorage]: + if url: + response = requests.get(url) + # Check if the request was successful + if response.status_code == 200: + data = response.json() + print("Data fetched successfully") + else: + print(f"Failed to fetch data. Status code: {response.status_code}") + raise ValueError("Failed to fetch data") + list_of_env_agent_combo_storage = [] + for combo in data: + env_agent_combo_storage = EnvAgentComboStorage( + env_id=combo["env_id"], agent_ids=combo["agent_ids"] + ) + list_of_env_agent_combo_storage.append(env_agent_combo_storage) + else: + list_of_env_agent_combo_storage = EnvAgentComboStorage.find().all() # type: ignore + return list_of_env_agent_combo_storage + + +def _set_up_logs( + *, + log_file_level: int = logging.DEBUG, + log_rich_level: int = logging.INFO, + log_format: str = "%(asctime)s - %(levelname)s - %(name)s - %(message)s", + log_file: str = datetime.now().strftime("./logs/%H_%M_%d_%m_%Y.log"), + print_logs: bool = False, +) -> None: + # date and message only + logging_path = Path(log_file) + logging_path.parent.mkdir(parents=True, exist_ok=True) + + logging.basicConfig( + level=log_file_level, + format=log_format, + datefmt="[%X]", + handlers=[ + FileHandler(logging_path), + RichHandler(level=log_rich_level) if print_logs else RichHandler(level=100), + ], + ) + + +def preprocess_episode_data( + episode_list_with_tag: list[EpisodeLog], +) -> dict[tuple[str, tuple[str, ...], tuple[str, ...]], bool]: + """Preprocess episodes into a dictionary for quick lookup.""" + episode_dict = {} + for episode in episode_list_with_tag: + assert isinstance(episode, EpisodeLog), "episode should be an EpisodeLog" + assert episode.models is not None, "episode.models should not be None" + episode_key = ( + episode.environment, + tuple(episode.agents), + tuple(episode.models), + ) + episode_dict[episode_key] = True + return episode_dict def check_existing_episodes( @@ -45,80 +226,129 @@ def check_existing_episodes( agent_ids: list[str], models: dict[str, LLM_Name], index: str, - tag: str | None = None, + episode_dict: dict[tuple[str, tuple[str, ...], tuple[str, ...]], bool], ) -> bool: - if tag: - existing_episode = EpisodeLog.find( - (EpisodeLog.environment == env_id) & (EpisodeLog.tag == tag) - ).all() - else: - existing_episode = EpisodeLog.find(EpisodeLog.environment == env_id).all() - if existing_episode: - for episode in existing_episode: - assert isinstance(episode, EpisodeLog), "episode should be an EpisodeLog" - models_list = ( - [models["env"], models["test_model"], models["partner_model"]] - if index == "0" - else [models["env"], models["partner_model"], models["test_model"]] + models_list = ( + (models["env"], models["test_model"], models["partner_model"]) + if index == "0" + else (models["env"], models["partner_model"], models["test_model"]) + ) + episode_key = (env_id, tuple(agent_ids), models_list) + return episode_dict.get(episode_key, False) + + +def run_async_benchmark_in_batch( + *, + env_agent_combo_list: list[EnvAgentCombo[Observation, AgentAction]], + batch_size: int = 1, + tag: str = "", + push_to_db: bool = False, + verbose: bool = False, +) -> None: + env_agent_combo_batch: list[EnvAgentCombo[Observation, AgentAction]] = [] + loop = asyncio.get_event_loop() + for env_agent_combo in tqdm( + env_agent_combo_list, + desc="Running all envs in batch", + ): + env_agent_combo_batch.append(env_agent_combo) + if len(env_agent_combo_batch) == batch_size: + logging.info( + f"Running batch of {batch_size} episodes: {env_agent_combo_batch}" + ) + loop.run_until_complete( + run_async_server( + sampler=BaseSampler[Observation, AgentAction](), + env_agent_combo_list=env_agent_combo_batch, + push_to_db=push_to_db, + tag=tag, + ) ) - if episode.agents == agent_ids and episode.models == models_list: - return True - return False + env_agent_combo_batch = [] else: - return False - + if env_agent_combo_batch: + logging.info( + f"Running batch of {batch_size} episodes: {env_agent_combo_batch}" + ) + loop.run_until_complete( + run_async_server( + sampler=BaseSampler[Observation, AgentAction](), + env_agent_combo_list=env_agent_combo_batch, + push_to_db=push_to_db, + tag=tag, + ) + ) + # remove episodes that has bad rewards + simulated_episodes = EpisodeLog.find(EpisodeLog.tag == tag).all() + valid_episodes = [ + not isinstance(relevant_episode.rewards[0], float) # type: ignore + for relevant_episode in simulated_episodes + ] + for valid, episode in zip(valid_episodes, simulated_episodes): + if not valid: + pk = episode.pk + assert isinstance(pk, str) + EpisodeLog.delete(pk) -def initilize_benchmark_combo(data: list[dict[str, str]]) -> list[EnvAgentComboStorage]: - list_of_env_agent_combo_storage = [] - for combo in data: - env_agent_combo_storage = EnvAgentComboStorage( - env_id=combo["env_id"], agent_ids=combo["agent_ids"] - ) - list_of_env_agent_combo_storage.append(env_agent_combo_storage) - return list_of_env_agent_combo_storage +def benchmark_display( + model_list: list[str] = default_model_list, + partner_model: str = "together_ai/meta-llama/Llama-3-70b-chat-hf", + evaluator_model: str = "gpt-4o", + task: str = "hard", + output_to_jsonl: bool = False, + save_dir: str = ".", +) -> dict[str, dict[str, tuple[float, float]]]: + """ + Usage: sotopia benchmark-display --model-list gpt-4o --model-list together_ai/meta-llama-Llama-3-70b-chat-hf + Aggregate all the results for the benchmark, as described in https://github.com/sotopia-lab/sotopia-space/blob/main/data_dir/models_vs_gpt35.jsonl + """ -def get_avg_reward(episodes: list[EpisodeLog], model_name: str) -> dict[str, float]: - rewards_list = [] - avg_reward_dict = {} - for episode in episodes: - assert episode.models is not None, "episode.models should not be None" - if episode.models[1] == model_name: - reward = get_rewards_from_episode(episode)[0][1] - else: - reward = get_rewards_from_episode(episode)[1][1] - rewards_list.append(reward) - for dimension in rewards_list[0].keys(): - rewards = [reward[dimension] for reward in rewards_list] - avg_reward = sum(rewards) / len(rewards) - avg_reward_dict[dimension] = avg_reward - return avg_reward_dict + print(f"Displaying performance for {model_list} vs {partner_model} on task {task}") + model_rewards_dict = dict() + for model in model_list: + tag = f"benchmark_{model}_{partner_model}_{evaluator_model}_{task}_trial0" + episodes = EpisodeLog.find(EpisodeLog.tag == tag).all() + if len(episodes) == 0: + print(f"No episodes found for {model}") + continue + avg_rewards = get_avg_reward(episodes, model) # type: ignore + model_rewards_dict[model] = avg_rewards + # print(f"Model: {model}, episodes: {len(episodes)}, Avg Rewards: {avg_rewards}") + rich.print(model_rewards_dict) + if model_rewards_dict: + display_in_table(model_rewards_dict) + if output_to_jsonl: + save_to_jsonl(model_rewards_dict, partner_model, save_dir) + else: + print("No episodes found for any model") + return model_rewards_dict def _list_all_env_agent_combo_not_in_db( model_names: dict[str, LLM_Name], - env_agent_combo_storage_list: list[EnvAgentComboStorage], - tag: str | None = None, + env_agent_combo_storage_index_list: list[tuple[EnvAgentComboStorage, str]], + tag: str = "", + task: str = "", ) -> list[EnvAgentCombo[Observation, AgentAction]]: - """We iterate over each environment and return the **first** env-agent combo that is not in the database.""" - hard_envs = EnvironmentList.get("01HAK34YPB1H1RWXQDASDKHSNS").environments - agent_index = EnvironmentList.get("01HAK34YPB1H1RWXQDASDKHSNS").agent_index - assert isinstance(agent_index, list), "agent_index should be a list" - - env_agent_combo_storage_index_list = [] - for env_id, index in zip(hard_envs, agent_index): - for env_agent_combo_storage in env_agent_combo_storage_list: - if env_agent_combo_storage.env_id == env_id: - env_agent_combo_storage_index_list.append( - (env_agent_combo_storage, index) - ) - + """Iterate over each environment and return the first env-agent combo not in the database.""" + assert tag, "tag should not be empty" + + # Preprocess the episodes for fast lookup + episode_list_with_tag: list[EpisodeLog] = EpisodeLog.find( + EpisodeLog.tag == tag + ).all() # type: ignore + episode_dict = preprocess_episode_data(episode_list_with_tag) list_of_env_agent_combo_storage = [] for env_agent_combo_storage, index in env_agent_combo_storage_index_list: agent_ids = env_agent_combo_storage.agent_ids env_id = env_agent_combo_storage.env_id if check_existing_episodes( - env_id=env_id, agent_ids=agent_ids, models=model_names, index=index, tag=tag + env_id=env_id, + agent_ids=agent_ids, + models=model_names, + index=index, + episode_dict=episode_dict, ): logging.info( f"Episode for {env_id} with agents {agent_ids} using {list(model_names.values())} already exists" @@ -154,133 +384,42 @@ def _list_all_env_agent_combo_not_in_db( return list_of_env_agent_combo_storage # type: ignore -def run_async_benchmark_in_batch( - *, - batch_size: int = 1, - model_names: dict[str, LLM_Name] = { - "env": "gpt-4", - "test_model": "gpt-3.5-turbo", - "partner_model": "gpt-3.5-turbo", - }, - tag: str | None = None, - push_to_db: bool = False, - verbose: bool = False, -) -> None: - url = "https://huggingface.co/datasets/cmu-lti/sotopia/resolve/main/benchmark_agents.json?raw=true" - response = requests.get(url) - # Check if the request was successful - if response.status_code == 200: - data = response.json() - print("Data fetched successfully") - else: - print(f"Failed to fetch data. Status code: {response.status_code}") - raise ValueError("Failed to fetch data") - benchmark_combo = initilize_benchmark_combo(data) - env_agent_combo_list = _list_all_env_agent_combo_not_in_db( - model_names=model_names, tag=tag, env_agent_combo_storage_list=benchmark_combo - ) - env_agent_combo_batch: list[EnvAgentCombo[Observation, AgentAction]] = [] - number_of_fix_turns = 0 - loop = asyncio.get_event_loop() - while True: - for env_agent_combo in tqdm( - env_agent_combo_list, - desc="Running all envs in batch", - ): - env_agent_combo_batch.append(env_agent_combo) - if len(env_agent_combo_batch) == batch_size: - logging.info( - f"Running batch of {batch_size} episodes: {env_agent_combo_batch}" - ) - loop.run_until_complete( - run_async_server( - sampler=BaseSampler[Observation, AgentAction](), - env_agent_combo_list=env_agent_combo_batch, - push_to_db=push_to_db, - tag=tag, - ) - ) - env_agent_combo_batch = [] - else: - if env_agent_combo_batch: - logging.info( - f"Running batch of {batch_size} episodes: {env_agent_combo_batch}" - ) - loop.run_until_complete( - run_async_server( - model_dict=model_names, - sampler=BaseSampler[Observation, AgentAction](), - env_agent_combo_list=env_agent_combo_batch, - push_to_db=push_to_db, - tag=tag, - ) - ) - # remove episodes that has bad rewards - simulated_episodes = EpisodeLog.find(EpisodeLog.tag == tag).all() - valid_episodes = [ - not isinstance(relevant_episode.rewards[0], float) # type: ignore - for relevant_episode in simulated_episodes - ] - for valid, episode in zip(valid_episodes, simulated_episodes): - if not valid: - pk = episode.pk - assert isinstance(pk, str) - EpisodeLog.delete(pk) - - env_agent_combo_list = _list_all_env_agent_combo_not_in_db( - model_names=model_names, - tag=tag, - env_agent_combo_storage_list=benchmark_combo, - ) - env_agent_combo_batch = [] - number_of_fix_turns += 1 - if len(env_agent_combo_list) == 0 or number_of_fix_turns >= 5: - rewards_dict = get_avg_reward( - simulated_episodes, # type: ignore - model_names["test_model"], - ) - rewards_dict["model_name"] = model_names["test_model"] # type: ignore - rewards_dict["episode_count"] = len(simulated_episodes) - rich.print(rewards_dict) - return - - -def _set_up_logs( - *, - log_file_level: int = logging.DEBUG, - log_rich_level: int = logging.INFO, - log_format: str = "%(asctime)s - %(levelname)s - %(name)s - %(message)s", - log_file: str = datetime.now().strftime("./logs/%H_%M_%d_%m_%Y.log"), - print_logs: bool = False, +def display_in_table( + model_rewards_dict: dict[str, dict[str, tuple[float, float]]], ) -> None: - # date and message only - logging_path = Path(log_file) - logging_path.parent.mkdir(parents=True, exist_ok=True) - - logging.basicConfig( - level=log_file_level, - format=log_format, - datefmt="[%X]", - handlers=[ - FileHandler(logging_path), - RichHandler(level=log_rich_level) if print_logs else RichHandler(level=100), - ], + table = rich.table.Table( + title="Rewards Evaluation (+/- CI bounds)", ) + table.add_column("Model") + for dimension in model_rewards_dict[list(model_rewards_dict.keys())[0]].keys(): + table.add_column(dimension) + table.add_column("Settings") + table.add_column("Episodes") + for model, rewards in model_rewards_dict.items(): + table.add_row( + model, + *( + [f"{rewards[k][0]:.2f} ± {rewards[k][1]:.2f}" for k in rewards.keys()] + + [f"{rewards[k][0]:.0f}" for k in ["setting_num", "episode_count"]] + ), + ) + rich.print(table) def save_to_jsonl( - model_rewards_dict: Dict[str, Dict[str, float]], + model_rewards_dict: dict[str, dict[str, tuple[float, float]]], partner_model: str, + save_dir: str, ) -> None: simplified_model_name = partner_model.split("/")[-1] - output_fn = f"./models_vs_{simplified_model_name}.jsonl" - outputs: List[str] = [] + output_fn = os.path.join(save_dir, f"models_vs_{simplified_model_name}.jsonl") + outputs: list[str] = [] for model, rewards in model_rewards_dict.items(): formatted_reward = OrderedDict( { "model_name": model, **{ - f"{v[0]} {v[1]}": rewards[k] + f"{v[0]} {v[1]}": rewards[k][0] for k, v in dimension_range_mapping.items() }, } @@ -292,71 +431,9 @@ def save_to_jsonl( print(f"Output saved to {output_fn}") -default_model_list: List[str] = [ - "gpt-4o", -] -dimension_range_mapping = OrderedDict( - { - "social_rules": ["SOC", [-10, 0]], - "secret": ["SEC", [-10, 0]], - "financial_and_material_benefits": ["FIN", [-5, 5]], - "relationship": ["REL", [-5, 5]], - "knowledge": ["KNO", [0, 10]], - "goal": ["GOAL", [0, 10]], - "believability": ["BEL", [0, 10]], - } -) - - -def display_in_table( - model_rewards_dict: Dict[str, Dict[str, float]], partner_model: str -) -> None: - table = rich.table.Table( - title="Model Performance when facing {}".format(partner_model) - ) - table.add_column("Model") - for dimension in dimension_range_mapping.keys(): - table.add_column(dimension) - for model, rewards in model_rewards_dict.items(): - table.add_row( - model, - *[f"{rewards[k]:.2f}" for k in dimension_range_mapping.keys()], - ) - rich.print(table) - - -def benchmark_display( - model_list: List[str] = default_model_list, - partner_model: str = "together_ai/meta-llama/Llama-3-70b-chat-hf", - evaluator_model: str = "gpt-4o", - task: str = "hard", - output_to_jsonl: bool = False, -) -> None: - """ - Usage: sotopia benchmark-display --model-list gpt-4o --model-list together_ai/meta-llama-Llama-3-70b-chat-hf - Aggregate all the results for the benchmark, as described in https://github.com/sotopia-lab/sotopia-space/blob/main/data_dir/models_vs_gpt35.jsonl - """ - - print(f"Displaying performance for {model_list} vs {partner_model} on task {task}") - model_rewards_dict = dict() - for model in model_list: - tag = f"benchmark_{model}_{partner_model}_{evaluator_model}_{task}_trial0" - episodes = EpisodeLog.find(EpisodeLog.tag == tag).all() - if len(episodes) == 0: - print(f"No episodes found for {model}") - continue - avg_rewards = get_avg_reward(episodes, model) # type: ignore - model_rewards_dict[model] = avg_rewards - print(f"Model: {model}, episodes: {len(episodes)}, Avg Rewards: {avg_rewards}") - - display_in_table(model_rewards_dict, partner_model) - if output_to_jsonl: - save_to_jsonl(model_rewards_dict, partner_model) - - @app.command() def benchmark( - models: List[str] = typer.Option( + models: list[str] = typer.Option( default_model_list, help=f"All the language model you want to benchmark. Default is the pre-loaded model list {default_model_list}.", ), @@ -369,17 +446,42 @@ def benchmark( ), batch_size: int = typer.Option(10, help="The batch size you want to use."), task: str = typer.Option("hard", help="The task id you want to benchmark."), + url: str = typer.Option("", help="The url to fetch the benchmark combo."), print_logs: bool = typer.Option(False, help="Print logs."), only_show_performance: bool = typer.Option(False, help="Only show performance."), output_to_jsonl: bool = typer.Option(False, help="Output to jsonl."), + push_to_db: bool = typer.Option(False, help="Push to db."), + save_dir: str = typer.Option(".", help="The directory to save the output."), ) -> None: if only_show_performance: - benchmark_display(models, partner_model, evaluator_model, task, output_to_jsonl) + benchmark_display( + models, partner_model, evaluator_model, task, output_to_jsonl, save_dir + ) return """A simple command-line interface example.""" _set_up_logs(print_logs=print_logs) + benchmark_combo = initialize_benchmark_combo(url) + if task == "hard": + hard_envs = EnvironmentList.get("01HAK34YPB1H1RWXQDASDKHSNS").environments + agent_index = EnvironmentList.get("01HAK34YPB1H1RWXQDASDKHSNS").agent_index + assert isinstance(agent_index, list), "agent_index should be a list" + env_agent_combo_storage_index_list = [] + for env_id, index in zip(hard_envs, agent_index): + for env_agent_combo_storage in benchmark_combo: + if env_agent_combo_storage.env_id == env_id: + env_agent_combo_storage_index_list.append( + (env_agent_combo_storage, index) + ) + else: + env_agent_combo_storage_index_list = [ + (env_agent_combo_storage, "1") + for env_agent_combo_storage in benchmark_combo + ] + [ + (env_agent_combo_storage, "0") + for env_agent_combo_storage in benchmark_combo + ] for model in models: typer.echo( f"Running benchmark for {model} chatting with {partner_model} on task {task} with {evaluator_model} as the evaluator." @@ -388,17 +490,37 @@ def benchmark( partner_model = cast(LLM_Name, partner_model) evaluator_model = cast(LLM_Name, evaluator_model) tag = f"benchmark_{model}_{partner_model}_{evaluator_model}_{task}_trial0" - run_async_benchmark_in_batch( - batch_size=batch_size, - model_names={ - "env": evaluator_model, - "test_model": model, - "partner_model": partner_model, - }, + typer.echo(typer.style(f"Tag: {tag}", fg=typer.colors.GREEN, bold=True)) + model_names = { + "env": evaluator_model, + "test_model": model, + "partner_model": partner_model, + } + env_agent_combo_list = _list_all_env_agent_combo_not_in_db( + model_names=model_names, tag=tag, - verbose=False, - push_to_db=True, + env_agent_combo_storage_index_list=env_agent_combo_storage_index_list, + task=task, ) + number_of_fix_turns = 0 + while True: + run_async_benchmark_in_batch( + env_agent_combo_list=env_agent_combo_list, + batch_size=batch_size, + tag=tag, + verbose=False, + push_to_db=push_to_db, + ) + env_agent_combo_list = _list_all_env_agent_combo_not_in_db( + model_names=model_names, + tag=tag, + env_agent_combo_storage_index_list=env_agent_combo_storage_index_list, + task=task, + ) + number_of_fix_turns += 1 + if len(env_agent_combo_list) == 0 or number_of_fix_turns >= 5: + return + benchmark_display( models, partner_model, evaluator_model, task, output_to_jsonl=output_to_jsonl ) diff --git a/sotopia/envs/evaluators.py b/sotopia/envs/evaluators.py index 71d5abc5c..848e9e626 100644 --- a/sotopia/envs/evaluators.py +++ b/sotopia/envs/evaluators.py @@ -201,7 +201,7 @@ def __call__( self, turn_number: int, messages: list[tuple[str, Message]] ) -> list[tuple[str, tuple[tuple[str, int | float | bool], str]]]: # Rule 1: If the conversation is too long, terminate the conversation - conversation_too_long = turn_number > self.max_turn_number + conversation_too_long = turn_number >= self.max_turn_number # Rule 2: If one of the players leaves, terminate the conversation p1_leaving = ( len(messages) > 1 diff --git a/sotopia/generation_utils/generate.py b/sotopia/generation_utils/generate.py index b5fd6d825..e5fc0f247 100644 --- a/sotopia/generation_utils/generate.py +++ b/sotopia/generation_utils/generate.py @@ -42,11 +42,14 @@ "together_ai/mistralai/Mixtral-8x22B-Instruct-v0.1", "together_ai/meta-llama/Llama-3-8b-chat-hf", "together_ai/meta-llama/Llama-3-70b-chat-hf", + "together_ai/meta-llama/Meta-Llama-3.1-405B-Instruct-Turbo", "gpt-3.5-turbo", + "gpt-3.5-turbo-16k-0613", "gpt-3.5-turbo-finetuned", "gpt-3.5-turbo-ft-MF", "gpt-4", - "gpt-4-turbo", + "gpt-4-turbo-2024-04-09", + "gpt-4o-2024-08-06" "gpt-4o-mini-2024-07-18", "human", "redis", "groq/llama3-70b-8192", diff --git a/tests/cli/test_benchmark.py b/tests/cli/test_benchmark.py new file mode 100644 index 000000000..b913dc7c2 --- /dev/null +++ b/tests/cli/test_benchmark.py @@ -0,0 +1,343 @@ +from sotopia.cli.benchmark.benchmark import get_avg_reward +from sotopia.database import EpisodeLog, AgentProfile, EnvironmentProfile +import numpy as np +import json + +from unittest.mock import patch + +from sotopia.cli.benchmark.benchmark import ( + benchmark, + benchmark_display, + run_async_benchmark_in_batch, +) +from unittest import mock +from unittest.mock import create_autospec +from sotopia.cli.benchmark.benchmark import initialize_benchmark_combo +from sotopia.database import EnvAgentComboStorage +import pytest + +from sotopia.envs.parallel import ParallelSotopiaEnv +from sotopia.messages import AgentAction, Observation +from sotopia.samplers import ( + EnvAgentCombo, +) +from sotopia.envs.evaluators import ( + EvaluationForTwoAgents, + ReachGoalLLMEvaluator, + RuleBasedTerminatedEvaluator, + SotopiaDimensions, +) +from sotopia.agents import LLMAgent + +dimensions = [ + "believability", + "relationship", + "knowledge", + "secret", + "social_rules", + "financial_and_material_benefits", + "goal", +] +model_pairs = [ + ["eval_model", "test_model", "not_test_model"], + ["eval_model", "not_test_model", "test_model"], +] +model_name = "test_model" + + +def get_mock_episodes() -> list[EpisodeLog]: + # all_episodes = EpisodeLog.find().all() + environment = EnvironmentProfile.find().all()[0] + agent = AgentProfile.find().all()[0] + + agent1_rewards = [float(i) for i, _ in enumerate(dimensions)] + agent2_rewards = [14.0 - reward for reward in agent1_rewards] + # agent2_rewards: reversed(agent1_rewards) + base_agent1_rewards = ( + sum(agent1_rewards) / len(agent1_rewards), + {dim: reward for dim, reward in zip(dimensions, agent1_rewards)}, + ) + base_agent2_rewards = ( + sum(agent2_rewards) / len(agent2_rewards), + {dim: reward for dim, reward in zip(dimensions, agent2_rewards)}, + ) + TEST_EPISODE_NUM = 5 + + target_rewards = [ + [base_agent1_rewards, base_agent2_rewards], + [base_agent2_rewards, base_agent1_rewards], + ] + target_episodes = [] + + for agent_pos in range(2): + for reward_pos in range(2): + for _ in range(TEST_EPISODE_NUM): + episode = EpisodeLog( + environment=environment.pk, + agents=[agent.pk, agent.pk], + tag="test", + models=model_pairs[agent_pos], + messages=[], + reasoning="", + rewards=target_rewards[reward_pos], + rewards_prompt="", + ) + target_episodes.append(episode) + return target_episodes + + +def get_mock_env_agents_profile() -> tuple[EnvironmentProfile, list[AgentProfile]]: + env_profile = EnvironmentProfile( + codename="test", + source="test", + scenario="Two people are talking", + agent_goals=[ + "You have 500 dollars and you want to buy the phone", + "You have a complete new iPhone 16 from Apple Store for $600 and you want to sell it", + ], + ) + agent_1 = AgentProfile( + first_name="John", + last_name="Doe", + age=25, + ) + agent_2 = AgentProfile( + first_name="Jane", + last_name="Doe", + age=25, + ) + + return env_profile, [agent_1, agent_2] + + +def mock_success_data() -> list[dict[str, str | list[str]]]: + data = get_mock_episodes()[:2] + return [ + { + "env_id": item.environment, + "agent_ids": item.agents, + } + for item in data + ] + + +def mock_success() -> mock.Mock: + mock_response = mock.Mock() + mock_response.status_code = 200 + mock_response.json.return_value = mock_success_data() + return mock_response + + +def mock_fail() -> mock.Mock: + mock_response = mock.Mock() + mock_response.status_code = 404 + return mock_response + + +def compose_env_agent_combo( + env_profile: EnvironmentProfile, agent_profiles: list[AgentProfile] +) -> EnvAgentCombo[Observation, AgentAction]: + env = ParallelSotopiaEnv( + env_profile=env_profile, + model_name="gpt-4o-mini", + evaluators=[RuleBasedTerminatedEvaluator(max_turn_number=1, max_stale_turn=2)], + terminal_evaluators=[ + ReachGoalLLMEvaluator( + "gpt-4o-mini", + EvaluationForTwoAgents[SotopiaDimensions], + ) + ], + ) + agents = [ + LLMAgent(agent_profile=agent_profile, model_name=agent_model) + for agent_profile, agent_model in zip( + agent_profiles, ["gpt-4o-mini", "gpt-4o-mini"] + ) + ] + + return (env, agents) + + +def test_get_rewards() -> None: + target_episodes = get_mock_episodes() + + test_rewards = get_avg_reward(target_episodes, model_name) + + # 1. check the episode count + assert test_rewards["episode_count"][0] == len( + target_episodes + ), f"Expected {len(target_episodes)}, got {test_rewards['episode_count']}" + + # 2. check average rewards + extracted_rewards = [test_rewards[dim][0] for dim in dimensions] + gt_rewards = [7.0 for _ in dimensions] + assert ( + extracted_rewards == gt_rewards + ), f"In average, expected {gt_rewards}, got {extracted_rewards} on dimensions {dimensions}" + + # 3. check the error bound + extracted_bound = [test_rewards[dim][1] for dim in dimensions] + sem = [1.6499, 1.4142, 1.1785, 0.9428, 0.7071, 0.4714, 0.2357] + # for [0, 1, 2, 3, 4, 5, 6] * 5 + [14, 13, 12, 11, 10, 9, 8] * 5 + # ppf = 2.093 for 95% confidence interval with 20 samples + gt_bound = [sem[i] * 2.093 for i in range(len(dimensions))] + assert np.allclose( + extracted_bound, gt_bound, atol=2e-2 + ), f"In error bound, expected {gt_bound}, got {extracted_bound} on dimensions {dimensions}" + + +mock_delete_function = create_autospec(lambda pk: None) + + +@patch("requests.get", side_effect=[mock_success(), mock_fail()]) +def test_initialize_benchmark_combo( + mock_requests_get: mock.Mock, +) -> None: + # Test status code 200 + resp_data = initialize_benchmark_combo( + url="http://localhost:5000" + ) # expect to get a non-empty list + assert ( + isinstance(resp_data, list) and len(resp_data) == 2 + ), f"Expected a length-2 list, but got {resp_data}" + assert ( + resp_data[0].agent_ids == get_mock_episodes()[0].agents + ), f"For agents, expected {get_mock_episodes()[0].agents}, but got {resp_data[0].agent_ids}" + + # Test status code 404 + with pytest.raises(ValueError) as excinfo: + _ = initialize_benchmark_combo( + url="http://localhost:5000" + ) # expect to get a ValueError + assert "Failed to fetch data" in str(excinfo.value) + + # Test get from database + EnvAgentComboStorage.find = mock.Mock(return_value=EnvAgentComboStorage) # type: ignore + EnvAgentComboStorage.all = mock.Mock(return_value=resp_data) # type: ignore + new_resp_data = initialize_benchmark_combo(url="") + assert ( + isinstance(new_resp_data, list) and len(new_resp_data) == 2 + ), f"Expected a length-2 list, but got {new_resp_data}" + for idx, (resp_item, new_item) in enumerate(zip(resp_data, new_resp_data)): + assert ( + resp_item.agent_ids == new_item.agent_ids + ), f"For agents in item {idx}, expected {resp_item.agent_ids}, but got {new_item.agent_ids}" + assert ( + resp_item.env_id == new_item.env_id + ), f"For env_id in item {idx}, expected {resp_item.env_id}, but got {new_item.env_id}" + + +# TODO fix the method assignment issue in mypy, ref: https://github.com/python/mypy/issues/2427 +def test_run_async_benchmark_in_batch() -> None: + return_value = get_mock_episodes()[:10] + return_value[0].rewards = [0.0, 0.0] + + env, agents = get_mock_env_agents_profile() + + with patch("sotopia.database.EpisodeLog.delete", mock_delete_function), patch( + "sotopia.database.EpisodeLog.find", return_value=EpisodeLog + ), patch("sotopia.database.EpisodeLog.all", return_value=return_value), patch( + "sotopia.database.AgentProfile.find", return_value=AgentProfile + ), patch("sotopia.database.AgentProfile.all", return_value=agents), patch( + "sotopia.database.AgentProfile.get", + return_value=lambda pk: agents[0] if pk == agents[0].pk else agents[1], + ), patch( + "sotopia.database.EnvironmentProfile.find", return_value=EnvironmentProfile + ), patch("sotopia.database.EnvironmentProfile.all", return_value=[env]), patch( + "sotopia.database.EnvironmentProfile.get", return_value=lambda pk: env + ): + assert ( + len(EpisodeLog.find().all()) == 10 + ), f"Expected 10 episodes in the database, but got {len(EpisodeLog.find().all())}" + + env_agent_combo_list = [ + compose_env_agent_combo( + env_profile=env, + agent_profiles=agents, + ) + ] + + run_async_benchmark_in_batch( + env_agent_combo_list=env_agent_combo_list, + batch_size=1, + push_to_db=False, + tag="test", + ) + + assert ( + mock_delete_function.call_count == 1 + ), f"Expected 1 call to delete, but got {mock_delete_function.call_count}" + + +mock_initialize = create_autospec(lambda: []) + + +@patch("sotopia.cli.benchmark.benchmark.initialize_benchmark_combo") +@patch("sotopia.cli.benchmark.benchmark.run_async_benchmark_in_batch") +def test_sotopia_benchmark( + mock_run_async_benchmark_in_batch: mock.Mock, + mock_initialize_benchmark_combo: mock.Mock = mock_initialize, +) -> None: + # Mainly test the benchmark workflow; Assume the benchmark_combo is correct + + with patch("sotopia.database.EpisodeLog.delete", mock_delete_function), patch( + "sotopia.database.EpisodeLog.find", return_value=EpisodeLog + ), patch("sotopia.database.EpisodeLog.all", return_value=get_mock_episodes()): + assert ( + len(EpisodeLog.find().all()) == 20 + ), f"Expected 20 episodes in the database, but got {len(EpisodeLog.find().all())}" + + # `output_to_jsonl` will be tested in the next test, `push_to_db` has been tested elsewhere, so only test `only_show_performance` + benchmark( + models=[model_name], + partner_model="not_test_model", + evaluator_model="eval_model", + url="", + only_show_performance=False, + output_to_jsonl=False, + push_to_db=False, + ) + mock_initialize_benchmark_combo.assert_called_once_with("") + + benchmark( + models=[model_name], + partner_model="not_test_model", + evaluator_model="eval_model", + url="", + only_show_performance=True, + output_to_jsonl=False, + push_to_db=False, + ) + mock_initialize_benchmark_combo.assert_called_once_with("") + + +def test_sotopia_benchmark_display() -> None: + # Mainly test the average reward calculation (similar to previous get_avg_rewards test) + + with patch("sotopia.database.EpisodeLog.delete", mock_delete_function), patch( + "sotopia.database.EpisodeLog.find", return_value=EpisodeLog + ), patch("sotopia.database.EpisodeLog.all", return_value=get_mock_episodes()): + assert ( + len(EpisodeLog.find().all()) == 20 + ), f"Expected 20 episodes in the database, but got {len(EpisodeLog.find().all())}" + displayed_stats = benchmark_display( + model_list=[model_name], + partner_model="not_test_model", + evaluator_model="eval_model", + output_to_jsonl=True, + save_dir="/tmp", + ) + + target_believability = (7.0, 3.4462887784189147) + assert np.allclose( + displayed_stats["test_model"]["believability"], + target_believability, + atol=0.02, + ), f"Got {displayed_stats['test_model']['believability']}, expected {target_believability}" + + benchmark_file = "/tmp/models_vs_not_test_model.jsonl" + recovered_data = [json.loads(line) for line in open(benchmark_file, "r")] + target_content = '{"model_name": "test_model", "SOC [-10, 0]": 7.0, "SEC [-10, 0]": 7.0, "FIN [-5, 5]": 7.0, "REL [-5, 5]": 7.0, "KNO [0, 10]": 7.0, "GOAL [0, 10]": 7.0, "BEL [0, 10]": 7.0}' + assert ( + str(recovered_data[0]).replace("'", '"') == target_content + ), f"Expected {target_content}, but got {recovered_data[0]}" From 2c1871b4e1e626a149d9912d2b3c582c1dc34bcf Mon Sep 17 00:00:00 2001 From: Hao Zhu Date: Wed, 28 Aug 2024 12:02:48 -0400 Subject: [PATCH 27/43] [Automated] Merge release into main (#177) * bump the version, test release to PyPi * Update README.md * Update README.md * Update README.md * bumpy version to 0.0.9 * Update Sotopia presentation information in README.md * bump version to 0.0.10 * bump version * add merge release back to main action * change checkout v4->v3 * fix merge-back-to-main and pin mypy to <1.11.0 --------- Co-authored-by: XuhuiZhou --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index df3f4dcb2..1582c097a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "sotopia" -version = "0.0.11" +version = "0.1.0-rc.1" description = "A platform for simulating and evaluating social interaction." authors = ["Hao Zhu , Xuhui Zhou "] license = "MIT License" From 1d35c78d524490332d0aae8df718c4cd9ae4aedd Mon Sep 17 00:00:00 2001 From: Xuhui Zhou Date: Thu, 29 Aug 2024 11:35:35 -0400 Subject: [PATCH 28/43] fix LLM_Name (#179) --- sotopia/generation_utils/generate.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sotopia/generation_utils/generate.py b/sotopia/generation_utils/generate.py index e5fc0f247..fc1f8b50f 100644 --- a/sotopia/generation_utils/generate.py +++ b/sotopia/generation_utils/generate.py @@ -49,7 +49,8 @@ "gpt-3.5-turbo-ft-MF", "gpt-4", "gpt-4-turbo-2024-04-09", - "gpt-4o-2024-08-06" "gpt-4o-mini-2024-07-18", + "gpt-4o-2024-08-06", + "gpt-4o-mini-2024-07-18", "human", "redis", "groq/llama3-70b-8192", From 88d043d08f4304243de75eb47a0e9a027cb45899 Mon Sep 17 00:00:00 2001 From: Hao Date: Mon, 2 Sep 2024 14:48:36 -0700 Subject: [PATCH 29/43] merge bug fix --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 1582c097a..8f000fa98 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "sotopia" -version = "0.1.0-rc.1" +version = "0.1.0-rc.2" description = "A platform for simulating and evaluating social interaction." authors = ["Hao Zhu , Xuhui Zhou "] license = "MIT License" From c9c411c3379b6d439a37779404bb60d8887ace5c Mon Sep 17 00:00:00 2001 From: "Chenghao (Alan) Yang" Date: Thu, 5 Sep 2024 16:02:28 -0500 Subject: [PATCH 30/43] upgrade default model to handle bad-foratted outputs to gpt-4o-mini as gpt-3.5-turbo is deprecated (#183) --- sotopia/generation_utils/generate.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sotopia/generation_utils/generate.py b/sotopia/generation_utils/generate.py index fc1f8b50f..8d517ec57 100644 --- a/sotopia/generation_utils/generate.py +++ b/sotopia/generation_utils/generate.py @@ -391,7 +391,7 @@ def format_bad_output_for_script( ill_formed_output: str, format_instructions: str, agents: list[str], - model_name: str = "gpt-3.5-turbo", + model_name: str = "gpt-4o-mini", ) -> BaseMessage: template = """ Given the string that can not be parsed by a parser, reformat it to a string that can be parsed by the parser which uses the following format instructions. Do not add or delete any information. @@ -425,7 +425,7 @@ def format_bad_output_for_script( def format_bad_output( ill_formed_output: BaseMessage, format_instructions: str, - model_name: str = "gpt-3.5-turbo", + model_name: str = "gpt-4o-mini", ) -> BaseMessage: template = """ Given the string that can not be parsed by json parser, reformat it to a string that can be parsed by json parser. From fbe84105afe2cd3d02d62bed44ddb0b59dd58f42 Mon Sep 17 00:00:00 2001 From: Hao Date: Thu, 5 Sep 2024 14:04:24 -0700 Subject: [PATCH 31/43] update pull request -> pull request target --- .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 99c317cc7..4694f3275 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -10,7 +10,7 @@ on: - main - release - dev - pull_request: + pull_request_target: branches: - main - release From 78e8eb834b266f8c68b8a49284381ff25a6de91f Mon Sep 17 00:00:00 2001 From: Hao Date: Thu, 5 Sep 2024 14:37:04 -0700 Subject: [PATCH 32/43] bump version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 8f000fa98..d67241321 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "sotopia" -version = "0.1.0-rc.2" +version = "0.1.0-rc.3" description = "A platform for simulating and evaluating social interaction." authors = ["Hao Zhu , Xuhui Zhou "] license = "MIT License" From be08a4b03bdb9b53271d2daeceeb900533c7a604 Mon Sep 17 00:00:00 2001 From: Hao Zhu Date: Mon, 9 Sep 2024 12:36:40 -0700 Subject: [PATCH 33/43] [Automated] Merge release into main (#181) * bump the version, test release to PyPi * Update README.md * Update README.md * Update README.md * bumpy version to 0.0.9 * Update Sotopia presentation information in README.md * bump version to 0.0.10 * bump version * add merge release back to main action * change checkout v4->v3 * fix merge-back-to-main and pin mypy to <1.11.0 * merge bug fix * upgrade default model to handle bad-foratted outputs to gpt-4o-mini as gpt-3.5-turbo is deprecated (#183) * update pull request -> pull request target * bump version --------- Co-authored-by: XuhuiZhou Co-authored-by: Chenghao (Alan) Yang --- .github/workflows/tests.yml | 2 +- pyproject.toml | 2 +- sotopia/generation_utils/generate.py | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 99c317cc7..4694f3275 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -10,7 +10,7 @@ on: - main - release - dev - pull_request: + pull_request_target: branches: - main - release diff --git a/pyproject.toml b/pyproject.toml index 1582c097a..d67241321 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "sotopia" -version = "0.1.0-rc.1" +version = "0.1.0-rc.3" description = "A platform for simulating and evaluating social interaction." authors = ["Hao Zhu , Xuhui Zhou "] license = "MIT License" diff --git a/sotopia/generation_utils/generate.py b/sotopia/generation_utils/generate.py index fc1f8b50f..8d517ec57 100644 --- a/sotopia/generation_utils/generate.py +++ b/sotopia/generation_utils/generate.py @@ -391,7 +391,7 @@ def format_bad_output_for_script( ill_formed_output: str, format_instructions: str, agents: list[str], - model_name: str = "gpt-3.5-turbo", + model_name: str = "gpt-4o-mini", ) -> BaseMessage: template = """ Given the string that can not be parsed by a parser, reformat it to a string that can be parsed by the parser which uses the following format instructions. Do not add or delete any information. @@ -425,7 +425,7 @@ def format_bad_output_for_script( def format_bad_output( ill_formed_output: BaseMessage, format_instructions: str, - model_name: str = "gpt-3.5-turbo", + model_name: str = "gpt-4o-mini", ) -> BaseMessage: template = """ Given the string that can not be parsed by json parser, reformat it to a string that can be parsed by json parser. From 830c4b058ad51ef7070b55737d91541f1a02f766 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Sep 2024 19:03:14 -0400 Subject: [PATCH 34/43] Bump pre-commit from 3.7.1 to 3.8.0 (#161) Bumps [pre-commit](https://github.com/pre-commit/pre-commit) from 3.7.1 to 3.8.0. - [Release notes](https://github.com/pre-commit/pre-commit/releases) - [Changelog](https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md) - [Commits](https://github.com/pre-commit/pre-commit/compare/v3.7.1...v3.8.0) --- updated-dependencies: - dependency-name: pre-commit dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> From b8a6dbcebc6b9228dd23a5bc96ca4b13109debb1 Mon Sep 17 00:00:00 2001 From: "Chenghao (Alan) Yang" Date: Tue, 24 Sep 2024 16:31:27 -0500 Subject: [PATCH 35/43] Add `bad_output_process_model` option and `use_fixed_model_version` option for all generation methods, to avoid future OpenAI API changes break Sotopia running. (#196) * Two major updates: 1) add "bad_output_process_model" option to all `agenerate_xxx()` methods so users can decide which model to use for handling bad outputs. By default, this is set to be `gpt-4o-mini`. 2) add `use_fixed_model_version` option for all generation methods, as some fixed model version may no longer available in the future. Users should have the right to bypass the fixed model version mapping instead of getting stuck in an error. Document (`generation.md`) has been updated for these two major changes correspondingly. * [autofix.ci] apply automated fixes --------- Co-authored-by: Chenghao Yang Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> --- docs/pages/concepts/generation.md | 16 +++++++ sotopia/generation_utils/generate.py | 70 +++++++++++++++++++++++++--- 2 files changed, 79 insertions(+), 7 deletions(-) diff --git a/docs/pages/concepts/generation.md b/docs/pages/concepts/generation.md index 41895aec3..8f633c6bc 100644 --- a/docs/pages/concepts/generation.md +++ b/docs/pages/concepts/generation.md @@ -12,6 +12,8 @@ async def agenerate( output_parser: BaseOutputParser[OutputType], temperature: float = 0.7, structured_output: bool = False, + bad_output_process_model: str = DEFAULT_BAD_OUTPUT_PROCESS_MODEL, + use_fixed_model_version: bool = True ) -> OutputType: input_variables = re.findall(r"(? Here are a few examples of how to use the `agenerate` function: @@ -37,6 +45,8 @@ async def agenerate_env_profile( inspiration_prompt: str = "asking my boyfriend to stop being friends with his ex", examples: str = "", temperature: float = 0.7, + bad_output_process_model: str = DEFAULT_BAD_OUTPUT_PROCESS_MODEL, + use_fixed_model_version: bool = True ) -> tuple[EnvironmentProfile, str]: """ Using langchain to generate the background @@ -56,6 +66,8 @@ async def agenerate_env_profile( ), output_parser=PydanticOutputParser(pydantic_object=EnvironmentProfile), temperature=temperature, + bad_output_process_model=bad_output_process_model, + use_fixed_model_version=use_fixed_model_version ) ``` ### Other generation functions @@ -66,6 +78,8 @@ Similarly, there are other utility functions that builds upon the `agenerate` fu async def agenerate_relationship_profile( model_name: str, agents_profiles: list[str], + bad_output_process_model: str = DEFAULT_BAD_OUTPUT_PROCESS_MODEL, + use_fixed_model_version: bool = True ) -> tuple[RelationshipProfile, str] ``` @@ -78,5 +92,7 @@ async def agenerate_script( agent_name: str = "", history: str = "", single_step: bool = False, + bad_output_process_model: str = DEFAULT_BAD_OUTPUT_PROCESS_MODEL, + use_fixed_model_version: bool = True ) -> tuple[ScriptInteractionReturnType, str] ``` diff --git a/sotopia/generation_utils/generate.py b/sotopia/generation_utils/generate.py index 8d517ec57..92c4c7457 100644 --- a/sotopia/generation_utils/generate.py +++ b/sotopia/generation_utils/generate.py @@ -55,6 +55,8 @@ "redis", "groq/llama3-70b-8192", ] +# subject to future OpenAI changes +DEFAULT_BAD_OUTPUT_PROCESS_MODEL = "gpt-4o-mini" OutputType = TypeVar("OutputType", bound=object) client = OpenAI() @@ -304,6 +306,7 @@ def obtain_chain( input_variables: list[str], temperature: float = 0.7, max_retries: int = 6, + use_fixed_model_version: bool = True, ) -> RunnableSerializable[dict[Any, Any], BaseMessage]: """ Using langchain to sample profiles for participants @@ -315,7 +318,8 @@ def obtain_chain( ) ) chat_prompt_template = ChatPromptTemplate.from_messages([human_message_prompt]) - model_name = _return_fixed_model_version(model_name) + if use_fixed_model_version: + model_name = _return_fixed_model_version(model_name) if model_name.startswith("together_ai"): model_name = "/".join(model_name.split("/")[1:]) chat_openai = ChatOpenAI( @@ -391,7 +395,8 @@ def format_bad_output_for_script( ill_formed_output: str, format_instructions: str, agents: list[str], - model_name: str = "gpt-4o-mini", + model_name: str = DEFAULT_BAD_OUTPUT_PROCESS_MODEL, + use_fixed_model_version: bool = True, ) -> BaseMessage: template = """ Given the string that can not be parsed by a parser, reformat it to a string that can be parsed by the parser which uses the following format instructions. Do not add or delete any information. @@ -410,6 +415,7 @@ def format_bad_output_for_script( model_name=model_name, template=template, input_variables=re.findall(r"{(.*?)}", template), + use_fixed_model_version=use_fixed_model_version, ) input_values = { "ill_formed_output": ill_formed_output, @@ -425,7 +431,8 @@ def format_bad_output_for_script( def format_bad_output( ill_formed_output: BaseMessage, format_instructions: str, - model_name: str = "gpt-4o-mini", + model_name: str = DEFAULT_BAD_OUTPUT_PROCESS_MODEL, + use_fixed_model_version: bool = True, ) -> BaseMessage: template = """ Given the string that can not be parsed by json parser, reformat it to a string that can be parsed by json parser. @@ -439,6 +446,7 @@ def format_bad_output( model_name=model_name, template=template, input_variables=re.findall(r"{(.*?)}", template), + use_fixed_model_version=use_fixed_model_version, ) input_values = { "ill_formed_output": ill_formed_output.content, @@ -458,6 +466,8 @@ async def agenerate( output_parser: BaseOutputParser[OutputType], temperature: float = 0.7, structured_output: bool = False, + bad_output_process_model: str = DEFAULT_BAD_OUTPUT_PROCESS_MODEL, + use_fixed_model_version: bool = True, ) -> OutputType: input_variables = re.findall( r"(? tuple[EnvironmentProfile, str]: """ Using langchain to generate the background @@ -549,6 +565,8 @@ async def agenerate_env_profile( ), output_parser=PydanticOutputParser(pydantic_object=EnvironmentProfile), temperature=temperature, + bad_output_process_model=bad_output_process_model, + use_fixed_model_version=use_fixed_model_version, ) @@ -556,6 +574,8 @@ async def agenerate_env_profile( async def agenerate_relationship_profile( model_name: str, agents_profiles: list[str], + bad_output_process_model: str = DEFAULT_BAD_OUTPUT_PROCESS_MODEL, + use_fixed_model_version: bool = True, ) -> tuple[RelationshipProfile, str]: """ Using langchain to generate the background @@ -572,6 +592,8 @@ async def agenerate_relationship_profile( agent_profile=agent_profile, ), output_parser=PydanticOutputParser(pydantic_object=RelationshipProfile), + bad_output_process_model=bad_output_process_model, + use_fixed_model_version=use_fixed_model_version, ) @@ -586,6 +608,8 @@ async def agenerate_action( goal: str, temperature: float = 0.7, script_like: bool = False, + bad_output_process_model: str = DEFAULT_BAD_OUTPUT_PROCESS_MODEL, + use_fixed_model_version: bool = True, ) -> AgentAction: """ Using langchain to generate an example episode @@ -635,6 +659,8 @@ async def agenerate_action( ), output_parser=PydanticOutputParser(pydantic_object=AgentAction), temperature=temperature, + bad_output_process_model=bad_output_process_model, + use_fixed_model_version=use_fixed_model_version, ) except Exception: return AgentAction(action_type="none", argument="") @@ -650,6 +676,8 @@ async def agenerate_script( agent_name: str = "", history: str = "", single_step: bool = False, + bad_output_process_model: str = DEFAULT_BAD_OUTPUT_PROCESS_MODEL, + use_fixed_model_version: bool = True, ) -> tuple[ScriptInteractionReturnType, str]: """ Using langchain to generate an the script interactions between two agent @@ -683,6 +711,8 @@ async def agenerate_script( single_turn=True, ), temperature=temperature, + bad_output_process_model=bad_output_process_model, + use_fixed_model_version=use_fixed_model_version, ) else: @@ -705,6 +735,8 @@ async def agenerate_script( single_turn=False, ), temperature=temperature, + bad_output_process_model=bad_output_process_model, + use_fixed_model_version=use_fixed_model_version, ) except Exception as e: # TODO raise(e) # Maybe we do not want to return anything? @@ -733,7 +765,12 @@ def process_history( @beartype -async def agenerate_init_profile(model_name: str, basic_info: dict[str, str]) -> str: +async def agenerate_init_profile( + model_name: str, + basic_info: dict[str, str], + bad_output_process_model: str = DEFAULT_BAD_OUTPUT_PROCESS_MODEL, + use_fixed_model_version: bool = True, +) -> str: """ Using langchain to generate the background """ @@ -767,11 +804,19 @@ async def agenerate_init_profile(model_name: str, basic_info: dict[str, str]) -> secret=basic_info["secret"], ), output_parser=StrOutputParser(), + bad_output_process_model=bad_output_process_model, + use_fixed_model_version=use_fixed_model_version, ) @beartype -async def convert_narratives(model_name: str, narrative: str, text: str) -> str: +async def convert_narratives( + model_name: str, + narrative: str, + text: str, + bad_output_process_model: str = DEFAULT_BAD_OUTPUT_PROCESS_MODEL, + use_fixed_model_version: bool = True, +) -> str: if narrative == "first": return await agenerate( model_name=model_name, @@ -780,6 +825,8 @@ async def convert_narratives(model_name: str, narrative: str, text: str) -> str: {text}""", input_values=dict(text=text), output_parser=StrOutputParser(), + bad_output_process_model=bad_output_process_model, + use_fixed_model_version=use_fixed_model_version, ) elif narrative == "second": return await agenerate( @@ -789,13 +836,20 @@ async def convert_narratives(model_name: str, narrative: str, text: str) -> str: {text}""", input_values=dict(text=text), output_parser=StrOutputParser(), + bad_output_process_model=bad_output_process_model, + use_fixed_model_version=use_fixed_model_version, ) else: raise ValueError(f"Narrative {narrative} is not supported.") @beartype -async def agenerate_goal(model_name: str, background: str) -> str: +async def agenerate_goal( + model_name: str, + background: str, + bad_output_process_model: str = DEFAULT_BAD_OUTPUT_PROCESS_MODEL, + use_fixed_model_version: bool = True, +) -> str: """ Using langchain to generate the background """ @@ -806,4 +860,6 @@ async def agenerate_goal(model_name: str, background: str) -> str: """, input_values=dict(background=background), output_parser=StrOutputParser(), + bad_output_process_model=bad_output_process_model, + use_fixed_model_version=use_fixed_model_version, ) From feef9036ee152dfde6b18424116bf917a52ab83b Mon Sep 17 00:00:00 2001 From: XuhuiZhou Date: Fri, 27 Sep 2024 14:28:46 -0400 Subject: [PATCH 36/43] fix gpt-3.5 --- sotopia/generation_utils/generate.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sotopia/generation_utils/generate.py b/sotopia/generation_utils/generate.py index 92c4c7457..9d3380bf6 100644 --- a/sotopia/generation_utils/generate.py +++ b/sotopia/generation_utils/generate.py @@ -288,7 +288,7 @@ def _return_fixed_model_version(model_name: str) -> str: "gpt-4-turbo", ]: return { - "gpt-3.5-turbo": "gpt-3.5-turbo-0613", + "gpt-3.5-turbo": "gpt-3.5-turbo-0125", "gpt-3.5-turbo-finetuned": "ft:gpt-3.5-turbo-0613:academicscmu::8nY2zgdt", "gpt-3.5-turbo-ft-MF": "ft:gpt-3.5-turbo-0613:academicscmu::8nuER4bO", "gpt-4": "gpt-4-0613", From a73ff48d6059b1e1801647799b19ce8f4f48b3f0 Mon Sep 17 00:00:00 2001 From: XuhuiZhou Date: Fri, 27 Sep 2024 14:42:34 -0400 Subject: [PATCH 37/43] replace gpt3.5 turbo for tests --- tests/envs/test_parallel.py | 8 ++++---- tests/generation_utils/test_generation.py | 4 ++-- tests/sampler/test_sampler.py | 10 +++++----- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/tests/envs/test_parallel.py b/tests/envs/test_parallel.py index 5b10889ad..6285135e9 100644 --- a/tests/envs/test_parallel.py +++ b/tests/envs/test_parallel.py @@ -21,14 +21,14 @@ async def test_parallel_sotopia_env() -> None: { "agent1": LLMAgent( "agent1", - model_name="gpt-3.5-turbo", + model_name="gpt-4o-mini", agent_profile=AgentProfile( **{"first_name": "John", "last_name": "Doe"} ), ), "agent2": LLMAgent( "agent2", - model_name="gpt-3.5-turbo", + model_name="gpt-4o-mini", agent_profile=AgentProfile( **{"first_name": "Jane", "last_name": "Doe"} ), @@ -66,7 +66,7 @@ async def test_parallel_sotopia_env_script_writing_single_step() -> None: { "agent1": LLMAgent( "agent1", - model_name="gpt-3.5-turbo", + model_name="gpt-4o-mini", agent_profile=AgentProfile( **{"first_name": "John", "last_name": "Doe"} ), @@ -74,7 +74,7 @@ async def test_parallel_sotopia_env_script_writing_single_step() -> None: ), "agent2": LLMAgent( "agent2", - model_name="gpt-3.5-turbo", + model_name="gpt-4o-mini", agent_profile=AgentProfile( **{"first_name": "Jane", "last_name": "Doe"} ), diff --git a/tests/generation_utils/test_generation.py b/tests/generation_utils/test_generation.py index af8ac7256..e7b91c336 100644 --- a/tests/generation_utils/test_generation.py +++ b/tests/generation_utils/test_generation.py @@ -17,7 +17,7 @@ async def test_agenerate_list_integer() -> None: """ length, lower, upper = 5, -10, 10 list_of_int = await agenerate( - "gpt-3.5-turbo", + "gpt-4o-mini", "{format_instructions}", {}, ListOfIntOutputParser(length, (lower, upper)), @@ -52,7 +52,7 @@ async def test_logging_behavior(caplog: Any) -> None: # Call the function under test caplog.set_level(15) await agenerate( - "gpt-3.5-turbo", + "gpt-4o-mini", "{format_instructions}", {}, ListOfIntOutputParser(5, (-10, 10)), diff --git a/tests/sampler/test_sampler.py b/tests/sampler/test_sampler.py index 64e6f6ebf..7e723df74 100644 --- a/tests/sampler/test_sampler.py +++ b/tests/sampler/test_sampler.py @@ -77,7 +77,7 @@ def test_uniform_sampler() -> None: ], ) env_params = { - "model_name": "gpt-3.5-turbo", + "model_name": "gpt-4o-mini", "action_order": "random", "evaluators": [ RuleBasedTerminatedEvaluator(), @@ -88,7 +88,7 @@ def test_uniform_sampler() -> None: agent_classes=[LLMAgent] * n_agent, n_agent=n_agent, env_params=env_params, - agents_params=[{"model_name": "gpt-3.5-turbo"}] * n_agent, + agents_params=[{"model_name": "gpt-4o-mini"}] * n_agent, ) ) agents = Agents({agent.agent_name: agent for agent in agent_list}) @@ -105,7 +105,7 @@ def test_constrain_sampler() -> None: env_candidates=[str(borrow_money.pk)] ) env_params = { - "model_name": "gpt-3.5-turbo", + "model_name": "gpt-4o-mini", "action_order": "random", "evaluators": [ RuleBasedTerminatedEvaluator(), @@ -118,7 +118,7 @@ def test_constrain_sampler() -> None: replacement=False, size=2, env_params=env_params, - agents_params=[{"model_name": "gpt-3.5-turbo"}] * n_agent, + agents_params=[{"model_name": "gpt-4o-mini"}] * n_agent, ) ) agents = Agents({agent.agent_name: agent for agent in agent_list}) @@ -130,7 +130,7 @@ def test_constrain_sampler() -> None: replacement=True, size=2, env_params=env_params, - agents_params=[{"model_name": "gpt-3.5-turbo"}] * n_agent, + agents_params=[{"model_name": "gpt-4o-mini"}] * n_agent, ) ) agents = Agents({agent.agent_name: agent for agent in agent_list}) From 1923c18cbde8d5ffb9e415158385ef8e927b34ef Mon Sep 17 00:00:00 2001 From: Hao Zhu Date: Tue, 1 Oct 2024 14:17:40 -0700 Subject: [PATCH 38/43] update gpt-3.5-turbo to gpt-4o-mini --- README.md | 4 ++-- docs/pages/concepts/agents.md | 4 ++-- docs/pages/index.mdx | 4 ++-- examples/benchmark_evaluator.py | 4 ++-- examples/experiment_eval.py | 4 ++-- examples/fix_missing_episodes.py | 4 ++-- examples/fix_missing_episodes_with_tag.py | 4 ++-- examples/generate_script.py | 2 +- examples/minimalist_demo.py | 4 ++-- sotopia/agents/generate_agent_background.py | 10 +++++----- sotopia/agents/llm_agent.py | 4 ++-- sotopia/envs/parallel.py | 2 +- sotopia/generation_utils/generate.py | 4 ++-- sotopia_conf/server_conf/server.gin | 2 +- 14 files changed, 28 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index fc7353266..f16a60888 100644 --- a/README.md +++ b/README.md @@ -74,8 +74,8 @@ asyncio.run( run_async_server( model_dict={ "env": "gpt-4", - "agent1": "gpt-3.5-turbo", - "agent2": "gpt-3.5-turbo", + "agent1": "gpt-4o-mini", + "agent2": "gpt-4o-mini", }, sampler=UniformSampler(), ) diff --git a/docs/pages/concepts/agents.md b/docs/pages/concepts/agents.md index c01d03203..741d345b3 100644 --- a/docs/pages/concepts/agents.md +++ b/docs/pages/concepts/agents.md @@ -11,7 +11,7 @@ class LLMAgent(BaseAgent[Observation, AgentAction]): agent_name: str | None = None, uuid_str: str | None = None, agent_profile: AgentProfile | None = None, - model_name: str = "gpt-3.5-turbo", + model_name: str = "gpt-4o-mini", script_like: bool = False, ) -> None: ``` @@ -26,7 +26,7 @@ class ScriptWritingAgent(LLMAgent): agent_name: str | None = None, uuid_str: str | None = None, agent_profile: AgentProfile | None = None, - model_name: str = "gpt-3.5-turbo", + model_name: str = "gpt-4o-mini", agent_names: list[str] = [], background: ScriptBackground | None = None, ) -> None: diff --git a/docs/pages/index.mdx b/docs/pages/index.mdx index 01904b0d5..017b24598 100644 --- a/docs/pages/index.mdx +++ b/docs/pages/index.mdx @@ -206,8 +206,8 @@ asyncio.run( run_async_server( model_dict={ "env": "gpt-4", - "agent1": "gpt-3.5-turbo", - "agent2": "gpt-3.5-turbo", + "agent1": "gpt-4o-mini", + "agent2": "gpt-4o-mini", }, sampler=UniformSampler(), ) diff --git a/examples/benchmark_evaluator.py b/examples/benchmark_evaluator.py index 83fe32804..6d94b8850 100644 --- a/examples/benchmark_evaluator.py +++ b/examples/benchmark_evaluator.py @@ -15,8 +15,8 @@ target_model_patterns: list[list[str]] = [ ["gpt-4", "gpt-4", "gpt-3.5-turbo"], - ["gpt-4", "gpt-3.5-turbo", "gpt-4"], - ["gpt-4", "gpt-3.5-turbo", "togethercomputer/llama-2-70b-chat"], + ["gpt-4", "gpt-4o-mini", "gpt-4"], + ["gpt-4", "gpt-4o-mini", "togethercomputer/llama-2-70b-chat"], ["gpt-4", "togethercomputer/llama-2-70b-chat", "gpt-3.5-turbo"], ] diff --git a/examples/experiment_eval.py b/examples/experiment_eval.py index 7527c091d..1c01ef8a6 100644 --- a/examples/experiment_eval.py +++ b/examples/experiment_eval.py @@ -170,8 +170,8 @@ def run_async_server_in_batch( batch_size: int = 1, model_names: dict[str, LLM_Name] = { "env": "gpt-4", - "agent1": "gpt-3.5-turbo", - "agent2": "gpt-3.5-turbo", + "agent1": "gpt-4o-mini", + "agent2": "gpt-4o-mini", }, tag: str | None = None, verbose: bool = False, diff --git a/examples/fix_missing_episodes.py b/examples/fix_missing_episodes.py index 9211aebd9..8f999d2af 100644 --- a/examples/fix_missing_episodes.py +++ b/examples/fix_missing_episodes.py @@ -252,8 +252,8 @@ def re_run_missing_episodes( combo_with_models: dict[tuple[LLM_Name, LLM_Name], list[tuple[str, str, str]]], model_names: dict[str, LLM_Name] = { "env": "gpt-4", - "agent1": "gpt-3.5-turbo", - "agent2": "gpt-3.5-turbo", + "agent1": "gpt-4o-mini", + "agent2": "gpt-4o-mini", }, batch_size: int = 5, verbose: bool = False, diff --git a/examples/fix_missing_episodes_with_tag.py b/examples/fix_missing_episodes_with_tag.py index 7cd8d1abf..31b9ee8fd 100644 --- a/examples/fix_missing_episodes_with_tag.py +++ b/examples/fix_missing_episodes_with_tag.py @@ -350,8 +350,8 @@ def re_run_missing_episodes( env_agent_ids: List[Tuple[str, str, str]] = [], model_names: dict[str, LLM_Name] = { "env": "gpt-4", - "agent1": "gpt-3.5-turbo", - "agent2": "gpt-3.5-turbo", + "agent1": "gpt-4o-mini", + "agent2": "gpt-4o-mini", }, batch_size: int = 5, rerun_tag: str = "missing_episodes", diff --git a/examples/generate_script.py b/examples/generate_script.py index b6005e735..2224baa6d 100644 --- a/examples/generate_script.py +++ b/examples/generate_script.py @@ -175,7 +175,7 @@ def full_freeform( def run_async_server_in_batch_script( *, batch_size: int = 10, - model: LLM_Name = "gpt-3.5-turbo", + model: LLM_Name = "gpt-4o-mini", tag: str | None = None, push_to_db: bool = True, json_in_script: bool = False, diff --git a/examples/minimalist_demo.py b/examples/minimalist_demo.py index 1a3c119c9..a80cc8ed6 100644 --- a/examples/minimalist_demo.py +++ b/examples/minimalist_demo.py @@ -28,8 +28,8 @@ run_async_server( model_dict={ "env": "gpt-4", - "agent1": "gpt-3.5-turbo", - "agent2": "gpt-3.5-turbo", + "agent1": "gpt-4o-mini", + "agent2": "gpt-4o-mini", }, sampler=UniformSampler(), ) diff --git a/sotopia/agents/generate_agent_background.py b/sotopia/agents/generate_agent_background.py index ede46a0ec..8532fcb00 100644 --- a/sotopia/agents/generate_agent_background.py +++ b/sotopia/agents/generate_agent_background.py @@ -20,13 +20,13 @@ async def generate_background( else: initial_profile = str(basic_info) profile = await agenerate_init_profile( - model_name="gpt-3.5-turbo", basic_info=basic_info + model_name="gpt-4o-mini", basic_info=basic_info ) first_narrative = convert_narratives( - model_name="gpt-3.5-turbo", narrative="first", text=profile + model_name="gpt-4o-mini", narrative="first", text=profile ) second_narrative = convert_narratives( - model_name="gpt-3.5-turbo", narrative="second", text=profile + model_name="gpt-4o-mini", narrative="second", text=profile ) previous_messages = [] return ( @@ -67,8 +67,8 @@ def generate_background_conversation( json.dump(background_dict, f, indent=4) model_names: dict[str, str] = { - "env": "gpt-3.5-turbo", - "agent2": "gpt-3.5-turbo", + "env": "gpt-4o-mini", + "agent2": "gpt-4o-mini", "agent1": "gpt-4", } diff --git a/sotopia/agents/llm_agent.py b/sotopia/agents/llm_agent.py index 7779ab97a..d92e3e720 100644 --- a/sotopia/agents/llm_agent.py +++ b/sotopia/agents/llm_agent.py @@ -27,7 +27,7 @@ def __init__( agent_name: str | None = None, uuid_str: str | None = None, agent_profile: AgentProfile | None = None, - model_name: str = "gpt-3.5-turbo", + model_name: str = "gpt-4o-mini", script_like: bool = False, ) -> None: super().__init__( @@ -99,7 +99,7 @@ def __init__( agent_name: str | None = None, uuid_str: str | None = None, agent_profile: AgentProfile | None = None, - model_name: str = "gpt-3.5-turbo", + model_name: str = "gpt-4o-mini", agent_names: list[str] = [], background: ScriptBackground | None = None, ) -> None: diff --git a/sotopia/envs/parallel.py b/sotopia/envs/parallel.py index bb0b733c3..a1aa9c446 100644 --- a/sotopia/envs/parallel.py +++ b/sotopia/envs/parallel.py @@ -130,7 +130,7 @@ def __init__( ["none", "speak", "non-verbal communication", "action", "leave"] ), action_order: Literal["simultaneous", "round-robin", "random"] = "simultaneous", - model_name: str = "gpt-3.5-turbo", + model_name: str = "gpt-4o-mini", evaluators: list[Evaluator] = [], terminal_evaluators: list[Evaluator] = [], uuid_str: str | None = None, diff --git a/sotopia/generation_utils/generate.py b/sotopia/generation_utils/generate.py index 9d3380bf6..3b0408d47 100644 --- a/sotopia/generation_utils/generate.py +++ b/sotopia/generation_utils/generate.py @@ -43,7 +43,7 @@ "together_ai/meta-llama/Llama-3-8b-chat-hf", "together_ai/meta-llama/Llama-3-70b-chat-hf", "together_ai/meta-llama/Meta-Llama-3.1-405B-Instruct-Turbo", - "gpt-3.5-turbo", + "gpt-4o-mini", "gpt-3.5-turbo-16k-0613", "gpt-3.5-turbo-finetuned", "gpt-3.5-turbo-ft-MF", @@ -281,7 +281,7 @@ def _type(self) -> str: def _return_fixed_model_version(model_name: str) -> str: if model_name in [ - "gpt-3.5-turbo", + "gpt-4o-mini", "gpt-3.5-turbo-finetuned", "gpt-3.5-turbo-ft-MF", "gpt-4", diff --git a/sotopia_conf/server_conf/server.gin b/sotopia_conf/server_conf/server.gin index 440dd6440..ed5c6c5bc 100644 --- a/sotopia_conf/server_conf/server.gin +++ b/sotopia_conf/server_conf/server.gin @@ -9,7 +9,7 @@ PUSH_TO_DB=False OMNISCIENT=False server.run_async_server: - model_dict={"env": "gpt-4", "agent1": "gpt-3.5-turbo", "agent2": "gpt-3.5-turbo"} + model_dict={"env": "gpt-4", "agent1": "gpt-4o-mini", "agent2": "gpt-3.5-turbo"} action_order=%ACTION_ORDER push_to_db=%PUSH_TO_DB using_async=True From db8839e4eb9bf8635a82c2a78410d30cd53c4699 Mon Sep 17 00:00:00 2001 From: Hao Zhu Date: Tue, 1 Oct 2024 14:25:21 -0700 Subject: [PATCH 39/43] bug fix for return fixed model version function --- sotopia/generation_utils/generate.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sotopia/generation_utils/generate.py b/sotopia/generation_utils/generate.py index 3b0408d47..f9d1e9240 100644 --- a/sotopia/generation_utils/generate.py +++ b/sotopia/generation_utils/generate.py @@ -281,7 +281,7 @@ def _type(self) -> str: def _return_fixed_model_version(model_name: str) -> str: if model_name in [ - "gpt-4o-mini", + "gpt-3.5-turbo", "gpt-3.5-turbo-finetuned", "gpt-3.5-turbo-ft-MF", "gpt-4", From 0fcfcb0ffc7ee6be48014b3ba439acceca51ef5c Mon Sep 17 00:00:00 2001 From: XuhuiZhou Date: Fri, 4 Oct 2024 13:20:36 -0400 Subject: [PATCH 40/43] fix sampling error --- sotopia/samplers/constraint_based_sampler.py | 10 ++++++++-- sotopia/samplers/uniform_sampler.py | 10 ++++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/sotopia/samplers/constraint_based_sampler.py b/sotopia/samplers/constraint_based_sampler.py index 624520dcd..28f127a20 100644 --- a/sotopia/samplers/constraint_based_sampler.py +++ b/sotopia/samplers/constraint_based_sampler.py @@ -87,10 +87,16 @@ def sample( agents_which_fit_scenario: list[list[str]] = [] if self.env_candidates is None: - self.env_candidates = EnvironmentProfile.all() + env_candidates = EnvironmentProfile.all() + if not env_candidates: + raise ValueError("No environment candidates available for sampling.") + self.env_candidates = env_candidates if self.agent_candidates is None: - self.agent_candidates = AgentProfile.all() + agent_candidates = AgentProfile.all() + if not agent_candidates: + raise ValueError("No agent candidates available for sampling.") + self.agent_candidates = agent_candidates agent_candidate_ids: set[str] | None = None if self.agent_candidates: diff --git a/sotopia/samplers/uniform_sampler.py b/sotopia/samplers/uniform_sampler.py index 22c89f3c3..bfb729f55 100644 --- a/sotopia/samplers/uniform_sampler.py +++ b/sotopia/samplers/uniform_sampler.py @@ -47,10 +47,16 @@ def sample( assert replacement, "Uniform sampling without replacement is not supported yet" if self.env_candidates is None: - self.env_candidates = EnvironmentProfile.all() + env_candidates = EnvironmentProfile.all() + if not env_candidates: + raise ValueError("No environment candidates available for sampling.") + self.env_candidates = env_candidates if self.agent_candidates is None: - self.agent_candidates = AgentProfile.all() + agent_candidates = AgentProfile.all() + if not agent_candidates: + raise ValueError("No agent candidates available for sampling.") + self.agent_candidates = agent_candidates for _ in range(size): env_profile = random.choice(self.env_candidates) From cd31c721fe165852c99b7add934cc624de5ba1ae Mon Sep 17 00:00:00 2001 From: XuhuiZhou Date: Fri, 4 Oct 2024 14:17:28 -0400 Subject: [PATCH 41/43] fix rc.4 --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index d67241321..00c5dd5f4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "sotopia" -version = "0.1.0-rc.3" +version = "0.1.0-rc.4" description = "A platform for simulating and evaluating social interaction." authors = ["Hao Zhu , Xuhui Zhou "] license = "MIT License" From 12e74a63063c3e369ec26ceb4aff69ccddcd3a81 Mon Sep 17 00:00:00 2001 From: XuhuiZhou Date: Fri, 4 Oct 2024 16:43:37 -0400 Subject: [PATCH 42/43] new tag --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 00c5dd5f4..ee1c5e975 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "sotopia" -version = "0.1.0-rc.4" +version = "0.1.0-rc.5" description = "A platform for simulating and evaluating social interaction." authors = ["Hao Zhu , Xuhui Zhou "] license = "MIT License" From 36f9ce9ac076e33dfd99559d0342f029a59101d0 Mon Sep 17 00:00:00 2001 From: Hao Date: Fri, 11 Oct 2024 19:53:12 -0700 Subject: [PATCH 43/43] update version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index ee1c5e975..864f1b070 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "sotopia" -version = "0.1.0-rc.5" +version = "0.1.0" description = "A platform for simulating and evaluating social interaction." authors = ["Hao Zhu , Xuhui Zhou "] license = "MIT License"
-
-

For prolific annotators

-

- If you are directly guided to this page without annotation, it - indicates that there is no left data for annotation now. -

-

- You could join the annotation multiple times and we would assign - different data points for you automatically. -

-

- Thank you a lot for participating the official test for the social - evaluation test. -

-

- Please redirect to - here - to get paid -

-

- Alternatively, you can use xxxxxxxx as your code to get - money. -

-

- Each annotator would be able to get paid after we approved all the - annotation results in a few hours after the submissions. -

-

Please leave me a message if you have any questions.

-
-